@trebired/frontend 0.4.2 → 0.5.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.
Files changed (115) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +61 -1
  3. package/dist/config/index.d.ts +6 -45
  4. package/dist/config/index.d.ts.map +1 -1
  5. package/dist/config/index.js +19 -252
  6. package/dist/config/index.js.map +1 -1
  7. package/dist/config/module.d.ts +5 -0
  8. package/dist/config/module.d.ts.map +1 -0
  9. package/dist/config/module.js +124 -0
  10. package/dist/config/module.js.map +1 -0
  11. package/dist/config/normalize.d.ts +10 -0
  12. package/dist/config/normalize.d.ts.map +1 -0
  13. package/dist/config/normalize.js +105 -0
  14. package/dist/config/normalize.js.map +1 -0
  15. package/dist/config/scss.d.ts +4 -0
  16. package/dist/config/scss.d.ts.map +1 -0
  17. package/dist/config/scss.js +84 -0
  18. package/dist/config/scss.js.map +1 -0
  19. package/dist/config/shared.d.ts +9 -0
  20. package/dist/config/shared.d.ts.map +1 -0
  21. package/dist/config/shared.js +27 -0
  22. package/dist/config/shared.js.map +1 -0
  23. package/dist/config/theme.d.ts +6 -0
  24. package/dist/config/theme.d.ts.map +1 -0
  25. package/dist/config/theme.js +133 -0
  26. package/dist/config/theme.js.map +1 -0
  27. package/dist/config/types.d.ts +62 -0
  28. package/dist/config/types.d.ts.map +1 -0
  29. package/dist/config/types.js +2 -0
  30. package/dist/config/types.js.map +1 -0
  31. package/dist/src/config/index.d.ts +6 -45
  32. package/dist/src/config/index.d.ts.map +1 -1
  33. package/dist/src/config/index.js +19 -252
  34. package/dist/src/config/index.js.map +1 -1
  35. package/dist/src/config/module.d.ts +5 -0
  36. package/dist/src/config/module.d.ts.map +1 -0
  37. package/dist/src/config/module.js +124 -0
  38. package/dist/src/config/module.js.map +1 -0
  39. package/dist/src/config/normalize.d.ts +10 -0
  40. package/dist/src/config/normalize.d.ts.map +1 -0
  41. package/dist/src/config/normalize.js +105 -0
  42. package/dist/src/config/normalize.js.map +1 -0
  43. package/dist/src/config/scss.d.ts +4 -0
  44. package/dist/src/config/scss.d.ts.map +1 -0
  45. package/dist/src/config/scss.js +84 -0
  46. package/dist/src/config/scss.js.map +1 -0
  47. package/dist/src/config/shared.d.ts +9 -0
  48. package/dist/src/config/shared.d.ts.map +1 -0
  49. package/dist/src/config/shared.js +27 -0
  50. package/dist/src/config/shared.js.map +1 -0
  51. package/dist/src/config/theme.d.ts +6 -0
  52. package/dist/src/config/theme.d.ts.map +1 -0
  53. package/dist/src/config/theme.js +133 -0
  54. package/dist/src/config/theme.js.map +1 -0
  55. package/dist/src/config/types.d.ts +62 -0
  56. package/dist/src/config/types.d.ts.map +1 -0
  57. package/dist/src/config/types.js +2 -0
  58. package/dist/src/config/types.js.map +1 -0
  59. package/dist/src/theme/apply.d.ts +26 -0
  60. package/dist/src/theme/apply.d.ts.map +1 -0
  61. package/dist/src/theme/apply.js +85 -0
  62. package/dist/src/theme/apply.js.map +1 -0
  63. package/dist/src/theme/boot.d.ts +4 -0
  64. package/dist/src/theme/boot.d.ts.map +1 -0
  65. package/dist/src/theme/boot.js +23 -0
  66. package/dist/src/theme/boot.js.map +1 -0
  67. package/dist/src/theme/components/index.d.ts +13 -5
  68. package/dist/src/theme/components/index.d.ts.map +1 -1
  69. package/dist/src/theme/components/index.js +22 -6
  70. package/dist/src/theme/components/index.js.map +1 -1
  71. package/dist/src/theme/constants.d.ts +12 -0
  72. package/dist/src/theme/constants.d.ts.map +1 -0
  73. package/dist/src/theme/constants.js +12 -0
  74. package/dist/src/theme/constants.js.map +1 -0
  75. package/dist/src/theme/controls.d.ts +15 -0
  76. package/dist/src/theme/controls.d.ts.map +1 -0
  77. package/dist/src/theme/controls.js +128 -0
  78. package/dist/src/theme/controls.js.map +1 -0
  79. package/dist/src/theme/index.d.ts +10 -24
  80. package/dist/src/theme/index.d.ts.map +1 -1
  81. package/dist/src/theme/index.js +15 -117
  82. package/dist/src/theme/index.js.map +1 -1
  83. package/dist/src/theme/modes.d.ts +36 -0
  84. package/dist/src/theme/modes.d.ts.map +1 -0
  85. package/dist/src/theme/modes.js +107 -0
  86. package/dist/src/theme/modes.js.map +1 -0
  87. package/dist/theme/apply.d.ts +26 -0
  88. package/dist/theme/apply.d.ts.map +1 -0
  89. package/dist/theme/apply.js +85 -0
  90. package/dist/theme/apply.js.map +1 -0
  91. package/dist/theme/boot.d.ts +4 -0
  92. package/dist/theme/boot.d.ts.map +1 -0
  93. package/dist/theme/boot.js +23 -0
  94. package/dist/theme/boot.js.map +1 -0
  95. package/dist/theme/components/index.d.ts +13 -5
  96. package/dist/theme/components/index.d.ts.map +1 -1
  97. package/dist/theme/components/index.js +22 -6
  98. package/dist/theme/components/index.js.map +1 -1
  99. package/dist/theme/constants.d.ts +12 -0
  100. package/dist/theme/constants.d.ts.map +1 -0
  101. package/dist/theme/constants.js +12 -0
  102. package/dist/theme/constants.js.map +1 -0
  103. package/dist/theme/controls.d.ts +15 -0
  104. package/dist/theme/controls.d.ts.map +1 -0
  105. package/dist/theme/controls.js +128 -0
  106. package/dist/theme/controls.js.map +1 -0
  107. package/dist/theme/index.d.ts +10 -24
  108. package/dist/theme/index.d.ts.map +1 -1
  109. package/dist/theme/index.js +15 -117
  110. package/dist/theme/index.js.map +1 -1
  111. package/dist/theme/modes.d.ts +36 -0
  112. package/dist/theme/modes.d.ts.map +1 -0
  113. package/dist/theme/modes.js +107 -0
  114. package/dist/theme/modes.js.map +1 -0
  115. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ declare const THEME_ATTR = "data-tbf-theme";
