@luxfi/ui 5.5.3 → 5.6.0

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 (244) hide show
  1. package/dist/accordion.cjs +213 -0
  2. package/dist/accordion.js +186 -0
  3. package/dist/alert.cjs +553 -0
  4. package/dist/alert.js +531 -0
  5. package/dist/avatar.cjs +149 -0
  6. package/dist/avatar.js +125 -0
  7. package/dist/badge.cjs +611 -0
  8. package/dist/badge.js +589 -0
  9. package/dist/button.cjs +689 -0
  10. package/dist/button.js +664 -0
  11. package/dist/checkbox.cjs +265 -0
  12. package/dist/checkbox.js +241 -0
  13. package/dist/close-button.cjs +73 -0
  14. package/dist/close-button.js +51 -0
  15. package/dist/collapsible.cjs +702 -0
  16. package/dist/collapsible.js +679 -0
  17. package/dist/color-mode.cjs +96 -0
  18. package/dist/color-mode.js +72 -0
  19. package/dist/dialog.cjs +279 -0
  20. package/dist/dialog.js +246 -0
  21. package/dist/drawer.cjs +207 -0
  22. package/dist/drawer.js +175 -0
  23. package/dist/empty-state.cjs +93 -0
  24. package/dist/empty-state.js +71 -0
  25. package/dist/field.cjs +183 -0
  26. package/dist/field.js +160 -0
  27. package/dist/heading.cjs +46 -0
  28. package/dist/heading.js +40 -0
  29. package/dist/icon-button.cjs +491 -0
  30. package/dist/icon-button.js +470 -0
  31. package/dist/image.cjs +572 -0
  32. package/dist/image.js +551 -0
  33. package/dist/index.cjs +5779 -0
  34. package/dist/index.js +5619 -0
  35. package/dist/input-group.cjs +155 -0
  36. package/dist/input-group.js +133 -0
  37. package/dist/input.cjs +65 -0
  38. package/dist/input.js +59 -0
  39. package/dist/link.cjs +630 -0
  40. package/dist/link.js +606 -0
  41. package/dist/menu.cjs +305 -0
  42. package/dist/menu.js +269 -0
  43. package/dist/pin-input.cjs +182 -0
  44. package/dist/pin-input.js +160 -0
  45. package/dist/popover.cjs +327 -0
  46. package/dist/popover.js +294 -0
  47. package/dist/progress-circle.cjs +152 -0
  48. package/dist/progress-circle.js +128 -0
  49. package/dist/progress.cjs +117 -0
  50. package/dist/progress.js +94 -0
  51. package/dist/provider.cjs +62 -0
  52. package/dist/provider.js +40 -0
  53. package/dist/radio.cjs +177 -0
  54. package/dist/radio.js +153 -0
  55. package/dist/rating.cjs +80 -0
  56. package/dist/rating.js +58 -0
  57. package/dist/select.cjs +791 -0
  58. package/dist/select.js +757 -0
  59. package/dist/separator.cjs +57 -0
  60. package/dist/separator.js +51 -0
  61. package/dist/skeleton.cjs +370 -0
  62. package/dist/skeleton.js +346 -0
  63. package/dist/slider.cjs +138 -0
  64. package/dist/slider.js +115 -0
  65. package/dist/switch.cjs +163 -0
  66. package/dist/switch.js +140 -0
  67. package/dist/table.cjs +1044 -0
  68. package/dist/table.js +1013 -0
  69. package/dist/tabs.cjs +240 -0
  70. package/dist/tabs.js +213 -0
  71. package/dist/tag.cjs +651 -0
  72. package/dist/tag.js +628 -0
  73. package/dist/textarea.cjs +65 -0
  74. package/dist/textarea.js +59 -0
  75. package/dist/toaster.cjs +99 -0
  76. package/dist/toaster.js +96 -0
  77. package/dist/tooltip.cjs +171 -0
  78. package/dist/tooltip.js +148 -0
  79. package/dist/utils.cjs +11 -0
  80. package/dist/utils.js +9 -0
  81. package/package.json +270 -65
  82. package/src/accordion.tsx +285 -0
  83. package/src/alert.tsx +221 -0
  84. package/src/avatar.tsx +174 -0
  85. package/src/badge.tsx +158 -0
  86. package/src/button.tsx +411 -0
  87. package/src/checkbox.tsx +307 -0
  88. package/src/close-button.tsx +51 -0
  89. package/src/collapsible.tsx +126 -0
  90. package/src/color-mode.tsx +125 -0
  91. package/src/dialog.tsx +356 -0
  92. package/src/drawer.tsx +186 -0
  93. package/src/empty-state.tsx +97 -0
  94. package/src/field.tsx +202 -0
  95. package/src/heading.tsx +55 -0
  96. package/src/icon-button.tsx +192 -0
  97. package/src/image.tsx +280 -0
  98. package/src/index.ts +192 -0
  99. package/src/input-group.tsx +159 -0
  100. package/src/input.tsx +60 -0
  101. package/src/link.tsx +326 -0
  102. package/src/menu.tsx +471 -0
  103. package/src/pin-input.tsx +187 -0
  104. package/src/popover.tsx +400 -0
  105. package/src/progress-circle.tsx +180 -0
  106. package/src/progress.tsx +109 -0
  107. package/src/provider.tsx +12 -0
  108. package/src/radio.tsx +175 -0
  109. package/src/rating.tsx +79 -0
  110. package/src/select.tsx +696 -0
  111. package/src/separator.tsx +59 -0
  112. package/src/skeleton.tsx +302 -0
  113. package/src/slider.tsx +152 -0
  114. package/src/switch.tsx +158 -0
  115. package/src/table.tsx +621 -0
  116. package/src/tabs.tsx +354 -0
  117. package/src/tag.tsx +159 -0
  118. package/src/textarea.tsx +60 -0
  119. package/src/toaster.tsx +117 -0
  120. package/src/tokens.css +438 -0
  121. package/src/tooltip.tsx +184 -0
  122. package/src/utils/cn.ts +7 -0
  123. package/src/utils.ts +6 -0
  124. package/tokens.css +438 -0
  125. package/commerce/ui/conf.ts +0 -13
  126. package/commerce/ui/context.tsx +0 -123
  127. package/commerce/ui/store.ts +0 -295
  128. package/components/access-code-input.tsx +0 -71
  129. package/components/analytics.tsx +0 -23
  130. package/components/auth/auth-listener.tsx +0 -29
  131. package/components/auth/auth-token/clear-auth-token.tsx +0 -12
  132. package/components/auth/auth-token/set-auth-token.tsx +0 -16
  133. package/components/auth/common-auth-domains.ts +0 -17
  134. package/components/auth/login-panel.tsx +0 -111
  135. package/components/auth/mobile-login-button.tsx +0 -107
  136. package/components/auth/signup-panel.tsx +0 -113
  137. package/components/back-button.tsx +0 -49
  138. package/components/chat-widget.tsx +0 -85
  139. package/components/commerce/bag-button.tsx +0 -98
  140. package/components/commerce/buy-button.tsx +0 -34
  141. package/components/commerce/checkout-button.tsx +0 -129
  142. package/components/commerce/checkout-panel/cart-accordian.tsx +0 -66
  143. package/components/commerce/checkout-panel/checkout-panel-props.ts +0 -10
  144. package/components/commerce/checkout-panel/desktop-bag-carousel.tsx +0 -36
  145. package/components/commerce/checkout-panel/desktop-cp.tsx +0 -83
  146. package/components/commerce/checkout-panel/index.tsx +0 -126
  147. package/components/commerce/checkout-panel/mobile-cp.tsx +0 -67
  148. package/components/commerce/checkout-panel/policy-links.tsx +0 -29
  149. package/components/commerce/checkout-panel/steps-indicator.tsx +0 -39
  150. package/components/commerce/checkout-panel/thank-you.tsx +0 -18
  151. package/components/commerce/desktop-bag-popup.tsx +0 -78
  152. package/components/commerce/drawer/index.tsx +0 -88
  153. package/components/commerce/drawer/micro.tsx +0 -145
  154. package/components/commerce/drawer/shell.tsx +0 -85
  155. package/components/contact-dialog/contact-form.tsx +0 -116
  156. package/components/contact-dialog/disclaimer.tsx +0 -13
  157. package/components/contact-dialog/index.tsx +0 -64
  158. package/components/copyright.tsx +0 -21
  159. package/components/drawer-margin.tsx +0 -28
  160. package/components/footer.tsx +0 -78
  161. package/components/header/desktop-nav-menu.tsx +0 -204
  162. package/components/header/desktop.tsx +0 -65
  163. package/components/header/index.tsx +0 -50
  164. package/components/header/mobile-bag-drawer.tsx +0 -51
  165. package/components/header/mobile-menu-toggle-button.tsx +0 -35
  166. package/components/header/mobile-nav-menu-ai.tsx +0 -51
  167. package/components/header/mobile-nav-menu-item.tsx +0 -47
  168. package/components/header/mobile-nav-menu.tsx +0 -102
  169. package/components/header/mobile.tsx +0 -170
  170. package/components/header/theme-toggle.tsx +0 -26
  171. package/components/icons/avatar.tsx +0 -11
  172. package/components/icons/bag-icon.tsx +0 -10
  173. package/components/icons/index.ts +0 -6
  174. package/components/icons/left-arrow.tsx +0 -11
  175. package/components/icons/lux-logo.tsx +0 -10
  176. package/components/icons/right-arrow.tsx +0 -10
  177. package/components/icons/social-icon.tsx +0 -35
  178. package/components/icons/social-svg.css +0 -3
  179. package/components/index.ts +0 -26
  180. package/components/logo.tsx +0 -92
  181. package/components/main.tsx +0 -27
  182. package/components/mini-chart/index.tsx +0 -8
  183. package/components/mini-chart/mini-chart-props.ts +0 -44
  184. package/components/mini-chart/mini-chart.tsx +0 -85
  185. package/components/mini-chart/wrapper.tsx +0 -23
  186. package/components/not-found/index.tsx +0 -28
  187. package/components/not-found/not-found-content.mdx +0 -5
  188. package/components/tooltip.tsx +0 -31
  189. package/environment.d.ts +0 -6
  190. package/next/analytics/fpixel.ts +0 -16
  191. package/next/analytics/google-analytics.ts +0 -14
  192. package/next/analytics/index.ts +0 -3
  193. package/next/analytics/pixel-analytics.tsx +0 -55
  194. package/next/font/get-app-router-font-classes.ts +0 -17
  195. package/next/font/load-and-return-lux-next-fonts-on-import.ts +0 -68
  196. package/next/font/local/Druk-Wide-Bold.ttf +0 -0
  197. package/next/font/local/Druk-Wide-Medium.ttf +0 -0
  198. package/next/font/local/InterVariable-Italic.ttf +0 -0
  199. package/next/font/local/InterVariable-Italic.woff2 +0 -0
  200. package/next/font/local/InterVariable.ttf +0 -0
  201. package/next/font/local/InterVariable.woff2 +0 -0
  202. package/next/font/next-font-desc.ts +0 -28
  203. package/next/font/pages-router-font-vars.tsx +0 -18
  204. package/next/head-metadata/from-next/metadata-types.ts +0 -158
  205. package/next/head-metadata/from-next/opengraph-types.ts +0 -267
  206. package/next/head-metadata/from-next/twitter-types.ts +0 -92
  207. package/next/head-metadata/index.tsx +0 -208
  208. package/next/index.ts +0 -2
  209. package/next/middleware/determine-device-mw.ts +0 -29
  210. package/root-layout/WHY_THIS_IS_SEPARATE.txt +0 -2
  211. package/root-layout/index.tsx +0 -112
  212. package/site-def/footer/community.tsx +0 -61
  213. package/site-def/footer/company.ts +0 -37
  214. package/site-def/footer/ecosystem.ts +0 -37
  215. package/site-def/footer/index.tsx +0 -26
  216. package/site-def/footer/legal.ts +0 -28
  217. package/site-def/footer/network.ts +0 -45
  218. package/site-def/footer/svg/warpcast-logo.svg +0 -12
  219. package/site-def/index.ts +0 -4
  220. package/site-def/main-nav.tsx +0 -460
  221. package/style/cart-animation.css +0 -29
  222. package/style/checkout-animation.css +0 -23
  223. package/style/drawer-handle-overrides.css +0 -160
  224. package/style/fonts/COPY_TO_PUBLIC_FOR_NON_NEXT.txt +0 -0
  225. package/style/fonts/Druk-Wide-Bold.ttf +0 -0
  226. package/style/fonts/Druk-Wide-Medium.ttf +0 -0
  227. package/style/fonts/InterVariable-Italic.ttf +0 -0
  228. package/style/fonts/InterVariable-Italic.woff2 +0 -0
  229. package/style/fonts/InterVariable.ttf +0 -0
  230. package/style/fonts/InterVariable.woff2 +0 -0
  231. package/style/lux-colors.css +0 -85
  232. package/style/lux-fonts.css +0 -30
  233. package/style/lux-global-non-next.css +0 -52
  234. package/style/lux-global.css +0 -51
  235. package/tailwind/fontFamily.tailwind.lux.ts +0 -18
  236. package/tailwind/index.ts +0 -2
  237. package/tailwind/lux-tw-fonts.ts +0 -40
  238. package/tailwind/tailwind.config.lux-preset.ts +0 -10
  239. package/tsconfig.json +0 -15
  240. package/types/chatbot-config.ts +0 -7
  241. package/types/chatbot-suggested-question.ts +0 -7
  242. package/types/contact-info.ts +0 -11
  243. package/types/index.ts +0 -4
  244. package/types/site-def.ts +0 -46
