@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.mjs CHANGED
@@ -1,11 +1,11 @@
1
- import * as React2 from 'react';
2
- import { Slot } from '@radix-ui/react-slot';
3
- import { cva } from 'class-variance-authority';
4
1
  import { clsx } from 'clsx';
5
2
  import { twMerge } from 'tailwind-merge';
3
+ import * as React2 from 'react';
6
4
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
- import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
8
5
  import { IconCheck, IconPointFilled, IconChevronRight, IconX, IconSearch, IconSun, IconMoon } from '@tabler/icons-react';
6
+ import { Slot } from '@radix-ui/react-slot';
7
+ import { cva } from 'class-variance-authority';
8
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
9
9
  import * as TogglePrimitive from '@radix-ui/react-toggle';
10
10
  import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
11
11
  import * as SliderPrimitive from '@radix-ui/react-slider';
@@ -15,9 +15,17 @@ import * as SheetPrimitive from '@radix-ui/react-dialog';
15
15
  import { Command as Command$1 } from 'cmdk';
16
16
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
17
17
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
18
- import { ThemeProvider as ThemeProvider$1, useTheme as useTheme$1 } from 'next-themes';
18
+ import dynamic from 'next/dynamic';
19
19
 
20
- // src/components/ui/button.tsx
20
+ var __defProp = Object.defineProperty;
21
+ var __getOwnPropNames = Object.getOwnPropertyNames;
22
+ var __esm = (fn, res) => function __init() {
23
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
24
+ };
25
+ var __export = (target, all) => {
26
+ for (var name in all)
27
+ __defProp(target, name, { get: all[name], enumerable: true });
28
+ };
21
29
  function cn(...inputs) {
22
30
  return twMerge(clsx(inputs));
23
31
  }
@@ -33,6 +41,285 @@ function filterDOMProps(props, propNames) {
33
41
  propNames.forEach((name) => delete result[name]);
34
42
  return result;
35
43
  }
