@nexub/react 1.5.1 → 1.7.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 (207) hide show
  1. package/dist/chunk-24ZFAXB2.js +101 -0
  2. package/dist/{chunk-XR4NBY54.js → chunk-2DYKENBM.js} +10 -10
  3. package/dist/{chunk-SVQCINRE.js → chunk-2I7FIU6R.js} +5 -2
  4. package/dist/{chunk-S46W2QER.js → chunk-37L5ERUJ.js} +17 -11
  5. package/dist/{chunk-CWS37T3K.js → chunk-3E7X3YK3.js} +4 -2
  6. package/dist/{chunk-EZ23IA3H.js → chunk-3LTB6TGN.js} +4 -4
  7. package/dist/chunk-3QD76BKT.js +80 -0
  8. package/dist/{chunk-PQ6GU7SG.js → chunk-4HQFOIZW.js} +20 -14
  9. package/dist/{chunk-RLE5RN3T.js → chunk-4NFUBFYK.js} +15 -11
  10. package/dist/{chunk-B54WADL4.js → chunk-4P2JJ2FH.js} +12 -12
  11. package/dist/{chunk-I4BHRVRL.js → chunk-4UBVU53C.js} +9 -5
  12. package/dist/chunk-52ZVJPF7.js +1 -0
  13. package/dist/chunk-5QEARXY3.js +55 -0
  14. package/dist/chunk-643EYCLL.js +54 -0
  15. package/dist/{chunk-CNNJFWFA.js → chunk-6BGUZQAX.js} +4 -4
  16. package/dist/{chunk-LDYD7WL3.js → chunk-6ECOCGZG.js} +4 -3
  17. package/dist/{chunk-3AXIMXDU.js → chunk-6JBQAJJD.js} +6 -12
  18. package/dist/{chunk-YRDCY6BI.js → chunk-6UKNUI46.js} +0 -19
  19. package/dist/chunk-77LYWSJW.js +85 -0
  20. package/dist/{chunk-NCRFKPA4.js → chunk-7MSIOYJZ.js} +6 -8
  21. package/dist/{chunk-GIGOTRXX.js → chunk-7VJABRKB.js} +3 -10
  22. package/dist/{chunk-6QLLH6ID.js → chunk-7XWJCFWI.js} +8 -17
  23. package/dist/chunk-A3O23F2B.js +1 -0
  24. package/dist/chunk-AGYGWU6C.js +88 -0
  25. package/dist/chunk-AT2DSFP3.js +47 -0
  26. package/dist/{chunk-IIPYF6ZQ.js → chunk-B254JXS7.js} +16 -13
  27. package/dist/{chunk-GRB6T2TT.js → chunk-BSL62LBX.js} +19 -13
  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-OJ2TLWYD.js → chunk-CKFRMCZ7.js} +5 -3
  32. package/dist/{chunk-LZB3KTSH.js → chunk-CQWYZPPJ.js} +1 -1
  33. package/dist/{chunk-6RBNM5RO.js → chunk-CUOASXI7.js} +10 -10
  34. package/dist/{chunk-HG6HTUWU.js → chunk-CV5ZKED7.js} +2 -2
  35. package/dist/{chunk-HJERFB7J.js → chunk-DDRYT3SY.js} +2 -2
  36. package/dist/chunk-DGCAM2UJ.js +60 -0
  37. package/dist/{chunk-FD7YU53N.js → chunk-DT3QGFXB.js} +4 -4
  38. package/dist/chunk-F73DTG2V.js +123 -0
  39. package/dist/{chunk-Z3IG5WRA.js → chunk-FJUVYRNT.js} +3 -3
  40. package/dist/{chunk-KQPLFVFR.js → chunk-FLZD7HQY.js} +0 -2
  41. package/dist/chunk-GG54WBLA.js +134 -0
  42. package/dist/{chunk-64JDZWCV.js → chunk-GRKCUQG4.js} +6 -5
  43. package/dist/{chunk-YPHNHQYQ.js → chunk-GWDEKW7P.js} +6 -2
  44. package/dist/{chunk-4I5ULCYG.js → chunk-HFTS5AN7.js} +3 -3
  45. package/dist/{chunk-GUB7YKG2.js → chunk-I4U36P54.js} +6 -3
  46. package/dist/{chunk-BTRTORKU.js → chunk-I6CAF7C5.js} +6 -7
  47. package/dist/{chunk-TJCHA3OI.js → chunk-J65MK3N4.js} +7 -4
  48. package/dist/{chunk-IK23Q2OF.js → chunk-JHVYI5GK.js} +3 -3
  49. package/dist/{chunk-J6TU45KP.js → chunk-JSBNYRO4.js} +26 -12
  50. package/dist/chunk-K5FKEAAK.js +94 -0
  51. package/dist/{chunk-5URGARPH.js → chunk-KE4YVG5Q.js} +6 -10
  52. package/dist/{chunk-QCNLE27O.js → chunk-KRCLK5O4.js} +11 -7
  53. package/dist/{chunk-A4IMFAZX.js → chunk-LESI7J7B.js} +3 -3
  54. package/dist/chunk-MLT7SA3T.js +171 -0
  55. package/dist/chunk-MNEXMMLM.js +23 -0
  56. package/dist/{chunk-PVTACENM.js → chunk-MTK3GHDQ.js} +2 -2
  57. package/dist/chunk-MYP5ZTC3.js +169 -0
  58. package/dist/chunk-NA5UMOE5.js +55 -0
  59. package/dist/chunk-NAJKIBU2.js +163 -0
  60. package/dist/{chunk-WESZPFBZ.js → chunk-NERAWEIQ.js} +7 -4
  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-5O34ZNC3.js → chunk-NYWD5SI4.js} +19 -13
  65. package/dist/chunk-NZR4UGUZ.js +143 -0
  66. package/dist/{chunk-6J3QTWKC.js → chunk-NZT4TTNV.js} +18 -9
  67. package/dist/{chunk-JSD3H7WV.js → chunk-OYCK6BRG.js} +6 -6
  68. package/dist/{chunk-2555JXCP.js → chunk-PBPUSRTJ.js} +19 -11
  69. package/dist/{chunk-QD7H3WV3.js → chunk-PGDXFBKT.js} +8 -8
  70. package/dist/{chunk-NIX4SEKM.js → chunk-PREMZMLU.js} +7 -4
  71. package/dist/{chunk-4SSUM4CL.js → chunk-QUNH4BFR.js} +9 -6
  72. package/dist/{chunk-FHFVBOF3.js → chunk-QUYOV2ZJ.js} +6 -4
  73. package/dist/{chunk-KM6Z3VTI.js → chunk-QVTVDL6Y.js} +1 -1
  74. package/dist/{chunk-XI63BK3S.js → chunk-RATKKN3F.js} +3 -3
  75. package/dist/chunk-RM7MTOT5.js +339 -0
  76. package/dist/{chunk-DJZZ3FIP.js → chunk-RUR57JZQ.js} +5 -14
  77. package/dist/{chunk-ZV3AF5CL.js → chunk-S2CTBFLN.js} +13 -2
  78. package/dist/{chunk-72I7EVOL.js → chunk-SYZADSLI.js} +10 -6
  79. package/dist/{chunk-W2NEXOTG.js → chunk-T7RLPFGX.js} +2 -2
  80. package/dist/chunk-TAVVXXGO.js +131 -0
  81. package/dist/{chunk-BFRX6X4O.js → chunk-TZ6KJIR4.js} +23 -17
  82. package/dist/{chunk-V3TETH4J.js → chunk-U2ZYPPRG.js} +17 -16
  83. package/dist/{chunk-AHT35UWY.js → chunk-UTLKZPKJ.js} +10 -6
  84. package/dist/{chunk-OJRSPDNJ.js → chunk-VD4RFTNV.js} +8 -14
  85. package/dist/chunk-VLQGQFW7.js +110 -0
  86. package/dist/{chunk-RTDUTWJ4.js → chunk-VMT7Y3AT.js} +5 -8
  87. package/dist/{chunk-AXOKFS4K.js → chunk-W3KO3JNZ.js} +20 -4
  88. package/dist/{chunk-LGQ737BP.js → chunk-WHTLXQB6.js} +1 -1
  89. package/dist/chunk-WLRRMT6W.js +1 -0
  90. package/dist/{chunk-2FCSWBSM.js → chunk-WMWX6DPB.js} +3 -3
  91. package/dist/{chunk-UMC64NCT.js → chunk-WVBGQCYC.js} +6 -3
  92. package/dist/{chunk-TEOLG3N2.js → chunk-X4BQHXLB.js} +10 -6
  93. package/dist/{chunk-SY6V3HAK.js → chunk-XDU27NRX.js} +3 -3
  94. package/dist/{chunk-KA2J5OBA.js → chunk-XQDD76EF.js} +4 -7
  95. package/dist/chunk-XTATJMY6.js +64 -0
  96. package/dist/chunk-XYXMPHND.js +1 -0
  97. package/dist/{chunk-7ZWBHHRK.js → chunk-YNU6VRD5.js} +23 -32
  98. package/dist/{chunk-6SJPVQQW.js → chunk-Z3HF6XJ3.js} +1 -1
  99. package/dist/{chunk-I4URNMI7.js → chunk-ZC4MZAEX.js} +9 -7
  100. package/dist/{chunk-PWBPHGM3.js → chunk-ZCEUVK2R.js} +2 -2
  101. package/dist/{chunk-NQVRF4RB.js → chunk-ZMJ54TG6.js} +16 -13
  102. package/dist/chunk-ZT3NWE5U.js +1 -0
  103. package/dist/{chunk-RHOYF7MO.js → chunk-ZTLALVWA.js} +6 -15
  104. package/dist/components/Accordion/index.js +1 -1
  105. package/dist/components/Alert/index.js +2 -1
  106. package/dist/components/AlertDialog/index.js +3 -3
  107. package/dist/components/Amount/index.js +3 -1
  108. package/dist/components/AspectRatio/index.js +1 -1
  109. package/dist/components/Autocomplete/index.js +3 -2
  110. package/dist/components/Avatar/index.js +1 -1
  111. package/dist/components/AvatarGroup/index.js +3 -2
  112. package/dist/components/Badge/index.js +1 -1
  113. package/dist/components/Banner/index.js +2 -1
  114. package/dist/components/Breadcrumb/index.js +2 -1
  115. package/dist/components/Button/index.js +1 -1
  116. package/dist/components/ButtonGroup/index.js +1 -1
  117. package/dist/components/Callout/index.js +1 -1
  118. package/dist/components/Card/index.js +3 -1
  119. package/dist/components/CheckList/index.js +1 -1
  120. package/dist/components/Checkbox/index.js +1 -1
  121. package/dist/components/CheckboxCard/index.js +9 -0
  122. package/dist/components/Chip/index.js +2 -1
  123. package/dist/components/Citation/index.js +17 -0
  124. package/dist/components/Code/index.js +1 -1
  125. package/dist/components/Combobox/index.js +1 -1
  126. package/dist/components/CommandPalette/index.js +3 -2
  127. package/dist/components/ContextMenu/index.js +2 -2
  128. package/dist/components/CountryBadge/index.js +1 -1
  129. package/dist/components/DataTable/index.js +2 -1
  130. package/dist/components/DatePicker/index.js +5 -1
  131. package/dist/components/DateRangePicker/index.js +5 -1
  132. package/dist/components/Dialog/index.js +2 -2
  133. package/dist/components/Drawer/index.js +2 -2
  134. package/dist/components/DropdownMenu/index.js +2 -2
  135. package/dist/components/EmptyState/index.js +1 -1
  136. package/dist/components/ErrorState/index.js +2 -1
  137. package/dist/components/EyebrowChip/index.js +4 -1
  138. package/dist/components/FileUpload/index.js +2 -1
  139. package/dist/components/FilterChip/index.js +3 -1
  140. package/dist/components/Flex/index.js +2 -1
  141. package/dist/components/FormError/index.js +1 -1
  142. package/dist/components/FormField/index.js +7 -4
  143. package/dist/components/GradientDivider/index.js +1 -1
  144. package/dist/components/Grid/index.js +2 -1
  145. package/dist/components/Heading/index.js +4 -1
  146. package/dist/components/HelperText/index.js +4 -1
  147. package/dist/components/HoverCard/index.js +3 -2
  148. package/dist/components/IconButton/index.js +2 -1
  149. package/dist/components/Input/index.js +1 -1
  150. package/dist/components/Kbd/index.js +1 -1
  151. package/dist/components/KeyboardShortcut/index.js +2 -2
  152. package/dist/components/Label/index.js +4 -1
  153. package/dist/components/Link/index.js +1 -1
  154. package/dist/components/Logo/index.js +1 -1
  155. package/dist/components/MediaCard/index.js +9 -0
  156. package/dist/components/Menubar/index.js +2 -2
  157. package/dist/components/MessageBubble/index.js +18 -0
  158. package/dist/components/MoneyInput/index.js +3 -2
  159. package/dist/components/NavigationMenu/index.js +2 -2
  160. package/dist/components/NavigationRail/index.js +2 -1
  161. package/dist/components/NexubProvider/index.js +14 -0
  162. package/dist/components/NumberInput/index.js +3 -2
  163. package/dist/components/NumberTicker/index.js +10 -0
  164. package/dist/components/PageHeader/index.js +1 -1
  165. package/dist/components/Pagination/index.js +3 -1
  166. package/dist/components/PasswordInput/index.js +3 -2
  167. package/dist/components/Popover/index.js +2 -2
  168. package/dist/components/Progress/index.js +2 -1
  169. package/dist/components/PromptInput/index.js +15 -0
  170. package/dist/components/RadioCard/index.js +11 -0
  171. package/dist/components/RadioGroup/index.js +1 -1
  172. package/dist/components/Rating/index.js +2 -1
  173. package/dist/components/ScrollArea/index.js +1 -1
  174. package/dist/components/SearchInput/index.js +3 -2
  175. package/dist/components/Section/index.js +1 -1
  176. package/dist/components/SegmentedControl/index.js +3 -2
  177. package/dist/components/Select/index.js +2 -2
  178. package/dist/components/Separator/index.js +1 -1
  179. package/dist/components/Sidebar/index.js +2 -1
  180. package/dist/components/Skeleton/index.js +1 -1
  181. package/dist/components/Spinner/index.js +2 -1
  182. package/dist/components/SplitButton/index.js +5 -5
  183. package/dist/components/Stack/index.js +2 -1
  184. package/dist/components/StatusPill/index.js +1 -1
  185. package/dist/components/StreamingText/index.js +8 -0
  186. package/dist/components/Switch/index.js +1 -1
  187. package/dist/components/Table/index.js +1 -1
  188. package/dist/components/Tabs/index.js +3 -2
  189. package/dist/components/Tag/index.js +1 -1
  190. package/dist/components/Text/index.js +1 -1
  191. package/dist/components/Textarea/index.js +1 -1
  192. package/dist/components/ThinkingIndicator/index.js +9 -0
  193. package/dist/components/Toast/index.js +3 -1
  194. package/dist/components/Tooltip/index.js +2 -1
  195. package/dist/components/TopNav/index.js +2 -1
  196. package/dist/index.d.ts +440 -24
  197. package/dist/index.js +225 -146
  198. package/package.json +52 -50
  199. package/dist/chunk-63DPMUMR.js +0 -67
  200. package/dist/chunk-CHGPGRML.js +0 -115
  201. package/dist/chunk-H2W7IYVY.js +0 -155
  202. package/dist/chunk-J2T4GFFS.js +0 -85
  203. package/dist/chunk-LH3BSAIS.js +0 -119
  204. package/dist/chunk-LMPGHWUA.js +0 -114
  205. package/dist/chunk-NMH5WSZG.js +0 -72
  206. package/dist/chunk-P44EROBX.js +0 -55
  207. package/dist/chunk-TYTW4F3B.js +0 -178
