@tydavidson/design-system 1.1.7 → 1.1.9

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.
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var React2 = require('react');
4
- var reactSlot = require('@radix-ui/react-slot');
5
- var classVarianceAuthority = require('class-variance-authority');
6
3
  var clsx = require('clsx');
7
4
  var tailwindMerge = require('tailwind-merge');
5
+ var React2 = require('react');
8
6
  var jsxRuntime = require('react/jsx-runtime');
9
- var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
10
7
  var iconsReact = require('@tabler/icons-react');
8
+ var reactSlot = require('@radix-ui/react-slot');
9
+ var classVarianceAuthority = require('class-variance-authority');
10
+ var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
11
11
  var TogglePrimitive = require('@radix-ui/react-toggle');
12
12
  var ToggleGroupPrimitive = require('@radix-ui/react-toggle-group');
13
13
  var SliderPrimitive = require('@radix-ui/react-slider');
@@ -17,7 +17,9 @@ var SheetPrimitive = require('@radix-ui/react-dialog');
17
17
  var cmdk = require('cmdk');
18
18
  var CollapsiblePrimitive = require('@radix-ui/react-collapsible');
19
19
  var ContextMenuPrimitive = require('@radix-ui/react-context-menu');
20
- var nextThemes = require('next-themes');
20
+ var dynamic = require('next/dynamic');
21
+
22
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
21
23
 