44
+ var init_utils = __esm({
45
+ "src/lib/utils.ts"() {
46
+ }
47
+ });
48
+
49
+ // src/themes/theme-provider.tsx
50
+ var theme_provider_exports = {};
51
+ __export(theme_provider_exports, {
52
+ ThemeProvider: () => ThemeProvider,
53
+ ThemeProviderNoSSR: () => ThemeProviderNoSSR
54
+ });
55
+ function ThemeProvider({
56
+ children,
57
+ ...props
58
+ }) {
59
+ const [NextThemesProvider, setNextThemesProvider] = React2.useState(null);
60
+ const [mounted, setMounted] = React2.useState(false);
61
+ React2.useEffect(() => {
62
+ import('next-themes').then(({ ThemeProvider: Provider }) => {
63
+ setNextThemesProvider(() => Provider);
64
+ setMounted(true);
65
+ });
66
+ }, []);
67
+ if (!mounted || !NextThemesProvider) {
68
+ return /* @__PURE__ */ jsx(Fragment, { children });
69
+ }
70
+ return /* @__PURE__ */ jsx(
71
+ NextThemesProvider,
72
+ {
73
+ attribute: "class",
74
+ defaultTheme: "system",
75
+ enableSystem: true,
76
+ disableTransitionOnChange: true,
77
+ ...props,
78
+ children
79
+ }
80
+ );
81
+ }
82
+ function ThemeProviderNoSSR({
83
+ children,
84
+ ...props
85
+ }) {
86
+ const [mounted, setMounted] = React2.useState(false);
87
+ React2.useEffect(() => {
88
+ setMounted(true);
89
+ }, []);
90
+ if (!mounted) {
91
+ return /* @__PURE__ */ jsx(Fragment, { children });
92
+ }
93
+ return /* @__PURE__ */ jsx(ThemeProvider, { ...props, children });
94
+ }
95
+ var init_theme_provider = __esm({
96
+ "src/themes/theme-provider.tsx"() {
97
+ "use client";
98
+ }
99
+ });
100
+
101
+ // src/lib/theme-utils.ts
102
+ var mapColorToShadcnVariant, mapVariantToShadcnVariant, getColorVariantClasses, isDarkTheme;
103
+ var init_theme_utils = __esm({
104
+ "src/lib/theme-utils.ts"() {
105
+ mapColorToShadcnVariant = (color) => {
106
+ switch (color) {
107
+ case "brand":
108
+ return "default";
109
+ case "error":
110
+ return "destructive";
111
+ case "warning":
112
+ case "success":
113
+ return "secondary";
114
+ // Will need additional classes
115
+ default:
116
+ return "default";
117
+ }
118
+ };
119
+ mapVariantToShadcnVariant = (variant) => {
120
+ switch (variant) {
121
+ case "primary":
122
+ return "default";
123
+ case "secondary":
124
+ return "outline";
125
+ case "tertiary":
126
+ return "ghost";
127
+ default:
128
+ return "default";
129
+ }
130
+ };
131
+ getColorVariantClasses = (color, variant) => {
132
+ const colorVariantMap = {
133
+ primary: {
134
+ brand: "bg-brand-600 hover:bg-brand-700 text-white focus-visible:ring-brand-500",
135
+ error: "bg-error-600 hover:bg-error-700 text-white focus-visible:ring-error-500",
136
+ warning: "bg-warning-600 hover:bg-warning-700 text-white focus-visible:ring-warning-500",
137
+ success: "bg-success-600 hover:bg-success-700 text-white focus-visible:ring-success-500"
138
+ },
139
+ secondary: {
140
+ brand: "border-brand-300 text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
141
+ error: "border-error-300 text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
142
+ warning: "border-warning-300 text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
143
+ success: "border-success-300 text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
144
+ },
145
+ tertiary: {
146
+ brand: "text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
147
+ error: "text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
148
+ warning: "text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
149
+ success: "text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
150
+ }
151
+ };
152
+ return colorVariantMap[variant]?.[color] || "";
153
+ };
154
+ isDarkTheme = (theme, systemTheme) => {
155
+ if (theme === "system") {
156
+ return systemTheme === "dark";
157
+ }
158
+ return theme === "dark";
159
+ };
160
+ }
161
+ });
162
+ function useTheme() {
163
+ const [themeData, setThemeData] = React2.useState({
164
+ theme: "system",
165
+ setTheme: (theme) => {
166
+ },
167
+ resolvedTheme: "light",
168
+ isDark: false
169
+ });
170
+ const [mounted, setMounted] = React2.useState(false);
171
+ React2.useEffect(() => {
172
+ import('next-themes').then(({ useTheme: useNextTheme }) => {
173
+ const { theme, setTheme, resolvedTheme, systemTheme } = useNextTheme();
174
+ const isDark = isDarkTheme(theme, systemTheme);
175
+ setThemeData({
176
+ theme: theme || "system",
177
+ setTheme,
178
+ resolvedTheme: resolvedTheme || "light",
179
+ isDark
180
+ });
181
+ setMounted(true);
182
+ });
183
+ }, []);
184
+ if (!mounted) {
185
+ return {
186
+ theme: "system",
187
+ setTheme: (theme) => {
188
+ },
189
+ resolvedTheme: "light",
190
+ isDark: false
191
+ };
192
+ }
193
+ return themeData;
194
+ }
195
+ function useThemeServer() {
196
+ return {
197
+ theme: "system",
198
+ setTheme: (theme) => {
199
+ },
200
+ resolvedTheme: "light",
201
+ isDark: false
202
+ };
203
+ }
204
+ function ThemeContextProvider({
205
+ children
206
+ }) {
207
+ return /* @__PURE__ */ jsx(Fragment, { children });
208
+ }
209
+ var init_theme_context = __esm({
210
+ "src/themes/theme-context.tsx"() {
211
+ "use client";
212
+ init_theme_utils();
213
+ }
214
+ });
215
+ function ThemeToggle({
216
+ className,
217
+ variant = "icon",
218
+ size = "md",
219
+ ...props
220
+ }) {
221
+ const { theme, setTheme, resolvedTheme } = useTheme();
222
+ const [mounted, setMounted] = React2.useState(false);
223
+ React2.useEffect(() => {
224
+ setMounted(true);
225
+ }, []);
226
+ if (!mounted) return null;
227
+ const toggleTheme = () => {
228
+ setTheme(resolvedTheme === "dark" ? "light" : "dark");
229
+ };
230
+ const iconSize = {
231
+ sm: 16,
232
+ md: 20,
233
+ lg: 24
234
+ };
235
+ const sizeClasses = {
236
+ sm: "h-8 w-8",
237
+ md: "h-10 w-10",
238
+ lg: "h-12 w-12"
239
+ };
240
+ const textSizeClasses = {
241
+ sm: "text-xs",
242
+ md: "text-sm",
243
+ lg: "text-base"
244
+ };
245
+ if (variant === "icon") {
246
+ return /* @__PURE__ */ jsx(
247
+ "button",
248
+ {
249
+ type: "button",
250
+ onClick: toggleTheme,
251
+ className: cn(
252
+ "inline-flex items-center justify-center rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground",
253
+ sizeClasses[size],
254
+ className
255
+ ),
256
+ "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
257
+ ...props,
258
+ children: resolvedTheme === "dark" ? /* @__PURE__ */ jsx(IconSun, { size: iconSize[size], stroke: 1.5 }) : /* @__PURE__ */ jsx(IconMoon, { size: iconSize[size], stroke: 1.5 })
259
+ }
260
+ );
261
+ }
262
+ if (variant === "button") {
263
+ return /* @__PURE__ */ jsx(
264
+ "button",
265
+ {
266
+ type: "button",
267
+ onClick: toggleTheme,
268
+ className: cn(
269
+ "inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2",
270
+ textSizeClasses[size],
271
+ "hover:bg-accent hover:text-accent-foreground",
272
+ className
273
+ ),
274
+ ...props,
275
+ children: resolvedTheme === "dark" ? "Light Mode" : "Dark Mode"
276
+ }
277
+ );
278
+ }
279
+ return /* @__PURE__ */ jsx(
280
+ "button",
281
+ {
282
+ type: "button",
283
+ onClick: toggleTheme,
284
+ className: cn(
285
+ "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",
286
+ textSizeClasses[size],
287
+ resolvedTheme === "dark" ? "bg-accent text-accent-foreground hover:bg-accent/80" : "bg-muted text-muted-foreground hover:bg-muted/80",
288
+ className
289
+ ),
290
+ "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
291
+ ...props,
292
+ children: resolvedTheme === "dark" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
293
+ /* @__PURE__ */ jsx(IconSun, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
294
+ "Light"
295
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
296
+ /* @__PURE__ */ jsx(IconMoon, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
297
+ "Dark"
298
+ ] })
299
+ }
300
+ );
301
+ }
302
+ var init_theme_toggle = __esm({
303
+ "src/components/ui/theme-toggle/theme-toggle.tsx"() {
304
+ "use client";
305
+ init_theme_context();
306
+ init_utils();
307
+ }
308
+ });
309
+
310
+ // src/components/ui/theme-toggle/index.ts
311
+ var theme_toggle_exports = {};
312
+ __export(theme_toggle_exports, {
313
+ ThemeToggle: () => ThemeToggle
314
+ });
315
+ var init_theme_toggle2 = __esm({
316
+ "src/components/ui/theme-toggle/index.ts"() {
317
+ init_theme_toggle();
318
+ }
319
+ });
320
+
321
+ // src/components/ui/button.tsx
322
+ init_utils();
36
323
  var buttonVariants = cva(
37
324
  "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",
38
325
  {
@@ -137,6 +424,9 @@ var Button = React2.forwardRef(
137
424
  }
138
425
  );
139
426
  Button.displayName = "Button";
427
+
428
+ // src/components/ui/dropdown-menu/dropdown-menu.tsx
429
+ init_utils();
140
430
  var DropdownMenuRoot = DropdownMenuPrimitive.Root;
141
431
  var DropdownMenuTrigger = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
142
432
  DropdownMenuPrimitive.Trigger,
@@ -318,6 +608,9 @@ var DropdownMenu = {
318
608
  SubContent: DropdownMenuSubContent,
319
609
  SubTrigger: DropdownMenuSubTrigger
320
610
  };
611
+
612
+ // src/components/typography/heading/heading.tsx
613
+ init_utils();
321
614
  var Heading = React2.forwardRef(
322
615
  ({
323
616
  level = 1,
@@ -386,6 +679,9 @@ var Heading = React2.forwardRef(
386
679
  }
387
680
  );
388
681
  Heading.displayName = "Heading";
682
+
683
+ // src/components/typography/text/text.tsx
684
+ init_utils();
389
685
  var Text = React2.forwardRef(
390
686
  ({
391
687
  size = "md",
@@ -438,6 +734,9 @@ var Text = React2.forwardRef(
438
734
  }
439
735
  );
440
736
  Text.displayName = "Text";
737
+
738
+ // src/components/ui/toggle.tsx
739
+ init_utils();
441
740
  var Toggle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
442
741
  TogglePrimitive.Root,
443
742
  {
@@ -450,6 +749,9 @@ var Toggle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
450
749
  }
451
750
  ));
452
751
  Toggle.displayName = TogglePrimitive.Root.displayName;
752
+
753
+ // src/components/ui/toggle-group.tsx
754
+ init_utils();
453
755
  var ToggleGroup = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
454
756
  ToggleGroupPrimitive.Root,
455
757
  {
@@ -472,6 +774,9 @@ var ToggleGroupItem = React2.forwardRef(({ className, ...props }, ref) => /* @__
472
774
  }
473
775
  ));
474
776
  ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
777
+
778
+ // src/components/ui/slider.tsx
779
+ init_utils();
475
780
  var Slider = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
476
781
  SliderPrimitive.Root,
477
782
  {
@@ -488,6 +793,9 @@ var Slider = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
488
793
  }
489
794
  ));
490
795
  Slider.displayName = SliderPrimitive.Root.displayName;
796
+
797
+ // src/components/ui/popover.tsx
798
+ init_utils();
491
799
  var Popover = PopoverPrimitive.Root;
492
800
  var PopoverTrigger = PopoverPrimitive.Trigger;
493
801
  var PopoverAnchor = PopoverPrimitive.Anchor;
@@ -505,6 +813,9 @@ var PopoverContent = React2.forwardRef(({ className, align = "center", sideOffse
505
813
  }
506
814
  ) }));
507
815
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
816
+
817
+ // src/components/ui/hover-card.tsx
818
+ init_utils();
508
819
  var HoverCard = HoverCardPrimitive.Root;
509
820
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
510
821
  var HoverCardContent = React2.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
@@ -521,6 +832,9 @@ var HoverCardContent = React2.forwardRef(({ className, align = "center", sideOff
521
832
  }
522
833
  ));
523
834
  HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
835
+
836
+ // src/components/ui/sheet.tsx
837
+ init_utils();
524
838
  var Sheet = SheetPrimitive.Root;
525
839
  var SheetTrigger = SheetPrimitive.Trigger;
526
840
  var SheetClose = SheetPrimitive.Close;
@@ -614,6 +928,12 @@ var SheetDescription = React2.forwardRef(({ className, ...props }, ref) => /* @_
614
928
  }
615
929
  ));
616
930
  SheetDescription.displayName = SheetPrimitive.Description.displayName;
931
+
932
+ // src/components/ui/command.tsx
933
+ init_utils();
934
+
935
+ // src/components/ui/dialog.tsx
936
+ init_utils();
617
937
  var Dialog = SheetPrimitive.Root;
618
938
  var DialogPortal = SheetPrimitive.Portal;
619
939
  var DialogOverlay = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
@@ -771,6 +1091,9 @@ CommandShortcut.displayName = "CommandShortcut";
771
1091
  var Collapsible = CollapsiblePrimitive.Root;
772
1092
  var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
773
1093
  var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
1094
+
1095
+ // src/components/ui/context-menu.tsx
1096
+ init_utils();
774
1097
  var ContextMenu = ContextMenuPrimitive.Root;
775
1098
  var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
776
1099
  var ContextMenuGroup = ContextMenuPrimitive.Group;
@@ -1191,6 +1514,9 @@ var EmailFooter = ({ children }) => /* @__PURE__ */ jsx("div", { style: {
1191
1514
  ] })
1192
1515
  ] }) });
