@tomny-dev/uzi 0.2.4 → 0.2.6

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 (183) hide show
  1. package/dist/index.cjs +66 -2
  2. package/dist/index.js +25 -1594
  3. package/dist/index10.cjs +26 -0
  4. package/dist/index10.cjs.map +1 -0
  5. package/dist/index10.js +19 -0
  6. package/dist/index10.js.map +1 -0
  7. package/dist/index11.cjs +22 -0
  8. package/dist/index11.cjs.map +1 -0
  9. package/dist/index11.js +22 -0
  10. package/dist/index11.js.map +1 -0
  11. package/dist/index12.cjs +22 -0
  12. package/dist/index12.cjs.map +1 -0
  13. package/dist/index12.js +41 -0
  14. package/dist/index12.js.map +1 -0
  15. package/dist/index13.cjs +56 -0
  16. package/dist/index13.cjs.map +1 -0
  17. package/dist/index13.js +84 -0
  18. package/dist/index13.js.map +1 -0
  19. package/dist/index14.cjs +87 -0
  20. package/dist/index14.cjs.map +1 -0
  21. package/dist/index14.js +17 -0
  22. package/dist/index14.js.map +1 -0
  23. package/dist/index15.cjs +22 -0
  24. package/dist/index15.cjs.map +1 -0
  25. package/dist/index15.js +16 -0
  26. package/dist/index15.js.map +1 -0
  27. package/dist/index16.cjs +16 -0
  28. package/dist/index16.cjs.map +1 -0
  29. package/dist/index16.js +45 -0
  30. package/dist/index16.js.map +1 -0
  31. package/dist/index17.cjs +64 -0
  32. package/dist/index17.cjs.map +1 -0
  33. package/dist/index17.js +435 -0
  34. package/dist/index17.js.map +1 -0
  35. package/dist/index18.cjs +438 -0
  36. package/dist/index18.cjs.map +1 -0
  37. package/dist/index18.js +7 -0
  38. package/dist/index18.js.map +1 -0
  39. package/dist/index19.cjs +8 -0
  40. package/dist/index19.cjs.map +1 -0
  41. package/dist/index19.js +18 -0
  42. package/dist/index19.js.map +1 -0
  43. package/dist/index2.cjs +23 -0
  44. package/dist/index20.cjs +20 -0
  45. package/dist/index20.cjs.map +1 -0
  46. package/dist/index20.js +7 -0
  47. package/dist/index20.js.map +1 -0
  48. package/dist/index21.cjs +8 -0
  49. package/dist/index21.cjs.map +1 -0
  50. package/dist/index21.js +15 -0
  51. package/dist/index21.js.map +1 -0
  52. package/dist/index22.cjs +17 -0
  53. package/dist/index22.cjs.map +1 -0
  54. package/dist/index22.js +7 -0
  55. package/dist/index22.js.map +1 -0
  56. package/dist/index23.cjs +8 -0
  57. package/dist/index23.cjs.map +1 -0
  58. package/dist/index23.js +18 -0
  59. package/dist/index23.js.map +1 -0
  60. package/dist/index24.cjs +20 -0
  61. package/dist/index24.cjs.map +1 -0
  62. package/dist/index24.js +41 -0
  63. package/dist/index24.js.map +1 -0
  64. package/dist/index25.cjs +58 -0
  65. package/dist/index25.cjs.map +1 -0
  66. package/dist/index25.js +123 -0
  67. package/dist/index25.js.map +1 -0
  68. package/dist/index26.cjs +126 -0
  69. package/dist/index26.cjs.map +1 -0
  70. package/dist/index26.js +29 -0
  71. package/dist/index26.js.map +1 -0
  72. package/dist/index27.cjs +40 -0
  73. package/dist/index27.cjs.map +1 -0
  74. package/dist/index27.js +110 -0
  75. package/dist/index27.js.map +1 -0
  76. package/dist/index28.cjs +113 -0
  77. package/dist/index28.cjs.map +1 -0
  78. package/dist/index28.js +26 -0
  79. package/dist/index28.js.map +1 -0
  80. package/dist/index29.cjs +28 -0
  81. package/dist/index29.cjs.map +1 -0
  82. package/dist/index29.js +29 -0
  83. package/dist/index29.js.map +1 -0
  84. package/dist/index3.js +8 -0
  85. package/dist/index3.js.map +1 -0
  86. package/dist/index30.cjs +40 -0
  87. package/dist/index30.cjs.map +1 -0
  88. package/dist/index30.js +118 -0
  89. package/dist/index30.js.map +1 -0
  90. package/dist/index31.cjs +134 -0
  91. package/dist/index31.cjs.map +1 -0
  92. package/dist/index31.js +20 -0
  93. package/dist/index31.js.map +1 -0
  94. package/dist/index32.cjs +23 -0
  95. package/dist/index32.cjs.map +1 -0
  96. package/dist/index32.js +114 -0
  97. package/dist/index32.js.map +1 -0
  98. package/dist/index33.cjs +115 -0
  99. package/dist/index33.cjs.map +1 -0
  100. package/dist/index33.js +7 -0
  101. package/dist/index33.js.map +1 -0
  102. package/dist/index34.cjs +8 -0
  103. package/dist/index34.cjs.map +1 -0
  104. package/dist/index34.js +66 -0
  105. package/dist/index34.js.map +1 -0
  106. package/dist/index35.cjs +66 -0
  107. package/dist/index35.cjs.map +1 -0
  108. package/dist/index35.js +25 -0
  109. package/dist/index35.js.map +1 -0
  110. package/dist/index36.cjs +34 -0
  111. package/dist/index36.cjs.map +1 -0
  112. package/dist/index36.js +55 -0
  113. package/dist/index36.js.map +1 -0
  114. package/dist/index37.cjs +55 -0
  115. package/dist/index37.cjs.map +1 -0
  116. package/dist/index37.js +35 -0
  117. package/dist/index37.js.map +1 -0
  118. package/dist/index38.cjs +49 -0
  119. package/dist/index38.cjs.map +1 -0
  120. package/dist/index38.js +150 -0
  121. package/dist/index38.js.map +1 -0
  122. package/dist/index39.cjs +150 -0
  123. package/dist/index39.cjs.map +1 -0
  124. package/dist/index39.js +43 -0
  125. package/dist/index39.js.map +1 -0
  126. package/dist/index4.cjs +8 -0
  127. package/dist/index4.cjs.map +1 -0
  128. package/dist/index4.js +29 -0
  129. package/dist/index4.js.map +1 -0
  130. package/dist/index40.cjs +61 -0
  131. package/dist/index40.cjs.map +1 -0
  132. package/dist/index40.js +173 -0
  133. package/dist/index40.js.map +1 -0
  134. package/dist/index41.cjs +173 -0
  135. package/dist/index41.cjs.map +1 -0
  136. package/dist/index41.js +14 -0
  137. package/dist/index41.js.map +1 -0
  138. package/dist/index42.cjs +15 -0
  139. package/dist/index42.cjs.map +1 -0
  140. package/dist/index42.js +21 -0
  141. package/dist/index42.js.map +1 -0
  142. package/dist/index43.cjs +21 -0
  143. package/dist/index43.cjs.map +1 -0
  144. package/dist/index43.js +15 -0
  145. package/dist/index43.js.map +1 -0
  146. package/dist/index44.cjs +17 -0
  147. package/dist/index44.cjs.map +1 -0
  148. package/dist/index44.js +24 -0
  149. package/dist/index44.js.map +1 -0
  150. package/dist/index45.cjs +24 -0
  151. package/dist/index45.cjs.map +1 -0
  152. package/dist/index45.js +13 -0
  153. package/dist/index45.js.map +1 -0
  154. package/dist/index46.cjs +16 -0
  155. package/dist/index46.cjs.map +1 -0
  156. package/dist/index46.js +96 -0
  157. package/dist/index46.js.map +1 -0
  158. package/dist/index47.cjs +98 -0
  159. package/dist/index47.cjs.map +1 -0
  160. package/dist/index5.cjs +40 -0
  161. package/dist/index5.cjs.map +1 -0
  162. package/dist/index5.js +45 -0
  163. package/dist/index5.js.map +1 -0
  164. package/dist/index6.cjs +47 -0
  165. package/dist/index6.cjs.map +1 -0
  166. package/dist/index6.js +17 -0
  167. package/dist/index6.js.map +1 -0
  168. package/dist/index7.cjs +20 -0
  169. package/dist/index7.cjs.map +1 -0
  170. package/dist/index7.js +30 -0
  171. package/dist/index7.js.map +1 -0
  172. package/dist/index8.cjs +35 -0
  173. package/dist/index8.cjs.map +1 -0
  174. package/dist/index8.js +18 -0
  175. package/dist/index8.js.map +1 -0
  176. package/dist/index9.cjs +20 -0
  177. package/dist/index9.cjs.map +1 -0
  178. package/dist/index9.js +26 -0
  179. package/dist/index9.js.map +1 -0
  180. package/dist/style.css +2025 -1
  181. package/package.json +1 -1
  182. package/dist/index.cjs.map +0 -1
  183. package/dist/index.js.map +0 -1