2
+ declare const THEME_BOUND_ATTR = "data-tbf-theme-bound";
3
+ declare const THEME_CURRENT_ATTR = "data-tbf-theme-current";
4
+ declare const THEME_VALUE_ATTR = "data-tbf-theme-value";
5
+ declare const THEME_CHANGE_EVENT = "tbf:themechange";
6
+ declare const THEME_MODES_GLOBAL_KEY = "tbf.frontend.theme.modes";
7
+ declare const THEME_TOGGLE_SELECTOR = "[data-tbf-theme-button]";
8
+ declare const THEME_SELECT_SELECTOR = "[data-tbf-theme-select]";
9
+ declare const THEME_OPTION_SELECTOR = "[data-tbf-theme-value]";
10
+ declare const THEME_LABEL_SELECTOR = "[data-tbf-theme-label]";
11
+ export { THEME_ATTR, THEME_BOUND_ATTR, THEME_CHANGE_EVENT, THEME_CURRENT_ATTR, THEME_LABEL_SELECTOR, THEME_MODES_GLOBAL_KEY, THEME_OPTION_SELECTOR, THEME_SELECT_SELECTOR, THEME_TOGGLE_SELECTOR, THEME_VALUE_ATTR, };
12
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/theme/constants.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,UAAU,mBAAmB,CAAC;AACpC,QAAA,MAAM,gBAAgB,yBAAyB,CAAC;AAChD,QAAA,MAAM,kBAAkB,2BAA2B,CAAC;AACpD,QAAA,MAAM,gBAAgB,yBAAyB,CAAC;AAChD,QAAA,MAAM,kBAAkB,oBAAoB,CAAC;AAC7C,QAAA,MAAM,sBAAsB,6BAA6B,CAAC;AAC1D,QAAA,MAAM,qBAAqB,4BAA4B,CAAC;AACxD,QAAA,MAAM,qBAAqB,4BAA4B,CAAC;AACxD,QAAA,MAAM,qBAAqB,2BAA2B,CAAC;AACvD,QAAA,MAAM,oBAAoB,2BAA2B,CAAC;AAEtD,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ const THEME_ATTR = "data-tbf-theme";
2
+ const THEME_BOUND_ATTR = "data-tbf-theme-bound";
3
+ const THEME_CURRENT_ATTR = "data-tbf-theme-current";
4
+ const THEME_VALUE_ATTR = "data-tbf-theme-value";
5
+ const THEME_CHANGE_EVENT = "tbf:themechange";
6
+ const THEME_MODES_GLOBAL_KEY = "tbf.frontend.theme.modes";
7
+ const THEME_TOGGLE_SELECTOR = "[data-tbf-theme-button]";
8
+ const THEME_SELECT_SELECTOR = "[data-tbf-theme-select]";
9
+ const THEME_OPTION_SELECTOR = "[data-tbf-theme-value]";
10
+ const THEME_LABEL_SELECTOR = "[data-tbf-theme-label]";
11
+ export { THEME_ATTR, THEME_BOUND_ATTR, THEME_CHANGE_EVENT, THEME_CURRENT_ATTR, THEME_LABEL_SELECTOR, THEME_MODES_GLOBAL_KEY, THEME_OPTION_SELECTOR, THEME_SELECT_SELECTOR, THEME_TOGGLE_SELECTOR, THEME_VALUE_ATTR, };
12
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/theme/constants.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC;AACpC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAChD,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AACpD,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;AAChD,MAAM,kBAAkB,GAAG,iBAAiB,CAAC;AAC7C,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAC1D,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AACxD,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AACxD,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AACvD,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AAEtD,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type BindRoot } from "../../dom/index.d.ts";
2
+ import type { ThemeRuntimeOptions } from "./apply.js";
3
+ declare const THEME_ACTIVE_ATTR = "data-tbf-theme-active";
4
+ declare function syncThemeToggle(button: HTMLElement, options?: ThemeRuntimeOptions): void;
5
+ declare function syncThemeSelect(element: HTMLElement, options?: ThemeRuntimeOptions): void;
6
+ declare function syncThemeToggles(root?: BindRoot, options?: ThemeRuntimeOptions): void;
7
+ declare function syncThemeSelects(root?: BindRoot, options?: ThemeRuntimeOptions): void;
8
+ declare function syncThemeControls(root?: BindRoot, options?: ThemeRuntimeOptions): void;
9
+ declare function bindThemeToggle(button: HTMLElement | null, options?: ThemeRuntimeOptions): boolean;
10
+ declare function bindThemeSelect(element: HTMLElement | null, options?: ThemeRuntimeOptions): boolean;
11
+ declare function bindThemeToggles(root?: BindRoot, options?: ThemeRuntimeOptions): void;
12
+ declare function bindThemeSelects(root?: BindRoot, options?: ThemeRuntimeOptions): void;
13
+ declare function bindThemeControls(root?: BindRoot, options?: ThemeRuntimeOptions): void;
14
+ export { THEME_ACTIVE_ATTR, bindThemeControls, bindThemeSelect, bindThemeSelects, bindThemeToggle, bindThemeToggles, syncThemeControls, syncThemeSelect, syncThemeSelects, syncThemeToggle, syncThemeToggles, };
15
+ //# sourceMappingURL=controls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.d.ts","sourceRoot":"","sources":["../../../src/theme/controls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAWxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtD,QAAA,MAAM,iBAAiB,0BAA0B,CAAC;AAmBlD,iBAAS,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAarF;AAYD,iBAAS,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAUtF;AAED,iBAAS,gBAAgB,CAAC,IAAI,GAAE,QAAmB,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAE5F;AAED,iBAAS,gBAAgB,CAAC,IAAI,GAAE,QAAmB,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAE5F;AAED,iBAAS,iBAAiB,CAAC,IAAI,GAAE,QAAmB,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAG7F;AASD,iBAAS,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAS/F;AASD,iBAAS,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAahG;AAED,iBAAS,gBAAgB,CAAC,IAAI,GAAE,QAAmB,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAI5F;AAED,iBAAS,gBAAgB,CAAC,IAAI,GAAE,QAAmB,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAI5F;AAED,iBAAS,iBAAiB,CAAC,IAAI,GAAE,QAAmB,EAAE,OAAO,GAAE,mBAAwB,GAAG,IAAI,CAG7F;AAED,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,CAAC"}
@@ -0,0 +1,128 @@
1
+ import { queryAll } from "../../dom/index.js";
2
+ import { THEME_BOUND_ATTR, THEME_CURRENT_ATTR, THEME_LABEL_SELECTOR, THEME_OPTION_SELECTOR, THEME_SELECT_SELECTOR, THEME_TOGGLE_SELECTOR, THEME_VALUE_ATTR, } from "./constants.js";
3
+ import { getEffectiveTheme, nextTheme, registerThemeSync, setTheme } from "./apply.js";
4
+ import { configureThemeModes, findThemeMode, getThemeModes, hasThemeModeOptions, themeModeKeyOf } from "./modes.js";
5
+ const THEME_ACTIVE_ATTR = "data-tbf-theme-active";
6
+ let themeSyncRegistered = false;
7
+ function ensureThemeSync() {
8
+ if (themeSyncRegistered)
9
+ return;
10
+ themeSyncRegistered = true;
11
+ registerThemeSync((root) => syncThemeControls(root));
12
+ }
13
+ /* Controls sync against the registered modes, so a caller-supplied list has to become the registry. */
14
+ function adoptThemeModes(options) {
15
+ if (hasThemeModeOptions(options))
16
+ configureThemeModes(options);
17
+ }
18
+ function isTag(element, tagName) {
19
+ return element.tagName.toLowerCase() === tagName;
20
+ }
21
+ function syncThemeToggle(button, options = {}) {
22
+ const registry = getThemeModes(options);
23
+ const key = getEffectiveTheme(undefined, options);
24
+ const label = button.getAttribute(`data-tbf-theme-${key}-label`) || "";
25
+ if (registry.modes.length === 2) {
26
+ button.setAttribute("aria-pressed", key === registry.dark ? "true" : "false");
27
+ }
28
+ else {
29
+ button.removeAttribute("aria-pressed");
30
+ }
31
+ button.setAttribute(THEME_CURRENT_ATTR, key);
32
+ if (label)
33
+ button.setAttribute("aria-label", label);
34
+ const text = button.querySelector(THEME_LABEL_SELECTOR);
35
+ if (text)
36
+ text.textContent = label || findThemeMode(key, options)?.label || key;
37
+ }
38
+ function syncThemeOption(option, active) {
39
+ option.setAttribute(THEME_ACTIVE_ATTR, active ? "true" : "false");
40
+ if (isTag(option, "input")) {
41
+ option.checked = active;
42
+ return;
43
+ }
44
+ if (option.getAttribute("role") === "radio")
45
+ option.setAttribute("aria-checked", active ? "true" : "false");
46
+ else
47
+ option.setAttribute("aria-pressed", active ? "true" : "false");
48
+ }
49
+ function syncThemeSelect(element, options = {}) {
50
+ const key = getEffectiveTheme(undefined, options);
51
+ element.setAttribute(THEME_CURRENT_ATTR, key);
52
+ if (isTag(element, "select")) {
53
+ element.value = key;
54
+ return;
55
+ }
56
+ queryAll(element, THEME_OPTION_SELECTOR).forEach((option) => {
57
+ syncThemeOption(option, themeModeKeyOf(option.getAttribute(THEME_VALUE_ATTR)) === key);
58
+ });
59
+ }
60
+ function syncThemeToggles(root = document, options = {}) {
61
+ queryAll(root, THEME_TOGGLE_SELECTOR).forEach((button) => syncThemeToggle(button, options));
62
+ }
63
+ function syncThemeSelects(root = document, options = {}) {
64
+ queryAll(root, THEME_SELECT_SELECTOR).forEach((element) => syncThemeSelect(element, options));
65
+ }
66
+ function syncThemeControls(root = document, options = {}) {
67
+ syncThemeToggles(root, options);
68
+ syncThemeSelects(root, options);
69
+ }
70
+ function claimThemeControl(element) {
71
+ if (!(element instanceof HTMLElement) || element.hasAttribute(THEME_BOUND_ATTR))
72
+ return false;
73
+ ensureThemeSync();
74
+ element.setAttribute(THEME_BOUND_ATTR, "true");
75
+ return true;
76
+ }
77
+ function bindThemeToggle(button, options = {}) {
78
+ adoptThemeModes(options);
79
+ if (!claimThemeControl(button))
80
+ return false;
81
+ button.addEventListener("click", async (event) => {
82
+ event.preventDefault();
83
+ await setTheme(nextTheme(options), options);
84
+ });
85
+ syncThemeToggle(button, options);
86
+ return true;
87
+ }
88
+ function resolveOptionValue(element, event) {
89
+ if (isTag(element, "select"))
90
+ return element.value;
91
+ const target = event.target;
92
+ const option = target instanceof Element ? target.closest(THEME_OPTION_SELECTOR) : null;
93
+ return option ? option.getAttribute(THEME_VALUE_ATTR) || "" : "";
94
+ }
95
+ function bindThemeSelect(element, options = {}) {
96
+ adoptThemeModes(options);
97
+ if (!claimThemeControl(element))
98
+ return false;
99
+ const handle = async (event) => {
100
+ const value = resolveOptionValue(element, event);
101
+ if (!value)
102
+ return;
103
+ if (event.type === "click")
104
+ event.preventDefault();
105
+ await setTheme(value, options);
106
+ };
107
+ element.addEventListener("change", handle);
108
+ if (!isTag(element, "select"))
109
+ element.addEventListener("click", handle);
110
+ syncThemeSelect(element, options);
111
+ return true;
112
+ }
113
+ function bindThemeToggles(root = document, options = {}) {
114
+ queryAll(root, THEME_TOGGLE_SELECTOR).forEach((button) => {
115
+ bindThemeToggle(button, options);
116
+ });
117
+ }
118
+ function bindThemeSelects(root = document, options = {}) {
119
+ queryAll(root, THEME_SELECT_SELECTOR).forEach((element) => {
120
+ bindThemeSelect(element, options);
121
+ });
122
+ }
123
+ function bindThemeControls(root = document, options = {}) {
124
+ bindThemeToggles(root, options);
125
+ bindThemeSelects(root, options);
126
+ }
127
+ export { THEME_ACTIVE_ATTR, bindThemeControls, bindThemeSelect, bindThemeSelects, bindThemeToggle, bindThemeToggles, syncThemeControls, syncThemeSelect, syncThemeSelects, syncThemeToggle, syncThemeToggles, };
128
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../../src/theme/controls.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,12 @@
1
- import { type BindRoot } from "../../dom/index.d.ts";
2
- type ThemeValue = "dark" | "light" | "";
3
- type ThemePersistenceAdapter = {
4
- get?: () => Promise<string | null | undefined> | string | null | undefined;
5
- set?: (theme: ThemeValue) => Promise<unknown> | unknown;
6
- };
7
- type ThemeRuntimeOptions = {
8
- defaultTheme?: ThemeValue;
9
- persistence?: ThemePersistenceAdapter;
10
- };
11
- declare const THEME_TOGGLE_SELECTOR = "[data-tbf-theme-button]";
12
- declare const THEME_ATTR = "data-tbf-theme";
13
- declare function normalizeTheme(value: unknown): ThemeValue;
14
- declare function systemThemeKey(): Exclude<ThemeValue, "">;
15
- declare function currentDomTheme(): ThemeValue;
16
- declare function getEffectiveTheme(value?: unknown): Exclude<ThemeValue, "">;
17
- declare function applyTheme(theme: ThemeValue): "dark" | "light";
18
- declare function setTheme(theme: ThemeValue, options?: ThemeRuntimeOptions): Promise<"dark" | "light">;
19
- declare function syncThemeToggles(root?: BindRoot): void;
20
- declare function bindThemeToggle(button: HTMLElement | null, options?: ThemeRuntimeOptions): boolean;
21
- declare function bindThemeToggles(root?: BindRoot, options?: ThemeRuntimeOptions): void;
1
+ import type { BindRoot } from "../../dom/index.d.ts";
2
+ import type { ThemeRuntimeOptions } from "./apply.js";
22
3
  declare function bindThemeRuntime(root?: BindRoot, options?: ThemeRuntimeOptions): Promise<void>;