package/dist/index.d.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import { ClassValue } from 'clsx';
2
2
  import * as React from 'react';
3
3
  import { useLayoutEffect, Ref } from 'react';
4
+ import { Locale } from 'date-fns';
4
5
  import * as class_variance_authority_types from 'class-variance-authority/types';
5
6
  import { VariantProps } from 'class-variance-authority';
6
- import * as react_jsx_runtime from 'react/jsx-runtime';
7
+ import * as RadixRadioGroup from '@radix-ui/react-radio-group';
8
+ import * as RadixCheckbox from '@radix-ui/react-checkbox';
7
9
  export { Root as VisuallyHidden, VisuallyHiddenProps } from '@radix-ui/react-visually-hidden';
8
10
  import * as DialogPrimitive from '@radix-ui/react-dialog';
9
11
  import * as RadixAlertDialog from '@radix-ui/react-alert-dialog';
@@ -15,8 +17,6 @@ import * as RadixContextMenu from '@radix-ui/react-context-menu';
15
17
  import * as RadixNav from '@radix-ui/react-navigation-menu';
16
18
  import * as RadixSelect from '@radix-ui/react-select';
17
19
  import * as RadixSwitch from '@radix-ui/react-switch';
18
- import * as RadixCheckbox from '@radix-ui/react-checkbox';
19
- import * as RadixRadioGroup from '@radix-ui/react-radio-group';
20
20
  import * as RadixSlider from '@radix-ui/react-slider';
