@vritti/quantum-ui 0.2.7 → 0.2.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.
Files changed (174) hide show
  1. package/dist/Avatar.js +219 -0
  2. package/dist/Avatar.js.map +1 -0
  3. package/dist/Badge.js +32 -0
  4. package/dist/Badge.js.map +1 -0
  5. package/dist/Button2.js +2 -2
  6. package/dist/Chart.js +19003 -0
  7. package/dist/Chart.js.map +1 -0
  8. package/dist/Checkbox.js +6 -26
  9. package/dist/Checkbox.js.map +1 -1
  10. package/dist/Combination.js +3868 -0
  11. package/dist/Combination.js.map +1 -0
  12. package/dist/DatePicker.js +15 -3877
  13. package/dist/DatePicker.js.map +1 -1
  14. package/dist/DropdownMenu.js +1591 -0
  15. package/dist/DropdownMenu.js.map +1 -0
  16. package/dist/Form.js +7 -4
  17. package/dist/Form.js.map +1 -1
  18. package/dist/Label.js +1 -1
  19. package/dist/OTPField.js +16 -5
  20. package/dist/OTPField.js.map +1 -1
  21. package/dist/PhoneField.js +14 -6
  22. package/dist/PhoneField.js.map +1 -1
  23. package/dist/Progress.js +116 -0
  24. package/dist/Progress.js.map +1 -0
  25. package/dist/Separator.js +6 -0
  26. package/dist/Separator.js.map +1 -0
  27. package/dist/Spinner.js +1 -9
  28. package/dist/Spinner.js.map +1 -1
  29. package/dist/Switch.js +210 -0
  30. package/dist/Switch.js.map +1 -0
  31. package/dist/ThemeContext.js +57 -0
  32. package/dist/ThemeContext.js.map +1 -0
  33. package/dist/ThemeToggle.js +4 -15
  34. package/dist/ThemeToggle.js.map +1 -1
  35. package/dist/Toggle.js +69 -0
  36. package/dist/Toggle.js.map +1 -0
  37. package/dist/_commonjsHelpers.js +6 -0
  38. package/dist/_commonjsHelpers.js.map +1 -0
  39. package/dist/assets/quantum-ui.css +18 -0
  40. package/dist/axios.js.map +1 -1
  41. package/dist/check.js +15 -0
  42. package/dist/check.js.map +1 -0
  43. package/dist/components/Avatar.js +2 -0
  44. package/dist/components/Avatar.js.map +1 -0
  45. package/dist/components/Badge.js +2 -0
  46. package/dist/components/Badge.js.map +1 -0
  47. package/dist/components/Chart.js +2 -0
  48. package/dist/components/Chart.js.map +1 -0
  49. package/dist/components/DropdownMenu.js +2 -0
  50. package/dist/components/DropdownMenu.js.map +1 -0
  51. package/dist/components/Progress.js +1 -174
  52. package/dist/components/Progress.js.map +1 -1
  53. package/dist/components/Separator.js +2 -0
  54. package/dist/components/Separator.js.map +1 -0
  55. package/dist/components/Switch.js +2 -0
  56. package/dist/components/Switch.js.map +1 -0
  57. package/dist/components/Toggle.js +2 -0
  58. package/dist/components/Toggle.js.map +1 -0
  59. package/dist/context/index.js +2 -0
  60. package/dist/context/index.js.map +1 -0
  61. package/dist/field.js +2 -49
  62. package/dist/field.js.map +1 -1
  63. package/dist/hooks/index.js +2 -0
  64. package/dist/hooks/index.js.map +1 -0
  65. package/dist/index.js +10 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/index10.js +105 -0
  68. package/dist/index10.js.map +1 -0
  69. package/dist/index11.js +101 -0
  70. package/dist/index11.js.map +1 -0
  71. package/dist/index12.js +205 -0
  72. package/dist/index12.js.map +1 -0
  73. package/dist/index13.js +199 -0
  74. package/dist/index13.js.map +1 -0
  75. package/dist/index2.js +55 -130
  76. package/dist/index2.js.map +1 -1
  77. package/dist/index3.js +10 -42
  78. package/dist/index3.js.map +1 -1
  79. package/dist/index4.js +125 -35
  80. package/dist/index4.js.map +1 -1
  81. package/dist/index5.js +26 -414
  82. package/dist/index5.js.map +1 -1
  83. package/dist/index6.js +8 -0
  84. package/dist/index6.js.map +1 -0
  85. package/dist/index7.js +16 -0
  86. package/dist/index7.js.map +1 -0
  87. package/dist/index8.js +45 -0
  88. package/dist/index8.js.map +1 -0
  89. package/dist/index9.js +41 -0
  90. package/dist/index9.js.map +1 -0
  91. package/dist/lib/components/Avatar/Avatar.d.ts +8 -0
  92. package/dist/lib/components/Avatar/Avatar.d.ts.map +1 -0
  93. package/dist/lib/components/Avatar/index.d.ts +2 -0
  94. package/dist/lib/components/Avatar/index.d.ts.map +1 -0
  95. package/dist/lib/components/Badge/Badge.d.ts +5 -0
  96. package/dist/lib/components/Badge/Badge.d.ts.map +1 -0
  97. package/dist/lib/components/Badge/index.d.ts +3 -0
  98. package/dist/lib/components/Badge/index.d.ts.map +1 -0
  99. package/dist/lib/components/Button/index.d.ts +1 -1
  100. package/dist/lib/components/Button/index.d.ts.map +1 -1
  101. package/dist/lib/components/Chart/Chart.d.ts +13 -0
  102. package/dist/lib/components/Chart/Chart.d.ts.map +1 -0
  103. package/dist/lib/components/Chart/index.d.ts +3 -0
  104. package/dist/lib/components/Chart/index.d.ts.map +1 -0
  105. package/dist/lib/components/DropdownMenu/DropdownMenu.d.ts +28 -0
  106. package/dist/lib/components/DropdownMenu/DropdownMenu.d.ts.map +1 -0
  107. package/dist/lib/components/DropdownMenu/index.d.ts +3 -0
  108. package/dist/lib/components/DropdownMenu/index.d.ts.map +1 -0
  109. package/dist/lib/components/DropdownMenu/types.d.ts +72 -0
  110. package/dist/lib/components/DropdownMenu/types.d.ts.map +1 -0
  111. package/dist/lib/components/Form/Form.d.ts.map +1 -1
  112. package/dist/lib/components/OTPField/OTPField.d.ts.map +1 -1
  113. package/dist/lib/components/PhoneField/PhoneField.d.ts.map +1 -1
  114. package/dist/lib/components/Separator/Separator.d.ts +3 -0
  115. package/dist/lib/components/Separator/Separator.d.ts.map +1 -0
  116. package/dist/lib/components/Separator/index.d.ts +2 -0
  117. package/dist/lib/components/Separator/index.d.ts.map +1 -0
  118. package/dist/lib/components/Switch/Switch.d.ts +9 -0
  119. package/dist/lib/components/Switch/Switch.d.ts.map +1 -0
  120. package/dist/lib/components/Switch/index.d.ts +3 -0
  121. package/dist/lib/components/Switch/index.d.ts.map +1 -0
  122. package/dist/lib/components/ThemeToggle/ThemeToggle.d.ts.map +1 -1
  123. package/dist/lib/components/Toggle/Toggle.d.ts +7 -0
  124. package/dist/lib/components/Toggle/Toggle.d.ts.map +1 -0
  125. package/dist/lib/components/Toggle/index.d.ts +2 -0
  126. package/dist/lib/components/Toggle/index.d.ts.map +1 -0
  127. package/dist/lib/components/index.d.ts +8 -0
  128. package/dist/lib/components/index.d.ts.map +1 -1
  129. package/dist/lib/context/ThemeContext.d.ts +18 -0
  130. package/dist/lib/context/ThemeContext.d.ts.map +1 -0
  131. package/dist/lib/context/index.d.ts +2 -0
  132. package/dist/lib/context/index.d.ts.map +1 -0
  133. package/dist/lib/hooks/index.d.ts +2 -0
  134. package/dist/lib/hooks/index.d.ts.map +1 -0
  135. package/dist/lib/hooks/useTheme.d.ts +8 -0
  136. package/dist/lib/hooks/useTheme.d.ts.map +1 -0
  137. package/dist/lib/index.d.ts +2 -0
  138. package/dist/lib/index.d.ts.map +1 -1
  139. package/dist/lib/theme/index.d.ts +13 -0
  140. package/dist/lib/theme/index.d.ts.map +1 -0
  141. package/dist/lib/utils/axios.d.ts +1 -0
  142. package/dist/lib/utils/axios.d.ts.map +1 -1
  143. package/dist/lib/utils/formHelpers.d.ts.map +1 -1
  144. package/dist/separator2.js +53 -0
  145. package/dist/separator2.js.map +1 -0
  146. package/dist/shadcn/index.d.ts +1 -1
  147. package/dist/shadcn/index.d.ts.map +1 -1
  148. package/dist/shadcn/shadcnAvatar/Avatar.d.ts +12 -0
  149. package/dist/shadcn/shadcnAvatar/Avatar.d.ts.map +1 -0
  150. package/dist/shadcn/shadcnAvatar/index.d.ts +2 -0
  151. package/dist/shadcn/shadcnAvatar/index.d.ts.map +1 -0
  152. package/dist/shadcn/shadcnBadge/Badge.d.ts +11 -0
  153. package/dist/shadcn/shadcnBadge/Badge.d.ts.map +1 -0
  154. package/dist/shadcn/shadcnBadge/index.d.ts +3 -0
  155. package/dist/shadcn/shadcnBadge/index.d.ts.map +1 -0
  156. package/dist/shadcn/shadcnButton/Button.d.ts +1 -1
  157. package/dist/shadcn/shadcnChart/Chart.d.ts +58 -0
  158. package/dist/shadcn/shadcnChart/Chart.d.ts.map +1 -0
  159. package/dist/shadcn/shadcnChart/index.d.ts +3 -0
  160. package/dist/shadcn/shadcnChart/index.d.ts.map +1 -0
  161. package/dist/shadcn/shadcnSpinner/Spinner.d.ts.map +1 -1
  162. package/dist/shadcn/shadcnSwitch/Switch.d.ts +7 -0
  163. package/dist/shadcn/shadcnSwitch/Switch.d.ts.map +1 -0
  164. package/dist/shadcn/shadcnSwitch/index.d.ts +2 -0
  165. package/dist/shadcn/shadcnSwitch/index.d.ts.map +1 -0
  166. package/dist/shadcn/shadcnToggle/Toggle.d.ts +10 -0
  167. package/dist/shadcn/shadcnToggle/Toggle.d.ts.map +1 -0
  168. package/dist/shadcn/shadcnToggle/index.d.ts +2 -0
  169. package/dist/shadcn/shadcnToggle/index.d.ts.map +1 -0
  170. package/dist/theme/index.js +11 -0
  171. package/dist/theme/index.js.map +1 -0
  172. package/dist/useTheme.js +15 -0
  173. package/dist/useTheme.js.map +1 -0
  174. package/package.json +45 -1
