@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,54 @@
1
+ 'use client';
2
+ import {
3
+ useNexubMessages
4
+ } from "./chunk-743Y5MY3.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-Q7G5WGYV.js";
8
+
9
+ // src/components/ThinkingIndicator/ThinkingIndicator.tsx
10
+ import * as React from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ var fallbackMessages = { thinking: "Thinking" };
13
+ var ThinkingIndicator = React.forwardRef(
14
+ ({ label, size = "md", messages: messagesProp, className, ...props }, ref) => {
15
+ const m = {
16
+ ...fallbackMessages,
17
+ ...useNexubMessages(),
18
+ ...messagesProp
19
+ };
20
+ const text = label === void 0 ? m.thinking : label;
21
+ return /* @__PURE__ */ jsxs(
22
+ "div",
23
+ {
24
+ ref,
25
+ role: "status",
26
+ "aria-live": "polite",
27
+ className: cn(
28
+ "inline-flex items-center text-[var(--color-on-surface-variant)]",
29
+ size === "sm" ? "gap-2 text-label-md" : "gap-2.5 text-body-md",
30
+ className
31
+ ),
32
+ ...props,
33
+ children: [
34
+ /* @__PURE__ */ jsx(
35
+ "span",
36
+ {
37
+ "aria-hidden": "true",
38
+ className: cn(
39
+ "nx-morph shrink-0 rounded-full bg-[var(--color-primary)]",
40
+ size === "sm" ? "size-4" : "size-5"
41
+ )
42
+ }
43
+ ),
44
+ text === null ? /* @__PURE__ */ jsx("span", { className: "sr-only", children: m.thinking }) : /* @__PURE__ */ jsx("span", { className: "nx-shimmer", children: text })
45
+ ]
46
+ }
47
+ );
48
+ }
49
+ );
50
+ ThinkingIndicator.displayName = "ThinkingIndicator";
51
+
52
+ export {
53
+ ThinkingIndicator
54
+ };
@@ -1,4 +1,8 @@
1
1
  'use client';
2
+ import {
3
+ disabledContainer,
4
+ pressable
5
+ } from "./chunk-7SXR4PGO.js";
2
6
  import {
3
7
  cn
4
8
  } from "./chunk-Q7G5WGYV.js";
@@ -15,6 +19,11 @@ import {
15
19
  } from "@tanstack/react-table";
16
20
  import { ArrowUp, ArrowDown, ChevronsUpDown } from "@nexub/icons";
17
21
  import { jsx, jsxs } from "react/jsx-runtime";