22
24
  function _interopNamespace(e) {
23
25
  if (e && e.__esModule) return e;
@@ -47,8 +49,17 @@ var HoverCardPrimitive__namespace = /*#__PURE__*/_interopNamespace(HoverCardPrim
47
49
  var SheetPrimitive__namespace = /*#__PURE__*/_interopNamespace(SheetPrimitive);
48
50
  var CollapsiblePrimitive__namespace = /*#__PURE__*/_interopNamespace(CollapsiblePrimitive);
49
51
  var ContextMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(ContextMenuPrimitive);
52
+ var dynamic__default = /*#__PURE__*/_interopDefault(dynamic);
50
53
 
51
- // src/components/ui/button.tsx
54
+ var __defProp = Object.defineProperty;
55
+ var __getOwnPropNames = Object.getOwnPropertyNames;
56
+ var __esm = (fn, res) => function __init() {
57
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
58
+ };
59
+ var __export = (target, all) => {
60
+ for (var name in all)
61
+ __defProp(target, name, { get: all[name], enumerable: true });
62
+ };
52
63
  function cn(...inputs) {
53
64
  return tailwindMerge.twMerge(clsx.clsx(inputs));
54
65
  }
@@ -64,6 +75,285 @@ function filterDOMProps(props, propNames) {
64
75
  propNames.forEach((name) => delete result[name]);
65
76
  return result;
66
77
  }
78
+ var init_utils = __esm({
79
+ "src/lib/utils.ts"() {
80
+ }
81
+ });
82
+
83
+ // src/themes/theme-provider.tsx
84
+ var theme_provider_exports = {};
85
+ __export(theme_provider_exports, {
86
+ ThemeProvider: () => ThemeProvider,
87
+ ThemeProviderNoSSR: () => ThemeProviderNoSSR
88
+ });
89
+ function ThemeProvider({
90
+ children,
91
+ ...props
92
+ }) {
93
+ const [NextThemesProvider, setNextThemesProvider] = React2__namespace.useState(null);
94
+ const [mounted, setMounted] = React2__namespace.useState(false);
95
+ React2__namespace.useEffect(() => {
96
+ import('next-themes').then(({ ThemeProvider: Provider }) => {
97
+ setNextThemesProvider(() => Provider);
98
+ setMounted(true);
99
+ });
100
+ }, []);
101
+ if (!mounted || !NextThemesProvider) {
102
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
103
+ }
104
+ return /* @__PURE__ */ jsxRuntime.jsx(
105
+ NextThemesProvider,
106
+ {
107
+ attribute: "class",
108
+ defaultTheme: "system",
109
+ enableSystem: true,
110
+ disableTransitionOnChange: true,
111
+ ...props,
112
+ children
113
+ }
114
+ );
115
+ }
116
+ function ThemeProviderNoSSR({
117
+ children,
118
+ ...props
119
+ }) {
120
+ const [mounted, setMounted] = React2__namespace.useState(false);
121
+ React2__namespace.useEffect(() => {
122
+ setMounted(true);
123
+ }, []);
124
+ if (!mounted) {
125
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
126
+ }
127
+ return /* @__PURE__ */ jsxRuntime.jsx(ThemeProvider, { ...props, children });
128
+ }
129
+ var init_theme_provider = __esm({
130
+ "src/themes/theme-provider.tsx"() {
131
+ "use client";
132
+ }
133
+ });
134
+
135
+ // src/lib/theme-utils.ts
136
+ exports.mapColorToShadcnVariant = void 0; exports.mapVariantToShadcnVariant = void 0; exports.getColorVariantClasses = void 0; exports.isDarkTheme = void 0;
137
+ var init_theme_utils = __esm({
138
+ "src/lib/theme-utils.ts"() {
139
+ exports.mapColorToShadcnVariant = (color) => {
140
+ switch (color) {
141
+ case "brand":
142
+ return "default";
143
+ case "error":
144
+ return "destructive";
145
+ case "warning":
146
+ case "success":
147
+ return "secondary";
148
+ // Will need additional classes
149
+ default:
150
+ return "default";
151
+ }
152
+ };
153
+ exports.mapVariantToShadcnVariant = (variant) => {
154
+ switch (variant) {
155
+ case "primary":
156
+ return "default";
157
+ case "secondary":
158
+ return "outline";
159
+ case "tertiary":
160
+ return "ghost";
161
+ default:
162
+ return "default";
163
+ }
164
+ };
165
+ exports.getColorVariantClasses = (color, variant) => {
166
+ const colorVariantMap = {
167
+ primary: {
168
+ brand: "bg-brand-600 hover:bg-brand-700 text-white focus-visible:ring-brand-500",
169
+ error: "bg-error-600 hover:bg-error-700 text-white focus-visible:ring-error-500",
170
+ warning: "bg-warning-600 hover:bg-warning-700 text-white focus-visible:ring-warning-500",
171
+ success: "bg-success-600 hover:bg-success-700 text-white focus-visible:ring-success-500"
172
+ },
173
+ secondary: {
174
+ brand: "border-brand-300 text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
175
+ error: "border-error-300 text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
176
+ warning: "border-warning-300 text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
177
+ success: "border-success-300 text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
178
+ },
179
+ tertiary: {
180
+ brand: "text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
181
+ error: "text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
182
+ warning: "text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
183
+ success: "text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
184
+ }
185
+ };
186
+ return colorVariantMap[variant]?.[color] || "";
187
+ };
188
+ exports.isDarkTheme = (theme, systemTheme) => {
189
+ if (theme === "system") {
190
+ return systemTheme === "dark";
191
+ }
192
+ return theme === "dark";
193
+ };
194
+ }
195
+ });
196
+ function useTheme() {
197
+ const [themeData, setThemeData] = React2__namespace.useState({
198
+ theme: "system",
199
+ setTheme: (theme) => {
200
+ },
201
+ resolvedTheme: "light",
202
+ isDark: false
203
+ });
204
+ const [mounted, setMounted] = React2__namespace.useState(false);
205
+ React2__namespace.useEffect(() => {
206
+ import('next-themes').then(({ useTheme: useNextTheme }) => {
207
+ const { theme, setTheme, resolvedTheme, systemTheme } = useNextTheme();
208
+ const isDark = exports.isDarkTheme(theme, systemTheme);
209
+ setThemeData({
210
+ theme: theme || "system",
211
+ setTheme,
212
+ resolvedTheme: resolvedTheme || "light",
213
+ isDark
214
+ });
215
+ setMounted(true);
216
+ });
217
+ }, []);
218
+ if (!mounted) {
219
+ return {
220
+ theme: "system",
221
+ setTheme: (theme) => {
222
+ },
223
+ resolvedTheme: "light",
224
+ isDark: false
225
+ };
226
+ }
227
+ return themeData;
228
+ }
229
+ function useThemeServer() {
230
+ return {
231
+ theme: "system",
232
+ setTheme: (theme) => {
233
+ },
234
+ resolvedTheme: "light",
235
+ isDark: false
236
+ };
237
+ }
238
+ function ThemeContextProvider({
239
+ children
240
+ }) {
241
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
242
+ }
243
+ var init_theme_context = __esm({
244
+ "src/themes/theme-context.tsx"() {
245
+ "use client";
246
+ init_theme_utils();
247
+ }
248
+ });
249
+ function ThemeToggle({
250
+ className,
251
+ variant = "icon",
252
+ size = "md",
253
+ ...props
254
+ }) {
255
+ const { theme, setTheme, resolvedTheme } = useTheme();
256
+ const [mounted, setMounted] = React2__namespace.useState(false);
257
+ React2__namespace.useEffect(() => {
258
+ setMounted(true);
259
+ }, []);
260
+ if (!mounted) return null;
261
+ const toggleTheme = () => {
262
+ setTheme(resolvedTheme === "dark" ? "light" : "dark");
263
+ };
264
+ const iconSize = {
265
+ sm: 16,
266
+ md: 20,
267
+ lg: 24
268
+ };
269
+ const sizeClasses = {
270
+ sm: "h-8 w-8",
271
+ md: "h-10 w-10",
272
+ lg: "h-12 w-12"
273
+ };
274
+ const textSizeClasses = {
275
+ sm: "text-xs",
276
+ md: "text-sm",
277
+ lg: "text-base"
278
+ };
279
+ if (variant === "icon") {
280
+ return /* @__PURE__ */ jsxRuntime.jsx(
281
+ "button",
282
+ {
283
+ type: "button",
284
+ onClick: toggleTheme,
285
+ className: cn(
286
+ "inline-flex items-center justify-center rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground",
287
+ sizeClasses[size],
288
+ className
289
+ ),
290
+ "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
291
+ ...props,
292
+ children: resolvedTheme === "dark" ? /* @__PURE__ */ jsxRuntime.jsx(iconsReact.IconSun, { size: iconSize[size], stroke: 1.5 }) : /* @__PURE__ */ jsxRuntime.jsx(iconsReact.IconMoon, { size: iconSize[size], stroke: 1.5 })
293
+ }
294
+ );
295
+ }
296
+ if (variant === "button") {
297
+ return /* @__PURE__ */ jsxRuntime.jsx(
298
+ "button",
299
+ {
300
+ type: "button",
301
+ onClick: toggleTheme,
302
+ className: cn(
303
+ "inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2",
304
+ textSizeClasses[size],
305
+ "hover:bg-accent hover:text-accent-foreground",
306
+ className
307
+ ),
308
+ ...props,
309
+ children: resolvedTheme === "dark" ? "Light Mode" : "Dark Mode"
310
+ }
311
+ );
312
+ }
313
+ return /* @__PURE__ */ jsxRuntime.jsx(
314
+ "button",
315
+ {
316
+ type: "button",
317
+ onClick: toggleTheme,
318
+ className: cn(
319
+ "inline-flex items-center justify-center rounded-md px-3 py-2 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
320
+ textSizeClasses[size],
321
+ resolvedTheme === "dark" ? "bg-accent text-accent-foreground hover:bg-accent/80" : "bg-muted text-muted-foreground hover:bg-muted/80",
322
+ className
323
+ ),
324
+ "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
325
+ ...props,
326
+ children: resolvedTheme === "dark" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center", children: [
327
+ /* @__PURE__ */ jsxRuntime.jsx(iconsReact.IconSun, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
328
+ "Light"
329
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center", children: [
330
+ /* @__PURE__ */ jsxRuntime.jsx(iconsReact.IconMoon, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
331
+ "Dark"
332
+ ] })
333
+ }
334
+ );
335
+ }
336
+ var init_theme_toggle = __esm({
337
+ "src/components/ui/theme-toggle/theme-toggle.tsx"() {
338
+ "use client";
339
+ init_theme_context();
340
+ init_utils();
341
+ }
342
+ });
343
+
344
+ // src/components/ui/theme-toggle/index.ts
345
+ var theme_toggle_exports = {};
346
+ __export(theme_toggle_exports, {
347
+ ThemeToggle: () => ThemeToggle
348
+ });
349
+ var init_theme_toggle2 = __esm({
350
+ "src/components/ui/theme-toggle/index.ts"() {
351
+ init_theme_toggle();
352
+ }
353
+ });
354
+
355
+ // src/components/ui/button.tsx
356
+ init_utils();
67
357
  var buttonVariants = classVarianceAuthority.cva(
68
358
  "float-button inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-[4px] text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
69
359
  {
@@ -168,6 +458,9 @@ var Button = React2__namespace.forwardRef(
168
458
  }
169
459
  );
170
460
  Button.displayName = "Button";
461
+
462
+ // src/components/ui/dropdown-menu/dropdown-menu.tsx
463
+ init_utils();
171
464
  var DropdownMenuRoot = DropdownMenuPrimitive__namespace.Root;
172
465
  var DropdownMenuTrigger = React2__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
173
466
  DropdownMenuPrimitive__namespace.Trigger,
@@ -349,6 +642,9 @@ var DropdownMenu = {
349
642
  SubContent: DropdownMenuSubContent,
350
643
  SubTrigger: DropdownMenuSubTrigger
351
644
  };
645
+
646
+ // src/components/typography/heading/heading.tsx
647
+ init_utils();
352
648
  var Heading = React2__namespace.forwardRef(
353
649
  ({
354
650
  level = 1,
@@ -417,6 +713,9 @@ var Heading = React2__namespace.forwardRef(
417
713
  }
418
714
  );
419
715
  Heading.displayName = "Heading";
716
+
717
+ // src/components/typography/text/text.tsx
718
+ init_utils();
420
719
  var Text = React2__namespace.forwardRef(
421
720
  ({
422
721
  size = "md",
@@ -469,6 +768,9 @@ var Text = React2__namespace.forwardRef(
469
768
  }
470
769
  );
471
770
  Text.displayName = "Text";
771
+
772
+ // src/components/ui/toggle.tsx
773
+ init_utils();
472
774
  var Toggle = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
473
775
  TogglePrimitive__namespace.Root,
474
776
  {
@@ -481,6 +783,9 @@ var Toggle = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @
481
783
  }
482
784
  ));
483
785
  Toggle.displayName = TogglePrimitive__namespace.Root.displayName;
786
+
787
+ // src/components/ui/toggle-group.tsx
788
+ init_utils();
484
789
  var ToggleGroup = React2__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
485
790
  ToggleGroupPrimitive__namespace.Root,
486
791
  {
@@ -503,6 +808,9 @@ var ToggleGroupItem = React2__namespace.forwardRef(({ className, ...props }, ref
503
808
  }
504
809
  ));
505
810
  ToggleGroupItem.displayName = ToggleGroupPrimitive__namespace.Item.displayName;
811
+
812
+ // src/components/ui/slider.tsx
813
+ init_utils();
506
814
  var Slider = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(
507
815
  SliderPrimitive__namespace.Root,
508
816
  {
@@ -519,6 +827,9 @@ var Slider = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @
519
827
  }
520
828
  ));
521
829
  Slider.displayName = SliderPrimitive__namespace.Root.displayName;
830
+
831
+ // src/components/ui/popover.tsx
832
+ init_utils();
522
833
  var Popover = PopoverPrimitive__namespace.Root;
523
834
  var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
524
835
  var PopoverAnchor = PopoverPrimitive__namespace.Anchor;
@@ -536,6 +847,9 @@ var PopoverContent = React2__namespace.forwardRef(({ className, align = "center"
536
847
  }
537
848
  ) }));
538
849
  PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
850
+
851
+ // src/components/ui/hover-card.tsx
852
+ init_utils();
539
853
  var HoverCard = HoverCardPrimitive__namespace.Root;
540
854
  var HoverCardTrigger = HoverCardPrimitive__namespace.Trigger;
541
855
  var HoverCardContent = React2__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -552,6 +866,9 @@ var HoverCardContent = React2__namespace.forwardRef(({ className, align = "cente
552
866
  }
553
867
  ));
554
868
  HoverCardContent.displayName = HoverCardPrimitive__namespace.Content.displayName;
869
+
870
+ // src/components/ui/sheet.tsx
871
+ init_utils();
555
872
  var Sheet = SheetPrimitive__namespace.Root;
556
873
  var SheetTrigger = SheetPrimitive__namespace.Trigger;
557
874
  var SheetClose = SheetPrimitive__namespace.Close;
@@ -645,6 +962,12 @@ var SheetDescription = React2__namespace.forwardRef(({ className, ...props }, re
645
962
  }
646
963
  ));
