@nexub/react 1.5.0 → 1.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 (208) hide show
  1. package/dist/{chunk-XR4NBY54.js → chunk-2DYKENBM.js} +10 -10
  2. package/dist/{chunk-SVQCINRE.js → chunk-2I7FIU6R.js} +5 -2
  3. package/dist/{chunk-FHFVBOF3.js → chunk-2Y4WLNEZ.js} +3 -3
  4. package/dist/{chunk-CWS37T3K.js → chunk-3E7X3YK3.js} +4 -2
  5. package/dist/{chunk-GRB6T2TT.js → chunk-3FPJIXG7.js} +19 -13
  6. package/dist/chunk-3MT23LNM.js +171 -0
  7. package/dist/chunk-3QD76BKT.js +80 -0
  8. package/dist/{chunk-B54WADL4.js → chunk-4P2JJ2FH.js} +12 -12
  9. package/dist/chunk-52ZVJPF7.js +1 -0
  10. package/dist/chunk-5KI4YHA3.js +144 -0
  11. package/dist/chunk-5QEARXY3.js +55 -0
  12. package/dist/chunk-5VW6RUKZ.js +134 -0
  13. package/dist/{chunk-CNNJFWFA.js → chunk-6BGUZQAX.js} +4 -4
  14. package/dist/{chunk-LDYD7WL3.js → chunk-6ECOCGZG.js} +4 -3
  15. package/dist/{chunk-3AXIMXDU.js → chunk-6JBQAJJD.js} +6 -12
  16. package/dist/{chunk-YRDCY6BI.js → chunk-6UKNUI46.js} +0 -19
  17. package/dist/chunk-743Y5MY3.js +95 -0
  18. package/dist/{chunk-BFRX6X4O.js → chunk-74RUJ5KZ.js} +23 -17
  19. package/dist/chunk-77LYWSJW.js +85 -0
  20. package/dist/{chunk-YPHNHQYQ.js → chunk-7B4VF2ZU.js} +6 -2
  21. package/dist/{chunk-NCRFKPA4.js → chunk-7MSIOYJZ.js} +6 -8
  22. package/dist/{chunk-AHT35UWY.js → chunk-7Q4T7CB6.js} +10 -6
  23. package/dist/{chunk-GIGOTRXX.js → chunk-7VJABRKB.js} +3 -10
  24. package/dist/{chunk-6QLLH6ID.js → chunk-7XWJCFWI.js} +8 -17
  25. package/dist/chunk-A3O23F2B.js +1 -0
  26. package/dist/chunk-AT2DSFP3.js +47 -0
  27. package/dist/{chunk-OASFXI27.js → chunk-BNFGVFZ3.js} +5 -5
  28. package/dist/{chunk-GHCV6UXG.js → chunk-BTYDDKRQ.js} +5 -5
  29. package/dist/chunk-C6JRJ6JW.js +167 -0
  30. package/dist/chunk-CAOLGXA5.js +1 -0
  31. package/dist/{chunk-IIPYF6ZQ.js → chunk-CBDJRPMD.js} +16 -13
  32. package/dist/{chunk-OJ2TLWYD.js → chunk-CKFRMCZ7.js} +5 -3
  33. package/dist/{chunk-LZB3KTSH.js → chunk-CQWYZPPJ.js} +1 -1
  34. package/dist/{chunk-6RBNM5RO.js → chunk-CUOASXI7.js} +10 -10
  35. package/dist/{chunk-HG6HTUWU.js → chunk-CV5ZKED7.js} +2 -2
  36. package/dist/{chunk-HJERFB7J.js → chunk-DDRYT3SY.js} +2 -2
  37. package/dist/chunk-DGCAM2UJ.js +60 -0
  38. package/dist/{chunk-RLE5RN3T.js → chunk-DGQJRTO6.js} +15 -11
  39. package/dist/{chunk-FD7YU53N.js → chunk-DT3QGFXB.js} +4 -4
  40. package/dist/chunk-F73DTG2V.js +123 -0
  41. package/dist/{chunk-V3TETH4J.js → chunk-FIDUY6SS.js} +17 -16
  42. package/dist/{chunk-Z3IG5WRA.js → chunk-FJUVYRNT.js} +3 -3
  43. package/dist/{chunk-KQPLFVFR.js → chunk-FLZD7HQY.js} +0 -2
  44. package/dist/{chunk-64JDZWCV.js → chunk-GRKCUQG4.js} +6 -5
  45. package/dist/{chunk-EZ23IA3H.js → chunk-GSG2W6DP.js} +3 -3
  46. package/dist/{chunk-4I5ULCYG.js → chunk-HFTS5AN7.js} +3 -3
  47. package/dist/{chunk-RB4CVS22.js → chunk-HH7EHNOW.js} +3 -1
  48. package/dist/{chunk-S46W2QER.js → chunk-HSPGJSFJ.js} +17 -11
  49. package/dist/{chunk-NQVRF4RB.js → chunk-HXV5UA7K.js} +16 -13
  50. package/dist/{chunk-GUB7YKG2.js → chunk-I4U36P54.js} +6 -3
  51. package/dist/{chunk-BTRTORKU.js → chunk-I6CAF7C5.js} +6 -7
  52. package/dist/chunk-IGLOYOCH.js +134 -0
  53. package/dist/{chunk-IK23Q2OF.js → chunk-JHVYI5GK.js} +3 -3
  54. package/dist/chunk-K5FKEAAK.js +94 -0
  55. package/dist/{chunk-5URGARPH.js → chunk-KE4YVG5Q.js} +6 -10
  56. package/dist/{chunk-A4IMFAZX.js → chunk-LESI7J7B.js} +3 -3
  57. package/dist/chunk-MEUJBGY5.js +88 -0
  58. package/dist/chunk-MNEXMMLM.js +23 -0
  59. package/dist/{chunk-PVTACENM.js → chunk-MTK3GHDQ.js} +2 -2
  60. package/dist/chunk-NA5UMOE5.js +55 -0
  61. package/dist/{chunk-YJ3JQYAN.js → chunk-NGQKBDHA.js} +5 -13
  62. package/dist/{chunk-7Q7ZF6BY.js → chunk-NNIFOMIH.js} +18 -8
  63. package/dist/{chunk-7L3CGIRA.js → chunk-NQPGELMP.js} +8 -19
  64. package/dist/chunk-NSVXGOR3.js +54 -0
  65. package/dist/{chunk-6J3QTWKC.js → chunk-NZT4TTNV.js} +18 -9
  66. package/dist/{chunk-TJCHA3OI.js → chunk-O626NJEM.js} +7 -4
  67. package/dist/chunk-O74XEHLA.js +331 -0
  68. package/dist/{chunk-JSD3H7WV.js → chunk-OYCK6BRG.js} +6 -6
  69. package/dist/{chunk-2555JXCP.js → chunk-PBPUSRTJ.js} +19 -11
  70. package/dist/{chunk-QD7H3WV3.js → chunk-PGDXFBKT.js} +8 -8
  71. package/dist/{chunk-PQ6GU7SG.js → chunk-PMWYLYM3.js} +20 -14
  72. package/dist/{chunk-I4BHRVRL.js → chunk-PPCGUIAB.js} +9 -5
  73. package/dist/{chunk-NIX4SEKM.js → chunk-PREMZMLU.js} +7 -4
  74. package/dist/{chunk-4SSUM4CL.js → chunk-Q3ESHXKU.js} +9 -6
  75. package/dist/{chunk-KM6Z3VTI.js → chunk-QVTVDL6Y.js} +1 -1
  76. package/dist/{chunk-AXOKFS4K.js → chunk-RSU2UHN4.js} +20 -4
  77. package/dist/{chunk-DJZZ3FIP.js → chunk-RUR57JZQ.js} +5 -14
  78. package/dist/{chunk-ZV3AF5CL.js → chunk-S2CTBFLN.js} +13 -2
  79. package/dist/{chunk-WESZPFBZ.js → chunk-S7GH2BJP.js} +7 -4
  80. package/dist/chunk-SAUA52EJ.js +131 -0
  81. package/dist/{chunk-72I7EVOL.js → chunk-SYZADSLI.js} +10 -6
  82. package/dist/{chunk-TEOLG3N2.js → chunk-SZ2WPWXJ.js} +10 -6
  83. package/dist/{chunk-W2NEXOTG.js → chunk-T7RLPFGX.js} +2 -2
  84. package/dist/{chunk-J6TU45KP.js → chunk-TRA6A5C5.js} +26 -12
  85. package/dist/{chunk-H2W7IYVY.js → chunk-UTJJ5HFX.js} +18 -12
  86. package/dist/{chunk-5O34ZNC3.js → chunk-VAFBGFKY.js} +19 -13
  87. package/dist/{chunk-OJRSPDNJ.js → chunk-VD4RFTNV.js} +8 -14
  88. package/dist/chunk-VLQGQFW7.js +110 -0
  89. package/dist/{chunk-RTDUTWJ4.js → chunk-VMT7Y3AT.js} +5 -8
  90. package/dist/{chunk-LGQ737BP.js → chunk-WHTLXQB6.js} +1 -1
  91. package/dist/chunk-WLRRMT6W.js +1 -0
  92. package/dist/{chunk-2FCSWBSM.js → chunk-WMWX6DPB.js} +3 -3
  93. package/dist/{chunk-UMC64NCT.js → chunk-WVBGQCYC.js} +6 -3
  94. package/dist/{chunk-QCNLE27O.js → chunk-WXRQ42DR.js} +11 -7
  95. package/dist/{chunk-SY6V3HAK.js → chunk-XDU27NRX.js} +3 -3
  96. package/dist/{chunk-KA2J5OBA.js → chunk-XQDD76EF.js} +4 -7
  97. package/dist/chunk-XTATJMY6.js +64 -0
  98. package/dist/chunk-XYXMPHND.js +1 -0
  99. package/dist/{chunk-7ZWBHHRK.js → chunk-YNU6VRD5.js} +23 -32
  100. package/dist/{chunk-6SJPVQQW.js → chunk-Z3HF6XJ3.js} +1 -1
  101. package/dist/{chunk-I4URNMI7.js → chunk-ZC4MZAEX.js} +9 -7
  102. package/dist/{chunk-PWBPHGM3.js → chunk-ZCEUVK2R.js} +2 -2
  103. package/dist/chunk-ZT3NWE5U.js +1 -0
  104. package/dist/{chunk-RHOYF7MO.js → chunk-ZTLALVWA.js} +6 -15
  105. package/dist/components/Accordion/index.js +1 -1
  106. package/dist/components/Alert/index.js +2 -1
  107. package/dist/components/AlertDialog/index.js +3 -3
  108. package/dist/components/Amount/index.js +3 -1
  109. package/dist/components/AspectRatio/index.js +1 -1
  110. package/dist/components/Autocomplete/index.js +3 -2
  111. package/dist/components/Avatar/index.js +1 -1
  112. package/dist/components/AvatarGroup/index.js +3 -2
  113. package/dist/components/Badge/index.js +1 -1
  114. package/dist/components/Banner/index.js +2 -1
  115. package/dist/components/Breadcrumb/index.js +2 -1
  116. package/dist/components/Button/index.js +1 -1
  117. package/dist/components/ButtonGroup/index.js +1 -1
  118. package/dist/components/Callout/index.js +1 -1
  119. package/dist/components/Card/index.js +3 -1
  120. package/dist/components/CheckList/index.js +1 -1
  121. package/dist/components/Checkbox/index.js +1 -1
  122. package/dist/components/CheckboxCard/index.js +9 -0
  123. package/dist/components/Chip/index.js +2 -1
  124. package/dist/components/Citation/index.js +17 -0
  125. package/dist/components/Code/index.js +1 -1
  126. package/dist/components/Combobox/index.js +1 -1
  127. package/dist/components/CommandPalette/index.js +3 -2
  128. package/dist/components/ContextMenu/index.js +2 -2
  129. package/dist/components/CountryBadge/index.js +1 -1
  130. package/dist/components/DataTable/index.js +2 -1
  131. package/dist/components/DatePicker/index.js +5 -1
  132. package/dist/components/DateRangePicker/index.js +5 -1
  133. package/dist/components/Dialog/index.js +2 -2
  134. package/dist/components/Drawer/index.js +2 -2
  135. package/dist/components/DropdownMenu/index.js +2 -2
  136. package/dist/components/EmptyState/index.js +1 -1
  137. package/dist/components/ErrorState/index.js +2 -1
  138. package/dist/components/EyebrowChip/index.js +4 -1
  139. package/dist/components/FileUpload/index.js +2 -1
  140. package/dist/components/FilterChip/index.js +3 -1
  141. package/dist/components/Flex/index.js +2 -1
  142. package/dist/components/FormError/index.js +1 -1
  143. package/dist/components/FormField/index.js +7 -4
  144. package/dist/components/GradientDivider/index.js +1 -1
  145. package/dist/components/Grid/index.js +2 -1
  146. package/dist/components/Heading/index.js +4 -1
  147. package/dist/components/HelperText/index.js +4 -1
  148. package/dist/components/HoverCard/index.js +3 -2
  149. package/dist/components/IconButton/index.js +2 -1
  150. package/dist/components/Input/index.js +1 -1
  151. package/dist/components/Kbd/index.js +1 -1
  152. package/dist/components/KeyboardShortcut/index.js +2 -2
  153. package/dist/components/Label/index.js +4 -1
  154. package/dist/components/Link/index.js +1 -1
  155. package/dist/components/Logo/index.js +1 -1
  156. package/dist/components/MediaCard/index.js +9 -0
  157. package/dist/components/Menubar/index.js +2 -2
  158. package/dist/components/MessageBubble/index.js +18 -0
  159. package/dist/components/MoneyInput/index.js +3 -2
  160. package/dist/components/NavigationMenu/index.js +2 -2
  161. package/dist/components/NavigationRail/index.js +2 -1
  162. package/dist/components/NexubProvider/index.js +14 -0
  163. package/dist/components/NumberInput/index.js +3 -2
  164. package/dist/components/NumberTicker/index.js +10 -0
  165. package/dist/components/PageHeader/index.js +1 -1
  166. package/dist/components/Pagination/index.js +3 -1
  167. package/dist/components/PasswordInput/index.js +3 -2
  168. package/dist/components/Popover/index.js +2 -2
  169. package/dist/components/Progress/index.js +2 -1
  170. package/dist/components/PromptInput/index.js +15 -0
  171. package/dist/components/RadioCard/index.js +11 -0
  172. package/dist/components/RadioGroup/index.js +1 -1
  173. package/dist/components/Rating/index.js +2 -1
  174. package/dist/components/ScrollArea/index.js +1 -1
  175. package/dist/components/SearchInput/index.js +3 -2
  176. package/dist/components/Section/index.js +1 -1
  177. package/dist/components/SegmentedControl/index.js +3 -2
  178. package/dist/components/Select/index.js +2 -2
  179. package/dist/components/Separator/index.js +1 -1
  180. package/dist/components/Sidebar/index.js +2 -1
  181. package/dist/components/Skeleton/index.js +1 -1
  182. package/dist/components/Spinner/index.js +2 -1
  183. package/dist/components/SplitButton/index.js +5 -5
  184. package/dist/components/Stack/index.js +2 -1
  185. package/dist/components/StatusPill/index.js +1 -1
  186. package/dist/components/StreamingText/index.js +8 -0
  187. package/dist/components/Switch/index.js +1 -1
  188. package/dist/components/Table/index.js +1 -1
  189. package/dist/components/Tabs/index.js +3 -2
  190. package/dist/components/Tag/index.js +1 -1
  191. package/dist/components/Text/index.js +1 -1
  192. package/dist/components/TextGradient/index.js +1 -1
  193. package/dist/components/Textarea/index.js +1 -1
  194. package/dist/components/ThinkingIndicator/index.js +9 -0
  195. package/dist/components/Toast/index.js +3 -1
  196. package/dist/components/Tooltip/index.js +2 -1
  197. package/dist/components/TopNav/index.js +2 -1
  198. package/dist/index.d.ts +407 -22
  199. package/dist/index.js +245 -166
  200. package/package.json +52 -50
  201. package/dist/chunk-63DPMUMR.js +0 -67
  202. package/dist/chunk-CHGPGRML.js +0 -115
  203. package/dist/chunk-J2T4GFFS.js +0 -85
  204. package/dist/chunk-LH3BSAIS.js +0 -119
  205. package/dist/chunk-LMPGHWUA.js +0 -114
  206. package/dist/chunk-NMH5WSZG.js +0 -72
  207. package/dist/chunk-P44EROBX.js +0 -55
  208. package/dist/chunk-TYTW4F3B.js +0 -178
