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