@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
package/dist/tabs.cjs ADDED
@@ -0,0 +1,240 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var RadixTabs = require('@radix-ui/react-tabs');
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 RadixTabs__namespace = /*#__PURE__*/_interopNamespace(RadixTabs);
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+
31
+ // src/tabs.tsx
32
+ function cn(...inputs) {
33
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
34
+ }
35
+ var ROOT_SIZE_CLASSES = {
36
+ sm: "[--tabs-height:2rem] [--tabs-content-padding:1.5rem]",
37
+ md: "[--tabs-height:2.5rem] [--tabs-content-padding:1.5rem]",
38
+ free: ""
39
+ };
40
+ var TabsRoot = React__namespace.forwardRef(
41
+ function TabsRoot2(props, ref) {
42
+ const {
43
+ variant = "solid",
44
+ size = "md",
45
+ fitted,
46
+ lazyMount: _lazyMount,
47
+ unmountOnExit: _unmountOnExit,
48
+ onValueChange,
49
+ className,
50
+ ...rest
51
+ } = props;
52
+ const handleValueChange = React__namespace.useCallback(
53
+ (value) => {
54
+ if (!onValueChange) return;
55
+ onValueChange({ value });
56
+ },
57
+ [onValueChange]
58
+ );
59
+ return /* @__PURE__ */ jsxRuntime.jsx(
60
+ RadixTabs__namespace.Root,
61
+ {
62
+ ref,
63
+ "data-variant": variant,
64
+ "data-size": size,
65
+ "data-fitted": fitted ? "" : void 0,
66
+ className: cn(
67
+ "relative",
68
+ ROOT_SIZE_CLASSES[size],
69
+ className
70
+ ),
71
+ onValueChange: onValueChange ? handleValueChange : void 0,
72
+ ...rest
73
+ }
74
+ );
75
+ }
76
+ );
77
+ var TabsList = React__namespace.forwardRef(
78
+ function TabsList2(props, ref) {
79
+ const {
80
+ className,
81
+ // Strip Chakra style props
82
+ flexWrap: _flexWrap,
83
+ alignItems: _alignItems,
84
+ whiteSpace: _whiteSpace,
85
+ bgColor: _bgColor,
86
+ marginBottom: _marginBottom,
87
+ mx: _mx,
88
+ px: _px,
89
+ w: _w,
90
+ overflowX: _overflowX,
91
+ overscrollBehaviorX: _overscrollBehaviorX,
92
+ css: _css,
93
+ position: _position,
94
+ boxShadow: _boxShadow,
95
+ top: _top,
96
+ zIndex: _zIndex,
97
+ style: styleProp,
98
+ asChild,
99
+ loop,
100
+ ...rest
101
+ } = props;
102
+ return /* @__PURE__ */ jsxRuntime.jsx(
103
+ RadixTabs__namespace.List,
104
+ {
105
+ ref,
106
+ asChild,
107
+ loop,
108
+ className: cn(
109
+ "inline-flex w-full relative isolate flex-row",
110
+ "min-h-[var(--tabs-height,2.5rem)]",
111
+ className
112
+ ),
113
+ style: styleProp,
114
+ ...rest
115
+ }
116
+ );
117
+ }
118
+ );
119
+ var TRIGGER_BASE = "outline-none min-w-[var(--tabs-height,2.5rem)] h-[var(--tabs-height,2.5rem)] flex items-center relative cursor-pointer gap-2 focus-visible:z-[1] focus-visible:outline-2 focus-visible:outline-offset-0 disabled:cursor-not-allowed disabled:opacity-50";
120
+ var TRIGGER_SIZE_CLASSES = {
121
+ sm: "py-1 px-3 text-sm",
122
+ md: "py-2 px-4 text-base",
123
+ free: ""
124
+ };
125
+ var TRIGGER_VARIANT_CLASSES = {
126
+ solid: "font-semibold gap-1 rounded-md bg-transparent text-tabs-solid-fg data-[state=active]:bg-selected-control-bg data-[state=active]:text-selected-control-text data-[state=active]:hover:text-selected-control-text hover:text-hover",
127
+ secondary: "font-medium bg-transparent text-tabs-secondary-fg border-2 border-solid border-tabs-secondary-border rounded-md data-[state=active]:bg-selected-control-bg data-[state=active]:text-selected-control-text data-[state=active]:border-transparent data-[state=active]:hover:border-transparent hover:text-hover hover:border-hover",
128
+ segmented: "bg-transparent text-text-primary border-2 border-solid border-selected-control-bg hover:text-hover data-[state=active]:text-selected-control-text data-[state=active]:bg-selected-control-bg data-[state=active]:border-selected-control-bg data-[state=active]:hover:text-selected-control-text",
129
+ unstyled: ""
130
+ };
131
+ var TabsTrigger = React__namespace.forwardRef(
132
+ function TabsTrigger2(props, ref) {
133
+ const {
134
+ className,
135
+ // Strip Chakra style props
136
+ scrollSnapAlign: _scrollSnapAlign,
137
+ flexShrink: _flexShrink,
138
+ bgColor: _bgColor,
139
+ w: _w,
140
+ py: _py,
141
+ borderRadius: _borderRadius,
142
+ fontWeight: _fontWeight,
143
+ color: _color,
144
+ _hover,
145
+ position: _position,
146
+ top: _top,
147
+ left: _left,
148
+ visibility: _visibility,
149
+ ...rest
150
+ } = props;
151
+ const internalRef = React__namespace.useRef(null);
152
+ const mergedRef = useMergedRef(ref, internalRef);
153
+ const { variant, size, fitted } = useTabsContext(internalRef);
154
+ return /* @__PURE__ */ jsxRuntime.jsx(
155
+ RadixTabs__namespace.Trigger,
156
+ {
157
+ ref: mergedRef,
158
+ className: cn(
159
+ "group",
160
+ TRIGGER_BASE,
161
+ TRIGGER_SIZE_CLASSES[size],
162
+ TRIGGER_VARIANT_CLASSES[variant],
163
+ fitted && "flex-1 text-center justify-center",
164
+ className
165
+ ),
166
+ ...rest
167
+ }
168
+ );
169
+ }
170
+ );
171
+ var TabsContent = React__namespace.forwardRef(
172
+ function TabsContent2(props, ref) {
173
+ const { className, padding: _padding, ...rest } = props;
174
+ return /* @__PURE__ */ jsxRuntime.jsx(
175
+ RadixTabs__namespace.Content,
176
+ {
177
+ ref,
178
+ className: cn(
179
+ "w-full pt-[var(--tabs-content-padding,1.5rem)]",
180
+ "focus-visible:outline-2 focus-visible:outline-offset-[-2px]",
181
+ className
182
+ ),
183
+ ...rest
184
+ }
185
+ );
186
+ }
187
+ );
188
+ var COUNTER_OVERLOAD = 50;
189
+ var TabsCounter = ({ count }) => {
190
+ if (count === void 0 || count === null) {
191
+ return null;
192
+ }
193
+ return /* @__PURE__ */ jsxRuntime.jsx(
194
+ "span",
195
+ {
196
+ className: cn(
197
+ "group-hover:text-inherit",
198
+ count > 0 ? "text-text-secondary" : "text-[rgba(16,17,18,0.24)] dark:text-[rgba(255,255,255,0.24)]"
199
+ ),
200
+ children: count > COUNTER_OVERLOAD ? `${COUNTER_OVERLOAD}+` : count
201
+ }
202
+ );
203
+ };
204
+ function useTabsContext(triggerRef) {
205
+ const [ctx, setCtx] = React__namespace.useState({ variant: "solid", size: "md", fitted: false });
206
+ React__namespace.useEffect(() => {
207
+ const el = triggerRef.current;
208
+ if (!el) return;
209
+ const root = el.closest("[data-variant]");
210
+ if (!root) return;
211
+ setCtx({
212
+ variant: root.getAttribute("data-variant") ?? "solid",
213
+ size: root.getAttribute("data-size") ?? "md",
214
+ fitted: root.hasAttribute("data-fitted")
215
+ });
216
+ }, [triggerRef]);
217
+ return ctx;
218
+ }
219
+ function useMergedRef(...refs) {
220
+ return React__namespace.useCallback(
221
+ (instance) => {
222
+ for (const ref of refs) {
223
+ if (!ref) continue;
224
+ if (typeof ref === "function") {
225
+ ref(instance);
226
+ } else {
227
+ ref.current = instance;
228
+ }
229
+ }
230
+ },
231
+ // eslint-disable-next-line react-hooks/exhaustive-deps
232
+ refs
233
+ );
234
+ }
235
+
236
+ exports.TabsContent = TabsContent;
237
+ exports.TabsCounter = TabsCounter;
238
+ exports.TabsList = TabsList;
239
+ exports.TabsRoot = TabsRoot;
240
+ exports.TabsTrigger = TabsTrigger;
package/dist/tabs.js ADDED
@@ -0,0 +1,213 @@
1
+ "use client";
2
+ import * as RadixTabs from '@radix-ui/react-tabs';
3
+ import * as React from 'react';
4
+ import { clsx } from 'clsx';
5
+ import { twMerge } from 'tailwind-merge';
6
+ import { jsx } from 'react/jsx-runtime';
7
+
8
+ // src/tabs.tsx
9
+ function cn(...inputs) {
10
+ return twMerge(clsx(inputs));
11
+ }
12
+ var ROOT_SIZE_CLASSES = {
13
+ sm: "[--tabs-height:2rem] [--tabs-content-padding:1.5rem]",
14
+ md: "[--tabs-height:2.5rem] [--tabs-content-padding:1.5rem]",
15
+ free: ""
16
+ };
17
+ var TabsRoot = React.forwardRef(
18
+ function TabsRoot2(props, ref) {
19
+ const {
20
+ variant = "solid",
21
+ size = "md",
22
+ fitted,
23
+ lazyMount: _lazyMount,
24
+ unmountOnExit: _unmountOnExit,
25
+ onValueChange,
26
+ className,
27
+ ...rest
28
+ } = props;
29
+ const handleValueChange = React.useCallback(
30
+ (value) => {
31
+ if (!onValueChange) return;
32
+ onValueChange({ value });
33
+ },
34
+ [onValueChange]
35
+ );
36
+ return /* @__PURE__ */ jsx(
37
+ RadixTabs.Root,
38
+ {
39
+ ref,
40
+ "data-variant": variant,
41
+ "data-size": size,
42
+ "data-fitted": fitted ? "" : void 0,
43
+ className: cn(
44
+ "relative",
45
+ ROOT_SIZE_CLASSES[size],
46
+ className
47
+ ),
48
+ onValueChange: onValueChange ? handleValueChange : void 0,
49
+ ...rest
50
+ }
51
+ );
52
+ }
53
+ );
54
+ var TabsList = React.forwardRef(
55
+ function TabsList2(props, ref) {
56
+ const {
57
+ className,
58
+ // Strip Chakra style props
59
+ flexWrap: _flexWrap,
60
+ alignItems: _alignItems,
61
+ whiteSpace: _whiteSpace,
62
+ bgColor: _bgColor,
63
+ marginBottom: _marginBottom,
64
+ mx: _mx,
65
+ px: _px,
66
+ w: _w,
67
+ overflowX: _overflowX,
68
+ overscrollBehaviorX: _overscrollBehaviorX,
69
+ css: _css,
70
+ position: _position,
71
+ boxShadow: _boxShadow,
72
+ top: _top,
73
+ zIndex: _zIndex,
74
+ style: styleProp,
75
+ asChild,
76
+ loop,
77
+ ...rest
78
+ } = props;
79
+ return /* @__PURE__ */ jsx(
80
+ RadixTabs.List,
81
+ {
82
+ ref,
83
+ asChild,
84
+ loop,
85
+ className: cn(
86
+ "inline-flex w-full relative isolate flex-row",
87
+ "min-h-[var(--tabs-height,2.5rem)]",
88
+ className
89
+ ),
90
+ style: styleProp,
91
+ ...rest
92
+ }
93
+ );
94
+ }
95
+ );
96
+ var TRIGGER_BASE = "outline-none min-w-[var(--tabs-height,2.5rem)] h-[var(--tabs-height,2.5rem)] flex items-center relative cursor-pointer gap-2 focus-visible:z-[1] focus-visible:outline-2 focus-visible:outline-offset-0 disabled:cursor-not-allowed disabled:opacity-50";
97
+ var TRIGGER_SIZE_CLASSES = {
98
+ sm: "py-1 px-3 text-sm",
99
+ md: "py-2 px-4 text-base",
100
+ free: ""
101
+ };
102
+ var TRIGGER_VARIANT_CLASSES = {
103
+ solid: "font-semibold gap-1 rounded-md bg-transparent text-tabs-solid-fg data-[state=active]:bg-selected-control-bg data-[state=active]:text-selected-control-text data-[state=active]:hover:text-selected-control-text hover:text-hover",
104
+ secondary: "font-medium bg-transparent text-tabs-secondary-fg border-2 border-solid border-tabs-secondary-border rounded-md data-[state=active]:bg-selected-control-bg data-[state=active]:text-selected-control-text data-[state=active]:border-transparent data-[state=active]:hover:border-transparent hover:text-hover hover:border-hover",
105
+ segmented: "bg-transparent text-text-primary border-2 border-solid border-selected-control-bg hover:text-hover data-[state=active]:text-selected-control-text data-[state=active]:bg-selected-control-bg data-[state=active]:border-selected-control-bg data-[state=active]:hover:text-selected-control-text",
106
+ unstyled: ""
107
+ };
108
+ var TabsTrigger = React.forwardRef(
109
+ function TabsTrigger2(props, ref) {
110
+ const {
111
+ className,
112
+ // Strip Chakra style props
113
+ scrollSnapAlign: _scrollSnapAlign,
114
+ flexShrink: _flexShrink,
115
+ bgColor: _bgColor,
116
+ w: _w,
117
+ py: _py,
118
+ borderRadius: _borderRadius,
119
+ fontWeight: _fontWeight,
120
+ color: _color,
121
+ _hover,
122
+ position: _position,
123
+ top: _top,
124
+ left: _left,
125
+ visibility: _visibility,
126
+ ...rest
127
+ } = props;
128
+ const internalRef = React.useRef(null);
129
+ const mergedRef = useMergedRef(ref, internalRef);
130
+ const { variant, size, fitted } = useTabsContext(internalRef);
131
+ return /* @__PURE__ */ jsx(
132
+ RadixTabs.Trigger,
133
+ {
134
+ ref: mergedRef,
135
+ className: cn(
136
+ "group",
137
+ TRIGGER_BASE,
138
+ TRIGGER_SIZE_CLASSES[size],
139
+ TRIGGER_VARIANT_CLASSES[variant],
140
+ fitted && "flex-1 text-center justify-center",
141
+ className
142
+ ),
143
+ ...rest
144
+ }
145
+ );
146
+ }
147
+ );
148
+ var TabsContent = React.forwardRef(
149
+ function TabsContent2(props, ref) {
150
+ const { className, padding: _padding, ...rest } = props;
151
+ return /* @__PURE__ */ jsx(
152
+ RadixTabs.Content,
153
+ {
154
+ ref,
155
+ className: cn(
156
+ "w-full pt-[var(--tabs-content-padding,1.5rem)]",
157
+ "focus-visible:outline-2 focus-visible:outline-offset-[-2px]",
158
+ className
159
+ ),
160
+ ...rest
161
+ }
162
+ );
163
+ }
164
+ );
165
+ var COUNTER_OVERLOAD = 50;
166
+ var TabsCounter = ({ count }) => {
167
+ if (count === void 0 || count === null) {
168
+ return null;
169
+ }
170
+ return /* @__PURE__ */ jsx(
171
+ "span",
172
+ {
173
+ className: cn(
174
+ "group-hover:text-inherit",
175
+ count > 0 ? "text-text-secondary" : "text-[rgba(16,17,18,0.24)] dark:text-[rgba(255,255,255,0.24)]"
176
+ ),
177
+ children: count > COUNTER_OVERLOAD ? `${COUNTER_OVERLOAD}+` : count
178
+ }
179
+ );
180
+ };
181
+ function useTabsContext(triggerRef) {
182
+ const [ctx, setCtx] = React.useState({ variant: "solid", size: "md", fitted: false });
183
+ React.useEffect(() => {
184
+ const el = triggerRef.current;
185
+ if (!el) return;
186
+ const root = el.closest("[data-variant]");
187
+ if (!root) return;
188
+ setCtx({
189
+ variant: root.getAttribute("data-variant") ?? "solid",
190
+ size: root.getAttribute("data-size") ?? "md",
191
+ fitted: root.hasAttribute("data-fitted")
192
+ });
193
+ }, [triggerRef]);
194
+ return ctx;
195
+ }
196
+ function useMergedRef(...refs) {
197
+ return React.useCallback(
198
+ (instance) => {
199
+ for (const ref of refs) {
200
+ if (!ref) continue;
201
+ if (typeof ref === "function") {
202
+ ref(instance);
203
+ } else {
204
+ ref.current = instance;
205
+ }
206
+ }
207
+ },
208
+ // eslint-disable-next-line react-hooks/exhaustive-deps
209
+ refs
210
+ );
211
+ }
212
+
213
+ export { TabsContent, TabsCounter, TabsList, TabsRoot, TabsTrigger };