@@ -0,0 +1,116 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { c as createContextScope } from './index2.js';
4
+ import { P as Primitive } from './index9.js';
5
+ import { c as cn } from './utils.js';
6
+
7
+ var PROGRESS_NAME = "Progress";
8
+ var DEFAULT_MAX = 100;
9
+ var [createProgressContext] = createContextScope(PROGRESS_NAME);
10
+ var [ProgressProvider, useProgressContext] = createProgressContext(PROGRESS_NAME);
11
+ var Progress$2 = React.forwardRef(
12
+ (props, forwardedRef) => {
13
+ const {
14
+ __scopeProgress,
15
+ value: valueProp = null,
16
+ max: maxProp,
17
+ getValueLabel = defaultGetValueLabel,
18
+ ...progressProps
19
+ } = props;
20
+ if ((maxProp || maxProp === 0) && !isValidMaxNumber(maxProp)) {
21
+ console.error(getInvalidMaxError(`${maxProp}`, "Progress"));
22
+ }
23
+ const max = isValidMaxNumber(maxProp) ? maxProp : DEFAULT_MAX;
24
+ if (valueProp !== null && !isValidValueNumber(valueProp, max)) {
25
+ console.error(getInvalidValueError(`${valueProp}`, "Progress"));
26
+ }
27
+ const value = isValidValueNumber(valueProp, max) ? valueProp : null;
28
+ const valueLabel = isNumber(value) ? getValueLabel(value, max) : void 0;
29
+ return /* @__PURE__ */ jsx(ProgressProvider, { scope: __scopeProgress, value, max, children: /* @__PURE__ */ jsx(
30
+ Primitive.div,
31
+ {
32
+ "aria-valuemax": max,
33
+ "aria-valuemin": 0,
34
+ "aria-valuenow": isNumber(value) ? value : void 0,
35
+ "aria-valuetext": valueLabel,
36
+ role: "progressbar",
37
+ "data-state": getProgressState(value, max),
38
+ "data-value": value ?? void 0,
39
+ "data-max": max,
40
+ ...progressProps,
41
+ ref: forwardedRef
42
+ }
43
+ ) });
44
+ }
45
+ );
46
+ Progress$2.displayName = PROGRESS_NAME;
47
+ var INDICATOR_NAME = "ProgressIndicator";
48
+ var ProgressIndicator = React.forwardRef(
49
+ (props, forwardedRef) => {
50
+ const { __scopeProgress, ...indicatorProps } = props;
51
+ const context = useProgressContext(INDICATOR_NAME, __scopeProgress);
52
+ return /* @__PURE__ */ jsx(
53
+ Primitive.div,
54
+ {
55
+ "data-state": getProgressState(context.value, context.max),
56
+ "data-value": context.value ?? void 0,
57
+ "data-max": context.max,
58
+ ...indicatorProps,
59
+ ref: forwardedRef
60
+ }
61
+ );
62
+ }
63
+ );
64
+ ProgressIndicator.displayName = INDICATOR_NAME;
65
+ function defaultGetValueLabel(value, max) {
66
+ return `${Math.round(value / max * 100)}%`;
67
+ }
68
+ function getProgressState(value, maxValue) {
69
+ return value == null ? "indeterminate" : value === maxValue ? "complete" : "loading";
70
+ }
71
+ function isNumber(value) {
72
+ return typeof value === "number";
73
+ }
74
+ function isValidMaxNumber(max) {
75
+ return isNumber(max) && !isNaN(max) && max > 0;
76
+ }
77
+ function isValidValueNumber(value, max) {
78
+ return isNumber(value) && !isNaN(value) && value <= max && value >= 0;
79
+ }
80
+ function getInvalidMaxError(propValue, componentName) {
81
+ return `Invalid prop \`max\` of value \`${propValue}\` supplied to \`${componentName}\`. Only numbers greater than 0 are valid max values. Defaulting to \`${DEFAULT_MAX}\`.`;
82
+ }
83
+ function getInvalidValueError(propValue, componentName) {
84
+ return `Invalid prop \`value\` of value \`${propValue}\` supplied to \`${componentName}\`. The \`value\` prop must be:
85
+ - a positive number
86
+ - less than the value passed to \`max\` (or ${DEFAULT_MAX} if no \`max\` prop is set)
87
+ - \`null\` or \`undefined\` if the progress is indeterminate.
88
+
89
+ Defaulting to \`null\`.`;
90
+ }
91
+ var Root = Progress$2;
92
+ var Indicator = ProgressIndicator;
93
+
94
+ const Progress$1 = React.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ jsx(
95
+ Root,
96
+ {
97
+ ref,
98
+ "data-slot": "progress",
99
+ className: cn("bg-primary/20 relative h-2 w-full overflow-hidden rounded-full", className),
100
+ ...props,
101
+ children: /* @__PURE__ */ jsx(
102
+ Indicator,
103
+ {
104
+ "data-slot": "progress-indicator",
105
+ className: "bg-primary h-full w-full flex-1 transition-all",
106
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
107
+ }
108
+ )
109
+ }
110
+ ));
111
+ Progress$1.displayName = Root.displayName;
112
+
113
+ const Progress = Progress$1;
114
+
115
+ export { Progress as P };
116
+ //# sourceMappingURL=Progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.js","sources":["../node_modules/.pnpm/@radix-ui+react-progress@1.1.8_@types+react-dom@19.2.3_@types+react@19.2.9__@types+reac_f510cdfcbddd733ee422ca097120c019/node_modules/@radix-ui/react-progress/dist/index.mjs","../shadcn/shadcnProgress/Progress.tsx","../lib/components/Progress/Progress.tsx"],"sourcesContent":["\"use client\";\n\n// src/progress.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PROGRESS_NAME = \"Progress\";\nvar DEFAULT_MAX = 100;\nvar [createProgressContext, createProgressScope] = createContextScope(PROGRESS_NAME);\nvar [ProgressProvider, useProgressContext] = createProgressContext(PROGRESS_NAME);\nvar Progress = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeProgress,\n value: valueProp = null,\n max: maxProp,\n getValueLabel = defaultGetValueLabel,\n ...progressProps\n } = props;\n if ((maxProp || maxProp === 0) && !isValidMaxNumber(maxProp)) {\n console.error(getInvalidMaxError(`${maxProp}`, \"Progress\"));\n }\n const max = isValidMaxNumber(maxProp) ? maxProp : DEFAULT_MAX;\n if (valueProp !== null && !isValidValueNumber(valueProp, max)) {\n console.error(getInvalidValueError(`${valueProp}`, \"Progress\"));\n }\n const value = isValidValueNumber(valueProp, max) ? valueProp : null;\n const valueLabel = isNumber(value) ? getValueLabel(value, max) : void 0;\n return /* @__PURE__ */ jsx(ProgressProvider, { scope: __scopeProgress, value, max, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-valuemax\": max,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": isNumber(value) ? value : void 0,\n \"aria-valuetext\": valueLabel,\n role: \"progressbar\",\n \"data-state\": getProgressState(value, max),\n \"data-value\": value ?? void 0,\n \"data-max\": max,\n ...progressProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nProgress.displayName = PROGRESS_NAME;\nvar INDICATOR_NAME = \"ProgressIndicator\";\nvar ProgressIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeProgress, ...indicatorProps } = props;\n const context = useProgressContext(INDICATOR_NAME, __scopeProgress);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getProgressState(context.value, context.max),\n \"data-value\": context.value ?? void 0,\n \"data-max\": context.max,\n ...indicatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nProgressIndicator.displayName = INDICATOR_NAME;\nfunction defaultGetValueLabel(value, max) {\n return `${Math.round(value / max * 100)}%`;\n}\nfunction getProgressState(value, maxValue) {\n return value == null ? \"indeterminate\" : value === maxValue ? \"complete\" : \"loading\";\n}\nfunction isNumber(value) {\n return typeof value === \"number\";\n}\nfunction isValidMaxNumber(max) {\n return isNumber(max) && !isNaN(max) && max > 0;\n}\nfunction isValidValueNumber(value, max) {\n return isNumber(value) && !isNaN(value) && value <= max && value >= 0;\n}\nfunction getInvalidMaxError(propValue, componentName) {\n return `Invalid prop \\`max\\` of value \\`${propValue}\\` supplied to \\`${componentName}\\`. Only numbers greater than 0 are valid max values. Defaulting to \\`${DEFAULT_MAX}\\`.`;\n}\nfunction getInvalidValueError(propValue, componentName) {\n return `Invalid prop \\`value\\` of value \\`${propValue}\\` supplied to \\`${componentName}\\`. The \\`value\\` prop must be:\n - a positive number\n - less than the value passed to \\`max\\` (or ${DEFAULT_MAX} if no \\`max\\` prop is set)\n - \\`null\\` or \\`undefined\\` if the progress is indeterminate.\n\nDefaulting to \\`null\\`.`;\n}\nvar Root = Progress;\nvar Indicator = ProgressIndicator;\nexport {\n Indicator,\n Progress,\n ProgressIndicator,\n Root,\n createProgressScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as ProgressPrimitive from '@radix-ui/react-progress';\nimport * as React from 'react';\n\nimport { cn } from '../utils';\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n data-slot=\"progress\"\n className={cn('bg-primary/20 relative h-2 w-full overflow-hidden rounded-full', className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n data-slot=\"progress-indicator\"\n className=\"bg-primary h-full w-full flex-1 transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n));\n\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","import { Progress as ShadcnProgress } from '../../../shadcn/shadcnProgress/Progress';\n\nexport const Progress = ShadcnProgress;\n"],"names":["Progress","ProgressPrimitive.Root","ProgressPrimitive.Indicator","ShadcnProgress"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,6 @@
1
+ import { S as Separator$1 } from './separator2.js';
2
+
3
+ const Separator = Separator$1;
4
+
5
+ export { Separator as S };
6
+ //# sourceMappingURL=Separator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Separator.js","sources":["../lib/components/Separator/Separator.tsx"],"sourcesContent":["import { Separator as ShadcnSeparator } from '../../../shadcn/shadcnSeparator';\n\n/**\n * Separator component for visually or semantically separating content.\n *\n * @example\n * ```tsx\n * <Separator />\n * <Separator orientation=\"vertical\" />\n * ```\n */\nexport const Separator = ShadcnSeparator;\n"],"names":["ShadcnSeparator"],"mappings":";;AAWO,MAAM,SAAA,GAAYA;;;;"}
package/dist/Spinner.js CHANGED
@@ -3,15 +3,7 @@ import { c as cn } from './utils.js';
3
3
  import { L as LoaderCircle } from './loader-circle.js';
