@tydavidson/design-system 1.1.7 → 1.1.8

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,12 @@
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';
4
+ import { ThemeProvider as ThemeProvider$1, useTheme as useTheme$1 } from 'next-themes';
6
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
- import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
8
6
  import { IconCheck, IconPointFilled, IconChevronRight, IconX, IconSearch, IconSun, IconMoon } from '@tabler/icons-react';
7
+ import { Slot } from '@radix-ui/react-slot';
8
+ import { cva } from 'class-variance-authority';
9
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
9
10
  import * as TogglePrimitive from '@radix-ui/react-toggle';
10
11
  import * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group';
11
12
  import * as SliderPrimitive from '@radix-ui/react-slider';
@@ -15,9 +16,17 @@ import * as SheetPrimitive from '@radix-ui/react-dialog';
15
16
  import { Command as Command$1 } from 'cmdk';
16
17
  import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
17
18
  import * as ContextMenuPrimitive from '@radix-ui/react-context-menu';
18
- import { ThemeProvider as ThemeProvider$1, useTheme as useTheme$1 } from 'next-themes';
19
+ import dynamic from 'next/dynamic';
19
20
 
20
- // src/components/ui/button.tsx
21
+ var __defProp = Object.defineProperty;
22
+ var __getOwnPropNames = Object.getOwnPropertyNames;
23
+ var __esm = (fn, res) => function __init() {
24
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
25
+ };
26
+ var __export = (target, all) => {
27
+ for (var name in all)
28
+ __defProp(target, name, { get: all[name], enumerable: true });
29
+ };
21
30
  function cn(...inputs) {
22
31
  return twMerge(clsx(inputs));
23
32
  }
@@ -33,6 +42,263 @@ function filterDOMProps(props, propNames) {
33
42
  propNames.forEach((name) => delete result[name]);
34
43
  return result;
35
44
  }