647
964
  SheetDescription.displayName = SheetPrimitive__namespace.Description.displayName;
965
+
966
+ // src/components/ui/command.tsx
967
+ init_utils();
968
+
969
+ // src/components/ui/dialog.tsx
970
+ init_utils();
648
971
  var Dialog = SheetPrimitive__namespace.Root;
649
972
  var DialogPortal = SheetPrimitive__namespace.Portal;
650
973
  var DialogOverlay = React2__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -802,6 +1125,9 @@ CommandShortcut.displayName = "CommandShortcut";
802
1125
  var Collapsible = CollapsiblePrimitive__namespace.Root;
803
1126
  var CollapsibleTrigger2 = CollapsiblePrimitive__namespace.CollapsibleTrigger;
804
1127
  var CollapsibleContent2 = CollapsiblePrimitive__namespace.CollapsibleContent;
1128
+
1129
+ // src/components/ui/context-menu.tsx
1130
+ init_utils();
805
1131
  var ContextMenu = ContextMenuPrimitive__namespace.Root;
806
1132
  var ContextMenuTrigger = ContextMenuPrimitive__namespace.Trigger;
807
1133
  var ContextMenuGroup = ContextMenuPrimitive__namespace.Group;
@@ -1222,6 +1548,9 @@ var EmailFooter = ({ children }) => /* @__PURE__ */ jsxRuntime.jsx("div", { styl
1222
1548
  ] })