4
4
 
5
5
  function Spinner$1({ className, ...props }) {
6
- return /* @__PURE__ */ jsx(
7
- LoaderCircle,
8
- {
9
- role: "status",
10
- "aria-label": "Loading",
11
- className: cn("size-4 animate-spin", className),
12
- ...props
13
- }
14
- );
6
+ return /* @__PURE__ */ jsx(LoaderCircle, { role: "status", "aria-label": "Loading", className: cn("size-4 animate-spin", className), ...props });
15
7
  }
16
8
 
17
9
  const Spinner = Spinner$1;
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.js","sources":["../shadcn/shadcnSpinner/Spinner.tsx","../lib/components/Spinner/Spinner.tsx"],"sourcesContent":["import { Loader2Icon } from 'lucide-react';\n\nimport { cn } from '../utils';\n\nfunction Spinner({ className, ...props }: React.ComponentProps<'svg'>) {\n return (\n <Loader2Icon\n role=\"status\"\n aria-label=\"Loading\"\n className={cn('size-4 animate-spin', className)}\n {...props}\n />\n );\n}\n\nexport { Spinner };\n","// Spinner molecule - wrapper around shadcn Spinner\nimport { Spinner as ShadcnSpinner } from '../../../shadcn/shadcnSpinner';\n\nexport const Spinner = ShadcnSpinner;\n"],"names":["Spinner","Loader2Icon","ShadcnSpinner"],"mappings":";;;;AAIA,SAASA,SAAA,CAAQ,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACrE,EAAA,uBACE,GAAA;AAAA,IAACC,YAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA;AAAA,MAC7C,GAAG;AAAA;AAAA,GACN;AAEJ;;ACVO,MAAM,OAAA,GAAUC;;;;"}
1
+ {"version":3,"file":"Spinner.js","sources":["../shadcn/shadcnSpinner/Spinner.tsx","../lib/components/Spinner/Spinner.tsx"],"sourcesContent":["import { Loader2Icon } from 'lucide-react';\n\nimport { cn } from '../utils';\n\nfunction Spinner({ className, ...props }: React.ComponentProps<'svg'>) {\n return <Loader2Icon role=\"status\" aria-label=\"Loading\" className={cn('size-4 animate-spin', className)} {...props} />;\n}\n\nexport { Spinner };\n","// Spinner molecule - wrapper around shadcn Spinner\nimport { Spinner as ShadcnSpinner } from '../../../shadcn/shadcnSpinner';\n\nexport const Spinner = ShadcnSpinner;\n"],"names":["Spinner","Loader2Icon","ShadcnSpinner"],"mappings":";;;;AAIA,SAASA,SAAA,CAAQ,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACrE,EAAA,uBAAO,GAAA,CAACC,YAAA,EAAA,EAAY,IAAA,EAAK,QAAA,EAAS,YAAA,EAAW,SAAA,EAAU,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACrH;;ACHO,MAAM,OAAA,GAAUC;;;;"}
package/dist/Switch.js ADDED
@@ -0,0 +1,210 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import React__default from 'react';
4
+ import { F as Field, a as FieldContent, e as FieldLabel, b as FieldDescription, c as FieldError } from './field.js';
5
+ import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './index12.js';
6
+ import { u as useComposedRefs } from './index5.js';
7
+ import { c as createContextScope, u as useSize } from './index11.js';
8
+ import { u as usePrevious } from './index7.js';
9
+ import { c as cn } from './utils.js';
10
+
11
+ var SWITCH_NAME = "Switch";
12
+ var [createSwitchContext] = createContextScope(SWITCH_NAME);
13
+ var [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);
14
+ var Switch$2 = React.forwardRef(
15
+ (props, forwardedRef) => {
16
+ const {
17
+ __scopeSwitch,
18
+ name,
19
+ checked: checkedProp,
20
+ defaultChecked,
21
+ required,
22
+ disabled,
23
+ value = "on",
24
+ onCheckedChange,
25
+ form,
26
+ ...switchProps
27
+ } = props;
28
+ const [button, setButton] = React.useState(null);
29
+ const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));
30
+ const hasConsumerStoppedPropagationRef = React.useRef(false);
31
+ const isFormControl = button ? form || !!button.closest("form") : true;
32
+ const [checked, setChecked] = useControllableState({
33
+ prop: checkedProp,
34
+ defaultProp: defaultChecked ?? false,
35
+ onChange: onCheckedChange,
36
+ caller: SWITCH_NAME
37
+ });
38
+ return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [
39
+ /* @__PURE__ */ jsx(
40
+ Primitive.button,
41
+ {
42
+ type: "button",
43
+ role: "switch",
44
+ "aria-checked": checked,
45
+ "aria-required": required,
46
+ "data-state": getState(checked),
47
+ "data-disabled": disabled ? "" : void 0,
48
+ disabled,
49
+ value,
50
+ ...switchProps,
51
+ ref: composedRefs,
52
+ onClick: composeEventHandlers(props.onClick, (event) => {
53
+ setChecked((prevChecked) => !prevChecked);
54
+ if (isFormControl) {
55
+ hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();
56
+ if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();
57
+ }
58
+ })
59
+ }
60
+ ),
61
+ isFormControl && /* @__PURE__ */ jsx(
62
+ SwitchBubbleInput,
63
+ {
64
+ control: button,
65
+ bubbles: !hasConsumerStoppedPropagationRef.current,
66
+ name,
67
+ value,
68
+ checked,
69
+ required,
70
+ disabled,
71
+ form,
72
+ style: { transform: "translateX(-100%)" }
73
+ }
74
+ )
75
+ ] });
76
+ }
77
+ );
78
+ Switch$2.displayName = SWITCH_NAME;
79
+ var THUMB_NAME = "SwitchThumb";
80
+ var SwitchThumb = React.forwardRef(
81
+ (props, forwardedRef) => {
82
+ const { __scopeSwitch, ...thumbProps } = props;
83
+ const context = useSwitchContext(THUMB_NAME, __scopeSwitch);
84
+ return /* @__PURE__ */ jsx(
85
+ Primitive.span,
86
+ {
87
+ "data-state": getState(context.checked),
88
+ "data-disabled": context.disabled ? "" : void 0,
89
+ ...thumbProps,
90
+ ref: forwardedRef
91
+ }
92
+ );
93
+ }
94
+ );
95
+ SwitchThumb.displayName = THUMB_NAME;
96
+ var BUBBLE_INPUT_NAME = "SwitchBubbleInput";
97
+ var SwitchBubbleInput = React.forwardRef(
98
+ ({
99
+ __scopeSwitch,
100
+ control,
101
+ checked,
102
+ bubbles = true,
103
+ ...props
104
+ }, forwardedRef) => {
105
+ const ref = React.useRef(null);
106
+ const composedRefs = useComposedRefs(ref, forwardedRef);
107
+ const prevChecked = usePrevious(checked);
108
+ const controlSize = useSize(control);
109
+ React.useEffect(() => {
110
+ const input = ref.current;
111
+ if (!input) return;
112
+ const inputProto = window.HTMLInputElement.prototype;
113
+ const descriptor = Object.getOwnPropertyDescriptor(
114
+ inputProto,
115
+ "checked"
116
+ );
117
+ const setChecked = descriptor.set;
118
+ if (prevChecked !== checked && setChecked) {
119
+ const event = new Event("click", { bubbles });
120
+ setChecked.call(input, checked);
121
+ input.dispatchEvent(event);
122
+ }
123
+ }, [prevChecked, checked, bubbles]);
124
+ return /* @__PURE__ */ jsx(
125
+ "input",
126
+ {
127
+ type: "checkbox",
128
+ "aria-hidden": true,
129
+ defaultChecked: checked,
130
+ ...props,
131
+ tabIndex: -1,
132
+ ref: composedRefs,
133
+ style: {
134
+ ...props.style,
135
+ ...controlSize,
136
+ position: "absolute",
137
+ pointerEvents: "none",
138
+ opacity: 0,
139
+ margin: 0
140
+ }
141
+ }
142
+ );
143
+ }
144
+ );
145
+ SwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;
146
+ function getState(checked) {
147
+ return checked ? "checked" : "unchecked";
148
+ }
149
+ var Root = Switch$2;
150
+ var Thumb = SwitchThumb;
151
+
152
+ function Switch$1({
153
+ className,
154
+ size = "default",
155
+ ...props
156
+ }) {
157
+ return /* @__PURE__ */ jsx(
158
+ Root,
159
+ {
160
+ "data-slot": "switch",
161
+ "data-size": size,
162
+ className: cn(
163
+ "peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6",
164
+ className
165
+ ),
166
+ ...props,
167
+ children: /* @__PURE__ */ jsx(
168
+ Thumb,
169
+ {
170
+ "data-slot": "switch-thumb",
171
+ className: cn(
172
+ "bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0"
173
+ )
174
+ }
175
+ )
176
+ }
177
+ );
178
+ }
179
+
180
+ const Switch = React__default.forwardRef(
181
+ ({ label, description, error, id, ...props }, ref) => {
182
+ const generatedId = React__default.useId();
183
+ const fieldId = id || generatedId;
184
+ const hasError = !!error;
185
+ if (!label && !description && !error) {
186
+ return /* @__PURE__ */ jsx(Switch$1, { ...props, ref, id: fieldId });
187
+ }
188
+ return /* @__PURE__ */ jsxs(Field, { orientation: "horizontal", "data-disabled": props.disabled, "data-invalid": hasError, children: [
189
+ /* @__PURE__ */ jsx(
190
+ Switch$1,
191
+ {
192
+ ...props,
193
+ ref,
194
+ id: fieldId,
195
+ "aria-describedby": description || error ? `${fieldId}-description ${fieldId}-error` : void 0,
196
+ "aria-invalid": hasError
197
+ }
198
+ ),
199
+ /* @__PURE__ */ jsxs(FieldContent, { children: [
200
+ label && /* @__PURE__ */ jsx(FieldLabel, { htmlFor: fieldId, className: "font-normal cursor-pointer", children: label }),
201
+ description && /* @__PURE__ */ jsx(FieldDescription, { id: `${fieldId}-description`, children: description }),
202
+ error && /* @__PURE__ */ jsx(FieldError, { id: `${fieldId}-error`, children: error })
203
+ ] })
204
+ ] });
205
+ }
206
+ );
207
+ Switch.displayName = "Switch";
208
+
209
+ export { Switch as S };
210
+ //# sourceMappingURL=Switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.js","sources":["../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.2.3_@types+react@19.2.9__@types+react@_1bb10c0b052fb9beb92b3363daed7bfd/node_modules/@radix-ui/react-switch/dist/index.mjs","../shadcn/shadcnSwitch/Switch.tsx","../lib/components/Switch/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport type * as React from 'react';\n\nimport { cn } from '../utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer data-[state=checked]:bg-primary data-[state=unchecked]:bg-input focus-visible:border-ring focus-visible:ring-ring/50 dark:data-[state=unchecked]:bg-input/80 group/switch inline-flex shrink-0 items-center rounded-full border border-transparent shadow-xs transition-all outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className={cn(\n 'bg-background dark:data-[state=unchecked]:bg-foreground dark:data-[state=checked]:bg-primary-foreground pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0',\n )}\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import React from 'react';\nimport { Field, FieldContent, FieldDescription, FieldError, FieldLabel } from '../../../shadcn/shadcnField';\nimport { Switch as ShadcnSwitch } from '../../../shadcn/shadcnSwitch';\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof ShadcnSwitch> {\n /**\n * Label for the switch\n */\n label?: React.ReactNode;\n\n /**\n * Helper text or description to display below the switch\n */\n description?: React.ReactNode;\n\n /**\n * Error message to display below the switch\n */\n error?: string;\n}\n\n/**\n * Switch component for toggling between two states (on/off).\n *\n * Can be used as a bare component or with label, description, and error support\n * for form integration.\n *\n * @example\n * ```tsx\n * // Bare usage\n * <Switch />\n * <Switch size=\"sm\" />\n * <Switch defaultChecked />\n * <Switch disabled />\n *\n * // With Field system (form usage)\n * <Switch\n * label=\"Enable notifications\"\n * description=\"Receive email updates\"\n * />\n *\n * // In a Form component\n * <Form form={form} onSubmit={handleSubmit}>\n * <Switch\n * name=\"marketing\"\n * label=\"Marketing emails\"\n * description=\"Receive promotional content\"\n * />\n * </Form>\n * ```\n */\nexport const Switch = React.forwardRef<React.ElementRef<typeof ShadcnSwitch>, SwitchProps>(\n ({ label, description, error, id, ...props }, ref) => {\n const generatedId = React.useId();\n const fieldId = id || generatedId;\n const hasError = !!error;\n\n // If no label or description, just return the base switch\n if (!label && !description && !error) {\n return <ShadcnSwitch {...props} ref={ref} id={fieldId} />;\n }\n\n return (\n <Field orientation=\"horizontal\" data-disabled={props.disabled} data-invalid={hasError}>\n <ShadcnSwitch\n {...props}\n ref={ref}\n id={fieldId}\n aria-describedby={description || error ? `${fieldId}-description ${fieldId}-error` : undefined}\n aria-invalid={hasError}\n />\n <FieldContent>\n {label && (\n <FieldLabel htmlFor={fieldId} className=\"font-normal cursor-pointer\">\n {label}\n </FieldLabel>\n )}\n\n {description && <FieldDescription id={`${fieldId}-description`}>{description}</FieldDescription>}\n\n {error && <FieldError id={`${fieldId}-error`}>{error}</FieldError>}\n </FieldContent>\n </Field>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n"],"names":["Switch","SwitchPrimitive.Root","SwitchPrimitive.Thumb","React","ShadcnSwitch"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1,57 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { createContext, useState, useLayoutEffect, useCallback, useMemo } from 'react';
3
+
4
+ const THEME_STORAGE_KEY = "theme";
5
+ const ThemeContext = createContext(null);
6
+ ThemeContext.displayName = "ThemeContext";
7
+ function getInitialTheme(storageKey, defaultTheme) {
8
+ if (typeof window !== "undefined") {
9
+ const savedTheme = localStorage.getItem(storageKey);
10
+ if (savedTheme === "dark" || savedTheme === "light") {
11
+ return savedTheme;
12
+ }
13
+ }
14
+ if (defaultTheme) {
15
+ return defaultTheme;
16
+ }
17
+ if (typeof window !== "undefined") {
18
+ const systemPrefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
19
+ return systemPrefersDark ? "dark" : "light";
20
+ }
21
+ return "light";
22
+ }
23
+ function ThemeProvider({
24
+ children,
25
+ defaultTheme,
26
+ storageKey = THEME_STORAGE_KEY
27
+ }) {
28
+ const [theme, setThemeState] = useState(
29
+ () => getInitialTheme(storageKey, defaultTheme)
30
+ );
31
+ useLayoutEffect(() => {
32
+ const isDark = theme === "dark";
33
+ document.documentElement.classList.toggle("dark", isDark);
34
+ }, [theme]);
35
+ useLayoutEffect(() => {
36
+ localStorage.setItem(storageKey, theme);
37
+ }, [theme, storageKey]);
38
+ const setTheme = useCallback((newTheme) => {
39
+ setThemeState(newTheme);
40
+ }, []);
41
+ const toggleTheme = useCallback(() => {
42
+ setThemeState((currentTheme) => currentTheme === "dark" ? "light" : "dark");
43
+ }, []);
44
+ const value = useMemo(
45
+ () => ({
46
+ theme,
47
+ toggleTheme,
48
+ setTheme
49
+ }),
50
+ [theme, toggleTheme, setTheme]
51
+ );
52
+ return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
53
+ }
54
+ ThemeProvider.displayName = "ThemeProvider";
55
+
56
+ export { ThemeContext as T, ThemeProvider as a };
57
+ //# sourceMappingURL=ThemeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeContext.js","sources":["../lib/context/ThemeContext.tsx"],"sourcesContent":["import {\n createContext,\n useCallback,\n useLayoutEffect,\n useMemo,\n useState,\n type ReactNode,\n} from 'react';\n\n/**\n * Theme mode type - either 'light' or 'dark'\n */\nexport type ThemeMode = 'light' | 'dark';\n\n/**\n * Shape of the theme context value\n */\nexport interface ThemeContextValue {\n /** Current theme mode ('light' or 'dark') */\n theme: ThemeMode;\n /** Function to toggle between light and dark themes */\n toggleTheme: () => void;\n /** Function to set a specific theme */\n setTheme: (theme: ThemeMode) => void;\n}\n\n/**\n * Props for the ThemeProvider component\n */\nexport interface ThemeProviderProps {\n /** Child components that will have access to the theme context */\n children: ReactNode;\n /** Optional initial theme (defaults to system preference or localStorage) */\n defaultTheme?: ThemeMode;\n /** localStorage key for persisting theme preference */\n storageKey?: string;\n}\n\nconst THEME_STORAGE_KEY = 'theme';\n\n/**\n * Theme context for sharing theme state across components.\n * Use the useTheme hook to access this context.\n */\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\nThemeContext.displayName = 'ThemeContext';\n\n/**\n * Determines the initial theme based on localStorage and system preferences.\n * @param storageKey - The localStorage key to check for saved theme\n * @param defaultTheme - Optional default theme to use if no preference is found\n * @returns The determined initial theme\n */\nfunction getInitialTheme(storageKey: string, defaultTheme?: ThemeMode): ThemeMode {\n // Check for saved theme in localStorage\n if (typeof window !== 'undefined') {\n const savedTheme = localStorage.getItem(storageKey);\n if (savedTheme === 'dark' || savedTheme === 'light') {\n return savedTheme;\n }\n }\n\n // Use default theme if provided\n if (defaultTheme) {\n return defaultTheme;\n }\n\n // Fall back to system preference\n if (typeof window !== 'undefined') {\n const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n return systemPrefersDark ? 'dark' : 'light';\n }\n\n // Ultimate fallback\n return 'light';\n}\n\n/**\n * ThemeProvider component that manages theme state and provides it to the component tree.\n *\n * Features:\n * - Single source of truth for theme state\n * - Persists theme preference to localStorage\n * - Detects system color scheme preference on initial load\n * - Toggles the 'dark' class on document.documentElement\n * - Avoids flash of incorrect theme using useLayoutEffect\n *\n * @example\n * ```tsx\n * // Wrap your app with ThemeProvider\n * function App() {\n * return (\n * <ThemeProvider>\n * <YourApp />\n * </ThemeProvider>\n * );\n * }\n *\n * // With default theme\n * <ThemeProvider defaultTheme=\"dark\">\n * <YourApp />\n * </ThemeProvider>\n *\n * // With custom storage key\n * <ThemeProvider storageKey=\"my-app-theme\">\n * <YourApp />\n * </ThemeProvider>\n * ```\n */\nexport function ThemeProvider({\n children,\n defaultTheme,\n storageKey = THEME_STORAGE_KEY,\n}: ThemeProviderProps) {\n const [theme, setThemeState] = useState<ThemeMode>(() =>\n getInitialTheme(storageKey, defaultTheme)\n );\n\n // Apply theme to document on initial mount and when theme changes\n useLayoutEffect(() => {\n const isDark = theme === 'dark';\n document.documentElement.classList.toggle('dark', isDark);\n }, [theme]);\n\n // Persist to localStorage whenever theme changes\n useLayoutEffect(() => {\n localStorage.setItem(storageKey, theme);\n }, [theme, storageKey]);\n\n const setTheme = useCallback((newTheme: ThemeMode) => {\n setThemeState(newTheme);\n }, []);\n\n const toggleTheme = useCallback(() => {\n setThemeState((currentTheme) => (currentTheme === 'dark' ? 'light' : 'dark'));\n }, []);\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n theme,\n toggleTheme,\n setTheme,\n }),\n [theme, toggleTheme, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nThemeProvider.displayName = 'ThemeProvider';\n"],"names":[],"mappings":";;;AAsCA,MAAM,iBAAA,GAAoB,OAAA;AAMnB,MAAM,YAAA,GAAe,cAAwC,IAAI;AAExE,YAAA,CAAa,WAAA,GAAc,cAAA;AAQ3B,SAAS,eAAA,CAAgB,YAAoB,YAAA,EAAqC;AAEhF,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,MAAM,UAAA,GAAa,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA;AAClD,IAAA,IAAI,UAAA,KAAe,MAAA,IAAU,UAAA,KAAe,OAAA,EAAS;AACnD,MAAA,OAAO,UAAA;AAAA,IACT;AAAA,EACF;AAGA,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,OAAO,YAAA;AAAA,EACT;AAGA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,UAAA,CAAW,8BAA8B,CAAA,CAAE,OAAA;AAC5E,IAAA,OAAO,oBAAoB,MAAA,GAAS,OAAA;AAAA,EACtC;AAGA,EAAA,OAAO,OAAA;AACT;AAkCO,SAAS,aAAA,CAAc;AAAA,EAC5B,QAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAAuB;AACrB,EAAA,MAAM,CAAC,KAAA,EAAO,aAAa,CAAA,GAAI,QAAA;AAAA,IAAoB,MACjD,eAAA,CAAgB,UAAA,EAAY,YAAY;AAAA,GAC1C;AAGA,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,SAAS,KAAA,KAAU,MAAA;AACzB,IAAA,QAAA,CAAS,eAAA,CAAgB,SAAA,CAAU,MAAA,CAAO,MAAA,EAAQ,MAAM,CAAA;AAAA,EAC1D,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAGV,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,YAAA,CAAa,OAAA,CAAQ,YAAY,KAAK,CAAA;AAAA,EACxC,CAAA,EAAG,CAAC,KAAA,EAAO,UAAU,CAAC,CAAA;AAEtB,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,CAAC,QAAA,KAAwB;AACpD,IAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,EACxB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,aAAA,CAAc,CAAC,YAAA,KAAkB,YAAA,KAAiB,MAAA,GAAS,UAAU,MAAO,CAAA;AAAA,EAC9E,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,OAAO;AAAA,MACL,KAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,WAAA,EAAa,QAAQ;AAAA,GAC/B;AAEA,EAAA,uBAAO,GAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,OAAe,QAAA,EAAS,CAAA;AACxD;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { useState, useLayoutEffect } from 'react';
2
+ import { u as useTheme } from './useTheme.js';
3
3
  import { B as Button } from './Button.js';
