@lytjs/plugin-theme 6.4.0 → 6.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["signal","storedTheme","definePlugin"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\r\n * @lytjs/plugin-theme\r\n *\r\n * LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support.\r\n *\r\n * @packageDocumentation\r\n */\r\n\r\nimport { definePlugin } from '@lytjs/core';\r\nimport { signal } from '@lytjs/reactivity';\r\nimport type { Theme, ThemeOptions, ThemeInstance } from './types';\r\n\r\nconst defaultThemes: Theme[] = [\r\n {\r\n name: 'light',\r\n isDark: false,\r\n variables: {\r\n '--lyt-bg-primary': '#ffffff',\r\n '--lyt-bg-secondary': '#f5f5f5',\r\n '--lyt-text-primary': '#333333',\r\n '--lyt-text-secondary': '#666666',\r\n '--lyt-primary': '#1890ff',\r\n '--lyt-success': '#52c41a',\r\n '--lyt-warning': '#faad14',\r\n '--lyt-error': '#ff4d4f',\r\n '--lyt-border': '#d9d9d9',\r\n },\r\n },\r\n {\r\n name: 'dark',\r\n isDark: true,\r\n variables: {\r\n '--lyt-bg-primary': '#141414',\r\n '--lyt-bg-secondary': '#1f1f1f',\r\n '--lyt-text-primary': '#ffffff',\r\n '--lyt-text-secondary': '#a6a6a6',\r\n '--lyt-primary': '#177ddc',\r\n '--lyt-success': '#49aa19',\r\n '--lyt-warning': '#d89614',\r\n '--lyt-error': '#d32029',\r\n '--lyt-border': '#434343',\r\n },\r\n },\r\n];\r\n\r\nfunction getSystemTheme(): string {\r\n if (typeof window !== 'undefined' && window.matchMedia) {\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\r\n }\r\n return 'light';\r\n}\r\n\r\nfunction createThemeManager(options: ThemeOptions = {}): ThemeInstance {\r\n const {\r\n defaultTheme = 'light',\r\n themes = defaultThemes,\r\n enableSystemTheme = true,\r\n storageKey = 'lyt-theme',\r\n } = options;\r\n\r\n const themeMap = new Map<string, Theme>(themes.map((t) => [t.name, t]));\r\n const currentThemeSignal = signal<string>(defaultTheme);\r\n const availableThemesSignal = signal<string[]>(themes.map((t) => t.name));\r\n\r\n let styleElement: HTMLStyleElement | null = null;\r\n let systemThemeMediaQuery: MediaQueryList | null = null;\r\n\r\n function applyThemeVariables(variables: Record<string, string>) {\r\n if (typeof document === 'undefined') return;\r\n\r\n if (!styleElement) {\r\n styleElement = document.createElement('style');\r\n styleElement.setAttribute('data-lyt-theme', 'true');\r\n document.head.appendChild(styleElement);\r\n }\r\n\r\n const cssVars = Object.entries(variables)\r\n .map(([key, value]) => `${key}: ${value};`)\r\n .join('\\n');\r\n\r\n styleElement.textContent = `:root {\\n${cssVars}\\n}`;\r\n }\r\n\r\n function getStoredTheme(): string | null {\r\n if (typeof localStorage === 'undefined') return null;\r\n try {\r\n return localStorage.getItem(storageKey);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n function setStoredTheme(name: string) {\r\n if (typeof localStorage === 'undefined') return;\r\n try {\r\n localStorage.setItem(storageKey, name);\r\n } catch {\r\n }\r\n }\r\n\r\n function setTheme(name: string) {\r\n if (!themeMap.has(name)) {\r\n console.warn(`[Theme] Theme \"${name}\" not found, falling back to default`);\r\n name = defaultTheme;\r\n }\r\n\r\n const theme = themeMap.get(name)!;\r\n currentThemeSignal.set(name);\r\n setStoredTheme(name);\r\n applyThemeVariables(theme.variables);\r\n\r\n if (typeof document !== 'undefined') {\r\n document.documentElement.setAttribute('data-lyt-theme', name);\r\n document.documentElement.classList.toggle('lyt-theme-dark', !!theme.isDark);\r\n }\r\n }\r\n\r\n function toggleTheme() {\r\n const available = availableThemesSignal();\r\n const currentIndex = available.indexOf(currentThemeSignal());\r\n const nextIndex = (currentIndex + 1) % available.length;\r\n const nextTheme = available[nextIndex];\r\n if (nextTheme) {\r\n setTheme(nextTheme);\r\n }\r\n }\r\n\r\n function registerTheme(theme: Theme) {\r\n themeMap.set(theme.name, theme);\r\n availableThemesSignal.set([...availableThemesSignal(), theme.name]);\r\n }\r\n\r\n function getThemeVariables(name?: string): Record<string, string> {\r\n const themeName = name || currentThemeSignal();\r\n const theme = themeMap.get(themeName);\r\n return theme ? theme.variables : {};\r\n }\r\n\r\n function init() {\r\n let initialTheme = defaultTheme;\r\n\r\n const storedTheme = getStoredTheme();\r\n if (storedTheme && themeMap.has(storedTheme)) {\r\n initialTheme = storedTheme;\r\n } else if (enableSystemTheme) {\r\n initialTheme = getSystemTheme();\r\n }\r\n\r\n setTheme(initialTheme);\r\n\r\n if (enableSystemTheme && typeof window !== 'undefined' && window.matchMedia) {\r\n systemThemeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n systemThemeMediaQuery.addEventListener('change', (e) => {\r\n const storedTheme = getStoredTheme();\r\n if (!storedTheme) {\r\n setTheme(e.matches ? 'dark' : 'light');\r\n }\r\n });\r\n }\r\n }\r\n\r\n init();\r\n\r\n return {\r\n get currentTheme() {\r\n return currentThemeSignal();\r\n },\r\n get availableThemes() {\r\n return availableThemesSignal();\r\n },\r\n setTheme,\r\n toggleTheme,\r\n registerTheme,\r\n getThemeVariables,\r\n };\r\n}\r\n\r\nconst pluginTheme = definePlugin({\r\n name: 'theme',\r\n version: '6.0.0',\r\n description: 'LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support',\r\n author: 'LytJS Team',\r\n keywords: ['lytjs', 'theme', 'dark-mode', 'css-variables'],\r\n schema: {\r\n type: 'object',\r\n object: {\r\n properties: {\r\n defaultTheme: { type: 'string', default: 'light' },\r\n themes: { type: 'array', default: defaultThemes },\r\n enableSystemTheme: { type: 'boolean', default: true },\r\n storageKey: { type: 'string', default: 'lyt-theme' },\r\n },\r\n },\r\n },\r\n install(app, options) {\r\n const themeManager = createThemeManager(options as ThemeOptions);\r\n\r\n app.config.globalProperties.$theme = themeManager;\r\n\r\n app.provide('lyt-theme', themeManager);\r\n },\r\n});\r\n\r\nexport default pluginTheme;\r\nexport type { Theme, ThemeOptions, ThemeInstance };\r\nexport { createThemeManager };\r\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["signal","storedTheme","definePlugin"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * @lytjs/plugin-theme\n *\n * LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support.\n *\n * @packageDocumentation\n */\n\nimport { definePlugin } from '@lytjs/core';\nimport { signal } from '@lytjs/reactivity';\nimport type { Theme, ThemeOptions, ThemeInstance } from './types';\n\nconst defaultThemes: Theme[] = [\n {\n name: 'light',\n isDark: false,\n variables: {\n '--lyt-bg-primary': '#ffffff',\n '--lyt-bg-secondary': '#f5f5f5',\n '--lyt-text-primary': '#333333',\n '--lyt-text-secondary': '#666666',\n '--lyt-primary': '#1890ff',\n '--lyt-success': '#52c41a',\n '--lyt-warning': '#faad14',\n '--lyt-error': '#ff4d4f',\n '--lyt-border': '#d9d9d9',\n },\n },\n {\n name: 'dark',\n isDark: true,\n variables: {\n '--lyt-bg-primary': '#141414',\n '--lyt-bg-secondary': '#1f1f1f',\n '--lyt-text-primary': '#ffffff',\n '--lyt-text-secondary': '#a6a6a6',\n '--lyt-primary': '#177ddc',\n '--lyt-success': '#49aa19',\n '--lyt-warning': '#d89614',\n '--lyt-error': '#d32029',\n '--lyt-border': '#434343',\n },\n },\n];\n\nfunction getSystemTheme(): string {\n if (typeof window !== 'undefined' && window.matchMedia) {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n}\n\nfunction createThemeManager(options: ThemeOptions = {}): ThemeInstance {\n const {\n defaultTheme = 'light',\n themes = defaultThemes,\n enableSystemTheme = true,\n storageKey = 'lyt-theme',\n } = options;\n\n const themeMap = new Map<string, Theme>(themes.map((t) => [t.name, t]));\n const currentThemeSignal = signal<string>(defaultTheme);\n const availableThemesSignal = signal<string[]>(themes.map((t) => t.name));\n\n let styleElement: HTMLStyleElement | null = null;\n let systemThemeMediaQuery: MediaQueryList | null = null;\n\n function applyThemeVariables(variables: Record<string, string>) {\n if (typeof document === 'undefined') return;\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.setAttribute('data-lyt-theme', 'true');\n document.head.appendChild(styleElement);\n }\n\n const cssVars = Object.entries(variables)\n .map(([key, value]) => `${key}: ${value};`)\n .join('\\n');\n\n styleElement.textContent = `:root {\\n${cssVars}\\n}`;\n }\n\n function getStoredTheme(): string | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n return localStorage.getItem(storageKey);\n } catch {\n /* empty */\n return null;\n }\n }\n\n function setStoredTheme(name: string) {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.setItem(storageKey, name);\n } catch {\n /* empty */\n }\n }\n\n function setTheme(name: string) {\n if (!themeMap.has(name)) {\n console.warn(`[Theme] Theme \"${name}\" not found, falling back to default`);\n name = defaultTheme;\n }\n\n const theme = themeMap.get(name)!;\n currentThemeSignal.set(name);\n setStoredTheme(name);\n applyThemeVariables(theme.variables);\n\n if (typeof document !== 'undefined') {\n document.documentElement.setAttribute('data-lyt-theme', name);\n document.documentElement.classList.toggle('lyt-theme-dark', !!theme.isDark);\n }\n }\n\n function toggleTheme() {\n const available = availableThemesSignal();\n const currentIndex = available.indexOf(currentThemeSignal());\n const nextIndex = (currentIndex + 1) % available.length;\n const nextTheme = available[nextIndex];\n if (nextTheme) {\n setTheme(nextTheme);\n }\n }\n\n function registerTheme(theme: Theme) {\n themeMap.set(theme.name, theme);\n availableThemesSignal.set([...availableThemesSignal(), theme.name]);\n }\n\n function getThemeVariables(name?: string): Record<string, string> {\n const themeName = name || currentThemeSignal();\n const theme = themeMap.get(themeName);\n return theme ? theme.variables : {};\n }\n\n function init() {\n let initialTheme = defaultTheme;\n\n const storedTheme = getStoredTheme();\n if (storedTheme && themeMap.has(storedTheme)) {\n initialTheme = storedTheme;\n } else if (enableSystemTheme) {\n initialTheme = getSystemTheme();\n }\n\n setTheme(initialTheme);\n\n if (enableSystemTheme && typeof window !== 'undefined' && window.matchMedia) {\n systemThemeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n systemThemeMediaQuery.addEventListener('change', (e) => {\n const storedTheme = getStoredTheme();\n if (!storedTheme) {\n setTheme(e.matches ? 'dark' : 'light');\n }\n });\n }\n }\n\n init();\n\n return {\n get currentTheme() {\n return currentThemeSignal();\n },\n get availableThemes() {\n return availableThemesSignal();\n },\n setTheme,\n toggleTheme,\n registerTheme,\n getThemeVariables,\n };\n}\n\nconst pluginTheme = definePlugin({\n name: 'theme',\n version: '6.0.0',\n description:\n 'LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support',\n author: 'LytJS Team',\n keywords: ['lytjs', 'theme', 'dark-mode', 'css-variables'],\n schema: {\n type: 'object',\n object: {\n properties: {\n defaultTheme: { type: 'string', default: 'light' },\n themes: { type: 'array', default: defaultThemes },\n enableSystemTheme: { type: 'boolean', default: true },\n storageKey: { type: 'string', default: 'lyt-theme' },\n },\n },\n },\n install(app, options) {\n const themeManager = createThemeManager(options as ThemeOptions);\n\n app.config.globalProperties.$theme = themeManager;\n\n app.provide('lyt-theme', themeManager);\n },\n});\n\nexport default pluginTheme;\nexport type { Theme, ThemeOptions, ThemeInstance };\nexport { createThemeManager };\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["storedTheme"],"mappings":";;;;AAYA,IAAM,aAAA,GAAyB;AAAA,EAC7B;AAAA,IACE,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,kBAAA,EAAoB,SAAA;AAAA,MACpB,oBAAA,EAAsB,SAAA;AAAA,MACtB,oBAAA,EAAsB,SAAA;AAAA,MACtB,sBAAA,EAAwB,SAAA;AAAA,MACxB,eAAA,EAAiB,SAAA;AAAA,MACjB,eAAA,EAAiB,SAAA;AAAA,MACjB,eAAA,EAAiB,SAAA;AAAA,MACjB,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB;AAAA;AAClB,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ,IAAA;AAAA,IACR,SAAA,EAAW;AAAA,MACT,kBAAA,EAAoB,SAAA;AAAA,MACpB,oBAAA,EAAsB,SAAA;AAAA,MACtB,oBAAA,EAAsB,SAAA;AAAA,MACtB,sBAAA,EAAwB,SAAA;AAAA,MACxB,eAAA,EAAiB,SAAA;AAAA,MACjB,eAAA,EAAiB,SAAA;AAAA,MACjB,eAAA,EAAiB,SAAA;AAAA,MACjB,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB;AAAA;AAClB;AAEJ,CAAA;AAEA,SAAS,cAAA,GAAyB;AAChC,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,UAAA,EAAY;AACtD,IAAA,OAAO,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAAE,UAAU,MAAA,GAAS,OAAA;AAAA,EAC9E;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,OAAA,GAAwB,EAAC,EAAkB;AACrE,EAAA,MAAM;AAAA,IACJ,YAAA,GAAe,OAAA;AAAA,IACf,MAAA,GAAS,aAAA;AAAA,IACT,iBAAA,GAAoB,IAAA;AAAA,IACpB,UAAA,GAAa;AAAA,GACf,GAAI,OAAA;AAEJ,EAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAmB,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAC,CAAC,CAAA;AACtE,EAAA,MAAM,kBAAA,GAAqB,OAAe,YAAY,CAAA;AACtD,EAAA,MAAM,qBAAA,GAAwB,OAAiB,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAC,CAAA;AAExE,EAAA,IAAI,YAAA,GAAwC,IAAA;AAC5C,EAAA,IAAI,qBAAA,GAA+C,IAAA;AAEnD,EAAA,SAAS,oBAAoB,SAAA,EAAmC;AAC9D,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AAErC,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,YAAA,GAAe,QAAA,CAAS,cAAc,OAAO,CAAA;AAC7C,MAAA,YAAA,CAAa,YAAA,CAAa,kBAAkB,MAAM,CAAA;AAClD,MAAA,QAAA,CAAS,IAAA,CAAK,YAAY,YAAY,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,CACrC,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,GAAG,GAAG,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,CAAG,CAAA,CACzC,KAAK,IAAI,CAAA;AAEZ,IAAA,YAAA,CAAa,WAAA,GAAc,CAAA;AAAA,EAAY,OAAO;AAAA,CAAA,CAAA;AAAA,EAChD;AAEA,EAAA,SAAS,cAAA,GAAgC;AACvC,IAAA,IAAI,OAAO,YAAA,KAAiB,WAAA,EAAa,OAAO,IAAA;AAChD,IAAA,IAAI;AACF,MAAA,OAAO,YAAA,CAAa,QAAQ,UAAU,CAAA;AAAA,IACxC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,SAAS,eAAe,IAAA,EAAc;AACpC,IAAA,IAAI,OAAO,iBAAiB,WAAA,EAAa;AACzC,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,OAAA,CAAQ,YAAY,IAAI,CAAA;AAAA,IACvC,CAAA,CAAA,MAAQ;AAAA,IACR;AAAA,EACF;AAEA,EAAA,SAAS,SAAS,IAAA,EAAc;AAC9B,IAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA,EAAG;AACvB,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,eAAA,EAAkB,IAAI,CAAA,oCAAA,CAAsC,CAAA;AACzE,MAAA,IAAA,GAAO,YAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,IAAI,CAAA;AAC/B,IAAA,kBAAA,CAAmB,IAAI,IAAI,CAAA;AAC3B,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,mBAAA,CAAoB,MAAM,SAAS,CAAA;AAEnC,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACnC,MAAA,QAAA,CAAS,eAAA,CAAgB,YAAA,CAAa,gBAAA,EAAkB,IAAI,CAAA;AAC5D,MAAA,QAAA,CAAS,gBAAgB,SAAA,CAAU,MAAA,CAAO,kBAAkB,CAAC,CAAC,MAAM,MAAM,CAAA;AAAA,IAC5E;AAAA,EACF;AAEA,EAAA,SAAS,WAAA,GAAc;AACrB,IAAA,MAAM,YAAY,qBAAA,EAAsB;AACxC,IAAA,MAAM,YAAA,GAAe,SAAA,CAAU,OAAA,CAAQ,kBAAA,EAAoB,CAAA;AAC3D,IAAA,MAAM,SAAA,GAAA,CAAa,YAAA,GAAe,CAAA,IAAK,SAAA,CAAU,MAAA;AACjD,IAAA,MAAM,SAAA,GAAY,UAAU,SAAS,CAAA;AACrC,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,SAAS,cAAc,KAAA,EAAc;AACnC,IAAA,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,KAAK,CAAA;AAC9B,IAAA,qBAAA,CAAsB,IAAI,CAAC,GAAG,uBAAsB,EAAG,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,EACpE;AAEA,EAAA,SAAS,kBAAkB,IAAA,EAAuC;AAChE,IAAA,MAAM,SAAA,GAAY,QAAQ,kBAAA,EAAmB;AAC7C,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AACpC,IAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,SAAA,GAAY,EAAC;AAAA,EACpC;AAEA,EAAA,SAAS,IAAA,GAAO;AACd,IAAA,IAAI,YAAA,GAAe,YAAA;AAEnB,IAAA,MAAM,cAAc,cAAA,EAAe;AACnC,IAAA,IAAI,WAAA,IAAe,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA,EAAG;AAC5C,MAAA,YAAA,GAAe,WAAA;AAAA,IACjB,WAAW,iBAAA,EAAmB;AAC5B,MAAA,YAAA,GAAe,cAAA,EAAe;AAAA,IAChC;AAEA,IAAA,QAAA,CAAS,YAAY,CAAA;AAErB,IAAA,IAAI,iBAAA,IAAqB,OAAO,MAAA,KAAW,WAAA,IAAe,OAAO,UAAA,EAAY;AAC3E,MAAA,qBAAA,GAAwB,MAAA,CAAO,WAAW,8BAA8B,CAAA;AACxE,MAAA,qBAAA,CAAsB,gBAAA,CAAiB,QAAA,EAAU,CAAC,CAAA,KAAM;AACtD,QAAA,MAAMA,eAAc,cAAA,EAAe;AACnC,QAAA,IAAI,CAACA,YAAAA,EAAa;AAChB,UAAA,QAAA,CAAS,CAAA,CAAE,OAAA,GAAU,MAAA,GAAS,OAAO,CAAA;AAAA,QACvC;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAA,EAAK;AAEL,EAAA,OAAO;AAAA,IACL,IAAI,YAAA,GAAe;AACjB,MAAA,OAAO,kBAAA,EAAmB;AAAA,IAC5B,CAAA;AAAA,IACA,IAAI,eAAA,GAAkB;AACpB,MAAA,OAAO,qBAAA,EAAsB;AAAA,IAC/B,CAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,IAAM,cAAc,YAAA,CAAa;AAAA,EAC/B,IAAA,EAAM,OAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,oGAAA;AAAA,EACb,MAAA,EAAQ,YAAA;AAAA,EACR,QAAA,EAAU,CAAC,OAAA,EAAS,OAAA,EAAS,aAAa,eAAe,CAAA;AAAA,EACzD,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,UAAA,EAAY;AAAA,QACV,YAAA,EAAc,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,OAAA,EAAQ;AAAA,QACjD,MAAA,EAAQ,EAAE,IAAA,EAAM,OAAA,EAAS,SAAS,aAAA,EAAc;AAAA,QAChD,iBAAA,EAAmB,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,IAAA,EAAK;AAAA,QACpD,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,WAAA;AAAY;AACrD;AACF,GACF;AAAA,EACA,OAAA,CAAQ,KAAK,OAAA,EAAS;AACpB,IAAA,MAAM,YAAA,GAAe,mBAAmB,OAAuB,CAAA;AAE/D,IAAA,GAAA,CAAI,MAAA,CAAO,iBAAiB,MAAA,GAAS,YAAA;AAErC,IAAA,GAAA,CAAI,OAAA,CAAQ,aAAa,YAAY,CAAA;AAAA,EACvC;AACF,CAAC,CAAA;AAED,IAAO,aAAA,GAAQ","file":"index.mjs","sourcesContent":["/**\r\n * @lytjs/plugin-theme\r\n *\r\n * LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support.\r\n *\r\n * @packageDocumentation\r\n */\r\n\r\nimport { definePlugin } from '@lytjs/core';\r\nimport { signal } from '@lytjs/reactivity';\r\nimport type { Theme, ThemeOptions, ThemeInstance } from './types';\r\n\r\nconst defaultThemes: Theme[] = [\r\n {\r\n name: 'light',\r\n isDark: false,\r\n variables: {\r\n '--lyt-bg-primary': '#ffffff',\r\n '--lyt-bg-secondary': '#f5f5f5',\r\n '--lyt-text-primary': '#333333',\r\n '--lyt-text-secondary': '#666666',\r\n '--lyt-primary': '#1890ff',\r\n '--lyt-success': '#52c41a',\r\n '--lyt-warning': '#faad14',\r\n '--lyt-error': '#ff4d4f',\r\n '--lyt-border': '#d9d9d9',\r\n },\r\n },\r\n {\r\n name: 'dark',\r\n isDark: true,\r\n variables: {\r\n '--lyt-bg-primary': '#141414',\r\n '--lyt-bg-secondary': '#1f1f1f',\r\n '--lyt-text-primary': '#ffffff',\r\n '--lyt-text-secondary': '#a6a6a6',\r\n '--lyt-primary': '#177ddc',\r\n '--lyt-success': '#49aa19',\r\n '--lyt-warning': '#d89614',\r\n '--lyt-error': '#d32029',\r\n '--lyt-border': '#434343',\r\n },\r\n },\r\n];\r\n\r\nfunction getSystemTheme(): string {\r\n if (typeof window !== 'undefined' && window.matchMedia) {\r\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\r\n }\r\n return 'light';\r\n}\r\n\r\nfunction createThemeManager(options: ThemeOptions = {}): ThemeInstance {\r\n const {\r\n defaultTheme = 'light',\r\n themes = defaultThemes,\r\n enableSystemTheme = true,\r\n storageKey = 'lyt-theme',\r\n } = options;\r\n\r\n const themeMap = new Map<string, Theme>(themes.map((t) => [t.name, t]));\r\n const currentThemeSignal = signal<string>(defaultTheme);\r\n const availableThemesSignal = signal<string[]>(themes.map((t) => t.name));\r\n\r\n let styleElement: HTMLStyleElement | null = null;\r\n let systemThemeMediaQuery: MediaQueryList | null = null;\r\n\r\n function applyThemeVariables(variables: Record<string, string>) {\r\n if (typeof document === 'undefined') return;\r\n\r\n if (!styleElement) {\r\n styleElement = document.createElement('style');\r\n styleElement.setAttribute('data-lyt-theme', 'true');\r\n document.head.appendChild(styleElement);\r\n }\r\n\r\n const cssVars = Object.entries(variables)\r\n .map(([key, value]) => `${key}: ${value};`)\r\n .join('\\n');\r\n\r\n styleElement.textContent = `:root {\\n${cssVars}\\n}`;\r\n }\r\n\r\n function getStoredTheme(): string | null {\r\n if (typeof localStorage === 'undefined') return null;\r\n try {\r\n return localStorage.getItem(storageKey);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n function setStoredTheme(name: string) {\r\n if (typeof localStorage === 'undefined') return;\r\n try {\r\n localStorage.setItem(storageKey, name);\r\n } catch {\r\n }\r\n }\r\n\r\n function setTheme(name: string) {\r\n if (!themeMap.has(name)) {\r\n console.warn(`[Theme] Theme \"${name}\" not found, falling back to default`);\r\n name = defaultTheme;\r\n }\r\n\r\n const theme = themeMap.get(name)!;\r\n currentThemeSignal.set(name);\r\n setStoredTheme(name);\r\n applyThemeVariables(theme.variables);\r\n\r\n if (typeof document !== 'undefined') {\r\n document.documentElement.setAttribute('data-lyt-theme', name);\r\n document.documentElement.classList.toggle('lyt-theme-dark', !!theme.isDark);\r\n }\r\n }\r\n\r\n function toggleTheme() {\r\n const available = availableThemesSignal();\r\n const currentIndex = available.indexOf(currentThemeSignal());\r\n const nextIndex = (currentIndex + 1) % available.length;\r\n const nextTheme = available[nextIndex];\r\n if (nextTheme) {\r\n setTheme(nextTheme);\r\n }\r\n }\r\n\r\n function registerTheme(theme: Theme) {\r\n themeMap.set(theme.name, theme);\r\n availableThemesSignal.set([...availableThemesSignal(), theme.name]);\r\n }\r\n\r\n function getThemeVariables(name?: string): Record<string, string> {\r\n const themeName = name || currentThemeSignal();\r\n const theme = themeMap.get(themeName);\r\n return theme ? theme.variables : {};\r\n }\r\n\r\n function init() {\r\n let initialTheme = defaultTheme;\r\n\r\n const storedTheme = getStoredTheme();\r\n if (storedTheme && themeMap.has(storedTheme)) {\r\n initialTheme = storedTheme;\r\n } else if (enableSystemTheme) {\r\n initialTheme = getSystemTheme();\r\n }\r\n\r\n setTheme(initialTheme);\r\n\r\n if (enableSystemTheme && typeof window !== 'undefined' && window.matchMedia) {\r\n systemThemeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\r\n systemThemeMediaQuery.addEventListener('change', (e) => {\r\n const storedTheme = getStoredTheme();\r\n if (!storedTheme) {\r\n setTheme(e.matches ? 'dark' : 'light');\r\n }\r\n });\r\n }\r\n }\r\n\r\n init();\r\n\r\n return {\r\n get currentTheme() {\r\n return currentThemeSignal();\r\n },\r\n get availableThemes() {\r\n return availableThemesSignal();\r\n },\r\n setTheme,\r\n toggleTheme,\r\n registerTheme,\r\n getThemeVariables,\r\n };\r\n}\r\n\r\nconst pluginTheme = definePlugin({\r\n name: 'theme',\r\n version: '6.0.0',\r\n description: 'LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support',\r\n author: 'LytJS Team',\r\n keywords: ['lytjs', 'theme', 'dark-mode', 'css-variables'],\r\n schema: {\r\n type: 'object',\r\n object: {\r\n properties: {\r\n defaultTheme: { type: 'string', default: 'light' },\r\n themes: { type: 'array', default: defaultThemes },\r\n enableSystemTheme: { type: 'boolean', default: true },\r\n storageKey: { type: 'string', default: 'lyt-theme' },\r\n },\r\n },\r\n },\r\n install(app, options) {\r\n const themeManager = createThemeManager(options as ThemeOptions);\r\n\r\n app.config.globalProperties.$theme = themeManager;\r\n\r\n app.provide('lyt-theme', themeManager);\r\n },\r\n});\r\n\r\nexport default pluginTheme;\r\nexport type { Theme, ThemeOptions, ThemeInstance };\r\nexport { createThemeManager };\r\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["storedTheme"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * @lytjs/plugin-theme\n *\n * LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support.\n *\n * @packageDocumentation\n */\n\nimport { definePlugin } from '@lytjs/core';\nimport { signal } from '@lytjs/reactivity';\nimport type { Theme, ThemeOptions, ThemeInstance } from './types';\n\nconst defaultThemes: Theme[] = [\n {\n name: 'light',\n isDark: false,\n variables: {\n '--lyt-bg-primary': '#ffffff',\n '--lyt-bg-secondary': '#f5f5f5',\n '--lyt-text-primary': '#333333',\n '--lyt-text-secondary': '#666666',\n '--lyt-primary': '#1890ff',\n '--lyt-success': '#52c41a',\n '--lyt-warning': '#faad14',\n '--lyt-error': '#ff4d4f',\n '--lyt-border': '#d9d9d9',\n },\n },\n {\n name: 'dark',\n isDark: true,\n variables: {\n '--lyt-bg-primary': '#141414',\n '--lyt-bg-secondary': '#1f1f1f',\n '--lyt-text-primary': '#ffffff',\n '--lyt-text-secondary': '#a6a6a6',\n '--lyt-primary': '#177ddc',\n '--lyt-success': '#49aa19',\n '--lyt-warning': '#d89614',\n '--lyt-error': '#d32029',\n '--lyt-border': '#434343',\n },\n },\n];\n\nfunction getSystemTheme(): string {\n if (typeof window !== 'undefined' && window.matchMedia) {\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n }\n return 'light';\n}\n\nfunction createThemeManager(options: ThemeOptions = {}): ThemeInstance {\n const {\n defaultTheme = 'light',\n themes = defaultThemes,\n enableSystemTheme = true,\n storageKey = 'lyt-theme',\n } = options;\n\n const themeMap = new Map<string, Theme>(themes.map((t) => [t.name, t]));\n const currentThemeSignal = signal<string>(defaultTheme);\n const availableThemesSignal = signal<string[]>(themes.map((t) => t.name));\n\n let styleElement: HTMLStyleElement | null = null;\n let systemThemeMediaQuery: MediaQueryList | null = null;\n\n function applyThemeVariables(variables: Record<string, string>) {\n if (typeof document === 'undefined') return;\n\n if (!styleElement) {\n styleElement = document.createElement('style');\n styleElement.setAttribute('data-lyt-theme', 'true');\n document.head.appendChild(styleElement);\n }\n\n const cssVars = Object.entries(variables)\n .map(([key, value]) => `${key}: ${value};`)\n .join('\\n');\n\n styleElement.textContent = `:root {\\n${cssVars}\\n}`;\n }\n\n function getStoredTheme(): string | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n return localStorage.getItem(storageKey);\n } catch {\n /* empty */\n return null;\n }\n }\n\n function setStoredTheme(name: string) {\n if (typeof localStorage === 'undefined') return;\n try {\n localStorage.setItem(storageKey, name);\n } catch {\n /* empty */\n }\n }\n\n function setTheme(name: string) {\n if (!themeMap.has(name)) {\n console.warn(`[Theme] Theme \"${name}\" not found, falling back to default`);\n name = defaultTheme;\n }\n\n const theme = themeMap.get(name)!;\n currentThemeSignal.set(name);\n setStoredTheme(name);\n applyThemeVariables(theme.variables);\n\n if (typeof document !== 'undefined') {\n document.documentElement.setAttribute('data-lyt-theme', name);\n document.documentElement.classList.toggle('lyt-theme-dark', !!theme.isDark);\n }\n }\n\n function toggleTheme() {\n const available = availableThemesSignal();\n const currentIndex = available.indexOf(currentThemeSignal());\n const nextIndex = (currentIndex + 1) % available.length;\n const nextTheme = available[nextIndex];\n if (nextTheme) {\n setTheme(nextTheme);\n }\n }\n\n function registerTheme(theme: Theme) {\n themeMap.set(theme.name, theme);\n availableThemesSignal.set([...availableThemesSignal(), theme.name]);\n }\n\n function getThemeVariables(name?: string): Record<string, string> {\n const themeName = name || currentThemeSignal();\n const theme = themeMap.get(themeName);\n return theme ? theme.variables : {};\n }\n\n function init() {\n let initialTheme = defaultTheme;\n\n const storedTheme = getStoredTheme();\n if (storedTheme && themeMap.has(storedTheme)) {\n initialTheme = storedTheme;\n } else if (enableSystemTheme) {\n initialTheme = getSystemTheme();\n }\n\n setTheme(initialTheme);\n\n if (enableSystemTheme && typeof window !== 'undefined' && window.matchMedia) {\n systemThemeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n systemThemeMediaQuery.addEventListener('change', (e) => {\n const storedTheme = getStoredTheme();\n if (!storedTheme) {\n setTheme(e.matches ? 'dark' : 'light');\n }\n });\n }\n }\n\n init();\n\n return {\n get currentTheme() {\n return currentThemeSignal();\n },\n get availableThemes() {\n return availableThemesSignal();\n },\n setTheme,\n toggleTheme,\n registerTheme,\n getThemeVariables,\n };\n}\n\nconst pluginTheme = definePlugin({\n name: 'theme',\n version: '6.0.0',\n description:\n 'LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support',\n author: 'LytJS Team',\n keywords: ['lytjs', 'theme', 'dark-mode', 'css-variables'],\n schema: {\n type: 'object',\n object: {\n properties: {\n defaultTheme: { type: 'string', default: 'light' },\n themes: { type: 'array', default: defaultThemes },\n enableSystemTheme: { type: 'boolean', default: true },\n storageKey: { type: 'string', default: 'lyt-theme' },\n },\n },\n },\n install(app, options) {\n const themeManager = createThemeManager(options as ThemeOptions);\n\n app.config.globalProperties.$theme = themeManager;\n\n app.provide('lyt-theme', themeManager);\n },\n});\n\nexport default pluginTheme;\nexport type { Theme, ThemeOptions, ThemeInstance };\nexport { createThemeManager };\n"]}
package/package.json CHANGED
@@ -1,53 +1,53 @@
1
- {
2
- "name": "@lytjs/plugin-theme",
3
- "version": "6.4.0",
4
- "description": "LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support",
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "module": "./dist/index.mjs",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.mjs",
13
- "require": "./dist/index.cjs"
14
- },
15
- "./package.json": "./package.json"
16
- },
17
- "files": [
18
- "dist"
19
- ],
20
- "sideEffects": false,
21
- "scripts": {
22
- "build": "tsup",
23
- "dev": "tsup --watch",
24
- "test": "vitest run",
25
- "test:watch": "vitest",
26
- "test:coverage": "vitest run --coverage",
27
- "type-check": "tsc --noEmit",
28
- "lint": "eslint \"src/**/*.ts\"",
29
- "clean": "rm -rf dist"
30
- },
31
- "dependencies": {
32
- "@lytjs/core": "^6.0.0",
33
- "@lytjs/reactivity": "^6.0.0",
34
- "@lytjs/common-is": "^6.0.0"
35
- },
36
- "devDependencies": {
37
- "tsup": "^8.0.0",
38
- "typescript": "^5.4.0",
39
- "vitest": "^3.0.0"
40
- },
41
- "license": "MIT",
42
- "repository": {
43
- "type": "git",
44
- "url": "https://gitee.com/lytjs/lytjs.git",
45
- "directory": "packages/plugins/packages/plugin-theme"
46
- },
47
- "keywords": [
48
- "lytjs",
49
- "theme",
50
- "dark-mode",
51
- "css-variables"
52
- ]
53
- }
1
+ {
2
+ "name": "@lytjs/plugin-theme",
3
+ "version": "6.6.0",
4
+ "description": "LytJS official theme plugin for CSS variable management, dark/light mode, and custom theme support",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./package.json": "./package.json"
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "sideEffects": false,
21
+ "scripts": {
22
+ "build": "tsup",
23
+ "dev": "tsup --watch",
24
+ "test": "vitest run",
25
+ "test:watch": "vitest",
26
+ "test:coverage": "vitest run --coverage",
27
+ "type-check": "tsc --noEmit",
28
+ "lint": "eslint \"src/**/*.ts\"",
29
+ "clean": "rm -rf dist"
30
+ },
31
+ "dependencies": {
32
+ "@lytjs/core": "workspace:*",
33
+ "@lytjs/reactivity": "workspace:*",
34
+ "@lytjs/common-is": "workspace:*"
35
+ },
36
+ "devDependencies": {
37
+ "tsup": "^8.0.0",
38
+ "typescript": "^5.4.0",
39
+ "vitest": "^3.0.0"
40
+ },
41
+ "license": "MIT",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "https://gitee.com/lytjs/lytjs.git",
45
+ "directory": "packages/plugins/packages/plugin-theme"
46
+ },
47
+ "keywords": [
48
+ "lytjs",
49
+ "theme",
50
+ "dark-mode",
51
+ "css-variables"
52
+ ]
53
+ }
package/dist/index.d.cts DELETED
@@ -1,44 +0,0 @@
1
- import * as _lytjs_core from '@lytjs/core';
2
-
3
- /**
4
- * @lytjs/plugin-theme - 类型定义
5
- */
6
- interface Theme {
7
- /** 主题名称 */
8
- name: string;
9
- /** 主题变量 */
10
- variables: Record<string, string>;
11
- /** 是否为深色主题 */
12
- isDark?: boolean;
13
- }
14
- interface ThemeOptions {
15
- /** 默认主题 */
16
- defaultTheme?: string;
17
- /** 主题列表 */
18
- themes?: Theme[];
19
- /** 是否启用系统主题检测 */
20
- enableSystemTheme?: boolean;
21
- /** 本地存储 key */
22
- storageKey?: string;
23
- /** CSS 变量前缀 */
24
- variablePrefix?: string;
25
- }
26
- interface ThemeInstance {
27
- /** 当前主题 */
28
- currentTheme: string;
29
- /** 可用主题列表 */
30
- availableThemes: string[];
31
- /** 设置主题 */
32
- setTheme: (name: string) => void;
33
- /** 切换到下一个主题 */
34
- toggleTheme: () => void;
35
- /** 注册新主题 */
36
- registerTheme: (theme: Theme) => void;
37
- /** 获取主题变量 */
38
- getThemeVariables: (name?: string) => Record<string, string>;
39
- }
40
-
41
- declare function createThemeManager(options?: ThemeOptions): ThemeInstance;
42
- declare const pluginTheme: _lytjs_core.PluginDefinition<unknown>;
43
-
44
- export { type Theme, type ThemeInstance, type ThemeOptions, createThemeManager, pluginTheme as default };
package/dist/index.d.ts DELETED
@@ -1,44 +0,0 @@
1
- import * as _lytjs_core from '@lytjs/core';
2
-
3
- /**
4
- * @lytjs/plugin-theme - 类型定义
5
- */
6
- interface Theme {
7
- /** 主题名称 */
8
- name: string;
9
- /** 主题变量 */
10
- variables: Record<string, string>;
11
- /** 是否为深色主题 */
12
- isDark?: boolean;
13
- }
14
- interface ThemeOptions {
15
- /** 默认主题 */
16
- defaultTheme?: string;
17
- /** 主题列表 */
18
- themes?: Theme[];
19
- /** 是否启用系统主题检测 */
20
- enableSystemTheme?: boolean;
21
- /** 本地存储 key */
22
- storageKey?: string;
23
- /** CSS 变量前缀 */
24
- variablePrefix?: string;
25
- }
26
- interface ThemeInstance {
27
- /** 当前主题 */
28
- currentTheme: string;
29
- /** 可用主题列表 */
30
- availableThemes: string[];
31
- /** 设置主题 */
32
- setTheme: (name: string) => void;
33
- /** 切换到下一个主题 */
34
- toggleTheme: () => void;
35
- /** 注册新主题 */
36
- registerTheme: (theme: Theme) => void;
37
- /** 获取主题变量 */
38
- getThemeVariables: (name?: string) => Record<string, string>;
39
- }
40
-
41
- declare function createThemeManager(options?: ThemeOptions): ThemeInstance;
42
- declare const pluginTheme: _lytjs_core.PluginDefinition<unknown>;
43
-
44
- export { type Theme, type ThemeInstance, type ThemeOptions, createThemeManager, pluginTheme as default };