@eternalheart/ngx-file-preview
Version:
A powerful Angular file preview component library supporting multiple file formats including images, videos, PDFs, Office documents, text files and more.
115 lines • 13.8 kB
JavaScript
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import * as i0 from "@angular/core";
export class ThemeService {
constructor(renderer) {
this.renderer = renderer;
this.THEME_KEY = 'fp-theme-mode';
this.themeSubject$ = new BehaviorSubject('dark');
this.autoConfig = {
dark: { start: 18, end: 6 }
};
this.systemThemeQuery = null;
this.systemThemeListener = null;
this.localDomElement = null;
}
/**
* 绑定最外围元素
* @param domElement
*/
bindElement(domElement) {
this.localDomElement = domElement;
}
ngOnInit() {
if (window.matchMedia) {
this.systemThemeQuery = window.matchMedia('(prefers-color-scheme: dark)');
this.systemThemeListener = (e) => {
if (this.theme === 'auto') {
this.checkAndApplyAutoTheme();
}
};
this.systemThemeQuery.addEventListener('change', this.systemThemeListener);
}
this.applyTheme('dark');
}
get theme() {
return this.themeSubject$.getValue();
}
getThemeObservable() {
return this.themeSubject$.asObservable();
}
setMode(mode) {
this.themeSubject$.next(mode);
if (mode === 'auto') {
this.startAutoCheck();
}
else {
this.stopAutoCheck();
this.applyTheme(mode);
}
}
setAutoConfig(config) {
this.autoConfig = { ...this.autoConfig, ...config };
if (this.themeSubject$.getValue() === 'auto') {
this.checkAndApplyAutoTheme();
}
}
startAutoCheck() {
this.checkAndApplyAutoTheme();
this.autoChangeTimer = setInterval(() => {
this.checkAndApplyAutoTheme();
}, 60000); // 每分钟检查一次
}
stopAutoCheck() {
if (this.autoChangeTimer) {
clearInterval(this.autoChangeTimer);
this.autoChangeTimer = null;
}
}
checkAndApplyAutoTheme() {
const hour = new Date().getHours();
const { start, end } = this.autoConfig.dark;
// 检查是否在暗色时间范围内
const isDarkTime = start > end
? (hour >= start || hour < end) // 跨夜间
: (hour >= start && hour < end); // 同一天内
// 检查系统主题
const prefersDark = this.systemThemeQuery?.matches ?? false;
// 优先使用时间判断,其次使用系统主题
this.applyTheme(isDarkTime || prefersDark ? 'dark' : 'light');
}
applyTheme(theme) {
// 更新当前主题
this.themeSubject$.next(theme);
if (this.localDomElement) {
// 移除现有主题
this.renderer.removeAttribute(this.localDomElement, 'data-nfp-theme');
// 应用新主题
if (theme === 'dark') {
this.renderer.setAttribute(this.localDomElement, 'data-nfp-theme', 'dark');
}
else {
this.renderer.setAttribute(this.localDomElement, 'data-nfp-theme', 'light');
}
}
// 保存到本地存储
localStorage.setItem(this.THEME_KEY, theme);
}
toggleTheme() {
const newTheme = this.theme === 'light' ? 'dark' : 'light';
this.setMode(newTheme);
}
ngOnDestroy() {
this.stopAutoCheck();
// 清理系统主题监听
if (this.systemThemeQuery && this.systemThemeListener) {
this.systemThemeQuery.removeEventListener('change', this.systemThemeListener);
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ThemeService, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i0.Renderer2 }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmd4LWZpbGUtcHJldmlldy9zcmMvbGliL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUlyQyxNQUFNLE9BQU8sWUFBWTtJQVd2QixZQUFvQixRQUFtQjtRQUFuQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBVnRCLGNBQVMsR0FBRyxlQUFlLENBQUM7UUFDckMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBWSxNQUFNLENBQUMsQ0FBQztRQUN2RCxlQUFVLEdBQW9CO1lBQ3BDLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBQztTQUMxQixDQUFDO1FBR0YscUJBQWdCLEdBQTBCLElBQUksQ0FBQztRQUN2Qyx3QkFBbUIsR0FBOEMsSUFBSSxDQUFDO1FBQ3RFLG9CQUFlLEdBQXVCLElBQUksQ0FBQztJQUVuRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLFVBQXVCO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUMxRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDaEMsQ0FBQztZ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UUFBUTtZQUNSLElBQUksS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzlFLENBQUM7UUFDSCxDQUFDO1FBQ0QsVUFBVTtRQUNWLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsV0FBVztRQUNULE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLFdBQVc7UUFDWCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7SUFDSCxDQUFDOytHQXZIVSxZQUFZO21IQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0F1dG9UaGVtZUNvbmZpZywgVGhlbWVNb2RlfSBmcm9tICcuLi90eXBlcy90aGVtZS50eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUaGVtZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IFRIRU1FX0tFWSA9ICdmcC10aGVtZS1tb2RlJztcbiAgcHJpdmF0ZSB0aGVtZVN1YmplY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUaGVtZU1vZGU+KCdkYXJrJyk7XG4gIHByaXZhdGUgYXV0b0NvbmZpZzogQXV0b1RoZW1lQ29uZmlnID0ge1xuICAgIGRhcms6IHtzdGFydDogMTgsIGVuZDogNn1cbiAgfTtcblxuICBwcml2YXRlIGF1dG9DaGFuZ2VUaW1lcjogYW55O1xuICBzeXN0ZW1UaGVtZVF1ZXJ5OiBNZWRpYVF1ZXJ5TGlzdCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN5c3RlbVRoZW1lTGlzdGVuZXI6ICgoZTogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsb2NhbERvbUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICB9XG5cbiAgLyoqXG4gICAqIOe7keWumuacgOWkluWbtOWFg+e0oFxuICAgKiBAcGFyYW0gZG9tRWxlbWVudFxuICAgKi9cbiAgYmluZEVsZW1lbnQoZG9tRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICB0aGlzLmxvY2FsRG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEpIHtcbiAgICAgIHRoaXMuc3lzdGVtVGhlbWVRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJyk7XG4gICAgICB0aGlzLnN5c3RlbVRoZW1lTGlzdGVuZXIgPSAoZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy50aGVtZSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0FuZEFwcGx5QXV0b1RoZW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB0aGlzLnN5c3RlbVRoZW1lUXVlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5zeXN0ZW1UaGVtZUxpc3RlbmVyKTtcbiAgICB9XG4gICAgdGhpcy5hcHBseVRoZW1lKCdkYXJrJyk7XG4gIH1cblxuICBnZXQgdGhlbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbWVTdWJqZWN0JC5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgZ2V0VGhlbWVPYnNlcnZhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRoZW1lU3ViamVjdCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBzZXRNb2RlKG1vZGU6IFRoZW1lTW9kZSkge1xuICAgIHRoaXMudGhlbWVTdWJqZWN0JC5uZXh0KG1vZGUpO1xuICAgIGlmIChtb2RlID09PSAnYXV0bycpIHtcbiAgICAgIHRoaXMuc3RhcnRBdXRvQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9wQXV0b0NoZWNrKCk7XG4gICAgICB0aGlzLmFwcGx5VGhlbWUobW9kZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXV0b0NvbmZpZyhjb25maWc6IEF1dG9UaGVtZUNvbmZpZykge1xuICAgIHRoaXMuYXV0b0NvbmZpZyA9IHsuLi50aGlzLmF1dG9Db25maWcsIC4uLmNvbmZpZ307XG4gICAgaWYgKHRoaXMudGhlbWVTdWJqZWN0JC5nZXRWYWx1ZSgpID09PSAnYXV0bycpIHtcbiAgICAgIHRoaXMuY2hlY2tBbmRBcHBseUF1dG9UaGVtZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRBdXRvQ2hlY2soKSB7XG4gICAgdGhpcy5jaGVja0FuZEFwcGx5QXV0b1RoZW1lKCk7XG4gICAgdGhpcy5hdXRvQ2hhbmdlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrQW5kQXBwbHlBdXRvVGhlbWUoKTtcbiAgICB9LCA2MDAwMCk7IC8vIOavj+WIhumSn+ajgOafpeS4gOasoVxuICB9XG5cbiAgcHJpdmF0ZSBzdG9wQXV0b0NoZWNrKCkge1xuICAgIGlmICh0aGlzLmF1dG9DaGFuZ2VUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9DaGFuZ2VUaW1lcik7XG4gICAgICB0aGlzLmF1dG9DaGFuZ2VUaW1lciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZEFwcGx5QXV0b1RoZW1lKCkge1xuICAgIGNvbnN0IGhvdXIgPSBuZXcgRGF0ZSgpLmdldEhvdXJzKCk7XG4gICAgY29uc3Qge3N0YXJ0LCBlbmR9ID0gdGhpcy5hdXRvQ29uZmlnLmRhcms7XG5cbiAgICAvLyDmo4Dmn6XmmK/lkKblnKjmmpfoibLml7bpl7TojIPlm7TlhoVcbiAgICBjb25zdCBpc0RhcmtUaW1lID0gc3RhcnQgPiBlbmRcbiAgICAgID8gKGhvdXIgPj0gc3RhcnQgfHwgaG91ciA8IGVuZCkgIC8vIOi3qOWknOmXtFxuICAgICAgOiAoaG91ciA+PSBzdGFydCAmJiBob3VyIDwgZW5kKTsgLy8g5ZCM5LiA5aSp5YaFXG5cbiAgICAvLyDmo4Dmn6Xns7vnu5/kuLvpophcbiAgICBjb25zdCBwcmVmZXJzRGFyayA9IHRoaXMuc3lzdGVtVGhlbWVRdWVyeT8ubWF0Y2hlcyA/PyBmYWxzZTtcblxuICAgIC8vIOS8mOWFiOS9v+eUqOaXtumXtOWIpOaWre+8jOWFtuasoeS9v+eUqOezu+e7n+S4u+mimFxuICAgIHRoaXMuYXBwbHlUaGVtZShpc0RhcmtUaW1lIHx8IHByZWZlcnNEYXJrID8gJ2RhcmsnIDogJ2xpZ2h0Jyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGhlbWUodGhlbWU6ICdsaWdodCcgfCAnZGFyaycpIHtcbiAgICAvLyDmm7TmlrDlvZPliY3kuLvpophcbiAgICB0aGlzLnRoZW1lU3ViamVjdCQubmV4dCh0aGVtZSk7XG4gICAgaWYodGhpcy5sb2NhbERvbUVsZW1lbnQpe1xuICAgICAgLy8g56e76Zmk546w5pyJ5Li76aKYXG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmxvY2FsRG9tRWxlbWVudCwgJ2RhdGEtbmZwLXRoZW1lJyk7XG4gICAgICAvLyDlupTnlKjmlrDkuLvpophcbiAgICAgIGlmICh0aGVtZSA9PT0gJ2RhcmsnKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMubG9jYWxEb21FbGVtZW50LCAnZGF0YS1uZnAtdGhlbWUnLCAnZGFyaycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5sb2NhbERvbUVsZW1lbnQsICdkYXRhLW5mcC10aGVtZScsICdsaWdodCcpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyDkv53lrZjliLDmnKzlnLDlrZjlgqhcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlRIRU1FX0tFWSwgdGhlbWUpO1xuICB9XG5cbiAgdG9nZ2xlVGhlbWUoKSB7XG4gICAgY29uc3QgbmV3VGhlbWUgPSB0aGlzLnRoZW1lID09PSAnbGlnaHQnID8gJ2RhcmsnIDogJ2xpZ2h0JztcbiAgICB0aGlzLnNldE1vZGUobmV3VGhlbWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdG9wQXV0b0NoZWNrKCk7XG5cbiAgICAvLyDmuIXnkIbns7vnu5/kuLvpopjnm5HlkKxcbiAgICBpZiAodGhpcy5zeXN0ZW1UaGVtZVF1ZXJ5ICYmIHRoaXMuc3lzdGVtVGhlbWVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5zeXN0ZW1UaGVtZVF1ZXJ5LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMuc3lzdGVtVGhlbWVMaXN0ZW5lcik7XG4gICAgfVxuICB9XG59XG4iXX0=