@@ -0,0 +1,134 @@
1
+ 'use client';
2
+ import {
3
+ floatingSurface
4
+ } from "./chunk-FLZD7HQY.js";
5
+ import {
6
+ field,
7
+ fieldFocusVisible
8
+ } from "./chunk-7SXR4PGO.js";
9
+ import {
10
+ useIntlLocale,
11
+ useNexubMessages
12
+ } from "./chunk-743Y5MY3.js";
13
+ import {
14
+ cn
15
+ } from "./chunk-Q7G5WGYV.js";
16
+
17
+ // src/components/DatePicker/DatePicker.tsx
18
+ import * as React from "react";
19
+ import * as RadixPopover from "@radix-ui/react-popover";
20
+ import { DayPicker } from "react-day-picker";
21
+ import { format } from "date-fns";
22
+ import { CalendarDays, ChevronLeft, ChevronRight } from "@nexub/icons";
23
+ import { jsx, jsxs } from "react/jsx-runtime";
24
+ function formatDate(date, locale) {
25
+ return locale ? new Intl.DateTimeFormat(locale, { dateStyle: "medium" }).format(date) : format(date, "PP");
26
+ }
27
+ var calendarClassNames = {
28
+ months: "flex flex-col sm:flex-row gap-4",
29
+ month: "flex flex-col gap-4",
30
+ month_caption: "flex h-8 items-center justify-center",
31
+ caption_label: "text-label-lg text-[var(--color-on-surface)]",
32
+ // v9 renders nav beside the months, not in the caption: pin it to the caption row.
33
+ nav: "pointer-events-none absolute inset-x-3 top-3 flex h-8 items-center justify-between",
34
+ button_previous: "nx-state-layer pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-full text-[var(--color-on-surface)] disabled:pointer-events-none disabled:text-[var(--color-text-disabled)]",
35
+ button_next: "nx-state-layer pointer-events-auto inline-flex h-7 w-7 items-center justify-center rounded-full text-[var(--color-on-surface)] disabled:pointer-events-none disabled:text-[var(--color-text-disabled)]",
36
+ month_grid: "w-full border-collapse",
37
+ weekdays: "flex",
38
+ weekday: "text-[var(--color-on-surface-muted)] w-8 text-label-sm flex-1 text-center",
39
+ week: "flex w-full mt-2",
40
+ day: "relative flex flex-1 justify-center p-0 text-center focus-within:z-20",
41
+ day_button: cn(
42
+ // Capsule day with a state layer; focus = the global ring. The transparent
43
+ // border carries today's primary outline.
44
+ "nx-state-layer inline-flex h-8 w-8 items-center justify-center rounded-full border border-transparent text-body-sm text-[var(--color-on-surface)]",
45
+ "disabled:pointer-events-none disabled:text-[var(--color-text-disabled)]"
46
+ ),
47
+ selected: "[&>button]:bg-[var(--color-primary)] [&>button]:text-[var(--color-on-primary)]",
48
+ today: "[&>button]:border-[var(--color-primary)]",
49
+ outside: "[&:not([data-selected]):not([data-disabled])>button]:text-[var(--color-on-surface-muted)]",
50
+ disabled: "",
51
+ hidden: "invisible"
52
+ };
53
+ var DatePicker = React.forwardRef(
54
+ function DatePicker2({
55
+ value,
56
+ onChange,
57
+ placeholder: placeholderProp,
58
+ disabled = false,
59
+ minDate,
60
+ maxDate,
61
+ className,
62
+ id,
63
+ "aria-label": ariaLabel
64
+ }, ref) {
65
+ const [open, setOpen] = React.useState(false);
66
+ const messages = useNexubMessages();
67
+ const placeholder = placeholderProp ?? messages.pickDate;
68
+ const locale = useIntlLocale();
69
+ const display = value ? formatDate(value, locale) : placeholder;
70
+ return /* @__PURE__ */ jsxs(RadixPopover.Root, { open, onOpenChange: setOpen, children: [
71
+ /* @__PURE__ */ jsx(RadixPopover.Trigger, { asChild: true, children: /* @__PURE__ */ jsxs(
72
+ "button",
73
+ {
74
+ ref,
75
+ id,
76
+ disabled,
77
+ "aria-label": ariaLabel ? `${ariaLabel}: ${display}` : display,
78
+ className: cn(
79
+ "inline-flex h-control-md w-full items-center justify-start gap-2 px-3.5 text-body-md",
80
+ field,
81
+ fieldFocusVisible,
82
+ // Open reads like focus: the 2px primary border (as Select).
83
+ "data-[state=open]:border-[var(--color-primary)] data-[state=open]:shadow-[inset_0_0_0_1px_var(--color-primary)]",
84
+ "disabled:cursor-not-allowed disabled:border-[var(--color-outline-variant)] disabled:bg-[var(--color-surface-container-low)] disabled:text-[var(--color-text-disabled)]",
85
+ !value && "text-[var(--color-on-surface-muted)]",
86
+ className
87
+ ),
88
+ children: [
89
+ /* @__PURE__ */ jsx(CalendarDays, { size: "sm", "aria-hidden": "true" }),
90
+ display
91
+ ]
92
+ }
93
+ ) }),
94
+ /* @__PURE__ */ jsx(RadixPopover.Portal, { children: /* @__PURE__ */ jsx(
95
+ RadixPopover.Content,
96
+ {
97
+ align: "start",
98
+ className: cn(
99
+ "z-[var(--z-popover)] outline-none",
100
+ floatingSurface,
101
+ "nx-motion nx-pop origin-[var(--radix-popover-content-transform-origin)]"
102
+ ),
103
+ children: /* @__PURE__ */ jsx(
104
+ DayPicker,
105
+ {
106
+ mode: "single",
107
+ selected: value,
108
+ defaultMonth: value,
109
+ onSelect: (date) => {
110
+ onChange?.(date);
111
+ setOpen(false);
112
+ },
113
+ startMonth: minDate,
114
+ endMonth: maxDate,
115
+ initialFocus: true,
116
+ showOutsideDays: true,
117
+ className: "relative p-3",
118
+ classNames: calendarClassNames,
119
+ components: {
120
+ Chevron: ({ orientation, ...rest }) => orientation === "left" ? /* @__PURE__ */ jsx(ChevronLeft, { size: "xs", "aria-hidden": "true" }) : orientation === "right" ? /* @__PURE__ */ jsx(ChevronRight, { size: "xs", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(ChevronRight, { size: "xs", "aria-hidden": "true", ...rest })
121
+ }
122
+ }
123
+ )
124
+ }
125
+ ) })
126
+ ] });
127
+ }
128
+ );
129
+ DatePicker.displayName = "DatePicker";
130
+
131
+ export {
132
+ formatDate,
133
+ DatePicker
134
+ };
@@ -21,7 +21,7 @@ var inputVariants = cva(
21
21
  "border-0 shadow-none",
22
22
  "outline-none focus:outline-none focus-visible:outline-none",
23
23
  "ring-0 focus:ring-0 focus-visible:ring-0",
24
- "placeholder:text-[var(--color-text-placeholder)]",
24
+ "placeholder:text-[var(--color-on-surface-muted)]",
25
25
  "text-[var(--color-on-surface)]",
26
26
  "disabled:cursor-not-allowed disabled:text-[var(--color-text-disabled)]"
27
27
  ],
@@ -71,8 +71,8 @@ var addonVariants = cva(
71
71
  {
72
72
  variants: {
73
73
  side: {
74
- leading: "border-r",
75
- trailing: "border-l"
74
+ leading: "border-e",
75
+ trailing: "border-s"
76
76
  }
77
77
  }
78
78
  }
@@ -0,0 +1,94 @@
1
+ 'use client';
2
+ import {
3
+ cn
4
+ } from "./chunk-Q7G5WGYV.js";
5
+
6
+ // src/components/RadioCard/selectableCard.tsx
7
+ import * as React from "react";
8
+ import { Check } from "@nexub/icons";
9
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
+ var selectableCardClass = [
11
+ "group nx-state-layer flex w-full items-start gap-3 p-4 text-start",
12
+ "rounded-shape-container bg-[var(--color-surface-elevated)] text-[var(--color-on-surface)]",
13
+ "border border-[color-mix(in_srgb,var(--color-outline-variant)_60%,transparent)]",
14
+ "cursor-pointer transition-[border-color,box-shadow] duration-effects-fast ease-effects-fast",
15
+ "data-[state=checked]:border-[var(--color-primary)] data-[state=checked]:shadow-[inset_0_0_0_1px_var(--color-primary)]",
16
+ "data-[disabled]:cursor-not-allowed data-[disabled]:text-[var(--color-text-disabled)]",
17
+ "data-[disabled]:data-[state=checked]:border-[var(--color-text-disabled)] data-[disabled]:data-[state=checked]:shadow-[inset_0_0_0_1px_var(--color-text-disabled)]"
18
+ ].join(" ");
19
+ var slotShape = {
20
+ circle: "rounded-full",
21
+ square: "rounded-shape-min"
22
+ };
23
+ function SelectableCardContent({
24
+ icon,
25
+ title,
26
+ description,
27
+ children,
28
+ titleId,
29
+ descriptionId,
30
+ shape
31
+ }) {
32
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
33
+ icon != null && /* @__PURE__ */ jsx(
34
+ "span",
35
+ {
36
+ "aria-hidden": true,
37
+ className: "flex shrink-0 text-[var(--color-on-surface-variant)] group-data-[state=checked]:text-[var(--color-primary)] group-data-[disabled]:text-[var(--color-text-disabled)]",
38
+ children: icon
39
+ }
40
+ ),
41
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-1 flex-col gap-1", children: [
42
+ /* @__PURE__ */ jsx("span", { id: titleId, className: "text-sm font-medium", children: title }),
43
+ description != null && /* @__PURE__ */ jsx(
44
+ "span",
45
+ {
46
+ id: descriptionId,
47
+ className: "text-sm text-[var(--color-on-surface-variant)] group-data-[disabled]:text-[var(--color-text-disabled)]",
48
+ children: description
49
+ }
50
+ ),
51
+ children
52
+ ] }),
53
+ /* @__PURE__ */ jsx(
54
+ "span",
55
+ {
56
+ "aria-hidden": true,
57
+ className: cn(
58
+ "relative h-5 w-5 shrink-0 border border-[var(--color-outline-variant)]",
59
+ slotShape[shape]
60
+ ),
61
+ children: /* @__PURE__ */ jsx(
62
+ "span",
63
+ {
64
+ className: cn(
65
+ "absolute -inset-px flex items-center justify-center rounded-[inherit]",
66
+ "bg-[var(--color-primary)] text-[var(--color-on-primary)] group-data-[disabled]:bg-[var(--color-text-disabled)] group-data-[disabled]:text-[var(--color-surface)]",
67
+ // Exit: fade on effects-fast; scale resets only after the fade.
68
+ "scale-0 opacity-0 [transition:opacity_var(--motion-spring-effects-fast-duration)_var(--motion-spring-effects-fast-easing),transform_0s_linear_var(--motion-spring-effects-fast-duration)]",
69
+ // Enter: scale 0 -> 1 on the expressive spring, opacity on effects.
70
+ "group-data-[state=checked]:scale-100 group-data-[state=checked]:opacity-100 group-data-[state=checked]:[transition:transform_var(--motion-spring-expressive-fast-duration)_var(--motion-spring-expressive-fast-easing),opacity_var(--motion-spring-effects-fast-duration)_var(--motion-spring-effects-fast-easing)]",
71
+ // Reduced motion: crossfade only.
72
+ "motion-reduce:scale-100"
73
+ ),
74
+ children: /* @__PURE__ */ jsx(Check, { size: "xs" })
75
+ }
76
+ )
77
+ }
78
+ )
79
+ ] });
80
+ }
81
+ function useCardIds(hasDescription) {
82
+ const id = React.useId();
83
+ return {
84
+ titleId: `${id}-title`,
85
+ descriptionId: `${id}-desc`,
86
+ describedBy: hasDescription ? `${id}-desc` : void 0
87
+ };
88
+ }
89
+
90
+ export {
91
+ selectableCardClass,
92
+ SelectableCardContent,
93
+ useCardIds
94
+ };
@@ -1,8 +1,7 @@
1
1
  'use client';