4
4
  import { c as createLucideIcon } from './createLucideIcon.js';
5
5
 
@@ -44,20 +44,8 @@ const __iconNode = [
44
44
  const Sun = createLucideIcon("sun", __iconNode);
45
45
 
46
46
  const ThemeToggle = ({ className, size = "md" }) => {
47
- const [isDarkMode, setIsDarkMode] = useState(false);
48
- useLayoutEffect(() => {
49
- const savedTheme = localStorage.getItem("theme");
50
- const systemPrefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
51
- const shouldUseDark = savedTheme === "dark" || !savedTheme && systemPrefersDark;
52
- setIsDarkMode(shouldUseDark);
53
- document.documentElement.classList.toggle("dark", shouldUseDark);
54
- }, []);
55
- const toggleTheme = () => {
56
- const newDarkMode = !isDarkMode;
57
- setIsDarkMode(newDarkMode);
58
- document.documentElement.classList.toggle("dark", newDarkMode);
59
- localStorage.setItem("theme", newDarkMode ? "dark" : "light");
60
- };
47
+ const { theme, toggleTheme } = useTheme();
48
+ const isDarkMode = theme === "dark";
61
49
  return /* @__PURE__ */ jsxs(
62
50
  Button,
63
51
  {
@@ -85,6 +73,7 @@ const ThemeToggle = ({ className, size = "md" }) => {
85
73
  }
86
74
  );
87
75
  };
76
+ ThemeToggle.displayName = "ThemeToggle";
88
77
 
89
78
  export { ThemeToggle as T };
90
79
  //# sourceMappingURL=ThemeToggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeToggle.js","sources":["../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/moon.js","../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/sun.js","../lib/components/ThemeToggle/ThemeToggle.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\",\n key: \"kfwtm\"\n }\n ]\n];\nconst Moon = createLucideIcon(\"moon\", __iconNode);\n\nexport { __iconNode, Moon as default };\n//# sourceMappingURL=moon.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }],\n [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n [\"path\", { d: \"m4.93 4.93 1.41 1.41\", key: \"149t6j\" }],\n [\"path\", { d: \"m17.66 17.66 1.41 1.41\", key: \"ptbguv\" }],\n [\"path\", { d: \"M2 12h2\", key: \"1t8f8n\" }],\n [\"path\", { d: \"M20 12h2\", key: \"1q8mjw\" }],\n [\"path\", { d: \"m6.34 17.66-1.41 1.41\", key: \"1m8zz5\" }],\n [\"path\", { d: \"m19.07 4.93-1.41 1.41\", key: \"1shlcs\" }]\n];\nconst Sun = createLucideIcon(\"sun\", __iconNode);\n\nexport { __iconNode, Sun as default };\n//# sourceMappingURL=sun.js.map\n","import { Moon, Sun } from 'lucide-react';\nimport type React from 'react';\nimport { useLayoutEffect, useState } from 'react';\nimport { Button } from '../Button/Button';\n\nexport interface ThemeToggleProps {\n /**\n * Custom className for the toggle button\n */\n className?: string;\n\n /**\n * Size of the toggle button\n */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport const ThemeToggle: React.FC<ThemeToggleProps> = ({ className, size = 'md' }) => {\n const [isDarkMode, setIsDarkMode] = useState(false);\n\n useLayoutEffect(() => {\n // Check for saved theme preference or system preference\n const savedTheme = localStorage.getItem('theme');\n const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n const shouldUseDark = savedTheme === 'dark' || (!savedTheme && systemPrefersDark);\n\n setIsDarkMode(shouldUseDark);\n document.documentElement.classList.toggle('dark', shouldUseDark);\n }, []);\n\n const toggleTheme = () => {\n const newDarkMode = !isDarkMode;\n setIsDarkMode(newDarkMode);\n\n // Update DOM and localStorage\n document.documentElement.classList.toggle('dark', newDarkMode);\n localStorage.setItem('theme', newDarkMode ? 'dark' : 'light');\n };\n\n return (\n <Button\n variant=\"ghost\"\n size={size === 'md' ? 'default' : size}\n onClick={toggleTheme}\n className={`text-foreground ${className}`}\n aria-label={`Switch to ${isDarkMode ? 'light' : 'dark'} theme`}\n >\n <Sun\n className={`h-4 w-4 transition-all ${isDarkMode ? 'scale-0 -rotate-90' : 'scale-100 rotate-0'}`}\n aria-hidden\n />\n <Moon\n className={`absolute h-4 w-4 transition-all ${isDarkMode ? 'scale-100 rotate-0' : 'scale-0 rotate-90'}`}\n aria-hidden\n />\n </Button>\n );\n};\n"],"names":["__iconNode"],"mappings":"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","x_google_ignoreList":[0,1]}
1
+ {"version":3,"file":"ThemeToggle.js","sources":["../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/moon.js","../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/sun.js","../lib/components/ThemeToggle/ThemeToggle.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\",\n key: \"kfwtm\"\n }\n ]\n];\nconst Moon = createLucideIcon(\"moon\", __iconNode);\n\nexport { __iconNode, Moon as default };\n//# sourceMappingURL=moon.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"path\", { d: \"M12 2v2\", key: \"tus03m\" }],\n [\"path\", { d: \"M12 20v2\", key: \"1lh1kg\" }],\n [\"path\", { d: \"m4.93 4.93 1.41 1.41\", key: \"149t6j\" }],\n [\"path\", { d: \"m17.66 17.66 1.41 1.41\", key: \"ptbguv\" }],\n [\"path\", { d: \"M2 12h2\", key: \"1t8f8n\" }],\n [\"path\", { d: \"M20 12h2\", key: \"1q8mjw\" }],\n [\"path\", { d: \"m6.34 17.66-1.41 1.41\", key: \"1m8zz5\" }],\n [\"path\", { d: \"m19.07 4.93-1.41 1.41\", key: \"1shlcs\" }]\n];\nconst Sun = createLucideIcon(\"sun\", __iconNode);\n\nexport { __iconNode, Sun as default };\n//# sourceMappingURL=sun.js.map\n","import { Moon, Sun } from 'lucide-react';\nimport type React from 'react';\nimport { useTheme } from '../../hooks/useTheme';\nimport { Button } from '../Button/Button';\n\nexport interface ThemeToggleProps {\n /**\n * Custom className for the toggle button\n */\n className?: string;\n\n /**\n * Size of the toggle button\n */\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * ThemeToggle component for switching between light and dark themes.\n *\n * Uses the useTheme hook internally for theme state management.\n *\n * @example\n * ```tsx\n * <ThemeToggle />\n * <ThemeToggle size=\"lg\" className=\"custom-class\" />\n * ```\n */\nexport const ThemeToggle: React.FC<ThemeToggleProps> = ({ className, size = 'md' }) => {\n const { theme, toggleTheme } = useTheme();\n const isDarkMode = theme === 'dark';\n\n return (\n <Button\n variant=\"ghost\"\n size={size === 'md' ? 'default' : size}\n onClick={toggleTheme}\n className={`text-foreground ${className}`}\n aria-label={`Switch to ${isDarkMode ? 'light' : 'dark'} theme`}\n >\n <Sun\n className={`h-4 w-4 transition-all ${isDarkMode ? 'scale-0 -rotate-90' : 'scale-100 rotate-0'}`}\n aria-hidden\n />\n <Moon\n className={`absolute h-4 w-4 transition-all ${isDarkMode ? 'scale-100 rotate-0' : 'scale-0 rotate-90'}`}\n aria-hidden\n />\n </Button>\n );\n};\n\nThemeToggle.displayName = 'ThemeToggle';\n"],"names":["__iconNode"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAMA,YAAU,GAAG;AACnB,EAAE;AACF,IAAI,MAAM;AACV,IAAI;AACJ,MAAM,CAAC,EAAE,gHAAgH;AACzH,MAAM,GAAG,EAAE;AACX;AACA;AACA,CAAC;AACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAEA,YAAU,CAAC;;AClBjD;AACA;AACA;AACA;AACA;AACA;;;AAIA,MAAM,UAAU,GAAG;AACnB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3D,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,sBAAsB,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACxD,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,wBAAwB,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC1D,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC5C,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,uBAAuB,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AACzD,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,uBAAuB,EAAE,GAAG,EAAE,QAAQ,EAAE;AACxD,CAAC;AACD,MAAM,GAAG,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC;;ACQxC,MAAM,cAA0C,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,MAAK,KAAM;AACrF,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAI,QAAA,EAAS;AACxC,EAAA,MAAM,aAAa,KAAA,KAAU,MAAA;AAE7B,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,IAAA,KAAS,IAAA,GAAO,SAAA,GAAY,IAAA;AAAA,MAClC,OAAA,EAAS,WAAA;AAAA,MACT,SAAA,EAAW,mBAAmB,SAAS,CAAA,CAAA;AAAA,MACvC,YAAA,EAAY,CAAA,UAAA,EAAa,UAAA,GAAa,OAAA,GAAU,MAAM,CAAA,MAAA,CAAA;AAAA,MAEtD,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,uBAAA,EAA0B,UAAA,GAAa,oBAAA,GAAuB,oBAAoB,CAAA,CAAA;AAAA,YAC7F,aAAA,EAAW;AAAA;AAAA,SACb;AAAA,wBACA,GAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,CAAA,gCAAA,EAAmC,UAAA,GAAa,oBAAA,GAAuB,mBAAmB,CAAA,CAAA;AAAA,YACrG,aAAA,EAAW;AAAA;AAAA;AACb;AAAA;AAAA,GACF;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;;;;","x_google_ignoreList":[0,1]}
package/dist/Toggle.js ADDED
@@ -0,0 +1,69 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import * as React from 'react';
3
+ import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './index12.js';
4
+ import { c as cva } from './index8.js';
5
+ import { c as cn } from './utils.js';
6
+
7
+ var NAME = "Toggle";
8
+ var Toggle$2 = React.forwardRef((props, forwardedRef) => {
9
+ const { pressed: pressedProp, defaultPressed, onPressedChange, ...buttonProps } = props;
10
+ const [pressed, setPressed] = useControllableState({
11
+ prop: pressedProp,
12
+ onChange: onPressedChange,
13
+ defaultProp: defaultPressed ?? false,
14
+ caller: NAME
15
+ });
16
+ return /* @__PURE__ */ jsx(
17
+ Primitive.button,
18
+ {
19
+ type: "button",
20
+ "aria-pressed": pressed,
21
+ "data-state": pressed ? "on" : "off",
22
+ "data-disabled": props.disabled ? "" : void 0,
23
+ ...buttonProps,
24
+ ref: forwardedRef,
25
+ onClick: composeEventHandlers(props.onClick, () => {
26
+ if (!props.disabled) {
27
+ setPressed(!pressed);
28
+ }
29
+ })
30
+ }
31
+ );
32
+ });
33
+ Toggle$2.displayName = NAME;
34
+ var Root = Toggle$2;
35
+
36
+ const toggleVariants$1 = cva(
37
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap",
38
+ {
39
+ variants: {
40
+ variant: {
41
+ default: "bg-transparent",
42
+ outline: "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"
43
+ },
44
+ size: {
45
+ default: "h-9 px-2 min-w-9",
46
+ sm: "h-8 px-1.5 min-w-8",
47
+ lg: "h-10 px-2.5 min-w-10"
48
+ }
49
+ },
50
+ defaultVariants: {
51
+ variant: "default",
52
+ size: "default"
53
+ }
54
+ }
55
+ );
56
+ function Toggle$1({
57
+ className,
58
+ variant,
59
+ size,
60
+ ...props
61
+ }) {
62
+ return /* @__PURE__ */ jsx(Root, { "data-slot": "toggle", className: cn(toggleVariants$1({ variant, size, className })), ...props });
63
+ }
64
+
65
+ const Toggle = Toggle$1;
66
+ const toggleVariants = toggleVariants$1;
67
+
68
+ export { Toggle as T, toggleVariants as t };
69
+ //# sourceMappingURL=Toggle.js.map