@umbra.ui/core 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.
Files changed (272) hide show
  1. package/dist/components/controls/Dropdown/types.d.ts +5 -0
  2. package/dist/components/controls/Dropdown/types.d.ts.map +1 -0
  3. package/dist/components/controls/Dropdown/types.js +1 -0
  4. package/dist/components/controls/SegmentedControl/types.d.ts +6 -0
  5. package/dist/components/controls/SegmentedControl/types.d.ts.map +1 -0
  6. package/dist/components/controls/SegmentedControl/types.js +1 -0
  7. package/dist/components/dialogs/Alert/types.d.ts +7 -0
  8. package/dist/components/dialogs/Alert/types.d.ts.map +1 -0
  9. package/dist/components/dialogs/Alert/types.js +1 -0
  10. package/dist/components/dialogs/Toast/types.d.ts +34 -0
  11. package/dist/components/dialogs/Toast/types.d.ts.map +1 -0
  12. package/dist/components/dialogs/Toast/types.js +10 -0
  13. package/dist/components/dialogs/Toast/useToast.d.ts +36 -0
  14. package/dist/components/dialogs/Toast/useToast.d.ts.map +1 -0
  15. package/dist/components/dialogs/Toast/useToast.js +90 -0
  16. package/dist/components/indicators/Tooltip/tooltip.d.ts +3 -0
  17. package/dist/components/indicators/Tooltip/tooltip.d.ts.map +1 -0
  18. package/dist/components/indicators/Tooltip/tooltip.js +33 -0
  19. package/dist/components/indicators/Tooltip/types.d.ts +14 -0
  20. package/dist/components/indicators/Tooltip/types.d.ts.map +1 -0
  21. package/dist/components/indicators/Tooltip/types.js +1 -0
  22. package/dist/components/indicators/Tooltip/useTooltip.d.ts +18 -0
  23. package/dist/components/indicators/Tooltip/useTooltip.d.ts.map +1 -0
  24. package/dist/components/indicators/Tooltip/useTooltip.js +57 -0
  25. package/dist/components/inputs/Tags/tag-bar-styles.d.ts +14 -0
  26. package/dist/components/inputs/Tags/tag-bar-styles.d.ts.map +1 -0
  27. package/dist/components/inputs/Tags/tag-bar-styles.js +313 -0
  28. package/dist/components/inputs/Tags/types.d.ts +93 -0
  29. package/dist/components/inputs/Tags/types.d.ts.map +1 -0
  30. package/dist/components/inputs/Tags/types.js +216 -0
  31. package/dist/components/inputs/search/types.d.ts +9 -0
  32. package/dist/components/inputs/search/types.d.ts.map +1 -0
  33. package/dist/components/inputs/search/types.js +1 -0
  34. package/dist/components/navigation/adaptive/types.d.ts +16 -0
  35. package/dist/components/navigation/adaptive/types.d.ts.map +1 -0
  36. package/dist/components/navigation/adaptive/types.js +1 -0
  37. package/dist/components/navigation/adaptive/useAdaptiveLayout.d.ts +27 -0
  38. package/dist/components/navigation/adaptive/useAdaptiveLayout.d.ts.map +1 -0
  39. package/dist/components/navigation/adaptive/useAdaptiveLayout.js +40 -0
  40. package/dist/components/navigation/adaptive/useBreakpoints.d.ts +6 -0
  41. package/dist/components/navigation/adaptive/useBreakpoints.d.ts.map +1 -0
  42. package/dist/components/navigation/adaptive/useBreakpoints.js +37 -0
  43. package/dist/components/navigation/adaptive/useContainerMonitor.d.ts +93 -0
  44. package/dist/components/navigation/adaptive/useContainerMonitor.d.ts.map +1 -0
  45. package/dist/components/navigation/adaptive/useContainerMonitor.js +145 -0
  46. package/dist/components/navigation/adaptive/useViewAnimation.d.ts +31 -0
  47. package/dist/components/navigation/adaptive/useViewAnimation.d.ts.map +1 -0
  48. package/dist/components/navigation/adaptive/useViewAnimation.js +591 -0
  49. package/dist/components/navigation/adaptive/useViewResize.d.ts +52 -0
  50. package/dist/components/navigation/adaptive/useViewResize.d.ts.map +1 -0
  51. package/dist/components/navigation/adaptive/useViewResize.js +146 -0
  52. package/dist/components/navigation/navstack/useNavigationStack.d.ts +25 -0
  53. package/dist/components/navigation/navstack/useNavigationStack.d.ts.map +1 -0
  54. package/dist/components/navigation/navstack/useNavigationStack.js +133 -0
  55. package/dist/components/navigation/slideover/useSlideoverController.d.ts +20 -0
  56. package/dist/components/navigation/slideover/useSlideoverController.d.ts.map +1 -0
  57. package/dist/components/navigation/slideover/useSlideoverController.js +267 -0
  58. package/dist/components/navigation/splitview/useSplitViewController.d.ts +20 -0
  59. package/dist/components/navigation/splitview/useSplitViewController.d.ts.map +1 -0
  60. package/dist/components/navigation/splitview/useSplitViewController.js +325 -0
  61. package/dist/components/navigation/tabcontroller/types.d.ts +21 -0
  62. package/dist/components/navigation/tabcontroller/types.d.ts.map +1 -0
  63. package/dist/components/navigation/tabcontroller/types.js +1 -0
  64. package/dist/components/navigation/tabcontroller/useTabController.d.ts +5 -0
  65. package/dist/components/navigation/tabcontroller/useTabController.d.ts.map +1 -0
  66. package/dist/components/navigation/tabcontroller/useTabController.js +10 -0
  67. package/dist/components/navigation/types.d.ts +8 -0
  68. package/dist/components/navigation/types.d.ts.map +1 -0
  69. package/dist/components/navigation/types.js +1 -0
  70. package/dist/components/pickers/CollectionPicker/types.d.ts +11 -0
  71. package/dist/components/pickers/CollectionPicker/types.d.ts.map +1 -0
  72. package/dist/components/pickers/CollectionPicker/types.js +1 -0
  73. package/dist/components/pickers/ColorPicker/colors.d.ts +13 -0
  74. package/dist/components/pickers/ColorPicker/colors.d.ts.map +1 -0
  75. package/dist/components/pickers/ColorPicker/colors.js +266 -0
  76. package/dist/components/pickers/FilePicker/types.d.ts +10 -0
  77. package/dist/components/pickers/FilePicker/types.d.ts.map +1 -0
  78. package/dist/components/pickers/FilePicker/types.js +1 -0
  79. package/dist/index.d.ts +91 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +196 -0
  82. package/dist/theme.d.ts +73 -0
  83. package/dist/theme.d.ts.map +1 -0
  84. package/dist/theme.js +279 -0
  85. package/dist/themes/blank.d.ts +7 -0
  86. package/dist/themes/blank.d.ts.map +1 -0
  87. package/dist/themes/blank.js +543 -0
  88. package/dist/themes/crimson-dark.d.ts +4 -0
  89. package/dist/themes/crimson-dark.d.ts.map +1 -0
  90. package/dist/themes/crimson-dark.js +552 -0
  91. package/dist/themes/cyan-light.d.ts +4 -0
  92. package/dist/themes/cyan-light.d.ts.map +1 -0
  93. package/dist/themes/cyan-light.js +552 -0
  94. package/dist/themes/dark.d.ts +4 -0
  95. package/dist/themes/dark.d.ts.map +1 -0
  96. package/dist/themes/dark.js +551 -0
  97. package/dist/themes/gold-dark.d.ts +4 -0
  98. package/dist/themes/gold-dark.d.ts.map +1 -0
  99. package/dist/themes/gold-dark.js +552 -0
  100. package/dist/themes/grass-dark.d.ts +4 -0
  101. package/dist/themes/grass-dark.d.ts.map +1 -0
  102. package/dist/themes/grass-dark.js +552 -0
  103. package/dist/themes/indigo.d.ts +4 -0
  104. package/dist/themes/indigo.d.ts.map +1 -0
  105. package/dist/themes/indigo.js +552 -0
  106. package/dist/themes/light.d.ts +4 -0
  107. package/dist/themes/light.d.ts.map +1 -0
  108. package/dist/themes/light.js +551 -0
  109. package/dist/themes/orange-dark.d.ts +4 -0
  110. package/dist/themes/orange-dark.d.ts.map +1 -0
  111. package/dist/themes/orange-dark.js +551 -0
  112. package/dist/themes/orange-light.d.ts +4 -0
  113. package/dist/themes/orange-light.d.ts.map +1 -0
  114. package/dist/themes/orange-light.js +551 -0
  115. package/package.json +62 -0
  116. package/src/components/controls/Button/Button.vue +417 -0
  117. package/src/components/controls/Button/README.md +348 -0
  118. package/src/components/controls/Button/theme.css +200 -0
  119. package/src/components/controls/Checkbox/Checkbox.vue +164 -0
  120. package/src/components/controls/Checkbox/README.md +441 -0
  121. package/src/components/controls/Checkbox/theme.css +36 -0
  122. package/src/components/controls/Dropdown/Dropdown.vue +476 -0
  123. package/src/components/controls/Dropdown/README.md +370 -0
  124. package/src/components/controls/Dropdown/theme.css +50 -0
  125. package/src/components/controls/Dropdown/types.ts +6 -0
  126. package/src/components/controls/IconButton/IconButton.vue +267 -0
  127. package/src/components/controls/IconButton/README.md +502 -0
  128. package/src/components/controls/IconButton/theme.css +89 -0
  129. package/src/components/controls/Radio/README.md +591 -0
  130. package/src/components/controls/Radio/Radio.vue +89 -0
  131. package/src/components/controls/Radio/theme.css +14 -0
  132. package/src/components/controls/RangeSlider/README.md +608 -0
  133. package/src/components/controls/RangeSlider/RangeSlider.vue +535 -0
  134. package/src/components/controls/RangeSlider/theme.css +80 -0
  135. package/src/components/controls/SegmentedControl/README.md +587 -0
  136. package/src/components/controls/SegmentedControl/SegmentedControl.vue +284 -0
  137. package/src/components/controls/SegmentedControl/theme.css +60 -0
  138. package/src/components/controls/SegmentedControl/types.ts +5 -0
  139. package/src/components/controls/Slider/README.md +627 -0
  140. package/src/components/controls/Slider/Slider.vue +260 -0
  141. package/src/components/controls/Slider/theme.css +74 -0
  142. package/src/components/controls/Stepper/README.md +601 -0
  143. package/src/components/controls/Stepper/Stepper.vue +103 -0
  144. package/src/components/controls/Stepper/theme.css +53 -0
  145. package/src/components/controls/Switch/README.md +667 -0
  146. package/src/components/controls/Switch/Switch.vue +127 -0
  147. package/src/components/controls/Switch/theme.css +42 -0
  148. package/src/components/dialogs/Alert/Alert.vue +218 -0
  149. package/src/components/dialogs/Alert/README.md +450 -0
  150. package/src/components/dialogs/Alert/theme.css +44 -0
  151. package/src/components/dialogs/Alert/types.ts +11 -0
  152. package/src/components/dialogs/Toast/README.md +522 -0
  153. package/src/components/dialogs/Toast/Toast.vue +296 -0
  154. package/src/components/dialogs/Toast/ToastContainer.vue +330 -0
  155. package/src/components/dialogs/Toast/theme.css +44 -0
  156. package/src/components/dialogs/Toast/types.ts +46 -0
  157. package/src/components/dialogs/Toast/useToast.ts +127 -0
  158. package/src/components/indicators/ProgressBar/ProgressBar.vue +98 -0
  159. package/src/components/indicators/ProgressBar/README.md +744 -0
  160. package/src/components/indicators/ProgressBar/theme.css +36 -0
  161. package/src/components/indicators/Tooltip/README.md +723 -0
  162. package/src/components/indicators/Tooltip/TooltipProvider.vue +142 -0
  163. package/src/components/indicators/Tooltip/theme.css +18 -0
  164. package/src/components/indicators/Tooltip/tooltip.ts +48 -0
  165. package/src/components/indicators/Tooltip/types.ts +15 -0
  166. package/src/components/indicators/Tooltip/useTooltip.ts +71 -0
  167. package/src/components/inputs/AutogrowTextView/AutogrowTextView.vue +110 -0
  168. package/src/components/inputs/AutogrowTextView/README.md +643 -0
  169. package/src/components/inputs/AutogrowTextView/theme.css +28 -0
  170. package/src/components/inputs/InputCard/InputCard.vue +600 -0
  171. package/src/components/inputs/InputCard/README.md +636 -0
  172. package/src/components/inputs/InputEmail/InputEmail.vue +698 -0
  173. package/src/components/inputs/InputEmail/README.md +764 -0
  174. package/src/components/inputs/InputNumber/InputNumber.vue +300 -0
  175. package/src/components/inputs/InputNumber/README.md +749 -0
  176. package/src/components/inputs/InputPhone/InputPhone.vue +645 -0
  177. package/src/components/inputs/InputPhone/README.md +636 -0
  178. package/src/components/inputs/InputSecure/InputSecure.vue +646 -0
  179. package/src/components/inputs/InputSecure/README.md +771 -0
  180. package/src/components/inputs/InputText/InputText.vue +225 -0
  181. package/src/components/inputs/InputText/README.md +844 -0
  182. package/src/components/inputs/OTP/OTP.vue +349 -0
  183. package/src/components/inputs/OTP/README.md +736 -0
  184. package/src/components/inputs/OTP/theme.css +50 -0
  185. package/src/components/inputs/StringCapture/README.md +718 -0
  186. package/src/components/inputs/StringCapture/StringCapture.vue +315 -0
  187. package/src/components/inputs/StringCapture/theme.css +86 -0
  188. package/src/components/inputs/Tags/README.md +897 -0
  189. package/src/components/inputs/Tags/TagBar.vue +793 -0
  190. package/src/components/inputs/Tags/TagCreation.vue +219 -0
  191. package/src/components/inputs/Tags/TagPicker.vue +380 -0
  192. package/src/components/inputs/Tags/tag-bar-styles.ts +354 -0
  193. package/src/components/inputs/Tags/theme.css +121 -0
  194. package/src/components/inputs/Tags/types.ts +346 -0
  195. package/src/components/inputs/search/README.md +759 -0
  196. package/src/components/inputs/search/SearchBar.vue +394 -0
  197. package/src/components/inputs/search/SearchResults.vue +310 -0
  198. package/src/components/inputs/search/theme.css +187 -0
  199. package/src/components/inputs/search/types.ts +8 -0
  200. package/src/components/inputs/theme.css +102 -0
  201. package/src/components/menus/ActionMenu/ActionMenu.vue +383 -0
  202. package/src/components/menus/ActionMenu/README.md +825 -0
  203. package/src/components/menus/ActionMenu/theme.css +93 -0
  204. package/src/components/models/Popover/Popover.vue +551 -0
  205. package/src/components/models/Popover/README.md +885 -0
  206. package/src/components/models/Popover/theme.css +52 -0
  207. package/src/components/models/Sheet/README.md +1159 -0
  208. package/src/components/models/Sheet/Sheet.vue +465 -0
  209. package/src/components/models/Sheet/theme.css +72 -0
  210. package/src/components/models/Sidebar/README.md +1228 -0
  211. package/src/components/models/Sidebar/Sidebar.vue +480 -0
  212. package/src/components/models/Sidebar/theme.css +90 -0
  213. package/src/components/navigation/adaptive/AdaptiveLayout.vue +779 -0
  214. package/src/components/navigation/adaptive/AdaptiveLayoutBreadcrumbs.vue +192 -0
  215. package/src/components/navigation/adaptive/AdaptiveLayoutMenuButton.vue +149 -0
  216. package/src/components/navigation/adaptive/README.md +768 -0
  217. package/src/components/navigation/adaptive/types.ts +19 -0
  218. package/src/components/navigation/adaptive/useAdaptiveLayout.ts +89 -0
  219. package/src/components/navigation/adaptive/useBreakpoints.ts +41 -0
  220. package/src/components/navigation/adaptive/useContainerMonitor.ts +214 -0
  221. package/src/components/navigation/adaptive/useViewAnimation.ts +721 -0
  222. package/src/components/navigation/adaptive/useViewResize.ts +211 -0
  223. package/src/components/navigation/navstack/NavigationStack.vue +180 -0
  224. package/src/components/navigation/navstack/README.md +994 -0
  225. package/src/components/navigation/navstack/useNavigationStack.ts +164 -0
  226. package/src/components/navigation/slideover/README.md +1275 -0
  227. package/src/components/navigation/slideover/SlideoverController.vue +287 -0
  228. package/src/components/navigation/slideover/useSlideoverController.ts +320 -0
  229. package/src/components/navigation/splitview/README.md +1115 -0
  230. package/src/components/navigation/splitview/SplitViewController.vue +176 -0
  231. package/src/components/navigation/splitview/useSplitViewController.ts +388 -0
  232. package/src/components/navigation/tabcontroller/README.md +919 -0
  233. package/src/components/navigation/tabcontroller/TabController.vue +307 -0
  234. package/src/components/navigation/tabcontroller/TabItem.vue +57 -0
  235. package/src/components/navigation/tabcontroller/types.ts +24 -0
  236. package/src/components/navigation/tabcontroller/useTabController.ts +18 -0
  237. package/src/components/navigation/theme.css +91 -0
  238. package/src/components/navigation/types.ts +7 -0
  239. package/src/components/pickers/CollectionPicker/CollectionPicker.vue +398 -0
  240. package/src/components/pickers/CollectionPicker/README.md +1115 -0
  241. package/src/components/pickers/CollectionPicker/theme.css +14 -0
  242. package/src/components/pickers/CollectionPicker/types.ts +11 -0
  243. package/src/components/pickers/ColorPicker/ColorPicker.vue +376 -0
  244. package/src/components/pickers/ColorPicker/README.md +1439 -0
  245. package/src/components/pickers/ColorPicker/colors.ts +299 -0
  246. package/src/components/pickers/ColorPicker/theme.css +32 -0
  247. package/src/components/pickers/DatePicker/DatePicker.vue +660 -0
  248. package/src/components/pickers/DatePicker/README.md +1195 -0
  249. package/src/components/pickers/DatePicker/theme.css +22 -0
  250. package/src/components/pickers/FilePicker/FilePicker.vue +534 -0
  251. package/src/components/pickers/FilePicker/README.md +1542 -0
  252. package/src/components/pickers/FilePicker/theme.css +48 -0
  253. package/src/components/pickers/FilePicker/types.ts +10 -0
  254. package/src/components/pickers/IconPicker/IconPicker.vue +327 -0
  255. package/src/components/pickers/IconPicker/README.md +1161 -0
  256. package/src/components/pickers/IconPicker/theme.css +28 -0
  257. package/src/components/pickers/theme.css +82 -0
  258. package/src/components/views/MarkdownViewer/MarkdownViewer.vue +442 -0
  259. package/src/components/views/MarkdownViewer/README.md +833 -0
  260. package/src/components/views/MarkdownViewer/theme.css +130 -0
  261. package/src/index.ts +263 -0
  262. package/src/theme.ts +378 -0
  263. package/src/themes/crimson-dark.ts +556 -0
  264. package/src/themes/cyan-light.ts +556 -0
  265. package/src/themes/dark.ts +557 -0
  266. package/src/themes/gold-dark.ts +556 -0
  267. package/src/themes/grass-dark.ts +556 -0
  268. package/src/themes/indigo.ts +556 -0
  269. package/src/themes/light.ts +557 -0
  270. package/src/themes/orange-dark.ts +557 -0
  271. package/src/themes/orange-light.ts +557 -0
  272. package/src/vue.d.ts +45 -0