21
21
  import * as RadixToggle from '@radix-ui/react-toggle';
22
22
  import * as RadixToggleGroup from '@radix-ui/react-toggle-group';
@@ -32,6 +32,12 @@ export { DateRange } from 'react-day-picker';
32
32
 
33
33
  declare function cn(...inputs: ClassValue[]): string;
34
34
 
35
+ /**
36
+ * Run a DOM update as a view transition (styles: @nexub/themes/view-transitions).
37
+ * Where the API is missing, or on the server, the update just runs.
38
+ */
39
+ declare function startViewTransition(update: () => void | Promise<void>): void;
40
+
35
41
  interface UseControllableStateOptions<T> {
36
42
  value?: T;
37
43
  defaultValue?: T;
@@ -52,15 +58,285 @@ declare function useMediaQuery(query: string): boolean;
52
58
 
53
59
  declare function useMergedRefs<T>(...refs: Array<Ref<T> | undefined>): (node: T) => void;
54
60
 
61
+ /**
62
+ * Pointer position for the `nx-sheen` effect (themes/base.css). Returns a
63
+ * pointermove handler that writes --nx-mx / --nx-my (px, relative to the
64
+ * element) through the CSSOM — no style attribute, so strict-CSP safe — at
65
+ * most once per frame. Touch is ignored: there is no hover to light.
66
+ */
67
+ declare function usePointerSheen<T extends HTMLElement>(enabled: boolean, onPointerMove?: React.PointerEventHandler<T>): React.PointerEventHandler<T> | undefined;
68
+
69
+ interface PromptInputMessages {
70
+ promptLabel: string;
71
+ sendMessage: string;
72
+ stopGenerating: string;
73
+ promptHint: string;
74
+ }
75
+ type PromptInputStatus = 'idle' | 'submitting' | 'streaming';
76
+ interface PromptInputProps extends Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, 'value' | 'defaultValue' | 'onChange' | 'onSubmit' | 'rows'> {
77
+ value?: string;
78
+ defaultValue?: string;
79
+ onValueChange?: (value: string) => void;
80
+ /** Called with the current text on Enter or Send. Uncontrolled input clears itself after. */
81
+ onSubmit?: (value: string) => void;
82
+ /** Called by Stop (or Escape) while `status="streaming"`. */
83
+ onStop?: () => void;
84
+ /** `streaming` turns Send into Stop; `submitting` holds Send. @default 'idle' */
85
+ status?: PromptInputStatus;
86
+ /** Rows before the field scrolls. @default 8 */
87
+ maxRows?: number;
88
+ /** Rendered above the text, e.g. removable Chips. */
89
+ attachments?: React.ReactNode;
90
+ /** Rendered bottom-start, e.g. an attach IconButton or a model picker. */
91
+ actions?: React.ReactNode;
92
+ surface?: 'solid' | 'glass';
93
+ /** Accessible name of the text field. @default messages.promptLabel ('Message') */
94
+ label?: string;
95
+ /** Local overrides for this component's strings. */
96
+ messages?: Partial<PromptInputMessages>;
97
+ /** Class for the outer container (`className` goes to it too); this one targets the textarea. */
98
+ textareaClassName?: string;
99
+ }
100
+ declare const PromptInput: React.ForwardRefExoticComponent<PromptInputProps & React.RefAttributes<HTMLTextAreaElement>>;
101
+
102
+ interface ThinkingIndicatorMessages {
103
+ thinking: string;
104
+ }
105
+ interface ThinkingIndicatorProps extends React.HTMLAttributes<HTMLDivElement> {
106
+ /** Visible text. Pass `null` to hide it (it is still announced). @default messages.thinking */
107
+ label?: React.ReactNode;
108
+ /** @default 'md' */
109
+ size?: 'sm' | 'md';
110
+ /** Local overrides for this component's strings. */
111
+ messages?: Partial<ThinkingIndicatorMessages>;
112
+ }
113
+ /**
114
+ * Shows the assistant is working before tokens arrive: a primary-tinted shape
115
+ * morphing between a circle and a soft four-lobed squircle (.nx-morph), and a
116
+ * label with a decorative shimmer (.nx-shimmer). Reduced motion: both static.
117
+ */
118
+ declare const ThinkingIndicator: React.ForwardRefExoticComponent<ThinkingIndicatorProps & React.RefAttributes<HTMLDivElement>>;
119
+
120
+ interface StreamingTextProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
121
+ /** The full text received so far; grows as tokens arrive. */
122
+ text: string;
123
+ /** True while more text is expected: shows the caret and sets aria-busy. */
124
+ streaming?: boolean;
125
+ as?: 'div' | 'p' | 'span';
126
+ /**
127
+ * Opt-in live announcements. Off by default: screen readers re-read the
128
+ * whole region on every token; announce the finished message instead.
129
+ */
130
+ 'aria-live'?: 'off' | 'polite';
131
+ }
132
+ /**
133
+ * Assistant text as it streams in. Text already shown stays static; each newly
134
+ * appended tail fades in (nx-reveal), and only the last few tails keep their
135
+ * own span, so the DOM stays flat however long the answer gets.
136
+ */
137
+ declare const StreamingText: React.ForwardRefExoticComponent<StreamingTextProps & React.RefAttributes<HTMLElement>>;
138
+
139
+ interface MessageStrings {
140
+ youSaid: string;
141
+ assistantSaid: string;
142
+ failedToSend: string;
143
+ retry: string;
144
+ copy: string;
145
+ copied: string;
146
+ goodResponse: string;
147
+ badResponse: string;
148
+ regenerate: string;
149
+ }
150
+ declare const defaultMessageStrings: MessageStrings;
151
+ type MessageFrom = 'user' | 'assistant' | 'system';
152
+ interface MessageBubbleProps extends React.HTMLAttributes<HTMLElement> {
153
+ /** Who sent it. (Not `role`, which is the ARIA attribute.) */
154
+ from: MessageFrom;
155
+ /** Assistant only: shown at the inline-start. */
156
+ avatar?: React.ReactNode;
157
+ /** Accessible label for the message; defaults to "You said" / "Assistant said". */
158
+ name?: string;
159
+ status?: 'sending' | 'error';
160
+ /** With status="error": renders a Retry text button. */
161
+ onRetry?: () => void;
162
+ messages?: Partial<MessageStrings>;
163
+ }
164
+ declare const MessageBubble: React.ForwardRefExoticComponent<MessageBubbleProps & React.RefAttributes<HTMLElement>>;
165
+ type Feedback = 'up' | 'down' | null;
166
+ interface MessageActionsProps extends React.HTMLAttributes<HTMLDivElement> {
167
+ /** Text placed on the clipboard by Copy. */
168
+ text?: string;
169
+ /** Set false to hide Copy. @default true */
170
+ copy?: boolean;
171
+ feedback?: Feedback;
172
+ defaultFeedback?: Feedback;
173
+ /** Shows thumbs up/down when provided. */
174
+ onFeedback?: (feedback: Feedback) => void;
175
+ /** Shows Regenerate when provided. */
176
+ onRegenerate?: () => void;
177
+ messages?: Partial<MessageStrings>;
178
+ }
179
+ /** Copy / feedback / regenerate row. Fades in on hover or focus of the parent MessageBubble on pointer devices. */
180
+ declare const MessageActions: React.ForwardRefExoticComponent<MessageActionsProps & React.RefAttributes<HTMLDivElement>>;
181
+
182
+ interface CitationSource {
183
+ title: string;
184
+ url: string;
185
+ /** Shown instead of the URL's hostname. */
186
+ domain?: string;
187
+ snippet?: string;
188
+ /** Favicon URL (http/https only; anything else falls back to a letter). */
189
+ favicon?: string;
190
+ }
191
+ interface CitationMessages {
192
+ /** SourceList heading. */
193
+ sources: string;
194
+ /** Prefix of a citation's accessible name ("Source 1: <title>"). */
195
+ source: (index: number) => string;
196
+ }
197
+ /** Returns the normalised href for http(s) URLs, otherwise undefined (javascript:, data:, relative…). */
198
+ declare function safeUrl(url: string | undefined): string | undefined;
199
+ interface CitationProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
200
+ /** 1-based number shown in the marker. */
201
+ index: number;
202
+ source: CitationSource;
203
+ messages?: Partial<CitationMessages>;
204
+ }
205
+ /**
206
+ * Inline numbered source marker for running text. Links to the source (http/https
207
+ * only — anything else renders as plain text) and previews it in a HoverCard on
208
+ * hover or focus.
209
+ */
210
+ declare const Citation: React.ForwardRefExoticComponent<CitationProps & React.RefAttributes<HTMLElement>>;
211
+ interface SourceChipProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
212
+ source: CitationSource;
213
+ }
214
+ /** Compact source row item: favicon, domain and a truncated title, linking to the source. */
215
+ declare const SourceChip: React.ForwardRefExoticComponent<SourceChipProps & React.RefAttributes<HTMLElement>>;
216
+ interface SourceListProps extends Omit<React.HTMLAttributes<HTMLElement>, 'children'> {
217
+ sources: CitationSource[];
218
+ messages?: Partial<CitationMessages>;
219
+ }
220
+ /**
221
+ * "Sources" heading plus a row of SourceChips: a horizontal scroll-snap row when
222
+ * narrow, a wrapping grid once its own container is 480px or wider.
223
+ */
224
+ declare const SourceList: React.ForwardRefExoticComponent<SourceListProps & React.RefAttributes<HTMLElement>>;
225
+
226
+ /** Every user-facing default string in @nexub/react. Explicit component props still win. */
227
+ interface NexubMessages {
228
+ close: string;
229
+ dismissAlert: string;
230
+ dismissBanner: string;
231
+ remove: string;
232
+ removeFilter: string;
233
+ removeFile: (fileName: string) => string;
234
+ uploadFiles: string;
235
+ clickToUpload: string;
236
+ orDragAndDrop: string;
237
+ clearSearch: string;
238
+ showPassword: string;
239
+ hidePassword: string;
240
+ increment: string;
241
+ decrement: string;
242
+ loading: string;
243
+ pagination: string;
244
+ previousPage: string;
245
+ nextPage: string;
246
+ goToPage: (page: number) => string;
247
+ breadcrumb: string;
248
+ breadcrumbMore: string;
249
+ moreCount: (count: number) => string;
250
+ rating: string;
251
+ ratingStars: (stars: number) => string;
252
+ mainNavigation: string;
253
+ sidebar: string;
254
+ searchPlaceholder: string;
255
+ noResults: string;
256
+ pickDate: string;
257
+ pickDateRange: string;
258
+ /** Calendar nav and day labels (DatePicker, DateRangePicker). */
259
+ previousMonth: string;
260
+ nextMonth: string;
261
+ calendarNavigation: string;
262
+ /** Wraps a day's formatted date when it is today. */
263
+ todayDate: (date: string) => string;
264
+ /** Wraps a day's (possibly today-wrapped) label when it is selected. */
265
+ selectedDate: (label: string) => string;
266
+ commandPalette: string;
267
+ /** Toaster region label; Radix replaces `{hotkey}`. */
268
+ notifications: string;
269
+ undo: string;
270
+ promptLabel: string;
271
+ sendMessage: string;
272
+ stopGenerating: string;
273
+ promptHint: string;
274
+ thinking: string;
275
+ youSaid: string;
276
+ assistantSaid: string;
277
+ failedToSend: string;
278
+ retry: string;
279
+ copy: string;
280
+ copied: string;
281
+ goodResponse: string;
282
+ badResponse: string;
283
+ regenerate: string;
284
+ sources: string;
285
+ source: (index: number) => string;
286
+ jumpToLatest: string;
287
+ conversation: string;
288
+ }
289
+ declare const defaultMessages: NexubMessages;
290
+ type Direction = 'ltr' | 'rtl';
291
+ interface NexubProviderProps {
292
+ /** BCP 47 locale for Intl formatting. @default 'en' */
293
+ locale?: string;
294
+ /** Text direction for Radix primitives. @default derived from `locale` */
295
+ dir?: Direction;
296
+ /**
297
+ * date-fns Locale for calendars (month/weekday names, week start, trigger text).
298
+ * Import only the one you need, e.g. `import { fr } from 'date-fns/locale/fr'`.
299
+ */
300
+ dateLocale?: Locale;
301
+ /** Overrides for the default English strings. */
302
+ messages?: Partial<NexubMessages>;
303
+ children?: React.ReactNode;
304
+ }
305
+ /**
306
+ * Locale, direction and translated strings for every @nexub/react component.
307
+ * It does not set `dir`/`lang` on <html> — the app does that (as it renders
308
+ * <html>), so the page and CSS `rtl:` variants agree with this provider.
309
+ */
310
+ declare function NexubProvider({ locale, dir, dateLocale, messages, children }: NexubProviderProps): React.JSX.Element;
311
+ /** The active strings: defaults merged with the nearest NexubProvider's overrides. */
312
+ declare function useNexubMessages(): NexubMessages;
313
+ /** The active locale (default 'en'), direction and optional date-fns Locale. */
314
+ declare function useLocale(): {
315
+ locale: string;
316
+ dir: Direction;
317
+ dateLocale?: Locale;
318
+ };
319
+
55
320
  type ToneValue = 'neutral' | 'info' | 'success' | 'warning' | 'danger' | 'leap' | 'bookub' | 'payub' | 'founderub';
