@lytjs/plugin-theme 4.2.0 → 5.0.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.
package/README.md ADDED
@@ -0,0 +1,163 @@
1
+ # @lytjs/plugin-theme
2
+
3
+ > Lyt.js 主题切换插件 - 支持亮色/暗色主题和自定义主题
4
+
5
+ **版本:** 4.2.0
6
+
7
+ ## 安装
8
+
9
+ ```bash
10
+ npm install @lytjs/plugin-theme
11
+ ```
12
+
13
+ ## 使用
14
+
15
+ ### 注册插件
16
+
17
+ ```typescript
18
+ import { createApp } from '@lytjs/core'
19
+ import { createTheme } from '@lytjs/plugin-theme'
20
+
21
+ const theme = createTheme({
22
+ default: 'light',
23
+ storageKey: 'lyt_theme',
24
+ themes: {
25
+ light: { '--bg': '#fff', '--text': '#333' },
26
+ dark: { '--bg': '#333', '--text': '#fff' },
27
+ },
28
+ })
29
+
30
+ const app = createApp({})
31
+ app.use(theme)
32
+ ```
33
+
34
+ ### 切换主题
35
+
36
+ ```typescript
37
+ // 切换到指定主题
38
+ theme.set('dark')
39
+
40
+ // 在预设主题间循环切换
41
+ theme.toggle()
42
+
43
+ // 重置为默认主题
44
+ theme.reset()
45
+
46
+ // 获取当前主题名称
47
+ theme.current // 'dark'
48
+ ```
49
+
50
+ ### 使用内置主题
51
+
52
+ 插件内置了 `light` 和 `dark` 两套主题,开箱即用:
53
+
54
+ ```typescript
55
+ const theme = createTheme({
56
+ default: 'light',
57
+ autoDetect: true, // 自动检测系统主题偏好
58
+ })
59
+ ```
60
+
61
+ 内置主题包含以下 CSS 变量:
62
+
63
+ | 变量 | 说明 |
64
+ |------|------|
65
+ | `--bg` | 背景色 |
66
+ | `--bg-secondary` | 次要背景色 |
67
+ | `--text` | 文字颜色 |
68
+ | `--text-secondary` | 次要文字颜色 |
69
+ | `--text-muted` | 弱化文字颜色 |
70
+ | `--primary` | 主色调 |
71
+ | `--primary-hover` | 主色调悬停 |
72
+ | `--secondary` | 次要色调 |
73
+ | `--success` | 成功色 |
74
+ | `--warning` | 警告色 |
75
+ | `--error` | 错误色 |
76
+ | `--info` | 信息色 |
77
+ | `--border` | 边框色 |
78
+ | `--shadow` | 阴影色 |
79
+
80
+ ### 动态添加主题
81
+
82
+ ```typescript
83
+ // 添加新主题
84
+ theme.addTheme('blue', {
85
+ '--bg': '#f0f8ff',
86
+ '--text': '#1a365d',
87
+ '--primary': '#3182ce',
88
+ })
89
+
90
+ // 移除主题
91
+ theme.removeTheme('blue')
92
+ ```
93
+
94
+ ### 动态 CSS 变量
95
+
96
+ ```typescript
97
+ // 设置动态 CSS 变量(不保存到持久化)
98
+ theme.setVariable('--custom-color', '#ff6600')
99
+
100
+ // 清除动态变量
101
+ theme.clearVariable('--custom-color')
102
+
103
+ // 清除所有动态变量
104
+ theme.clearVariables()
105
+ ```
106
+
107
+ ### 系统主题检测
108
+
109
+ ```typescript
110
+ // 获取系统偏好主题
111
+ theme.getSystemPreference() // 'light' | 'dark'
112
+
113
+ // 监听系统主题变化
114
+ const unsubscribe = theme.watchSystemPreference((pref) => {
115
+ console.log('系统主题已切换为:', pref)
116
+ })
117
+
118
+ // 取消监听
119
+ unsubscribe()
120
+ ```
121
+
122
+ ## API
123
+
124
+ ### Options
125
+
126
+ | 选项 | 类型 | 默认值 | 描述 |
127
+ |------|------|--------|------|
128
+ | `default` | `string` | `'light'` | 默认主题 |
129
+ | `storageKey` | `string` | `'lyt_theme'` | localStorage 中存储主题的 key |
130
+ | `themes` | `Record<string, ThemeConfig>` | 内置 light/dark | 主题配置对象 |
131
+ | `onChange` | `(newTheme: string, oldTheme: string) => void` | - | 主题切换时的回调 |
132
+ | `autoDetect` | `boolean` | `true` | 是否自动检测系统主题偏好 |
133
+ | `useDataAttribute` | `boolean` | `true` | 是否添加 `data-theme` 属性到 html 标签 |
134
+ | `cssPrefix` | `string` | `'--lyt-'` | 自定义 CSS 变量前缀 |
135
+ | `debug` | `boolean` | `false` | 是否开启调试模式 |
136
+
137
+ ### 属性
138
+
139
+ | 属性 | 类型 | 描述 |
140
+ |------|------|------|
141
+ | `current` | `string` | 当前主题名称(只读) |
142
+
143
+ ### 方法
144
+
145
+ | 方法 | 签名 | 描述 |
146
+ |------|------|------|
147
+ | `set` | `(themeName: string) => void` | 切换到指定主题 |
148
+ | `toggle` | `() => void` | 在预设主题间循环切换 |
149
+ | `reset` | `() => void` | 重置为默认主题 |
150
+ | `list` | `() => string[]` | 获取所有可用主题列表 |
151
+ | `addTheme` | `(name: string, config: ThemeConfig) => void` | 动态添加/更新主题 |
152
+ | `removeTheme` | `(name: string) => void` | 移除主题(不能移除默认主题) |
153
+ | `getConfig` | `() => ThemeConfig \| null` | 获取当前主题的 CSS 变量配置 |
154
+ | `getConfigFor` | `(themeName: string) => ThemeConfig \| null` | 获取指定主题的 CSS 变量配置 |
155
+ | `setVariable` | `(key: string, value: string) => void` | 动态设置 CSS 变量(不持久化) |
156
+ | `clearVariable` | `(key: string) => void` | 清除动态设置的 CSS 变量 |
157
+ | `clearVariables` | `() => void` | 清除所有动态变量 |
158
+ | `getSystemPreference` | `() => 'light' \| 'dark'` | 获取系统偏好主题 |
159
+ | `watchSystemPreference` | `(callback: (theme: 'light' \| 'dark') => void) => () => void` | 监听系统主题变化 |
160
+
161
+ ## License
162
+
163
+ MIT
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- var p=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var z=(i,n)=>{for(var l in n)p(i,l,{get:n[l],enumerable:!0})},B=(i,n,l,f)=>{if(n&&typeof n=="object"||typeof n=="function")for(let g of K(n))!Q.call(i,g)&&g!==l&&p(i,g,{get:()=>n[g],enumerable:!(f=H(n,g))||f.enumerable});return i};var R=i=>B(p({},"__esModule",{value:!0}),i);var G={};z(G,{BUILT_IN_THEMES:()=>$,createTheme:()=>q});module.exports=R(G);var $={light:{"--bg":"#ffffff","--bg-secondary":"#f5f5f5","--text":"#333333","--text-secondary":"#666666","--text-muted":"#999999","--primary":"#42b883","--primary-hover":"#3aa876","--secondary":"#35495e","--success":"#10b981","--warning":"#f59e0b","--error":"#ef4444","--info":"#3b82f6","--border":"#e5e7eb","--shadow":"rgba(0, 0, 0, 0.1)"},dark:{"--bg":"#1a1a1a","--bg-secondary":"#2d2d2d","--text":"#e5e5e5","--text-secondary":"#a3a3a3","--text-muted":"#737373","--primary":"#42b883","--primary-hover":"#3aa876","--secondary":"#94a3b8","--success":"#10b981","--warning":"#f59e0b","--error":"#ef4444","--info":"#3b82f6","--border":"#404040","--shadow":"rgba(0, 0, 0, 0.3)"}};function y(){return document.documentElement}function U(i){return(...n)=>{}}function q(i={}){let{default:n="light",storageKey:l="lyt_theme",themes:f={},onChange:g,autoDetect:w=!0,useDataAttribute:C=!0,cssPrefix:h="--lyt-",debug:x=!1}=i,o=U(x),s={...$,...f},a=n,d={};function k(){try{let e=localStorage.getItem(l);if(e&&s[e])return e}catch(e){}return null}function E(e){try{localStorage.setItem(l,e)}catch(t){}}function P(){var e;return typeof window=="undefined"?"light":(e=window.matchMedia)!=null&&e.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}function V(e){if(typeof window=="undefined"||!window.matchMedia)return()=>{};let t=window.matchMedia("(prefers-color-scheme: dark)");function r(c){e(c.matches?"dark":"light")}return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}function u(e){let t=y(),r=s[e];if(!r){o(`theme '${e}' not found`);return}o(`applying theme '${e}'`,r),Object.entries(r).forEach(([c,v])=>{let T=c.startsWith("--")?c:`${h}${c}`;t.style.setProperty(T,v)}),Object.entries(d).forEach(([c,v])=>{let T=c.startsWith("--")?c:`${h}${c}`;t.style.setProperty(T,v)}),C&&t.setAttribute("data-theme",e),t.style.setProperty("color-scheme",e==="dark"?"dark":"light")}function m(e){if(!s[e]){o(`theme '${e}' not found, available:`,Object.keys(s));return}let t=a;t!==e&&(a=e,u(e),E(e),g&&g(e,t),o(`theme changed from '${t}' to '${e}'`))}function O(){let e=Object.keys(s),r=(e.indexOf(a)+1)%e.length;m(e[r])}function S(){m(n)}function j(){return Object.keys(s)}function I(e,t){s[e]=t,o(`added/updated theme '${e}'`,t),a===e&&u(e)}function L(e){if(e===n){o("cannot remove default theme");return}delete s[e],a===e&&m(n),o(`removed theme '${e}'`)}function M(){return s[a]||null}function D(e){return s[e]||null}function W(e,t){let r=e.startsWith("--")?e:`${h}${e}`;d[r]=t,y().style.setProperty(r,t),o(`set variable '${r}' = '${t}'`)}function _(e){let t=e.startsWith("--")?e:`${h}${e}`;delete d[t],y().style.removeProperty(t),o(`cleared variable '${t}'`)}function A(){Object.keys(d).forEach(e=>{y().style.removeProperty(e)}),Object.keys(d).forEach(e=>delete d[e]),u(a),o("cleared all dynamic variables")}function F(){let e=k();if(!e&&w){let t=P();e=s[t]?t:n}e||(e=n),o(`initializing with theme '${e}'`),a=e,u(e)}F();let b={install(e,t){e.config=e.config||{},e.config.globalProperties=e.config.globalProperties||{},e.config.globalProperties.$theme=b,typeof e.provide=="function"&&e.provide("theme",b)},get current(){return a},set:m,toggle:O,reset:S,list:j,addTheme:I,removeTheme:L,getConfig:M,getConfigFor:D,setVariable:W,clearVariable:_,clearVariables:A,getSystemPreference:P,watchSystemPreference:V};return b}
1
+ "use strict";var p=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var Q=Object.prototype.hasOwnProperty;var z=(o,n)=>{for(var g in n)p(o,g,{get:n[g],enumerable:!0})},B=(o,n,g,f)=>{if(n&&typeof n=="object"||typeof n=="function")for(let l of K(n))!Q.call(o,l)&&l!==g&&p(o,l,{get:()=>n[l],enumerable:!(f=H(n,l))||f.enumerable});return o};var R=o=>B(p({},"__esModule",{value:!0}),o);var G={};z(G,{BUILT_IN_THEMES:()=>w,createTheme:()=>q});module.exports=R(G);var w={light:{"--bg":"#ffffff","--bg-secondary":"#f5f5f5","--text":"#333333","--text-secondary":"#666666","--text-muted":"#999999","--primary":"#42b883","--primary-hover":"#3aa876","--secondary":"#35495e","--success":"#10b981","--warning":"#f59e0b","--error":"#ef4444","--info":"#3b82f6","--border":"#e5e7eb","--shadow":"rgba(0, 0, 0, 0.1)"},dark:{"--bg":"#1a1a1a","--bg-secondary":"#2d2d2d","--text":"#e5e5e5","--text-secondary":"#a3a3a3","--text-muted":"#737373","--primary":"#42b883","--primary-hover":"#3aa876","--secondary":"#94a3b8","--success":"#10b981","--warning":"#f59e0b","--error":"#ef4444","--info":"#3b82f6","--border":"#404040","--shadow":"rgba(0, 0, 0, 0.3)"}};function y(){return typeof document=="undefined"?null:document.documentElement}function U(o){return(...n)=>{}}function q(o={}){let{default:n="light",storageKey:g="lyt_theme",themes:f={},onChange:l,autoDetect:$=!0,useDataAttribute:k=!0,cssPrefix:u="--lyt-",debug:C=!1}=o,s=U(C),a={...w,...f},c=n,d={};function x(){try{let e=localStorage.getItem(g);if(e&&a[e])return e}catch(e){}return null}function E(e){try{localStorage.setItem(g,e)}catch(t){}}function P(){var e;return typeof window=="undefined"?"light":(e=window.matchMedia)!=null&&e.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}function O(e){if(typeof window=="undefined"||!window.matchMedia)return()=>{};let t=window.matchMedia("(prefers-color-scheme: dark)");function r(i){e(i.matches?"dark":"light")}return t.addEventListener("change",r),()=>t.removeEventListener("change",r)}function h(e){let t=y();if(!t)return;let r=a[e];if(!r){s(`theme '${e}' not found`);return}s(`applying theme '${e}'`,r),Object.entries(r).forEach(([i,v])=>{let T=i.startsWith("--")?i:`${u}${i}`;t.style.setProperty(T,v)}),Object.entries(d).forEach(([i,v])=>{let T=i.startsWith("--")?i:`${u}${i}`;t.style.setProperty(T,v)}),k&&t.setAttribute("data-theme",e),t.style.setProperty("color-scheme",e==="dark"?"dark":"light")}function m(e){if(!a[e]){s(`theme '${e}' not found, available:`,Object.keys(a));return}let t=c;t!==e&&(c=e,h(e),E(e),l&&l(e,t),s(`theme changed from '${t}' to '${e}'`))}function V(){let e=Object.keys(a),r=(e.indexOf(c)+1)%e.length;m(e[r])}function S(){m(n)}function j(){return Object.keys(a)}function I(e,t){a[e]=t,s(`added/updated theme '${e}'`,t),c===e&&h(e)}function L(e){if(e===n){s("cannot remove default theme");return}delete a[e],c===e&&m(n),s(`removed theme '${e}'`)}function M(){return a[c]||null}function A(e){return a[e]||null}function D(e,t){let r=e.startsWith("--")?e:`${u}${e}`;d[r]=t;let i=y();i&&i.style.setProperty(r,t),s(`set variable '${r}' = '${t}'`)}function W(e){let t=e.startsWith("--")?e:`${u}${e}`;delete d[t];let r=y();r&&r.style.removeProperty(t),s(`cleared variable '${t}'`)}function _(){let e=y();Object.keys(d).forEach(t=>{e&&e.style.removeProperty(t)}),Object.keys(d).forEach(t=>delete d[t]),h(c),s("cleared all dynamic variables")}function F(){let e=x();if(!e&&$){let t=P();e=a[t]?t:n}e||(e=n),s(`initializing with theme '${e}'`),c=e,h(e)}F();let b={install(e,t){e.config=e.config||{},e.config.globalProperties=e.config.globalProperties||{},e.config.globalProperties.$theme=b,typeof e.provide=="function"&&e.provide("theme",b)},get current(){return c},set:m,toggle:V,reset:S,list:j,addTheme:I,removeTheme:L,getConfig:M,getConfigFor:A,setVariable:D,clearVariable:W,clearVariables:_,getSystemPreference:P,watchSystemPreference:O};return b}
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- var A={light:{"--bg":"#ffffff","--bg-secondary":"#f5f5f5","--text":"#333333","--text-secondary":"#666666","--text-muted":"#999999","--primary":"#42b883","--primary-hover":"#3aa876","--secondary":"#35495e","--success":"#10b981","--warning":"#f59e0b","--error":"#ef4444","--info":"#3b82f6","--border":"#e5e7eb","--shadow":"rgba(0, 0, 0, 0.1)"},dark:{"--bg":"#1a1a1a","--bg-secondary":"#2d2d2d","--text":"#e5e5e5","--text-secondary":"#a3a3a3","--text-muted":"#737373","--primary":"#42b883","--primary-hover":"#3aa876","--secondary":"#94a3b8","--success":"#10b981","--warning":"#f59e0b","--error":"#ef4444","--info":"#3b82f6","--border":"#404040","--shadow":"rgba(0, 0, 0, 0.3)"}};function f(){return document.documentElement}function F(h){return(...a)=>{}}function H(h={}){let{default:a="light",storageKey:b="lyt_theme",themes:p={},onChange:v,autoDetect:P=!0,useDataAttribute:$=!0,cssPrefix:g="--lyt-",debug:w=!1}=h,r=F(w),i={...A,...p},o=a,c={};function C(){try{let e=localStorage.getItem(b);if(e&&i[e])return e}catch(e){}return null}function x(e){try{localStorage.setItem(b,e)}catch(t){}}function T(){var e;return typeof window=="undefined"?"light":(e=window.matchMedia)!=null&&e.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}function k(e){if(typeof window=="undefined"||!window.matchMedia)return()=>{};let t=window.matchMedia("(prefers-color-scheme: dark)");function n(s){e(s.matches?"dark":"light")}return t.addEventListener("change",n),()=>t.removeEventListener("change",n)}function l(e){let t=f(),n=i[e];if(!n){r(`theme '${e}' not found`);return}r(`applying theme '${e}'`,n),Object.entries(n).forEach(([s,m])=>{let y=s.startsWith("--")?s:`${g}${s}`;t.style.setProperty(y,m)}),Object.entries(c).forEach(([s,m])=>{let y=s.startsWith("--")?s:`${g}${s}`;t.style.setProperty(y,m)}),$&&t.setAttribute("data-theme",e),t.style.setProperty("color-scheme",e==="dark"?"dark":"light")}function d(e){if(!i[e]){r(`theme '${e}' not found, available:`,Object.keys(i));return}let t=o;t!==e&&(o=e,l(e),x(e),v&&v(e,t),r(`theme changed from '${t}' to '${e}'`))}function E(){let e=Object.keys(i),n=(e.indexOf(o)+1)%e.length;d(e[n])}function V(){d(a)}function O(){return Object.keys(i)}function S(e,t){i[e]=t,r(`added/updated theme '${e}'`,t),o===e&&l(e)}function j(e){if(e===a){r("cannot remove default theme");return}delete i[e],o===e&&d(a),r(`removed theme '${e}'`)}function I(){return i[o]||null}function L(e){return i[e]||null}function M(e,t){let n=e.startsWith("--")?e:`${g}${e}`;c[n]=t,f().style.setProperty(n,t),r(`set variable '${n}' = '${t}'`)}function D(e){let t=e.startsWith("--")?e:`${g}${e}`;delete c[t],f().style.removeProperty(t),r(`cleared variable '${t}'`)}function W(){Object.keys(c).forEach(e=>{f().style.removeProperty(e)}),Object.keys(c).forEach(e=>delete c[e]),l(o),r("cleared all dynamic variables")}function _(){let e=C();if(!e&&P){let t=T();e=i[t]?t:a}e||(e=a),r(`initializing with theme '${e}'`),o=e,l(e)}_();let u={install(e,t){e.config=e.config||{},e.config.globalProperties=e.config.globalProperties||{},e.config.globalProperties.$theme=u,typeof e.provide=="function"&&e.provide("theme",u)},get current(){return o},set:d,toggle:E,reset:V,list:O,addTheme:S,removeTheme:j,getConfig:I,getConfigFor:L,setVariable:M,clearVariable:D,clearVariables:W,getSystemPreference:T,watchSystemPreference:k};return u}export{A as BUILT_IN_THEMES,H as createTheme};
1
+ var _={light:{"--bg":"#ffffff","--bg-secondary":"#f5f5f5","--text":"#333333","--text-secondary":"#666666","--text-muted":"#999999","--primary":"#42b883","--primary-hover":"#3aa876","--secondary":"#35495e","--success":"#10b981","--warning":"#f59e0b","--error":"#ef4444","--info":"#3b82f6","--border":"#e5e7eb","--shadow":"rgba(0, 0, 0, 0.1)"},dark:{"--bg":"#1a1a1a","--bg-secondary":"#2d2d2d","--text":"#e5e5e5","--text-secondary":"#a3a3a3","--text-muted":"#737373","--primary":"#42b883","--primary-hover":"#3aa876","--secondary":"#94a3b8","--success":"#10b981","--warning":"#f59e0b","--error":"#ef4444","--info":"#3b82f6","--border":"#404040","--shadow":"rgba(0, 0, 0, 0.3)"}};function f(){return typeof document=="undefined"?null:document.documentElement}function F(u){return(...a)=>{}}function H(u={}){let{default:a="light",storageKey:b="lyt_theme",themes:p={},onChange:v,autoDetect:P=!0,useDataAttribute:w=!0,cssPrefix:l="--lyt-",debug:$=!1}=u,i=F($),o={..._,...p},s=a,c={};function k(){try{let e=localStorage.getItem(b);if(e&&o[e])return e}catch(e){}return null}function C(e){try{localStorage.setItem(b,e)}catch(t){}}function T(){var e;return typeof window=="undefined"?"light":(e=window.matchMedia)!=null&&e.call(window,"(prefers-color-scheme: dark)").matches?"dark":"light"}function x(e){if(typeof window=="undefined"||!window.matchMedia)return()=>{};let t=window.matchMedia("(prefers-color-scheme: dark)");function n(r){e(r.matches?"dark":"light")}return t.addEventListener("change",n),()=>t.removeEventListener("change",n)}function g(e){let t=f();if(!t)return;let n=o[e];if(!n){i(`theme '${e}' not found`);return}i(`applying theme '${e}'`,n),Object.entries(n).forEach(([r,m])=>{let y=r.startsWith("--")?r:`${l}${r}`;t.style.setProperty(y,m)}),Object.entries(c).forEach(([r,m])=>{let y=r.startsWith("--")?r:`${l}${r}`;t.style.setProperty(y,m)}),w&&t.setAttribute("data-theme",e),t.style.setProperty("color-scheme",e==="dark"?"dark":"light")}function d(e){if(!o[e]){i(`theme '${e}' not found, available:`,Object.keys(o));return}let t=s;t!==e&&(s=e,g(e),C(e),v&&v(e,t),i(`theme changed from '${t}' to '${e}'`))}function E(){let e=Object.keys(o),n=(e.indexOf(s)+1)%e.length;d(e[n])}function O(){d(a)}function V(){return Object.keys(o)}function S(e,t){o[e]=t,i(`added/updated theme '${e}'`,t),s===e&&g(e)}function j(e){if(e===a){i("cannot remove default theme");return}delete o[e],s===e&&d(a),i(`removed theme '${e}'`)}function I(){return o[s]||null}function L(e){return o[e]||null}function M(e,t){let n=e.startsWith("--")?e:`${l}${e}`;c[n]=t;let r=f();r&&r.style.setProperty(n,t),i(`set variable '${n}' = '${t}'`)}function A(e){let t=e.startsWith("--")?e:`${l}${e}`;delete c[t];let n=f();n&&n.style.removeProperty(t),i(`cleared variable '${t}'`)}function D(){let e=f();Object.keys(c).forEach(t=>{e&&e.style.removeProperty(t)}),Object.keys(c).forEach(t=>delete c[t]),g(s),i("cleared all dynamic variables")}function W(){let e=k();if(!e&&P){let t=T();e=o[t]?t:a}e||(e=a),i(`initializing with theme '${e}'`),s=e,g(e)}W();let h={install(e,t){e.config=e.config||{},e.config.globalProperties=e.config.globalProperties||{},e.config.globalProperties.$theme=h,typeof e.provide=="function"&&e.provide("theme",h)},get current(){return s},set:d,toggle:E,reset:O,list:V,addTheme:S,removeTheme:j,getConfig:I,getConfigFor:L,setVariable:M,clearVariable:A,clearVariables:D,getSystemPreference:T,watchSystemPreference:x};return h}export{_ as BUILT_IN_THEMES,H as createTheme};
@@ -24,10 +24,15 @@ interface ThemeOptions {
24
24
  /** 是否开启调试模式 */
25
25
  debug?: boolean;
26
26
  }