45
+ var init_utils = __esm({
46
+ "src/lib/utils.ts"() {
47
+ }
48
+ });
49
+
50
+ // src/themes/theme-provider.tsx
51
+ var theme_provider_exports = {};
52
+ __export(theme_provider_exports, {
53
+ ThemeProvider: () => ThemeProvider,
54
+ ThemeProviderNoSSR: () => ThemeProviderNoSSR
55
+ });
56
+ function ThemeProvider({
57
+ children,
58
+ ...props
59
+ }) {
60
+ if (typeof window === "undefined") {
61
+ return /* @__PURE__ */ jsx(Fragment, { children });
62
+ }
63
+ return /* @__PURE__ */ jsx(
64
+ ThemeProvider$1,
65
+ {
66
+ attribute: "class",
67
+ defaultTheme: "system",
68
+ enableSystem: true,
69
+ disableTransitionOnChange: true,
70
+ ...props,
71
+ children
72
+ }
73
+ );
74
+ }
75
+ function ThemeProviderNoSSR({
76
+ children,
77
+ ...props
78
+ }) {
79
+ const [mounted, setMounted] = React2.useState(false);
80
+ React2.useEffect(() => {
81
+ setMounted(true);
82
+ }, []);
83
+ if (!mounted) {
84
+ return /* @__PURE__ */ jsx(Fragment, { children });
85
+ }
86
+ return /* @__PURE__ */ jsx(ThemeProvider, { ...props, children });
87
+ }
88
+ var init_theme_provider = __esm({
89
+ "src/themes/theme-provider.tsx"() {
90
+ "use client";
91
+ }
92
+ });
93
+
94
+ // src/lib/theme-utils.ts
95
+ var mapColorToShadcnVariant, mapVariantToShadcnVariant, getColorVariantClasses, isDarkTheme;
96
+ var init_theme_utils = __esm({
97
+ "src/lib/theme-utils.ts"() {
98
+ mapColorToShadcnVariant = (color) => {
99
+ switch (color) {
100
+ case "brand":
101
+ return "default";
102
+ case "error":
103
+ return "destructive";
104
+ case "warning":
105
+ case "success":
106
+ return "secondary";
107
+ // Will need additional classes
108
+ default:
109
+ return "default";
110
+ }
111
+ };
112
+ mapVariantToShadcnVariant = (variant) => {
113
+ switch (variant) {
114
+ case "primary":
115
+ return "default";
116
+ case "secondary":
117
+ return "outline";
118
+ case "tertiary":
119
+ return "ghost";
120
+ default:
121
+ return "default";
122
+ }
123
+ };
124
+ getColorVariantClasses = (color, variant) => {
125
+ const colorVariantMap = {
126
+ primary: {
127
+ brand: "bg-brand-600 hover:bg-brand-700 text-white focus-visible:ring-brand-500",
128
+ error: "bg-error-600 hover:bg-error-700 text-white focus-visible:ring-error-500",
129
+ warning: "bg-warning-600 hover:bg-warning-700 text-white focus-visible:ring-warning-500",
130
+ success: "bg-success-600 hover:bg-success-700 text-white focus-visible:ring-success-500"
131
+ },
132
+ secondary: {
133
+ brand: "border-brand-300 text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
134
+ error: "border-error-300 text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
135
+ warning: "border-warning-300 text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
136
+ success: "border-success-300 text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
137
+ },
138
+ tertiary: {
139
+ brand: "text-brand-700 hover:bg-brand-50 focus-visible:ring-brand-500",
140
+ error: "text-error-700 hover:bg-error-50 focus-visible:ring-error-500",
141
+ warning: "text-warning-700 hover:bg-warning-50 focus-visible:ring-warning-500",
142
+ success: "text-success-700 hover:bg-success-50 focus-visible:ring-success-500"
143
+ }
144
+ };
145
+ return colorVariantMap[variant]?.[color] || "";
146
+ };
147
+ isDarkTheme = (theme, systemTheme) => {
148
+ if (theme === "system") {
149
+ return systemTheme === "dark";
150
+ }
151
+ return theme === "dark";
152
+ };
153
+ }
154
+ });
155
+ function useTheme() {
156
+ if (typeof window === "undefined") {
157
+ return {
158
+ theme: "system",
159
+ setTheme: () => {
160
+ },
161
+ resolvedTheme: "light",
162
+ isDark: false
163
+ };
164
+ }
165
+ const { theme, setTheme, resolvedTheme, systemTheme } = useTheme$1();
166
+ const isDark = isDarkTheme(theme, systemTheme);
167
+ return {
168
+ theme: theme || "system",
169
+ setTheme,
170
+ resolvedTheme: resolvedTheme || "light",
171
+ isDark
172
+ };
173
+ }
174
+ function useThemeServer() {
175
+ return {
176
+ theme: "system",
177
+ setTheme: () => {
178
+ },
179
+ resolvedTheme: "light",
180
+ isDark: false
181
+ };
182
+ }
183
+ function ThemeContextProvider({
184
+ children
185
+ }) {
186
+ return /* @__PURE__ */ jsx(Fragment, { children });
187
+ }
188
+ var init_theme_context = __esm({
189
+ "src/themes/theme-context.tsx"() {
190
+ "use client";
191
+ init_theme_utils();
192
+ }
193
+ });
194
+ function ThemeToggle({
195
+ className,
196
+ variant = "icon",
197
+ size = "md",
198
+ ...props
199
+ }) {
200
+ const { theme, setTheme, resolvedTheme } = useTheme();
201
+ const [mounted, setMounted] = React2.useState(false);
202
+ React2.useEffect(() => {
203
+ setMounted(true);
204
+ }, []);
205
+ if (!mounted) return null;
206
+ const toggleTheme = () => {
207
+ setTheme(resolvedTheme === "dark" ? "light" : "dark");
208
+ };
209
+ const iconSize = {
210
+ sm: 16,
211
+ md: 20,
212
+ lg: 24
213
+ };
214
+ const sizeClasses = {
215
+ sm: "h-8 w-8",
216
+ md: "h-10 w-10",
217
+ lg: "h-12 w-12"
218
+ };
219
+ const textSizeClasses = {
220
+ sm: "text-xs",
221
+ md: "text-sm",
222
+ lg: "text-base"
223
+ };
224
+ if (variant === "icon") {
225
+ return /* @__PURE__ */ jsx(
226
+ "button",
227
+ {
228
+ type: "button",
229
+ onClick: toggleTheme,
230
+ className: cn(
231
+ "inline-flex items-center justify-center rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground",
232
+ sizeClasses[size],
233
+ className
234
+ ),
235
+ "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
236
+ ...props,
237
+ children: resolvedTheme === "dark" ? /* @__PURE__ */ jsx(IconSun, { size: iconSize[size], stroke: 1.5 }) : /* @__PURE__ */ jsx(IconMoon, { size: iconSize[size], stroke: 1.5 })
238
+ }
239
+ );
240
+ }
241
+ if (variant === "button") {
242
+ return /* @__PURE__ */ jsx(
243
+ "button",
244
+ {
245
+ type: "button",
246
+ onClick: toggleTheme,
247
+ className: cn(
248
+ "inline-flex items-center justify-center rounded-md border border-input bg-background px-4 py-2",
249
+ textSizeClasses[size],
250
+ "hover:bg-accent hover:text-accent-foreground",
251
+ className
252
+ ),
253
+ ...props,
254
+ children: resolvedTheme === "dark" ? "Light Mode" : "Dark Mode"
255
+ }
256
+ );
257
+ }
258
+ return /* @__PURE__ */ jsx(
259
+ "button",
260
+ {
261
+ type: "button",
262
+ onClick: toggleTheme,
263
+ className: cn(
264
+ "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",
265
+ textSizeClasses[size],
266
+ resolvedTheme === "dark" ? "bg-accent text-accent-foreground hover:bg-accent/80" : "bg-muted text-muted-foreground hover:bg-muted/80",
267
+ className
268
+ ),
269
+ "aria-label": resolvedTheme === "dark" ? "Switch to light theme" : "Switch to dark theme",
270
+ ...props,
271
+ children: resolvedTheme === "dark" ? /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
272
+ /* @__PURE__ */ jsx(IconSun, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
273
+ "Light"
274
+ ] }) : /* @__PURE__ */ jsxs("span", { className: "flex items-center", children: [
275
+ /* @__PURE__ */ jsx(IconMoon, { size: iconSize[size], stroke: 1.5, className: "mr-2" }),
276
+ "Dark"
277
+ ] })
278
+ }
279
+ );
280
+ }
281
+ var init_theme_toggle = __esm({
282
+ "src/components/ui/theme-toggle/theme-toggle.tsx"() {
283
+ "use client";
284
+ init_theme_context();
285
+ init_utils();
286
+ }
287
+ });
288
+
289
+ // src/components/ui/theme-toggle/index.ts
290
+ var theme_toggle_exports = {};
291
+ __export(theme_toggle_exports, {
292
+ ThemeToggle: () => ThemeToggle
293
+ });
294
+ var init_theme_toggle2 = __esm({
295
+ "src/components/ui/theme-toggle/index.ts"() {
296
+ init_theme_toggle();
297
+ }
298
+ });
299
+
300
+ // src/components/ui/button.tsx
301
+ init_utils();
36
302
  var buttonVariants = cva(
37
303
  "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
304
  {
@@ -137,6 +403,9 @@ var Button = React2.forwardRef(
137
403
  }
138
404
  );
139
405
  Button.displayName = "Button";
406
+
407
+ // src/components/ui/dropdown-menu/dropdown-menu.tsx
408
+ init_utils();
140
409
  var DropdownMenuRoot = DropdownMenuPrimitive.Root;
141
410
  var DropdownMenuTrigger = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
142
411
  DropdownMenuPrimitive.Trigger,
@@ -318,6 +587,9 @@ var DropdownMenu = {
318
587
  SubContent: DropdownMenuSubContent,
319
588
  SubTrigger: DropdownMenuSubTrigger
320
589
  };
590
+
591
+ // src/components/typography/heading/heading.tsx
592
+ init_utils();
321
593
  var Heading = React2.forwardRef(
322
594
  ({
323
595
  level = 1,
@@ -386,6 +658,9 @@ var Heading = React2.forwardRef(
386
658
  }
387
659
  );
388
660
  Heading.displayName = "Heading";
661
+
662
+ // src/components/typography/text/text.tsx
663
+ init_utils();
389
664
  var Text = React2.forwardRef(
390
665
  ({
391
666
  size = "md",
@@ -438,6 +713,9 @@ var Text = React2.forwardRef(
438
713
  }
439
714
  );
440
715
  Text.displayName = "Text";
716
+
717
+ // src/components/ui/toggle.tsx
718
+ init_utils();
441
719
  var Toggle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
442
720
  TogglePrimitive.Root,
443
721
  {
@@ -450,6 +728,9 @@ var Toggle = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
450
728
  }
451
729
  ));
452
730
  Toggle.displayName = TogglePrimitive.Root.displayName;
731
+
732
+ // src/components/ui/toggle-group.tsx
733
+ init_utils();
453
734
  var ToggleGroup = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsx(
454
735
  ToggleGroupPrimitive.Root,
455
736
  {
@@ -472,6 +753,9 @@ var ToggleGroupItem = React2.forwardRef(({ className, ...props }, ref) => /* @__
472
753
  }
473
754
  ));
474
755
  ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
756
+
757
+ // src/components/ui/slider.tsx
758
+ init_utils();
475
759
  var Slider = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs(
476
760
  SliderPrimitive.Root,
477
761
  {
@@ -488,6 +772,9 @@ var Slider = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
488
772
  }
489
773
  ));
490
774
  Slider.displayName = SliderPrimitive.Root.displayName;
775
+
776
+ // src/components/ui/popover.tsx
777
+ init_utils();
491
778
  var Popover = PopoverPrimitive.Root;
492
779
  var PopoverTrigger = PopoverPrimitive.Trigger;
493
780
  var PopoverAnchor = PopoverPrimitive.Anchor;
@@ -505,6 +792,9 @@ var PopoverContent = React2.forwardRef(({ className, align = "center", sideOffse
505
792
  }
506
793
  ) }));
507
794
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
795
+
796
+ // src/components/ui/hover-card.tsx
797
+ init_utils();
508
798
  var HoverCard = HoverCardPrimitive.Root;
509
799
  var HoverCardTrigger = HoverCardPrimitive.Trigger;
510
800
  var HoverCardContent = React2.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(
@@ -521,6 +811,9 @@ var HoverCardContent = React2.forwardRef(({ className, align = "center", sideOff
521
811
  }
522
812
  ));
523
813
  HoverCardContent.displayName = HoverCardPrimitive.Content.displayName;
814
+
815
+ // src/components/ui/sheet.tsx
816
+ init_utils();
524
817
  var Sheet = SheetPrimitive.Root;
525
818
  var SheetTrigger = SheetPrimitive.Trigger;
526
819
  var SheetClose = SheetPrimitive.Close;
@@ -614,6 +907,12 @@ var SheetDescription = React2.forwardRef(({ className, ...props }, ref) => /* @_
614
907
  }
615
908
  ));
616
909
  SheetDescription.displayName = SheetPrimitive.Description.displayName;
910
+
911
+ // src/components/ui/command.tsx
912
+ init_utils();
913
+
914
+ // src/components/ui/dialog.tsx
915
+ init_utils();
617
916
  var Dialog = SheetPrimitive.Root;
618
917
  var DialogPortal = SheetPrimitive.Portal;
619
918
  var DialogOverlay = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
@@ -771,6 +1070,9 @@ CommandShortcut.displayName = "CommandShortcut";
771
1070
  var Collapsible = CollapsiblePrimitive.Root;
772
1071
  var CollapsibleTrigger2 = CollapsiblePrimitive.CollapsibleTrigger;
773
1072
  var CollapsibleContent2 = CollapsiblePrimitive.CollapsibleContent;
1073
+
1074
+ // src/components/ui/context-menu.tsx
1075
+ init_utils();
774
1076
  var ContextMenu = ContextMenuPrimitive.Root;
775
1077
  var ContextMenuTrigger = ContextMenuPrimitive.Trigger;
776
1078
  var ContextMenuGroup = ContextMenuPrimitive.Group;
@@ -1191,6 +1493,9 @@ var EmailFooter = ({ children }) => /* @__PURE__ */ jsx("div", { style: {
1191
1493
  ] })
1192
1494
  ] }) });
1193
1495
 
1496
+ // src/index.ts
1497
+ init_utils();
1498
+
1194
1499
  // src/tokens/colors.ts
1195
1500
  var colors = {
1196
1501
  // Base colors
@@ -1462,182 +1767,46 @@ var tokens = {
1462
1767
  radius,
1463
1768
  shadows
1464
1769
  };
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
1770
 
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";
1771
+ // src/themes/index.ts
1772
+ init_theme_provider();
1773
+ init_theme_context();
1774
+ init_theme_toggle2();
1775
+ var DynamicThemeProvider = dynamic(
1776
+ () => Promise.resolve().then(() => (init_theme_provider(), theme_provider_exports)).then((mod) => ({ default: mod.ThemeProvider })),
1777
+ {
1778
+ ssr: false,
1779
+ loading: () => /* @__PURE__ */ jsx("div", { style: { visibility: "hidden" } })
1495
1780
  }
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";
1781
+ );
1782
+ var DynamicThemeProviderNoSSR = dynamic(
1783
+ () => Promise.resolve().then(() => (init_theme_provider(), theme_provider_exports)).then((mod) => ({ default: mod.ThemeProviderNoSSR })),
1784
+ {
1785
+ ssr: false,
1786
+ loading: () => /* @__PURE__ */ jsx("div", { style: { visibility: "hidden" } })
1507
1787
  }
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";
1788
+ );
1789
+ var DynamicThemeToggle = dynamic(
1790
+ () => Promise.resolve().then(() => (init_theme_toggle2(), theme_toggle_exports)).then((mod) => ({ default: mod.ThemeToggle })),
1791
+ {
1792
+ ssr: false,
1793
+ loading: () => /* @__PURE__ */ jsx("div", { style: { visibility: "hidden" } })
1535
1794
  }
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",
1795
+ );
1796
+ function SafeThemeProvider({
1797
+ children,
1798
+ noSSR = false,
1557
1799
  ...props
1558
1800
  }) {
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
- );
1801
+ if (noSSR) {
1802
+ return /* @__PURE__ */ jsx(DynamicThemeProviderNoSSR, { ...props, children });
1599
1803
  }
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
- );
1616
- }
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
- );
1804
+ return /* @__PURE__ */ jsx(DynamicThemeProvider, { ...props, children });
1639
1805
  }
1640
1806
 
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 };
1807
+ // src/themes/index.ts
1808
+ init_theme_utils();
1809
+
1810
+ 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
1811
  //# sourceMappingURL=index.mjs.map
1643
1812
  //# sourceMappingURL=index.mjs.map