56
321
  declare const buttonVariants: (props?: ({
57
- variant?: "accent" | "text" | "link" | "glass" | "filled" | "tonal" | "outlined" | "primary" | "secondary" | "subtle" | "outline" | "ghost" | "destructive" | null | undefined;
322
+ variant?: "accent" | "text" | "link" | "glass" | "ghost" | "outline" | "subtle" | "filled" | "tonal" | "outlined" | "primary" | "secondary" | "destructive" | null | undefined;
58
323
  size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
59
324
  fullWidth?: boolean | null | undefined;
60
325
  } & class_variance_authority_types.ClassProp) | undefined) => string;
326
+ type ButtonStatus = 'idle' | 'loading' | 'success' | 'error';
61
327
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
62
328
  tone?: ToneValue;
329
+ /** Async feedback. `loading` blocks clicks (aria-disabled, focus kept),
330
+ * `success` draws a check, `error` shakes once. Not applied with `asChild`. */
331
+ status?: ButtonStatus;
332
+ /** Alias for `status="loading"`. */
63
333
  loading?: boolean;
334
+ /** Announced while loading. @default 'Loading' */
335
+ loadingLabel?: string;
336
+ /** Announced on success; when given it also replaces the visible label. @default 'Done' */
337
+ successLabel?: string;
338
+ /** Announced on error. @default 'Something went wrong' */
339
+ errorLabel?: string;
64
340
  fullWidth?: boolean;