@@ -0,0 +1,265 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var RadixCheckbox = require('@radix-ui/react-checkbox');
5
+ var React = require('react');
6
+ var clsx = require('clsx');
7
+ var tailwindMerge = require('tailwind-merge');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var RadixCheckbox__namespace = /*#__PURE__*/_interopNamespace(RadixCheckbox);
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+
31
+ // src/checkbox.tsx
32
+ function cn(...inputs) {
33
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
34
+ }
35
+ var NOOP = () => {
36
+ };
37
+ var CheckboxGroupContext = React__namespace.createContext(null);
38
+ function useCheckboxGroupContext() {
39
+ return React__namespace.useContext(CheckboxGroupContext);
40
+ }
41
+ var CheckboxGroupBase = React__namespace.forwardRef(
42
+ function CheckboxGroup(props, ref) {
43
+ const {
44
+ children,
45
+ value: controlledValue,
46
+ defaultValue,
47
+ onValueChange,
48
+ orientation = "vertical",
49
+ name: _name,
50
+ className,
51
+ ...rest
52
+ } = props;
53
+ const [uncontrolledValue, setUncontrolledValue] = React__namespace.useState(defaultValue ?? []);
54
+ const isControlled = controlledValue !== void 0;
55
+ const value = isControlled ? controlledValue : uncontrolledValue;
56
+ const toggle = React__namespace.useCallback(
57
+ (itemValue) => {
58
+ const next = value.includes(itemValue) ? value.filter((v) => v !== itemValue) : [...value, itemValue];
59
+ if (!isControlled) {
60
+ setUncontrolledValue(next);
61
+ }
62
+ onValueChange?.(next);
63
+ },
64
+ [value, isControlled, onValueChange]
65
+ );
66
+ React__namespace.useEffect(() => {
67
+ if (isControlled) {
68
+ setUncontrolledValue(controlledValue);
69
+ }
70
+ }, [isControlled, controlledValue]);
71
+ const ctx = React__namespace.useMemo(() => ({ value, toggle }), [value, toggle]);
72
+ return /* @__PURE__ */ jsxRuntime.jsx(CheckboxGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxRuntime.jsx(
73
+ "div",
74
+ {
75
+ ref,
76
+ role: "group",
77
+ className: cn(
78
+ "flex",
79
+ orientation === "vertical" ? "flex-col gap-3" : "flex-row gap-8",
80
+ className
81
+ ),
82
+ ...rest,
83
+ children
84
+ }
85
+ ) });
86
+ }
87
+ );
88
+ var CheckboxGroup2 = CheckboxGroupBase;
89
+ var SIZE_CLASSES = {
90
+ sm: {
91
+ root: "gap-1.5",
92
+ control: "h-3.5 w-3.5 rounded-sm",
93
+ label: "text-xs",
94
+ icon: "h-3 w-3"
95
+ },
96
+ md: {
97
+ root: "gap-2",
98
+ control: "h-4 w-4 rounded",
99
+ label: "text-sm",
100
+ icon: "h-3.5 w-3.5"
101
+ }
102
+ };
103
+ var CheckIcon = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx(
104
+ "svg",
105
+ {
106
+ className,
107
+ viewBox: "0 0 12 10",
108
+ fill: "none",
109
+ xmlns: "http://www.w3.org/2000/svg",
110
+ children: /* @__PURE__ */ jsxRuntime.jsx(
111
+ "path",
112
+ {
113
+ d: "M10.59 0.59L4 7.17L1.41 4.59L0 6L4 10L12 2L10.59 0.59Z",
114
+ fill: "currentColor"
115
+ }
116
+ )
117
+ }
118
+ );
119
+ var IndeterminateIcon = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx(
120
+ "svg",
121
+ {
122
+ className,
123
+ viewBox: "0 0 12 2",
124
+ fill: "none",
125
+ xmlns: "http://www.w3.org/2000/svg",
126
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0 0H12V2H0V0Z", fill: "currentColor" })
127
+ }
128
+ );
129
+ var CheckboxBase = React__namespace.forwardRef(
130
+ function Checkbox(props, ref) {
131
+ const {
132
+ icon,
133
+ children,
134
+ inputProps,
135
+ rootRef,
136
+ checked: checkedProp,
137
+ defaultChecked,
138
+ onCheckedChange,
139
+ onChange,
140
+ disabled = false,
141
+ readOnly = false,
142
+ value,
143
+ size = "md",
144
+ name,
145
+ required,
146
+ className,
147
+ ...rest
148
+ } = props;
149
+ const group = useCheckboxGroupContext();
150
+ const hiddenInputRef = React__namespace.useRef(null);
151
+ const setHiddenInputRef = React__namespace.useCallback(
152
+ (node) => {
153
+ hiddenInputRef.current = node;
154
+ if (typeof ref === "function") {
155
+ ref(node);
156
+ } else if (ref) {
157
+ ref.current = node;
158
+ }
159
+ },
160
+ [ref]
161
+ );
162
+ const isInGroup = group !== null && value !== void 0;
163
+ const groupChecked = isInGroup ? group.value.includes(value) : void 0;
164
+ const [internalChecked, setInternalChecked] = React__namespace.useState(
165
+ defaultChecked ?? false
166
+ );
167
+ const isControlled = checkedProp !== void 0 || isInGroup;
168
+ let checkedState;
169
+ if (checkedProp !== void 0) {
170
+ checkedState = checkedProp;
171
+ } else if (isInGroup) {
172
+ checkedState = groupChecked ?? false;
173
+ } else {
174
+ checkedState = internalChecked;
175
+ }
176
+ const handleCheckedChange = React__namespace.useCallback(
177
+ (nextChecked) => {
178
+ if (readOnly) return;
179
+ if (!isControlled) {
180
+ setInternalChecked(nextChecked);
181
+ }
182
+ if (isInGroup) {
183
+ group.toggle(value);
184
+ }
185
+ onCheckedChange?.(nextChecked);
186
+ if (onChange && hiddenInputRef.current) {
187
+ const input = hiddenInputRef.current;
188
+ const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
189
+ HTMLInputElement.prototype,
190
+ "checked"
191
+ )?.set;
192
+ nativeInputValueSetter?.call(input, nextChecked === true);
193
+ const event = new Event("change", { bubbles: true });
194
+ input.dispatchEvent(event);
195
+ }
196
+ },
197
+ [readOnly, isControlled, isInGroup, group, value, onCheckedChange, onChange]
198
+ );
199
+ const sizeClasses = SIZE_CLASSES[size];
200
+ return /* @__PURE__ */ jsxRuntime.jsxs(
201
+ "label",
202
+ {
203
+ ref: rootRef,
204
+ className: cn(
205
+ "inline-flex items-center cursor-pointer select-none",
206
+ sizeClasses.root,
207
+ disabled && "opacity-50 cursor-not-allowed",
208
+ readOnly && "cursor-default",
209
+ className
210
+ ),
211
+ onChange,
212
+ "data-disabled": disabled || void 0,
213
+ "data-readonly": readOnly || void 0,
214
+ ...rest,
215
+ children: [
216
+ /* @__PURE__ */ jsxRuntime.jsx(
217
+ RadixCheckbox__namespace.Root,
218
+ {
219
+ checked: checkedState,
220
+ onCheckedChange: handleCheckedChange,
221
+ disabled: disabled || readOnly,
222
+ name,
223
+ value,
224
+ required,
225
+ className: cn(
226
+ "inline-flex items-center justify-center shrink-0",
227
+ "border-2 border-current/30",
228
+ "data-[state=checked]:bg-gray-800 data-[state=checked]:text-white",
229
+ "dark:data-[state=checked]:bg-white dark:data-[state=checked]:text-black",
230
+ "data-[state=indeterminate]:bg-gray-800 data-[state=indeterminate]:text-white",
231
+ "dark:data-[state=indeterminate]:bg-white dark:data-[state=indeterminate]:text-black",
232
+ "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-500",
233
+ "transition-colors duration-150",
234
+ sizeClasses.control
235
+ ),
236
+ children: icon ?? /* @__PURE__ */ jsxRuntime.jsx(RadixCheckbox__namespace.Indicator, { className: cn("flex items-center justify-center", sizeClasses.icon), children: checkedState === "indeterminate" ? /* @__PURE__ */ jsxRuntime.jsx(IndeterminateIcon, { className: sizeClasses.icon }) : /* @__PURE__ */ jsxRuntime.jsx(CheckIcon, { className: sizeClasses.icon }) })
237
+ }
238
+ ),
239
+ /* @__PURE__ */ jsxRuntime.jsx(
240
+ "input",
241
+ {
242
+ ref: setHiddenInputRef,
243
+ type: "checkbox",
244
+ className: "sr-only",
245
+ checked: checkedState === true,
246
+ disabled,
247
+ readOnly,
248
+ name,
249
+ value,
250
+ tabIndex: -1,
251
+ "aria-hidden": true,
252
+ onChange: NOOP,
253
+ ...inputProps
254
+ }
255
+ ),
256
+ children != null && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn(sizeClasses.label), children })
257
+ ]
258
+ }
259
+ );
260
+ }
261
+ );
262
+ var Checkbox2 = CheckboxBase;
263
+
264
+ exports.Checkbox = Checkbox2;
265
+ exports.CheckboxGroup = CheckboxGroup2;
@@ -0,0 +1,241 @@
1
+ "use client";
2
+ import * as RadixCheckbox from '@radix-ui/react-checkbox';
3
+ import * as React from 'react';
4
+ import { clsx } from 'clsx';
5
+ import { twMerge } from 'tailwind-merge';
6
+ import { jsx, jsxs } from 'react/jsx-runtime';
7
+
8
+ // src/checkbox.tsx
9
+ function cn(...inputs) {
10
+ return twMerge(clsx(inputs));
11
+ }
12
+ var NOOP = () => {
13
+ };
14
+ var CheckboxGroupContext = React.createContext(null);
15
+ function useCheckboxGroupContext() {
16
+ return React.useContext(CheckboxGroupContext);
17
+ }
18
+ var CheckboxGroupBase = React.forwardRef(
19
+ function CheckboxGroup(props, ref) {
20
+ const {
21
+ children,
22
+ value: controlledValue,
23
+ defaultValue,
24
+ onValueChange,
25
+ orientation = "vertical",
26
+ name: _name,
27
+ className,
28
+ ...rest
29
+ } = props;
30
+ const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue ?? []);
31
+ const isControlled = controlledValue !== void 0;
32
+ const value = isControlled ? controlledValue : uncontrolledValue;
33
+ const toggle = React.useCallback(
34
+ (itemValue) => {
35
+ const next = value.includes(itemValue) ? value.filter((v) => v !== itemValue) : [...value, itemValue];
36
+ if (!isControlled) {
37
+ setUncontrolledValue(next);
38
+ }
39
+ onValueChange?.(next);
40
+ },
41
+ [value, isControlled, onValueChange]
42
+ );
43
+ React.useEffect(() => {
44
+ if (isControlled) {
45
+ setUncontrolledValue(controlledValue);
46
+ }
47
+ }, [isControlled, controlledValue]);
48
+ const ctx = React.useMemo(() => ({ value, toggle }), [value, toggle]);
49
+ return /* @__PURE__ */ jsx(CheckboxGroupContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx(
50
+ "div",
51
+ {
52
+ ref,
53
+ role: "group",
54
+ className: cn(
55
+ "flex",
56
+ orientation === "vertical" ? "flex-col gap-3" : "flex-row gap-8",
57
+ className
58
+ ),
59
+ ...rest,
60
+ children
61
+ }
62
+ ) });
63
+ }
64
+ );
65
+ var CheckboxGroup2 = CheckboxGroupBase;
66
+ var SIZE_CLASSES = {
67
+ sm: {
68
+ root: "gap-1.5",
69
+ control: "h-3.5 w-3.5 rounded-sm",
70
+ label: "text-xs",
71
+ icon: "h-3 w-3"
72
+ },
73
+ md: {
74
+ root: "gap-2",
75
+ control: "h-4 w-4 rounded",
76
+ label: "text-sm",
77
+ icon: "h-3.5 w-3.5"
78
+ }
79
+ };
80
+ var CheckIcon = ({ className }) => /* @__PURE__ */ jsx(
81
+ "svg",
82
+ {
83
+ className,
84
+ viewBox: "0 0 12 10",
85
+ fill: "none",
86
+ xmlns: "http://www.w3.org/2000/svg",
87
+ children: /* @__PURE__ */ jsx(
88
+ "path",
89
+ {
90
+ d: "M10.59 0.59L4 7.17L1.41 4.59L0 6L4 10L12 2L10.59 0.59Z",
91
+ fill: "currentColor"
92
+ }
93
+ )
94
+ }
95
+ );
96
+ var IndeterminateIcon = ({ className }) => /* @__PURE__ */ jsx(
97
+ "svg",
98
+ {
99
+ className,
100
+ viewBox: "0 0 12 2",
101
+ fill: "none",
102
+ xmlns: "http://www.w3.org/2000/svg",
103
+ children: /* @__PURE__ */ jsx("path", { d: "M0 0H12V2H0V0Z", fill: "currentColor" })
104
+ }
105
+ );
106
+ var CheckboxBase = React.forwardRef(
107
+ function Checkbox(props, ref) {
108
+ const {
109
+ icon,
110
+ children,
111
+ inputProps,
112
+ rootRef,
113
+ checked: checkedProp,
114
+ defaultChecked,
115
+ onCheckedChange,
116
+ onChange,
117
+ disabled = false,
118
+ readOnly = false,
119
+ value,
120
+ size = "md",
121
+ name,
122
+ required,
123
+ className,
124
+ ...rest
125
+ } = props;
126
+ const group = useCheckboxGroupContext();
127
+ const hiddenInputRef = React.useRef(null);
128
+ const setHiddenInputRef = React.useCallback(
129
+ (node) => {
130
+ hiddenInputRef.current = node;
131
+ if (typeof ref === "function") {
132
+ ref(node);
133
+ } else if (ref) {
134
+ ref.current = node;
135
+ }
136
+ },
137
+ [ref]
138
+ );
139
+ const isInGroup = group !== null && value !== void 0;
140
+ const groupChecked = isInGroup ? group.value.includes(value) : void 0;
141
+ const [internalChecked, setInternalChecked] = React.useState(
142
+ defaultChecked ?? false
143
+ );
144
+ const isControlled = checkedProp !== void 0 || isInGroup;
145
+ let checkedState;
146
+ if (checkedProp !== void 0) {
147
+ checkedState = checkedProp;
148
+ } else if (isInGroup) {
149
+ checkedState = groupChecked ?? false;
150
+ } else {
151
+ checkedState = internalChecked;
152
+ }
153
+ const handleCheckedChange = React.useCallback(
154
+ (nextChecked) => {
155
+ if (readOnly) return;
156
+ if (!isControlled) {
157
+ setInternalChecked(nextChecked);
158
+ }
159
+ if (isInGroup) {
160
+ group.toggle(value);
161
+ }
162
+ onCheckedChange?.(nextChecked);
163
+ if (onChange && hiddenInputRef.current) {
164
+ const input = hiddenInputRef.current;
165
+ const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
166
+ HTMLInputElement.prototype,
167
+ "checked"
168
+ )?.set;
169
+ nativeInputValueSetter?.call(input, nextChecked === true);
170
+ const event = new Event("change", { bubbles: true });
171
+ input.dispatchEvent(event);
172
+ }
173
+ },
174
+ [readOnly, isControlled, isInGroup, group, value, onCheckedChange, onChange]
175
+ );
176
+ const sizeClasses = SIZE_CLASSES[size];
177
+ return /* @__PURE__ */ jsxs(
178
+ "label",
179
+ {
180
+ ref: rootRef,
181
+ className: cn(
182
+ "inline-flex items-center cursor-pointer select-none",
183
+ sizeClasses.root,
184
+ disabled && "opacity-50 cursor-not-allowed",
185
+ readOnly && "cursor-default",
186
+ className
187
+ ),
188
+ onChange,
189
+ "data-disabled": disabled || void 0,
190
+ "data-readonly": readOnly || void 0,
191
+ ...rest,
192
+ children: [
193
+ /* @__PURE__ */ jsx(
194
+ RadixCheckbox.Root,
195
+ {
196
+ checked: checkedState,
197
+ onCheckedChange: handleCheckedChange,
198
+ disabled: disabled || readOnly,
199
+ name,
200
+ value,
201
+ required,
202
+ className: cn(
203
+ "inline-flex items-center justify-center shrink-0",
204
+ "border-2 border-current/30",
205
+ "data-[state=checked]:bg-gray-800 data-[state=checked]:text-white",
206
+ "dark:data-[state=checked]:bg-white dark:data-[state=checked]:text-black",
207
+ "data-[state=indeterminate]:bg-gray-800 data-[state=indeterminate]:text-white",
208
+ "dark:data-[state=indeterminate]:bg-white dark:data-[state=indeterminate]:text-black",
209
+ "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-500",
210
+ "transition-colors duration-150",
211
+ sizeClasses.control
212
+ ),
213
+ children: icon ?? /* @__PURE__ */ jsx(RadixCheckbox.Indicator, { className: cn("flex items-center justify-center", sizeClasses.icon), children: checkedState === "indeterminate" ? /* @__PURE__ */ jsx(IndeterminateIcon, { className: sizeClasses.icon }) : /* @__PURE__ */ jsx(CheckIcon, { className: sizeClasses.icon }) })
214
+ }
215
+ ),
216
+ /* @__PURE__ */ jsx(
217
+ "input",
218
+ {
219
+ ref: setHiddenInputRef,
220
+ type: "checkbox",
221
+ className: "sr-only",
222
+ checked: checkedState === true,
223
+ disabled,
224
+ readOnly,
225
+ name,
226
+ value,
227
+ tabIndex: -1,
228
+ "aria-hidden": true,
229
+ onChange: NOOP,
230
+ ...inputProps
231
+ }
232
+ ),
233
+ children != null && /* @__PURE__ */ jsx("span", { className: cn(sizeClasses.label), children })
234
+ ]
235
+ }
236
+ );
237
+ }
238
+ );
239
+ var Checkbox2 = CheckboxBase;
240
+
241
+ export { Checkbox2 as Checkbox, CheckboxGroup2 as CheckboxGroup };
@@ -0,0 +1,73 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var React = require('react');
5
+ var clsx = require('clsx');
6
+ var tailwindMerge = require('tailwind-merge');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
28
+
29
+ // src/close-button.tsx
30
+ function cn(...inputs) {
31
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
32
+ }
33
+ var CLOSE_ICON_PATH = "M9.44 8.035a.791.791 0 0 0 1.12 0l3.802-3.803a.791.791 0 0 1 1.119 0l.287.287a.79.79 0 0 1 0 1.119L11.965 9.44a.79.79 0 0 0 0 1.118l3.803 3.803a.791.791 0 0 1 0 1.119l-.287.287a.791.791 0 0 1-1.119 0l-3.803-3.803a.79.79 0 0 0-1.118 0l-3.803 3.803a.79.79 0 0 1-1.119 0l-.287-.287a.791.791 0 0 1 0-1.119l3.803-3.803a.791.791 0 0 0 0-1.118L4.232 5.638a.791.791 0 0 1 0-1.119l.287-.287a.791.791 0 0 1 1.119 0L9.44 8.035Z";
34
+ var CloseButton = React__namespace.forwardRef(function CloseButton2(props, ref) {
35
+ const { variant: _variant, size: _size, className, children, ...rest } = props;
36
+ return /* @__PURE__ */ jsxRuntime.jsx(
37
+ "button",
38
+ {
39
+ type: "button",
40
+ "aria-label": "Close",
41
+ ref,
42
+ className: cn(
43
+ "inline-flex items-center justify-center",
44
+ "size-5 min-w-0 shrink-0 p-0",
45
+ "rounded-sm border-0 overflow-hidden",
46
+ "bg-transparent text-[var(--closeButton-fg,currentColor)]",
47
+ "hover:bg-transparent hover:text-[var(--hover-color,currentColor)]",
48
+ "disabled:opacity-40",
49
+ "cursor-pointer",
50
+ className
51
+ ),
52
+ ...rest,
53
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsx(
54
+ "svg",
55
+ {
56
+ className: "size-5",
57
+ viewBox: "0 0 20 20",
58
+ fill: "none",
59
+ "aria-hidden": "true",
60
+ children: /* @__PURE__ */ jsxRuntime.jsx(
61
+ "path",
62
+ {
63
+ d: CLOSE_ICON_PATH,
64
+ fill: "currentColor"
65
+ }
66
+ )
67
+ }
68
+ )
69
+ }
70
+ );
71
+ });
72
+
73
+ exports.CloseButton = CloseButton;
@@ -0,0 +1,51 @@
1
+ "use client";
2
+ import * as React from 'react';
3
+ import { clsx } from 'clsx';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { jsx } from 'react/jsx-runtime';
6
+
7
+ // src/close-button.tsx
8
+ function cn(...inputs) {
9
+ return twMerge(clsx(inputs));
10
+ }
11
+ var CLOSE_ICON_PATH = "M9.44 8.035a.791.791 0 0 0 1.12 0l3.802-3.803a.791.791 0 0 1 1.119 0l.287.287a.79.79 0 0 1 0 1.119L11.965 9.44a.79.79 0 0 0 0 1.118l3.803 3.803a.791.791 0 0 1 0 1.119l-.287.287a.791.791 0 0 1-1.119 0l-3.803-3.803a.79.79 0 0 0-1.118 0l-3.803 3.803a.79.79 0 0 1-1.119 0l-.287-.287a.791.791 0 0 1 0-1.119l3.803-3.803a.791.791 0 0 0 0-1.118L4.232 5.638a.791.791 0 0 1 0-1.119l.287-.287a.791.791 0 0 1 1.119 0L9.44 8.035Z";
12
+ var CloseButton = React.forwardRef(function CloseButton2(props, ref) {
13
+ const { variant: _variant, size: _size, className, children, ...rest } = props;
14
+ return /* @__PURE__ */ jsx(
15
+ "button",
16
+ {
17
+ type: "button",
18
+ "aria-label": "Close",
19
+ ref,
20
+ className: cn(
21
+ "inline-flex items-center justify-center",
22
+ "size-5 min-w-0 shrink-0 p-0",
23
+ "rounded-sm border-0 overflow-hidden",
24
+ "bg-transparent text-[var(--closeButton-fg,currentColor)]",
25
+ "hover:bg-transparent hover:text-[var(--hover-color,currentColor)]",
26
+ "disabled:opacity-40",
27
+ "cursor-pointer",
28
+ className
29
+ ),
30
+ ...rest,
31
+ children: children ?? /* @__PURE__ */ jsx(
32
+ "svg",
33
+ {
34
+ className: "size-5",
35
+ viewBox: "0 0 20 20",
36
+ fill: "none",
37
+ "aria-hidden": "true",
38
+ children: /* @__PURE__ */ jsx(
39
+ "path",
40
+ {
41
+ d: CLOSE_ICON_PATH,
42
+ fill: "currentColor"
43
+ }
44
+ )
45
+ }
46
+ )
47
+ }
48
+ );
49
+ });
50
+
51
+ export { CloseButton };