22
+ var pagerButton = cn(
23
+ pressable,
24
+ "border border-[var(--color-outline-variant)] bg-transparent px-4 py-2 min-h-[44px] text-label-lg text-[var(--color-on-surface)]",
25
+ disabledContainer
26
+ );
18
27
  var TableRoot = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: "w-full overflow-auto", children: /* @__PURE__ */ jsx(
19
28
  "table",
20
29
  {
@@ -28,7 +37,7 @@ var TableHeader = React.forwardRef(({ className, ...props }, ref) => /* @__PURE_
28
37
  "thead",
29
38
  {
30
39
  ref,
31
- className: cn("[&_tr]:border-b border-[var(--color-border-default)]", className),
40
+ className: cn("[&_tr]:border-b border-[var(--color-outline-variant)]", className),
32
41
  ...props
33
42
  }
34
43
  ));
@@ -47,7 +56,7 @@ var TableRow = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
47
56
  {
48
57
  ref,
49
58
  className: cn(
50
- "border-b border-[var(--color-border-default)] transition-colors hover:bg-[var(--color-bg-subtle)] data-[state=selected]:bg-[var(--color-bg-subtle)]",
59
+ "border-b border-[var(--color-outline-variant)] transition-colors hover:bg-[color-mix(in_srgb,var(--color-on-surface)_8%,transparent)] data-[state=selected]:bg-[var(--color-surface-container-low)]",
51
60
  className
52
61
  ),
53
62
  ...props
@@ -59,7 +68,7 @@ var TableHead = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__
59
68
  {
60
69
  ref,
61
70
  className: cn(
62
- "h-10 px-4 text-left align-middle text-xs font-medium text-[var(--color-text-muted)] [&:has([role=checkbox])]:pr-0",
71
+ "h-10 px-4 text-start align-middle text-xs font-medium text-[var(--color-on-surface-muted)] [&:has([role=checkbox])]:pe-0",
63
72
  className
64
73
  ),
65
74
  ...props
@@ -71,7 +80,7 @@ var TableCell = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__
71
80
  {
72
81
  ref,
73
82
  className: cn(
74
- "px-4 py-3 align-middle text-[var(--color-text-primary)] [&:has([role=checkbox])]:pr-0",
83
+ "px-4 py-3 align-middle text-[var(--color-on-surface)] [&:has([role=checkbox])]:pe-0",
75
84
  className
76
85
  ),
77
86
  ...props
@@ -125,7 +134,7 @@ function DataTable({
125
134
  "button",
126
135
  {
127
136
  onClick: header.column.getToggleSortingHandler(),
128
- className: "inline-flex items-center gap-1 hover:text-[var(--color-text-primary)]",
137
+ className: "inline-flex items-center gap-1 hover:text-[var(--color-on-surface)]",
129
138
  children: [
130
139
  flexRender(header.column.columnDef.header, header.getContext()),
131
140
  header.column.getIsSorted() === "asc" ? /* @__PURE__ */ jsx(ArrowUp, { size: "xs", "aria-hidden": "true" }) : header.column.getIsSorted() === "desc" ? /* @__PURE__ */ jsx(ArrowDown, { size: "xs", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(ChevronsUpDown, { size: "xs", className: "opacity-40", "aria-hidden": "true" })
@@ -146,12 +155,12 @@ function DataTable({
146
155
  TableCell,
147
156
  {
148
157
  colSpan: columns.length,
149
- className: "h-24 text-center text-[var(--color-text-muted)]",
158
+ className: "h-24 text-center text-[var(--color-on-surface-muted)]",
150
159
  children: "No results."
151
160
  }
152
161
  ) }) })
153
162
  ] }),