65
341
  leadingIcon?: React.ReactNode;
66
342
  trailingIcon?: React.ReactNode;
@@ -89,7 +365,7 @@ interface SplitButtonProps extends Omit<ButtonProps, 'asChild' | 'trailingIcon'
89
365
  declare const SplitButton: React.ForwardRefExoticComponent<SplitButtonProps & React.RefAttributes<HTMLButtonElement>>;
90
366
 
91
367
  declare const iconButtonVariants: (props?: ({
92
- variant?: "solid" | "subtle" | "outline" | "ghost" | null | undefined;
368
+ variant?: "solid" | "ghost" | "outline" | "subtle" | null | undefined;
93
369
  size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
94
370
  } & class_variance_authority_types.ClassProp) | undefined) => string;
95
371
  interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof iconButtonVariants> {
@@ -174,6 +450,8 @@ interface AmountProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'child
174
450
  tone?: 'neutral' | 'auto';
175
451
  /** e.g. 'exceptZero' to show "+" on gains. */
176
452
  signDisplay?: Intl.NumberFormatOptions['signDisplay'];
453
+ /** Roll digits to new values (NumberTicker). The first render never animates. */
454
+ animate?: boolean;
177
455
  }
178
456
  /**
179
457
  * A money figure, honest by default (Calm Depth §3.5): tabular numerals, the
@@ -181,6 +459,27 @@ interface AmountProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'child
181
459
  */
182
460
  declare const Amount: React.ForwardRefExoticComponent<AmountProps & React.RefAttributes<HTMLSpanElement>>;
183
461
 
462
+ /** A run of already-formatted text with its own class (Amount's muted symbol and minor units). */
463
+ interface NumberTickerPart {
464
+ value: string;
465
+ className?: string;
466
+ }
467
+ interface NumberTickerProps extends Omit<React.HTMLAttributes<HTMLSpanElement>, 'children'> {
468
+ /** A number (formatted with `format`/`locale`), an already-formatted string, or styled parts. */
469
+ value: number | string | readonly NumberTickerPart[];
470
+ format?: Intl.NumberFormatOptions;
471
+ /** BCP 47 locale. Defaults to the user's. */
472
+ locale?: string;
473
+ /** Announce changes to screen readers. */
474
+ 'aria-live'?: 'off' | 'polite';
475
+ }
476
+ /**
477
+ * A rolling number: each digit is a 0–9 strip that slides to its value on the
478
+ * spatial spring; separators, symbols and signs stay static. The first render
479
+ * shows the value as-is; only later changes animate.
480
+ */
481
+ declare const NumberTicker: React.ForwardRefExoticComponent<NumberTickerProps & React.RefAttributes<HTMLSpanElement>>;
482
+
184
483
  interface SearchInputProps extends Omit<InputProps, 'leadingIcon' | 'trailingIcon'> {
185
484
  onClear?: () => void;
186
485
  }
@@ -225,7 +524,7 @@ interface FormFieldRootProps extends React.HTMLAttributes<HTMLDivElement> {
225
524
  required?: boolean;
226
525
  disabled?: boolean;
227
526
  }
228
- declare function FieldLabel({ className, children, ...props }: React.ComponentProps<typeof Label>): react_jsx_runtime.JSX.Element;
527
+ declare function FieldLabel({ className, children, ...props }: React.ComponentProps<typeof Label>): React.JSX.Element;
229
528
  declare namespace FieldLabel {
230
529
  var displayName: string;
231
530
  }
