@slidejs/theme 0.1.3

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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 slidejs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
package/README.md ADDED
@@ -0,0 +1,329 @@
1
+ # @slidejs/theme
2
+
3
+ SlideJS 主题系统 - 运行时 CSS 变量 Hook API
4
+
5
+ ## 功能特性
6
+
7
+ - ✅ 统一的标准化主题配置接口
8
+ - ✅ 运行时动态设置 CSS 变量
9
+ - ✅ 支持全局和作用域自定义
10
+ - ✅ 类型安全的 API
11
+ - ✅ 所有 runner 自动映射标准变量
12
+ - ✅ 内置预设主题(Solarized Dark/Light)
13
+
14
+ ## 设计理念
15
+
16
+ ### 高级 API(官方支持)
17
+
18
+ 使用标准变量名,不针对特定 runner:
19
+
20
+ ```typescript
21
+ setTheme({
22
+ navigationColor: '#ff0000', // 标准变量名
23
+ paginationColor: '#00ff00', // 标准变量名
24
+ });
25
+ ```
26
+
27
+ 所有 runner 会自动将这些标准变量映射到自己的变量:
28
+
29
+ - `--slidejs-navigation-color` → `--slidejs-swiper-navigation-color` (Swiper)
30
+ - `--slidejs-navigation-color` → `--slidejs-splide-arrow-color` (Splide)
31
+
32
+ ### 低级 API(自行使用,风险自负)
33
+
34
+ 如果需要直接设置 runner 特定变量,请自行使用 DOM API:
35
+
36
+ ```typescript
37
+ // 不推荐:直接设置 runner 特定变量(风险自负)
38
+ document.documentElement.style.setProperty('--slidejs-swiper-navigation-color', '#ff0000');
39
+ ```
40
+
41
+ **注意**:
42
+
43
+ - 低级 API 不在 SlideJS 官方支持范围内
44
+ - 可能导致兼容性问题
45
+ - 不推荐使用
46
+
47
+ ## 安装
48
+
49
+ ```bash
50
+ npm install @slidejs/theme
51
+ ```
52
+
53
+ ## 使用方式
54
+
55
+ ### 使用预设主题(推荐)
56
+
57
+ ```typescript
58
+ import { setTheme, Preset } from '@slidejs/theme';
59
+
60
+ // 使用 Solarized Dark 主题(推荐:使用命名空间常量)
61
+ setTheme(Preset.SolarizedDark);
62
+
63
+ // 使用 Solarized Light 主题(推荐:使用命名空间常量)
64
+ setTheme(Preset.SolarizedLight);
65
+ ```
66
+
67
+ ### 全局主题设置(自定义)
68
+
69
+ ```typescript
70
+ import { setTheme } from '@slidejs/theme';
71
+
72
+ // 设置全局主题(使用标准变量名)
73
+ setTheme({
74
+ navigationColor: '#ff0000',
75
+ paginationColor: '#00ff00',
76
+ backgroundColor: '#ffffff',
77
+ textColor: '#000000',
78
+ });
79
+ ```
80
+
81
+ ### 作用域主题设置
82
+
83
+ ```typescript
84
+ import { useTheme } from '@slidejs/theme';
85
+
86
+ // 为特定容器设置预设主题(推荐:使用命名空间常量)
87
+ import { Preset } from '@slidejs/theme';
88
+
89
+ const theme = useTheme('#my-slides');
90
+ theme.set(Preset.SolarizedDark);
91
+
92
+ // 或使用自定义主题
93
+ theme.set({
94
+ navigationColor: '#ff0000',
95
+ paginationColor: '#00ff00',
96
+ });
97
+
98
+ // 或使用 HTMLElement
99
+ import { Preset } from '@slidejs/theme';
100
+ const container = document.getElementById('slides');
101
+ const theme2 = useTheme(container);
102
+ theme2.set(Preset.SolarizedLight);
103
+ ```
104
+
105
+ ### 动态切换主题
106
+
107
+ ```typescript
108
+ import { setTheme } from '@slidejs/theme';
109
+
110
+ // 使用预设主题切换(推荐:使用命名空间常量)
111
+ import { Preset } from '@slidejs/theme';
112
+
113
+ function setDarkTheme() {
114
+ setTheme(Preset.SolarizedDark);
115
+ }
116
+
117
+ function setLightTheme() {
118
+ setTheme(Preset.SolarizedLight);
119
+ }
120
+
121
+ // 或使用自定义主题
122
+ function setCustomDarkTheme() {
123
+ setTheme({
124
+ backgroundColor: '#191919',
125
+ textColor: '#ffffff',
126
+ linkColor: '#42affa',
127
+ });
128
+ }
129
+ ```
130
+
131
+ ### 高级用法
132
+
133
+ ```typescript
134
+ import { SlideThemeHook } from '@slidejs/theme';
135
+
136
+ // 创建自定义 Hook 实例
137
+ const theme = new SlideThemeHook('#my-slides');
138
+
139
+ // 设置主题
140
+ theme.set({
141
+ navigationColor: '#ff0000',
142
+ });
143
+
144
+ // 获取 CSS 变量值
145
+ const color = theme.get('--slidejs-navigation-color');
146
+
147
+ // 移除 CSS 变量
148
+ theme.remove('--slidejs-navigation-color');
149
+
150
+ // 清除所有标准主题变量
151
+ theme.clear();
152
+ ```
153
+
154
+ ## 预设主题
155
+
156
+ ### Solarized Dark
157
+
158
+ ```typescript
159
+ import { setTheme, Preset, solarizedDark } from '@slidejs/theme';
160
+
161
+ // 使用命名空间常量(推荐)
162
+ setTheme(Preset.SolarizedDark);
163
+
164
+ // 或直接使用主题对象
165
+ setTheme(solarizedDark);
166
+ ```
167
+
168
+ ### Solarized Light
169
+
170
+ ```typescript
171
+ import { setTheme, Preset, solarizedLight } from '@slidejs/theme';
172
+
173
+ // 使用命名空间常量(推荐)
174
+ setTheme(Preset.SolarizedLight);
175
+
176
+ // 或直接使用主题对象
177
+ setTheme(solarizedLight);
178
+ ```
179
+
180
+ ## API 参考
181
+
182
+ ### `setTheme(theme: StandardTheme | PresetThemeName)`
183
+
184
+ 设置全局标准主题(官方支持)。
185
+
186
+ - 参数可以是标准主题配置对象
187
+ - 或预设主题命名空间常量(`Preset.SolarizedDark` 或 `Preset.SolarizedLight`)
188
+
189
+ ### `useTheme(selector?: HTMLElement | string): SlideThemeHook)`
190
+
191
+ 创建作用域主题 Hook。
192
+
193
+ ### `SlideThemeHook`
194
+
195
+ 主题 Hook 类,提供以下方法:
196
+
197
+ - `set(theme: StandardTheme | PresetThemeName)`: 设置标准主题或预设主题(官方支持)
198
+ - `get(variableName: string)`: 获取 CSS 变量值
199
+ - `remove(variableName: string)`: 移除 CSS 变量
200
+ - `clear()`: 清除所有标准主题变量
201
+
202
+ ### 预设主题导出
203
+
204
+ ```typescript
205
+ import {
206
+ Preset,
207
+ solarizedDark,
208
+ solarizedLight,
209
+ presets,
210
+ type PresetThemeName,
211
+ } from '@slidejs/theme';
212
+
213
+ // 使用命名空间常量(推荐)
214
+ setTheme(Preset.SolarizedDark);
215
+ setTheme(Preset.SolarizedLight);
216
+
217
+ // 或直接使用主题对象
218
+ setTheme(solarizedDark);
219
+ setTheme(solarizedLight);
220
+
221
+ // 获取所有预设主题
222
+ Object.keys(presets); // ['solarized-dark', 'solarized-light']
223
+ ```
224
+
225
+ ## 标准主题配置
226
+
227
+ ```typescript
228
+ interface StandardTheme {
229
+ navigationColor?: string; // 导航按钮颜色
230
+ paginationColor?: string; // 分页器颜色
231
+ paginationActiveColor?: string; // 分页器激活颜色
232
+ scrollbarBg?: string; // 滚动条背景色
233
+ scrollbarDragBg?: string; // 滚动条拖拽颜色
234
+ arrowColor?: string; // 箭头颜色(用于 Splide)
235
+ progressBarColor?: string; // 进度条颜色
236
+ backgroundColor?: string; // 背景色
237
+ textColor?: string; // 文本颜色
238
+ linkColor?: string; // 链接颜色
239
+ headingColor?: string; // 标题颜色
240
+ codeBackground?: string; // 代码背景色
241
+ }
242
+ ```
243
+
244
+ ## 标准 CSS 变量
245
+
246
+ 所有标准变量都以 `--slidejs-` 开头,不包含 runner 名称:
247
+
248
+ - `--slidejs-navigation-color`
249
+ - `--slidejs-pagination-color`
250
+ - `--slidejs-pagination-active-color`
251
+ - `--slidejs-scrollbar-bg`
252
+ - `--slidejs-scrollbar-drag-bg`
253
+ - `--slidejs-arrow-color`
254
+ - `--slidejs-progress-bar-color`
255
+ - `--slidejs-background-color`
256
+ - `--slidejs-text-color`
257
+ - `--slidejs-link-color`
258
+ - `--slidejs-heading-color`
259
+ - `--slidejs-code-background`
260
+
261
+ ## Runner 映射
262
+
263
+ 每个 runner 会自动将标准变量映射到自己的变量:
264
+
265
+ ### Swiper
266
+
267
+ - `--slidejs-navigation-color` → `--slidejs-swiper-navigation-color`
268
+ - `--slidejs-pagination-color` → `--slidejs-swiper-pagination-color`
269
+
270
+ ### Reveal.js
271
+
272
+ - `--slidejs-background-color` → `--slidejs-revealjs-background-color`
273
+ - `--slidejs-text-color` → `--slidejs-revealjs-text-color`
274
+
275
+ ### Splide
276
+
277
+ - `--slidejs-arrow-color` → `--slidejs-splide-arrow-color`
278
+ - `--slidejs-pagination-color` → `--slidejs-splide-pagination-color`
279
+
280
+ ## 低级 API(自行使用,风险自负)
281
+
282
+ 如果需要直接设置 runner 特定变量,请自行使用 DOM API:
283
+
284
+ ```typescript
285
+ // 不推荐:直接设置 runner 特定变量
286
+ document.documentElement.style.setProperty('--slidejs-swiper-navigation-color', '#ff0000');
287
+
288
+ // 或使用作用域
289
+ const container = document.getElementById('slides');
290
+ if (container) {
291
+ container.style.setProperty('--slidejs-swiper-navigation-color', '#ff0000');
292
+ }
293
+ ```
294
+
295
+ **警告**:
296
+
297
+ - 这些变量不在 SlideJS 官方支持范围内
298
+ - 可能导致兼容性问题
299
+ - 不推荐使用
300
+
301
+ ## 预设主题详情
302
+
303
+ ### Solarized Dark
304
+
305
+ 基于 Solarized 配色方案的深色主题,适合在暗光环境下使用。
306
+
307
+ **颜色方案**:
308
+
309
+ - 背景:`#002b36` (base03)
310
+ - 文本:`#839496` (base0)
311
+ - 链接/导航:`#268bd2` (blue)
312
+ - 激活状态:`#2aa198` (cyan)
313
+
314
+ ### Solarized Light
315
+
316
+ 基于 Solarized 配色方案的浅色主题,适合在明亮环境下使用。
317
+
318
+ **颜色方案**:
319
+
320
+ - 背景:`#fdf6e3` (base3)
321
+ - 文本:`#657b83` (base00)
322
+ - 链接/导航:`#268bd2` (blue)
323
+ - 激活状态:`#2aa198` (cyan)
324
+
325
+ 参考:[Solarized 官方网站](https://ethanschoonover.com/solarized/)
326
+
327
+ ## 许可证
328
+
329
+ MIT
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a={navigationColor:"--slidejs-navigation-color",paginationColor:"--slidejs-pagination-color",paginationActiveColor:"--slidejs-pagination-active-color",scrollbarBg:"--slidejs-scrollbar-bg",scrollbarDragBg:"--slidejs-scrollbar-drag-bg",arrowColor:"--slidejs-arrow-color",progressBarColor:"--slidejs-progress-bar-color",backgroundColor:"--slidejs-background-color",textColor:"--slidejs-text-color",linkColor:"--slidejs-link-color",headingColor:"--slidejs-heading-color",codeBackground:"--slidejs-code-background"},g="solarized-dark",c="solarized-light",d={backgroundColor:"#002b36",textColor:"#839496",headingColor:"#93a1a1",linkColor:"#268bd2",navigationColor:"#268bd2",paginationColor:"#268bd2",paginationActiveColor:"#2aa198",arrowColor:"#268bd2",progressBarColor:"#2aa198",scrollbarBg:"rgba(131, 148, 150, 0.2)",scrollbarDragBg:"rgba(131, 148, 150, 0.5)",codeBackground:"#073642"},C={backgroundColor:"#fdf6e3",textColor:"#657b83",headingColor:"#586e75",linkColor:"#268bd2",navigationColor:"#268bd2",paginationColor:"#268bd2",paginationActiveColor:"#2aa198",arrowColor:"#268bd2",progressBarColor:"#2aa198",scrollbarBg:"rgba(101, 123, 131, 0.2)",scrollbarDragBg:"rgba(101, 123, 131, 0.5)",codeBackground:"#eee8d5"},s={[g]:d,[c]:C},b={SolarizedDark:g,SolarizedLight:c};function i(r,o,l){r instanceof Document?r.documentElement.style.setProperty(o,l):r.style.setProperty(o,l)}function e(r,o){o.navigationColor&&i(r,a.navigationColor,o.navigationColor),o.paginationColor&&i(r,a.paginationColor,o.paginationColor),o.paginationActiveColor&&i(r,a.paginationActiveColor,o.paginationActiveColor),o.scrollbarBg&&i(r,a.scrollbarBg,o.scrollbarBg),o.scrollbarDragBg&&i(r,a.scrollbarDragBg,o.scrollbarDragBg),o.arrowColor&&i(r,a.arrowColor,o.arrowColor),o.progressBarColor&&i(r,a.progressBarColor,o.progressBarColor),o.backgroundColor&&i(r,a.backgroundColor,o.backgroundColor),o.textColor&&i(r,a.textColor,o.textColor),o.linkColor&&i(r,a.linkColor,o.linkColor),o.headingColor&&i(r,a.headingColor,o.headingColor),o.codeBackground&&i(r,a.codeBackground,o.codeBackground)}class n{constructor(o){if(typeof o=="string"){const l=document.querySelector(o);if(!l)throw new Error(`Element not found: ${o}`);this.target=l}else o?this.target=o:this.target=document}set(o){if(typeof o=="string"){const l=s[o];if(!l)throw new Error(`Unknown preset theme: ${o}. Available presets: ${Object.keys(s).join(", ")}`);e(this.target,l)}else e(this.target,o)}get(o){return this.target instanceof Document?getComputedStyle(this.target.documentElement).getPropertyValue(o).trim():getComputedStyle(this.target).getPropertyValue(o).trim()}remove(o){this.target instanceof Document?this.target.documentElement.style.removeProperty(o):this.target.style.removeProperty(o)}clear(){Object.values(a).forEach(o=>{this.remove(o)})}}const t=new n;function p(r){if(typeof r=="string"){const o=s[r];if(!o)throw new Error(`Unknown preset theme: ${r}. Available presets: ${Object.keys(s).join(", ")}`);t.set(o)}else t.set(r)}function u(r){return new n(r)}exports.Preset=b;exports.STANDARD_CSS_VARIABLES=a;exports.SlideThemeHook=n;exports.globalTheme=t;exports.presets=s;exports.setTheme=p;exports.solarizedDark=d;exports.solarizedLight=C;exports.useTheme=u;
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/types.ts","../src/presets.ts","../src/hook.ts"],"sourcesContent":["/**\n * @slidejs/theme - 主题系统类型定义\n *\n * 定义标准化的主题配置接口,不针对特定 runner\n *\n * 注意:本包只提供高级 API(标准变量),不提供低级 API(runner 特定变量)。\n * 如果需要直接设置 runner 特定变量,请自行使用 DOM API,风险自负。\n */\n\n/**\n * 标准主题配置\n * 使用标准变量名,不包含 runner 名称\n *\n * 这些变量会被所有 runner 自动映射到自己的特定变量\n */\nexport interface StandardTheme {\n /** 导航按钮颜色 */\n navigationColor?: string;\n /** 分页器颜色 */\n paginationColor?: string;\n /** 分页器激活颜色 */\n paginationActiveColor?: string;\n /** 滚动条背景色 */\n scrollbarBg?: string;\n /** 滚动条拖拽颜色 */\n scrollbarDragBg?: string;\n /** 箭头颜色(用于 Splide) */\n arrowColor?: string;\n /** 进度条颜色 */\n progressBarColor?: string;\n /** 背景色 */\n backgroundColor?: string;\n /** 文本颜色 */\n textColor?: string;\n /** 链接颜色 */\n linkColor?: string;\n /** 标题颜色 */\n headingColor?: string;\n /** 代码背景色 */\n codeBackground?: string;\n}\n\n/**\n * 标准 CSS 变量名\n *\n * 这些是 SlideJS 官方支持的标准变量名\n * 所有 runner 会将这些变量映射到自己的特定变量\n */\nexport const STANDARD_CSS_VARIABLES = {\n navigationColor: '--slidejs-navigation-color',\n paginationColor: '--slidejs-pagination-color',\n paginationActiveColor: '--slidejs-pagination-active-color',\n scrollbarBg: '--slidejs-scrollbar-bg',\n scrollbarDragBg: '--slidejs-scrollbar-drag-bg',\n arrowColor: '--slidejs-arrow-color',\n progressBarColor: '--slidejs-progress-bar-color',\n backgroundColor: '--slidejs-background-color',\n textColor: '--slidejs-text-color',\n linkColor: '--slidejs-link-color',\n headingColor: '--slidejs-heading-color',\n codeBackground: '--slidejs-code-background',\n} as const;\n\n/**\n * Runner 特定 CSS 变量映射(仅供内部参考,不导出)\n *\n * 注意:\n * 1. 此接口不导出,仅供内部类型检查使用\n * 2. 实际的映射在 runner 的 CSS 文件中通过 CSS `var()` 函数完成\n * 3. 本包只提供高级 API(标准变量),不提供低级 API(runner 特定变量)\n * 4. 如果需要直接设置 runner 特定变量,请自行使用 DOM API,风险自负\n *\n * 映射关系(仅供参考):\n * - Reveal.js: `--slidejs-background-color` → `--slidejs-revealjs-background-color`\n * - Swiper: `--slidejs-navigation-color` → `--slidejs-swiper-navigation-color`\n * - Splide: `--slidejs-arrow-color` → `--slidejs-splide-arrow-color`\n *\n * 查看 runner 的 `style.css` 文件了解完整的映射关系。\n */\ninterface RunnerCSSVariableMap {\n revealjs: {\n '--slidejs-background-color': string;\n '--slidejs-text-color': string;\n '--slidejs-link-color': string;\n '--slidejs-heading-color': string;\n '--slidejs-code-background': string;\n };\n swiper: {\n '--slidejs-navigation-color': string;\n '--slidejs-pagination-color': string;\n '--slidejs-pagination-active-color': string;\n '--slidejs-scrollbar-bg': string;\n '--slidejs-scrollbar-drag-bg': string;\n };\n splide: {\n '--slidejs-arrow-color': string;\n '--slidejs-pagination-color': string;\n '--slidejs-pagination-active-color': string;\n '--slidejs-progress-bar-color': string;\n };\n}\n","/**\n * @slidejs/theme - 预设主题\n *\n * 提供内置的主题预设\n */\n\nimport type { StandardTheme } from './types';\n\n/**\n * 预设主题名称常量\n */\nconst PRESET_THEME_SOLARIZED_DARK = 'solarized-dark' as const;\nconst PRESET_THEME_SOLARIZED_LIGHT = 'solarized-light' as const;\n\n/**\n * Solarized Dark 主题\n *\n * 基于 Solarized 配色方案的深色主题\n * 参考:https://ethanschoonover.com/solarized/\n */\nexport const solarizedDark: StandardTheme = {\n // 基础颜色\n backgroundColor: '#002b36', // base03 - 最暗的背景\n textColor: '#839496', // base0 - 主要文本\n headingColor: '#93a1a1', // base1 - 标题文本\n linkColor: '#268bd2', // blue - 链接颜色\n\n // 导航和分页\n navigationColor: '#268bd2', // blue - 导航按钮\n paginationColor: '#268bd2', // blue - 分页器\n paginationActiveColor: '#2aa198', // cyan - 激活状态\n arrowColor: '#268bd2', // blue - 箭头(Splide)\n progressBarColor: '#2aa198', // cyan - 进度条\n\n // 滚动条\n scrollbarBg: 'rgba(131, 148, 150, 0.2)', // base0 with opacity\n scrollbarDragBg: 'rgba(131, 148, 150, 0.5)', // base0 with opacity\n\n // 代码\n codeBackground: '#073642', // base02 - 代码背景\n};\n\n/**\n * Solarized Light 主题\n *\n * 基于 Solarized 配色方案的浅色主题\n * 参考:https://ethanschoonover.com/solarized/\n */\nexport const solarizedLight: StandardTheme = {\n // 基础颜色\n backgroundColor: '#fdf6e3', // base3 - 最亮的背景\n textColor: '#657b83', // base00 - 主要文本\n headingColor: '#586e75', // base01 - 标题文本\n linkColor: '#268bd2', // blue - 链接颜色\n\n // 导航和分页\n navigationColor: '#268bd2', // blue - 导航按钮\n paginationColor: '#268bd2', // blue - 分页器\n paginationActiveColor: '#2aa198', // cyan - 激活状态\n arrowColor: '#268bd2', // blue - 箭头(Splide)\n progressBarColor: '#2aa198', // cyan - 进度条\n\n // 滚动条\n scrollbarBg: 'rgba(101, 123, 131, 0.2)', // base00 with opacity\n scrollbarDragBg: 'rgba(101, 123, 131, 0.5)', // base00 with opacity\n\n // 代码\n codeBackground: '#eee8d5', // base2 - 代码背景\n};\n\n/**\n * 预设主题映射\n * 使用常量作为键,确保类型安全\n */\nexport const presets = {\n [PRESET_THEME_SOLARIZED_DARK]: solarizedDark,\n [PRESET_THEME_SOLARIZED_LIGHT]: solarizedLight,\n} as const;\n\n/**\n * 预设主题名称类型\n */\nexport type PresetThemeName = keyof typeof presets;\n\n/**\n * 预设主题名称常量对象\n * 提供类型安全的命名空间访问\n */\nexport const Preset = {\n SolarizedDark: PRESET_THEME_SOLARIZED_DARK,\n SolarizedLight: PRESET_THEME_SOLARIZED_LIGHT,\n} as const;\n","/**\n * @slidejs/theme - CSS Hook API\n *\n * 提供运行时动态设置标准 CSS 变量的 API\n *\n * 注意:本包只提供高级 API(标准变量),不提供低级 API(runner 特定变量)。\n * 如果需要直接设置 runner 特定变量,请自行使用 DOM API,风险自负。\n */\n\nimport type { StandardTheme } from './types';\nimport { STANDARD_CSS_VARIABLES } from './types';\nimport { presets, type PresetThemeName } from './presets';\n\n/**\n * 设置 CSS 变量的辅助函数\n */\nfunction setCSSVariable(\n element: HTMLElement | Document,\n variableName: string,\n value: string\n): void {\n if (element instanceof Document) {\n element.documentElement.style.setProperty(variableName, value);\n } else {\n element.style.setProperty(variableName, value);\n }\n}\n\n/**\n * 应用标准主题(高级 API)\n * 设置标准 CSS 变量,runner 会将这些变量映射到自己的变量\n */\nfunction applyStandardTheme(element: HTMLElement | Document, theme: StandardTheme): void {\n if (theme.navigationColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.navigationColor, theme.navigationColor);\n }\n if (theme.paginationColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.paginationColor, theme.paginationColor);\n }\n if (theme.paginationActiveColor) {\n setCSSVariable(\n element,\n STANDARD_CSS_VARIABLES.paginationActiveColor,\n theme.paginationActiveColor\n );\n }\n if (theme.scrollbarBg) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.scrollbarBg, theme.scrollbarBg);\n }\n if (theme.scrollbarDragBg) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.scrollbarDragBg, theme.scrollbarDragBg);\n }\n if (theme.arrowColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.arrowColor, theme.arrowColor);\n }\n if (theme.progressBarColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.progressBarColor, theme.progressBarColor);\n }\n if (theme.backgroundColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.backgroundColor, theme.backgroundColor);\n }\n if (theme.textColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.textColor, theme.textColor);\n }\n if (theme.linkColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.linkColor, theme.linkColor);\n }\n if (theme.headingColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.headingColor, theme.headingColor);\n }\n if (theme.codeBackground) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.codeBackground, theme.codeBackground);\n }\n}\n\n/**\n * CSS Hook API 类\n *\n * 只提供高级 API(标准变量),不提供低级 API(runner 特定变量)\n */\nexport class SlideThemeHook {\n private target: HTMLElement | Document;\n\n /**\n * 创建主题 Hook 实例\n *\n * @param target - 目标元素或文档(默认为 document)\n */\n constructor(target?: HTMLElement | Document | string) {\n if (typeof target === 'string') {\n const element = document.querySelector(target);\n if (!element) {\n throw new Error(`Element not found: ${target}`);\n }\n this.target = element as HTMLElement;\n } else if (target) {\n this.target = target;\n } else {\n this.target = document;\n }\n }\n\n /**\n * 设置标准主题(高级 API)\n * 使用标准变量名,不针对特定 runner\n *\n * 这是 SlideJS 官方支持的 API\n *\n * @param theme - 标准主题配置或预设主题名称\n */\n set(theme: StandardTheme | PresetThemeName): void {\n if (typeof theme === 'string') {\n const preset = presets[theme];\n if (!preset) {\n throw new Error(\n `Unknown preset theme: ${theme}. Available presets: ${Object.keys(presets).join(', ')}`\n );\n }\n applyStandardTheme(this.target, preset);\n } else {\n applyStandardTheme(this.target, theme);\n }\n }\n\n /**\n * 获取 CSS 变量值\n *\n * @param variableName - CSS 变量名(标准变量或 runner 特定变量)\n * @returns CSS 变量值\n */\n get(variableName: string): string | null {\n if (this.target instanceof Document) {\n return getComputedStyle(this.target.documentElement).getPropertyValue(variableName).trim();\n }\n return getComputedStyle(this.target).getPropertyValue(variableName).trim();\n }\n\n /**\n * 移除 CSS 变量\n *\n * @param variableName - CSS 变量名(标准变量或 runner 特定变量)\n */\n remove(variableName: string): void {\n if (this.target instanceof Document) {\n this.target.documentElement.style.removeProperty(variableName);\n } else {\n this.target.style.removeProperty(variableName);\n }\n }\n\n /**\n * 清除所有标准主题变量\n */\n clear(): void {\n Object.values(STANDARD_CSS_VARIABLES).forEach(variableName => {\n this.remove(variableName);\n });\n }\n}\n\n/**\n * 全局主题 Hook 实例(作用于 document)\n */\nexport const globalTheme = new SlideThemeHook();\n\n/**\n * 设置全局标准主题(高级 API)\n *\n * 这是 SlideJS 官方支持的 API\n * 使用标准变量名,所有 runner 会自动映射这些变量\n *\n * @param theme - 标准主题配置或预设主题名称\n *\n * @example\n * ```typescript\n * import { setTheme } from '@slidejs/theme';\n *\n * // 使用自定义主题\n * setTheme({\n * navigationColor: '#ff0000',\n * paginationColor: '#00ff00',\n * });\n *\n * // 使用预设主题\n * setTheme('solarized-dark');\n * setTheme('solarized-light');\n * ```\n */\nexport function setTheme(theme: StandardTheme | PresetThemeName): void {\n if (typeof theme === 'string') {\n const preset = presets[theme];\n if (!preset) {\n throw new Error(\n `Unknown preset theme: ${theme}. Available presets: ${Object.keys(presets).join(', ')}`\n );\n }\n globalTheme.set(preset);\n } else {\n globalTheme.set(theme);\n }\n}\n\n/**\n * 创建作用域主题 Hook\n *\n * @param selector - CSS 选择器或 HTMLElement\n * @returns 主题 Hook 实例\n *\n * @example\n * ```typescript\n * import { useTheme } from '@slidejs/theme';\n *\n * const theme = useTheme('#my-slides');\n * theme.set({\n * navigationColor: '#ff0000',\n * });\n * ```\n */\nexport function useTheme(selector?: HTMLElement | string): SlideThemeHook {\n return new SlideThemeHook(selector);\n}\n"],"names":["STANDARD_CSS_VARIABLES","PRESET_THEME_SOLARIZED_DARK","PRESET_THEME_SOLARIZED_LIGHT","solarizedDark","solarizedLight","presets","Preset","setCSSVariable","element","variableName","value","applyStandardTheme","theme","SlideThemeHook","target","preset","globalTheme","setTheme","useTheme","selector"],"mappings":"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"}
@@ -0,0 +1,191 @@
1
+ /**
2
+ * 全局主题 Hook 实例(作用于 document)
3
+ */
4
+ export declare const globalTheme: SlideThemeHook;
5
+
6
+ /**
7
+ * 预设主题名称常量对象
8
+ * 提供类型安全的命名空间访问
9
+ */
10
+ export declare const Preset: {
11
+ readonly SolarizedDark: "solarized-dark";
12
+ readonly SolarizedLight: "solarized-light";
13
+ };
14
+
15
+ /**
16
+ * 预设主题映射
17
+ * 使用常量作为键,确保类型安全
18
+ */
19
+ export declare const presets: {
20
+ readonly "solarized-dark": StandardTheme;
21
+ readonly "solarized-light": StandardTheme;
22
+ };
23
+
24
+ /**
25
+ * 预设主题名称类型
26
+ */
27
+ export declare type PresetThemeName = keyof typeof presets;
28
+
29
+ /**
30
+ * 设置全局标准主题(高级 API)
31
+ *
32
+ * 这是 SlideJS 官方支持的 API
33
+ * 使用标准变量名,所有 runner 会自动映射这些变量
34
+ *
35
+ * @param theme - 标准主题配置或预设主题名称
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * import { setTheme } from '@slidejs/theme';
40
+ *
41
+ * // 使用自定义主题
42
+ * setTheme({
43
+ * navigationColor: '#ff0000',
44
+ * paginationColor: '#00ff00',
45
+ * });
46
+ *
47
+ * // 使用预设主题
48
+ * setTheme('solarized-dark');
49
+ * setTheme('solarized-light');
50
+ * ```
51
+ */
52
+ export declare function setTheme(theme: StandardTheme | PresetThemeName): void;
53
+
54
+ /**
55
+ * CSS Hook API 类
56
+ *
57
+ * 只提供高级 API(标准变量),不提供低级 API(runner 特定变量)
58
+ */
59
+ export declare class SlideThemeHook {
60
+ private target;
61
+ /**
62
+ * 创建主题 Hook 实例
63
+ *
64
+ * @param target - 目标元素或文档(默认为 document)
65
+ */
66
+ constructor(target?: HTMLElement | Document | string);
67
+ /**
68
+ * 设置标准主题(高级 API)
69
+ * 使用标准变量名,不针对特定 runner
70
+ *
71
+ * 这是 SlideJS 官方支持的 API
72
+ *
73
+ * @param theme - 标准主题配置或预设主题名称
74
+ */
75
+ set(theme: StandardTheme | PresetThemeName): void;
76
+ /**
77
+ * 获取 CSS 变量值
78
+ *
79
+ * @param variableName - CSS 变量名(标准变量或 runner 特定变量)
80
+ * @returns CSS 变量值
81
+ */
82
+ get(variableName: string): string | null;
83
+ /**
84
+ * 移除 CSS 变量
85
+ *
86
+ * @param variableName - CSS 变量名(标准变量或 runner 特定变量)
87
+ */
88
+ remove(variableName: string): void;
89
+ /**
90
+ * 清除所有标准主题变量
91
+ */
92
+ clear(): void;
93
+ }
94
+
95
+ /**
96
+ * Solarized Dark 主题
97
+ *
98
+ * 基于 Solarized 配色方案的深色主题
99
+ * 参考:https://ethanschoonover.com/solarized/
100
+ */
101
+ export declare const solarizedDark: StandardTheme;
102
+
103
+ /**
104
+ * Solarized Light 主题
105
+ *
106
+ * 基于 Solarized 配色方案的浅色主题
107
+ * 参考:https://ethanschoonover.com/solarized/
108
+ */
109
+ export declare const solarizedLight: StandardTheme;
110
+
111
+ /**
112
+ * 标准 CSS 变量名
113
+ *
114
+ * 这些是 SlideJS 官方支持的标准变量名
115
+ * 所有 runner 会将这些变量映射到自己的特定变量
116
+ */
117
+ export declare const STANDARD_CSS_VARIABLES: {
118
+ readonly navigationColor: "--slidejs-navigation-color";
119
+ readonly paginationColor: "--slidejs-pagination-color";
120
+ readonly paginationActiveColor: "--slidejs-pagination-active-color";
121
+ readonly scrollbarBg: "--slidejs-scrollbar-bg";
122
+ readonly scrollbarDragBg: "--slidejs-scrollbar-drag-bg";
123
+ readonly arrowColor: "--slidejs-arrow-color";
124
+ readonly progressBarColor: "--slidejs-progress-bar-color";
125
+ readonly backgroundColor: "--slidejs-background-color";
126
+ readonly textColor: "--slidejs-text-color";
127
+ readonly linkColor: "--slidejs-link-color";
128
+ readonly headingColor: "--slidejs-heading-color";
129
+ readonly codeBackground: "--slidejs-code-background";
130
+ };
131
+
132
+ /**
133
+ * @slidejs/theme - 主题系统类型定义
134
+ *
135
+ * 定义标准化的主题配置接口,不针对特定 runner
136
+ *
137
+ * 注意:本包只提供高级 API(标准变量),不提供低级 API(runner 特定变量)。
138
+ * 如果需要直接设置 runner 特定变量,请自行使用 DOM API,风险自负。
139
+ */
140
+ /**
141
+ * 标准主题配置
142
+ * 使用标准变量名,不包含 runner 名称
143
+ *
144
+ * 这些变量会被所有 runner 自动映射到自己的特定变量
145
+ */
146
+ export declare interface StandardTheme {
147
+ /** 导航按钮颜色 */
148
+ navigationColor?: string;
149
+ /** 分页器颜色 */
150
+ paginationColor?: string;
151
+ /** 分页器激活颜色 */
152
+ paginationActiveColor?: string;
153
+ /** 滚动条背景色 */
154
+ scrollbarBg?: string;
155
+ /** 滚动条拖拽颜色 */
156
+ scrollbarDragBg?: string;
157
+ /** 箭头颜色(用于 Splide) */
158
+ arrowColor?: string;
159
+ /** 进度条颜色 */
160
+ progressBarColor?: string;
161
+ /** 背景色 */
162
+ backgroundColor?: string;
163
+ /** 文本颜色 */
164
+ textColor?: string;
165
+ /** 链接颜色 */
166
+ linkColor?: string;
167
+ /** 标题颜色 */
168
+ headingColor?: string;
169
+ /** 代码背景色 */
170
+ codeBackground?: string;
171
+ }
172
+
173
+ /**
174
+ * 创建作用域主题 Hook
175
+ *
176
+ * @param selector - CSS 选择器或 HTMLElement
177
+ * @returns 主题 Hook 实例
178
+ *
179
+ * @example
180
+ * ```typescript
181
+ * import { useTheme } from '@slidejs/theme';
182
+ *
183
+ * const theme = useTheme('#my-slides');
184
+ * theme.set({
185
+ * navigationColor: '#ff0000',
186
+ * });
187
+ * ```
188
+ */
189
+ export declare function useTheme(selector?: HTMLElement | string): SlideThemeHook;
190
+
191
+ export { }
package/dist/index.mjs ADDED
@@ -0,0 +1,174 @@
1
+ const a = {
2
+ navigationColor: "--slidejs-navigation-color",
3
+ paginationColor: "--slidejs-pagination-color",
4
+ paginationActiveColor: "--slidejs-pagination-active-color",
5
+ scrollbarBg: "--slidejs-scrollbar-bg",
6
+ scrollbarDragBg: "--slidejs-scrollbar-drag-bg",
7
+ arrowColor: "--slidejs-arrow-color",
8
+ progressBarColor: "--slidejs-progress-bar-color",
9
+ backgroundColor: "--slidejs-background-color",
10
+ textColor: "--slidejs-text-color",
11
+ linkColor: "--slidejs-link-color",
12
+ headingColor: "--slidejs-heading-color",
13
+ codeBackground: "--slidejs-code-background"
14
+ }, g = "solarized-dark", e = "solarized-light", d = {
15
+ // 基础颜色
16
+ backgroundColor: "#002b36",
17
+ // base03 - 最暗的背景
18
+ textColor: "#839496",
19
+ // base0 - 主要文本
20
+ headingColor: "#93a1a1",
21
+ // base1 - 标题文本
22
+ linkColor: "#268bd2",
23
+ // blue - 链接颜色
24
+ // 导航和分页
25
+ navigationColor: "#268bd2",
26
+ // blue - 导航按钮
27
+ paginationColor: "#268bd2",
28
+ // blue - 分页器
29
+ paginationActiveColor: "#2aa198",
30
+ // cyan - 激活状态
31
+ arrowColor: "#268bd2",
32
+ // blue - 箭头(Splide)
33
+ progressBarColor: "#2aa198",
34
+ // cyan - 进度条
35
+ // 滚动条
36
+ scrollbarBg: "rgba(131, 148, 150, 0.2)",
37
+ // base0 with opacity
38
+ scrollbarDragBg: "rgba(131, 148, 150, 0.5)",
39
+ // base0 with opacity
40
+ // 代码
41
+ codeBackground: "#073642"
42
+ // base02 - 代码背景
43
+ }, C = {
44
+ // 基础颜色
45
+ backgroundColor: "#fdf6e3",
46
+ // base3 - 最亮的背景
47
+ textColor: "#657b83",
48
+ // base00 - 主要文本
49
+ headingColor: "#586e75",
50
+ // base01 - 标题文本
51
+ linkColor: "#268bd2",
52
+ // blue - 链接颜色
53
+ // 导航和分页
54
+ navigationColor: "#268bd2",
55
+ // blue - 导航按钮
56
+ paginationColor: "#268bd2",
57
+ // blue - 分页器
58
+ paginationActiveColor: "#2aa198",
59
+ // cyan - 激活状态
60
+ arrowColor: "#268bd2",
61
+ // blue - 箭头(Splide)
62
+ progressBarColor: "#2aa198",
63
+ // cyan - 进度条
64
+ // 滚动条
65
+ scrollbarBg: "rgba(101, 123, 131, 0.2)",
66
+ // base00 with opacity
67
+ scrollbarDragBg: "rgba(101, 123, 131, 0.5)",
68
+ // base00 with opacity
69
+ // 代码
70
+ codeBackground: "#eee8d5"
71
+ // base2 - 代码背景
72
+ }, s = {
73
+ [g]: d,
74
+ [e]: C
75
+ }, b = {
76
+ SolarizedDark: g,
77
+ SolarizedLight: e
78
+ };
79
+ function i(r, o, l) {
80
+ r instanceof Document ? r.documentElement.style.setProperty(o, l) : r.style.setProperty(o, l);
81
+ }
82
+ function t(r, o) {
83
+ o.navigationColor && i(r, a.navigationColor, o.navigationColor), o.paginationColor && i(r, a.paginationColor, o.paginationColor), o.paginationActiveColor && i(
84
+ r,
85
+ a.paginationActiveColor,
86
+ o.paginationActiveColor
87
+ ), o.scrollbarBg && i(r, a.scrollbarBg, o.scrollbarBg), o.scrollbarDragBg && i(r, a.scrollbarDragBg, o.scrollbarDragBg), o.arrowColor && i(r, a.arrowColor, o.arrowColor), o.progressBarColor && i(r, a.progressBarColor, o.progressBarColor), o.backgroundColor && i(r, a.backgroundColor, o.backgroundColor), o.textColor && i(r, a.textColor, o.textColor), o.linkColor && i(r, a.linkColor, o.linkColor), o.headingColor && i(r, a.headingColor, o.headingColor), o.codeBackground && i(r, a.codeBackground, o.codeBackground);
88
+ }
89
+ class c {
90
+ /**
91
+ * 创建主题 Hook 实例
92
+ *
93
+ * @param target - 目标元素或文档(默认为 document)
94
+ */
95
+ constructor(o) {
96
+ if (typeof o == "string") {
97
+ const l = document.querySelector(o);
98
+ if (!l)
99
+ throw new Error(`Element not found: ${o}`);
100
+ this.target = l;
101
+ } else o ? this.target = o : this.target = document;
102
+ }
103
+ /**
104
+ * 设置标准主题(高级 API)
105
+ * 使用标准变量名,不针对特定 runner
106
+ *
107
+ * 这是 SlideJS 官方支持的 API
108
+ *
109
+ * @param theme - 标准主题配置或预设主题名称
110
+ */
111
+ set(o) {
112
+ if (typeof o == "string") {
113
+ const l = s[o];
114
+ if (!l)
115
+ throw new Error(
116
+ `Unknown preset theme: ${o}. Available presets: ${Object.keys(s).join(", ")}`
117
+ );
118
+ t(this.target, l);
119
+ } else
120
+ t(this.target, o);
121
+ }
122
+ /**
123
+ * 获取 CSS 变量值
124
+ *
125
+ * @param variableName - CSS 变量名(标准变量或 runner 特定变量)
126
+ * @returns CSS 变量值
127
+ */
128
+ get(o) {
129
+ return this.target instanceof Document ? getComputedStyle(this.target.documentElement).getPropertyValue(o).trim() : getComputedStyle(this.target).getPropertyValue(o).trim();
130
+ }
131
+ /**
132
+ * 移除 CSS 变量
133
+ *
134
+ * @param variableName - CSS 变量名(标准变量或 runner 特定变量)
135
+ */
136
+ remove(o) {
137
+ this.target instanceof Document ? this.target.documentElement.style.removeProperty(o) : this.target.style.removeProperty(o);
138
+ }
139
+ /**
140
+ * 清除所有标准主题变量
141
+ */
142
+ clear() {
143
+ Object.values(a).forEach((o) => {
144
+ this.remove(o);
145
+ });
146
+ }
147
+ }
148
+ const n = new c();
149
+ function p(r) {
150
+ if (typeof r == "string") {
151
+ const o = s[r];
152
+ if (!o)
153
+ throw new Error(
154
+ `Unknown preset theme: ${r}. Available presets: ${Object.keys(s).join(", ")}`
155
+ );
156
+ n.set(o);
157
+ } else
158
+ n.set(r);
159
+ }
160
+ function u(r) {
161
+ return new c(r);
162
+ }
163
+ export {
164
+ b as Preset,
165
+ a as STANDARD_CSS_VARIABLES,
166
+ c as SlideThemeHook,
167
+ n as globalTheme,
168
+ s as presets,
169
+ p as setTheme,
170
+ d as solarizedDark,
171
+ C as solarizedLight,
172
+ u as useTheme
173
+ };
174
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../src/types.ts","../src/presets.ts","../src/hook.ts"],"sourcesContent":["/**\n * @slidejs/theme - 主题系统类型定义\n *\n * 定义标准化的主题配置接口,不针对特定 runner\n *\n * 注意:本包只提供高级 API(标准变量),不提供低级 API(runner 特定变量)。\n * 如果需要直接设置 runner 特定变量,请自行使用 DOM API,风险自负。\n */\n\n/**\n * 标准主题配置\n * 使用标准变量名,不包含 runner 名称\n *\n * 这些变量会被所有 runner 自动映射到自己的特定变量\n */\nexport interface StandardTheme {\n /** 导航按钮颜色 */\n navigationColor?: string;\n /** 分页器颜色 */\n paginationColor?: string;\n /** 分页器激活颜色 */\n paginationActiveColor?: string;\n /** 滚动条背景色 */\n scrollbarBg?: string;\n /** 滚动条拖拽颜色 */\n scrollbarDragBg?: string;\n /** 箭头颜色(用于 Splide) */\n arrowColor?: string;\n /** 进度条颜色 */\n progressBarColor?: string;\n /** 背景色 */\n backgroundColor?: string;\n /** 文本颜色 */\n textColor?: string;\n /** 链接颜色 */\n linkColor?: string;\n /** 标题颜色 */\n headingColor?: string;\n /** 代码背景色 */\n codeBackground?: string;\n}\n\n/**\n * 标准 CSS 变量名\n *\n * 这些是 SlideJS 官方支持的标准变量名\n * 所有 runner 会将这些变量映射到自己的特定变量\n */\nexport const STANDARD_CSS_VARIABLES = {\n navigationColor: '--slidejs-navigation-color',\n paginationColor: '--slidejs-pagination-color',\n paginationActiveColor: '--slidejs-pagination-active-color',\n scrollbarBg: '--slidejs-scrollbar-bg',\n scrollbarDragBg: '--slidejs-scrollbar-drag-bg',\n arrowColor: '--slidejs-arrow-color',\n progressBarColor: '--slidejs-progress-bar-color',\n backgroundColor: '--slidejs-background-color',\n textColor: '--slidejs-text-color',\n linkColor: '--slidejs-link-color',\n headingColor: '--slidejs-heading-color',\n codeBackground: '--slidejs-code-background',\n} as const;\n\n/**\n * Runner 特定 CSS 变量映射(仅供内部参考,不导出)\n *\n * 注意:\n * 1. 此接口不导出,仅供内部类型检查使用\n * 2. 实际的映射在 runner 的 CSS 文件中通过 CSS `var()` 函数完成\n * 3. 本包只提供高级 API(标准变量),不提供低级 API(runner 特定变量)\n * 4. 如果需要直接设置 runner 特定变量,请自行使用 DOM API,风险自负\n *\n * 映射关系(仅供参考):\n * - Reveal.js: `--slidejs-background-color` → `--slidejs-revealjs-background-color`\n * - Swiper: `--slidejs-navigation-color` → `--slidejs-swiper-navigation-color`\n * - Splide: `--slidejs-arrow-color` → `--slidejs-splide-arrow-color`\n *\n * 查看 runner 的 `style.css` 文件了解完整的映射关系。\n */\ninterface RunnerCSSVariableMap {\n revealjs: {\n '--slidejs-background-color': string;\n '--slidejs-text-color': string;\n '--slidejs-link-color': string;\n '--slidejs-heading-color': string;\n '--slidejs-code-background': string;\n };\n swiper: {\n '--slidejs-navigation-color': string;\n '--slidejs-pagination-color': string;\n '--slidejs-pagination-active-color': string;\n '--slidejs-scrollbar-bg': string;\n '--slidejs-scrollbar-drag-bg': string;\n };\n splide: {\n '--slidejs-arrow-color': string;\n '--slidejs-pagination-color': string;\n '--slidejs-pagination-active-color': string;\n '--slidejs-progress-bar-color': string;\n };\n}\n","/**\n * @slidejs/theme - 预设主题\n *\n * 提供内置的主题预设\n */\n\nimport type { StandardTheme } from './types';\n\n/**\n * 预设主题名称常量\n */\nconst PRESET_THEME_SOLARIZED_DARK = 'solarized-dark' as const;\nconst PRESET_THEME_SOLARIZED_LIGHT = 'solarized-light' as const;\n\n/**\n * Solarized Dark 主题\n *\n * 基于 Solarized 配色方案的深色主题\n * 参考:https://ethanschoonover.com/solarized/\n */\nexport const solarizedDark: StandardTheme = {\n // 基础颜色\n backgroundColor: '#002b36', // base03 - 最暗的背景\n textColor: '#839496', // base0 - 主要文本\n headingColor: '#93a1a1', // base1 - 标题文本\n linkColor: '#268bd2', // blue - 链接颜色\n\n // 导航和分页\n navigationColor: '#268bd2', // blue - 导航按钮\n paginationColor: '#268bd2', // blue - 分页器\n paginationActiveColor: '#2aa198', // cyan - 激活状态\n arrowColor: '#268bd2', // blue - 箭头(Splide)\n progressBarColor: '#2aa198', // cyan - 进度条\n\n // 滚动条\n scrollbarBg: 'rgba(131, 148, 150, 0.2)', // base0 with opacity\n scrollbarDragBg: 'rgba(131, 148, 150, 0.5)', // base0 with opacity\n\n // 代码\n codeBackground: '#073642', // base02 - 代码背景\n};\n\n/**\n * Solarized Light 主题\n *\n * 基于 Solarized 配色方案的浅色主题\n * 参考:https://ethanschoonover.com/solarized/\n */\nexport const solarizedLight: StandardTheme = {\n // 基础颜色\n backgroundColor: '#fdf6e3', // base3 - 最亮的背景\n textColor: '#657b83', // base00 - 主要文本\n headingColor: '#586e75', // base01 - 标题文本\n linkColor: '#268bd2', // blue - 链接颜色\n\n // 导航和分页\n navigationColor: '#268bd2', // blue - 导航按钮\n paginationColor: '#268bd2', // blue - 分页器\n paginationActiveColor: '#2aa198', // cyan - 激活状态\n arrowColor: '#268bd2', // blue - 箭头(Splide)\n progressBarColor: '#2aa198', // cyan - 进度条\n\n // 滚动条\n scrollbarBg: 'rgba(101, 123, 131, 0.2)', // base00 with opacity\n scrollbarDragBg: 'rgba(101, 123, 131, 0.5)', // base00 with opacity\n\n // 代码\n codeBackground: '#eee8d5', // base2 - 代码背景\n};\n\n/**\n * 预设主题映射\n * 使用常量作为键,确保类型安全\n */\nexport const presets = {\n [PRESET_THEME_SOLARIZED_DARK]: solarizedDark,\n [PRESET_THEME_SOLARIZED_LIGHT]: solarizedLight,\n} as const;\n\n/**\n * 预设主题名称类型\n */\nexport type PresetThemeName = keyof typeof presets;\n\n/**\n * 预设主题名称常量对象\n * 提供类型安全的命名空间访问\n */\nexport const Preset = {\n SolarizedDark: PRESET_THEME_SOLARIZED_DARK,\n SolarizedLight: PRESET_THEME_SOLARIZED_LIGHT,\n} as const;\n","/**\n * @slidejs/theme - CSS Hook API\n *\n * 提供运行时动态设置标准 CSS 变量的 API\n *\n * 注意:本包只提供高级 API(标准变量),不提供低级 API(runner 特定变量)。\n * 如果需要直接设置 runner 特定变量,请自行使用 DOM API,风险自负。\n */\n\nimport type { StandardTheme } from './types';\nimport { STANDARD_CSS_VARIABLES } from './types';\nimport { presets, type PresetThemeName } from './presets';\n\n/**\n * 设置 CSS 变量的辅助函数\n */\nfunction setCSSVariable(\n element: HTMLElement | Document,\n variableName: string,\n value: string\n): void {\n if (element instanceof Document) {\n element.documentElement.style.setProperty(variableName, value);\n } else {\n element.style.setProperty(variableName, value);\n }\n}\n\n/**\n * 应用标准主题(高级 API)\n * 设置标准 CSS 变量,runner 会将这些变量映射到自己的变量\n */\nfunction applyStandardTheme(element: HTMLElement | Document, theme: StandardTheme): void {\n if (theme.navigationColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.navigationColor, theme.navigationColor);\n }\n if (theme.paginationColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.paginationColor, theme.paginationColor);\n }\n if (theme.paginationActiveColor) {\n setCSSVariable(\n element,\n STANDARD_CSS_VARIABLES.paginationActiveColor,\n theme.paginationActiveColor\n );\n }\n if (theme.scrollbarBg) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.scrollbarBg, theme.scrollbarBg);\n }\n if (theme.scrollbarDragBg) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.scrollbarDragBg, theme.scrollbarDragBg);\n }\n if (theme.arrowColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.arrowColor, theme.arrowColor);\n }\n if (theme.progressBarColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.progressBarColor, theme.progressBarColor);\n }\n if (theme.backgroundColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.backgroundColor, theme.backgroundColor);\n }\n if (theme.textColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.textColor, theme.textColor);\n }\n if (theme.linkColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.linkColor, theme.linkColor);\n }\n if (theme.headingColor) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.headingColor, theme.headingColor);\n }\n if (theme.codeBackground) {\n setCSSVariable(element, STANDARD_CSS_VARIABLES.codeBackground, theme.codeBackground);\n }\n}\n\n/**\n * CSS Hook API 类\n *\n * 只提供高级 API(标准变量),不提供低级 API(runner 特定变量)\n */\nexport class SlideThemeHook {\n private target: HTMLElement | Document;\n\n /**\n * 创建主题 Hook 实例\n *\n * @param target - 目标元素或文档(默认为 document)\n */\n constructor(target?: HTMLElement | Document | string) {\n if (typeof target === 'string') {\n const element = document.querySelector(target);\n if (!element) {\n throw new Error(`Element not found: ${target}`);\n }\n this.target = element as HTMLElement;\n } else if (target) {\n this.target = target;\n } else {\n this.target = document;\n }\n }\n\n /**\n * 设置标准主题(高级 API)\n * 使用标准变量名,不针对特定 runner\n *\n * 这是 SlideJS 官方支持的 API\n *\n * @param theme - 标准主题配置或预设主题名称\n */\n set(theme: StandardTheme | PresetThemeName): void {\n if (typeof theme === 'string') {\n const preset = presets[theme];\n if (!preset) {\n throw new Error(\n `Unknown preset theme: ${theme}. Available presets: ${Object.keys(presets).join(', ')}`\n );\n }\n applyStandardTheme(this.target, preset);\n } else {\n applyStandardTheme(this.target, theme);\n }\n }\n\n /**\n * 获取 CSS 变量值\n *\n * @param variableName - CSS 变量名(标准变量或 runner 特定变量)\n * @returns CSS 变量值\n */\n get(variableName: string): string | null {\n if (this.target instanceof Document) {\n return getComputedStyle(this.target.documentElement).getPropertyValue(variableName).trim();\n }\n return getComputedStyle(this.target).getPropertyValue(variableName).trim();\n }\n\n /**\n * 移除 CSS 变量\n *\n * @param variableName - CSS 变量名(标准变量或 runner 特定变量)\n */\n remove(variableName: string): void {\n if (this.target instanceof Document) {\n this.target.documentElement.style.removeProperty(variableName);\n } else {\n this.target.style.removeProperty(variableName);\n }\n }\n\n /**\n * 清除所有标准主题变量\n */\n clear(): void {\n Object.values(STANDARD_CSS_VARIABLES).forEach(variableName => {\n this.remove(variableName);\n });\n }\n}\n\n/**\n * 全局主题 Hook 实例(作用于 document)\n */\nexport const globalTheme = new SlideThemeHook();\n\n/**\n * 设置全局标准主题(高级 API)\n *\n * 这是 SlideJS 官方支持的 API\n * 使用标准变量名,所有 runner 会自动映射这些变量\n *\n * @param theme - 标准主题配置或预设主题名称\n *\n * @example\n * ```typescript\n * import { setTheme } from '@slidejs/theme';\n *\n * // 使用自定义主题\n * setTheme({\n * navigationColor: '#ff0000',\n * paginationColor: '#00ff00',\n * });\n *\n * // 使用预设主题\n * setTheme('solarized-dark');\n * setTheme('solarized-light');\n * ```\n */\nexport function setTheme(theme: StandardTheme | PresetThemeName): void {\n if (typeof theme === 'string') {\n const preset = presets[theme];\n if (!preset) {\n throw new Error(\n `Unknown preset theme: ${theme}. Available presets: ${Object.keys(presets).join(', ')}`\n );\n }\n globalTheme.set(preset);\n } else {\n globalTheme.set(theme);\n }\n}\n\n/**\n * 创建作用域主题 Hook\n *\n * @param selector - CSS 选择器或 HTMLElement\n * @returns 主题 Hook 实例\n *\n * @example\n * ```typescript\n * import { useTheme } from '@slidejs/theme';\n *\n * const theme = useTheme('#my-slides');\n * theme.set({\n * navigationColor: '#ff0000',\n * });\n * ```\n */\nexport function useTheme(selector?: HTMLElement | string): SlideThemeHook {\n return new SlideThemeHook(selector);\n}\n"],"names":["STANDARD_CSS_VARIABLES","PRESET_THEME_SOLARIZED_DARK","PRESET_THEME_SOLARIZED_LIGHT","solarizedDark","solarizedLight","presets","Preset","setCSSVariable","element","variableName","value","applyStandardTheme","theme","SlideThemeHook","target","preset","globalTheme","setTheme","useTheme","selector"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@slidejs/theme",
3
+ "version": "0.1.3",
4
+ "description": "SlideJS Theme System - Runtime CSS Variable Hook API",
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
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "dependencies": {},
20
+ "devDependencies": {
21
+ "typescript": "^5.3.3",
22
+ "vite": "^7.3.1",
23
+ "vite-plugin-dts": "^4.5.4",
24
+ "vitest": "^1.0.0"
25
+ },
26
+ "keywords": [
27
+ "slide",
28
+ "theme",
29
+ "css",
30
+ "variables",
31
+ "customization"
32
+ ],
33
+ "author": "",
34
+ "license": "MIT",
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "scripts": {
39
+ "build": "vite build",
40
+ "typecheck": "tsc --noEmit",
41
+ "test": "vitest run --passWithNoTests",
42
+ "test:watch": "vitest --passWithNoTests",
43
+ "clean": "rm -rf dist"
44
+ }
45
+ }