ng-devui
Version:
DevUI components based on Angular
1 lines • 62.4 kB
Source Map (JSON)
{"version":3,"file":"ng-devui-theme.mjs","sources":["../../devui/theme/theme.ts","../../devui/theme/key-config.ts","../../devui/theme/theme-data.ts","../../devui/theme/media-query.ts","../../devui/theme/utils/event-bus.ts","../../devui/theme/utils/context-service.ts","../../devui/theme/utils/storage-service.ts","../../devui/theme/theme-service.ts","../../devui/theme/theme-management.ts","../../devui/theme/ng-devui-theme.ts"],"sourcesContent":["export type ThemeId = string;\n\nexport class Theme {\n id: ThemeId;\n name: string;\n cnName?: string;\n data: {\n [cssVarName: string]: string;\n };\n extends?: ThemeId;\n isDark?: boolean;\n isPreview?: boolean;\n isExtendable?: boolean;\n extra?: {\n appendClass?: Array<string>;\n cssVariables?: {\n [cssVarName: string]: string;\n };\n [prop: string]: any;\n } | any;\n\n constructor(theme: {\n id: ThemeId;\n name: string;\n cnName?: string;\n data: {\n [cssVarName: string]: string;\n };\n extends?: ThemeId;\n isDark?: boolean;\n isPreview?: boolean;\n isExtendable?: boolean;\n }) {\n this.id = theme.id;\n this.name = theme.name;\n this.cnName = theme.cnName || this.name;\n this.data = theme.data;\n this.extends = theme.extends || null;\n this.isDark = theme?.isDark;\n this.isPreview = theme.isPreview || false;\n this.isExtendable = theme.isExtendable || true;\n }\n}\n","export const THEME_KEY = {\n userLastPreferTheme : 'user-custom-theme', // localStorage 存储的上一次主题名字\n userLastPreferThemeData: 'user-custom-theme-data', // localStorage 存储的上一次主题的变量,用于骨架屏阶段快速恢复主题\n currentTheme: 'devuiCurrentTheme', // context(默认window) 当前主题名字\n themeCollection: 'devuiThemes', // context(默认window) 存储所有主题集合\n styleElementId: 'devuiThemeVariables', // DOM Style Element 的 id标识, 标记css变量声明的片段\n transitionStyleElementId: 'devuiThemeColorTransition', // DOM Style Element 的 id标识,标记临时使用的css颜色动画\n uiThemeAttributeName: 'ui-theme', // body 和 style元素标记用户数据\n themeService: 'devuiThemeService' // 全局window下的theme service实例\n};\n","import { Theme } from './theme';\n\nexport const devuiLightTheme: Theme = new Theme({\n id: 'devui-light-theme',\n name: 'Light Mode',\n cnName: '浅色主题',\n data: {\n 'devui-global-bg': '#f5f5f5',\n 'devui-glass-morphism-bg': 'rgba(245, 246, 248,0.9)',\n 'devui-global-bg-normal': '#ffffff',\n 'devui-base-bg': '#ffffff',\n 'devui-base-bg-dark': '#333854',\n 'devui-brand': '#5e7ce0',\n 'devui-brand-foil': '#859bff',\n 'devui-brand-hover': '#7693f5',\n 'devui-brand-active': '#526ecc',\n 'devui-brand-active-focus': '#344899',\n 'devui-contrast': '#c7000b',\n 'devui-text': '#252b3a',\n 'devui-text-weak': '#575d6c',\n 'devui-aide-text': '#8a8e99',\n 'devui-aide-text-hover': '#252b3a',\n 'devui-aide-text-stress': '#575d6c',\n 'devui-placeholder': '#8a8e99',\n 'devui-light-text': '#ffffff',\n 'devui-dark-text': '#252b3a',\n 'devui-link': '#526ecc',\n 'devui-link-active': '#344899',\n 'devui-link-light': '#96adfa',\n 'devui-link-light-active': '#beccfa',\n 'devui-line': '#adb0b8',\n 'devui-dividing-line': '#dfe1e6',\n 'devui-block': '#ffffff',\n 'devui-area': '#f8f8f8',\n 'devui-danger': '#f66f6a',\n 'devui-warning': '#fac20a',\n 'devui-waiting': '#9faad7',\n 'devui-success': '#50d4ab',\n 'devui-info': '#5e7ce0',\n 'devui-initial': '#e9edfa',\n 'devui-unavailable': '#f5f5f6',\n 'devui-shadow': 'rgba(0, 0, 0, 0.16)',\n 'devui-light-shadow': 'rgba(0, 0, 0, 0.08)',\n 'devui-connected-overlay-shadow': 'rgba(0, 0, 0, 0.16)',\n 'devui-feedback-overlay-shadow': 'rgba(0, 0, 0, 0.16)',\n 'devui-feedback-overlay-backdrop': 'rgba(0, 0, 0, 0.3)',\n 'devui-hover-shadow': 'rgba(0, 0, 0, 0.16)',\n 'devui-icon-text': '#252b3a',\n 'devui-icon-bg': '#ffffff',\n 'devui-icon-fill': '#252b3a',\n 'devui-icon-fill-weak': '#babbc0',\n 'devui-icon-fill-hover': '#5e7ce0',\n 'devui-icon-fill-active': '#5e7ce0',\n 'devui-icon-fill-active-hover': '#526ecc',\n 'devui-shape-icon-fill': '#d7d8da',\n 'devui-shape-icon-fill-active': '#babbc0',\n 'devui-shape-icon-fill-hover': '#babbc0',\n 'devui-shape-icon-fill-disabled': '#f5f5f5',\n 'devui-form-control-line': '#adb0b8',\n 'devui-form-control-bg': '#ffffff',\n 'devui-form-control-line-hover': '#575d6c',\n 'devui-form-control-line-active': '#5e7ce0',\n 'devui-form-control-interactive-outline': 'rgba(94,124,224,0.08)',\n 'devui-form-control-line-active-hover': '#344899',\n 'devui-list-item-active-bg': '#5e7ce0',\n 'devui-list-item-active-text': '#ffffff',\n 'devui-list-item-active-hover-bg': '#526ecc',\n 'devui-list-item-hover-bg': '#f2f5fc',\n 'devui-list-item-hover-text': '#526ecc',\n 'devui-list-item-selected-bg': '#e9edfa',\n 'devui-list-item-strip-bg': '#f2f5fc',\n 'devui-disabled-bg': '#f5f5f6',\n 'devui-disabled-line': '#dfe1e6',\n 'devui-disabled-text': '#adb0b8',\n 'devui-primary-disabled': '#beccfa',\n 'devui-icon-fill-active-disabled': '#beccfa',\n 'devui-label-bg': '#eef0f5',\n 'devui-connected-overlay-bg': '#ffffff',\n 'devui-connected-overlay-line': '#526ecc',\n 'devui-fullscreen-overlay-bg': '#ffffff',\n 'devui-feedback-overlay-bg': '#464d6e',\n 'devui-feedback-overlay-text': '#dfe1e6',\n 'devui-gray-form-control-bg': '#f5f5f5',\n 'devui-gray-form-control-hover-bg': '#ebebeb',\n 'devui-nav-expand-bg': '#fbfbfc',\n 'devui-embed-search-bg': '#f2f5fc',\n 'devui-embed-search-bg-hover': '#eef0f5',\n 'devui-float-block-shadow': 'rgba(94, 124, 224, 0.3)',\n 'devui-highlight-overlay': 'rgba(255, 255, 255, 0.8)',\n 'devui-range-item-hover-bg': '#e9edfa',\n 'devui-primary': '#5e7ce0',\n 'devui-primary-hover': '#7693f5',\n 'devui-primary-active': '#344899',\n 'devui-contrast-hover': '#d64a52',\n 'devui-contrast-active': '#b12220',\n 'devui-danger-line': '#f66f6a',\n 'devui-danger-bg': '#ffeeed',\n 'devui-warning-line': '#fa9841',\n 'devui-warning-bg': '#fff3e8',\n 'devui-info-line': '#5e7ce0',\n 'devui-info-bg': '#f2f5fc',\n 'devui-success-line': '#50d4ab',\n 'devui-success-bg': '#edfff9',\n 'devui-primary-line': '#5e7ce0',\n 'devui-primary-bg': '#f2f5fc',\n 'devui-default-line': '#5e7ce0',\n 'devui-default-bg': '#f3f6f8',\n 'devui-shadow-length-base': '0 1px 6px 0',\n 'devui-shadow-length-slide-left': '-2px 0 8px 0',\n 'devui-shadow-length-slide-right': '2px 0 8px 0',\n 'devui-shadow-length-connected-overlay': '0 4px 12px 0',\n 'devui-shadow-length-hover': '0 8px 24px 0',\n 'devui-shadow-length-feedback-overlay': '0 8px 16px 0',\n 'devui-shadow-length-fullscreen-overlay': '0 16px 48px 0',\n 'devui-border-radius': '2px',\n 'devui-border-radius-feedback': '4px',\n 'devui-border-radius-card': '6px',\n 'devui-border-radius-full': '100px',\n 'devui-font-size': '12px',\n 'devui-font-size-card-title': '14px',\n 'devui-font-size-page-title': '16px',\n 'devui-font-size-modal-title': '18px',\n 'devui-font-size-price': '20px',\n 'devui-font-size-data-overview': '24px',\n 'devui-font-size-icon': '16px',\n 'devui-font-size-sm': '12px',\n 'devui-font-size-md': '12px',\n 'devui-font-size-lg': '14px',\n 'devui-font-title-weight': 'bold',\n 'devui-font-content-weight': 'normal',\n 'devui-line-height-base': '1.5',\n 'devui-animation-ease-in-smooth': 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n 'devui-animation-duration-slow': '300ms',\n 'devui-animation-duration-base': '200ms',\n 'devui-animation-duration-fast': '100ms',\n 'devui-animation-ease-in': 'cubic-bezier(0.5, 0, 0.84, 0.25)',\n 'devui-animation-ease-out': 'cubic-bezier(0.16, 0.75, 0.5, 1)',\n 'devui-animation-ease-in-out': 'cubic-bezier(0.5, 0.05, 0.5, 0.95)',\n 'devui-animation-ease-in-out-smooth': 'cubic-bezier(0.645, 0.045, 0.355, 1)',\n 'devui-animation-linear': 'cubic-bezier(0, 0, 1, 1)',\n 'devui-z-index-full-page-overlay': '1080',\n 'devui-z-index-pop-up': '1060',\n 'devui-z-index-dropdown': '1052',\n 'devui-z-index-modal': '1050',\n 'devui-z-index-drawer': '1040',\n 'devui-z-index-framework': '1000',\n 'devui-icon-active-color': '#ffffff',\n 'devui-table-column-shadow-color': 'rgba(37,43,58,0.08)'\n },\n isDark: false,\n});\nexport const devuiGreenTheme: Theme = new Theme({\n id: 'avenueui-green-theme',\n name: 'Green - Light Mode',\n cnName: '绿色主题',\n data: {\n ...devuiLightTheme.data,\n 'devui-global-bg': '#f5f5f5',\n 'devui-glass-morphism-bg': 'rgba(245, 246, 248,0.9)',\n 'devui-brand': '#3DCCA6',\n 'devui-brand-foil': '#7fdac1',\n 'devui-brand-hover': '#6DDEBB',\n 'devui-brand-active': '#07c693',\n 'devui-brand-active-focus': '#369676',\n 'devui-link': '#07c693',\n 'devui-link-active': '#07c693',\n 'devui-link-light': '#96fac8',\n 'devui-link-light-active': '#befade',\n 'devui-info': '#079CCD',\n 'devui-initial': '#CCCCCC',\n 'devui-icon-fill-active': '#3DCCA6',\n 'devui-icon-fill-active-hover': '#07c693',\n 'devui-form-control-line-active': '#3DCCA6',\n 'devui-form-control-interactive-outline': 'rgba(61,204,166,0.08)',\n 'devui-form-control-line-active-hover': '#2EB28A',\n 'devui-list-item-active-bg': '#3DCCA6',\n 'devui-list-item-active-hover-bg': '#07c693',\n 'devui-list-item-hover-bg': '#f3fef9',\n 'devui-list-item-hover-text': '#07c693',\n 'devui-list-item-selected-bg': '#f3fef9',\n 'devui-list-item-strip-bg': '#f3fef9',\n 'devui-connected-overlay-line': '#07c693',\n 'devui-embed-search-bg': '#f3fef9',\n 'devui-float-block-shadow': 'rgba(94, 224, 181, 0.3)',\n 'devui-primary': '#3DCCA6',\n 'devui-primary-hover': '#6DDEBB',\n 'devui-primary-active': '#369676',\n 'devui-info-line': '#0486b1',\n 'devui-info-bg': '#e3f0f5',\n 'devui-success-line': '#50d492',\n 'devui-success-bg': '#edfff9',\n 'devui-primary-line': '#3DCCA6',\n 'devui-primary-bg': '#f3fef9',\n 'devui-default-line': '#3DCCA6',\n 'devui-default-bg': '#f3f8f7',\n 'devui-primary-disabled': '#c5f0e5',\n 'devui-icon-fill-active-disabled': '#c5f0e5',\n 'devui-range-item-hover-bg': '#d8f9ea',\n },\n extends: 'devui-light-theme',\n isDark: false,\n});\nexport const devuiDarkTheme: Theme = new Theme({\n id: 'devui-dark-theme',\n name: 'Dark Mode',\n cnName: '深色主题',\n data: {\n ...devuiLightTheme.data,\n 'devui-global-bg': '#202124',\n 'devui-glass-morphism-bg': 'rgba(32,33,36,0.9)',\n 'devui-global-bg-normal': '#202124',\n 'devui-base-bg': '#2E2F31',\n 'devui-base-bg-dark': '#2e2f31',\n 'devui-brand': '#5e7ce0',\n 'devui-brand-foil': '#313a61',\n 'devui-brand-hover': '#425288',\n 'devui-brand-active': '#526ecc',\n 'devui-brand-active-focus': '#344899',\n 'devui-contrast': '#C7000B',\n 'devui-text': '#E8E8E8',\n 'devui-text-weak': '#A0A0A0',\n 'devui-aide-text': '#909090',\n 'devui-aide-text-hover': '#73788a',\n 'devui-aide-text-stress': '#A0A0A0',\n 'devui-placeholder': '#8A8A8A',\n 'devui-light-text': '#ffffff',\n 'devui-dark-text': '#252b3a',\n 'devui-link': '#526ECC',\n 'devui-link-active': '#344899',\n 'devui-link-light': '#96adfa',\n 'devui-link-light-active': '#beccfa',\n 'devui-line': '#505153',\n 'devui-dividing-line': '#3D3E40',\n 'devui-block': '#606061',\n 'devui-area': '#34363A',\n 'devui-danger': '#f66f6a',\n 'devui-warning': '#fac20a',\n 'devui-waiting': '#5e6580',\n 'devui-success': '#50d4ab',\n 'devui-info': '#5e7ce0',\n 'devui-initial': '#64676e',\n 'devui-unavailable': '#5b5b5c',\n 'devui-shadow': 'rgba(0, 0, 0, 0.72)',\n 'devui-light-shadow': 'rgba(0, 0, 0, 0.3)',\n 'devui-connected-overlay-shadow': 'rgba(0, 0, 0, 0.42)',\n 'devui-feedback-overlay-shadow': 'rgba(0, 0, 0, 0.54)',\n 'devui-feedback-overlay-backdrop': 'rgba(0, 0, 0, 0.72)',\n 'devui-hover-shadow': 'rgba(0, 0, 0, 0.54)',\n // 图标\n 'devui-icon-text': '#E8E8E8',\n 'devui-icon-bg': '#2E2F31',\n 'devui-icon-fill': '#909090',\n 'devui-icon-fill-hover': '#5e7ce0',\n 'devui-icon-fill-active': '#5e7ce0',\n 'devui-icon-fill-active-hover': '#526ecc',\n 'devui-shape-icon-fill': '#5b5d66',\n 'devui-shape-icon-fill-active': '#868a99',\n // 表单\n 'devui-form-control-line': '#505153',\n 'devui-form-control-bg': '#2E2F31',\n 'devui-form-control-line-hover': '#909090',\n 'devui-form-control-line-active': '#5e7ce0',\n 'devui-form-control-interactive-outline': 'rgba(94,124,224,0.08)',\n 'devui-form-control-line-active-hover': '#344899',\n 'devui-list-item-active-bg': '#5e7ce0',\n 'devui-list-item-active-text': '#ffffff',\n 'devui-list-item-active-hover-bg': '#526ecc',\n 'devui-list-item-hover-bg': '#3d3d42',\n 'devui-list-item-hover-text': '#526ecc',\n 'devui-list-item-selected-bg': '#454545',\n 'devui-list-item-strip-bg': '#383838',\n 'devui-table-expand-area-bg': '#393a3e',\n // 禁用\n 'devui-disabled-bg': '#3D3E44',\n 'devui-disabled-line': '#505153',\n 'devui-disabled-text': '#7D7D7D',\n 'devui-primary-disabled': '#2B3458',\n 'devui-icon-fill-active-disabled': '#2B3458',\n // 特殊背景色\n 'devui-label-bg': '#46443F',\n 'devui-connected-overlay-bg': '#2F2F2F',\n 'devui-connected-overlay-line': '#526ecc',\n 'devui-fullscreen-overlay-bg': '#2E2F31',\n 'devui-feedback-overlay-bg': '#4C4C4C',\n 'devui-feedback-overlay-text': '#DFE1E6',\n 'devui-embed-search-bg': '#383838',\n 'devui-embed-search-bg-hover': '#3D3E40',\n 'devui-float-block-shadow': 'rgba(94, 124, 224, 0.3)',\n 'devui-highlight-overlay': 'rgba(255, 255, 255, 0.1)',\n 'devui-range-item-hover-bg': '#454545',\n // 按钮\n 'devui-primary': '#5e7ce0',\n 'devui-primary-hover': '#425288',\n 'devui-primary-active': '#344899',\n 'devui-contrast-hover': '#D64A52',\n 'devui-contrast-active': '#B12220',\n // 状态\n 'devui-danger-line': '#985C5A',\n 'devui-danger-bg': '#4B3A39',\n 'devui-warning-line': '#8D6138',\n 'devui-warning-bg': '#554434',\n 'devui-info-line': '#546BB7',\n 'devui-info-bg': '#383D4F',\n 'devui-success-line': '#5D887D',\n 'devui-success-bg': '#304642',\n 'devui-primary-line': '#546BB7',\n 'devui-primary-bg': '#383D4F',\n 'devui-default-line': '#5e7ce0',\n 'devui-default-bg': '#383838',\n 'devui-icon-active-color': '#ffffff',\n 'devui-gray-form-control-bg': '#323338',\n 'devui-gray-form-control-hover-bg': '#393A3E',\n 'devui-table-column-shadow-color': 'rgba(0,0,0,0.08)'\n },\n extends: 'devui-light-theme',\n isDark: true,\n});\nexport const avenueuiGreenDarkTheme: Theme = new Theme({\n id: 'avenueui-green-dark-theme',\n name: 'Green - Dark Mode',\n cnName: '绿色深色主题',\n data: {\n ...devuiDarkTheme.data,\n 'devui-brand': '#3DCCA6',\n 'devui-brand-foil': '#395e54',\n 'devui-brand-hover': '#4c9780',\n 'devui-brand-active': '#07c693',\n 'devui-brand-active-focus': '#297058',\n 'devui-link': '#07c693',\n 'devui-link-active': '#08a57b',\n 'devui-info': '#046788',\n 'devui-initial': '#64676e',\n 'devui-icon-fill-active': '#3DCCA6',\n 'devui-icon-fill-active-hover': '#07c693',\n 'devui-form-control-line-active': '#3DCCA6',\n 'devui-form-control-interactive-outline': 'rgba(61,204,166,0.08)',\n 'devui-form-control-line-active-hover': '#297058',\n 'devui-list-item-active-bg': '#3DCCA6',\n 'devui-list-item-active-hover-bg': '#07c693',\n 'devui-list-item-hover-text': '#07c693',\n 'devui-connected-overlay-line': '#07c693',\n 'devui-embed-search-bg': '#3f4241',\n 'devui-float-block-shadow': 'rgba(94, 224, 181, 0.3)',\n 'devui-primary': '#3DCCA6',\n 'devui-primary-hover': '#6DDEBB',\n 'devui-primary-active': '#369676',\n 'devui-info-line': '#035e7c',\n 'devui-info-bg': '#383c3d',\n 'devui-primary-line': '#3DCCA6',\n 'devui-primary-bg': '#3f4241',\n 'devui-default-line': '#3DCCA6',\n 'devui-default-bg': '#383838',\n 'devui-primary-disabled': '#28544B',\n 'devui-icon-fill-active-disabled': '#28544B',\n },\n extends: 'devui-dark-theme',\n isDark: true,\n});\n","import { ReplaySubject } from 'rxjs';\n\nexport class PrefersColorSchemeMediaQuery {\n private prefersColorSchemeSubject = new ReplaySubject<PrefersColorSchemeMediaQuery.Value>(1);\n public prefersColorSchemeChange = this.prefersColorSchemeSubject.asObservable();\n\n register() {\n matchMedia(PrefersColorSchemeMediaQuery.Query.light).addEventListener('change', this.changeToLight);\n matchMedia(PrefersColorSchemeMediaQuery.Query.dark).addEventListener('change', this.changeToDark);\n this.prefersColorSchemeSubject.next(this.getInitValue());\n }\n\n unregister() {\n matchMedia(PrefersColorSchemeMediaQuery.Query.light).removeEventListener('change', this.changeToLight);\n matchMedia(PrefersColorSchemeMediaQuery.Query.dark).removeEventListener('change', this.changeToDark);\n this.prefersColorSchemeSubject.complete();\n }\n\n handleColorSchemeChange = (value: PrefersColorSchemeMediaQuery.Value) => {\n this.prefersColorSchemeSubject.next(value);\n };\n\n getInitValue(): PrefersColorSchemeMediaQuery.Value {\n if (typeof window === 'undefined') {\n return 'light';\n }\n return (\n (window.matchMedia(PrefersColorSchemeMediaQuery.Query.light).matches && 'light') ||\n (window.matchMedia(PrefersColorSchemeMediaQuery.Query.dark).matches && 'dark') ||\n 'no-preference'\n );\n }\n\n changeToLight(mql) {\n if (mql.matches) {\n this.handleColorSchemeChange('light');\n }\n }\n\n changeToDark(mql) {\n if (mql.matches) {\n this.handleColorSchemeChange('dark');\n }\n }\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-namespace */\nexport namespace PrefersColorSchemeMediaQuery {\n export type Value = 'light' | 'dark' | 'no-preference';\n export enum Query {\n 'light' = 'screen and (prefers-color-scheme: light)',\n 'dark' = 'screen and (prefers-color-scheme: dark)',\n 'noPreferences' = 'screen and (prefers-color-scheme: light)',\n }\n}\n","import { IEventBus } from './interface';\r\n\r\nexport class EventBus implements IEventBus {\r\n private eventBusCore = [];\r\n\r\n private areFuncEqual(a, b) {\r\n return a.toString() === b.toString();\r\n }\r\n\r\n private isKeyValueObjInArr(arr, key, val) {\r\n const filteredArr = arr.filter((entry) => {\r\n return entry[key] === val;\r\n });\r\n return filteredArr.length > 0;\r\n }\r\n\r\n private removeFuncInFuncArr(arr, fn) {\r\n for (let z = 0; z < arr.length; z++) {\r\n if (this.areFuncEqual(arr[z], fn)) {\r\n arr.splice(z, 1);\r\n }\r\n }\r\n return arr;\r\n }\r\n\r\n private getKeyValueObjInArr(arr, key, val) {\r\n const filteredArr = arr.filter((entry) => {\r\n return entry[key] === val;\r\n });\r\n return filteredArr[0];\r\n }\r\n\r\n private addEvent(eventName, eventFunc) {\r\n if (!this.isKeyValueObjInArr(this.eventBusCore, 'eventName', eventName)) {\r\n this.eventBusCore.push({ eventName: eventName, eventFuncArr: [eventFunc] });\r\n } else {\r\n this.eventBusCore = this.eventBusCore.map((event) => {\r\n if (event.eventName === eventName) {\r\n event.eventFuncArr.push(eventFunc);\r\n }\r\n return event;\r\n });\r\n }\r\n }\r\n\r\n public add(...rest): void {\r\n const eventName = rest[0];\r\n const callbacks = rest[1];\r\n if (!eventName) {\r\n return;\r\n }\r\n if (typeof callbacks === 'function') {\r\n for (let i = 1; i < rest.length; i++) {\r\n this.addEvent(eventName, rest[i]);\r\n }\r\n }\r\n if (typeof callbacks === 'object' && callbacks.forEach) {\r\n callbacks.forEach((fn) => {\r\n this.addEvent(eventName, fn);\r\n });\r\n }\r\n }\r\n\r\n public remove(...rest): any[] {\r\n const eventName = rest[0];\r\n const callbacks = rest[1];\r\n if (!eventName) {\r\n return;\r\n }\r\n for (let i = 0; i < this.eventBusCore.length; i++) {\r\n if (this.eventBusCore[i].eventName === eventName) {\r\n if (rest.length === 1) {\r\n return this.eventBusCore.splice(i, 1);\r\n }\r\n const removedEvent = this.eventBusCore.splice(i, 1)[0];\r\n if (typeof callbacks === 'function') {\r\n for (let k = 1; k < rest.length; k++) {\r\n removedEvent.eventFuncArr = this.removeFuncInFuncArr(removedEvent.eventFuncArr, rest[k]);\r\n }\r\n }\r\n if (typeof callbacks === 'object' && callbacks.length) {\r\n for (let x = 0; x < callbacks.length; x++) {\r\n removedEvent.eventFuncArr = this.removeFuncInFuncArr(removedEvent.eventFuncArr, callbacks[x]);\r\n }\r\n }\r\n this.eventBusCore.push(removedEvent);\r\n }\r\n }\r\n }\r\n\r\n public trigger(eventName, data) {\r\n const event = this.getKeyValueObjInArr(this.eventBusCore, 'eventName', eventName);\r\n if (event) {\r\n (event.eventFuncArr || []).forEach((fn) => {\r\n fn.apply(this, data);\r\n });\r\n }\r\n }\r\n}\r\n","import { IContextService } from './interface';\nexport class ContextService implements IContextService {\n getDataFromNameSpace(nameSpace: string) {\n if (typeof window === 'undefined') {\n return null;\n }\n return window[nameSpace];\n }\n setDataFromNameSpace(nameSpace: string, value: any) {\n if (typeof window === 'undefined') {\n return;\n }\n window[nameSpace] = value;\n }\n}\n","import { IStorageService } from './interface';\nexport class StorageService implements IStorageService {\n tryGetLocalStorage(key: string) {\n if (typeof window === 'undefined') {\n return null;\n }\n return window.localStorage.getItem(key);\n }\n trySetLocalStorage(key: string, value: any) {\n if (typeof window === 'undefined') {\n return;\n }\n try {\n window.localStorage.setItem(key, value);\n } catch (error) {\n console.error(error);\n }\n }\n}\n","import { THEME_KEY } from './key-config';\nimport { PrefersColorSchemeMediaQuery } from './media-query';\nimport { Theme } from './theme';\nimport { ContextService, EventBus, IContextService, IEventBus, IStorageService, StorageService } from './utils/index';\n\nconst THEME_CHANGE_TIME = 400;\nconst THEME_CHANGE_DELAY = 100;\n\n/**\n * 负责CSS变量主题的装卸,主题元数据转换成主题数据\n */\nexport class ThemeService {\n eventBus: IEventBus;\n storage: IStorageService;\n context: IContextService;\n currentTheme: Theme;\n contentElement: HTMLStyleElement;\n colorTransitionElement: HTMLStyleElement;\n darkChangeHiddenElement: HTMLStyleElement;\n darkChangeShowElement: HTMLStyleElement;\n extraData: {\n [themeId: string]: {\n cssVariables?: {\n [varname: string]: string;\n };\n appendClasses?: Array<string>;\n };\n };\n private _appendedClasses: Array<string>;\n set appendClasses(classes: Array<string>) {\n if (this._appendedClasses) {\n this.removeAppendedClass(this._appendedClasses);\n }\n if (classes) {\n this.addAppendClass(classes);\n }\n this._appendedClasses = classes;\n }\n\n get appendClasses() {\n return this._appendedClasses;\n }\n\n public mediaQuery: PrefersColorSchemeMediaQuery;\n\n constructor(eventBus?: IEventBus, storage?: IStorageService, context?: IContextService) {\n this.eventBus = eventBus === undefined ? new EventBus() : eventBus;\n this.storage = storage === undefined ? new StorageService() : storage;\n this.context = context === undefined ? new ContextService() : context;\n }\n\n initializeTheme(specificThemeId?: string, allowDynamicTheme?: boolean) {\n const themeId = specificThemeId\n || this.storage.tryGetLocalStorage(THEME_KEY.userLastPreferTheme)\n || this.context.getDataFromNameSpace(THEME_KEY.currentTheme);\n let theme;\n\n if (themeId) {\n const themes = this.context.getDataFromNameSpace(THEME_KEY.themeCollection);\n if (themes && Object.keys(themes).length > 0) {\n theme = themes[themeId];\n if (!theme) {\n const key = Object.keys(themes).find(t => themes[t].id === themeId);\n theme = themes[key];\n }\n }\n }\n this.currentTheme = theme || {\n id: 'empty-theme',\n name: '',\n data: {},\n isDark: false\n };\n this.createColorTransition();\n if (!theme && allowDynamicTheme) {\n document.body.setAttribute(THEME_KEY.uiThemeAttributeName, 'empty-theme');\n return;\n }\n this.applyTheme(this.currentTheme);\n }\n\n formatCSSVariables(themeData: Theme['data']) {\n return Object.keys(themeData).map(\n cssVar => ('--' + cssVar + ':' + themeData[cssVar])\n ).join(';');\n }\n\n applyTheme(theme: Theme) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n return;\n }\n if (theme.isDark === this.currentTheme.isDark) {\n this.addColorTransition();\n this.renderTheme(theme);\n // 通知外部主题变更\n this.notify(theme, 'themeChanged');\n setTimeout(() => {this.removeColorTransition(); }, THEME_CHANGE_TIME + THEME_CHANGE_DELAY);\n } else {\n this.themeHidden();\n setTimeout(() => {\n this.removeColorTransition();\n this.renderTheme(theme);\n\n // 通知外部主题变更\n this.notify(theme, 'themeChanged');\n this.themeShow();\n setTimeout(() => {this.removeColorTransition(); }, THEME_CHANGE_TIME + THEME_CHANGE_DELAY);\n }, THEME_CHANGE_TIME);\n }\n\n }\n\n renderTheme(theme: Theme) {\n this.currentTheme = theme;\n if (!this.contentElement) {\n const styleElement = document.getElementById(THEME_KEY.styleElementId);\n if (styleElement) {\n this.contentElement = <HTMLStyleElement>styleElement;\n } else {\n this.contentElement = document.createElement('style');\n this.contentElement.id = THEME_KEY.styleElementId;\n document.head.appendChild(this.contentElement);\n }\n\n }\n this.contentElement.innerText = ':root { ' + this.formatCSSVariables(theme.data) + ' }';\n this.contentElement.setAttribute(THEME_KEY.uiThemeAttributeName, this.currentTheme.id);\n document.body.setAttribute(THEME_KEY.uiThemeAttributeName, this.currentTheme.id);\n\n // 用于挂载额外变量和类名\n this.applyExtraData();\n this.saveCustomTheme(this.currentTheme);\n }\n\n saveCustomTheme(customTheme: Theme) {\n this.storage.trySetLocalStorage(THEME_KEY.userLastPreferTheme, customTheme.id);\n this.storage.trySetLocalStorage(THEME_KEY.userLastPreferThemeData, JSON.stringify(customTheme.data));\n this.context.setDataFromNameSpace(THEME_KEY.currentTheme, customTheme.id);\n }\n\n private notify(theme: Theme, eventType: string) {\n if (!this.eventBus) { return; }\n this.eventBus.trigger(eventType, theme);\n }\n\n setEventBus(eb: IEventBus) {\n this.eventBus = eb;\n }\n\n private addAppendClass(classNames: Array<string>) {\n if (typeof document === 'undefined') {\n return;\n }\n document.body.classList.add(...classNames);\n }\n\n private removeAppendedClass(classNames: Array<string>) {\n if (typeof document === 'undefined') {\n return;\n }\n document.body.classList.remove(...classNames);\n }\n\n setExtraData(data, apply = false) {\n this.extraData = data;\n if (apply) {\n this.applyExtraData();\n }\n }\n\n private applyExtraData() {\n const theme = this.currentTheme;\n if (this.extraData && this.extraData[theme.id] && this.extraData[theme.id].cssVariables) {\n this.contentElement.innerText\n = ':root { ' + this.formatCSSVariables(theme.data) + ' }'\n + ':root { ' + this.formatCSSVariables(this.extraData[theme.id].cssVariables) + ' }';\n }\n if (this.extraData && this.extraData[theme.id] && this.extraData[theme.id].appendClasses) {\n this.appendClasses = this.extraData[theme.id].appendClasses;\n } else {\n this.appendClasses = undefined;\n }\n }\n\n public unloadTheme() {\n if (typeof document === 'undefined') {\n return null;\n }\n if (this.contentElement && document.contains(this.contentElement)) {\n this.contentElement.parentElement.removeChild(this.contentElement);\n }\n if (this.appendClasses) {\n this.appendClasses = undefined;\n }\n }\n\n public registerMediaQuery() {\n if (!this.mediaQuery) {\n this.mediaQuery = new PrefersColorSchemeMediaQuery();\n }\n this.mediaQuery.register();\n }\n\n public unregisterMediaQuery() {\n if (!this.mediaQuery) {\n return;\n }\n this.mediaQuery.unregister();\n this.mediaQuery = undefined;\n }\n\n private createColorTransition() {\n if (typeof document === 'undefined') {\n return;\n }\n this.colorTransitionElement = document.createElement('style');\n this.darkChangeHiddenElement = document.createElement('style');\n this.darkChangeShowElement = document.createElement('style');;\n this.colorTransitionElement.id = THEME_KEY.transitionStyleElementId;\n this.darkChangeHiddenElement.id = THEME_KEY.transitionStyleElementId;\n this.darkChangeShowElement.id = THEME_KEY.transitionStyleElementId;\n this.colorTransitionElement.innerText = `\n * { transition: background .3s ease-out, background-color .3s ease-out,\n border .3s ease-out, border-color .3s ease-out,\n box-shadow .3s ease-out, box-shadow-color .3s ease-out}\n `;\n\n this.darkChangeHiddenElement.innerText = `\n * {\n transition: background .3s ease-out, background-color .3s ease-out,\n border .3s ease-out, border-color .3s ease-out,\n box-shadow .3s ease-out, box-shadow-color .3s ease-out\n }\n body {\n animation-duration: 400ms;\n animation-name: hidden;\n animation-iteration-count: 1;\n }\n @keyframes hidden {\n from {\n opacity: 1;\n }\n \n to {\n opacity: 0.1;\n }\n }\n `;\n\n this.darkChangeShowElement.innerText = `\n body {\n animation-duration: 400ms;\n animation-name: show;\n animation-iteration-count: 1;\n }\n @keyframes show {\n from {\n opacity: 0.1;\n }\n \n to {\n opacity: 1;\n }\n }\n `;\n }\n\n private themeHidden() {\n if (typeof document === 'undefined') {\n return;\n }\n document.head.appendChild(this.darkChangeHiddenElement);\n }\n\n private themeShow() {\n if (typeof document === 'undefined') {\n return;\n }\n document.head.appendChild(this.darkChangeShowElement);\n }\n\n private addColorTransition() {\n if (typeof document === 'undefined') {\n return;\n }\n document.head.appendChild(this.colorTransitionElement);\n }\n private removeColorTransition() {\n if (this.colorTransitionElement.parentElement) {\n this.colorTransitionElement.parentElement.removeChild(this.colorTransitionElement);\n }\n\n if (this.darkChangeShowElement.parentElement) {\n this.darkChangeShowElement.parentElement.removeChild(this.darkChangeShowElement);\n }\n\n if (this.darkChangeHiddenElement.parentElement) {\n this.darkChangeHiddenElement.parentElement.removeChild(this.darkChangeHiddenElement);\n }\n\n }\n}\n","import cssVars from 'css-vars-ponyfill';\r\nimport { Subscription } from 'rxjs';\r\nimport { THEME_KEY } from './key-config';\r\nimport { Theme } from './theme';\r\nimport { devuiDarkTheme, devuiLightTheme } from './theme-data';\r\nimport { ThemeService } from './theme-service';\r\nimport { EventBus } from './utils';\r\n\r\n/**\r\n * usage\r\n * main.ts\r\n ```ts\r\n import { ThemeServiceInit } from 'ng-devui/theme';\r\n ThemeServiceInit();\r\n ```\r\n *\r\n*/\r\nexport function ThemeServiceInit(\r\n themes?: { [themeName: string]: Theme },\r\n defaultThemeName?: string,\r\n extraData?: {\r\n [themeName: string]: {\r\n appendClasses?: Array<string>;\r\n cssVariables?: {\r\n [cssVarName: string]: string;\r\n };\r\n };\r\n },\r\n ieSupport = false, // TODO:css-var-ponyflll 仍有一些问题待定位\r\n allowDynamicTheme = false\r\n) {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return null;\r\n }\r\n window[THEME_KEY.themeCollection] = themes || {\r\n 'devui-light-theme': devuiLightTheme,\r\n 'devui-dark-theme': devuiDarkTheme,\r\n };\r\n window[THEME_KEY.currentTheme] = defaultThemeName || 'devui-light-theme';\r\n const eventBus = (window as any).globalEventBus || new EventBus(); // window.globalEventBus 为 框架的事件总线\r\n const themeService = new ThemeService(eventBus);\r\n window[THEME_KEY.themeService] = themeService;\r\n\r\n themeService.setExtraData(\r\n extraData || {\r\n 'devui-dark-theme': {\r\n appendClasses: ['dark-mode'],\r\n },\r\n }\r\n );\r\n\r\n const currentTheme = window?.localStorage.getItem(THEME_KEY.userLastPreferTheme) || defaultThemeName;\r\n themeService.initializeTheme(currentTheme, allowDynamicTheme);\r\n if (ieSupport) {\r\n ieSupportCssVar();\r\n }\r\n return themeService;\r\n}\r\n\r\nexport function ThemeServiceFollowSystemOn(themeConfig?: { lightThemeName: string; darkThemeName: string }): Subscription {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return null;\r\n }\r\n const themeService: ThemeService = window[THEME_KEY.themeService];\r\n themeService.registerMediaQuery();\r\n return themeService.mediaQuery.prefersColorSchemeChange.subscribe((value) => {\r\n if (value === 'dark') {\r\n themeService.applyTheme(window[THEME_KEY.themeCollection][(themeConfig && themeConfig.darkThemeName) || 'devui-dark-theme']);\r\n } else {\r\n themeService.applyTheme(window[THEME_KEY.themeCollection][(themeConfig && themeConfig.lightThemeName) || 'devui-light-theme']);\r\n }\r\n });\r\n}\r\nexport function ThemeServiceFollowSystemOff(sub?: Subscription) {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return;\r\n }\r\n if (sub) {\r\n sub.unsubscribe();\r\n }\r\n const themeService = window[THEME_KEY.themeService];\r\n themeService.unregisterMediaQuery();\r\n}\r\n\r\nexport function ieSupportCssVar() {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return;\r\n }\r\n const isNativeSupport = ((window as any).CSS && CSS.supports && CSS.supports('(--a: 0)')) || false;\r\n if (isNativeSupport) {\r\n return;\r\n }\r\n cssVars({ watch: true, silent: true });\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n cssVars({ watch: false, silent: true });\r\n cssVars({ watch: true, silent: true });\r\n });\r\n });\r\n\r\n const config = { attributes: true, attributeFilter: [THEME_KEY.uiThemeAttributeName] };\r\n\r\n observer.observe(document.querySelector(`#${THEME_KEY.styleElementId}`), config);\r\n}\r\n\r\n// TODO: management should handle add / remove theme from theme collection.\r\n// TODO: move global variables(window.xxxx) to single namespace\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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