1223
1549
  ] }) });
1224
1550
 
1551
+ // src/index.ts
1552
+ init_utils();
1553
+
1225
1554
  // src/tokens/colors.ts
1226
1555
  var colors = {
1227
1556
  // Base colors
@@ -1493,182 +1822,46 @@ var tokens = {
1493
1822
  radius,
1494
1823
  shadows
1495
1824
  };
1496
- function ThemeProvider({
1497
- children,
1498
- ...props
1499
- }) {
1500
- return /* @__PURE__ */ jsxRuntime.jsx(
1501
- nextThemes.ThemeProvider,
1502
- {
1503
- attribute: "class",
1504
- defaultTheme: "system",
1505
- enableSystem: true,
1506
- disableTransitionOnChange: true,
1507
- ...props,
1508
- children
1509
- }
1510
- );
1511
- }
1512
1825
 
1513
- // src/lib/theme-utils.ts
1514
- var mapColorToShadcnVariant = (color) => {
1515
- switch (color) {
1516
- case "brand":
1517
- return "default";
1518
- case "error":
1519
- return "destructive";
1520
- case "warning":
1521
- case "success":
1522
- return "secondary";
1523
- // Will need additional classes
1524
- default:
1525
- return "default";
1826
+ // src/themes/index.ts
1827
+ init_theme_provider();
1828
+ init_theme_context();
1829
+ init_theme_toggle2();
1830
+ var DynamicThemeProvider = dynamic__default.default(
1831
+ () => Promise.resolve().then(() => (init_theme_provider(), theme_provider_exports)).then((mod) => ({ default: mod.ThemeProvider })),
1832
+ {
1833
+ ssr: false,
1834
+ loading: () => /* @__PURE__ */ jsxRuntime.jsx("div", { style: { visibility: "hidden" } })
1526
1835
  }
1527
- };
1528
- var mapVariantToShadcnVariant = (variant) => {
1529
- switch (variant) {
1530
- case "primary":
1531
- return "default";
1532
- case "secondary":
1533
- return "outline";
1534
- case "tertiary":
1535
- return "ghost";
1536
- default:
1537
- return "default";
1836
+ );
1837
+ var DynamicThemeProviderNoSSR = dynamic__default.default(
1838
+ () => Promise.resolve().then(() => (init_theme_provider(), theme_provider_exports)).then((mod) => ({ default: mod.ThemeProviderNoSSR })),
1839
+ {
1840
+ ssr: false,
1841
+ loading: () => /* @__PURE__ */ jsxRuntime.jsx("div", { style: { visibility: "hidden" } })
1538
1842
  }
1539
- };
1540
- var getColorVariantClasses = (color, variant) => {
1541
- const colorVariantMap = {
1542
- primary: {
1543
- brand: "bg-brand-600 hover:bg-brand-700 text-white focus-visible:ring-brand-500",
1544
- error: "bg-error-600 hover:bg-error-700 text-white focus-visible:ring-error-500",
1545
- warning: "bg-warning-600 hover:bg-warning-700 text-white focus-visible:ring-warning-500",
1546
- success: "bg-success-600 hover:bg-success-700 text-white focus-visible:ring-success-500"
1547
- },
1548
- secondary: {
1549
- brand: "border-brand-300 text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
1550
- error: "border-error-300 text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
1551
- warning: "border-warning-300 text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
1552
- success: "border-success-300 text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
1553
- },
1554
- tertiary: {
1555
- brand: "text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
1556
- error: "text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
1557
- warning: "text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
1558
- success: "text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
1559
- }
1560
- };
1561
- return colorVariantMap[variant]?.[color] || "";
1562
- };
1563
- var isDarkTheme = (theme, systemTheme) => {
1564
- if (theme === "system") {
1565
- return systemTheme === "dark";
1843
+ );
1844
+ var DynamicThemeToggle = dynamic__default.default(
1845
+ () => Promise.resolve().then(() => (init_theme_toggle2(), theme_toggle_exports)).then((mod) => ({ default: mod.ThemeToggle })),
1846
+ {
1847
+ ssr: false,
1848
+ loading: () => /* @__PURE__ */ jsxRuntime.jsx("div", { style: { visibility: "hidden" } })
1566
1849
  }
1567
- return theme === "dark";
1568
- };
1569
- function useTheme() {
1570
- const { theme, setTheme, resolvedTheme, systemTheme } = nextThemes.useTheme();
1571
- const isDark = isDarkTheme(theme, systemTheme);
1572
- return {
1573
- theme: theme || "system",
1574
- setTheme,
1575
- resolvedTheme: resolvedTheme || "light",
1576
- isDark
1577
- };
1578
- }
1579
- function ThemeContextProvider({
1580
- children
1581
- }) {
1582
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
1583
- }
1584
- function ThemeToggle({
1585
- className,
1586
- variant = "icon",
1587
- size = "md",
1850
+ );
1851
+ function SafeThemeProvider({
1852
+ children,
1853
+ noSSR = false,
1588
1854
  ...props
1589
1855
  }) {
1590
- const { theme, setTheme, resolvedTheme } = useTheme();
1591
- const [mounted, setMounted] = React2__namespace.useState(false);
1592
- React2__namespace.useEffect(() => {
1593
- setMounted(true);
1594
- }, []);
1595
- if (!mounted) return null;
1596
- const toggleTheme = () => {
1597
- setTheme(resolvedTheme === "dark" ? "light" : "dark");
1598
- };
1599
- const iconSize = {
1600
- sm: 16,
1601
- md: 20,
1602
- lg: 24
1603
- };
1604
- const sizeClasses = {
1605
- sm: "h-8 w-8",
1606
- md: "h-10 w-10",
1607
- lg: "h-12 w-12"
1608
- };
1609
- const textSizeClasses = {
1610
- sm: "text-xs",
1611
- md: "text-sm",
1612
- lg: "text-base"
1613
- };
1614
- if (variant === "icon") {
1615
- return /* @__PURE__ */ jsxRuntime.jsx(
1616
- "button",
1617
- {
1618
- type: "button",
1619
- onClick: toggleTheme,
1620
- className: cn(
1621
- "inline-flex items-center justify-center rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground",
1622
- sizeClasses[size],
1623
- className
1624
- ),
1625
- "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
1626
- ...props,
1627
- children: resolvedTheme === "dark" ? /* @__PURE__ */ jsxRuntime.jsx(iconsReact.IconSun, { size: iconSize[size], stroke: 1.5 }) : /* @__PURE__ */ jsxRuntime.jsx(iconsReact.IconMoon, { size: iconSize[size], stroke: 1.5 })
1628
- }
1629
- );
1630
- }
1631
- if (variant === "button") {
1632
- return /* @__PURE__ */ jsxRuntime.jsx(
1633
- "button",
1634
- {
1635
- type: "button",
1636
- onClick: toggleTheme,
1637
- className: cn(
1638
- "inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2",
1639
- textSizeClasses[size],
1640
- "hover:bg-accent hover:text-accent-foreground",
1641
- className
1642
- ),
1643
- ...props,
1644
- children: resolvedTheme === "dark" ? "Light Mode" : "Dark Mode"
1645
- }
1646
- );
1856
+ if (noSSR) {
1857
+ return /* @__PURE__ */ jsxRuntime.jsx(DynamicThemeProviderNoSSR, { ...props, children });
1647
1858
  }
1648
- return /* @__PURE__ */ jsxRuntime.jsx(
1649
- "button",
1650
- {
1651
- type: "button",
1652
- onClick: toggleTheme,
1653
- className: cn(
1654
- "inline-flex items-center justify-center rounded-md px-3 py-2 font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1655
- textSizeClasses[size],
1656
- resolvedTheme === "dark" ? "bg-accent text-accent-foreground hover:bg-accent/80" : "bg-muted text-muted-foreground hover:bg-muted/80",
1657
- className
1658
- ),
1659
- "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
1660
- ...props,
1661
- children: resolvedTheme === "dark" ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center", children: [
1662
- /* @__PURE__ */ jsxRuntime.jsx(iconsReact.IconSun, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
1663
- "Light"
1664
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex items-center", children: [
1665
- /* @__PURE__ */ jsxRuntime.jsx(iconsReact.IconMoon, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
1666
- "Dark"
1667
- ] })
1668
- }
1669
- );
1859
+ return /* @__PURE__ */ jsxRuntime.jsx(DynamicThemeProvider, { ...props, children });
1670
1860
  }
1671
1861
 
1862
+ // src/themes/index.ts
1863
+ init_theme_utils();
1864
+
1672
1865
  exports.Button = Button;
1673
1866
  exports.Collapsible = Collapsible;
1674
1867
  exports.CollapsibleContent = CollapsibleContent2;
@@ -1698,6 +1891,9 @@ exports.ContextMenuSubContent = ContextMenuSubContent;
1698
1891
  exports.ContextMenuSubTrigger = ContextMenuSubTrigger;
1699
1892
  exports.ContextMenuTrigger = ContextMenuTrigger;
1700
1893
  exports.DropdownMenu = DropdownMenu;
1894
+ exports.DynamicThemeProvider = DynamicThemeProvider;
1895
+ exports.DynamicThemeProviderNoSSR = DynamicThemeProviderNoSSR;
1896
+ exports.DynamicThemeToggle = DynamicThemeToggle;
1701
1897
  exports.EmailButton = EmailButton;
1702
1898
  exports.EmailCaption = EmailCaption;
1703
1899
  exports.EmailContainer = EmailContainer;
@@ -1715,6 +1911,7 @@ exports.Popover = Popover;
1715
1911
  exports.PopoverAnchor = PopoverAnchor;
1716
1912
  exports.PopoverContent = PopoverContent;
1717
1913
  exports.PopoverTrigger = PopoverTrigger;
1914
+ exports.SafeThemeProvider = SafeThemeProvider;
1718
1915
  exports.Sheet = Sheet;
1719
1916
  exports.SheetClose = SheetClose;
1720
1917
  exports.SheetContent = SheetContent;
@@ -1729,6 +1926,7 @@ exports.Slider = Slider;
1729
1926
  exports.Text = Text;
1730
1927
  exports.ThemeContextProvider = ThemeContextProvider;
1731
1928
  exports.ThemeProvider = ThemeProvider;
1929
+ exports.ThemeProviderNoSSR = ThemeProviderNoSSR;
1732
1930
  exports.ThemeToggle = ThemeToggle;
1733
1931
  exports.Toggle = Toggle;
1734
1932
  exports.ToggleGroup = ToggleGroup;
@@ -1738,16 +1936,13 @@ exports.cn = cn;
1738
1936
  exports.colors = colors;
1739
1937
  exports.filterDOMProps = filterDOMProps;
1740
1938
  exports.generateId = generateId;
1741
- exports.getColorVariantClasses = getColorVariantClasses;
1742
- exports.isDarkTheme = isDarkTheme;
1743
1939
  exports.isNotNullOrUndefined = isNotNullOrUndefined;
1744
- exports.mapColorToShadcnVariant = mapColorToShadcnVariant;
1745
- exports.mapVariantToShadcnVariant = mapVariantToShadcnVariant;
1746
1940
  exports.radius = radius;
1747
1941
  exports.shadows = shadows;
1748
1942
  exports.spacing = spacing;
1749
1943
  exports.tokens = tokens;
1750
1944
  exports.typography = typography;
1751
1945
  exports.useTheme = useTheme;
1946
+ exports.useThemeServer = useThemeServer;
1752
1947
  //# sourceMappingURL=index.js.map
1753
1948
  //# sourceMappingURL=index.js.map