@salesmind-ai/design-system 0.3.2 → 0.3.4

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 (215) hide show
  1. package/dist/{SectionShell-BfBw5q0Y.d.cts → SectionShell-GlglHCzz.d.cts} +1 -0
  2. package/dist/{SectionShell-BfBw5q0Y.d.ts → SectionShell-GlglHCzz.d.ts} +1 -0
  3. package/dist/StatsSection-B8iD9L-o.d.ts +68 -0
  4. package/dist/StatsSection-wgd8Vge1.d.cts +68 -0
  5. package/dist/admin/index.cjs +2928 -68
  6. package/dist/admin/index.cjs.map +1 -1
  7. package/dist/admin/index.js +2915 -5
  8. package/dist/admin/index.js.map +1 -1
  9. package/dist/blog/index.cjs +1064 -53
  10. package/dist/blog/index.cjs.map +1 -1
  11. package/dist/blog/index.d.cts +1 -1
  12. package/dist/blog/index.d.ts +1 -1
  13. package/dist/blog/index.js +1054 -8
  14. package/dist/blog/index.js.map +1 -1
  15. package/dist/charts/index.cjs +2694 -46
  16. package/dist/charts/index.cjs.map +1 -1
  17. package/dist/charts/index.js +2680 -3
  18. package/dist/charts/index.js.map +1 -1
  19. package/dist/core/index.cjs +4333 -807
  20. package/dist/core/index.cjs.map +1 -1
  21. package/dist/core/index.js +4130 -14
  22. package/dist/core/index.js.map +1 -1
  23. package/dist/i18n/index.cjs +558 -86
  24. package/dist/i18n/index.cjs.map +1 -1
  25. package/dist/i18n/index.js +544 -1
  26. package/dist/i18n/index.js.map +1 -1
  27. package/dist/index.cjs +17140 -1432
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.css +24 -13
  30. package/dist/index.css.map +1 -1
  31. package/dist/index.d.cts +2 -2
  32. package/dist/index.d.ts +2 -2
  33. package/dist/index.js +16785 -31
  34. package/dist/index.js.map +1 -1
  35. package/dist/marketing/index.cjs +3072 -142
  36. package/dist/marketing/index.cjs.map +1 -1
  37. package/dist/marketing/index.d.cts +1 -1
  38. package/dist/marketing/index.d.ts +1 -1
  39. package/dist/marketing/index.js +3042 -11
  40. package/dist/marketing/index.js.map +1 -1
  41. package/dist/motion/index.cjs +1222 -26
  42. package/dist/motion/index.cjs.map +1 -1
  43. package/dist/motion/index.js +1215 -2
  44. package/dist/motion/index.js.map +1 -1
  45. package/dist/nav/index.cjs +1518 -101
  46. package/dist/nav/index.cjs.map +1 -1
  47. package/dist/nav/index.css +24 -13
  48. package/dist/nav/index.css.map +1 -1
  49. package/dist/nav/index.js +1498 -4
  50. package/dist/nav/index.js.map +1 -1
  51. package/dist/report/index.cjs +2403 -171
  52. package/dist/report/index.cjs.map +1 -1
  53. package/dist/report/index.js +2363 -3
  54. package/dist/report/index.js.map +1 -1
  55. package/dist/sections/index.cjs +382 -28
  56. package/dist/sections/index.cjs.map +1 -1
  57. package/dist/sections/index.d.cts +15 -69
  58. package/dist/sections/index.d.ts +15 -69
  59. package/dist/sections/index.js +376 -4
  60. package/dist/sections/index.js.map +1 -1
  61. package/dist/social-proof/index.cjs +1250 -53
  62. package/dist/social-proof/index.cjs.map +1 -1
  63. package/dist/social-proof/index.d.cts +1 -1
  64. package/dist/social-proof/index.d.ts +1 -1
  65. package/dist/social-proof/index.js +1235 -6
  66. package/dist/social-proof/index.js.map +1 -1
  67. package/dist/theme/index.cjs +565 -38
  68. package/dist/theme/index.cjs.map +1 -1
  69. package/dist/theme/index.js +555 -2
  70. package/dist/theme/index.js.map +1 -1
  71. package/dist/web/client/index.cjs +491 -38
  72. package/dist/web/client/index.cjs.map +1 -1
  73. package/dist/web/client/index.js +483 -4
  74. package/dist/web/client/index.js.map +1 -1
  75. package/dist/web/index.cjs +1346 -158
  76. package/dist/web/index.cjs.map +1 -1
  77. package/dist/web/index.js +1305 -9
  78. package/dist/web/index.js.map +1 -1
  79. package/dist/web/server/index.cjs +563 -26
  80. package/dist/web/server/index.cjs.map +1 -1
  81. package/dist/web/server/index.js +560 -1
  82. package/dist/web/server/index.js.map +1 -1
  83. package/package.json +11 -1
  84. package/dist/chunk-2GARWEJK.js +0 -17
  85. package/dist/chunk-2GARWEJK.js.map +0 -1
  86. package/dist/chunk-3NKRFUAR.js +0 -37
  87. package/dist/chunk-3NKRFUAR.js.map +0 -1
  88. package/dist/chunk-3TGSIILM.cjs +0 -201
  89. package/dist/chunk-3TGSIILM.cjs.map +0 -1
  90. package/dist/chunk-4GM5BGBN.cjs +0 -801
  91. package/dist/chunk-4GM5BGBN.cjs.map +0 -1
  92. package/dist/chunk-5LGDEZWY.cjs +0 -2434
  93. package/dist/chunk-5LGDEZWY.cjs.map +0 -1
  94. package/dist/chunk-6H4DSTXR.js +0 -786
  95. package/dist/chunk-6H4DSTXR.js.map +0 -1
  96. package/dist/chunk-6UNG76Y2.js +0 -153
  97. package/dist/chunk-6UNG76Y2.js.map +0 -1
  98. package/dist/chunk-7PX2AZ6Y.js +0 -39
  99. package/dist/chunk-7PX2AZ6Y.js.map +0 -1
  100. package/dist/chunk-B6AVAX4F.js +0 -1415
  101. package/dist/chunk-B6AVAX4F.js.map +0 -1
  102. package/dist/chunk-BILT5KD3.js +0 -264
  103. package/dist/chunk-BILT5KD3.js.map +0 -1
  104. package/dist/chunk-C2BCDNAV.js +0 -24
  105. package/dist/chunk-C2BCDNAV.js.map +0 -1
  106. package/dist/chunk-CH42VPWE.cjs +0 -421
  107. package/dist/chunk-CH42VPWE.cjs.map +0 -1
  108. package/dist/chunk-CJ2MKVAF.cjs +0 -46
  109. package/dist/chunk-CJ2MKVAF.cjs.map +0 -1
  110. package/dist/chunk-DP74LUXG.cjs +0 -98
  111. package/dist/chunk-DP74LUXG.cjs.map +0 -1
  112. package/dist/chunk-E7D6EKJ4.cjs +0 -44
  113. package/dist/chunk-E7D6EKJ4.cjs.map +0 -1
  114. package/dist/chunk-ECXBTUH6.cjs +0 -584
  115. package/dist/chunk-ECXBTUH6.cjs.map +0 -1
  116. package/dist/chunk-EFRAP5ES.js +0 -157
  117. package/dist/chunk-EFRAP5ES.js.map +0 -1
  118. package/dist/chunk-F6YYWMME.js +0 -485
  119. package/dist/chunk-F6YYWMME.js.map +0 -1
  120. package/dist/chunk-FAFAP4L5.js +0 -183
  121. package/dist/chunk-FAFAP4L5.js.map +0 -1
  122. package/dist/chunk-GUZIMHWS.js +0 -1608
  123. package/dist/chunk-GUZIMHWS.js.map +0 -1
  124. package/dist/chunk-H2Y6BSTL.cjs +0 -69
  125. package/dist/chunk-H2Y6BSTL.cjs.map +0 -1
  126. package/dist/chunk-HN4PHABT.js +0 -126
  127. package/dist/chunk-HN4PHABT.js.map +0 -1
  128. package/dist/chunk-HRENHNDJ.js +0 -211
  129. package/dist/chunk-HRENHNDJ.js.map +0 -1
  130. package/dist/chunk-I75BFEYT.cjs +0 -2561
  131. package/dist/chunk-I75BFEYT.cjs.map +0 -1
  132. package/dist/chunk-IFRATNLU.js +0 -562
  133. package/dist/chunk-IFRATNLU.js.map +0 -1
  134. package/dist/chunk-IYPXJ6YC.cjs +0 -69
  135. package/dist/chunk-IYPXJ6YC.cjs.map +0 -1
  136. package/dist/chunk-JPJN4YBC.js +0 -409
  137. package/dist/chunk-JPJN4YBC.js.map +0 -1
  138. package/dist/chunk-KBA2LFBG.js +0 -62
  139. package/dist/chunk-KBA2LFBG.js.map +0 -1
  140. package/dist/chunk-KCKUSU2M.cjs +0 -166
  141. package/dist/chunk-KCKUSU2M.cjs.map +0 -1
  142. package/dist/chunk-KJ2OXQF4.js +0 -287
  143. package/dist/chunk-KJ2OXQF4.js.map +0 -1
  144. package/dist/chunk-KNQEIU7O.cjs +0 -1202
  145. package/dist/chunk-KNQEIU7O.cjs.map +0 -1
  146. package/dist/chunk-KVGSVGRK.cjs +0 -569
  147. package/dist/chunk-KVGSVGRK.cjs.map +0 -1
  148. package/dist/chunk-L352JRV6.cjs +0 -105
  149. package/dist/chunk-L352JRV6.cjs.map +0 -1
  150. package/dist/chunk-LJADZITX.cjs +0 -298
  151. package/dist/chunk-LJADZITX.cjs.map +0 -1
  152. package/dist/chunk-LMJPWXTZ.cjs +0 -194
  153. package/dist/chunk-LMJPWXTZ.cjs.map +0 -1
  154. package/dist/chunk-LOWEAQST.js +0 -701
  155. package/dist/chunk-LOWEAQST.js.map +0 -1
  156. package/dist/chunk-MDB2WCRQ.cjs +0 -137
  157. package/dist/chunk-MDB2WCRQ.cjs.map +0 -1
  158. package/dist/chunk-MQDEE7HC.cjs +0 -283
  159. package/dist/chunk-MQDEE7HC.cjs.map +0 -1
  160. package/dist/chunk-MQRB634A.cjs +0 -34
  161. package/dist/chunk-MQRB634A.cjs.map +0 -1
  162. package/dist/chunk-MTI27RDV.js +0 -185
  163. package/dist/chunk-MTI27RDV.js.map +0 -1
  164. package/dist/chunk-MU6GW5ZV.js +0 -2317
  165. package/dist/chunk-MU6GW5ZV.js.map +0 -1
  166. package/dist/chunk-NN3TUHIH.js +0 -28
  167. package/dist/chunk-NN3TUHIH.js.map +0 -1
  168. package/dist/chunk-NT4LBP7D.cjs +0 -111
  169. package/dist/chunk-NT4LBP7D.cjs.map +0 -1
  170. package/dist/chunk-OLV7OD3X.cjs +0 -502
  171. package/dist/chunk-OLV7OD3X.cjs.map +0 -1
  172. package/dist/chunk-OXNXEQY7.js +0 -2538
  173. package/dist/chunk-OXNXEQY7.js.map +0 -1
  174. package/dist/chunk-P5BOFE5A.js +0 -546
  175. package/dist/chunk-P5BOFE5A.js.map +0 -1
  176. package/dist/chunk-Q2MFGYTE.cjs +0 -1449
  177. package/dist/chunk-Q2MFGYTE.cjs.map +0 -1
  178. package/dist/chunk-Q75DBVDY.cjs +0 -68
  179. package/dist/chunk-Q75DBVDY.cjs.map +0 -1
  180. package/dist/chunk-REQ5Q6ZI.js +0 -1022
  181. package/dist/chunk-REQ5Q6ZI.js.map +0 -1
  182. package/dist/chunk-SICKWUWB.js +0 -62
  183. package/dist/chunk-SICKWUWB.js.map +0 -1
  184. package/dist/chunk-T343CCH5.js +0 -1190
  185. package/dist/chunk-T343CCH5.js.map +0 -1
  186. package/dist/chunk-TEC62D4A.cjs +0 -1624
  187. package/dist/chunk-TEC62D4A.cjs.map +0 -1
  188. package/dist/chunk-TW5JB35D.js +0 -2122
  189. package/dist/chunk-TW5JB35D.js.map +0 -1
  190. package/dist/chunk-VC5LMUVQ.cjs +0 -20
  191. package/dist/chunk-VC5LMUVQ.cjs.map +0 -1
  192. package/dist/chunk-VM7WFMKI.cjs +0 -76
  193. package/dist/chunk-VM7WFMKI.cjs.map +0 -1
  194. package/dist/chunk-W2WTP6HS.cjs +0 -233
  195. package/dist/chunk-W2WTP6HS.cjs.map +0 -1
  196. package/dist/chunk-WH7PYHZY.cjs +0 -35
  197. package/dist/chunk-WH7PYHZY.cjs.map +0 -1
  198. package/dist/chunk-XQZVY7JJ.cjs +0 -717
  199. package/dist/chunk-XQZVY7JJ.cjs.map +0 -1
  200. package/dist/chunk-XU3OMQ7V.js +0 -98
  201. package/dist/chunk-XU3OMQ7V.js.map +0 -1
  202. package/dist/chunk-XWPDRMZG.js +0 -62
  203. package/dist/chunk-XWPDRMZG.js.map +0 -1
  204. package/dist/chunk-Y3CPKNB7.js +0 -67
  205. package/dist/chunk-Y3CPKNB7.js.map +0 -1
  206. package/dist/chunk-YNVRDD2P.js +0 -98
  207. package/dist/chunk-YNVRDD2P.js.map +0 -1
  208. package/dist/chunk-YSYR54XR.js +0 -92
  209. package/dist/chunk-YSYR54XR.js.map +0 -1
  210. package/dist/chunk-YTYDQBVY.cjs +0 -162
  211. package/dist/chunk-YTYDQBVY.cjs.map +0 -1
  212. package/dist/chunk-ZDLOA2UT.cjs +0 -1042
  213. package/dist/chunk-ZDLOA2UT.cjs.map +0 -1
  214. package/dist/chunk-ZWUKRCOJ.cjs +0 -2162
  215. package/dist/chunk-ZWUKRCOJ.cjs.map +0 -1