@@ -0,0 +1,73 @@
1
+ import { type Ref, type ComputedRef } from "vue";
2
+ export type Theme = "light" | "dark" | "custom";
3
+ export interface ThemeConfig {
4
+ theme: Theme;
5
+ autoDetect: boolean;
6
+ customThemeId?: string;
7
+ customThemeColorMode?: "light" | "dark";
8
+ }
9
+ declare class ThemeManager {
10
+ private currentTheme;
11
+ private autoDetect;
12
+ private mediaQuery;
13
+ private systemThemeListener;
14
+ private customThemeId;
15
+ private customThemeColorMode;
16
+ constructor();
17
+ private initialize;
18
+ private loadConfig;
19
+ private saveConfig;
20
+ private setupSystemThemeDetection;
21
+ private removeSystemThemeListener;
22
+ setTheme(theme: Theme, save?: boolean): void;
23
+ setCustomTheme(customThemeId: string, customThemeColorMode: "light" | "dark", save?: boolean): void;
24
+ getTheme(): Theme;
25
+ getConfig(): ThemeConfig;
26
+ setAutoDetect(enabled: boolean): void;
27
+ isAutoDetectEnabled(): boolean;
28
+ toggleTheme(): void;
29
+ destroy(): void;
30
+ get theme(): Readonly<Ref<Theme>>;
31
+ get customThemeIdRef(): Readonly<Ref<string | undefined>>;
32
+ get customThemeColorModeRef(): Readonly<Ref<"light" | "dark" | undefined>>;
33
+ get autoDetectRef(): Readonly<Ref<boolean>>;
34
+ get configRef(): ComputedRef<ThemeConfig>;
35
+ }
36
+ export declare const themeManager: ThemeManager;
37
+ export declare const currentTheme: Readonly<Ref<Theme, Theme>>;
38
+ export declare const customThemeId: Readonly<Ref<string | undefined, string | undefined>>;
39
+ export declare const customThemeColorMode: Readonly<Ref<"dark" | "light" | undefined, "dark" | "light" | undefined>>;
40
+ export declare const autoDetect: Readonly<Ref<boolean, boolean>>;
41
+ export declare const themeConfig: ComputedRef<ThemeConfig>;
42
+ export declare const setTheme: (theme: Theme, save?: boolean) => void;
43
+ export declare const setCustomTheme: (customThemeId: string, customThemeColorMode: "light" | "dark", save?: boolean) => void;
44
+ export declare const getTheme: () => Theme;
45
+ export declare const getThemeConfig: () => ThemeConfig;
46
+ export declare const toggleTheme: () => void;
47
+ export declare const setAutoDetect: (enabled: boolean) => void;
48
+ export declare const isAutoDetectEnabled: () => boolean;
49
+ export declare const destroyThemeManager: () => void;
50
+ export declare const registerCustomTheme: (themeId: string, cssVariables: Record<string, string>) => void;
51
+ export declare const unregisterCustomTheme: (themeId: string) => void;
52
+ export declare const isThemeRegistered: (themeId: string) => boolean;
53
+ export declare const getRegisteredThemes: () => string[];
54
+ export declare const useTheme: () => {
55
+ theme: Readonly<Ref<Theme, Theme>>;
56
+ customThemeId: Readonly<Ref<string | undefined, string | undefined>>;
57
+ customThemeColorMode: Readonly<Ref<"dark" | "light" | undefined, "dark" | "light" | undefined>>;
58
+ autoDetect: Readonly<Ref<boolean, boolean>>;
59
+ config: ComputedRef<ThemeConfig>;
60
+ setTheme: (theme: Theme, save?: boolean) => void;
61
+ setCustomTheme: (customThemeId: string, customThemeColorMode: "light" | "dark", save?: boolean) => void;
62
+ toggleTheme: () => void;
63
+ setAutoDetect: (enabled: boolean) => void;
64
+ registerCustomTheme: (themeId: string, cssVariables: Record<string, string>) => void;
65
+ unregisterCustomTheme: (themeId: string) => void;
66
+ isThemeRegistered: (themeId: string) => boolean;
67
+ getRegisteredThemes: () => string[];
68
+ getTheme: () => Theme;
69
+ getThemeConfig: () => ThemeConfig;
70
+ isAutoDetectEnabled: () => boolean;
71
+ };
72
+ export {};
73
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
package/dist/theme.js ADDED
@@ -0,0 +1,279 @@
1
+ import { ref, computed, readonly } from "vue";
2
+ // Track registered themes to avoid duplicates
3
+ const registeredThemes = new Set();
4
+ class ThemeManager {
5
+ constructor() {
6
+ this.currentTheme = ref("light");
7
+ this.autoDetect = ref(true);
8
+ this.mediaQuery = null;
9
+ this.systemThemeListener = null;
10
+ this.customThemeId = ref(undefined);
11
+ this.customThemeColorMode = ref(undefined);
12
+ this.initialize();
13
+ }
14
+ initialize() {
15
+ // Load saved configuration
16
+ const savedConfig = this.loadConfig();
17
+ if (savedConfig) {
18
+ this.autoDetect.value = savedConfig.autoDetect;
19
+ this.customThemeId.value = savedConfig.customThemeId;
20
+ this.customThemeColorMode.value = savedConfig.customThemeColorMode;
21
+ // If auto-detect is enabled, use system theme regardless of saved theme
22
+ if (this.autoDetect.value) {
23
+ this.setupSystemThemeDetection();
24
+ }
25
+ else {
26
+ // Use saved theme only if auto-detect is disabled
27
+ if (savedConfig.theme === "custom" &&
28
+ this.customThemeId.value &&
29
+ this.customThemeColorMode.value) {
30
+ // Properly restore custom theme with both ID and color mode
31
+ this.setCustomTheme(this.customThemeId.value, this.customThemeColorMode.value, false);
32
+ }
33
+ else {
34
+ this.setTheme(savedConfig.theme, false);
35
+ }
36
+ }
37
+ }
38
+ else {
39
+ // First time setup - default to auto-detect
40
+ this.setupSystemThemeDetection();
41
+ }
42
+ }
43
+ loadConfig() {
44
+ try {
45
+ const saved = localStorage.getItem("umbra-theme-config");
46
+ return saved ? JSON.parse(saved) : null;
47
+ }
48
+ catch {
49
+ return null;
50
+ }
51
+ }
52
+ saveConfig() {
53
+ const config = {
54
+ theme: this.currentTheme.value,
55
+ autoDetect: this.autoDetect.value,
56
+ customThemeId: this.customThemeId.value,
57
+ customThemeColorMode: this.customThemeColorMode.value,
58
+ };
59
+ try {
60
+ localStorage.setItem("umbra-theme-config", JSON.stringify(config));
61
+ }
62
+ catch (e) {
63
+ console.warn("Failed to save theme configuration:", e);
64
+ }
65
+ }
66
+ setupSystemThemeDetection() {
67
+ // Clean up existing listener if any
68
+ this.removeSystemThemeListener();
69
+ this.mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
70
+ const systemTheme = this.mediaQuery.matches ? "dark" : "light";
71
+ this.setTheme(systemTheme, false);
72
+ // Create and store the listener
73
+ this.systemThemeListener = (e) => {
74
+ if (this.autoDetect.value) {
75
+ this.setTheme(e.matches ? "dark" : "light", false);
76
+ }
77
+ };
78
+ this.mediaQuery.addEventListener("change", this.systemThemeListener);
79
+ }
80
+ removeSystemThemeListener() {
81
+ if (this.mediaQuery && this.systemThemeListener) {
82
+ this.mediaQuery.removeEventListener("change", this.systemThemeListener);
83
+ this.systemThemeListener = null;
84
+ }
85
+ }
86
+ setTheme(theme, save = true) {
87
+ this.currentTheme.value = theme;
88
+ // Remove all theme-related classes and attributes
89
+ document.documentElement.classList.remove("light", "light-theme", "dark", "dark-theme");
90
+ document.documentElement.removeAttribute("data-theme");
91
+ document.documentElement.removeAttribute("data-custom-theme");
92
+ // Apply theme using CSS classes
93
+ if (theme === "custom" && this.customThemeId.value) {
94
+ document.documentElement.setAttribute("data-theme", "custom");
95
+ document.documentElement.setAttribute("data-custom-theme", this.customThemeId.value);
96
+ // Also set the color mode class for custom themes
97
+ if (this.customThemeColorMode.value === "dark") {
98
+ document.documentElement.classList.add("dark", "dark-theme");
99
+ }
100
+ else {
101
+ document.documentElement.classList.add("light", "light-theme");
102
+ }
103
+ }
104
+ else if (theme === "dark") {
105
+ document.documentElement.classList.add("dark", "dark-theme");
106
+ }
107
+ else {
108
+ document.documentElement.classList.add("light", "light-theme");
109
+ }
110
+ if (save) {
111
+ this.saveConfig();
112
+ }
113
+ // Dispatch theme change event
114
+ window.dispatchEvent(new CustomEvent("theme-change", {
115
+ detail: {
116
+ theme,
117
+ customThemeId: theme === "custom" ? this.customThemeId.value : undefined,
118
+ customThemeColorMode: theme === "custom" ? this.customThemeColorMode.value : undefined,
119
+ },
120
+ }));
121
+ }
122
+ setCustomTheme(customThemeId, customThemeColorMode, save = true) {
123
+ this.customThemeId.value = customThemeId;
124
+ this.customThemeColorMode.value = customThemeColorMode;
125
+ this.setTheme("custom", save);
126
+ }
127
+ getTheme() {
128
+ return this.currentTheme.value;
129
+ }
130
+ getConfig() {
131
+ return {
132
+ theme: this.currentTheme.value,
133
+ autoDetect: this.autoDetect.value,
134
+ customThemeId: this.customThemeId.value,
135
+ customThemeColorMode: this.customThemeColorMode.value,
136
+ };
137
+ }
138
+ setAutoDetect(enabled) {
139
+ this.autoDetect.value = enabled;
140
+ if (enabled) {
141
+ this.setupSystemThemeDetection();
142
+ }
143
+ else {
144
+ this.removeSystemThemeListener();
145
+ }
146
+ this.saveConfig();
147
+ }
148
+ isAutoDetectEnabled() {
149
+ return this.autoDetect.value;
150
+ }
151
+ toggleTheme() {
152
+ // Disable auto-detect when manually toggling
153
+ if (this.autoDetect.value) {
154
+ this.setAutoDetect(false);
155
+ }
156
+ // Toggle between light and dark only
157
+ // If custom theme is active, switch to light
158
+ let newTheme;
159
+ switch (this.currentTheme.value) {
160
+ case "light":
161
+ newTheme = "dark";
162
+ break;
163
+ case "dark":
164
+ newTheme = "light";
165
+ break;
166
+ case "custom":
167
+ newTheme = "light";
168
+ break;
169
+ default:
170
+ newTheme = "light";
171
+ }
172
+ this.setTheme(newTheme);
173
+ }
174
+ destroy() {
175
+ this.removeSystemThemeListener();
176
+ }
177
+ // Expose reactive references as readonly for components
178
+ get theme() {
179
+ return readonly(this.currentTheme);
180
+ }
181
+ get customThemeIdRef() {
182
+ return readonly(this.customThemeId);
183
+ }
184
+ get customThemeColorModeRef() {
185
+ return readonly(this.customThemeColorMode);
186
+ }
187
+ get autoDetectRef() {
188
+ return readonly(this.autoDetect);
189
+ }
190
+ // Computed property for the full config
191
+ get configRef() {
192
+ return computed(() => ({
193
+ theme: this.currentTheme.value,
194
+ autoDetect: this.autoDetect.value,
195
+ customThemeId: this.customThemeId.value,
196
+ customThemeColorMode: this.customThemeColorMode.value,
197
+ }));
198
+ }
199
+ }
200
+ // Create singleton instance
201
+ export const themeManager = new ThemeManager();
202
+ // Export reactive references for direct use in components
203
+ export const currentTheme = themeManager.theme;
204
+ export const customThemeId = themeManager.customThemeIdRef;
205
+ export const customThemeColorMode = themeManager.customThemeColorModeRef;
206
+ export const autoDetect = themeManager.autoDetectRef;
207
+ export const themeConfig = themeManager.configRef;
208
+ // Export convenience functions (keep existing API)
209
+ export const setTheme = (theme, save) => themeManager.setTheme(theme, save);
210
+ export const setCustomTheme = (customThemeId, customThemeColorMode, save) => themeManager.setCustomTheme(customThemeId, customThemeColorMode, save);
211
+ export const getTheme = () => themeManager.getTheme();
212
+ export const getThemeConfig = () => themeManager.getConfig();
213
+ export const toggleTheme = () => themeManager.toggleTheme();
214
+ export const setAutoDetect = (enabled) => themeManager.setAutoDetect(enabled);
215
+ export const isAutoDetectEnabled = () => themeManager.isAutoDetectEnabled();
216
+ // Cleanup function for SPA navigation
217
+ export const destroyThemeManager = () => themeManager.destroy();
218
+ // Custom theme registration utilities
219
+ export const registerCustomTheme = (themeId, cssVariables) => {
220
+ // Check if already registered
221
+ if (registeredThemes.has(themeId)) {
222
+ console.warn(`Theme "${themeId}" is already registered`);
223
+ return;
224
+ }
225
+ // Check if style element already exists (e.g., from hot reload)
226
+ const existing = document.querySelector(`style[data-umbra-custom-theme="${themeId}"]`);
227
+ if (existing) {
228
+ existing.remove();
229
+ }
230
+ const style = document.createElement("style");
231
+ style.setAttribute("data-umbra-custom-theme", themeId);
232
+ const cssVars = Object.entries(cssVariables)
233
+ .map(([key, value]) => ` ${key}: ${value};`)
234
+ .join("\n");
235
+ style.textContent = `
236
+ [data-theme="custom"][data-custom-theme="${themeId}"] {
237
+ ${cssVars}
238
+ }`;
239
+ document.head.appendChild(style);
240
+ registeredThemes.add(themeId);
241
+ };
242
+ export const unregisterCustomTheme = (themeId) => {
243
+ const styleElement = document.querySelector(`style[data-umbra-custom-theme="${themeId}"]`);
244
+ if (styleElement) {
245
+ styleElement.remove();
246
+ registeredThemes.delete(themeId);
247
+ }
248
+ };
249
+ export const isThemeRegistered = (themeId) => {
250
+ return registeredThemes.has(themeId);
251
+ };
252
+ export const getRegisteredThemes = () => {
253
+ return Array.from(registeredThemes);
254
+ };
255
+ // Composable for use in Vue components
256
+ export const useTheme = () => {
257
+ return {
258
+ // Reactive refs
259
+ theme: currentTheme,
260
+ customThemeId,
261
+ customThemeColorMode,
262
+ autoDetect,
263
+ config: themeConfig,
264
+ // Methods
265
+ setTheme,
266
+ setCustomTheme,
267
+ toggleTheme,
268
+ setAutoDetect,
269
+ // Custom theme registration (for advanced usage)
270
+ registerCustomTheme,
271
+ unregisterCustomTheme,
272
+ isThemeRegistered,
273
+ getRegisteredThemes,
274
+ // Non-reactive getters (for backward compatibility)
275
+ getTheme,
276
+ getThemeConfig,
277
+ isAutoDetectEnabled,
278
+ };
279
+ };
@@ -0,0 +1,7 @@
1
+ export interface ThemeObject {
2
+ themeId: string;
3
+ cssVariables: Record<string, string>;
4
+ }
5
+ export declare const lightAltTheme: ThemeObject;
6
+ export default lightAltTheme;
7
+ //# sourceMappingURL=blank.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blank.d.ts","sourceRoot":"","sources":["../../src/themes/blank.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,eAAO,MAAM,aAAa,EAAE,WAwhB3B,CAAC;AAGF,eAAe,aAAa,CAAC"}