@@ -235,11 +534,11 @@ declare function Control({ children }: {
235
534
  declare namespace Control {
236
535
  var displayName: string;
237
536
  }
238
- declare function Description({ className, children, ...props }: React.ComponentProps<typeof HelperText>): react_jsx_runtime.JSX.Element;
537
+ declare function Description({ className, children, ...props }: React.ComponentProps<typeof HelperText>): React.JSX.Element;
239
538
  declare namespace Description {
240
539
  var displayName: string;
241
540
  }
242
- declare function FieldError({ className, children, ...props }: React.ComponentProps<typeof FormError>): react_jsx_runtime.JSX.Element | null;
541
+ declare function FieldError({ className, children, ...props }: React.ComponentProps<typeof FormError>): React.JSX.Element | null;
243
542
  declare namespace FieldError {
244
543
  var displayName: string;
245
544
  }
@@ -297,7 +596,14 @@ declare const tagVariants: (props?: ({
297
596
  interface TagProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof tagVariants> {
298
597
  tone?: ToneValue;
299
598
  }
300
- /** @deprecated Use `Badge` instead: `<Badge size="sm">` covers it. Will be removed in 1.0. */
599
+ /**
600
+ * Static metadata label (status, category, version). Shape: `rounded-shape-min`,
601
+ * a squared label, so it never reads as tappable. It has no state layer or
602
+ * hover/press affordance on purpose; anything a user toggles, filters by or
603
+ * removes is a `Chip` (control-shaped, `nx-state-layer`, optional remove button).
604
+ *
605
+ * @deprecated Use `Badge` instead: `<Badge size="sm">` covers it. Will be removed in 1.0.
606
+ */
301
607
  declare const Tag: React.ForwardRefExoticComponent<TagProps & React.RefAttributes<HTMLSpanElement>>;
302
608
 
303
609
  interface EyebrowChipProps extends React.HTMLAttributes<HTMLSpanElement> {
@@ -335,9 +641,72 @@ declare const cardVariants: (props?: ({
335
641
  interface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {
336
642
  tone?: ToneValue;
337
643
  surface?: 'solid' | 'glass';
644
+ /** `sheen`: a soft light follows the pointer (opt-in; off for touch and reduced motion). */
645
+ effect?: 'none' | 'sheen';
338
646
  asChild?: boolean;
339
647
  }
340
648
  declare const Card: React.ForwardRefExoticComponent<CardProps & React.RefAttributes<HTMLDivElement>>;
649
+ interface CardLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {
650
+ asChild?: boolean;
651
+ }
652
+ /**
653
+ * Makes the whole card one link (the "stretched link" pattern): put it around
654
+ * the card's title. Its ::after covers the card, so the link has one
655
+ * accessible name and the focus ring shows on the card. Give other
656
+ * interactive elements inside the card `relative z-[1]` to keep them clickable.
657
+ */
658
+ declare const CardLink: React.ForwardRefExoticComponent<CardLinkProps & React.RefAttributes<HTMLAnchorElement>>;
659
+
660
+ interface SelectableCardContentProps {
661
+ /** Leading icon. */
662
+ icon?: React.ReactNode;
663
+ /** The card's accessible name. */
664
+ title: React.ReactNode;
665
+ /** Secondary text, exposed as the accessible description. */
666
+ description?: React.ReactNode;
667
+ /** Extra content under the description. Keep it non-interactive: the whole card is the control. */
668
+ children?: React.ReactNode;
669
+ }
670
+
671
+ interface RadioCardGroupProps extends RadixRadioGroup.RadioGroupProps {
672
+ /** Grid columns (collapses to one column on narrow screens). */
673
+ columns?: 1 | 2 | 3 | 4;
674
+ }
675
+ declare const RadioCardGroup: React.ForwardRefExoticComponent<RadioCardGroupProps & React.RefAttributes<HTMLDivElement>>;
676
+ interface RadioCardProps extends Omit<RadixRadioGroup.RadioGroupItemProps, 'title' | 'children'>, SelectableCardContentProps {
677
+ }
678
+ declare const RadioCard: React.ForwardRefExoticComponent<RadioCardProps & React.RefAttributes<HTMLButtonElement>>;
679
+
680
+ interface CheckboxCardProps extends Omit<RadixCheckbox.CheckboxProps, 'title' | 'children' | 'checked' | 'defaultChecked' | 'onCheckedChange'>, SelectableCardContentProps {
681
+ checked?: boolean;
682
+ defaultChecked?: boolean;
683
+ onCheckedChange?: (checked: boolean) => void;
684
+ }
685
+ declare const CheckboxCard: React.ForwardRefExoticComponent<CheckboxCardProps & React.RefAttributes<HTMLButtonElement>>;
686
+
687
+ type MediaCardRatio = '16/9' | '4/3' | '1/1' | '3/4';
688
+ interface MediaCardProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'title'> {
689
+ src: string;
690
+ /** Required. Pass '' when the image is decorative. */
691
+ alt: string;
692
+ /** @default '16/9' */
693
+ ratio?: MediaCardRatio;
694
+ title?: React.ReactNode;
695
+ description?: React.ReactNode;
696
+ eyebrow?: React.ReactNode;
697
+ /** Makes the whole card one link, stretched from the title (so needs `title`). */
698
+ href?: string;
699
+ /** Actions; they stay clickable above the stretched link. */
700
+ children?: React.ReactNode;
701
+ }
702
+ /**
703
+ * An image card with a glass caption over a soft bottom scrim.
704
+ *
705
+ * Layers stack in one grid cell rather than with absolute positioning: the
706
+ * glass panel's backdrop-filter would otherwise become the containing block of
707
+ * the stretched link's ::after, shrinking the hit area to the caption.
708
+ */
709
+ declare const MediaCard: React.ForwardRefExoticComponent<MediaCardProps & React.RefAttributes<HTMLDivElement>>;
341
710
 
342
711
  declare const alertVariants: (props?: ({
343
712
  tone?: "neutral" | "info" | "success" | "warning" | "danger" | "leap" | "bookub" | "payub" | "founderub" | null | undefined;
@@ -380,6 +749,7 @@ declare const skeletonVariants: (props?: ({
380
749
  } & class_variance_authority_types.ClassProp) | undefined) => string;
381
750
  interface SkeletonProps extends React.HTMLAttributes<HTMLSpanElement>, VariantProps<typeof skeletonVariants> {
382
751
  shape?: 'line' | 'rect' | 'circle';
752
+ /** Arbitrary size; rendered as inline style. Omit to use the shape's default classes. */
383
753
  width?: string | number;
384
754
  height?: string | number;
385
755
  animated?: boolean;
@@ -531,7 +901,7 @@ interface AspectRatioProps extends React.HTMLAttributes<HTMLDivElement> {
531
901
  declare const AspectRatio: React.ForwardRefExoticComponent<AspectRatioProps & React.RefAttributes<HTMLDivElement>>;
532
902
 
533
903
  declare const headingVariants: (props?: ({
534
- size?: "display" | "h2" | "h3" | "h1" | "h4" | "h5" | "h6" | null | undefined;
904
+ size?: "display" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | null | undefined;
535
905
  weight?: "bold" | "regular" | "medium" | "semibold" | "extrabold" | null | undefined;
536
906
  } & class_variance_authority_types.ClassProp) | undefined) => string;
537
907
  type HeadingSize = 'display' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
@@ -547,7 +917,7 @@ declare const Heading: React.ForwardRefExoticComponent<HeadingProps & React.RefA
547
917
 
548
918
  declare const textVariants: (props?: ({
549
919
  size?: "body" | "label" | "caption" | "body-lg" | "body-sm" | null | undefined;
550
- tone?: "default" | "secondary" | "subtle" | "muted" | "inverse" | null | undefined;
920
+ tone?: "default" | "subtle" | "secondary" | "muted" | "inverse" | null | undefined;
551
921
  weight?: "bold" | "regular" | "medium" | "semibold" | null | undefined;
552
922
  } & class_variance_authority_types.ClassProp) | undefined) => string;
553
923
  interface TextProps extends React.HTMLAttributes<HTMLParagraphElement>, VariantProps<typeof textVariants> {
@@ -633,17 +1003,18 @@ declare const Popover: {
633
1003
  Close: React.ForwardRefExoticComponent<RadixPopover.PopoverCloseProps & React.RefAttributes<HTMLButtonElement>>;
634
1004
  };
635
1005
 
636
- declare const Provider: React.FC<RadixTooltip.TooltipProviderProps>;
1006
+ declare function Provider$1({ delayDuration, skipDelayDuration, ...props }: RadixTooltip.TooltipProviderProps): React.JSX.Element;
637
1007
  interface TooltipProps {
638
1008
  label: string;
639
1009
  side?: 'top' | 'right' | 'bottom' | 'left';
640
1010
  delayDuration?: number;
641
1011
  children: React.ReactElement;
642
1012
  }
643
- declare function Tooltip({ label, side, delayDuration, children }: TooltipProps): react_jsx_runtime.JSX.Element;
1013
+ declare function Tooltip({ label, side, delayDuration, children }: TooltipProps): React.JSX.Element;
644
1014
 
1015
+ declare function Root$1({ openDelay, closeDelay, ...props }: RadixHoverCard.HoverCardProps): React.JSX.Element;
645
1016
  declare const HoverCard: {
646
- Root: React.FC<RadixHoverCard.HoverCardProps>;
1017
+ Root: typeof Root$1;
647
1018
  Trigger: React.ForwardRefExoticComponent<RadixHoverCard.HoverCardTriggerProps & React.RefAttributes<HTMLAnchorElement>>;
648
1019
  Content: React.ForwardRefExoticComponent<RadixHoverCard.HoverCardContentProps & React.RefAttributes<HTMLDivElement>>;
649
1020
  Arrow: React.ForwardRefExoticComponent<RadixHoverCard.HoverCardArrowProps & React.RefAttributes<SVGSVGElement>>;
@@ -771,7 +1142,7 @@ interface DrawerRootProps {
771
1142
  container?: HTMLElement | null;
772
1143
  autoFocus?: boolean;
773
1144
  }
774
- declare function Root({ scrollLock, onOpenChange, ...props }: DrawerRootProps): react_jsx_runtime.JSX.Element;
1145
+ declare function Root({ scrollLock, onOpenChange, ...props }: DrawerRootProps): React.JSX.Element;
775
1146
  declare namespace Root {
776
1147
  var displayName: string;
777
1148
  }
@@ -909,7 +1280,7 @@ interface AutocompleteProps {
909
1280
  loading?: boolean;
910
1281
  className?: string;
911
1282
  }
912
- declare function Autocomplete({ options, value, onValueChange, placeholder, emptyText, loading, className, }: AutocompleteProps): react_jsx_runtime.JSX.Element;
1283
+ declare function Autocomplete({ options, value, onValueChange, placeholder, emptyText, loading, className, }: AutocompleteProps): React.JSX.Element;
913
1284
  declare namespace Autocomplete {
914
1285
  var displayName: string;
915
1286
  }
@@ -1009,8 +1380,13 @@ declare const Toolbar: {
1009
1380
  ToggleItem: React.ForwardRefExoticComponent<RadixToolbar.ToolbarToggleItemProps & React.RefAttributes<HTMLButtonElement>>;
1010
1381
  };
1011
1382
 
1383
+ /** Swipe to dismiss toward the viewport's inline-end edge: right, or left in RTL. */
1384
+ declare function Provider({ swipeDirection, ...props }: RadixToast.ToastProviderProps): React.JSX.Element;
1385
+ declare namespace Provider {
1386
+ var displayName: string;
1387
+ }
1012
1388
  declare const Toast: {
1013
- Provider: React.FC<RadixToast.ToastProviderProps>;
1389
+ Provider: typeof Provider;
1014
1390
  Viewport: React.ForwardRefExoticComponent<RadixToast.ToastViewportProps & React.RefAttributes<HTMLOListElement>>;
1015
1391
  Root: React.ForwardRefExoticComponent<RadixToast.ToastProps & React.RefAttributes<HTMLLIElement>>;
1016
1392
  Title: React.ForwardRefExoticComponent<RadixToast.ToastTitleProps & React.RefAttributes<HTMLDivElement>>;
@@ -1019,7 +1395,23 @@ declare const Toast: {
1019
1395
  Close: React.ForwardRefExoticComponent<RadixToast.ToastCloseProps & React.RefAttributes<HTMLButtonElement>>;
1020
1396
  };
1021
1397
 
1022
- declare function Toaster(): react_jsx_runtime.JSX.Element;
1398
+ interface ToasterProps {
1399
+ /** Always show the toasts as a list instead of a collapsed stack. */
1400
+ expand?: boolean;
1401
+ /** How many toasts are visible at once; older ones are visually hidden. Default 3. */
1402
+ visibleToasts?: number;
1403
+ }
1404
+ /**
1405
+ * Sonner-style stack. Collapsed: the newest toast in front, older ones peek
1406
+ * out below it, scaled down. Hovering or focusing the viewport fans them out
1407
+ * into a list. Radix pauses every toast's timer while the viewport is hovered
1408
+ * or focused — the same condition that expands the stack.
1409
+ *
1410
+ * Measured heights reach CSS as custom properties set through the CSSOM
1411
+ * (--nx-toast-index / --nx-toast-offset per toast, --nx-front-height and
1412
+ * --nx-stack-height on the viewport), never a style attribute (strict CSP).
1413
+ */
1414
+ declare function Toaster({ expand, visibleToasts }: ToasterProps): React.JSX.Element;
1023
1415
  declare namespace Toaster {
1024
1416
  var displayName: string;
1025
1417
  }
@@ -1035,15 +1427,35 @@ interface ToastItem {
1035
1427
  label: string;
1036
1428
  onClick: () => void;
1037
1429
  };
1430
+ /** An Undo action; its label defaults to the `undo` message. Set by `toast.undoable`. */
1431
+ undo?: {
1432
+ label?: string;
1433
+ onUndo: () => void;
1434
+ };
1435
+ /** Called once when the toast closes, however it closes (timer, swipe, close, action, dismiss). */
1436
+ onClose?: () => void;
1437
+ }
1438
+ interface UndoableToastOptions {
1439
+ /** Called when Undo is clicked; the toast then closes. */
1440
+ onUndo: () => void;
1441
+ /** Called once when the toast closes any other way — the change is final. */
1442
+ onCommit?: () => void;
1443
+ /** @default the `undo` message ('Undo') */
1444
+ undoLabel?: string;
1445
+ description?: string;
1446
+ duration?: number;
1038
1447
  }
1039
1448
  declare function useToastStore(): ToastItem[];
1040
1449
  declare function dismiss(id?: string): void;
1450
+ declare function undoable(title: string, { onUndo, onCommit, undoLabel, description, duration }: UndoableToastOptions): string;
1041
1451
  declare const toast: {
1042
1452
  success: (title: string, opts?: Partial<Omit<ToastItem, "id" | "title" | "tone">>) => string;
1043
1453
  error: (title: string, opts?: Partial<Omit<ToastItem, "id" | "title" | "tone">>) => string;
1044
1454
  info: (title: string, opts?: Partial<Omit<ToastItem, "id" | "title" | "tone">>) => string;
1045
1455
  warning: (title: string, opts?: Partial<Omit<ToastItem, "id" | "title" | "tone">>) => string;
1046
1456
  custom: (title: string, opts?: Partial<Omit<ToastItem, "id" | "title" | "tone">>) => string;
1457
+ /** A toast with an Undo action: Undo calls `onUndo`; any other close calls `onCommit`, once. */
1458
+ undoable: typeof undoable;
1047
1459
  dismiss: typeof dismiss;
1048
1460
  };
1049
1461
 
@@ -1119,11 +1531,11 @@ declare const Breadcrumb: {
1119
1531
  ({ children, className, }: {
1120
1532
  children?: React.ReactNode;
1121
1533
  className?: string;
1122
- }): react_jsx_runtime.JSX.Element;
1534
+ }): React.JSX.Element;
1123
1535
  displayName: string;
1124
1536
  };
1125
1537
  Ellipsis: {
1126
- ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
1538
+ ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element;
1127
1539
  displayName: string;
1128
1540
  };
1129
1541
  };
@@ -1229,7 +1641,7 @@ interface DataTableProps<TData> extends React.HTMLAttributes<HTMLDivElement> {
1229
1641
  pageSize?: number;
1230
1642
  };
1231
1643
  }
1232
- declare function DataTable<TData>({ columns, data, enableSorting, enableRowSelection, pagination, className, ...props }: DataTableProps<TData>): react_jsx_runtime.JSX.Element;
1644
+ declare function DataTable<TData>({ columns, data, enableSorting, enableRowSelection, pagination, className, ...props }: DataTableProps<TData>): React.JSX.Element;
1233
1645
 
1234
1646
  declare const EmptyState: {
1235
1647
  Root: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
@@ -1274,6 +1686,8 @@ interface DatePickerProps {
1274
1686
  id?: string;
1275
1687
  /** Field name for screen readers; the current value is appended. */
1276
1688
  'aria-label'?: string;
1689
+ /** date-fns Locale for the calendar and trigger text; wins over NexubProvider's `dateLocale`. */
1690
+ locale?: Locale;
1277
1691
  }
1278
1692
  declare const DatePicker: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLButtonElement>>;
1279
1693
 
@@ -1289,6 +1703,8 @@ interface DateRangePickerProps {
1289
1703
  id?: string;
1290
1704
  /** Field name for screen readers; the current value is appended. */
1291
1705
  'aria-label'?: string;
1706
+ /** date-fns Locale for the calendar and trigger text; wins over NexubProvider's `dateLocale`. */
1707
+ locale?: Locale;
1292
1708
  }
1293
1709
  declare const DateRangePicker: React.ForwardRefExoticComponent<DateRangePickerProps & React.RefAttributes<HTMLButtonElement>>;
1294
1710
 
@@ -1324,7 +1740,7 @@ interface ThemeProviderProps {
1324
1740
  /** localStorage key for the glass intensity. Defaults to 'nexub-glass'. */
1325
1741
  glassStorageKey?: string;
1326
1742
  }
1327
- declare function ThemeProvider({ children, defaultTheme, storageKey, defaultGlass, glassStorageKey, }: ThemeProviderProps): react_jsx_runtime.JSX.Element;
1743
+ declare function ThemeProvider({ children, defaultTheme, storageKey, defaultGlass, glassStorageKey, }: ThemeProviderProps): React.JSX.Element;
1328
1744
  declare function useTheme(): ThemeContextValue;
1329
1745
  interface ThemeScriptProps {
1330
1746
  /** Must match ThemeProvider's `storageKey`. Defaults to 'nexub-theme'. */
@@ -1340,7 +1756,7 @@ interface ThemeScriptProps {
1340
1756
  * Applies the stored theme before first paint, so there is no light/dark flash.
1341
1757
  * Render it in `<head>` (or at the top of `<body>`) on server-rendered pages.
1342
1758
  */
1343
- declare function ThemeScript({ storageKey, productStorageKey, glassStorageKey, nonce }: ThemeScriptProps): react_jsx_runtime.JSX.Element;
1759
+ declare function ThemeScript({ storageKey, productStorageKey, glassStorageKey, nonce }: ThemeScriptProps): React.JSX.Element;
1344
1760
 
1345
1761
  type MotionDuration = 'instant' | 'fast' | 'normal' | 'slow' | 'slower';
1346
1762
  type MotionEasing = 'linear' | 'in' | 'out' | 'in-out' | 'out-expo' | 'spring';
@@ -1448,4 +1864,4 @@ interface CollapseProps extends Omit<MotionBaseProps, 'easing'>, React.HTMLAttri
1448
1864
  */
1449
1865
  declare const Collapse: React.ForwardRefExoticComponent<CollapseProps & React.RefAttributes<HTMLDivElement>>;
1450
1866
 
1451
- export { Accordion, Alert, AlertDialog, type AlertProps, Amount, type AmountProps, AppShell, AspectRatio, type AspectRatioProps, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, Badge, type BadgeProps, Banner, type BannerProps, Box, type BoxProps, Breadcrumb, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, Callout, type CalloutProps, Card, type CardProps, CheckList, CheckListItem, type CheckListItemProps, type CheckListProps, Checkbox, type CheckboxProps, Chip, type ChipProps, Code, type CodeProps, Collapse, type CollapseProps, Collapsible, Combobox, CommandPalette, type CommandPaletteRootProps, Container, type ContainerProps, ContextMenu, CountryBadge, type CountryBadgeProps, DataTable, type DataTableProps, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, Dialog, Drawer, type DrawerRootProps, DropdownMenu, EmptyState, ErrorState, type ErrorStateProps, EyebrowChip, type EyebrowChipProps, Fade, type FadeProps, FileUpload, type FileUploadRootProps, FilterChip, type FilterChipProps, Flag, type FlagProps, Flex, type FlexProps, FormError, type FormErrorProps, FormField, type FormFieldContextValue, type FormFieldRootProps, type GlassMode, GradientDivider, type GradientDividerProps, Grid, type GridProps, Heading, type HeadingProps, HelperText, type HelperTextProps, HoverCard, IconButton, type IconButtonProps, Input, type InputProps, Kbd, type KbdProps, KeyboardShortcut, type KeyboardShortcutProps, Label, type LabelProps, Link, type LinkProps, Logo, type LogoProps, Menubar, MoneyInput, type MoneyInputProps, type MotionBaseProps, type MotionDuration, type MotionEasing, NavigationMenu, NavigationRail, type NavigationRailItemProps, type NavigationRailRootProps, NumberInput, type NumberInputProps, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, PasswordInput, type PasswordInputProps, Popover, Progress, type ProgressProps, RadioGroup, Rating, type RatingProps, Scale, type ScaleProps, ScrollArea, type ScrollAreaProps, SearchInput, type SearchInputProps, Section, type SectionProps, SegmentedControl, type SegmentedControlItemProps, type SegmentedControlProps, Select, Separator, type SeparatorProps, Sheet, Sidebar, type SidebarGroupProps, type SidebarHeaderProps, type SidebarItemProps, type SidebarRootProps, Skeleton, type SkeletonProps, Slide, type SlideDirection, type SlideProps, Slider, type SliderProps, Spinner, type SpinnerProps, SplitButton, type SplitButtonProps, Stack, type StackProps, StatusPill, type StatusPillProps, Switch, type SwitchProps, Table, Tabs, Tag, type TagProps, Text, TextGradient, type TextGradientProps, type TextProps, Textarea, type TextareaProps, type ThemeContextValue, type ThemeMode, ThemeProvider, type ThemeProviderProps, ThemeScript, type ThemeScriptProps, Toast, type ToastItem, Toaster, Toggle, ToggleGroup, type ToggleProps, type ToneValue, Toolbar, type ToolbarRootProps, Tooltip, Provider as TooltipProvider, TopNav, type TopNavItemProps, type TopNavRootProps, addonVariants, alertVariants, avatarGroupVariants, avatarVariants, badgeVariants, bannerVariants, buttonVariants, calloutVariants, cardVariants, chipVariants, cn, containerVariants, headingVariants, iconButtonVariants, inputVariants, inputWrapperVariants, labelVariants, linkVariants, logoVariants, progressFillVariants, progressTrackVariants, ratingVariants, sectionVariants, separatorVariants, skeletonVariants, spinnerVariants, statusPillVariants, tagVariants, textVariants, textareaVariants, toast, toggleVariants, useControllableState, useDisclosure, useIsomorphicLayoutEffect, useMediaQuery, useMergedRefs, useTheme, useToastStore };
1867
+ export { Accordion, Alert, AlertDialog, type AlertProps, Amount, type AmountProps, AppShell, AspectRatio, type AspectRatioProps, Autocomplete, type AutocompleteOption, type AutocompleteProps, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, Badge, type BadgeProps, Banner, type BannerProps, Box, type BoxProps, Breadcrumb, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonStatus, Callout, type CalloutProps, Card, CardLink, type CardLinkProps, type CardProps, CheckList, CheckListItem, type CheckListItemProps, type CheckListProps, Checkbox, CheckboxCard, type CheckboxCardProps, type CheckboxProps, Chip, type ChipProps, Citation, type CitationMessages, type CitationProps, type CitationSource, Code, type CodeProps, Collapse, type CollapseProps, Collapsible, Combobox, CommandPalette, type CommandPaletteRootProps, Container, type ContainerProps, ContextMenu, CountryBadge, type CountryBadgeProps, DataTable, type DataTableProps, DatePicker, type DatePickerProps, DateRangePicker, type DateRangePickerProps, Dialog, Drawer, type DrawerRootProps, DropdownMenu, EmptyState, ErrorState, type ErrorStateProps, EyebrowChip, type EyebrowChipProps, Fade, type FadeProps, type Feedback, FileUpload, type FileUploadRootProps, FilterChip, type FilterChipProps, Flag, type FlagProps, Flex, type FlexProps, FormError, type FormErrorProps, FormField, type FormFieldContextValue, type FormFieldRootProps, type GlassMode, GradientDivider, type GradientDividerProps, Grid, type GridProps, Heading, type HeadingProps, HelperText, type HelperTextProps, HoverCard, IconButton, type IconButtonProps, Input, type InputProps, Kbd, type KbdProps, KeyboardShortcut, type KeyboardShortcutProps, Label, type LabelProps, Link, type LinkProps, Logo, type LogoProps, MediaCard, type MediaCardProps, type MediaCardRatio, Menubar, MessageActions, type MessageActionsProps, MessageBubble, type MessageBubbleProps, type MessageFrom, type MessageStrings, MoneyInput, type MoneyInputProps, type MotionBaseProps, type MotionDuration, type MotionEasing, NavigationMenu, NavigationRail, type NavigationRailItemProps, type NavigationRailRootProps, type NexubMessages, NexubProvider, type NexubProviderProps, NumberInput, type NumberInputProps, NumberTicker, type NumberTickerPart, type NumberTickerProps, PageHeader, type PageHeaderProps, Pagination, type PaginationProps, PasswordInput, type PasswordInputProps, Popover, Progress, type ProgressProps, PromptInput, type PromptInputMessages, type PromptInputProps, type PromptInputStatus, RadioCard, RadioCardGroup, type RadioCardGroupProps, type RadioCardProps, RadioGroup, Rating, type RatingProps, Scale, type ScaleProps, ScrollArea, type ScrollAreaProps, SearchInput, type SearchInputProps, Section, type SectionProps, SegmentedControl, type SegmentedControlItemProps, type SegmentedControlProps, Select, Separator, type SeparatorProps, Sheet, Sidebar, type SidebarGroupProps, type SidebarHeaderProps, type SidebarItemProps, type SidebarRootProps, Skeleton, type SkeletonProps, Slide, type SlideDirection, type SlideProps, Slider, type SliderProps, SourceChip, type SourceChipProps, SourceList, type SourceListProps, Spinner, type SpinnerProps, SplitButton, type SplitButtonProps, Stack, type StackProps, StatusPill, type StatusPillProps, StreamingText, type StreamingTextProps, Switch, type SwitchProps, Table, Tabs, Tag, type TagProps, Text, type Direction as TextDirection, TextGradient, type TextGradientProps, type TextProps, Textarea, type TextareaProps, type ThemeContextValue, type ThemeMode, ThemeProvider, type ThemeProviderProps, ThemeScript, type ThemeScriptProps, ThinkingIndicator, type ThinkingIndicatorMessages, type ThinkingIndicatorProps, Toast, type ToastItem, Toaster, type ToasterProps, Toggle, ToggleGroup, type ToggleProps, type ToneValue, Toolbar, type ToolbarRootProps, Tooltip, Provider$1 as TooltipProvider, TopNav, type TopNavItemProps, type TopNavRootProps, type UndoableToastOptions, addonVariants, alertVariants, avatarGroupVariants, avatarVariants, badgeVariants, bannerVariants, buttonVariants, calloutVariants, cardVariants, chipVariants, cn, containerVariants, defaultMessageStrings, defaultMessages, headingVariants, iconButtonVariants, inputVariants, inputWrapperVariants, labelVariants, linkVariants, logoVariants, progressFillVariants, progressTrackVariants, ratingVariants, safeUrl, sectionVariants, separatorVariants, skeletonVariants, spinnerVariants, startViewTransition, statusPillVariants, tagVariants, textVariants, textareaVariants, toast, toggleVariants, useControllableState, useDisclosure, useIsomorphicLayoutEffect, useLocale, useMediaQuery, useMergedRefs, useNexubMessages, usePointerSheen, useTheme, useToastStore };