@@ -1,5 +1,558 @@
1
1
  "use client";
2
- export { ColorPicker, ThemeSelector, VoidBackground } from '../chunk-EFRAP5ES.js';
3
- export { AppearancePanel, AppearanceProvider, hexToRgb, initializeAppearance, prefersReducedMotion, useAppearance } from '../chunk-JPJN4YBC.js';
2
+ import React2, { createContext, useId, useContext, useState, useEffect, useCallback } from 'react';
3
+ import { jsxs, jsx } from 'react/jsx-runtime';
4
+ import { Sun, Moon } from 'lucide-react';
5
+ import clsx2 from 'clsx';
6
+
7
+ // src/theme/AppearanceProvider.tsx
8
+ var STORAGE_KEY = "void-appearance-settings";
9
+ var DEFAULT_SETTINGS = {
10
+ theme: "dark",
11
+ brand: "default",
12
+ navPlacement: "left",
13
+ density: "comfortable",
14
+ radius: "playful",
15
+ customColor: "#f97316"
16
+ // Default orange as fallback
17
+ };
18
+ function hexToRgb(hex) {
19
+ const cleanHex = hex.replace(/^#/, "");
20
+ const r = parseInt(cleanHex.substring(0, 2), 16);
21
+ const g = parseInt(cleanHex.substring(2, 4), 16);
22
+ const b = parseInt(cleanHex.substring(4, 6), 16);
23
+ if (isNaN(r) || isNaN(g) || isNaN(b)) {
24
+ return "249, 115, 22";
25
+ }
26
+ return `${r}, ${g}, ${b}`;
27
+ }
28
+ function generateSecondaryColor(hex) {
29
+ const cleanHex = hex.replace(/^#/, "");
30
+ const r = parseInt(cleanHex.substring(0, 2), 16);
31
+ const g = parseInt(cleanHex.substring(2, 4), 16);
32
+ const b = parseInt(cleanHex.substring(4, 6), 16);
33
+ if (isNaN(r) || isNaN(g) || isNaN(b)) {
34
+ return "255, 208, 0";
35
+ }
36
+ const secondary = {
37
+ r: Math.min(255, g + 50),
38
+ g: Math.min(255, b + 100),
39
+ b: Math.min(255, r)
40
+ };
41
+ return `${secondary.r}, ${secondary.g}, ${secondary.b}`;
42
+ }
43
+ function loadSettings() {
44
+ if (typeof window === "undefined") return DEFAULT_SETTINGS;
45
+ try {
46
+ const stored = localStorage.getItem(STORAGE_KEY);
47
+ if (stored) {
48
+ const parsed = JSON.parse(stored);
49
+ return {
50
+ theme: parsed.theme || DEFAULT_SETTINGS.theme,
51
+ brand: parsed.brand || DEFAULT_SETTINGS.brand,
52
+ navPlacement: parsed.navPlacement || DEFAULT_SETTINGS.navPlacement,
53
+ density: parsed.density || DEFAULT_SETTINGS.density,
54
+ radius: parsed.radius || DEFAULT_SETTINGS.radius,
55
+ customColor: parsed.customColor || DEFAULT_SETTINGS.customColor
56
+ };
57
+ }
58
+ } catch {
59
+ }
60
+ return {
61
+ ...DEFAULT_SETTINGS,
62
+ theme: "dark"
63
+ };
64
+ }
65
+ function saveSettings(settings) {
66
+ if (typeof window === "undefined") return;
67
+ try {
68
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(settings));
69
+ } catch {
70
+ }
71
+ }
72
+ function applySettings(settings) {
73
+ if (typeof document === "undefined") return;
74
+ const root = document.documentElement;
75
+ root.setAttribute("data-theme", settings.theme);
76
+ root.setAttribute("data-brand", settings.brand);
77
+ root.setAttribute("data-nav", settings.navPlacement);
78
+ root.setAttribute("data-density", settings.density);
79
+ root.setAttribute("data-radius", settings.radius);
80
+ if (settings.brand === "custom") {
81
+ const primaryRgb = hexToRgb(settings.customColor);
82
+ const secondaryRgb = generateSecondaryColor(settings.customColor);
83
+ root.style.setProperty("--custom-accent-rgb", primaryRgb);
84
+ root.style.setProperty("--custom-accent2-rgb", secondaryRgb);
85
+ } else {
86
+ root.style.removeProperty("--custom-accent-rgb");
87
+ root.style.removeProperty("--custom-accent2-rgb");
88
+ }
89
+ }
90
+ function prefersReducedMotion() {
91
+ if (typeof window === "undefined") return false;
92
+ return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
93
+ }
94
+ var AppearanceContext = createContext(null);
95
+ function AppearanceProvider({
96
+ initialSettings,
97
+ disablePersistence = false,
98
+ children
99
+ }) {
100
+ const [settings, setSettings] = useState(() => ({
101
+ ...DEFAULT_SETTINGS,
102
+ ...initialSettings
103
+ }));
104
+ const [hydrated, setHydrated] = useState(false);
105
+ useEffect(() => {
106
+ if (!disablePersistence) {
107
+ const loaded = loadSettings();
108
+ setSettings({
109
+ ...loaded,
110
+ // initialSettings still take priority over localStorage
111
+ ...initialSettings
112
+ });
113
+ }
114
+ setHydrated(true);
115
+ }, []);
116
+ useEffect(() => {
117
+ applySettings(settings);
118
+ if (!disablePersistence && hydrated) {
119
+ saveSettings(settings);
120
+ }
121
+ }, [settings, disablePersistence, hydrated]);
122
+ useEffect(() => {
123
+ if (typeof window === "undefined") return;
124
+ const mediaQuery = window.matchMedia("(prefers-color-scheme: light)");
125
+ const handleChange = (e) => {
126
+ setSettings((prev) => {
127
+ if (prev.theme === "light-contrast" || prev.theme === "dark-contrast") {
128
+ return prev;
129
+ }
130
+ return {
131
+ ...prev,
132
+ theme: e.matches ? "light" : "dark"
133
+ };
134
+ });
135
+ };
136
+ mediaQuery.addEventListener("change", handleChange);
137
+ return () => mediaQuery.removeEventListener("change", handleChange);
138
+ }, []);
139
+ useEffect(() => {
140
+ if (typeof window === "undefined") return;
141
+ const mediaQuery = window.matchMedia("(prefers-reduced-motion: reduce)");
142
+ const handleChange = () => {
143
+ applySettings(settings);
144
+ };
145
+ mediaQuery.addEventListener("change", handleChange);
146
+ return () => mediaQuery.removeEventListener("change", handleChange);
147
+ }, [settings]);
148
+ const setTheme = useCallback((theme) => {
149
+ setSettings((prev) => ({ ...prev, theme }));
150
+ }, []);
151
+ const setBrand = useCallback((brand) => {
152
+ setSettings((prev) => ({ ...prev, brand }));
153
+ }, []);
154
+ const setNavPlacement = useCallback((navPlacement) => {
155
+ setSettings((prev) => ({ ...prev, navPlacement }));
156
+ }, []);
157
+ const setDensity = useCallback((density) => {
158
+ setSettings((prev) => ({ ...prev, density }));
159
+ }, []);
160
+ const setRadius = useCallback((radius) => {
161
+ setSettings((prev) => ({ ...prev, radius }));
162
+ }, []);
163
+ const setCustomColor = useCallback((customColor) => {
164
+ setSettings((prev) => ({ ...prev, customColor, brand: "custom" }));
165
+ }, []);
166
+ const setAppearance = useCallback((partial) => {
167
+ setSettings((prev) => ({ ...prev, ...partial }));
168
+ }, []);
169
+ const resetToDefaults = useCallback(() => {
170
+ setSettings(DEFAULT_SETTINGS);
171
+ }, []);
172
+ const contextValue = {
173
+ ...settings,
174
+ setTheme,
175
+ setBrand,
176
+ setNavPlacement,
177
+ setDensity,
178
+ setRadius,
179
+ setCustomColor,
180
+ setAppearance,
181
+ resetToDefaults
182
+ };
183
+ return /* @__PURE__ */ jsx(AppearanceContext.Provider, { value: contextValue, children });
184
+ }
185
+ function useAppearance() {
186
+ const context = useContext(AppearanceContext);
187
+ if (!context) {
188
+ throw new Error("useAppearance must be used within an AppearanceProvider");
189
+ }
190
+ return context;
191
+ }
192
+ function initializeAppearance(settings) {
193
+ const loaded = loadSettings();
194
+ const merged = { ...loaded, ...settings };
195
+ applySettings(merged);
196
+ }
197
+ var ThemeSelector = ({ className, style }) => {
198
+ const { theme, setTheme } = useAppearance();
199
+ const handleThemeChange = (newTheme) => {
200
+ setTheme(newTheme);
201
+ };
202
+ return /* @__PURE__ */ jsxs("div", { className: clsx2("ds-theme-selector", className), style, role: "group", "aria-label": "Theme Selector", children: [
203
+ /* @__PURE__ */ jsxs(
204
+ "button",
205
+ {
206
+ type: "button",
207
+ className: clsx2("ds-theme-selector__btn", { "ds-theme-selector__btn--active": theme === "light" }),
208
+ onClick: () => handleThemeChange("light"),
209
+ "aria-pressed": theme === "light",
210
+ children: [
211
+ /* @__PURE__ */ jsx(Sun, { className: "ds-theme-selector__icon" }),
212
+ /* @__PURE__ */ jsx("span", { className: "ds-theme-selector__label", children: "Light" })
213
+ ]
214
+ }
215
+ ),
216
+ /* @__PURE__ */ jsxs(
217
+ "button",
218
+ {
219
+ type: "button",
220
+ className: clsx2("ds-theme-selector__btn", { "ds-theme-selector__btn--active": theme === "light-contrast" }),
221
+ onClick: () => handleThemeChange("light-contrast"),
222
+ "aria-pressed": theme === "light-contrast",
223
+ children: [
224
+ /* @__PURE__ */ jsx(Sun, { className: "ds-theme-selector__icon" }),
225
+ /* @__PURE__ */ jsx("span", { className: "ds-theme-selector__label", children: "Light HC" })
226
+ ]
227
+ }
228
+ ),
229
+ /* @__PURE__ */ jsxs(
230
+ "button",
231
+ {
232
+ type: "button",
233
+ className: clsx2("ds-theme-selector__btn", { "ds-theme-selector__btn--active": theme === "dark" }),
234
+ onClick: () => handleThemeChange("dark"),
235
+ "aria-pressed": theme === "dark",
236
+ children: [
237
+ /* @__PURE__ */ jsx(Moon, { className: "ds-theme-selector__icon" }),
238
+ /* @__PURE__ */ jsx("span", { className: "ds-theme-selector__label", children: "Dark" })
239
+ ]
240
+ }
241
+ ),
242
+ /* @__PURE__ */ jsxs(
243
+ "button",
244
+ {
245
+ type: "button",
246
+ className: clsx2("ds-theme-selector__btn", { "ds-theme-selector__btn--active": theme === "dark-contrast" }),
247
+ onClick: () => handleThemeChange("dark-contrast"),
248
+ "aria-pressed": theme === "dark-contrast",
249
+ children: [
250
+ /* @__PURE__ */ jsx(Moon, { className: "ds-theme-selector__icon" }),
251
+ /* @__PURE__ */ jsx("span", { className: "ds-theme-selector__label", children: "Dark HC" })
252
+ ]
253
+ }
254
+ )
255
+ ] });
256
+ };
257
+ ThemeSelector.displayName = "ThemeSelector";
258
+ var AppearancePanel = React2.forwardRef(
259
+ ({ className, labels: l }, ref) => {
260
+ const {
261
+ theme,
262
+ brand,
263
+ navPlacement,
264
+ density,
265
+ radius,
266
+ customColor,
267
+ setTheme,
268
+ setBrand,
269
+ setNavPlacement,
270
+ setDensity,
271
+ setRadius,
272
+ setCustomColor,
273
+ resetToDefaults
274
+ } = useAppearance();
275
+ const colorPickerId = useId();
276
+ const themeOptions = [
277
+ { value: "light", label: l?.themeLight ?? "Light" },
278
+ { value: "light-contrast", label: l?.themeLightContrast ?? "Light (High Contrast)" },
279
+ { value: "dark", label: l?.themeDark ?? "Dark" },
280
+ { value: "dark-contrast", label: l?.themeDarkContrast ?? "Dark (High Contrast)" }
281
+ ];
282
+ const brandOptions = [
283
+ { value: "default", label: l?.brandDefault ?? "Default", description: l?.brandDefaultDescription ?? "Warm Intelligence" },
284
+ { value: "salesmind", label: l?.brandSalesmind ?? "SalesMind", description: l?.brandSalesmindDescription ?? "Pink-red + Gold" },
285
+ { value: "custom", label: l?.brandCustom ?? "Custom", description: l?.brandCustomDescription ?? "Your color" }
286
+ ];
287
+ const navOptions = [
288
+ { value: "left", label: l?.navLeft ?? "Left Sidebar" },
289
+ { value: "right", label: l?.navRight ?? "Right Sidebar" },
290
+ { value: "bottom", label: l?.navBottom ?? "Bottom Tabs" }
291
+ ];
292
+ const densityOptions = [
293
+ { value: "comfortable", label: l?.densityComfortable ?? "Comfortable", description: l?.densityComfortableDescription ?? "Generous spacing" },
294
+ { value: "compact", label: l?.densityCompact ?? "Compact", description: l?.densityCompactDescription ?? "Higher density" }
295
+ ];
296
+ const radiusOptions = [
297
+ { value: "playful", label: l?.radiusPlayful ?? "Playful", description: l?.radiusPlayfulDescription ?? "Rounded corners" },
298
+ { value: "sharp", label: l?.radiusSharp ?? "Sharp", description: l?.radiusSharpDescription ?? "Technical feel" }
299
+ ];
300
+ return /* @__PURE__ */ jsxs("div", { ref, className: clsx2("ds-appearance-panel", className), children: [
301
+ /* @__PURE__ */ jsx("h3", { className: "ds-appearance-panel__title", children: l?.title ?? "Appearance Settings" }),
302
+ /* @__PURE__ */ jsxs("fieldset", { className: "ds-appearance-panel__section", children: [
303
+ /* @__PURE__ */ jsx("legend", { className: "ds-appearance-panel__legend", children: l?.themeHeading ?? "Theme" }),
304
+ /* @__PURE__ */ jsx("div", { className: "ds-appearance-panel__options", children: themeOptions.map((option) => /* @__PURE__ */ jsxs(
305
+ "label",
306
+ {
307
+ className: clsx2(
308
+ "ds-appearance-panel__option",
309
+ theme === option.value && "ds-appearance-panel__option--active"
310
+ ),
311
+ children: [
312
+ /* @__PURE__ */ jsx(
313
+ "input",
314
+ {
315
+ type: "radio",
316
+ name: "theme",
317
+ value: option.value,
318
+ checked: theme === option.value,
319
+ onChange: () => setTheme(option.value),
320
+ className: "ds-appearance-panel__radio"
321
+ }
322
+ ),
323
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__option-label", children: option.label })
324
+ ]
325
+ },
326
+ option.value
327
+ )) })
328
+ ] }),
329
+ /* @__PURE__ */ jsxs("fieldset", { className: "ds-appearance-panel__section", children: [
330
+ /* @__PURE__ */ jsx("legend", { className: "ds-appearance-panel__legend", children: l?.brandHeading ?? "Brand" }),
331
+ /* @__PURE__ */ jsx("div", { className: "ds-appearance-panel__options", children: brandOptions.map((option) => /* @__PURE__ */ jsxs(
332
+ "label",
333
+ {
334
+ className: clsx2(
335
+ "ds-appearance-panel__option",
336
+ brand === option.value && "ds-appearance-panel__option--active"
337
+ ),
338
+ children: [
339
+ /* @__PURE__ */ jsx(
340
+ "input",
341
+ {
342
+ type: "radio",
343
+ name: "brand",
344
+ value: option.value,
345
+ checked: brand === option.value,
346
+ onChange: () => setBrand(option.value),
347
+ className: "ds-appearance-panel__radio"
348
+ }
349
+ ),
350
+ /* @__PURE__ */ jsxs("span", { className: "ds-appearance-panel__option-content", children: [
351
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__option-label", children: option.label }),
352
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__option-description", children: option.description })
353
+ ] })
354
+ ]
355
+ },
356
+ option.value
357
+ )) }),
358
+ brand === "custom" && /* @__PURE__ */ jsxs("div", { className: "ds-appearance-panel__color-picker", children: [
359
+ /* @__PURE__ */ jsx("label", { htmlFor: colorPickerId, className: "ds-appearance-panel__color-label", children: l?.accentColorLabel ?? "Accent Color" }),
360
+ /* @__PURE__ */ jsxs("div", { className: "ds-appearance-panel__color-input-wrapper", children: [
361
+ /* @__PURE__ */ jsx(
362
+ "input",
363
+ {
364
+ type: "color",
365
+ id: colorPickerId,
366
+ value: customColor,
367
+ onChange: (e) => setCustomColor(e.target.value),
368
+ className: "ds-appearance-panel__color-input"
369
+ }
370
+ ),
371
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__color-value", children: customColor.toUpperCase() })
372
+ ] })
373
+ ] })
374
+ ] }),
375
+ /* @__PURE__ */ jsxs("fieldset", { className: "ds-appearance-panel__section", children: [
376
+ /* @__PURE__ */ jsx("legend", { className: "ds-appearance-panel__legend", children: l?.densityHeading ?? "Density" }),
377
+ /* @__PURE__ */ jsx("div", { className: "ds-appearance-panel__options ds-appearance-panel__options--row", children: densityOptions.map((option) => /* @__PURE__ */ jsxs(
378
+ "label",
379
+ {
380
+ className: clsx2(
381
+ "ds-appearance-panel__option",
382
+ "ds-appearance-panel__option--toggle",
383
+ density === option.value && "ds-appearance-panel__option--active"
384
+ ),
385
+ children: [
386
+ /* @__PURE__ */ jsx(
387
+ "input",
388
+ {
389
+ type: "radio",
390
+ name: "density",
391
+ value: option.value,
392
+ checked: density === option.value,
393
+ onChange: () => setDensity(option.value),
394
+ className: "ds-appearance-panel__radio"
395
+ }
396
+ ),
397
+ /* @__PURE__ */ jsxs("span", { className: "ds-appearance-panel__option-content", children: [
398
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__option-label", children: option.label }),
399
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__option-description", children: option.description })
400
+ ] })
401
+ ]
402
+ },
403
+ option.value
404
+ )) })
405
+ ] }),
406
+ /* @__PURE__ */ jsxs("fieldset", { className: "ds-appearance-panel__section", children: [
407
+ /* @__PURE__ */ jsx("legend", { className: "ds-appearance-panel__legend", children: l?.geometryHeading ?? "Geometry" }),
408
+ /* @__PURE__ */ jsx("div", { className: "ds-appearance-panel__options ds-appearance-panel__options--row", children: radiusOptions.map((option) => /* @__PURE__ */ jsxs(
409
+ "label",
410
+ {
411
+ className: clsx2(
412
+ "ds-appearance-panel__option",
413
+ "ds-appearance-panel__option--toggle",
414
+ radius === option.value && "ds-appearance-panel__option--active"
415
+ ),
416
+ children: [
417
+ /* @__PURE__ */ jsx(
418
+ "input",
419
+ {
420
+ type: "radio",
421
+ name: "radius",
422
+ value: option.value,
423
+ checked: radius === option.value,
424
+ onChange: () => setRadius(option.value),
425
+ className: "ds-appearance-panel__radio"
426
+ }
427
+ ),
428
+ /* @__PURE__ */ jsxs("span", { className: "ds-appearance-panel__option-content", children: [
429
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__option-label", children: option.label }),
430
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__option-description", children: option.description })
431
+ ] })
432
+ ]
433
+ },
434
+ option.value
435
+ )) })
436
+ ] }),
437
+ /* @__PURE__ */ jsxs("fieldset", { className: "ds-appearance-panel__section", children: [
438
+ /* @__PURE__ */ jsx("legend", { className: "ds-appearance-panel__legend", children: l?.navHeading ?? "Navigation Layout" }),
439
+ /* @__PURE__ */ jsx("div", { className: "ds-appearance-panel__options", children: navOptions.map((option) => /* @__PURE__ */ jsxs(
440
+ "label",
441
+ {
442
+ className: clsx2(
443
+ "ds-appearance-panel__option",
444
+ navPlacement === option.value && "ds-appearance-panel__option--active"
445
+ ),
446
+ children: [
447
+ /* @__PURE__ */ jsx(
448
+ "input",
449
+ {
450
+ type: "radio",
451
+ name: "nav",
452
+ value: option.value,
453
+ checked: navPlacement === option.value,
454
+ onChange: () => setNavPlacement(option.value),
455
+ className: "ds-appearance-panel__radio"
456
+ }
457
+ ),
458
+ /* @__PURE__ */ jsx("span", { className: "ds-appearance-panel__option-label", children: option.label })
459
+ ]
460
+ },
461
+ option.value
462
+ )) })
463
+ ] }),
464
+ /* @__PURE__ */ jsx("button", { type: "button", onClick: resetToDefaults, className: "ds-appearance-panel__reset", children: l?.resetLabel ?? "Reset to Defaults" })
465
+ ] });
466
+ }
467
+ );
468
+ AppearancePanel.displayName = "AppearancePanel";
469
+ var BRAND_PRESETS = [
470
+ { value: "default", label: "Warm Intelligence", color: "#f97316" },
471
+ { value: "salesmind", label: "SalesMind", color: "#ff005a" }
472
+ ];
473
+ var ColorPicker = React2.forwardRef(
474
+ ({ className, style }, ref) => {
475
+ const { brand, setBrand, customColor, setCustomColor } = useAppearance();
476
+ return /* @__PURE__ */ jsxs(
477
+ "div",
478
+ {
479
+ ref,
480
+ className: clsx2("ds-color-picker", className),
481
+ style,
482
+ role: "group",
483
+ "aria-label": "Brand Color",
484
+ children: [
485
+ BRAND_PRESETS.map(({ value, label, color }) => /* @__PURE__ */ jsx(
486
+ "button",
487
+ {
488
+ type: "button",
489
+ className: clsx2("ds-color-picker__swatch", {
490
+ "ds-color-picker__swatch--active": brand === value
491
+ }),
492
+ onClick: () => setBrand(value),
493
+ "aria-label": `Switch to ${label} color scheme`,
494
+ "aria-pressed": brand === value,
495
+ title: label,
496
+ children: /* @__PURE__ */ jsx(
497
+ "span",
498
+ {
499
+ className: "ds-color-picker__dot",
500
+ style: { "--swatch-color": color }
501
+ }
502
+ )
503
+ },
504
+ value
505
+ )),
506
+ /* @__PURE__ */ jsxs(
507
+ "label",
508
+ {
509
+ className: clsx2("ds-color-picker__swatch", "ds-color-picker__swatch--custom", {
510
+ "ds-color-picker__swatch--active": brand === "custom"
511
+ }),
512
+ title: `Custom: ${customColor}`,
513
+ children: [
514
+ /* @__PURE__ */ jsx(
515
+ "span",
516
+ {
517
+ className: "ds-color-picker__dot",
518
+ style: { "--swatch-color": customColor }
519
+ }
520
+ ),
521
+ /* @__PURE__ */ jsx(
522
+ "input",
523
+ {
524
+ type: "color",
525
+ value: customColor,
526
+ onChange: (e) => setCustomColor(e.target.value),
527
+ className: "ds-color-picker__native-input",
528
+ "aria-label": "Pick a custom accent color"
529
+ }
530
+ )
531
+ ]
532
+ }
533
+ )
534
+ ]
535
+ }
536
+ );
537
+ }
538
+ );
539
+ ColorPicker.displayName = "ColorPicker";
540
+ var VoidBackground = React2.forwardRef(
541
+ ({ showGrid = true, showGrain = true, className, children }, ref) => {
542
+ return /* @__PURE__ */ jsxs("div", { ref, className: clsx2("void", className), children: [
543
+ /* @__PURE__ */ jsx("div", { className: "void__base", "aria-hidden": "true" }),
544
+ /* @__PURE__ */ jsxs("div", { className: "void__orbs", "aria-hidden": "true", children: [
545
+ /* @__PURE__ */ jsx("div", { className: "void__orb void__orb--warm" }),
546
+ /* @__PURE__ */ jsx("div", { className: "void__orb void__orb--purple" })
547
+ ] }),
548
+ showGrid && /* @__PURE__ */ jsx("div", { className: "void__grid", "aria-hidden": "true" }),
549
+ showGrain && /* @__PURE__ */ jsx("div", { className: "void__grain", "aria-hidden": "true" }),
550
+ children && /* @__PURE__ */ jsx("div", { className: "void__content", children })
551
+ ] });
552
+ }
553
+ );
554
+ VoidBackground.displayName = "VoidBackground";
555
+
556
+ export { AppearancePanel, AppearanceProvider, ColorPicker, ThemeSelector, VoidBackground, hexToRgb, initializeAppearance, prefersReducedMotion, useAppearance };
4
557
  //# sourceMappingURL=out.js.map
5
558
  //# sourceMappingURL=index.js.map