2
2
  import {
3
- enterExit,
4
3
  floatingSurface
5
- } from "./chunk-KQPLFVFR.js";
4
+ } from "./chunk-FLZD7HQY.js";
6
5
  import {
7
6
  cn
8
7
  } from "./chunk-Q7G5WGYV.js";
@@ -11,7 +10,9 @@ import {
11
10
  import * as React from "react";
12
11
  import * as RadixHoverCard from "@radix-ui/react-hover-card";
13
12
  import { jsx } from "react/jsx-runtime";
14
- var Root2 = RadixHoverCard.Root;
13
+ function Root2({ openDelay = 500, closeDelay = 200, ...props }) {
14
+ return /* @__PURE__ */ jsx(RadixHoverCard.Root, { openDelay, closeDelay, ...props });
15
+ }
15
16
  var Trigger2 = RadixHoverCard.Trigger;
16
17
  var Content2 = React.forwardRef(
17
18
  function HoverCardContent({ className, sideOffset = 4, ...props }, ref) {
@@ -23,12 +24,7 @@ var Content2 = React.forwardRef(
23
24
  className: cn(
24
25
  "z-[var(--z-popover)] w-64 p-4 outline-none",
25
26
  floatingSurface,
26
- enterExit,
27
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
28
- "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
29
- "data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95",
30
- "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
31
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
27
+ "nx-motion nx-pop origin-[var(--radix-hover-card-content-transform-origin)]",
32
28
  className
33
29
  ),
34
30
  ...props
@@ -43,7 +39,7 @@ var Arrow2 = React.forwardRef(
43
39
  RadixHoverCard.Arrow,
44
40
  {
45
41
  ref,
46
- className: cn("fill-[var(--color-border-default)]", className),
42
+ className: cn("fill-[var(--color-outline-variant)]", className),
47
43
  ...props
48
44
  }
49
45
  );
@@ -15,9 +15,9 @@ var Kbd = React.forwardRef(
15
15
  className: cn(
16
16
  "inline-flex items-center justify-center font-mono text-xs",
17
17
  "px-1.5 py-0.5 min-w-[1.5rem]",
18
- "rounded border border-[var(--color-border-default)]",
19
- "bg-[var(--color-bg-subtle)] text-[var(--color-text-secondary)]",
20
- "shadow-[0_1px_0_var(--color-border-default)]",
18
+ "rounded-shape-min border border-[var(--color-outline-variant)]",
19
+ "bg-[var(--color-surface-container-low)] text-[var(--color-on-surface-variant)]",
20
+ "shadow-[0_1px_0_var(--color-outline-variant)]",
21
21
  className
22
22
  ),
23
23
  ...rest,
@@ -0,0 +1,88 @@
1
+ 'use client';
2
+ import {
3
+ useIntlLocale
4
+ } from "./chunk-743Y5MY3.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-Q7G5WGYV.js";
8
+
9
+ // src/components/NumberTicker/NumberTicker.tsx
10
+ import * as React from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ var SHIFT = [
13
+ "translate-y-0",
14
+ "-translate-y-[10%]",
15
+ "-translate-y-[20%]",
16
+ "-translate-y-[30%]",
17
+ "-translate-y-[40%]",
18
+ "-translate-y-[50%]",
19
+ "-translate-y-[60%]",
20
+ "-translate-y-[70%]",
21
+ "-translate-y-[80%]",
22
+ "-translate-y-[90%]"
23
+ ];
24
+ var DIGITS = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
25
+ function Char({ char, className, enter }) {
26
+ const [entering] = React.useState(enter);
27
+ const motion = entering ? { "data-motion": "from-fade" } : {};
28
+ if (!/^[0-9]$/.test(char)) {
29
+ return /* @__PURE__ */ jsx("span", { className: cn(entering && "nx-motion", className), ...motion, children: char });
30
+ }
31
+ return /* @__PURE__ */ jsxs(
32
+ "span",
33
+ {
34
+ "data-digit": char,
35
+ className: cn("relative inline-block overflow-clip", entering && "nx-motion", className),
36
+ ...motion,
37
+ children: [
38
+ /* @__PURE__ */ jsx("span", { className: "invisible", children: "0" }),
39
+ /* @__PURE__ */ jsx(
40
+ "span",
41
+ {
42
+ className: cn(
43
+ "absolute inset-x-0 top-0 flex h-[1000%] flex-col text-center",
44
+ "transition-transform duration-spatial-default ease-spatial-default motion-reduce:transition-none",
45
+ SHIFT[Number(char)]
46
+ ),
47
+ children: DIGITS.map((d) => /* @__PURE__ */ jsx("span", { className: "h-[10%]", children: d }, d))
48
+ }
49
+ )
50
+ ]
51
+ }
52
+ );
53
+ }
54
+ var NumberTicker = React.forwardRef(
55
+ ({ value, format, locale: localeProp, className, "aria-live": ariaLive = "off", ...props }, ref) => {
56
+ const locale = useIntlLocale(localeProp);
57
+ const parts = typeof value === "number" ? [{ value: new Intl.NumberFormat(locale, format).format(value) }] : typeof value === "string" ? [{ value }] : value;
58
+ const chars = parts.flatMap((p) => Array.from(p.value, (char) => ({ char, className: p.className })));
59
+ const text = parts.map((p) => p.value).join("");
60
+ const mounted = React.useRef(false);
61
+ React.useEffect(() => {
62
+ mounted.current = true;
63
+ }, []);
64
+ return /* @__PURE__ */ jsxs(
65
+ "span",
66
+ {
67
+ ref,
68
+ className: cn("whitespace-nowrap tabular-nums", className),
69
+ "aria-live": ariaLive,
70
+ "aria-atomic": "true",
71
+ ...props,
72
+ children: [
73
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: text }),
74
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: chars.map(({ char, className: cls }, i) => {
75
+ const fromEnd = chars.length - 1 - i;
76
+ const kind = /^[0-9]$/.test(char) ? "d" : `s${char}`;
77
+ return /* @__PURE__ */ jsx(Char, { char, className: cls, enter: mounted.current }, `${fromEnd}${kind}`);
78
+ }) })
79
+ ]
80
+ }
81
+ );
82
+ }
83
+ );
84
+ NumberTicker.displayName = "NumberTicker";
85
+
86
+ export {
87
+ NumberTicker
88
+ };
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+
3
+ // src/hooks/useMergedRefs.ts
4
+ import { useCallback, useRef } from "react";
5
+ function setRef(ref, value) {
6
+ if (!ref) return;
7
+ if (typeof ref === "function") {
8
+ ref(value);
9
+ } else {
10
+ ref.current = value;
11
+ }
12
+ }
13
+ function useMergedRefs(...refs) {
14
+ const refsRef = useRef(refs);
15
+ refsRef.current = refs;
16
+ return useCallback((node) => {
17
+ for (const ref of refsRef.current) setRef(ref, node);
18
+ }, []);
19
+ }
20
+
21
+ export {
22
+ useMergedRefs
23
+ };
@@ -11,8 +11,8 @@ var PageHeader = React.forwardRef(
11
11
  breadcrumb && /* @__PURE__ */ jsx("div", { children: breadcrumb }),
12
12
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between", children: [
13
13
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
14
- /* @__PURE__ */ jsx("h1", { className: "text-2xl font-semibold tracking-tight text-[var(--color-text-primary)] truncate", children: title }),
15
- description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-[var(--color-text-muted)]", children: description })
14
+ /* @__PURE__ */ jsx("h1", { className: "text-2xl font-semibold tracking-tight text-[var(--color-on-surface)] truncate", children: title }),
15
+ description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-[var(--color-on-surface-muted)]", children: description })
16
16
  ] }),