27
+ /** 主题插件应用接口(最小化) */
28
+ interface ThemePluginApp {
29
+ use(plugin: unknown, options?: unknown): void;
30
+ [key: string]: unknown;
31
+ }
27
32
  /** 主题插件实例 */
28
33
  interface ThemePlugin {
29
34
  /** 安装到 Lyt 应用 */
30
- install: (app: any, options?: any) => void;
35
+ install: (app: ThemePluginApp, options?: ThemeOptions) => void;
31
36
  /** 当前主题名称 */
32
37
  readonly current: string;
33
38
  /** 切换到指定主题 */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAmBA,WAAW;AACX,UAAU,WAAW;IACnB,gBAAgB;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED,eAAe;AACf,UAAU,YAAY;IACpB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa;IACb,MAAM,CAAC,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;KACjC,CAAA;IACD,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,mBAAmB;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,aAAa;AACb,UAAU,WAAW;IACnB,iBAAiB;IACjB,OAAO,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,IAAI,CAAA;IAC1C,aAAa;IACb,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,cAAc;IACd,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,qBAAqB;IACrB,MAAM,IAAI,IAAI,CAAA;IACd,cAAc;IACd,KAAK,IAAI,IAAI,CAAA;IACb,iBAAiB;IACjB,IAAI,IAAI,MAAM,EAAE,CAAA;IAChB,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;IACjD,WAAW;IACX,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,uBAAuB;IACvB,SAAS,IAAI,WAAW,GAAG,IAAI,CAAA;IAC/B,uBAAuB;IACvB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAA;IACnD,2BAA2B;IAC3B,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,qBAAqB;IACrB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,eAAe;IACf,cAAc,IAAI,IAAI,CAAA;IACtB,iCAAiC;IACjC,mBAAmB,IAAI,OAAO,GAAG,MAAM,CAAA;IACvC,eAAe;IACf,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC/E;AAID,QAAA,MAAM,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAiClD,CAAA;AAwBD;;;;GAIG;AACH,iBAAS,WAAW,CAAC,OAAO,GAAE,YAAiB,GAAG,WAAW,CAuS5D;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA;AACvC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAmBA,WAAW;AACX,UAAU,WAAW;IACnB,gBAAgB;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;AAED,eAAe;AACf,UAAU,YAAY;IACpB,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa;IACb,MAAM,CAAC,EAAE;QACP,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAA;KACjC,CAAA;IACD,eAAe;IACf,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,mBAAmB;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,oBAAoB;AACpB,UAAU,cAAc;IACtB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAC7C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,aAAa;AACb,UAAU,WAAW;IACnB,iBAAiB;IACjB,OAAO,EAAE,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,IAAI,CAAA;IAC9D,aAAa;IACb,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,cAAc;IACd,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,qBAAqB;IACrB,MAAM,IAAI,IAAI,CAAA;IACd,cAAc;IACd,KAAK,IAAI,IAAI,CAAA;IACb,iBAAiB;IACjB,IAAI,IAAI,MAAM,EAAE,CAAA;IAChB,gBAAgB;IAChB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;IACjD,WAAW;IACX,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,uBAAuB;IACvB,SAAS,IAAI,WAAW,GAAG,IAAI,CAAA;IAC/B,uBAAuB;IACvB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAA;IACnD,2BAA2B;IAC3B,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,qBAAqB;IACrB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,eAAe;IACf,cAAc,IAAI,IAAI,CAAA;IACtB,iCAAiC;IACjC,mBAAmB,IAAI,OAAO,GAAG,MAAM,CAAA;IACvC,eAAe;IACf,qBAAqB,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAA;CAC/E;AAID,QAAA,MAAM,eAAe,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAiClD,CAAA;AA0BD;;;;GAIG;AACH,iBAAS,WAAW,CAAC,OAAO,GAAE,YAAiB,GAAG,WAAW,CA2S5D;AAED,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAA;AACvC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lytjs/plugin-theme",
3
- "version": "4.2.0",
3
+ "version": "5.0.0",
4
4
  "description": "Lyt.js 主题切换插件 - 支持亮色/暗色主题和自定义主题",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",