1193
1516
 
1517
+ // src/index.ts
1518
+ init_utils();
1519
+
1194
1520
  // src/tokens/colors.ts
1195
1521
  var colors = {
1196
1522
  // Base colors
@@ -1462,182 +1788,46 @@ var tokens = {
1462
1788
  radius,
1463
1789
  shadows
1464
1790
  };
1465
- function ThemeProvider({
1466
- children,
1467
- ...props
1468
- }) {
1469
- return /* @__PURE__ */ jsx(
1470
- ThemeProvider$1,
1471
- {
1472
- attribute: "class",
1473
- defaultTheme: "system",
1474
- enableSystem: true,
1475
- disableTransitionOnChange: true,
1476
- ...props,
1477
- children
1478
- }
1479
- );
1480
- }
1481
1791
 
1482
- // src/lib/theme-utils.ts
1483
- var mapColorToShadcnVariant = (color) => {
1484
- switch (color) {
1485
- case "brand":
1486
- return "default";
1487
- case "error":
1488
- return "destructive";
1489
- case "warning":
1490
- case "success":
1491
- return "secondary";
1492
- // Will need additional classes
1493
- default:
1494
- return "default";
1792
+ // src/themes/index.ts
1793
+ init_theme_provider();
1794
+ init_theme_context();
1795
+ init_theme_toggle2();
1796
+ var DynamicThemeProvider = dynamic(
1797
+ () => Promise.resolve().then(() => (init_theme_provider(), theme_provider_exports)).then((mod) => ({ default: mod.ThemeProvider })),
1798
+ {
1799
+ ssr: false,
1800
+ loading: () => /* @__PURE__ */ jsx("div", { style: { visibility: "hidden" } })
1495
1801
  }
1496
- };
1497
- var mapVariantToShadcnVariant = (variant) => {
1498
- switch (variant) {
1499
- case "primary":
1500
- return "default";
1501
- case "secondary":
1502
- return "outline";
1503
- case "tertiary":
1504
- return "ghost";
1505
- default:
1506
- return "default";
1802
+ );
1803
+ var DynamicThemeProviderNoSSR = dynamic(
1804
+ () => Promise.resolve().then(() => (init_theme_provider(), theme_provider_exports)).then((mod) => ({ default: mod.ThemeProviderNoSSR })),
1805
+ {
1806
+ ssr: false,
1807
+ loading: () => /* @__PURE__ */ jsx("div", { style: { visibility: "hidden" } })
1507
1808
  }
1508
- };
1509
- var getColorVariantClasses = (color, variant) => {
1510
- const colorVariantMap = {
1511
- primary: {
1512
- brand: "bg-brand-600 hover:bg-brand-700 text-white focus-visible:ring-brand-500",
1513
- error: "bg-error-600 hover:bg-error-700 text-white focus-visible:ring-error-500",
1514
- warning: "bg-warning-600 hover:bg-warning-700 text-white focus-visible:ring-warning-500",
1515
- success: "bg-success-600 hover:bg-success-700 text-white focus-visible:ring-success-500"
1516
- },
1517
- secondary: {
1518
- brand: "border-brand-300 text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
1519
- error: "border-error-300 text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
1520
- warning: "border-warning-300 text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
1521
- success: "border-success-300 text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
1522
- },
1523
- tertiary: {
1524
- brand: "text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
1525
- error: "text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
1526
- warning: "text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
1527
- success: "text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
1528
- }
1529
- };
1530
- return colorVariantMap[variant]?.[color] || "";
1531
- };
1532
- var isDarkTheme = (theme, systemTheme) => {
1533
- if (theme === "system") {
1534
- return systemTheme === "dark";
1809
+ );
1810
+ var DynamicThemeToggle = dynamic(
1811
+ () => Promise.resolve().then(() => (init_theme_toggle2(), theme_toggle_exports)).then((mod) => ({ default: mod.ThemeToggle })),
1812
+ {
1813
+ ssr: false,
1814
+ loading: () => /* @__PURE__ */ jsx("div", { style: { visibility: "hidden" } })
1535
1815
  }
1536
- return theme === "dark";
1537
- };
1538
- function useTheme() {
1539
- const { theme, setTheme, resolvedTheme, systemTheme } = useTheme$1();
1540
- const isDark = isDarkTheme(theme, systemTheme);
1541
- return {
1542
- theme: theme || "system",
1543
- setTheme,
1544
- resolvedTheme: resolvedTheme || "light",
1545
- isDark
1546
- };
1547
- }
1548
- function ThemeContextProvider({
1549
- children
1550
- }) {
1551
- return /* @__PURE__ */ jsx(Fragment, { children });
1552
- }
1553
- function ThemeToggle({
1554
- className,
1555
- variant = "icon",
1556
- size = "md",
1816
+ );
1817
+ function SafeThemeProvider({
1818
+ children,
1819
+ noSSR = false,
1557
1820
  ...props
1558
1821
  }) {
1559
- const { theme, setTheme, resolvedTheme } = useTheme();
1560
- const [mounted, setMounted] = React2.useState(false);
1561
- React2.useEffect(() => {
1562
- setMounted(true);
1563
- }, []);
1564
- if (!mounted) return null;
1565
- const toggleTheme = () => {
1566
- setTheme(resolvedTheme === "dark" ? "light" : "dark");
1567
- };
1568
- const iconSize = {
1569
- sm: 16,
1570
- md: 20,
1571
- lg: 24
1572
- };
1573
- const sizeClasses = {
1574
- sm: "h-8 w-8",
1575
- md: "h-10 w-10",
1576
- lg: "h-12 w-12"
1577
- };
1578
- const textSizeClasses = {
1579
- sm: "text-xs",
1580
- md: "text-sm",
1581
- lg: "text-base"
1582
- };
1583
- if (variant === "icon") {
1584
- return /* @__PURE__ */ jsx(
1585
- "button",
1586
- {
1587
- type: "button",
1588
- onClick: toggleTheme,
1589
- className: cn(
1590
- "inline-flex items-center justify-center rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground",
1591
- sizeClasses[size],
1592
- className
1593
- ),
1594
- "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
1595
- ...props,
1596
- children: resolvedTheme === "dark" ? /* @__PURE__ */ jsx(IconSun, { size: iconSize[size], stroke: 1.5 }) : /* @__PURE__ */ jsx(IconMoon, { size: iconSize[size], stroke: 1.5 })
1597
- }
1598
- );
1599
- }
1600
- if (variant === "button") {
1601
- return /* @__PURE__ */ jsx(
1602
- "button",
1603
- {
1604
- type: "button",
1605
- onClick: toggleTheme,
1606
- className: cn(
1607
- "inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2",
1608
- textSizeClasses[size],
1609
- "hover:bg-accent hover:text-accent-foreground",
1610
- className
1611
- ),
1612
- ...props,
1613
- children: resolvedTheme === "dark" ? "Light Mode" : "Dark Mode"
1614
- }
1615
- );
1822
+ if (noSSR) {
1823
+ return /* @__PURE__ */ jsx(DynamicThemeProviderNoSSR, { ...props, children });
1616
1824
  }
1617
- return /* @__PURE__ */ jsx(
1618
- "button",
1619
- {
1620
- type: "button",
1621
- onClick: toggleTheme,
1622
- className: cn(
1623
- "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",
1624
- textSizeClasses[size],
1625
- resolvedTheme === "dark" ? "bg-accent text-accent-foreground hover:bg-accent/80" : "bg-muted text-muted-foreground hover:bg-muted/80",
1626
- className
1627
- ),
1628
- "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
1629
- ...props,
1630
- children: resolvedTheme === "dark" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
1631
- /* @__PURE__ */ jsx(IconSun, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
1632
- "Light"
1633
- ] }) : /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
1634
- /* @__PURE__ */ jsx(IconMoon, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
1635
- "Dark"
1636
- ] })
1637
- }
1638
- );
1825
+ return /* @__PURE__ */ jsx(DynamicThemeProvider, { ...props, children });
1639
1826
  }
1640
1827
 
1641
- export { Button, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DropdownMenu, EmailButton, EmailCaption, EmailContainer, EmailFooter, EmailHeader, EmailHeading, EmailLayout, EmailMuted, EmailText, Heading, HoverCard, HoverCardContent, HoverCardTrigger, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Slider, Text, ThemeContextProvider, ThemeProvider, ThemeToggle, Toggle, ToggleGroup, ToggleGroupItem, buttonVariants, cn, colors, filterDOMProps, generateId, getColorVariantClasses, isDarkTheme, isNotNullOrUndefined, mapColorToShadcnVariant, mapVariantToShadcnVariant, radius, shadows, spacing, tokens, typography, useTheme };
1828
+ // src/themes/index.ts
1829
+ init_theme_utils();
1830
+
1831
+ export { Button, Collapsible, CollapsibleContent2 as CollapsibleContent, CollapsibleTrigger2 as CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, DropdownMenu, DynamicThemeProvider, DynamicThemeProviderNoSSR, DynamicThemeToggle, EmailButton, EmailCaption, EmailContainer, EmailFooter, EmailHeader, EmailHeading, EmailLayout, EmailMuted, EmailText, Heading, HoverCard, HoverCardContent, HoverCardTrigger, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, SafeThemeProvider, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, Slider, Text, ThemeContextProvider, ThemeProvider, ThemeProviderNoSSR, ThemeToggle, Toggle, ToggleGroup, ToggleGroupItem, buttonVariants, cn, colors, filterDOMProps, generateId, getColorVariantClasses, isDarkTheme, isNotNullOrUndefined, mapColorToShadcnVariant, mapVariantToShadcnVariant, radius, shadows, spacing, tokens, typography, useTheme, useThemeServer };
1642
1832
  //# sourceMappingURL=index.mjs.map
1643
1833
  //# sourceMappingURL=index.mjs.map