17
17
  actions && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-2", children: actions })
18
18
  ] })
@@ -0,0 +1,55 @@
1
+ 'use client';
2
+ import {
3
+ cn
4
+ } from "./chunk-Q7G5WGYV.js";
5
+
6
+ // src/components/Tag/Tag.tsx
7
+ import * as React from "react";
8
+ import { cva } from "class-variance-authority";
9
+ import { jsx } from "react/jsx-runtime";
10
+ var tagVariants = cva(
11
+ "inline-flex items-center rounded-shape-min font-medium select-none whitespace-nowrap",
12
+ {
13
+ variants: {
14
+ size: {
15
+ sm: "px-1.5 py-0.5 text-xs",
16
+ md: "px-2 py-0.5 text-xs",
17
+ lg: "px-2.5 py-1 text-sm"
18
+ },
19
+ tone: {
20
+ neutral: "bg-[var(--color-surface-container-high)] text-[var(--color-on-surface-variant)]",
21
+ info: "bg-[var(--color-info-container)] text-[var(--color-on-info-container)]",
22
+ success: "bg-[var(--color-success-container)] text-[var(--color-on-success-container)]",
23
+ warning: "bg-[var(--color-warning-container)] text-[var(--color-on-warning-container)]",
24
+ danger: "bg-[var(--color-error-container)] text-[var(--color-on-error-container)]",
25
+ leap: "bg-[var(--color-leap-container)] text-[var(--color-on-leap-container)]",
26
+ bookub: "bg-[var(--color-bookub-container)] text-[var(--color-on-bookub-container)]",
27
+ payub: "bg-[var(--color-payub-container)] text-[var(--color-on-payub-container)]",
28
+ founderub: "bg-[var(--color-founderub-container)] text-[var(--color-on-founderub-container)]"
29
+ }
30
+ },
31
+ defaultVariants: {
32
+ size: "md",
33
+ tone: "neutral"
34
+ }
35
+ }
36
+ );
37
+ var Tag = React.forwardRef(
38
+ ({ className, size, tone = "neutral", children, ...props }, ref) => {
39
+ return /* @__PURE__ */ jsx(
40
+ "span",
41
+ {
42
+ ref,
43
+ className: cn(tagVariants({ size, tone }), className),
44
+ ...props,
45
+ children
46
+ }
47
+ );
48
+ }
49
+ );
50
+ Tag.displayName = "Tag";
51
+
52
+ export {
53
+ tagVariants,
54
+ Tag
55
+ };
@@ -1,4 +1,7 @@
1
1
  'use client';