23
- declare function createThemeBootScript(theme?: ThemeValue): string;
24
- export { THEME_ATTR, THEME_TOGGLE_SELECTOR, applyTheme, bindThemeRuntime, bindThemeToggle, bindThemeToggles, createThemeBootScript, currentDomTheme, getEffectiveTheme, normalizeTheme, setTheme, syncThemeToggles, systemThemeKey, };
25
- export type { ThemePersistenceAdapter, ThemeRuntimeOptions, ThemeValue };
4
+ export { THEME_ATTR, THEME_CHANGE_EVENT, THEME_CURRENT_ATTR, THEME_OPTION_SELECTOR, THEME_SELECT_SELECTOR, THEME_TOGGLE_SELECTOR, THEME_VALUE_ATTR, } from "./constants.js";
5
+ export { DEFAULT_THEME_MODE_KEYS, DEFAULT_THEME_MODE_REGISTRY, configureThemeModes, findThemeMode, getThemeModes, hasThemeModeOptions, isThemeMode, normalizeThemeMode, normalizeThemeModeRegistry, themeModeKeys, } from "./modes.js";
6
+ export { applyTheme, currentDomTheme, getEffectiveTheme, nextTheme, normalizeTheme, registerThemeSync, setTheme, systemThemeKey, themeScheme, } from "./apply.js";
7
+ export { bindThemeControls, bindThemeSelect, bindThemeSelects, bindThemeToggle, bindThemeToggles, syncThemeControls, syncThemeSelect, syncThemeSelects, syncThemeToggle, syncThemeToggles, } from "./controls.js";
8
+ export { createThemeBootScript } from "./boot.js";
9
+ export { bindThemeRuntime };
10
+ export type { ThemeMode, ThemeModeDescriptor, ThemeModeInput, ThemeModeOptions, ThemeModeRegistry, ThemeModeScheme, } from "./modes.js";
11
+ export type { ThemePersistenceAdapter, ThemeRuntimeOptions, ThemeValue } from "./apply.js";
26
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAExD,KAAK,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,CAAC;AACxC,KAAK,uBAAuB,GAAG;IAC7B,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3E,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACzD,CAAC;AACF,KAAK,mBAAmB,GAAG;IACzB,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC;AAEF,QAAA,MAAM,qBAAqB,4BAA4B,CAAC;AACxD,QAAA,MAAM,UAAU,mBAAmB,CAAC;AAEpC,iBAAS,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAGlD;AAED,iBAAS,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAQjD;AAED,iBAAS,eAAe,eAGvB;AAED,iBAAS,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAEnE;AAWD,iBAAS,UAAU,CAAC,KAAK,EAAE,UAAU,oBAWpC;AAWD,iBAAe,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,6BAS3E;AAeD,iBAAS,gBAAgB,CAAC,IAAI,GAAE,QAAmB,QAElD;AAED,iBAAS,eAAe,CACtB,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,GAAE,mBAAwB,WAYlC;AAED,iBAAS,gBAAgB,CAAC,IAAI,GAAE,QAAmB,EAAE,OAAO,GAAE,mBAAwB,QAIrF;AAED,iBAAe,gBAAgB,CAAC,IAAI,GAAE,QAAmB,EAAE,OAAO,GAAE,mBAAwB,iBAI3F;AAED,iBAAS,qBAAqB,CAAC,KAAK,GAAE,UAAe,UAWpD;AAED,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,cAAc,GACf,CAAC;AACF,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAItD,iBAAe,gBAAgB,CAC7B,IAAI,GAAE,QAAmB,EACzB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAKf;AAED,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAC5B,YAAY,EACV,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
@@ -1,119 +1,17 @@
1
- import { queryAll } from "../../dom/index.js";
2
- const THEME_TOGGLE_SELECTOR = "[data-tbf-theme-button]";
3
- const THEME_ATTR = "data-tbf-theme";
4
- function normalizeTheme(value) {
5
- const text = String(value || "").trim().toLowerCase();
6
- return text === "dark" || text === "light" ? text : "";
7
- }
8
- function systemThemeKey() {
9
- try {
10
- return window.matchMedia?.("(prefers-color-scheme: light)").matches
11
- ? "light"
12
- : "dark";
13
- }
14
- catch {
15
- return "dark";
16
- }
17
- }
18
- function currentDomTheme() {
19
- if (typeof document === "undefined")
20
- return "";
21
- return normalizeTheme(document.documentElement.getAttribute(THEME_ATTR));
22
- }
23
- function getEffectiveTheme(value) {
24
- return normalizeTheme(value) || currentDomTheme() || systemThemeKey();
25
- }
26
- function dispatchThemeChange(theme, themeKey) {
27
- if (typeof window === "undefined")
28
- return;
29
- window.dispatchEvent(new CustomEvent("tbf:themechange", {
30
- detail: { theme, themeKey },
31
- }));
32
- }
33
- function applyTheme(theme) {
34
- if (typeof document === "undefined")
35
- return getEffectiveTheme(theme);
36
- const normalized = normalizeTheme(theme);
37
- const next = normalized || systemThemeKey();
38
- const previous = currentDomTheme();
39
- document.documentElement.setAttribute(THEME_ATTR, next);
40
- document.documentElement.style.colorScheme = next;
41
- document.body?.setAttribute(THEME_ATTR, next);
42
- if (previous !== next)
43
- dispatchThemeChange(normalized, next);
44
- syncThemeToggles(document);
45
- return next;
46
- }
47
- async function readPersistedTheme(adapter) {
48
- if (!adapter?.get)
49
- return "";
50
- try {
51
- return normalizeTheme(await adapter.get());
52
- }
53
- catch {
54
- return "";
55
- }
56
- }
57
- async function setTheme(theme, options = {}) {
58
- const normalized = normalizeTheme(theme);
59
- applyTheme(normalized);
60
- if (options.persistence?.set) {
61
- try {
62
- await options.persistence.set(normalized);
63
- }
64
- catch { }
65
- }
66
- return getEffectiveTheme(normalized);
67
- }
68
- function nextTheme() {
69
- return getEffectiveTheme() === "light" ? "dark" : "light";
70
- }
71
- function syncThemeToggle(button) {
72
- const theme = getEffectiveTheme();
73
- button.setAttribute("aria-pressed", theme === "dark" ? "true" : "false");
74
- const label = button.getAttribute(`data-tbf-theme-${theme}-label`);
75
- if (label)
76
- button.setAttribute("aria-label", label);
77
- const text = button.querySelector("[data-tbf-theme-label]");
78
- if (text)
79
- text.textContent = label || theme;
80
- }
81
- function syncThemeToggles(root = document) {
82
- queryAll(root, THEME_TOGGLE_SELECTOR).forEach(syncThemeToggle);
83
- }
84
- function bindThemeToggle(button, options = {}) {
85
- if (!(button instanceof HTMLElement) || button.hasAttribute("data-tbf-theme-bound")) {
86
- return false;
87
- }
88
- button.setAttribute("data-tbf-theme-bound", "true");
89
- button.addEventListener("click", async (event) => {
90
- event.preventDefault();
91
- await setTheme(nextTheme(), options);
92
- });
93
- syncThemeToggle(button);
94
- return true;
95
- }
96
- function bindThemeToggles(root = document, options = {}) {
97
- queryAll(root, THEME_TOGGLE_SELECTOR).forEach((button) => {
98
- bindThemeToggle(button, options);
99
- });
100
- }
1
+ import { applyTheme, normalizeTheme, readPersistedTheme } from "./apply.js";
2
+ import { bindThemeControls } from "./controls.js";
3
+ import { configureThemeModes, hasThemeModeOptions } from "./modes.js";
101
4
  async function bindThemeRuntime(root = document, options = {}) {
102
- const persisted = await readPersistedTheme(options.persistence);
103
- applyTheme(persisted || normalizeTheme(options.defaultTheme));
104
- bindThemeToggles(root, options);
105
- }
106
- function createThemeBootScript(theme = "") {
107
- return [
108
- "(function(){",
109
- "function n(v){v=String(v||'').trim().toLowerCase();return v==='dark'||v==='light'?v:''}",
110
- "function s(){try{return window.matchMedia&&window.matchMedia('(prefers-color-scheme: light)').matches?'light':'dark'}catch{return 'dark'}}",
111
- `var t=n(${JSON.stringify(theme)});`,
112
- "var k=t||s();",
113
- "document.documentElement.setAttribute('data-tbf-theme',k);",
114
- "document.documentElement.style.colorScheme=k;",
115
- "})();",
116
- ].join("");
117
- }
118
- export { THEME_ATTR, THEME_TOGGLE_SELECTOR, applyTheme, bindThemeRuntime, bindThemeToggle, bindThemeToggles, createThemeBootScript, currentDomTheme, getEffectiveTheme, normalizeTheme, setTheme, syncThemeToggles, systemThemeKey, };
5
+ if (hasThemeModeOptions(options))
6
+ configureThemeModes(options);
7
+ const persisted = await readPersistedTheme(options.persistence, options);
8
+ applyTheme(persisted || normalizeTheme(options.defaultTheme, options), options);
9
+ bindThemeControls(root, options);
10
+ }
11
+ export { THEME_ATTR, THEME_CHANGE_EVENT, THEME_CURRENT_ATTR, THEME_OPTION_SELECTOR, THEME_SELECT_SELECTOR, THEME_TOGGLE_SELECTOR, THEME_VALUE_ATTR, } from "./constants.js";
12
+ export { DEFAULT_THEME_MODE_KEYS, DEFAULT_THEME_MODE_REGISTRY, configureThemeModes, findThemeMode, getThemeModes, hasThemeModeOptions, isThemeMode, normalizeThemeMode, normalizeThemeModeRegistry, themeModeKeys, } from "./modes.js";
13
+ export { applyTheme, currentDomTheme, getEffectiveTheme, nextTheme, normalizeTheme, registerThemeSync, setTheme, systemThemeKey, themeScheme, } from "./apply.js";
14
+ export { bindThemeControls, bindThemeSelect, bindThemeSelects, bindThemeToggle, bindThemeToggles, syncThemeControls, syncThemeSelect, syncThemeSelects, syncThemeToggle, syncThemeToggles, } from "./controls.js";
15
+ export { createThemeBootScript } from "./boot.js";
16
+ export { bindThemeRuntime };
119
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtE,KAAK,UAAU,gBAAgB,CAC7B,OAAiB,QAAQ,EACzB,UAA+B,EAAE;IAEjC,IAAI,mBAAmB,CAAC,OAAO,CAAC;QAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACzE,UAAU,CAAC,SAAS,IAAI,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAChF,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,0BAA0B,EAC1B,aAAa,GACd,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ type ThemeModeScheme = "dark" | "light";
2
+ type ThemeModeDescriptor = {
3
+ key: string;
4
+ label?: string;
5
+ scheme?: ThemeModeScheme;
6
+ };
7
+ type ThemeModeInput = string | ThemeModeDescriptor;
8
+ type ThemeMode = {
9
+ key: string;
10
+ label: string;
11
+ scheme: ThemeModeScheme;
12
+ };
13
+ type ThemeModeOptions = {
14
+ dark?: string;
15
+ light?: string;
16
+ modes?: readonly ThemeModeInput[];
17
+ };
18
+ type ThemeModeRegistry = {
19
+ dark: string;
20
+ light: string;
21
+ modes: readonly ThemeMode[];
22
+ };
23
+ declare const DEFAULT_THEME_MODE_KEYS: readonly string[];
24
+ declare function themeModeKeyOf(value: unknown): string;
25
+ declare function normalizeThemeMode(input: ThemeModeInput): ThemeMode | null;
26
+ declare function normalizeThemeModeRegistry(options?: ThemeModeOptions): ThemeModeRegistry;
27
+ declare const DEFAULT_THEME_MODE_REGISTRY: ThemeModeRegistry;
28
+ declare function configureThemeModes(options?: ThemeModeOptions | null): ThemeModeRegistry;
29
+ declare function hasThemeModeOptions(options?: ThemeModeOptions): boolean;
30
+ declare function getThemeModes(options?: ThemeModeOptions): ThemeModeRegistry;
31
+ declare function themeModeKeys(options?: ThemeModeOptions): string[];
32
+ declare function findThemeMode(key: unknown, options?: ThemeModeOptions): ThemeMode | undefined;
33
+ declare function isThemeMode(key: unknown, options?: ThemeModeOptions): boolean;
34
+ export { DEFAULT_THEME_MODE_KEYS, DEFAULT_THEME_MODE_REGISTRY, configureThemeModes, findThemeMode, getThemeModes, hasThemeModeOptions, isThemeMode, normalizeThemeMode, normalizeThemeModeRegistry, themeModeKeyOf, themeModeKeys, };
35
+ export type { ThemeMode, ThemeModeDescriptor, ThemeModeInput, ThemeModeOptions, ThemeModeRegistry, ThemeModeScheme, };
36
+ //# sourceMappingURL=modes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.d.ts","sourceRoot":"","sources":["../../../src/theme/modes.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG,MAAM,GAAG,OAAO,CAAC;AAExC,KAAK,mBAAmB,GAAG;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAEnD,KAAK,SAAS,GAAG;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACnC,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CAC7B,CAAC;AAEF,QAAA,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAAsB,CAAC;AAQrE,iBAAS,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAG9C;AAeD,iBAAS,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,GAAG,IAAI,CASnE;AAkBD,iBAAS,0BAA0B,CAAC,OAAO,GAAE,gBAAqB,GAAG,iBAAiB,CAOrF;AAED,QAAA,MAAM,2BAA2B,EAAE,iBAAgD,CAAC;AAYpF,iBAAS,mBAAmB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,GAAG,iBAAiB,CAajF;AAED,iBAAS,mBAAmB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAEpE;AAED,iBAAS,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,iBAAiB,CAGxE;AAED,iBAAS,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,EAAE,CAE/D;AAED,iBAAS,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,SAAS,GAAG,SAAS,CAK1F;AAED,iBAAS,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAE1E;AAED,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,0BAA0B,EAC1B,cAAc,EACd,aAAa,GACd,CAAC;AACF,YAAY,EACV,SAAS,EACT,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,CAAC"}
@@ -0,0 +1,107 @@
1
+ import { THEME_MODES_GLOBAL_KEY } from "./constants.js";
2
+ const DEFAULT_THEME_MODE_KEYS = ["dark", "light"];
3
+ const THEME_MODE_KEY_RE = /^[a-z0-9][a-z0-9_-]*$/u;
4
+ const DARK_KEY_RE = /(^|[-_])dark([-_]|$)/u;
5
+ const registryHolderKey = Symbol.for(THEME_MODES_GLOBAL_KEY);
6
+ let cachedSource = null;
7
+ let cachedRegistry = null;
8
+ function themeModeKeyOf(value) {
9
+ const text = String(value ?? "").trim().toLowerCase();
10
+ return THEME_MODE_KEY_RE.test(text) ? text : "";
11
+ }
12
+ function themeModeLabelOf(key, label) {
13
+ const text = String(label ?? "").trim();
14
+ if (text)
15
+ return text;
16
+ const words = key.replace(/[-_]+/gu, " ").trim();
17
+ return words.charAt(0).toUpperCase() + words.slice(1);
18
+ }
19
+ function themeModeSchemeOf(key, scheme) {
20
+ const text = String(scheme ?? "").trim().toLowerCase();
21
+ if (text === "dark" || text === "light")
22
+ return text;
23
+ return DARK_KEY_RE.test(key) ? "dark" : "light";
24
+ }
25
+ function normalizeThemeMode(input) {
26
+ const source = typeof input === "string" ? { key: input } : input;
27
+ const key = themeModeKeyOf(source?.key);
28
+ if (!key)
29
+ return null;
30
+ return {
31
+ key,
32
+ label: themeModeLabelOf(key, source?.label),
33
+ scheme: themeModeSchemeOf(key, source?.scheme),
34
+ };
35
+ }
36
+ function normalizeThemeModes(inputs) {
37
+ const source = Array.isArray(inputs) && inputs.length ? inputs : DEFAULT_THEME_MODE_KEYS;
38
+ const modes = [];
39
+ for (const input of source) {
40
+ const mode = normalizeThemeMode(input);
41
+ if (mode && !modes.some((item) => item.key === mode.key))
42
+ modes.push(mode);
43
+ }
44
+ return modes.length ? modes : normalizeThemeModes(DEFAULT_THEME_MODE_KEYS);
45
+ }
46
+ function resolveSchemeKey(modes, requested, scheme) {
47
+ const key = themeModeKeyOf(requested);
48
+ if (key && modes.some((mode) => mode.key === key))
49
+ return key;
50
+ return (modes.find((mode) => mode.scheme === scheme) || modes[0]).key;
51
+ }
52
+ function normalizeThemeModeRegistry(options = {}) {
53
+ const modes = normalizeThemeModes(options.modes);
54
+ return {
55
+ dark: resolveSchemeKey(modes, options.dark, "dark"),
56
+ light: resolveSchemeKey(modes, options.light, "light"),
57
+ modes,
58
+ };
59
+ }
60
+ const DEFAULT_THEME_MODE_REGISTRY = normalizeThemeModeRegistry();
61
+ function readRegistryHolder() {
62
+ const holder = globalThis;
63
+ const source = holder[registryHolderKey];
64
+ if (!source || typeof source !== "object")
65
+ return null;
66
+ if (source === cachedSource && cachedRegistry)
67
+ return cachedRegistry;
68
+ cachedSource = source;
69
+ cachedRegistry = normalizeThemeModeRegistry(source);
70
+ return cachedRegistry;
71
+ }
72
+ function configureThemeModes(options) {
73
+ const holder = globalThis;
74
+ if (!options) {
75
+ delete holder[registryHolderKey];
76
+ cachedSource = null;
77
+ cachedRegistry = null;
78
+ return DEFAULT_THEME_MODE_REGISTRY;
79
+ }
80
+ const registry = normalizeThemeModeRegistry(options);
81
+ holder[registryHolderKey] = registry;
82
+ cachedSource = registry;
83
+ cachedRegistry = registry;
84
+ return registry;
85
+ }
86
+ function hasThemeModeOptions(options = {}) {
87
+ return Boolean(options.modes?.length || options.dark || options.light);
88
+ }
89
+ function getThemeModes(options = {}) {
90
+ if (hasThemeModeOptions(options))
91
+ return normalizeThemeModeRegistry(options);
92
+ return readRegistryHolder() || DEFAULT_THEME_MODE_REGISTRY;
93
+ }
94
+ function themeModeKeys(options = {}) {
95
+ return getThemeModes(options).modes.map((mode) => mode.key);
96
+ }
97
+ function findThemeMode(key, options = {}) {
98
+ const normalized = themeModeKeyOf(key);
99
+ return normalized
100
+ ? getThemeModes(options).modes.find((mode) => mode.key === normalized)
101
+ : undefined;
102
+ }
103
+ function isThemeMode(key, options = {}) {
104
+ return findThemeMode(key, options) !== undefined;
105
+ }
106
+ export { DEFAULT_THEME_MODE_KEYS, DEFAULT_THEME_MODE_REGISTRY, configureThemeModes, findThemeMode, getThemeModes, hasThemeModeOptions, isThemeMode, normalizeThemeMode, normalizeThemeModeRegistry, themeModeKeyOf, themeModeKeys, };
107
+ //# sourceMappingURL=modes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modes.js","sourceRoot":"","sources":["../../../src/theme/modes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { BindRoot } from "../dom/index.d.ts";
2
+ import type { ThemeModeOptions, ThemeModeScheme } from "./modes.js";
3
+ type ThemeValue = string;
4
+ type ThemePersistenceAdapter = {
5
+ get?: () => Promise<string | null | undefined> | string | null | undefined;
6
+ set?: (theme: ThemeValue) => Promise<unknown> | unknown;
7
+ };
8
+ type ThemeRuntimeOptions = ThemeModeOptions & {
9
+ defaultTheme?: ThemeValue;
10
+ persistence?: ThemePersistenceAdapter;
11
+ };
12
+ type ThemeSyncListener = (root: BindRoot) => void;
13
+ declare function registerThemeSync(listener: ThemeSyncListener): void;
14
+ declare function runThemeSync(root?: BindRoot): void;
15
+ declare function normalizeTheme(value: unknown, options?: ThemeRuntimeOptions): ThemeValue;
16
+ declare function systemThemeKey(options?: ThemeRuntimeOptions): ThemeValue;
17
+ declare function currentDomTheme(options?: ThemeRuntimeOptions): ThemeValue;
18
+ declare function getEffectiveTheme(value?: unknown, options?: ThemeRuntimeOptions): ThemeValue;
19
+ declare function themeScheme(key: unknown, options?: ThemeRuntimeOptions): ThemeModeScheme;
20
+ declare function applyTheme(theme: ThemeValue, options?: ThemeRuntimeOptions): ThemeValue;
21
+ declare function readPersistedTheme(adapter?: ThemePersistenceAdapter, options?: ThemeRuntimeOptions): Promise<ThemeValue>;
22
+ declare function setTheme(theme: ThemeValue, options?: ThemeRuntimeOptions): Promise<ThemeValue>;
23
+ declare function nextTheme(options?: ThemeRuntimeOptions): ThemeValue;
24
+ export { applyTheme, currentDomTheme, getEffectiveTheme, nextTheme, normalizeTheme, readPersistedTheme, registerThemeSync, runThemeSync, setTheme, systemThemeKey, themeScheme, };
25
+ export type { ThemePersistenceAdapter, ThemeRuntimeOptions, ThemeSyncListener, ThemeValue };
26
+ //# sourceMappingURL=apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/theme/apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpE,KAAK,UAAU,GAAG,MAAM,CAAC;AAEzB,KAAK,uBAAuB,GAAG;IAC7B,GAAG,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3E,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CACzD,CAAC;AAEF,KAAK,mBAAmB,GAAG,gBAAgB,GAAG;IAC5C,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC,CAAC;AAEF,KAAK,iBAAiB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;AAIlD,iBAAS,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAE5D;AAED,iBAAS,YAAY,CAAC,IAAI,GAAE,QAAmB,GAAG,IAAI,CAErD;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAGrF;AAUD,iBAAS,cAAc,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAGrE;AAED,iBAAS,eAAe,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAGtE;AAED,iBAAS,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAEzF;AAED,iBAAS,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,mBAAwB,GAAG,eAAe,CAErF;AAWD,iBAAS,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAWpF;AAED,iBAAe,kBAAkB,CAC/B,OAAO,CAAC,EAAE,uBAAuB,EACjC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED,iBAAe,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,UAAU,CAAC,CASjG;AAED,iBAAS,SAAS,CAAC,OAAO,GAAE,mBAAwB,GAAG,UAAU,CAIhE;AAED,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,CAAC;AACF,YAAY,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC"}