@luxfi/ui 5.5.2 → 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 (249) 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 -66
  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 -111
  212. package/server/auth-wrapper.ts +0 -24
  213. package/server-actions/TO-DO.txt +0 -1
  214. package/server-actions/firebase-app.ts +0 -29
  215. package/server-actions/index.ts +0 -5
  216. package/server-actions/store-contact.ts +0 -66
  217. package/site-def/footer/community.tsx +0 -61
  218. package/site-def/footer/company.ts +0 -37
  219. package/site-def/footer/ecosystem.ts +0 -37
  220. package/site-def/footer/index.tsx +0 -26
  221. package/site-def/footer/legal.ts +0 -28
  222. package/site-def/footer/network.ts +0 -45
  223. package/site-def/footer/svg/warpcast-logo.svg +0 -12
  224. package/site-def/index.ts +0 -4
  225. package/site-def/main-nav.tsx +0 -460
  226. package/style/cart-animation.css +0 -29
  227. package/style/checkout-animation.css +0 -23
  228. package/style/drawer-handle-overrides.css +0 -160
  229. package/style/fonts/COPY_TO_PUBLIC_FOR_NON_NEXT.txt +0 -0
  230. package/style/fonts/Druk-Wide-Bold.ttf +0 -0
  231. package/style/fonts/Druk-Wide-Medium.ttf +0 -0
  232. package/style/fonts/InterVariable-Italic.ttf +0 -0
  233. package/style/fonts/InterVariable-Italic.woff2 +0 -0
  234. package/style/fonts/InterVariable.ttf +0 -0
  235. package/style/fonts/InterVariable.woff2 +0 -0
  236. package/style/lux-colors.css +0 -85
  237. package/style/lux-fonts.css +0 -30
  238. package/style/lux-global-non-next.css +0 -52
  239. package/style/lux-global.css +0 -51
  240. package/tailwind/fontFamily.tailwind.lux.ts +0 -18
  241. package/tailwind/index.ts +0 -2
  242. package/tailwind/lux-tw-fonts.ts +0 -40
  243. package/tailwind/tailwind.config.lux-preset.ts +0 -10
  244. package/tsconfig.json +0 -15
  245. package/types/chatbot-config.ts +0 -7
  246. package/types/chatbot-suggested-question.ts +0 -7
  247. package/types/contact-info.ts +0 -11
  248. package/types/index.ts +0 -4
  249. package/types/site-def.ts +0 -46