154
- pagination && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 text-sm text-[var(--color-text-muted)]", children: [
163
+ pagination && /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-2 text-sm text-[var(--color-on-surface-muted)]", children: [
155
164
  /* @__PURE__ */ jsxs("span", { children: [
156
165
  "Page ",
157
166
  table.getState().pagination.pageIndex + 1,
@@ -164,7 +173,7 @@ function DataTable({
164
173
  {
165
174
  onClick: () => table.previousPage(),
166
175
  disabled: !table.getCanPreviousPage(),
167
- className: "rounded border border-[var(--color-border-default)] px-3 py-2 min-h-[44px] disabled:opacity-50",
176
+ className: pagerButton,
168
177
  children: "Previous"
169
178
  }
170
179
  ),
@@ -173,7 +182,7 @@ function DataTable({
173
182
  {
174
183
  onClick: () => table.nextPage(),
175
184
  disabled: !table.getCanNextPage(),
176
- className: "rounded border border-[var(--color-border-default)] px-3 py-2 min-h-[44px] disabled:opacity-50",
185
+ className: pagerButton,
177
186
  children: "Next"
178
187
  }
179
188
  )
@@ -1,7 +1,10 @@
1
1
  'use client';
2
2
  import {
3
3
  Input
4
- } from "./chunk-IK23Q2OF.js";
4
+ } from "./chunk-JHVYI5GK.js";
5
+ import {
6
+ useNexubMessages
7
+ } from "./chunk-743Y5MY3.js";
5
8
  import {
6
9
  cn
7
10
  } from "./chunk-Q7G5WGYV.js";
@@ -22,6 +25,7 @@ var SearchInput = React.forwardRef(
22
25
  if (!controlled) setInternalValue(e.target.value);
23
26
  onChange?.(e);
24
27
  };
28
+ const messages = useNexubMessages();
25
29
  const handleClear = () => {
26
30
  if (!controlled) setInternalValue("");
27
31
  onClear?.();
@@ -31,10 +35,9 @@ var SearchInput = React.forwardRef(
31
35
  {
32
36
  type: "button",
33
37
  onClick: handleClear,
34
- "aria-label": "Clear search",
38
+ "aria-label": messages.clearSearch,
35
39
  className: cn(
36
- "shrink-0 text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] transition-colors",
37
- "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-ring-default)] rounded"
40
+ "shrink-0 rounded-full text-[var(--color-on-surface-muted)] hover:text-[var(--color-on-surface)] transition-colors"
38
41
  ),
39
42
  children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4", "aria-hidden": "true" })
40
43
  }
@@ -0,0 +1,331 @@
1
+ 'use client';
2
+ import {
3
+ useIsomorphicLayoutEffect
4
+ } from "./chunk-NHUQLIHL.js";
5
+ import {
6
+ useNexubMessages
7
+ } from "./chunk-743Y5MY3.js";
8
+ import {
9
+ cn
10
+ } from "./chunk-Q7G5WGYV.js";
11
+
12
+ // src/components/Toast/Toast.tsx
13
+ import * as React from "react";
14
+ import * as RadixToast from "@radix-ui/react-toast";
15
+ import { jsx } from "react/jsx-runtime";
16
+ var Provider2 = RadixToast.Provider;
17
+ var Viewport2 = React.forwardRef(
18
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
19
+ RadixToast.Viewport,
20
+ {
21
+ ref,
22
+ className: cn(
23
+ "fixed top-0 end-0 z-[var(--z-toast,2000)] flex max-h-screen w-full flex-col-reverse p-4 sm:max-w-sm gap-2",
24
+ className
25
+ ),
26
+ ...props
27
+ }
28
+ )
29
+ );
30
+ Viewport2.displayName = "Toast.Viewport";
31
+ var Root2 = React.forwardRef(
32
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
33
+ RadixToast.Root,
34
+ {
35
+ ref,
36
+ className: cn(
37
+ // Snackbar: the inverse surface stands out from any page, light or dark.
38
+ "group pointer-events-auto relative flex w-full items-center justify-between gap-3 overflow-hidden rounded-shape-container bg-[var(--color-inverse-surface)] py-3 ps-4 pe-2 text-[var(--color-inverse-on-surface)] shadow-elevation-2",
39
+ "duration-spatial-default ease-spatial-default data-[state=closed]:duration-effects-fast",
40
+ // Enter/exit slide from the right edge, where the viewport sits.
41
+ "nx-motion [--nx-x:calc(100%+1rem)] rtl:[--nx-x:calc(-100%-1rem)]",
42
+ className
43
+ ),
44
+ ...props
45
+ }
46
+ )
47
+ );
48
+ Root2.displayName = "Toast.Root";
49
+ var Title2 = React.forwardRef(
50
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(RadixToast.Title, { ref, className: cn("text-title-sm", className), ...props })
51
+ );
52
+ Title2.displayName = "Toast.Title";
53
+ var Description2 = React.forwardRef(
54
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
55
+ RadixToast.Description,
56
+ {
57
+ ref,
58
+ className: cn("text-body-sm text-[color-mix(in_srgb,var(--color-inverse-on-surface)_80%,transparent)]", className),
59
+ ...props
60
+ }
61
+ )
62
+ );
63
+ Description2.displayName = "Toast.Description";
64
+ var Action2 = React.forwardRef(
65
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
66
+ RadixToast.Action,
67
+ {
68
+ ref,
69
+ className: cn(
70
+ "nx-state-layer relative inline-flex min-h-[44px] min-w-[44px] shrink-0 items-center justify-center rounded-shape-control px-3 text-label-lg text-[var(--color-inverse-primary)]",
71
+ className
72
+ ),
73
+ ...props
74
+ }
75
+ )
76
+ );
77
+ Action2.displayName = "Toast.Action";
78
+ var Close2 = React.forwardRef(
79
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(RadixToast.Close, { ref, className: cn("nx-state-layer relative grid h-8 w-8 place-items-center rounded-full", className), ...props })
80
+ );
81
+ Close2.displayName = "Toast.Close";
82
+ var Toast = { Provider: Provider2, Viewport: Viewport2, Root: Root2, Title: Title2, Description: Description2, Action: Action2, Close: Close2 };
83
+
84
+ // src/components/Toast/Toaster.tsx
85
+ import * as React2 from "react";
86
+ import * as RadixToast2 from "@radix-ui/react-toast";
87
+ import { X } from "@nexub/icons";
88
+
89
+ // src/components/Toast/useToast.ts
90
+ import { useState, useEffect } from "react";
91
+ var g = typeof window !== "undefined" ? (() => {
92
+ const _g = globalThis;
93
+ _g.__nexub_toast_items ??= [];
94
+ _g.__nexub_toast_listeners ??= /* @__PURE__ */ new Set();
95
+ _g.__nexub_toast_counter ??= 0;
96
+ return _g;
97
+ })() : { __nexub_toast_items: [], __nexub_toast_listeners: /* @__PURE__ */ new Set(), __nexub_toast_counter: 0 };
98
+ function notify() {
99
+ g.__nexub_toast_listeners.forEach((l) => l([...g.__nexub_toast_items]));
100
+ }
101
+ function add(item) {
102
+ const id = String(++g.__nexub_toast_counter);
103
+ g.__nexub_toast_items = [...g.__nexub_toast_items, { ...item, id }];
104
+ notify();
105
+ return id;
106
+ }
107
+ function useToastStore() {
108
+ const [state, setState] = useState([...g.__nexub_toast_items]);
109
+ useEffect(() => {
110
+ g.__nexub_toast_listeners.add(setState);
111
+ return () => {
112
+ g.__nexub_toast_listeners.delete(setState);
113
+ };
114
+ }, []);
115
+ return state;
116
+ }
117
+ var closeFired = /* @__PURE__ */ new Set();
118
+ function fireToastClose(item) {
119
+ if (closeFired.has(item.id)) return;
120
+ closeFired.add(item.id);
121
+ item.onClose?.();
122
+ }
123
+ function dismiss(id) {
124
+ const removed = id ? g.__nexub_toast_items.filter((i) => i.id === id) : g.__nexub_toast_items;
125
+ g.__nexub_toast_items = id ? g.__nexub_toast_items.filter((i) => i.id !== id) : [];
126
+ notify();
127
+ for (const item of removed) {
128
+ fireToastClose(item);
129
+ closeFired.delete(item.id);
130
+ }
131
+ }
132
+ function undoable(title, { onUndo, onCommit, undoLabel, description, duration }) {
133
+ let undone = false;
134
+ return add({
135
+ title,
136
+ tone: "neutral",
137
+ description,
138
+ duration,
139
+ undo: { label: undoLabel, onUndo: () => {
140
+ undone = true;
141
+ onUndo();
142
+ } },
143
+ onClose: () => {
144
+ if (!undone) onCommit?.();
145
+ }
146
+ });
147
+ }
148
+ var toast = {
149
+ success: (title, opts) => add({ title, tone: "success", ...opts }),
150
+ error: (title, opts) => add({ title, tone: "error", ...opts }),
151
+ info: (title, opts) => add({ title, tone: "info", ...opts }),
152
+ warning: (title, opts) => add({ title, tone: "warning", ...opts }),
153
+ custom: (title, opts) => add({ title, tone: "neutral", ...opts }),
154
+ /** A toast with an Undo action: Undo calls `onUndo`; any other close calls `onCommit`, once. */
155
+ undoable,
156
+ dismiss
157
+ };
158
+
159
+ // src/components/Toast/Toaster.tsx
160
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
161
+ var toneMap = {
162
+ success: "border-s-4 border-[var(--color-success)]",
163
+ error: "border-s-4 border-[var(--color-error)]",
164
+ warning: "border-s-4 border-[var(--color-warning)]",
165
+ info: "border-s-4 border-[var(--color-info)]",
166
+ neutral: ""
167
+ };
168
+ var GAP = 8;
169
+ function Toaster({ expand = false, visibleToasts = 3 }) {
170
+ const toasts = useToastStore();
171
+ const messages = useNexubMessages();
172
+ const [closed, setClosed] = React2.useState(() => /* @__PURE__ */ new Set());
173
+ const [hovered, setHovered] = React2.useState(false);
174
+ const [focused, setFocused] = React2.useState(false);
175
+ const order = toasts.filter((t) => !closed.has(t.id)).map((t) => t.id).reverse();
176
+ const expanded = expand || order.length > 0 && (hovered || focused);
177
+ const viewportRef = React2.useRef(null);
178
+ const heights = React2.useRef(/* @__PURE__ */ new Map());
179
+ const state = React2.useRef({ order, expanded, visibleToasts });
180
+ state.current = { order, expanded, visibleToasts };
181
+ const layout = React2.useCallback(() => {
182
+ const ol = viewportRef.current;
183
+ if (!ol) return;
184
+ const { order: order2, expanded: expanded2, visibleToasts: visibleToasts2 } = state.current;
185
+ let offset = 0;
186
+ let front = 0;
187
+ let stack = 0;
188
+ order2.forEach((id, i) => {
189
+ const el = ol.querySelector(`[data-toast-id="${id}"]`);
190
+ if (!el) return;
191
+ if (i === 0 || expanded2 || !heights.current.has(id)) heights.current.set(id, el.offsetHeight);
192
+ const h = heights.current.get(id);
193
+ el.style.setProperty("--nx-toast-index", String(i));
194
+ el.style.setProperty("--nx-toast-offset", `${offset}px`);
195
+ if (i === 0) front = h;
196
+ if (i < visibleToasts2) stack = offset + h;
197
+ offset += h + GAP;
198
+ });
199
+ ol.style.setProperty("--nx-front-height", `${front}px`);
200
+ ol.style.setProperty("--nx-stack-height", `${expanded2 ? stack : front}px`);
201
+ }, []);
202
+ useIsomorphicLayoutEffect(layout);
203
+ useIsomorphicLayoutEffect(() => {
204
+ const ol = viewportRef.current;
205
+ if (!ol) return;
206
+ const ro = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(layout);
207
+ const observe = () => {
208
+ for (const li of Array.from(ol.children)) ro?.observe(li);
209
+ layout();
210
+ };
211
+ const mo = new MutationObserver(observe);
212
+ mo.observe(ol, { childList: true });
213
+ observe();
214
+ const region = ol.parentElement ?? ol;
215
+ const enter = () => setHovered(true);
216
+ const leave = () => setHovered(false);
217
+ const focusIn = () => setFocused(true);
218
+ const focusOut = (e) => {
219
+ if (!region.contains(e.relatedTarget)) setFocused(false);
220
+ };
221
+ region.addEventListener("pointermove", enter);
222
+ region.addEventListener("pointerleave", leave);
223
+ region.addEventListener("focusin", focusIn);
224
+ region.addEventListener("focusout", focusOut);
225
+ return () => {
226
+ mo.disconnect();
227
+ ro?.disconnect();
228
+ region.removeEventListener("pointermove", enter);
229
+ region.removeEventListener("pointerleave", leave);
230
+ region.removeEventListener("focusin", focusIn);
231
+ region.removeEventListener("focusout", focusOut);
232
+ };
233
+ }, [layout]);
234
+ React2.useEffect(() => {
235
+ if (order.length === 0) {
236
+ setHovered(false);
237
+ setFocused(false);
238
+ }
239
+ }, [order.length]);
240
+ return /* @__PURE__ */ jsxs(RadixToast2.Provider, { swipeDirection: "right", children: [
241
+ toasts.map((t) => {
242
+ const i = order.indexOf(t.id);
243
+ const action = t.action ?? (t.undo && { label: t.undo.label ?? messages.undo, onClick: t.undo.onUndo });
244
+ return /* @__PURE__ */ jsxs(
245
+ RadixToast2.Root,
246
+ {
247
+ "data-toast-id": t.id,
248
+ "data-front": i === -1 ? void 0 : i === 0,
249
+ "data-hidden": i === -1 ? void 0 : i >= visibleToasts,
250
+ onOpenChange: (open) => {
251
+ if (open) return;
252
+ fireToastClose(t);
253
+ setClosed((s) => new Set(s).add(t.id));
254
+ setTimeout(() => {
255
+ toast.dismiss(t.id);
256
+ setClosed((s) => {
257
+ const next = new Set(s);
258
+ next.delete(t.id);
259
+ return next;
260
+ });
261
+ }, 1e3);
262
+ },
263
+ className: cn(
264
+ "group pointer-events-auto absolute inset-x-4 top-4 flex items-center justify-between gap-3 overflow-hidden rounded-shape-container bg-[var(--color-inverse-surface)] py-3 ps-4 pe-2 text-[var(--color-inverse-on-surface)] shadow-elevation-2",
265
+ // Stack: older toasts sit behind, scaled from their bottom edge so it peeks out.
266
+ // Transition-only timing: duration-*/ease-* utilities would also retime nx-motion's enter/exit keyframes.
267
+ "origin-bottom transition-[transform,opacity] [transition-duration:var(--motion-spring-spatial-default-duration)] [transition-timing-function:var(--motion-spring-spatial-default-easing)]",
268
+ "translate-y-[calc(var(--nx-toast-index,0)*var(--nx-toast-step))] scale-[calc(1_-_var(--nx-toast-index,0)*var(--nx-toast-shrink))]",
269
+ "group-data-[expanded=true]/toaster:translate-y-[var(--nx-toast-offset,0px)] group-data-[expanded=true]/toaster:scale-100",
270
+ // Collapsing settles faster than expanding.
271
+ "group-data-[expanded=false]/toaster:[transition-duration:var(--motion-spring-effects-fast-duration)] group-data-[expanded=false]/toaster:[transition-timing-function:var(--motion-spring-effects-fast-easing)]",
272
+ "group-data-[expanded=false]/toaster:data-[front=false]:h-[var(--nx-front-height)]",
273
+ // Collapsed, older toasts show only their edge: hide their content until expanded.
274
+ "[&>*]:transition-opacity [&>*]:duration-effects-fast group-data-[expanded=false]/toaster:[&[data-front=false]>*]:opacity-0",
275
+ // Beyond visibleToasts: visually hidden, still in the DOM and its live region.
276
+ "data-[hidden=true]:pointer-events-none data-[hidden=true]:opacity-0",
277
+ // Reduced motion: no travel or scale (step/shrink are 0); collapsed shows only the front.
278
+ "motion-reduce:[transition-property:opacity] motion-reduce:group-data-[expanded=false]/toaster:data-[front=false]:pointer-events-none motion-reduce:group-data-[expanded=false]/toaster:data-[front=false]:opacity-0",
279
+ "data-[state=closed]:duration-effects-fast",
280
+ "data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none",
281
+ "nx-motion [--nx-x:calc(100%+1rem)] rtl:[--nx-x:calc(-100%-1rem)]",
282
+ toneMap[t.tone ?? "neutral"]
283
+ ),
284
+ duration: t.duration ?? 5e3,
285
+ children: [
286
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-1", children: [
287
+ /* @__PURE__ */ jsx2(RadixToast2.Title, { className: "text-title-sm", children: t.title }),
288
+ t.description && /* @__PURE__ */ jsx2(RadixToast2.Description, { className: "text-body-sm text-[color-mix(in_srgb,var(--color-inverse-on-surface)_80%,transparent)]", children: t.description })
289
+ ] }),
290
+ action && /* @__PURE__ */ jsx2(
291
+ RadixToast2.Action,
292
+ {
293
+ altText: action.label,
294
+ onClick: action.onClick,
295
+ className: "nx-state-layer relative inline-flex min-h-[44px] min-w-[44px] shrink-0 items-center justify-center rounded-shape-control px-3 text-label-lg text-[var(--color-inverse-primary)]",
296
+ children: action.label
297
+ }
298
+ ),
299
+ /* @__PURE__ */ jsxs(RadixToast2.Close, { className: "nx-state-layer relative grid h-8 w-8 place-items-center rounded-full transition-opacity [@media(hover:hover)]:opacity-0 group-hover:opacity-100 focus-visible:opacity-100", children: [
300
+ /* @__PURE__ */ jsx2(X, { size: "sm", "aria-hidden": "true" }),
301
+ /* @__PURE__ */ jsx2("span", { className: "sr-only", children: messages.close })
302
+ ] })
303
+ ]
304
+ },
305
+ t.id
306
+ );
307
+ }),
308
+ /* @__PURE__ */ jsx2(
309
+ RadixToast2.Viewport,
310
+ {
311
+ ref: viewportRef,
312
+ label: messages.notifications,
313
+ "data-expanded": expanded,
314
+ className: cn(
315
+ "group/toaster fixed top-0 end-0 z-[var(--z-toast,2000)] max-h-screen w-full p-4 sm:max-w-sm",
316
+ // Collapsed: the front toast's height (older edges peek below); expanded: the whole list.
317
+ "h-[calc(var(--nx-stack-height,0px)+2rem)]",
318
+ "[--nx-toast-step:10px] [--nx-toast-shrink:0.05] motion-reduce:[--nx-toast-step:0px] motion-reduce:[--nx-toast-shrink:0]"
319
+ )
320
+ }
321
+ )
322
+ ] });
323
+ }
324
+ Toaster.displayName = "Toaster";
325
+
326
+ export {
327
+ Toast,
328
+ useToastStore,
329
+ toast,
330
+ Toaster
331
+ };
@@ -7,7 +7,7 @@ import {
7
7
  import * as React from "react";
8
8
  import { jsx } from "react/jsx-runtime";
9
9
  var Root = React.forwardRef(
10
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) })
10
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ jsx("table", { ref, className: cn("w-full caption-bottom text-sm tabular-nums", className), ...props }) })
11
11
  );