@@ -0,0 +1,134 @@
1
+ "use client";
2
+ const require_runtime = require("./index2.cjs");
3
+ const require_cx = require("./index4.cjs");
4
+ const require_dropdown_menu_module = require("./index30.cjs");
5
+ let react = require("react");
6
+ react = require_runtime.__toESM(react, 1);
7
+ let react_jsx_runtime = require("react/jsx-runtime");
8
+ let _radix_ui_react_dropdown_menu = require("@radix-ui/react-dropdown-menu");
9
+ _radix_ui_react_dropdown_menu = require_runtime.__toESM(_radix_ui_react_dropdown_menu, 1);
10
+ //#region src/components/dropdown-menu/DropdownMenu.tsx
11
+ function DropdownMenu(props) {
12
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Root, { ...props });
13
+ }
14
+ function DropdownMenuTrigger(props) {
15
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Trigger, { ...props });
16
+ }
17
+ function DropdownMenuGroup(props) {
18
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Group, { ...props });
19
+ }
20
+ function DropdownMenuPortal(props) {
21
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Portal, { ...props });
22
+ }
23
+ function DropdownMenuSub(props) {
24
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Sub, { ...props });
25
+ }
26
+ function DropdownMenuRadioGroup(props) {
27
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.RadioGroup, { ...props });
28
+ }
29
+ function DropdownMenuContent({ className, sideOffset = 4, ...props }) {
30
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Content, {
31
+ sideOffset,
32
+ className: require_cx.cx(require_dropdown_menu_module.default.content, className),
33
+ ...props
34
+ }) });
35
+ }
36
+ function DropdownMenuItem({ className, inset, variant = "default", ...props }) {
37
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Item, {
38
+ "data-inset": inset ? "true" : void 0,
39
+ className: require_cx.cx(require_dropdown_menu_module.default.item, variant === "destructive" && require_dropdown_menu_module.default.itemDestructive, className),
40
+ ...props
41
+ });
42
+ }
43
+ function DropdownMenuCheckboxItem({ className, children, ...props }) {
44
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_dropdown_menu.CheckboxItem, {
45
+ className: require_cx.cx(require_dropdown_menu_module.default.item, require_dropdown_menu_module.default.insetItem, className),
46
+ ...props,
47
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
48
+ className: require_dropdown_menu_module.default.indicator,
49
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.ItemIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
50
+ viewBox: "0 0 16 16",
51
+ width: "16",
52
+ height: "16",
53
+ "aria-hidden": "true",
54
+ className: require_dropdown_menu_module.default.indicatorIcon,
55
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
56
+ d: "M3.5 8.5 6.5 11.5 12.5 4.5",
57
+ fill: "none",
58
+ stroke: "currentColor",
59
+ strokeWidth: "1.8",
60
+ strokeLinecap: "round",
61
+ strokeLinejoin: "round"
62
+ })
63
+ }) })
64
+ }), children]
65
+ });
66
+ }
67
+ function DropdownMenuRadioItem({ className, children, ...props }) {
68
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_dropdown_menu.RadioItem, {
69
+ className: require_cx.cx(require_dropdown_menu_module.default.item, require_dropdown_menu_module.default.insetItem, className),
70
+ ...props,
71
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
72
+ className: require_dropdown_menu_module.default.indicator,
73
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.ItemIndicator, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: require_dropdown_menu_module.default.radioDot }) })
74
+ }), children]
75
+ });
76
+ }
77
+ function DropdownMenuLabel({ className, inset, ...props }) {
78
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Label, {
79
+ "data-inset": inset ? "true" : void 0,
80
+ className: require_cx.cx(require_dropdown_menu_module.default.label, className),
81
+ ...props
82
+ });
83
+ }
84
+ function DropdownMenuSeparator({ className, ...props }) {
85
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.Separator, {
86
+ className: require_cx.cx(require_dropdown_menu_module.default.separator, className),
87
+ ...props
88
+ });
89
+ }
90
+ function DropdownMenuSubTrigger({ className, inset, children, ...props }) {
91
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_react_dropdown_menu.SubTrigger, {
92
+ "data-inset": inset ? "true" : void 0,
93
+ className: require_cx.cx(require_dropdown_menu_module.default.item, className),
94
+ ...props,
95
+ children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
96
+ viewBox: "0 0 16 16",
97
+ width: "16",
98
+ height: "16",
99
+ "aria-hidden": "true",
100
+ className: require_dropdown_menu_module.default.chevron,
101
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
102
+ d: "M6 3.5 10.5 8 6 12.5",
103
+ fill: "none",
104
+ stroke: "currentColor",
105
+ strokeWidth: "1.6",
106
+ strokeLinecap: "round",
107
+ strokeLinejoin: "round"
108
+ })
109
+ })]
110
+ });
111
+ }
112
+ function DropdownMenuSubContent({ className, ...props }) {
113
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_radix_ui_react_dropdown_menu.SubContent, {
114
+ className: require_cx.cx(require_dropdown_menu_module.default.content, className),
115
+ ...props
116
+ });
117
+ }
118
+ //#endregion
119
+ exports.DropdownMenu = DropdownMenu;
120
+ exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
121
+ exports.DropdownMenuContent = DropdownMenuContent;
122
+ exports.DropdownMenuGroup = DropdownMenuGroup;
123
+ exports.DropdownMenuItem = DropdownMenuItem;
124
+ exports.DropdownMenuLabel = DropdownMenuLabel;
125
+ exports.DropdownMenuPortal = DropdownMenuPortal;
126
+ exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
127
+ exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
128
+ exports.DropdownMenuSeparator = DropdownMenuSeparator;
129
+ exports.DropdownMenuSub = DropdownMenuSub;
130
+ exports.DropdownMenuSubContent = DropdownMenuSubContent;
131
+ exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
132
+ exports.DropdownMenuTrigger = DropdownMenuTrigger;
133
+
134
+ //# sourceMappingURL=index31.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index31.cjs","names":[],"sources":["../src/components/dropdown-menu/DropdownMenu.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./dropdown-menu.module.css\";\n\nexport function DropdownMenu(\n props: React.ComponentProps<typeof DropdownMenuPrimitive.Root>,\n) {\n return <DropdownMenuPrimitive.Root {...props} />;\n}\n\nexport function DropdownMenuTrigger(\n props: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>,\n) {\n return <DropdownMenuPrimitive.Trigger {...props} />;\n}\n\nexport function DropdownMenuGroup(\n props: React.ComponentProps<typeof DropdownMenuPrimitive.Group>,\n) {\n return <DropdownMenuPrimitive.Group {...props} />;\n}\n\nexport function DropdownMenuPortal(\n props: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>,\n) {\n return <DropdownMenuPrimitive.Portal {...props} />;\n}\n\nexport function DropdownMenuSub(\n props: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>,\n) {\n return <DropdownMenuPrimitive.Sub {...props} />;\n}\n\nexport function DropdownMenuRadioGroup(\n props: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>,\n) {\n return <DropdownMenuPrimitive.RadioGroup {...props} />;\n}\n\nexport function DropdownMenuContent({\n className,\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n sideOffset={sideOffset}\n className={cx(styles.content, className)}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\nexport function DropdownMenuItem({\n className,\n inset,\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-inset={inset ? \"true\" : undefined}\n className={cx(\n styles.item,\n variant === \"destructive\" && styles.itemDestructive,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport function DropdownMenuCheckboxItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n className={cx(\n styles.item,\n styles.insetItem,\n className,\n )}\n {...props}\n >\n <span className={styles.indicator}>\n <DropdownMenuPrimitive.ItemIndicator>\n <svg\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n className={styles.indicatorIcon}\n >\n <path\n d=\"M3.5 8.5 6.5 11.5 12.5 4.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\nexport function DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n className={cx(\n styles.item,\n styles.insetItem,\n className,\n )}\n {...props}\n >\n <span className={styles.indicator}>\n <DropdownMenuPrimitive.ItemIndicator>\n <span className={styles.radioDot} />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\nexport function DropdownMenuLabel({\n className,\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-inset={inset ? \"true\" : undefined}\n className={cx(styles.label, className)}\n {...props}\n />\n );\n}\n\nexport function DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n className={cx(styles.separator, className)}\n {...props}\n />\n );\n}\n\nexport function DropdownMenuSubTrigger({\n className,\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-inset={inset ? \"true\" : undefined}\n className={cx(styles.item, className)}\n {...props}\n >\n {children}\n <svg\n viewBox=\"0 0 16 16\"\n width=\"16\"\n height=\"16\"\n aria-hidden=\"true\"\n className={styles.chevron}\n >\n <path\n d=\"M6 3.5 10.5 8 6 12.5\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\nexport function DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n className={cx(styles.content, className)}\n {...props}\n />\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ //#region src/theme/constants.ts
2
+ var UZI_THEMES = [
3
+ "light",
4
+ "dark",
5
+ "system"
6
+ ];
7
+ var UZI_ACCENTS = [
8
+ "blue",
9
+ "cyan",
10
+ "violet",
11
+ "emerald",
12
+ "amber",
13
+ "rose"
14
+ ];
15
+ var THEME_STORAGE_KEY = "uzi-theme";
16
+ var ACCENT_STORAGE_KEY = "uzi-accent";
17
+ //#endregion
18
+ export { ACCENT_STORAGE_KEY, THEME_STORAGE_KEY, UZI_ACCENTS, UZI_THEMES };
19
+
20
+ //# sourceMappingURL=index31.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index31.js","names":[],"sources":["../src/theme/constants.ts"],"sourcesContent":["export const UZI_THEMES = [\"light\", \"dark\", \"system\"] as const;\nexport const UZI_ACCENTS = [\"blue\", \"cyan\", \"violet\", \"emerald\", \"amber\", \"rose\"] as const;\n\nexport const THEME_STORAGE_KEY = \"uzi-theme\";\nexport const ACCENT_STORAGE_KEY = \"uzi-accent\";\n"],"mappings":";AAAA,IAAa,aAAa;CAAC;CAAS;CAAQ;AAAQ;AACpD,IAAa,cAAc;CAAC;CAAQ;CAAQ;CAAU;CAAW;CAAS;AAAM;AAEhF,IAAa,oBAAoB;AACjC,IAAa,qBAAqB"}
@@ -0,0 +1,23 @@
1
+ //#region src/theme/constants.ts
2
+ var UZI_THEMES = [
3
+ "light",
4
+ "dark",
5
+ "system"
6
+ ];
7
+ var UZI_ACCENTS = [
8
+ "blue",
9
+ "cyan",
10
+ "violet",
11
+ "emerald",
12
+ "amber",
13
+ "rose"
14
+ ];
15
+ var THEME_STORAGE_KEY = "uzi-theme";
16
+ var ACCENT_STORAGE_KEY = "uzi-accent";
17
+ //#endregion
18
+ exports.ACCENT_STORAGE_KEY = ACCENT_STORAGE_KEY;
19
+ exports.THEME_STORAGE_KEY = THEME_STORAGE_KEY;
20
+ exports.UZI_ACCENTS = UZI_ACCENTS;
21
+ exports.UZI_THEMES = UZI_THEMES;
22
+
23
+ //# sourceMappingURL=index32.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index32.cjs","names":[],"sources":["../src/theme/constants.ts"],"sourcesContent":["export const UZI_THEMES = [\"light\", \"dark\", \"system\"] as const;\nexport const UZI_ACCENTS = [\"blue\", \"cyan\", \"violet\", \"emerald\", \"amber\", \"rose\"] as const;\n\nexport const THEME_STORAGE_KEY = \"uzi-theme\";\nexport const ACCENT_STORAGE_KEY = \"uzi-accent\";\n"],"mappings":";AAAA,IAAa,aAAa;CAAC;CAAS;CAAQ;AAAQ;AACpD,IAAa,cAAc;CAAC;CAAQ;CAAQ;CAAU;CAAW;CAAS;AAAM;AAEhF,IAAa,oBAAoB;AACjC,IAAa,qBAAqB"}
@@ -0,0 +1,114 @@
1
+ "use client";
2
+ import { ToastProvider } from "./index17.js";
3
+ import { ACCENT_STORAGE_KEY as ACCENT_STORAGE_KEY$1, THEME_STORAGE_KEY as THEME_STORAGE_KEY$1, UZI_ACCENTS, UZI_THEMES } from "./index31.js";
4
+ import { createContext, useCallback, useContext, useEffect, useMemo, useState } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/theme/ThemeProvider.tsx
7
+ var THEME_STORAGE_KEY = THEME_STORAGE_KEY$1;
8
+ var ACCENT_STORAGE_KEY = ACCENT_STORAGE_KEY$1;
9
+ var THEME_ATTRIBUTE = "data-uzi-theme";
10
+ var ACCENT_ATTRIBUTE = "data-uzi-accent";
11
+ var ThemeContext = createContext(void 0);
12
+ function isTheme(value) {
13
+ return UZI_THEMES.includes(value);
14
+ }
15
+ function isAccent(value) {
16
+ return UZI_ACCENTS.includes(value);
17
+ }
18
+ function getSystemTheme() {
19
+ if (typeof window === "undefined") return "light";
20
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
21
+ }
22
+ function ThemeProvider({ children, theme, defaultTheme = "system", accent, defaultAccent = "blue", onThemeChange, onAccentChange, storageKey = THEME_STORAGE_KEY, accentStorageKey = ACCENT_STORAGE_KEY, disableStorage = false, toastConfig }) {
23
+ const [internalTheme, setInternalTheme] = useState(defaultTheme);
24
+ const [internalAccent, setInternalAccent] = useState(defaultAccent);
25
+ const [systemTheme, setSystemTheme] = useState("light");
26
+ useEffect(() => {
27
+ setSystemTheme(getSystemTheme());
28
+ if (!disableStorage) {
29
+ const storedTheme = window.localStorage.getItem(storageKey);
30
+ if (isTheme(storedTheme)) setInternalTheme(storedTheme);
31
+ const storedAccent = window.localStorage.getItem(accentStorageKey);
32
+ if (isAccent(storedAccent)) setInternalAccent(storedAccent);
33
+ }
34
+ }, [
35
+ disableStorage,
36
+ storageKey,
37
+ accentStorageKey
38
+ ]);
39
+ const isThemeControlled = theme !== void 0;
40
+ const isAccentControlled = accent !== void 0;
41
+ const currentTheme = isThemeControlled ? theme : internalTheme;
42
+ const currentAccent = isAccentControlled ? accent : internalAccent;
43
+ const resolvedTheme = currentTheme === "system" ? systemTheme : currentTheme;
44
+ useEffect(() => {
45
+ if (typeof window === "undefined") return;
46
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
47
+ const handleChange = () => setSystemTheme(mediaQuery.matches ? "dark" : "light");
48
+ handleChange();
49
+ mediaQuery.addEventListener("change", handleChange);
50
+ return () => mediaQuery.removeEventListener("change", handleChange);
51
+ }, []);
52
+ useEffect(() => {
53
+ if (typeof document === "undefined") return;
54
+ const root = document.documentElement;
55
+ root.setAttribute(THEME_ATTRIBUTE, resolvedTheme);
56
+ root.setAttribute(ACCENT_ATTRIBUTE, currentAccent);
57
+ root.style.colorScheme = resolvedTheme;
58
+ root.classList.toggle("dark", resolvedTheme === "dark");
59
+ }, [currentAccent, resolvedTheme]);
60
+ const setTheme = useCallback((nextTheme) => {
61
+ if (!isThemeControlled) setInternalTheme(nextTheme);
62
+ if (!disableStorage && typeof window !== "undefined") window.localStorage.setItem(storageKey, nextTheme);
63
+ onThemeChange?.(nextTheme);
64
+ }, [
65
+ disableStorage,
66
+ isThemeControlled,
67
+ onThemeChange,
68
+ storageKey
69
+ ]);
70
+ const setAccent = useCallback((nextAccent) => {
71
+ if (!isAccentControlled) setInternalAccent(nextAccent);
72
+ if (!disableStorage && typeof window !== "undefined") window.localStorage.setItem(accentStorageKey, nextAccent);
73
+ onAccentChange?.(nextAccent);
74
+ }, [
75
+ accentStorageKey,
76
+ disableStorage,
77
+ isAccentControlled,
78
+ onAccentChange
79
+ ]);
80
+ const toggleTheme = useCallback(() => {
81
+ setTheme(resolvedTheme === "dark" ? "light" : "dark");
82
+ }, [resolvedTheme, setTheme]);
83
+ const value = useMemo(() => ({
84
+ theme: currentTheme,
85
+ resolvedTheme,
86
+ accent: currentAccent,
87
+ setTheme,
88
+ setAccent,
89
+ toggleTheme
90
+ }), [
91
+ currentAccent,
92
+ currentTheme,
93
+ resolvedTheme,
94
+ setAccent,
95
+ setTheme,
96
+ toggleTheme
97
+ ]);
98
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, {
99
+ value,
100
+ children: /* @__PURE__ */ jsx(ToastProvider, {
101
+ config: toastConfig,
102
+ children
103
+ })
104
+ });
105
+ }
106
+ function useTheme() {
107
+ const context = useContext(ThemeContext);
108
+ if (!context) throw new Error("useTheme must be used within a ThemeProvider");
109
+ return context;
110
+ }
111
+ //#endregion
112
+ export { ThemeProvider, useTheme };
113
+
114
+ //# sourceMappingURL=index32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index32.js","names":[],"sources":["../src/theme/ThemeProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { UZI_THEMES, UZI_ACCENTS, THEME_STORAGE_KEY as DEFAULT_THEME_KEY, ACCENT_STORAGE_KEY as DEFAULT_ACCENT_KEY } from \"./constants\";\nimport { ToastProvider } from \"../components/toast/ToastContext\";\nimport type { ToastConfig } from \"../components/toast/types\";\n\nexport type UziTheme = typeof UZI_THEMES[number];\nexport type UziResolvedTheme = \"light\" | \"dark\";\nexport type UziAccent = typeof UZI_ACCENTS[number];\n\ntype ThemeContextValue = {\n theme: UziTheme;\n resolvedTheme: UziResolvedTheme;\n accent: UziAccent;\n setTheme: (theme: UziTheme) => void;\n setAccent: (accent: UziAccent) => void;\n toggleTheme: () => void;\n};\n\ntype ThemeProviderProps = {\n children: ReactNode;\n theme?: UziTheme;\n defaultTheme?: UziTheme;\n accent?: UziAccent;\n defaultAccent?: UziAccent;\n onThemeChange?: (theme: UziTheme) => void;\n onAccentChange?: (accent: UziAccent) => void;\n storageKey?: string;\n accentStorageKey?: string;\n disableStorage?: boolean;\n toastConfig?: ToastConfig;\n};\n\nconst THEME_STORAGE_KEY = DEFAULT_THEME_KEY;\nconst ACCENT_STORAGE_KEY = DEFAULT_ACCENT_KEY;\nconst THEME_ATTRIBUTE = \"data-uzi-theme\";\nconst ACCENT_ATTRIBUTE = \"data-uzi-accent\";\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nfunction isTheme(value: string | null): value is UziTheme {\n return UZI_THEMES.includes(value as UziTheme);\n}\n\nfunction isAccent(value: string | null): value is UziAccent {\n return UZI_ACCENTS.includes(value as UziAccent);\n}\n\nfunction getSystemTheme(): UziResolvedTheme {\n if (typeof window === \"undefined\") return \"light\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nexport function ThemeProvider({\n children,\n theme,\n defaultTheme = \"system\",\n accent,\n defaultAccent = \"blue\",\n onThemeChange,\n onAccentChange,\n storageKey = THEME_STORAGE_KEY,\n accentStorageKey = ACCENT_STORAGE_KEY,\n disableStorage = false,\n toastConfig,\n}: ThemeProviderProps) {\n const [internalTheme, setInternalTheme] = useState<UziTheme>(defaultTheme);\n const [internalAccent, setInternalAccent] = useState<UziAccent>(defaultAccent);\n const [systemTheme, setSystemTheme] = useState<UziResolvedTheme>(\"light\");\n\n useEffect(() => {\n setSystemTheme(getSystemTheme());\n if (!disableStorage) {\n const storedTheme = window.localStorage.getItem(storageKey);\n if (isTheme(storedTheme)) setInternalTheme(storedTheme);\n const storedAccent = window.localStorage.getItem(accentStorageKey);\n if (isAccent(storedAccent)) setInternalAccent(storedAccent);\n }\n }, [disableStorage, storageKey, accentStorageKey]);\n\n const isThemeControlled = theme !== undefined;\n const isAccentControlled = accent !== undefined;\n\n const currentTheme = isThemeControlled ? theme : internalTheme;\n const currentAccent = isAccentControlled ? accent : internalAccent;\n const resolvedTheme = currentTheme === \"system\" ? systemTheme : currentTheme;\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handleChange = () => setSystemTheme(mediaQuery.matches ? \"dark\" : \"light\");\n\n handleChange();\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n root.setAttribute(THEME_ATTRIBUTE, resolvedTheme);\n root.setAttribute(ACCENT_ATTRIBUTE, currentAccent);\n root.style.colorScheme = resolvedTheme;\n root.classList.toggle(\"dark\", resolvedTheme === \"dark\");\n }, [currentAccent, resolvedTheme]);\n\n const setTheme = useCallback(\n (nextTheme: UziTheme) => {\n if (!isThemeControlled) setInternalTheme(nextTheme);\n if (!disableStorage && typeof window !== \"undefined\") {\n window.localStorage.setItem(storageKey, nextTheme);\n }\n onThemeChange?.(nextTheme);\n },\n [disableStorage, isThemeControlled, onThemeChange, storageKey],\n );\n\n const setAccent = useCallback(\n (nextAccent: UziAccent) => {\n if (!isAccentControlled) setInternalAccent(nextAccent);\n if (!disableStorage && typeof window !== \"undefined\") {\n window.localStorage.setItem(accentStorageKey, nextAccent);\n }\n onAccentChange?.(nextAccent);\n },\n [accentStorageKey, disableStorage, isAccentControlled, onAccentChange],\n );\n\n const toggleTheme = useCallback(() => {\n setTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\");\n }, [resolvedTheme, setTheme]);\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme: currentTheme,\n resolvedTheme,\n accent: currentAccent,\n setTheme,\n setAccent,\n toggleTheme,\n }),\n [currentAccent, currentTheme, resolvedTheme, setAccent, setTheme, toggleTheme],\n );\n\n return (\n <ThemeContext.Provider value={value}>\n <ToastProvider config={toastConfig}>{children}</ToastProvider>\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) throw new Error(\"useTheme must be used within a ThemeProvider\");\n return context;\n}\n"],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ "use client";
2
+ const require_ToastContext = require("./index18.cjs");
3
+ const require_constants = require("./index32.cjs");
4
+ let react = require("react");
5
+ let react_jsx_runtime = require("react/jsx-runtime");
6
+ //#region src/theme/ThemeProvider.tsx
7
+ var THEME_STORAGE_KEY = require_constants.THEME_STORAGE_KEY;
8
+ var ACCENT_STORAGE_KEY = require_constants.ACCENT_STORAGE_KEY;
9
+ var THEME_ATTRIBUTE = "data-uzi-theme";
10
+ var ACCENT_ATTRIBUTE = "data-uzi-accent";
11
+ var ThemeContext = (0, react.createContext)(void 0);
12
+ function isTheme(value) {
13
+ return require_constants.UZI_THEMES.includes(value);
14
+ }
15
+ function isAccent(value) {
16
+ return require_constants.UZI_ACCENTS.includes(value);
17
+ }
18
+ function getSystemTheme() {
19
+ if (typeof window === "undefined") return "light";
20
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
21
+ }
22
+ function ThemeProvider({ children, theme, defaultTheme = "system", accent, defaultAccent = "blue", onThemeChange, onAccentChange, storageKey = THEME_STORAGE_KEY, accentStorageKey = ACCENT_STORAGE_KEY, disableStorage = false, toastConfig }) {
23
+ const [internalTheme, setInternalTheme] = (0, react.useState)(defaultTheme);
24
+ const [internalAccent, setInternalAccent] = (0, react.useState)(defaultAccent);
25
+ const [systemTheme, setSystemTheme] = (0, react.useState)("light");
26
+ (0, react.useEffect)(() => {
27
+ setSystemTheme(getSystemTheme());
28
+ if (!disableStorage) {
29
+ const storedTheme = window.localStorage.getItem(storageKey);
30
+ if (isTheme(storedTheme)) setInternalTheme(storedTheme);
31
+ const storedAccent = window.localStorage.getItem(accentStorageKey);
32
+ if (isAccent(storedAccent)) setInternalAccent(storedAccent);
33
+ }
34
+ }, [
35
+ disableStorage,
36
+ storageKey,
37
+ accentStorageKey
38
+ ]);
39
+ const isThemeControlled = theme !== void 0;
40
+ const isAccentControlled = accent !== void 0;
41
+ const currentTheme = isThemeControlled ? theme : internalTheme;
42
+ const currentAccent = isAccentControlled ? accent : internalAccent;
43
+ const resolvedTheme = currentTheme === "system" ? systemTheme : currentTheme;
44
+ (0, react.useEffect)(() => {
45
+ if (typeof window === "undefined") return;
46
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
47
+ const handleChange = () => setSystemTheme(mediaQuery.matches ? "dark" : "light");
48
+ handleChange();
49
+ mediaQuery.addEventListener("change", handleChange);
50
+ return () => mediaQuery.removeEventListener("change", handleChange);
51
+ }, []);
52
+ (0, react.useEffect)(() => {
53
+ if (typeof document === "undefined") return;
54
+ const root = document.documentElement;
55
+ root.setAttribute(THEME_ATTRIBUTE, resolvedTheme);
56
+ root.setAttribute(ACCENT_ATTRIBUTE, currentAccent);
57
+ root.style.colorScheme = resolvedTheme;
58
+ root.classList.toggle("dark", resolvedTheme === "dark");
59
+ }, [currentAccent, resolvedTheme]);
60
+ const setTheme = (0, react.useCallback)((nextTheme) => {
61
+ if (!isThemeControlled) setInternalTheme(nextTheme);
62
+ if (!disableStorage && typeof window !== "undefined") window.localStorage.setItem(storageKey, nextTheme);
63
+ onThemeChange?.(nextTheme);
64
+ }, [
65
+ disableStorage,
66
+ isThemeControlled,
67
+ onThemeChange,
68
+ storageKey
69
+ ]);
70
+ const setAccent = (0, react.useCallback)((nextAccent) => {
71
+ if (!isAccentControlled) setInternalAccent(nextAccent);
72
+ if (!disableStorage && typeof window !== "undefined") window.localStorage.setItem(accentStorageKey, nextAccent);
73
+ onAccentChange?.(nextAccent);
74
+ }, [
75
+ accentStorageKey,
76
+ disableStorage,
77
+ isAccentControlled,
78
+ onAccentChange
79
+ ]);
80
+ const toggleTheme = (0, react.useCallback)(() => {
81
+ setTheme(resolvedTheme === "dark" ? "light" : "dark");
82
+ }, [resolvedTheme, setTheme]);
83
+ const value = (0, react.useMemo)(() => ({
84
+ theme: currentTheme,
85
+ resolvedTheme,
86
+ accent: currentAccent,
87
+ setTheme,
88
+ setAccent,
89
+ toggleTheme
90
+ }), [
91
+ currentAccent,
92
+ currentTheme,
93
+ resolvedTheme,
94
+ setAccent,
95
+ setTheme,
96
+ toggleTheme
97
+ ]);
98
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ThemeContext.Provider, {
99
+ value,
100
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_ToastContext.ToastProvider, {
101
+ config: toastConfig,
102
+ children
103
+ })
104
+ });
105
+ }
106
+ function useTheme() {
107
+ const context = (0, react.useContext)(ThemeContext);
108
+ if (!context) throw new Error("useTheme must be used within a ThemeProvider");
109
+ return context;
110
+ }
111
+ //#endregion
112
+ exports.ThemeProvider = ThemeProvider;
113
+ exports.useTheme = useTheme;
114
+
115
+ //# sourceMappingURL=index33.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index33.cjs","names":[],"sources":["../src/theme/ThemeProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n type ReactNode,\n} from \"react\";\nimport { UZI_THEMES, UZI_ACCENTS, THEME_STORAGE_KEY as DEFAULT_THEME_KEY, ACCENT_STORAGE_KEY as DEFAULT_ACCENT_KEY } from \"./constants\";\nimport { ToastProvider } from \"../components/toast/ToastContext\";\nimport type { ToastConfig } from \"../components/toast/types\";\n\nexport type UziTheme = typeof UZI_THEMES[number];\nexport type UziResolvedTheme = \"light\" | \"dark\";\nexport type UziAccent = typeof UZI_ACCENTS[number];\n\ntype ThemeContextValue = {\n theme: UziTheme;\n resolvedTheme: UziResolvedTheme;\n accent: UziAccent;\n setTheme: (theme: UziTheme) => void;\n setAccent: (accent: UziAccent) => void;\n toggleTheme: () => void;\n};\n\ntype ThemeProviderProps = {\n children: ReactNode;\n theme?: UziTheme;\n defaultTheme?: UziTheme;\n accent?: UziAccent;\n defaultAccent?: UziAccent;\n onThemeChange?: (theme: UziTheme) => void;\n onAccentChange?: (accent: UziAccent) => void;\n storageKey?: string;\n accentStorageKey?: string;\n disableStorage?: boolean;\n toastConfig?: ToastConfig;\n};\n\nconst THEME_STORAGE_KEY = DEFAULT_THEME_KEY;\nconst ACCENT_STORAGE_KEY = DEFAULT_ACCENT_KEY;\nconst THEME_ATTRIBUTE = \"data-uzi-theme\";\nconst ACCENT_ATTRIBUTE = \"data-uzi-accent\";\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nfunction isTheme(value: string | null): value is UziTheme {\n return UZI_THEMES.includes(value as UziTheme);\n}\n\nfunction isAccent(value: string | null): value is UziAccent {\n return UZI_ACCENTS.includes(value as UziAccent);\n}\n\nfunction getSystemTheme(): UziResolvedTheme {\n if (typeof window === \"undefined\") return \"light\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\nexport function ThemeProvider({\n children,\n theme,\n defaultTheme = \"system\",\n accent,\n defaultAccent = \"blue\",\n onThemeChange,\n onAccentChange,\n storageKey = THEME_STORAGE_KEY,\n accentStorageKey = ACCENT_STORAGE_KEY,\n disableStorage = false,\n toastConfig,\n}: ThemeProviderProps) {\n const [internalTheme, setInternalTheme] = useState<UziTheme>(defaultTheme);\n const [internalAccent, setInternalAccent] = useState<UziAccent>(defaultAccent);\n const [systemTheme, setSystemTheme] = useState<UziResolvedTheme>(\"light\");\n\n useEffect(() => {\n setSystemTheme(getSystemTheme());\n if (!disableStorage) {\n const storedTheme = window.localStorage.getItem(storageKey);\n if (isTheme(storedTheme)) setInternalTheme(storedTheme);\n const storedAccent = window.localStorage.getItem(accentStorageKey);\n if (isAccent(storedAccent)) setInternalAccent(storedAccent);\n }\n }, [disableStorage, storageKey, accentStorageKey]);\n\n const isThemeControlled = theme !== undefined;\n const isAccentControlled = accent !== undefined;\n\n const currentTheme = isThemeControlled ? theme : internalTheme;\n const currentAccent = isAccentControlled ? accent : internalAccent;\n const resolvedTheme = currentTheme === \"system\" ? systemTheme : currentTheme;\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n const mediaQuery = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handleChange = () => setSystemTheme(mediaQuery.matches ? \"dark\" : \"light\");\n\n handleChange();\n mediaQuery.addEventListener(\"change\", handleChange);\n return () => mediaQuery.removeEventListener(\"change\", handleChange);\n }, []);\n\n useEffect(() => {\n if (typeof document === \"undefined\") return;\n const root = document.documentElement;\n root.setAttribute(THEME_ATTRIBUTE, resolvedTheme);\n root.setAttribute(ACCENT_ATTRIBUTE, currentAccent);\n root.style.colorScheme = resolvedTheme;\n root.classList.toggle(\"dark\", resolvedTheme === \"dark\");\n }, [currentAccent, resolvedTheme]);\n\n const setTheme = useCallback(\n (nextTheme: UziTheme) => {\n if (!isThemeControlled) setInternalTheme(nextTheme);\n if (!disableStorage && typeof window !== \"undefined\") {\n window.localStorage.setItem(storageKey, nextTheme);\n }\n onThemeChange?.(nextTheme);\n },\n [disableStorage, isThemeControlled, onThemeChange, storageKey],\n );\n\n const setAccent = useCallback(\n (nextAccent: UziAccent) => {\n if (!isAccentControlled) setInternalAccent(nextAccent);\n if (!disableStorage && typeof window !== \"undefined\") {\n window.localStorage.setItem(accentStorageKey, nextAccent);\n }\n onAccentChange?.(nextAccent);\n },\n [accentStorageKey, disableStorage, isAccentControlled, onAccentChange],\n );\n\n const toggleTheme = useCallback(() => {\n setTheme(resolvedTheme === \"dark\" ? \"light\" : \"dark\");\n }, [resolvedTheme, setTheme]);\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme: currentTheme,\n resolvedTheme,\n accent: currentAccent,\n setTheme,\n setAccent,\n toggleTheme,\n }),\n [currentAccent, currentTheme, resolvedTheme, setAccent, setTheme, toggleTheme],\n );\n\n return (\n <ThemeContext.Provider value={value}>\n <ToastProvider config={toastConfig}>{children}</ToastProvider>\n </ThemeContext.Provider>\n );\n}\n\nexport function useTheme() {\n const context = useContext(ThemeContext);\n if (!context) throw new Error(\"useTheme must be used within a ThemeProvider\");\n return context;\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ //#region src/components/theme-toggle-button/theme-toggle-button.module.css
2
+ var withLabel = "uzi-theme-toggle-button-module__withLabel__KqtDj";
3
+ var theme_toggle_button_module_default = { withLabel };
4
+ //#endregion
5
+ export { theme_toggle_button_module_default as default, withLabel };
6
+
7
+ //# sourceMappingURL=index33.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index33.js","names":[],"sources":["../src/components/theme-toggle-button/theme-toggle-button.module.css"],"sourcesContent":[".withLabel {\n padding-left: 12px;\n padding-right: 12px;\n}\n"],"mappings":""}
@@ -0,0 +1,8 @@
1
+ //#region src/components/theme-toggle-button/theme-toggle-button.module.css
2
+ var withLabel = "uzi-theme-toggle-button-module__withLabel__KqtDj";
3
+ var theme_toggle_button_module_default = { withLabel };
4
+ //#endregion
5
+ exports.default = theme_toggle_button_module_default;
6
+ exports.withLabel = withLabel;
7
+
8
+ //# sourceMappingURL=index34.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index34.cjs","names":[],"sources":["../src/components/theme-toggle-button/theme-toggle-button.module.css"],"sourcesContent":[".withLabel {\n padding-left: 12px;\n padding-right: 12px;\n}\n"],"mappings":""}
@@ -0,0 +1,66 @@
1
+ "use client";
2
+ import { cx } from "./index3.js";
3
+ import { Button } from "./index5.js";
4
+ import { useTheme } from "./index32.js";
5
+ import theme_toggle_button_module_default from "./index33.js";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/theme-toggle-button/ThemeToggleButton.tsx
8
+ function MoonIcon() {
9
+ return /* @__PURE__ */ jsx("svg", {
10
+ viewBox: "0 0 24 24",
11
+ "aria-hidden": "true",
12
+ width: "16",
13
+ height: "16",
14
+ fill: "none",
15
+ children: /* @__PURE__ */ jsx("path", {
16
+ d: "M20 15.2A8.5 8.5 0 0 1 8.8 4 9 9 0 1 0 20 15.2Z",
17
+ stroke: "currentColor",
18
+ strokeWidth: "1.8",
19
+ strokeLinecap: "round",
20
+ strokeLinejoin: "round"
21
+ })
22
+ });
23
+ }
24
+ function SunIcon() {
25
+ return /* @__PURE__ */ jsxs("svg", {
26
+ viewBox: "0 0 24 24",
27
+ "aria-hidden": "true",
28
+ width: "16",
29
+ height: "16",
30
+ fill: "none",
31
+ children: [/* @__PURE__ */ jsx("circle", {
32
+ cx: "12",
33
+ cy: "12",
34
+ r: "4",
35
+ stroke: "currentColor",
36
+ strokeWidth: "1.8"
37
+ }), /* @__PURE__ */ jsx("path", {
38
+ d: "M12 2.75v2.5M12 18.75v2.5M21.25 12h-2.5M5.25 12h-2.5M18.54 5.46l-1.77 1.77M7.23 16.77l-1.77 1.77M18.54 18.54l-1.77-1.77M7.23 7.23 5.46 5.46",
39
+ stroke: "currentColor",
40
+ strokeWidth: "1.8",
41
+ strokeLinecap: "round"
42
+ })]
43
+ });
44
+ }
45
+ function ThemeToggleButton({ showLabel = false, lightLabel = "Light mode", darkLabel = "Dark mode", className, onClick, ...rest }) {
46
+ const { resolvedTheme, toggleTheme } = useTheme();
47
+ const nextThemeLabel = resolvedTheme === "dark" ? lightLabel : darkLabel;
48
+ return /* @__PURE__ */ jsxs(Button, {
49
+ type: "button",
50
+ variant: "ghost",
51
+ size: showLabel ? "sm" : "icon",
52
+ className: cx(showLabel && theme_toggle_button_module_default.withLabel, className),
53
+ "aria-label": `Switch to ${nextThemeLabel.toLowerCase()}`,
54
+ title: `Switch to ${nextThemeLabel.toLowerCase()}`,
55
+ onClick: (event) => {
56
+ onClick?.(event);
57
+ if (!event.defaultPrevented) toggleTheme();
58
+ },
59
+ ...rest,
60
+ children: [resolvedTheme === "dark" ? /* @__PURE__ */ jsx(SunIcon, {}) : /* @__PURE__ */ jsx(MoonIcon, {}), showLabel && /* @__PURE__ */ jsx("span", { children: nextThemeLabel })]
61
+ });
62
+ }
63
+ //#endregion
64
+ export { ThemeToggleButton };
65
+
66
+ //# sourceMappingURL=index34.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index34.js","names":[],"sources":["../src/components/theme-toggle-button/ThemeToggleButton.tsx"],"sourcesContent":["\"use client\";\n\nimport type { ButtonHTMLAttributes } from \"react\";\nimport { Button } from \"../button/Button\";\nimport { useTheme } from \"../../theme/ThemeProvider\";\nimport { cx } from \"../../utils/cx\";\nimport styles from \"./theme-toggle-button.module.css\";\n\nexport type ThemeToggleButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\"\n> & {\n showLabel?: boolean;\n lightLabel?: string;\n darkLabel?: string;\n};\n\nfunction MoonIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" width=\"16\" height=\"16\" fill=\"none\">\n <path\n d=\"M20 15.2A8.5 8.5 0 0 1 8.8 4 9 9 0 1 0 20 15.2Z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nfunction SunIcon() {\n return (\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" width=\"16\" height=\"16\" fill=\"none\">\n <circle cx=\"12\" cy=\"12\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n <path\n d=\"M12 2.75v2.5M12 18.75v2.5M21.25 12h-2.5M5.25 12h-2.5M18.54 5.46l-1.77 1.77M7.23 16.77l-1.77 1.77M18.54 18.54l-1.77-1.77M7.23 7.23 5.46 5.46\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n}\n\nexport function ThemeToggleButton({\n showLabel = false,\n lightLabel = \"Light mode\",\n darkLabel = \"Dark mode\",\n className,\n onClick,\n ...rest\n}: ThemeToggleButtonProps) {\n const { resolvedTheme, toggleTheme } = useTheme();\n const nextThemeLabel = resolvedTheme === \"dark\" ? lightLabel : darkLabel;\n\n return (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size={showLabel ? \"sm\" : \"icon\"}\n className={cx(showLabel && styles.withLabel, className)}\n aria-label={`Switch to ${nextThemeLabel.toLowerCase()}`}\n title={`Switch to ${nextThemeLabel.toLowerCase()}`}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) toggleTheme();\n }}\n {...rest}\n >\n {resolvedTheme === \"dark\" ? <SunIcon /> : <MoonIcon />}\n {showLabel && <span>{nextThemeLabel}</span>}\n </Button>\n );\n}\n"],"mappings":";;;;;;;AAiBA,SAAS,WAAW;CAClB,OACE,oBAAC,OAAD;EAAK,SAAQ;EAAY,eAAY;EAAO,OAAM;EAAK,QAAO;EAAK,MAAK;YACtE,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;EAChB,CAAA;CACE,CAAA;AAET;AAEA,SAAS,UAAU;CACjB,OACE,qBAAC,OAAD;EAAK,SAAQ;EAAY,eAAY;EAAO,OAAM;EAAK,QAAO;EAAK,MAAK;YAAxE,CACE,oBAAC,UAAD;GAAQ,IAAG;GAAK,IAAG;GAAK,GAAE;GAAI,QAAO;GAAe,aAAY;EAAO,CAAA,GACvE,oBAAC,QAAD;GACE,GAAE;GACF,QAAO;GACP,aAAY;GACZ,eAAc;EACf,CAAA,CACE;;AAET;AAEA,SAAgB,kBAAkB,EAChC,YAAY,OACZ,aAAa,cACb,YAAY,aACZ,WACA,SACA,GAAG,QACsB;CACzB,MAAM,EAAE,eAAe,gBAAgB,SAAS;CAChD,MAAM,iBAAiB,kBAAkB,SAAS,aAAa;CAE/D,OACE,qBAAC,QAAD;EACE,MAAK;EACL,SAAQ;EACR,MAAM,YAAY,OAAO;EACzB,WAAW,GAAG,aAAa,mCAAO,WAAW,SAAS;EACtD,cAAY,aAAa,eAAe,YAAY;EACpD,OAAO,aAAa,eAAe,YAAY;EAC/C,UAAU,UAAU;GAClB,UAAU,KAAK;GACf,IAAI,CAAC,MAAM,kBAAkB,YAAY;EAC3C;EACA,GAAI;YAXN,CAaG,kBAAkB,SAAS,oBAAC,SAAD,CAAU,CAAA,IAAI,oBAAC,UAAD,CAAW,CAAA,GACpD,aAAa,oBAAC,QAAD,EAAA,UAAO,eAAqB,CAAA,CACpC;;AAEZ"}
@@ -0,0 +1,66 @@
1
+ "use client";
2
+ const require_cx = require("./index4.cjs");
3
+ const require_Button = require("./index6.cjs");
4
+ const require_ThemeProvider = require("./index33.cjs");
5
+ const require_theme_toggle_button_module = require("./index34.cjs");
6
+ let react_jsx_runtime = require("react/jsx-runtime");
7
+ //#region src/components/theme-toggle-button/ThemeToggleButton.tsx
8
+ function MoonIcon() {
9
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
10
+ viewBox: "0 0 24 24",
11
+ "aria-hidden": "true",
12
+ width: "16",
13
+ height: "16",
14
+ fill: "none",
15
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
16
+ d: "M20 15.2A8.5 8.5 0 0 1 8.8 4 9 9 0 1 0 20 15.2Z",
17
+ stroke: "currentColor",
18
+ strokeWidth: "1.8",
19
+ strokeLinecap: "round",
20
+ strokeLinejoin: "round"
21
+ })
22
+ });
23
+ }
24
+ function SunIcon() {
25
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
26
+ viewBox: "0 0 24 24",
27
+ "aria-hidden": "true",
28
+ width: "16",
29
+ height: "16",
30
+ fill: "none",
31
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
32
+ cx: "12",
33
+ cy: "12",
34
+ r: "4",
35
+ stroke: "currentColor",
36
+ strokeWidth: "1.8"
37
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
38
+ d: "M12 2.75v2.5M12 18.75v2.5M21.25 12h-2.5M5.25 12h-2.5M18.54 5.46l-1.77 1.77M7.23 16.77l-1.77 1.77M18.54 18.54l-1.77-1.77M7.23 7.23 5.46 5.46",
39
+ stroke: "currentColor",
40
+ strokeWidth: "1.8",
41
+ strokeLinecap: "round"
42
+ })]
43
+ });
44
+ }
45
+ function ThemeToggleButton({ showLabel = false, lightLabel = "Light mode", darkLabel = "Dark mode", className, onClick, ...rest }) {
46
+ const { resolvedTheme, toggleTheme } = require_ThemeProvider.useTheme();
47
+ const nextThemeLabel = resolvedTheme === "dark" ? lightLabel : darkLabel;
48
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_Button.Button, {
49
+ type: "button",
50
+ variant: "ghost",
51
+ size: showLabel ? "sm" : "icon",
52
+ className: require_cx.cx(showLabel && require_theme_toggle_button_module.default.withLabel, className),
53
+ "aria-label": `Switch to ${nextThemeLabel.toLowerCase()}`,
54
+ title: `Switch to ${nextThemeLabel.toLowerCase()}`,
55
+ onClick: (event) => {
56
+ onClick?.(event);
57
+ if (!event.defaultPrevented) toggleTheme();
58
+ },
59
+ ...rest,
60
+ children: [resolvedTheme === "dark" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SunIcon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MoonIcon, {}), showLabel && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: nextThemeLabel })]
61
+ });
62
+ }
63
+ //#endregion
64
+ exports.ThemeToggleButton = ThemeToggleButton;
65
+
66
+ //# sourceMappingURL=index35.cjs.map