2
+ import {
3
+ toneTextClasses
4
+ } from "./chunk-C6JRJ6JW.js";
2
5
  import {
3
6
  cn
4
7
  } from "./chunk-Q7G5WGYV.js";
@@ -6,17 +9,6 @@ import {
6
9
  // src/components/EyebrowChip/EyebrowChip.tsx
7
10
  import * as React from "react";
8
11
  import { jsx, jsxs } from "react/jsx-runtime";
9
- var toneTextMap = {
10
- neutral: "text-[var(--color-neutral-700)]",
11
- info: "text-[var(--color-semantic-info-default)]",
12
- success: "text-[var(--color-semantic-success-default)]",
13
- warning: "text-[var(--color-semantic-warning-default)]",
14
- danger: "text-[var(--color-semantic-error-default)]",
15
- leap: "text-[var(--color-leap-700)]",
16
- bookub: "text-[var(--color-bookub-700)]",
17
- payub: "text-[var(--color-payub-700)]",
18
- founderub: "text-[var(--color-founderub-700)]"
19
- };
20
12
  var EyebrowChip = React.forwardRef(
21
13
  ({ className, tone = "neutral", leadingIcon, children, ...props }, ref) => {
22
14
  return /* @__PURE__ */ jsxs(
@@ -26,8 +18,8 @@ var EyebrowChip = React.forwardRef(
26
18
  className: cn(
27
19
  "inline-flex items-center gap-1.5 rounded-full px-3 py-1",
28
20
  "text-xs font-semibold uppercase tracking-wider select-none",
29
- "bg-[var(--color-bg-subtle)]",
30
- toneTextMap[tone],
21
+ "bg-[var(--color-surface-container-low)]",
22
+ toneTextClasses[tone],
31
23
  className
32
24
  ),
33
25
  ...props,
@@ -18,11 +18,11 @@ var textVariants = cva("", {
18
18
  label: "text-sm leading-none font-medium"
19
19
  },
20
20
  tone: {
21
- default: "text-[var(--color-text-primary)]",
22
- secondary: "text-[var(--color-text-secondary)]",
23
- muted: "text-[var(--color-text-muted)]",
24
- subtle: "text-[var(--color-text-subtle)]",
25
- inverse: "text-[var(--color-text-inverse)]"
21
+ default: "text-[var(--color-on-surface)]",
22
+ secondary: "text-[var(--color-on-surface-variant)]",
23
+ muted: "text-[var(--color-on-surface-muted)]",
24
+ subtle: "text-[var(--color-outline)]",
25
+ inverse: "text-[var(--color-inverse-on-surface)]"
26
26
  },
27
27
  weight: {
28
28
  regular: "font-normal",
@@ -36,6 +36,14 @@ var textVariants = cva("", {
36
36
  tone: "default"
37
37
  }
38
38
  });
39
+ var LINE_CLAMP = {
40
+ 1: "line-clamp-1",
41
+ 2: "line-clamp-2",
42
+ 3: "line-clamp-3",
43
+ 4: "line-clamp-4",
44
+ 5: "line-clamp-5",
45
+ 6: "line-clamp-6"
46
+ };
39
47
  var Text = React.forwardRef(
40
48
  ({
41
49
  size,
@@ -50,12 +58,13 @@ var Text = React.forwardRef(
50
58
  ...rest
51
59
  }, ref) => {
52
60
  const Comp = asChild ? Slot : "p";
53
- const clampStyle = lineClamp !== void 0 ? {
61
+ const clampClass = lineClamp !== void 0 ? LINE_CLAMP[lineClamp] : void 0;
62
+ const clampStyle = lineClamp !== void 0 && !clampClass ? {
54
63
  display: "-webkit-box",
55
64
  WebkitLineClamp: lineClamp,
56
65
  WebkitBoxOrient: "vertical",
57
66
  overflow: "hidden"
58
- } : {};
67
+ } : void 0;
59
68
  return /* @__PURE__ */ jsx(
60
69
  Comp,
61
70
  {
@@ -63,9 +72,10 @@ var Text = React.forwardRef(
63
72
  className: cn(
64
73
  textVariants({ size, tone, weight }),
65
74
  truncate && "truncate",
75
+ clampClass,
66
76
  className
67
77
  ),
68
- style: { ...clampStyle, ...style },
78
+ style: clampStyle ? { ...clampStyle, ...style } : style,
69
79
  ...rest,
70
80
  children
71
81
  }
@@ -1,12 +1,11 @@
1
1
  'use client';
2
2
  import {
3
- enterExit,
4
3
  floatingSurface,
5
4
  menuContent,
6
5
  menuItem,
7
6
  menuLabel,
8
7
  menuSeparator
9
- } from "./chunk-KQPLFVFR.js";
8
+ } from "./chunk-FLZD7HQY.js";
10
9
  import {
11
10
  cn
12
11
  } from "./chunk-Q7G5WGYV.js";
@@ -33,12 +32,7 @@ var Content2 = React.forwardRef(
33
32
  "z-[var(--z-popover)] min-w-48 outline-none",
34
33
  floatingSurface,
35
34
  menuContent,
36
- enterExit,
37
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
38
- "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
39
- "data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95",
40
- "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
41
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
35
+ "nx-motion nx-pop origin-[var(--radix-dropdown-menu-content-transform-origin)]",
42
36
  className
43
37
  ),
44
38
  ...props
@@ -97,11 +91,11 @@ var CheckboxItem2 = React.forwardRef(function DropdownMenuCheckboxItem({ classNa
97
91
  RadixDropdownMenu.CheckboxItem,
98
92
  {
99
93
  ref,
100
- className: cn(itemBaseClasses, "pl-8", className),
94
+ className: cn(itemBaseClasses, "ps-8", className),
101
95
  checked,
102
96
  ...props,
103
97
  children: [
104
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx(RadixDropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
98
+ /* @__PURE__ */ jsx("span", { className: "absolute start-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx(RadixDropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
105
99
  children
106
100
  ]
107
101
  }
@@ -113,10 +107,10 @@ var RadioItem2 = React.forwardRef(function DropdownMenuRadioItem({ className, ch
113
107
  RadixDropdownMenu.RadioItem,
114
108
  {
115
109
  ref,
116
- className: cn(itemBaseClasses, "pl-8", className),
110
+ className: cn(itemBaseClasses, "ps-8", className),
117
111
  ...props,
118
112
  children: [
119
- /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx(RadixDropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx("svg", { className: "h-2 w-2 fill-current", viewBox: "0 0 8 8", "aria-hidden": "true", children: /* @__PURE__ */ jsx("circle", { cx: "4", cy: "4", r: "4" }) }) }) }),
113
+ /* @__PURE__ */ jsx("span", { className: "absolute start-2 flex h-4 w-4 items-center justify-center", children: /* @__PURE__ */ jsx(RadixDropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsx("svg", { className: "h-2 w-2 fill-current", viewBox: "0 0 8 8", "aria-hidden": "true", children: /* @__PURE__ */ jsx("circle", { cx: "4", cy: "4", r: "4" }) }) }) }),
120
114
  children
121
115
  ]
122
116
  }
@@ -136,7 +130,7 @@ var SubTrigger2 = React.forwardRef(function DropdownMenuSubTrigger({ className,
136
130
  ...props,
137
131
  children: [
138
132
  children,
139
- /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto h-4 w-4" })
133
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ms-auto h-4 w-4 rtl:-scale-x-100" })
140
134
  ]
141
135
  }
142
136
  );
@@ -151,12 +145,7 @@ var SubContent2 = React.forwardRef(function DropdownMenuSubContent({ className,
151
145
  "z-[var(--z-popover)] min-w-48 outline-none",
152
146
  floatingSurface,
153
147
  menuContent,
154
- enterExit,
155
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
156
- "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
157
- "data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95",
158
- "data-[side=bottom]:slide-in-from-top-2 data-[side=top]:slide-in-from-bottom-2",
159
- "data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2",
148
+ "nx-motion nx-pop origin-[var(--radix-dropdown-menu-content-transform-origin)]",
160
149
  className
161
150
  ),
162
151
  ...props