12
12
  Root.displayName = "Table.Root";
13
13
  var Header = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
@@ -19,7 +19,7 @@ var TableFooter = React.forwardRef(({ className, ...props }, ref) => /* @__PURE_
19
19
  {
20
20
  ref,
21
21
  className: cn(
22
- "border-t bg-[var(--color-bg-subtle)] font-medium [&>tr]:last:border-b-0",
22
+ "border-t bg-[var(--color-surface-container-low)] font-medium [&>tr]:last:border-b-0",
23
23
  className
24
24
  ),
25
25
  ...props
@@ -32,7 +32,7 @@ var Row = React.forwardRef(
32
32
  {
33
33
  ref,
34
34
  className: cn(
35
- "border-b border-[var(--color-border-default)] transition-colors hover:bg-[var(--color-bg-subtle)]/50 data-[state=selected]:bg-[var(--color-bg-subtle)]",
35
+ "border-b border-[var(--color-outline-variant)] transition-colors hover:bg-[color-mix(in_srgb,var(--color-surface-container-low)_50%,transparent)] data-[state=selected]:bg-[var(--color-surface-container-low)]",
36
36
  className
37
37
  ),
38
38
  ...props
@@ -45,7 +45,7 @@ var Head = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ js
45
45
  {
46
46
  ref,
47
47
  className: cn(
48
- "h-10 px-4 text-left align-middle font-medium text-[var(--color-text-muted)] [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
48
+ "h-10 px-4 text-start align-middle font-medium text-[var(--color-on-surface-muted)] [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]",
49
49
  className
50
50
  ),
51
51
  ...props
@@ -57,7 +57,7 @@ var Cell = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ js
57
57
  {
58
58
  ref,
59
59
  className: cn(
60
- "p-4 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]",
60
+ "p-4 align-middle [&:has([role=checkbox])]:pe-0 [&>[role=checkbox]]:translate-y-[2px]",
61
61
  className
62
62
  ),
63
63
  ...props
@@ -68,7 +68,7 @@ var Caption = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
68
68
  "caption",
69
69
  {
70
70
  ref,
71
- className: cn("mt-4 text-sm text-[var(--color-text-muted)]", className),
71
+ className: cn("mt-4 text-sm text-[var(--color-on-surface-muted)]", className),
72
72
  ...props
73
73
  }
74
74
  ));
@@ -1,4 +1,7 @@
1
1
  'use client';
2
+ import {
3
+ useIsomorphicLayoutEffect
4
+ } from "./chunk-NHUQLIHL.js";
2
5
  import {
3
6
  cn
4
7
  } from "./chunk-Q7G5WGYV.js";
@@ -8,7 +11,7 @@ import * as React from "react";
8
11
  import { cva } from "class-variance-authority";
9
12
  import { jsx } from "react/jsx-runtime";
10
13
  var progressTrackVariants = cva(
11
- "relative w-full overflow-hidden rounded-full bg-[var(--color-bg-muted)]",
14
+ "relative w-full overflow-hidden rounded-full bg-[var(--color-surface-container-high)]",
12
15
  {
13
16
  variants: {
14
17
  size: {
@@ -27,15 +30,15 @@ var progressFillVariants = cva(
27
30
  {
28
31
  variants: {
29
32
  tone: {
30
- neutral: "bg-[var(--color-neutral-500)]",
31
- info: "bg-[var(--color-semantic-info-default)]",
32
- success: "bg-[var(--color-semantic-success-default)]",
33
- warning: "bg-[var(--color-semantic-warning-default)]",
34
- danger: "bg-[var(--color-semantic-error-default)]",
35
- leap: "bg-[var(--color-leap-500)]",
36
- bookub: "bg-[var(--color-bookub-500)]",
37
- payub: "bg-[var(--color-payub-500)]",
38
- founderub: "bg-[var(--color-founderub-500)]"
33
+ neutral: "bg-[var(--color-outline)]",
34
+ info: "bg-[var(--color-info)]",
35
+ success: "bg-[var(--color-success)]",
36
+ warning: "bg-[var(--color-warning)]",
37
+ danger: "bg-[var(--color-error)]",
38
+ leap: "bg-[var(--color-leap)]",
39
+ bookub: "bg-[var(--color-bookub)]",
40
+ payub: "bg-[var(--color-payub)]",
41
+ founderub: "bg-[var(--color-founderub)]"
39
42
  },
40
43
  animated: {
41
44
  true: "bg-[length:200%_100%] animate-[progress-stripes_1s_linear_infinite]"
@@ -58,6 +61,10 @@ var Progress = React.forwardRef(
58
61
  }, ref) => {
59
62
  const clampedValue = Math.min(Math.max(value, 0), max);
60
63
  const percentage = clampedValue / max * 100;
64
+ const fillRef = React.useRef(null);
65
+ useIsomorphicLayoutEffect(() => {
66
+ fillRef.current?.style.setProperty("width", `${percentage}%`);
67
+ }, [percentage]);
61
68
  const isIndeterminate = value === void 0 || value === null;
62
69
  return /* @__PURE__ */ jsx(
63
70
  "div",
@@ -76,7 +83,8 @@ var Progress = React.forwardRef(
76
83
  progressFillVariants({ tone }),
77
84
  animated && "animate-pulse"
78
85
  ),
79
- style: { width: `${percentage}%` }
86
+ ref: fillRef,
87
+ "data-part": "fill"
80
88
  }
81
89
  )
82
90
  }