@easemate/web-kit 0.1.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 +824 -0
- package/build/components/code/index.cjs +152 -0
- package/build/components/code/index.d.cts +11 -0
- package/build/components/code/index.d.ts +11 -0
- package/build/components/code/index.js +148 -0
- package/build/components/code/utils/highlight-api.cjs +18 -0
- package/build/components/code/utils/highlight-api.d.cts +7 -0
- package/build/components/code/utils/highlight-api.d.ts +7 -0
- package/build/components/code/utils/highlight-api.js +14 -0
- package/build/components/code/utils/syntax-grammars.cjs +62 -0
- package/build/components/code/utils/syntax-grammars.d.cts +7 -0
- package/build/components/code/utils/syntax-grammars.d.ts +7 -0
- package/build/components/code/utils/syntax-grammars.js +59 -0
- package/build/components/code/utils/syntax-highlighter-theme.cjs +27 -0
- package/build/components/code/utils/syntax-highlighter-theme.d.cts +3 -0
- package/build/components/code/utils/syntax-highlighter-theme.d.ts +3 -0
- package/build/components/code/utils/syntax-highlighter-theme.js +23 -0
- package/build/components/code/utils/syntax-highlighter-types.cjs +2 -0
- package/build/components/code/utils/syntax-highlighter-types.d.cts +12 -0
- package/build/components/code/utils/syntax-highlighter-types.d.ts +12 -0
- package/build/components/code/utils/syntax-highlighter-types.js +1 -0
- package/build/components/code/utils/syntax-tokenizer.cjs +63 -0
- package/build/components/code/utils/syntax-tokenizer.d.cts +3 -0
- package/build/components/code/utils/syntax-tokenizer.d.ts +3 -0
- package/build/components/code/utils/syntax-tokenizer.js +58 -0
- package/build/components/curve/bezier-conversion.cjs +23 -0
- package/build/components/curve/bezier-conversion.d.cts +2 -0
- package/build/components/curve/bezier-conversion.d.ts +2 -0
- package/build/components/curve/bezier-conversion.js +19 -0
- package/build/components/curve/canvas-controls.cjs +300 -0
- package/build/components/curve/canvas-controls.d.cts +12 -0
- package/build/components/curve/canvas-controls.d.ts +12 -0
- package/build/components/curve/canvas-controls.js +296 -0
- package/build/components/curve/canvas.cjs +1208 -0
- package/build/components/curve/canvas.d.cts +24 -0
- package/build/components/curve/canvas.d.ts +24 -0
- package/build/components/curve/canvas.js +1204 -0
- package/build/components/curve/constants.cjs +203 -0
- package/build/components/curve/constants.d.cts +23 -0
- package/build/components/curve/constants.d.ts +23 -0
- package/build/components/curve/constants.js +200 -0
- package/build/components/curve/controls.cjs +942 -0
- package/build/components/curve/controls.d.cts +37 -0
- package/build/components/curve/controls.d.ts +37 -0
- package/build/components/curve/controls.js +938 -0
- package/build/components/curve/index.cjs +335 -0
- package/build/components/curve/index.d.cts +31 -0
- package/build/components/curve/index.d.ts +31 -0
- package/build/components/curve/index.js +330 -0
- package/build/components/curve/output.cjs +141 -0
- package/build/components/curve/output.d.cts +19 -0
- package/build/components/curve/output.d.ts +19 -0
- package/build/components/curve/output.js +137 -0
- package/build/components/curve/styles.cjs +493 -0
- package/build/components/curve/styles.d.cts +6 -0
- package/build/components/curve/styles.d.ts +6 -0
- package/build/components/curve/styles.js +490 -0
- package/build/components/curve/svg-renderer.cjs +185 -0
- package/build/components/curve/svg-renderer.d.cts +9 -0
- package/build/components/curve/svg-renderer.d.ts +9 -0
- package/build/components/curve/svg-renderer.js +175 -0
- package/build/components/curve/toolbar.cjs +368 -0
- package/build/components/curve/toolbar.d.cts +26 -0
- package/build/components/curve/toolbar.d.ts +26 -0
- package/build/components/curve/toolbar.js +364 -0
- package/build/components/curve/types.cjs +10 -0
- package/build/components/curve/types.d.cts +33 -0
- package/build/components/curve/types.d.ts +33 -0
- package/build/components/curve/types.js +7 -0
- package/build/components/curve/utils.cjs +541 -0
- package/build/components/curve/utils.d.cts +33 -0
- package/build/components/curve/utils.d.ts +33 -0
- package/build/components/curve/utils.js +521 -0
- package/build/components/index.cjs +18 -0
- package/build/components/index.d.cts +2 -0
- package/build/components/index.d.ts +2 -0
- package/build/components/index.js +2 -0
- package/build/decorators/Component.cjs +127 -0
- package/build/decorators/Component.d.cts +28 -0
- package/build/decorators/Component.d.ts +28 -0
- package/build/decorators/Component.js +123 -0
- package/build/decorators/Listen.cjs +154 -0
- package/build/decorators/Listen.d.cts +18 -0
- package/build/decorators/Listen.d.ts +18 -0
- package/build/decorators/Listen.js +151 -0
- package/build/decorators/OutsideClick.cjs +64 -0
- package/build/decorators/OutsideClick.d.cts +16 -0
- package/build/decorators/OutsideClick.d.ts +16 -0
- package/build/decorators/OutsideClick.js +59 -0
- package/build/decorators/Prop.cjs +273 -0
- package/build/decorators/Prop.d.cts +22 -0
- package/build/decorators/Prop.d.ts +22 -0
- package/build/decorators/Prop.js +270 -0
- package/build/decorators/Query.cjs +79 -0
- package/build/decorators/Query.d.cts +27 -0
- package/build/decorators/Query.d.ts +27 -0
- package/build/decorators/Query.js +76 -0
- package/build/decorators/Watch.cjs +52 -0
- package/build/decorators/Watch.d.cts +11 -0
- package/build/decorators/Watch.d.ts +11 -0
- package/build/decorators/Watch.js +49 -0
- package/build/decorators/index.cjs +15 -0
- package/build/decorators/index.d.cts +6 -0
- package/build/decorators/index.d.ts +6 -0
- package/build/decorators/index.js +6 -0
- package/build/elements/button/index.cjs +214 -0
- package/build/elements/button/index.d.cts +11 -0
- package/build/elements/button/index.d.ts +11 -0
- package/build/elements/button/index.js +210 -0
- package/build/elements/checkbox/index.cjs +316 -0
- package/build/elements/checkbox/index.d.cts +14 -0
- package/build/elements/checkbox/index.d.ts +14 -0
- package/build/elements/checkbox/index.js +312 -0
- package/build/elements/color/index.cjs +154 -0
- package/build/elements/color/index.d.cts +18 -0
- package/build/elements/color/index.d.ts +18 -0
- package/build/elements/color/index.js +150 -0
- package/build/elements/color/picker.cjs +544 -0
- package/build/elements/color/picker.d.cts +37 -0
- package/build/elements/color/picker.d.ts +37 -0
- package/build/elements/color/picker.js +540 -0
- package/build/elements/color/utils.cjs +235 -0
- package/build/elements/color/utils.d.cts +37 -0
- package/build/elements/color/utils.d.ts +37 -0
- package/build/elements/color/utils.js +218 -0
- package/build/elements/dropdown/index.cjs +875 -0
- package/build/elements/dropdown/index.d.cts +30 -0
- package/build/elements/dropdown/index.d.ts +30 -0
- package/build/elements/dropdown/index.js +871 -0
- package/build/elements/field/index.cjs +82 -0
- package/build/elements/field/index.d.cts +4 -0
- package/build/elements/field/index.d.ts +4 -0
- package/build/elements/field/index.js +78 -0
- package/build/elements/icons/animation/chevron.cjs +57 -0
- package/build/elements/icons/animation/chevron.d.cts +10 -0
- package/build/elements/icons/animation/chevron.d.ts +10 -0
- package/build/elements/icons/animation/chevron.js +53 -0
- package/build/elements/icons/animation/clear.cjs +74 -0
- package/build/elements/icons/animation/clear.d.cts +3 -0
- package/build/elements/icons/animation/clear.d.ts +3 -0
- package/build/elements/icons/animation/clear.js +70 -0
- package/build/elements/icons/animation/grid.cjs +77 -0
- package/build/elements/icons/animation/grid.d.cts +8 -0
- package/build/elements/icons/animation/grid.d.ts +8 -0
- package/build/elements/icons/animation/grid.js +73 -0
- package/build/elements/icons/animation/loading.cjs +68 -0
- package/build/elements/icons/animation/loading.d.cts +3 -0
- package/build/elements/icons/animation/loading.d.ts +3 -0
- package/build/elements/icons/animation/loading.js +64 -0
- package/build/elements/icons/animation/snap.cjs +133 -0
- package/build/elements/icons/animation/snap.d.cts +8 -0
- package/build/elements/icons/animation/snap.d.ts +8 -0
- package/build/elements/icons/animation/snap.js +129 -0
- package/build/elements/icons/index.cjs +40 -0
- package/build/elements/icons/index.d.cts +24 -0
- package/build/elements/icons/index.d.ts +24 -0
- package/build/elements/icons/index.js +24 -0
- package/build/elements/icons/interface/anchor-add.cjs +35 -0
- package/build/elements/icons/interface/anchor-add.d.cts +3 -0
- package/build/elements/icons/interface/anchor-add.d.ts +3 -0
- package/build/elements/icons/interface/anchor-add.js +31 -0
- package/build/elements/icons/interface/anchor-remove.cjs +34 -0
- package/build/elements/icons/interface/anchor-remove.d.cts +3 -0
- package/build/elements/icons/interface/anchor-remove.d.ts +3 -0
- package/build/elements/icons/interface/anchor-remove.js +30 -0
- package/build/elements/icons/interface/arrow-up.cjs +30 -0
- package/build/elements/icons/interface/arrow-up.d.cts +3 -0
- package/build/elements/icons/interface/arrow-up.d.ts +3 -0
- package/build/elements/icons/interface/arrow-up.js +26 -0
- package/build/elements/icons/interface/arrows-vertical.cjs +30 -0
- package/build/elements/icons/interface/arrows-vertical.d.cts +3 -0
- package/build/elements/icons/interface/arrows-vertical.d.ts +3 -0
- package/build/elements/icons/interface/arrows-vertical.js +26 -0
- package/build/elements/icons/interface/bezier-angle.cjs +33 -0
- package/build/elements/icons/interface/bezier-angle.d.cts +3 -0
- package/build/elements/icons/interface/bezier-angle.d.ts +3 -0
- package/build/elements/icons/interface/bezier-angle.js +29 -0
- package/build/elements/icons/interface/bezier-distribute.cjs +34 -0
- package/build/elements/icons/interface/bezier-distribute.d.cts +3 -0
- package/build/elements/icons/interface/bezier-distribute.d.ts +3 -0
- package/build/elements/icons/interface/bezier-distribute.js +30 -0
- package/build/elements/icons/interface/bezier-length.cjs +31 -0
- package/build/elements/icons/interface/bezier-length.d.cts +3 -0
- package/build/elements/icons/interface/bezier-length.d.ts +3 -0
- package/build/elements/icons/interface/bezier-length.js +27 -0
- package/build/elements/icons/interface/bezier-mirror.cjs +31 -0
- package/build/elements/icons/interface/bezier-mirror.d.cts +3 -0
- package/build/elements/icons/interface/bezier-mirror.d.ts +3 -0
- package/build/elements/icons/interface/bezier-mirror.js +27 -0
- package/build/elements/icons/interface/bezier.cjs +26 -0
- package/build/elements/icons/interface/bezier.d.cts +3 -0
- package/build/elements/icons/interface/bezier.d.ts +3 -0
- package/build/elements/icons/interface/bezier.js +22 -0
- package/build/elements/icons/interface/check.cjs +30 -0
- package/build/elements/icons/interface/check.d.cts +3 -0
- package/build/elements/icons/interface/check.d.ts +3 -0
- package/build/elements/icons/interface/check.js +26 -0
- package/build/elements/icons/interface/circle-arrow-left.cjs +30 -0
- package/build/elements/icons/interface/circle-arrow-left.d.cts +3 -0
- package/build/elements/icons/interface/circle-arrow-left.d.ts +3 -0
- package/build/elements/icons/interface/circle-arrow-left.js +26 -0
- package/build/elements/icons/interface/circle-arrow-right.cjs +30 -0
- package/build/elements/icons/interface/circle-arrow-right.d.cts +3 -0
- package/build/elements/icons/interface/circle-arrow-right.d.ts +3 -0
- package/build/elements/icons/interface/circle-arrow-right.js +26 -0
- package/build/elements/icons/interface/code.cjs +30 -0
- package/build/elements/icons/interface/code.d.cts +3 -0
- package/build/elements/icons/interface/code.d.ts +3 -0
- package/build/elements/icons/interface/code.js +26 -0
- package/build/elements/icons/interface/dots.cjs +32 -0
- package/build/elements/icons/interface/dots.d.cts +3 -0
- package/build/elements/icons/interface/dots.d.ts +3 -0
- package/build/elements/icons/interface/dots.js +28 -0
- package/build/elements/icons/interface/mention.cjs +30 -0
- package/build/elements/icons/interface/mention.d.cts +3 -0
- package/build/elements/icons/interface/mention.d.ts +3 -0
- package/build/elements/icons/interface/mention.js +26 -0
- package/build/elements/icons/interface/minus.cjs +30 -0
- package/build/elements/icons/interface/minus.d.cts +3 -0
- package/build/elements/icons/interface/minus.d.ts +3 -0
- package/build/elements/icons/interface/minus.js +26 -0
- package/build/elements/icons/interface/picker.cjs +34 -0
- package/build/elements/icons/interface/picker.d.cts +3 -0
- package/build/elements/icons/interface/picker.d.ts +3 -0
- package/build/elements/icons/interface/picker.js +30 -0
- package/build/elements/icons/interface/plus.cjs +30 -0
- package/build/elements/icons/interface/plus.d.cts +3 -0
- package/build/elements/icons/interface/plus.d.ts +3 -0
- package/build/elements/icons/interface/plus.js +26 -0
- package/build/elements/icons/interface/settings.cjs +30 -0
- package/build/elements/icons/interface/settings.d.cts +3 -0
- package/build/elements/icons/interface/settings.d.ts +3 -0
- package/build/elements/icons/interface/settings.js +26 -0
- package/build/elements/index.cjs +62 -0
- package/build/elements/index.d.cts +22 -0
- package/build/elements/index.d.ts +22 -0
- package/build/elements/index.js +22 -0
- package/build/elements/input/index.cjs +273 -0
- package/build/elements/input/index.d.cts +17 -0
- package/build/elements/input/index.d.ts +17 -0
- package/build/elements/input/index.js +269 -0
- package/build/elements/logo/index.cjs +732 -0
- package/build/elements/logo/index.d.cts +17 -0
- package/build/elements/logo/index.d.ts +17 -0
- package/build/elements/logo/index.js +728 -0
- package/build/elements/monitor/fps.cjs +432 -0
- package/build/elements/monitor/fps.d.cts +21 -0
- package/build/elements/monitor/fps.d.ts +21 -0
- package/build/elements/monitor/fps.js +428 -0
- package/build/elements/monitor/index.cjs +670 -0
- package/build/elements/monitor/index.d.cts +112 -0
- package/build/elements/monitor/index.d.ts +112 -0
- package/build/elements/monitor/index.js +666 -0
- package/build/elements/number/index.cjs +173 -0
- package/build/elements/number/index.d.cts +19 -0
- package/build/elements/number/index.d.ts +19 -0
- package/build/elements/number/index.js +169 -0
- package/build/elements/origin/index.cjs +169 -0
- package/build/elements/origin/index.d.cts +12 -0
- package/build/elements/origin/index.d.ts +12 -0
- package/build/elements/origin/index.js +165 -0
- package/build/elements/popover/index.cjs +209 -0
- package/build/elements/popover/index.d.cts +19 -0
- package/build/elements/popover/index.d.ts +19 -0
- package/build/elements/popover/index.js +205 -0
- package/build/elements/radio/index.cjs +301 -0
- package/build/elements/radio/index.d.cts +13 -0
- package/build/elements/radio/index.d.ts +13 -0
- package/build/elements/radio/index.js +283 -0
- package/build/elements/radio/input.cjs +329 -0
- package/build/elements/radio/input.d.cts +15 -0
- package/build/elements/radio/input.d.ts +15 -0
- package/build/elements/radio/input.js +325 -0
- package/build/elements/radio/option.cjs +15 -0
- package/build/elements/radio/option.d.cts +3 -0
- package/build/elements/radio/option.d.ts +3 -0
- package/build/elements/radio/option.js +11 -0
- package/build/elements/shared.cjs +66 -0
- package/build/elements/shared.d.cts +40 -0
- package/build/elements/shared.d.ts +40 -0
- package/build/elements/shared.js +59 -0
- package/build/elements/slider/index.cjs +232 -0
- package/build/elements/slider/index.d.cts +20 -0
- package/build/elements/slider/index.d.ts +20 -0
- package/build/elements/slider/index.js +228 -0
- package/build/elements/state/index.cjs +681 -0
- package/build/elements/state/index.d.cts +86 -0
- package/build/elements/state/index.d.ts +86 -0
- package/build/elements/state/index.js +677 -0
- package/build/elements/toggle/index.cjs +151 -0
- package/build/elements/toggle/index.d.cts +9 -0
- package/build/elements/toggle/index.d.ts +9 -0
- package/build/elements/toggle/index.js +147 -0
- package/build/elements/tooltip/index.cjs +187 -0
- package/build/elements/tooltip/index.d.cts +17 -0
- package/build/elements/tooltip/index.d.ts +17 -0
- package/build/elements/tooltip/index.js +183 -0
- package/build/index.cjs +40 -0
- package/build/index.d.cts +6 -0
- package/build/index.d.ts +6 -0
- package/build/index.js +12 -0
- package/build/init.cjs +325 -0
- package/build/init.d.cts +157 -0
- package/build/init.d.ts +157 -0
- package/build/init.js +289 -0
- package/build/internal/component-loaders.cjs +206 -0
- package/build/internal/component-loaders.d.cts +52 -0
- package/build/internal/component-loaders.d.ts +52 -0
- package/build/internal/component-loaders.js +167 -0
- package/build/internal/fonts.cjs +128 -0
- package/build/internal/fonts.d.cts +32 -0
- package/build/internal/fonts.d.ts +32 -0
- package/build/internal/fonts.js +123 -0
- package/build/internal/lazy-load.cjs +89 -0
- package/build/internal/lazy-load.d.cts +32 -0
- package/build/internal/lazy-load.d.ts +32 -0
- package/build/internal/lazy-load.js +86 -0
- package/build/internal/style-inject.cjs +236 -0
- package/build/internal/style-inject.d.cts +44 -0
- package/build/internal/style-inject.d.ts +44 -0
- package/build/internal/style-inject.js +226 -0
- package/build/register.cjs +36 -0
- package/build/register.d.cts +32 -0
- package/build/register.d.ts +32 -0
- package/build/register.js +34 -0
- package/build/theme/index.cjs +452 -0
- package/build/theme/index.d.cts +146 -0
- package/build/theme/index.d.ts +146 -0
- package/build/theme/index.js +423 -0
- package/build/theme/presets.cjs +54 -0
- package/build/theme/presets.d.cts +19 -0
- package/build/theme/presets.d.ts +19 -0
- package/build/theme/presets.js +51 -0
- package/build/theme/registry.cjs +204 -0
- package/build/theme/registry.d.cts +99 -0
- package/build/theme/registry.d.ts +99 -0
- package/build/theme/registry.js +194 -0
- package/build/theme/tokens.cjs +148 -0
- package/build/theme/tokens.d.cts +163 -0
- package/build/theme/tokens.d.ts +163 -0
- package/build/theme/tokens.js +145 -0
- package/build/utils/dismiss-controller.cjs +77 -0
- package/build/utils/dismiss-controller.d.cts +14 -0
- package/build/utils/dismiss-controller.d.ts +14 -0
- package/build/utils/dismiss-controller.js +73 -0
- package/build/utils/index.cjs +18 -0
- package/build/utils/index.d.cts +3 -0
- package/build/utils/index.d.ts +3 -0
- package/build/utils/index.js +3 -0
- package/build/utils/outside-click.cjs +82 -0
- package/build/utils/outside-click.d.cts +18 -0
- package/build/utils/outside-click.d.ts +18 -0
- package/build/utils/outside-click.js +74 -0
- package/build/utils/template-helpers.cjs +39 -0
- package/build/utils/template-helpers.d.cts +13 -0
- package/build/utils/template-helpers.d.ts +13 -0
- package/build/utils/template-helpers.js +28 -0
- package/package.json +96 -0
|
@@ -0,0 +1,452 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.followSystemTheme = exports.getSystemThemeMode = exports.applyTheme = exports.getThemeName = exports.setThemeName = exports.createDarkTheme = exports.mergeTheme = exports.EASE_THEME_ATTRIBUTE = exports.setThemeValue = exports.getThemeValue = exports.removeTheme = exports.defineTheme = exports.createTheme = void 0;
|
|
18
|
+
const tokens_1 = require("./tokens.cjs");
|
|
19
|
+
__exportStar(require("./presets.cjs"), exports);
|
|
20
|
+
__exportStar(require("./registry.cjs"), exports);
|
|
21
|
+
__exportStar(require("./tokens.cjs"), exports);
|
|
22
|
+
/**
|
|
23
|
+
* CSS variable prefix
|
|
24
|
+
*/
|
|
25
|
+
const CSS_PREFIX = '--color';
|
|
26
|
+
const RADII_PREFIX = '--radii';
|
|
27
|
+
const SPACING_PREFIX = '--spacing';
|
|
28
|
+
const TYPOGRAPHY_PREFIX = '--font';
|
|
29
|
+
/**
|
|
30
|
+
* Convert a nested object path to CSS variable name
|
|
31
|
+
* e.g., ['gray', '100'] -> '--color-gray-100'
|
|
32
|
+
*/
|
|
33
|
+
const toVarName = (prefix, ...parts) => `${prefix}-${parts.join('-')}`;
|
|
34
|
+
/**
|
|
35
|
+
* Generate CSS variables from a color scale
|
|
36
|
+
*/
|
|
37
|
+
const generateColorScaleVars = (name, scale) => {
|
|
38
|
+
const vars = {};
|
|
39
|
+
for (const [level, value] of Object.entries(scale)) {
|
|
40
|
+
if (value !== undefined) {
|
|
41
|
+
vars[toVarName(CSS_PREFIX, name, level)] = value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return vars;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Add alpha to an OKLab/OKLCH color string.
|
|
48
|
+
* Falls back to `color-mix()` for non-oklab/oklch formats.
|
|
49
|
+
*/
|
|
50
|
+
const withAlpha = (color, alpha) => {
|
|
51
|
+
const trimmed = color.trim();
|
|
52
|
+
const match = /^(oklab|oklch)\((.+)\)$/.exec(trimmed);
|
|
53
|
+
if (match) {
|
|
54
|
+
const fn = match[1];
|
|
55
|
+
const innerRaw = match[2];
|
|
56
|
+
if (fn && innerRaw) {
|
|
57
|
+
const inner = innerRaw.trim();
|
|
58
|
+
// If the color already has an alpha, keep it as-is.
|
|
59
|
+
if (inner.includes('/')) {
|
|
60
|
+
return `${fn}(${inner})`;
|
|
61
|
+
}
|
|
62
|
+
return `${fn}(${inner} / ${alpha})`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Fallback: approximate alpha using color-mix
|
|
66
|
+
const pct = Math.round(alpha * 1000) / 10;
|
|
67
|
+
return `color-mix(in oklab, ${trimmed} ${pct}%, transparent)`;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Generate CSS variables from a color palette
|
|
71
|
+
*/
|
|
72
|
+
const generateColorVars = (colors) => {
|
|
73
|
+
const vars = {};
|
|
74
|
+
if (colors.gray) {
|
|
75
|
+
Object.assign(vars, generateColorScaleVars('gray', colors.gray));
|
|
76
|
+
}
|
|
77
|
+
if (colors.blue) {
|
|
78
|
+
Object.assign(vars, generateColorScaleVars('blue', colors.blue));
|
|
79
|
+
}
|
|
80
|
+
// Derived convenience tokens used by some components
|
|
81
|
+
const blue = colors.blue;
|
|
82
|
+
if (blue?.['200']) {
|
|
83
|
+
vars[toVarName(CSS_PREFIX, 'blue', '100-50')] = withAlpha(blue['200'], 0.5);
|
|
84
|
+
}
|
|
85
|
+
if (blue?.['300']) {
|
|
86
|
+
vars[toVarName(CSS_PREFIX, 'blue', '300-40')] = withAlpha(blue['300'], 0.4);
|
|
87
|
+
}
|
|
88
|
+
if (colors.green) {
|
|
89
|
+
Object.assign(vars, generateColorScaleVars('green', colors.green));
|
|
90
|
+
}
|
|
91
|
+
if (colors.red) {
|
|
92
|
+
Object.assign(vars, generateColorScaleVars('red', colors.red));
|
|
93
|
+
}
|
|
94
|
+
if (colors.orange) {
|
|
95
|
+
Object.assign(vars, generateColorScaleVars('orange', colors.orange));
|
|
96
|
+
}
|
|
97
|
+
if (colors.yellow) {
|
|
98
|
+
Object.assign(vars, generateColorScaleVars('yellow', colors.yellow));
|
|
99
|
+
}
|
|
100
|
+
if (colors.white) {
|
|
101
|
+
vars[toVarName(CSS_PREFIX, 'white')] = colors.white;
|
|
102
|
+
}
|
|
103
|
+
if (colors.black) {
|
|
104
|
+
vars[toVarName(CSS_PREFIX, 'black')] = colors.black;
|
|
105
|
+
}
|
|
106
|
+
if (colors.whiteAlpha) {
|
|
107
|
+
for (const [level, value] of Object.entries(colors.whiteAlpha)) {
|
|
108
|
+
if (value !== undefined) {
|
|
109
|
+
vars[toVarName(CSS_PREFIX, 'white', level)] = value;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Ensure `--color-white-0` exists (used by slider thumb gradients)
|
|
114
|
+
if (!vars[toVarName(CSS_PREFIX, 'white', 0)] && colors.white) {
|
|
115
|
+
vars[toVarName(CSS_PREFIX, 'white', 0)] = withAlpha(colors.white, 0);
|
|
116
|
+
}
|
|
117
|
+
if (colors.blackAlpha) {
|
|
118
|
+
for (const [level, value] of Object.entries(colors.blackAlpha)) {
|
|
119
|
+
if (value !== undefined) {
|
|
120
|
+
vars[toVarName(CSS_PREFIX, 'black', level)] = value;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (colors.foreground) {
|
|
125
|
+
vars[toVarName(CSS_PREFIX, 'foreground')] = colors.foreground;
|
|
126
|
+
}
|
|
127
|
+
return vars;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Resolve the theme target element.
|
|
131
|
+
* This keeps the theme API SSR-safe (no-ops when `document` is not available).
|
|
132
|
+
*/
|
|
133
|
+
const resolveThemeTarget = (element) => {
|
|
134
|
+
if (element) {
|
|
135
|
+
return element;
|
|
136
|
+
}
|
|
137
|
+
if (typeof document === 'undefined') {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
return document.documentElement;
|
|
141
|
+
};
|
|
142
|
+
/**
|
|
143
|
+
* Generate CSS variables from radii config
|
|
144
|
+
*/
|
|
145
|
+
const generateRadiiVars = (radii) => {
|
|
146
|
+
const vars = {};
|
|
147
|
+
for (const [name, value] of Object.entries(radii)) {
|
|
148
|
+
if (value !== undefined) {
|
|
149
|
+
vars[toVarName(RADII_PREFIX, name)] = value;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return vars;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Generate CSS variables from spacing config
|
|
156
|
+
*/
|
|
157
|
+
const generateSpacingVars = (spacing) => {
|
|
158
|
+
const vars = {};
|
|
159
|
+
for (const [name, value] of Object.entries(spacing)) {
|
|
160
|
+
if (value !== undefined) {
|
|
161
|
+
vars[toVarName(SPACING_PREFIX, name)] = value;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return vars;
|
|
165
|
+
};
|
|
166
|
+
/**
|
|
167
|
+
* Generate CSS variables from typography config
|
|
168
|
+
*/
|
|
169
|
+
const generateTypographyVars = (typography) => {
|
|
170
|
+
const vars = {};
|
|
171
|
+
if (typography.fontFamily) {
|
|
172
|
+
vars[toVarName(TYPOGRAPHY_PREFIX, 'family')] = typography.fontFamily;
|
|
173
|
+
}
|
|
174
|
+
if (typography.fontMono) {
|
|
175
|
+
vars[toVarName(TYPOGRAPHY_PREFIX, 'mono')] = typography.fontMono;
|
|
176
|
+
}
|
|
177
|
+
if (typography.fontSize) {
|
|
178
|
+
vars[toVarName(TYPOGRAPHY_PREFIX, 'size')] = typography.fontSize;
|
|
179
|
+
}
|
|
180
|
+
if (typography.lineHeight) {
|
|
181
|
+
vars[toVarName(TYPOGRAPHY_PREFIX, 'line-height')] = typography.lineHeight;
|
|
182
|
+
}
|
|
183
|
+
return vars;
|
|
184
|
+
};
|
|
185
|
+
const normalizeCustomVarName = (name) => {
|
|
186
|
+
const trimmed = name.trim();
|
|
187
|
+
if (!trimmed) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
return trimmed.startsWith('--') ? trimmed : `--${trimmed}`;
|
|
191
|
+
};
|
|
192
|
+
const generateCustomVars = (vars) => {
|
|
193
|
+
const out = {};
|
|
194
|
+
for (const [key, value] of Object.entries(vars)) {
|
|
195
|
+
if (value === null || value === undefined) {
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
const name = normalizeCustomVarName(key);
|
|
199
|
+
if (!name) {
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
out[name] = String(value);
|
|
203
|
+
}
|
|
204
|
+
return out;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Generate all CSS variables from a theme config
|
|
208
|
+
*/
|
|
209
|
+
const generateThemeVars = (config) => {
|
|
210
|
+
const vars = {};
|
|
211
|
+
if (config.colors) {
|
|
212
|
+
Object.assign(vars, generateColorVars(config.colors));
|
|
213
|
+
}
|
|
214
|
+
if (config.radii) {
|
|
215
|
+
Object.assign(vars, generateRadiiVars(config.radii));
|
|
216
|
+
}
|
|
217
|
+
if (config.spacing) {
|
|
218
|
+
Object.assign(vars, generateSpacingVars(config.spacing));
|
|
219
|
+
}
|
|
220
|
+
if (config.typography) {
|
|
221
|
+
Object.assign(vars, generateTypographyVars(config.typography));
|
|
222
|
+
}
|
|
223
|
+
if (config.vars) {
|
|
224
|
+
Object.assign(vars, generateCustomVars(config.vars));
|
|
225
|
+
}
|
|
226
|
+
return vars;
|
|
227
|
+
};
|
|
228
|
+
/**
|
|
229
|
+
* Create a CSS string from theme configuration
|
|
230
|
+
*
|
|
231
|
+
* @param config - Theme configuration object
|
|
232
|
+
* @param selector - CSS selector to apply variables to (default: ':root')
|
|
233
|
+
* @returns CSS string with variables
|
|
234
|
+
*
|
|
235
|
+
* @example
|
|
236
|
+
* ```typescript
|
|
237
|
+
* const css = createTheme({
|
|
238
|
+
* colors: {
|
|
239
|
+
* blue: { 500: '#3b82f6' }
|
|
240
|
+
* }
|
|
241
|
+
* });
|
|
242
|
+
* // Returns: ':root { --color-blue-500: #3b82f6; }'
|
|
243
|
+
* ```
|
|
244
|
+
*/
|
|
245
|
+
const createTheme = (config, selector = ':root') => {
|
|
246
|
+
const vars = generateThemeVars(config);
|
|
247
|
+
const declarations = Object.entries(vars)
|
|
248
|
+
.map(([name, value]) => ` ${name}: ${value};`)
|
|
249
|
+
.join('\n');
|
|
250
|
+
return `${selector} {\n${declarations}\n}`;
|
|
251
|
+
};
|
|
252
|
+
exports.createTheme = createTheme;
|
|
253
|
+
/**
|
|
254
|
+
* Apply theme configuration to an element (default: document root)
|
|
255
|
+
*
|
|
256
|
+
* @param config - Theme configuration object
|
|
257
|
+
* @param element - Target element (default: document.documentElement)
|
|
258
|
+
*
|
|
259
|
+
* @example
|
|
260
|
+
* ```typescript
|
|
261
|
+
* // Apply to document root
|
|
262
|
+
* defineTheme({
|
|
263
|
+
* colors: {
|
|
264
|
+
* blue: { 500: '#3b82f6' }
|
|
265
|
+
* }
|
|
266
|
+
* });
|
|
267
|
+
*
|
|
268
|
+
* // Apply to specific element
|
|
269
|
+
* defineTheme({ colors: { gray: { 900: '#111' } } }, myElement);
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
const defineTheme = (config, element) => {
|
|
273
|
+
const target = resolveThemeTarget(element);
|
|
274
|
+
if (!target) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const vars = generateThemeVars(config);
|
|
278
|
+
for (const [name, value] of Object.entries(vars)) {
|
|
279
|
+
target.style.setProperty(name, value);
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
exports.defineTheme = defineTheme;
|
|
283
|
+
/**
|
|
284
|
+
* Remove theme configuration from an element
|
|
285
|
+
*
|
|
286
|
+
* @param config - Theme configuration object (to know which variables to remove)
|
|
287
|
+
* @param element - Target element (default: document.documentElement)
|
|
288
|
+
*/
|
|
289
|
+
const removeTheme = (config, element) => {
|
|
290
|
+
const target = resolveThemeTarget(element);
|
|
291
|
+
if (!target) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
const vars = generateThemeVars(config);
|
|
295
|
+
for (const name of Object.keys(vars)) {
|
|
296
|
+
target.style.removeProperty(name);
|
|
297
|
+
}
|
|
298
|
+
};
|
|
299
|
+
exports.removeTheme = removeTheme;
|
|
300
|
+
/**
|
|
301
|
+
* Get the current value of a CSS theme variable
|
|
302
|
+
*
|
|
303
|
+
* @param token - Variable name (with or without '--' prefix)
|
|
304
|
+
* @param element - Element to read from (default: document.documentElement)
|
|
305
|
+
* @returns The computed value or empty string if not found
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* ```typescript
|
|
309
|
+
* const blue500 = getThemeValue('color-blue-500');
|
|
310
|
+
* const radius = getThemeValue('--radii-md');
|
|
311
|
+
* ```
|
|
312
|
+
*/
|
|
313
|
+
const getThemeValue = (token, element) => {
|
|
314
|
+
const target = resolveThemeTarget(element);
|
|
315
|
+
if (!target || typeof getComputedStyle === 'undefined') {
|
|
316
|
+
return '';
|
|
317
|
+
}
|
|
318
|
+
const varName = token.startsWith('--') ? token : `--${token}`;
|
|
319
|
+
return getComputedStyle(target).getPropertyValue(varName).trim();
|
|
320
|
+
};
|
|
321
|
+
exports.getThemeValue = getThemeValue;
|
|
322
|
+
/**
|
|
323
|
+
* Set a single theme variable
|
|
324
|
+
*
|
|
325
|
+
* @param token - Variable name (with or without '--' prefix)
|
|
326
|
+
* @param value - Value to set
|
|
327
|
+
* @param element - Target element (default: document.documentElement)
|
|
328
|
+
*
|
|
329
|
+
* @example
|
|
330
|
+
* ```typescript
|
|
331
|
+
* setThemeValue('color-blue-500', '#3b82f6');
|
|
332
|
+
* ```
|
|
333
|
+
*/
|
|
334
|
+
const setThemeValue = (token, value, element) => {
|
|
335
|
+
const target = resolveThemeTarget(element);
|
|
336
|
+
if (!target) {
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
const varName = token.startsWith('--') ? token : `--${token}`;
|
|
340
|
+
target.style.setProperty(varName, value);
|
|
341
|
+
};
|
|
342
|
+
exports.setThemeValue = setThemeValue;
|
|
343
|
+
/** Attribute used for CSS-based theme switching */
|
|
344
|
+
exports.EASE_THEME_ATTRIBUTE = 'data-ease-theme';
|
|
345
|
+
/**
|
|
346
|
+
* Merge a theme with the library defaults (dark baseline).
|
|
347
|
+
* Use this when you want to start from the built-in design tokens and override a few values.
|
|
348
|
+
*/
|
|
349
|
+
const mergeTheme = (overrides = {}) => {
|
|
350
|
+
return {
|
|
351
|
+
colors: {
|
|
352
|
+
...tokens_1.defaultColors,
|
|
353
|
+
...overrides.colors,
|
|
354
|
+
gray: { ...tokens_1.defaultColors.gray, ...overrides.colors?.gray },
|
|
355
|
+
blue: { ...tokens_1.defaultColors.blue, ...overrides.colors?.blue },
|
|
356
|
+
green: { ...tokens_1.defaultColors.green, ...overrides.colors?.green },
|
|
357
|
+
red: { ...tokens_1.defaultColors.red, ...overrides.colors?.red },
|
|
358
|
+
orange: { ...tokens_1.defaultColors.orange, ...overrides.colors?.orange },
|
|
359
|
+
yellow: { ...tokens_1.defaultColors.yellow, ...overrides.colors?.yellow },
|
|
360
|
+
whiteAlpha: { ...tokens_1.defaultColors.whiteAlpha, ...overrides.colors?.whiteAlpha },
|
|
361
|
+
blackAlpha: { ...tokens_1.defaultColors.blackAlpha, ...overrides.colors?.blackAlpha }
|
|
362
|
+
},
|
|
363
|
+
radii: { ...tokens_1.defaultRadii, ...overrides.radii },
|
|
364
|
+
spacing: { ...tokens_1.defaultSpacing, ...overrides.spacing },
|
|
365
|
+
typography: { ...tokens_1.defaultTypography, ...overrides.typography },
|
|
366
|
+
vars: overrides.vars ? { ...overrides.vars } : undefined
|
|
367
|
+
};
|
|
368
|
+
};
|
|
369
|
+
exports.mergeTheme = mergeTheme;
|
|
370
|
+
/**
|
|
371
|
+
* Alias for `mergeTheme()`.
|
|
372
|
+
* This package ships a dark baseline theme; light/custom themes should be provided by the consumer.
|
|
373
|
+
*/
|
|
374
|
+
const createDarkTheme = (overrides = {}) => (0, exports.mergeTheme)(overrides);
|
|
375
|
+
exports.createDarkTheme = createDarkTheme;
|
|
376
|
+
/**
|
|
377
|
+
* Set the active theme name on an element via `[data-ease-theme="<name>"]`.
|
|
378
|
+
* Useful for CSS-scoped themes.
|
|
379
|
+
*/
|
|
380
|
+
const setThemeName = (name, options = {}) => {
|
|
381
|
+
const target = resolveThemeTarget(options.element);
|
|
382
|
+
if (!target) {
|
|
383
|
+
return;
|
|
384
|
+
}
|
|
385
|
+
const attribute = options.attribute ?? exports.EASE_THEME_ATTRIBUTE;
|
|
386
|
+
target.setAttribute(attribute, name);
|
|
387
|
+
if (options.colorScheme && options.setColorScheme !== false) {
|
|
388
|
+
target.style.colorScheme = options.colorScheme;
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
exports.setThemeName = setThemeName;
|
|
392
|
+
const getThemeName = (element, attribute = exports.EASE_THEME_ATTRIBUTE) => {
|
|
393
|
+
const target = resolveThemeTarget(element);
|
|
394
|
+
if (!target) {
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
return target.getAttribute(attribute);
|
|
398
|
+
};
|
|
399
|
+
exports.getThemeName = getThemeName;
|
|
400
|
+
/**
|
|
401
|
+
* Apply a theme config (and optional theme name + color-scheme) to an element.
|
|
402
|
+
* This is SSR-safe: it becomes a no-op when `document` is not available.
|
|
403
|
+
*/
|
|
404
|
+
const applyTheme = (theme, options = {}) => {
|
|
405
|
+
const target = resolveThemeTarget(options.element);
|
|
406
|
+
const attribute = options.attribute ?? exports.EASE_THEME_ATTRIBUTE;
|
|
407
|
+
const config = options.mergeWithDefaults ? (0, exports.mergeTheme)(theme) : theme;
|
|
408
|
+
(0, exports.defineTheme)(config, target);
|
|
409
|
+
if (!target) {
|
|
410
|
+
return config;
|
|
411
|
+
}
|
|
412
|
+
if (options.name && options.setAttribute !== false) {
|
|
413
|
+
target.setAttribute(attribute, options.name);
|
|
414
|
+
}
|
|
415
|
+
if (options.colorScheme && options.setColorScheme !== false) {
|
|
416
|
+
target.style.colorScheme = options.colorScheme;
|
|
417
|
+
}
|
|
418
|
+
return config;
|
|
419
|
+
};
|
|
420
|
+
exports.applyTheme = applyTheme;
|
|
421
|
+
const getSystemThemeMode = () => {
|
|
422
|
+
if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
|
|
423
|
+
return 'dark';
|
|
424
|
+
}
|
|
425
|
+
return window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark';
|
|
426
|
+
};
|
|
427
|
+
exports.getSystemThemeMode = getSystemThemeMode;
|
|
428
|
+
/**
|
|
429
|
+
* Follow `prefers-color-scheme` and apply the provided themes.
|
|
430
|
+
*
|
|
431
|
+
* This package does NOT ship a light theme preset; you supply both themes.
|
|
432
|
+
* Returns a cleanup function to remove the media query listener.
|
|
433
|
+
*/
|
|
434
|
+
const followSystemTheme = (themes, options = {}) => {
|
|
435
|
+
if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {
|
|
436
|
+
return () => { };
|
|
437
|
+
}
|
|
438
|
+
const media = window.matchMedia('(prefers-color-scheme: light)');
|
|
439
|
+
const apply = () => {
|
|
440
|
+
const mode = media.matches ? 'light' : 'dark';
|
|
441
|
+
const theme = mode === 'light' ? themes.light : themes.dark;
|
|
442
|
+
(0, exports.applyTheme)(theme, {
|
|
443
|
+
...options,
|
|
444
|
+
name: mode === 'light' ? (options.lightName ?? 'light') : (options.darkName ?? 'dark'),
|
|
445
|
+
colorScheme: mode
|
|
446
|
+
});
|
|
447
|
+
};
|
|
448
|
+
apply();
|
|
449
|
+
media.addEventListener('change', apply);
|
|
450
|
+
return () => media.removeEventListener('change', apply);
|
|
451
|
+
};
|
|
452
|
+
exports.followSystemTheme = followSystemTheme;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { type ThemeConfig } from "./tokens.cjs";
|
|
2
|
+
export * from "./presets.cjs";
|
|
3
|
+
export * from "./registry.cjs";
|
|
4
|
+
export * from "./tokens.cjs";
|
|
5
|
+
/**
|
|
6
|
+
* Create a CSS string from theme configuration
|
|
7
|
+
*
|
|
8
|
+
* @param config - Theme configuration object
|
|
9
|
+
* @param selector - CSS selector to apply variables to (default: ':root')
|
|
10
|
+
* @returns CSS string with variables
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const css = createTheme({
|
|
15
|
+
* colors: {
|
|
16
|
+
* blue: { 500: '#3b82f6' }
|
|
17
|
+
* }
|
|
18
|
+
* });
|
|
19
|
+
* // Returns: ':root { --color-blue-500: #3b82f6; }'
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare const createTheme: (config: ThemeConfig, selector?: string) => string;
|
|
23
|
+
/**
|
|
24
|
+
* Apply theme configuration to an element (default: document root)
|
|
25
|
+
*
|
|
26
|
+
* @param config - Theme configuration object
|
|
27
|
+
* @param element - Target element (default: document.documentElement)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* // Apply to document root
|
|
32
|
+
* defineTheme({
|
|
33
|
+
* colors: {
|
|
34
|
+
* blue: { 500: '#3b82f6' }
|
|
35
|
+
* }
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* // Apply to specific element
|
|
39
|
+
* defineTheme({ colors: { gray: { 900: '#111' } } }, myElement);
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare const defineTheme: (config: ThemeConfig, element?: HTMLElement | null) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Remove theme configuration from an element
|
|
45
|
+
*
|
|
46
|
+
* @param config - Theme configuration object (to know which variables to remove)
|
|
47
|
+
* @param element - Target element (default: document.documentElement)
|
|
48
|
+
*/
|
|
49
|
+
export declare const removeTheme: (config: ThemeConfig, element?: HTMLElement | null) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Get the current value of a CSS theme variable
|
|
52
|
+
*
|
|
53
|
+
* @param token - Variable name (with or without '--' prefix)
|
|
54
|
+
* @param element - Element to read from (default: document.documentElement)
|
|
55
|
+
* @returns The computed value or empty string if not found
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* const blue500 = getThemeValue('color-blue-500');
|
|
60
|
+
* const radius = getThemeValue('--radii-md');
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare const getThemeValue: (token: string, element?: HTMLElement | null) => string;
|
|
64
|
+
/**
|
|
65
|
+
* Set a single theme variable
|
|
66
|
+
*
|
|
67
|
+
* @param token - Variable name (with or without '--' prefix)
|
|
68
|
+
* @param value - Value to set
|
|
69
|
+
* @param element - Target element (default: document.documentElement)
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* setThemeValue('color-blue-500', '#3b82f6');
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare const setThemeValue: (token: string, value: string, element?: HTMLElement | null) => void;
|
|
77
|
+
export type SystemThemeMode = 'dark' | 'light';
|
|
78
|
+
/** Attribute used for CSS-based theme switching */
|
|
79
|
+
export declare const EASE_THEME_ATTRIBUTE = "data-ease-theme";
|
|
80
|
+
/**
|
|
81
|
+
* Merge a theme with the library defaults (dark baseline).
|
|
82
|
+
* Use this when you want to start from the built-in design tokens and override a few values.
|
|
83
|
+
*/
|
|
84
|
+
export declare const mergeTheme: (overrides?: ThemeConfig) => ThemeConfig;
|
|
85
|
+
/**
|
|
86
|
+
* Alias for `mergeTheme()`.
|
|
87
|
+
* This package ships a dark baseline theme; light/custom themes should be provided by the consumer.
|
|
88
|
+
*/
|
|
89
|
+
export declare const createDarkTheme: (overrides?: ThemeConfig) => ThemeConfig;
|
|
90
|
+
export interface SetThemeNameOptions {
|
|
91
|
+
/** Target element (defaults to `document.documentElement` in the browser). */
|
|
92
|
+
element?: HTMLElement | null;
|
|
93
|
+
/** Attribute name to set (defaults to `data-ease-theme`). */
|
|
94
|
+
attribute?: string;
|
|
95
|
+
/** Optional `color-scheme` value to set on the target element. */
|
|
96
|
+
colorScheme?: SystemThemeMode;
|
|
97
|
+
/** Set `element.style.colorScheme` (default: true when `colorScheme` is provided). */
|
|
98
|
+
setColorScheme?: boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Set the active theme name on an element via `[data-ease-theme="<name>"]`.
|
|
102
|
+
* Useful for CSS-scoped themes.
|
|
103
|
+
*/
|
|
104
|
+
export declare const setThemeName: (name: string, options?: SetThemeNameOptions) => void;
|
|
105
|
+
export declare const getThemeName: (element?: HTMLElement | null, attribute?: string) => string | null;
|
|
106
|
+
export interface ApplyThemeOptions {
|
|
107
|
+
/** Target element (defaults to `document.documentElement` in the browser). */
|
|
108
|
+
element?: HTMLElement | null;
|
|
109
|
+
/** Optional theme name to set as `[data-ease-theme="<name>"]`. */
|
|
110
|
+
name?: string;
|
|
111
|
+
/** Attribute name to use when `name` is provided. Defaults to `data-ease-theme`. */
|
|
112
|
+
attribute?: string;
|
|
113
|
+
/** Optional `color-scheme` value to set on the target element. */
|
|
114
|
+
colorScheme?: SystemThemeMode;
|
|
115
|
+
/** Set `[data-ease-theme]` when `name` is provided (default: true). */
|
|
116
|
+
setAttribute?: boolean;
|
|
117
|
+
/** Set `element.style.colorScheme` when `colorScheme` is provided (default: true). */
|
|
118
|
+
setColorScheme?: boolean;
|
|
119
|
+
/**
|
|
120
|
+
* If true, the provided theme is first merged with the library defaults via `mergeTheme()`.
|
|
121
|
+
* Use this when you only pass partial overrides.
|
|
122
|
+
*/
|
|
123
|
+
mergeWithDefaults?: boolean;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Apply a theme config (and optional theme name + color-scheme) to an element.
|
|
127
|
+
* This is SSR-safe: it becomes a no-op when `document` is not available.
|
|
128
|
+
*/
|
|
129
|
+
export declare const applyTheme: (theme: ThemeConfig, options?: ApplyThemeOptions) => ThemeConfig;
|
|
130
|
+
export declare const getSystemThemeMode: () => SystemThemeMode;
|
|
131
|
+
export interface FollowSystemThemeOptions extends Omit<ApplyThemeOptions, 'name' | 'colorScheme'> {
|
|
132
|
+
/** Theme name for dark mode (default: 'dark'). */
|
|
133
|
+
darkName?: string;
|
|
134
|
+
/** Theme name for light mode (default: 'light'). */
|
|
135
|
+
lightName?: string;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Follow `prefers-color-scheme` and apply the provided themes.
|
|
139
|
+
*
|
|
140
|
+
* This package does NOT ship a light theme preset; you supply both themes.
|
|
141
|
+
* Returns a cleanup function to remove the media query listener.
|
|
142
|
+
*/
|
|
143
|
+
export declare const followSystemTheme: (themes: {
|
|
144
|
+
dark: ThemeConfig;
|
|
145
|
+
light: ThemeConfig;
|
|
146
|
+
}, options?: FollowSystemThemeOptions) => (() => void);
|