@@ -0,0 +1,213 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var AccordionPrimitive = require('@radix-ui/react-accordion');
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 AccordionPrimitive__namespace = /*#__PURE__*/_interopNamespace(AccordionPrimitive);
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+
31
+ // src/accordion.tsx
32
+ function cn(...inputs) {
33
+ return tailwindMerge.twMerge(clsx.clsx(inputs));
34
+ }
35
+ var IndicatorIcon = ({ className }) => /* @__PURE__ */ jsxRuntime.jsx("svg", { className, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M7.5 15L12.5 10L7.5 5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) });
36
+ var AccordionRoot = React__namespace.forwardRef(
37
+ function AccordionRoot2(props, ref) {
38
+ const {
39
+ multiple: _multiple,
40
+ value,
41
+ defaultValue,
42
+ onValueChange,
43
+ variant,
44
+ size,
45
+ noAnimation: _noAnimation,
46
+ lazyMount: _lazyMount,
47
+ className,
48
+ children,
49
+ position: _position,
50
+ w: _w,
51
+ bgColor: _bgColor,
52
+ borderRadius: _borderRadius,
53
+ ...rest
54
+ } = props;
55
+ const handleValueChange = React__namespace.useCallback(
56
+ (next) => {
57
+ onValueChange?.({ value: next });
58
+ },
59
+ [onValueChange]
60
+ );
61
+ return /* @__PURE__ */ jsxRuntime.jsx(
62
+ AccordionPrimitive__namespace.Root,
63
+ {
64
+ ref,
65
+ type: "multiple",
66
+ value,
67
+ defaultValue,
68
+ onValueChange: handleValueChange,
69
+ className: cn(
70
+ "w-full",
71
+ variant === "faq" && "accordion-faq",
72
+ size === "sm" && "accordion-sm",
73
+ className
74
+ ),
75
+ "data-variant": variant,
76
+ "data-size": size,
77
+ ...rest,
78
+ children
79
+ }
80
+ );
81
+ }
82
+ );
83
+ var AccordionItem = React__namespace.forwardRef(
84
+ function AccordionItem2(props, ref) {
85
+ const { className, as: _as, _first, _last, display: _display, ...rest } = props;
86
+ return /* @__PURE__ */ jsxRuntime.jsx(
87
+ AccordionPrimitive__namespace.Item,
88
+ {
89
+ ref,
90
+ className: cn(
91
+ "border-b border-[var(--color-border-divider)]",
92
+ className
93
+ ),
94
+ ...rest
95
+ }
96
+ );
97
+ }
98
+ );
99
+ var AccordionItemTrigger = React__namespace.forwardRef(function AccordionItemTrigger2(props, ref) {
100
+ const {
101
+ children,
102
+ indicatorPlacement: indicatorPlacementProp,
103
+ variant,
104
+ noIndicator,
105
+ className,
106
+ // Strip Chakra style props
107
+ px: _px,
108
+ py: _py,
109
+ _hover,
110
+ wordBreak: _wordBreak,
111
+ textAlign: _textAlign,
112
+ cursor: _cursor,
113
+ display: _display,
114
+ alignItems: _alignItems,
115
+ columnGap: _columnGap,
116
+ ...rest
117
+ } = props;
118
+ const indicatorPlacement = variant === "faq" ? "start" : indicatorPlacementProp ?? "end";
119
+ const indicator = variant === "faq" ? /* @__PURE__ */ jsxRuntime.jsx(
120
+ "span",
121
+ {
122
+ className: cn(
123
+ "relative inline-block h-3 w-3 shrink-0",
124
+ // horizontal bar (always visible)
125
+ "before:absolute before:left-0 before:top-1/2 before:block before:h-[2px] before:w-full before:-translate-y-1/2 before:rounded-[2px] before:bg-current",
126
+ // vertical bar (rotates to 0 when open)
127
+ "after:absolute after:left-1/2 after:top-0 after:block after:h-full after:w-[2px]",
128
+ "after:-translate-x-1/2 after:rounded-[2px] after:bg-current",
129
+ "after:transition-transform after:duration-200 after:ease-in-out",
130
+ // When parent trigger has data-state="open", rotate vertical bar
131
+ "group-data-[state=open]/trigger:after:rotate-90"
132
+ )
133
+ }
134
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
135
+ "span",
136
+ {
137
+ className: cn(
138
+ "inline-flex shrink-0 transition-transform duration-200",
139
+ "rotate-180",
140
+ "group-data-[state=open]/trigger:rotate-[270deg]"
141
+ ),
142
+ children: /* @__PURE__ */ jsxRuntime.jsx(IndicatorIcon, { className: "h-5 w-5" })
143
+ }
144
+ );
145
+ return /* @__PURE__ */ jsxRuntime.jsx(AccordionPrimitive__namespace.Header, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsxs(
146
+ AccordionPrimitive__namespace.Trigger,
147
+ {
148
+ ref,
149
+ className: cn(
150
+ "group/trigger flex w-full cursor-pointer items-center gap-2 py-3 text-left text-[var(--color-text-primary)]",
151
+ "hover:text-[var(--color-hover)]",
152
+ "focus-visible:outline-none",
153
+ className
154
+ ),
155
+ ...rest,
156
+ children: [
157
+ indicatorPlacement === "start" && !noIndicator && indicator,
158
+ children,
159
+ indicatorPlacement === "end" && !noIndicator && indicator
160
+ ]
161
+ }
162
+ ) }) });
163
+ });
164
+ var AccordionItemContent = React__namespace.forwardRef(function AccordionItemContent2(props, ref) {
165
+ const { className, children, pb: _pb, pr: _pr, pl: _pl, w: _w, display: _display, flexDir: _flexDir, rowGap: _rowGap, ...rest } = props;
166
+ return /* @__PURE__ */ jsxRuntime.jsx(
167
+ AccordionPrimitive__namespace.Content,
168
+ {
169
+ ref,
170
+ className: cn(
171
+ "overflow-hidden text-[var(--color-text-primary)]",
172
+ "data-[state=open]:animate-accordion-down",
173
+ "data-[state=closed]:animate-accordion-up",
174
+ className
175
+ ),
176
+ ...rest,
177
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pb-3", children })
178
+ }
179
+ );
180
+ });
181
+ function useAccordion(items) {
182
+ const [value, setValue] = React__namespace.useState([]);
183
+ const onValueChange = React__namespace.useCallback(({ value: value2 }) => {
184
+ setValue(value2);
185
+ }, []);
186
+ const scrollToItemFromUrl = React__namespace.useCallback(() => {
187
+ const hash = window.location.hash.replace("#", "");
188
+ if (!hash) {
189
+ return;
190
+ }
191
+ const itemToScroll = items.find((item) => item.id === hash);
192
+ if (itemToScroll) {
193
+ const el = document.getElementById(itemToScroll.id);
194
+ if (el) {
195
+ el.scrollIntoView({ behavior: "smooth", block: "start" });
196
+ }
197
+ setValue([itemToScroll.id]);
198
+ }
199
+ }, [items]);
200
+ return React__namespace.useMemo(() => {
201
+ return {
202
+ value,
203
+ onValueChange,
204
+ scrollToItemFromUrl
205
+ };
206
+ }, [value, onValueChange, scrollToItemFromUrl]);
207
+ }
208
+
209
+ exports.AccordionItem = AccordionItem;
210
+ exports.AccordionItemContent = AccordionItemContent;
211
+ exports.AccordionItemTrigger = AccordionItemTrigger;
212
+ exports.AccordionRoot = AccordionRoot;
213
+ exports.useAccordion = useAccordion;
@@ -0,0 +1,186 @@
1
+ "use client";
2
+ import * as AccordionPrimitive from '@radix-ui/react-accordion';
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/accordion.tsx
9
+ function cn(...inputs) {
10
+ return twMerge(clsx(inputs));
11
+ }
12
+ var IndicatorIcon = ({ className }) => /* @__PURE__ */ jsx("svg", { className, viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: "M7.5 15L12.5 10L7.5 5", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) });
13
+ var AccordionRoot = React.forwardRef(
14
+ function AccordionRoot2(props, ref) {
15
+ const {
16
+ multiple: _multiple,
17
+ value,
18
+ defaultValue,
19
+ onValueChange,
20
+ variant,
21
+ size,
22
+ noAnimation: _noAnimation,
23
+ lazyMount: _lazyMount,
24
+ className,
25
+ children,
26
+ position: _position,
27
+ w: _w,
28
+ bgColor: _bgColor,
29
+ borderRadius: _borderRadius,
30
+ ...rest
31
+ } = props;
32
+ const handleValueChange = React.useCallback(
33
+ (next) => {
34
+ onValueChange?.({ value: next });
35
+ },
36
+ [onValueChange]
37
+ );
38
+ return /* @__PURE__ */ jsx(
39
+ AccordionPrimitive.Root,
40
+ {
41
+ ref,
42
+ type: "multiple",
43
+ value,
44
+ defaultValue,
45
+ onValueChange: handleValueChange,
46
+ className: cn(
47
+ "w-full",
48
+ variant === "faq" && "accordion-faq",
49
+ size === "sm" && "accordion-sm",
50
+ className
51
+ ),
52
+ "data-variant": variant,
53
+ "data-size": size,
54
+ ...rest,
55
+ children
56
+ }
57
+ );
58
+ }
59
+ );
60
+ var AccordionItem = React.forwardRef(
61
+ function AccordionItem2(props, ref) {
62
+ const { className, as: _as, _first, _last, display: _display, ...rest } = props;
63
+ return /* @__PURE__ */ jsx(
64
+ AccordionPrimitive.Item,
65
+ {
66
+ ref,
67
+ className: cn(
68
+ "border-b border-[var(--color-border-divider)]",
69
+ className
70
+ ),
71
+ ...rest
72
+ }
73
+ );
74
+ }
75
+ );
76
+ var AccordionItemTrigger = React.forwardRef(function AccordionItemTrigger2(props, ref) {
77
+ const {
78
+ children,
79
+ indicatorPlacement: indicatorPlacementProp,
80
+ variant,
81
+ noIndicator,
82
+ className,
83
+ // Strip Chakra style props
84
+ px: _px,
85
+ py: _py,
86
+ _hover,
87
+ wordBreak: _wordBreak,
88
+ textAlign: _textAlign,
89
+ cursor: _cursor,
90
+ display: _display,
91
+ alignItems: _alignItems,
92
+ columnGap: _columnGap,
93
+ ...rest
94
+ } = props;
95
+ const indicatorPlacement = variant === "faq" ? "start" : indicatorPlacementProp ?? "end";
96
+ const indicator = variant === "faq" ? /* @__PURE__ */ jsx(
97
+ "span",
98
+ {
99
+ className: cn(
100
+ "relative inline-block h-3 w-3 shrink-0",
101
+ // horizontal bar (always visible)
102
+ "before:absolute before:left-0 before:top-1/2 before:block before:h-[2px] before:w-full before:-translate-y-1/2 before:rounded-[2px] before:bg-current",
103
+ // vertical bar (rotates to 0 when open)
104
+ "after:absolute after:left-1/2 after:top-0 after:block after:h-full after:w-[2px]",
105
+ "after:-translate-x-1/2 after:rounded-[2px] after:bg-current",
106
+ "after:transition-transform after:duration-200 after:ease-in-out",
107
+ // When parent trigger has data-state="open", rotate vertical bar
108
+ "group-data-[state=open]/trigger:after:rotate-90"
109
+ )
110
+ }
111
+ ) : /* @__PURE__ */ jsx(
112
+ "span",
113
+ {
114
+ className: cn(
115
+ "inline-flex shrink-0 transition-transform duration-200",
116
+ "rotate-180",
117
+ "group-data-[state=open]/trigger:rotate-[270deg]"
118
+ ),
119
+ children: /* @__PURE__ */ jsx(IndicatorIcon, { className: "h-5 w-5" })
120
+ }
121
+ );
122
+ return /* @__PURE__ */ jsx(AccordionPrimitive.Header, { asChild: true, children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(
123
+ AccordionPrimitive.Trigger,
124
+ {
125
+ ref,
126
+ className: cn(
127
+ "group/trigger flex w-full cursor-pointer items-center gap-2 py-3 text-left text-[var(--color-text-primary)]",
128
+ "hover:text-[var(--color-hover)]",
129
+ "focus-visible:outline-none",
130
+ className
131
+ ),
132
+ ...rest,
133
+ children: [
134
+ indicatorPlacement === "start" && !noIndicator && indicator,
135
+ children,
136
+ indicatorPlacement === "end" && !noIndicator && indicator
137
+ ]
138
+ }
139
+ ) }) });
140
+ });
141
+ var AccordionItemContent = React.forwardRef(function AccordionItemContent2(props, ref) {
142
+ const { className, children, pb: _pb, pr: _pr, pl: _pl, w: _w, display: _display, flexDir: _flexDir, rowGap: _rowGap, ...rest } = props;
143
+ return /* @__PURE__ */ jsx(
144
+ AccordionPrimitive.Content,
145
+ {
146
+ ref,
147
+ className: cn(
148
+ "overflow-hidden text-[var(--color-text-primary)]",
149
+ "data-[state=open]:animate-accordion-down",
150
+ "data-[state=closed]:animate-accordion-up",
151
+ className
152
+ ),
153
+ ...rest,
154
+ children: /* @__PURE__ */ jsx("div", { className: "pb-3", children })
155
+ }
156
+ );
157
+ });
158
+ function useAccordion(items) {
159
+ const [value, setValue] = React.useState([]);
160
+ const onValueChange = React.useCallback(({ value: value2 }) => {
161
+ setValue(value2);
162
+ }, []);
163
+ const scrollToItemFromUrl = React.useCallback(() => {
164
+ const hash = window.location.hash.replace("#", "");
165
+ if (!hash) {
166
+ return;
167
+ }
168
+ const itemToScroll = items.find((item) => item.id === hash);
169
+ if (itemToScroll) {
170
+ const el = document.getElementById(itemToScroll.id);
171
+ if (el) {
172
+ el.scrollIntoView({ behavior: "smooth", block: "start" });
173
+ }
174
+ setValue([itemToScroll.id]);
175
+ }
176
+ }, [items]);
177
+ return React.useMemo(() => {
178
+ return {
179
+ value,
180
+ onValueChange,
181
+ scrollToItemFromUrl
182
+ };
183
+ }, [value, onValueChange, scrollToItemFromUrl]);
184
+ }
185
+
186
+ export { AccordionItem, AccordionItemContent, AccordionItemTrigger, AccordionRoot, useAccordion };