haze-ui 1.30.0 → 1.32.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 (330) hide show
  1. package/README.md +67 -1
  2. package/dist/components/ActivityRail/ActivityRail.js +76 -0
  3. package/dist/components/ActivityRail/index.js +3 -0
  4. package/dist/components/BottomSheet/BottomSheet.js +12 -26
  5. package/dist/components/Button/Button.js +33 -15
  6. package/dist/components/Button/ButtonLink.js +12 -21
  7. package/dist/components/Button/styles.js +2 -2
  8. package/dist/components/Cascader/Cascader.js +11 -11
  9. package/dist/components/ColorPicker/ColorPicker.js +4 -4
  10. package/dist/components/Combobox/Combobox.js +128 -119
  11. package/dist/components/Command/Command.js +9 -9
  12. package/dist/components/ConfigProvider/ConfigContext.js +16 -0
  13. package/dist/components/ConfirmDialog/confirm.js +41 -0
  14. package/dist/components/ConfirmDialog/index.js +2 -1
  15. package/dist/components/ConversationList/ConversationList.js +16 -7
  16. package/dist/components/DataTable/DataTable.js +24 -24
  17. package/dist/components/DateTimePicker/DateTimePicker.js +25 -0
  18. package/dist/components/DateTimePicker/index.js +3 -0
  19. package/dist/components/Datepicker/Datepicker.js +8 -7
  20. package/dist/components/Datepicker/DatepickerCore.js +60 -59
  21. package/dist/components/Drawer/Drawer.js +45 -40
  22. package/dist/components/Fieldset/Fieldset.js +25 -0
  23. package/dist/components/Fieldset/index.js +2 -0
  24. package/dist/components/Highlight/Highlight.js +19 -0
  25. package/dist/components/Highlight/index.js +2 -0
  26. package/dist/components/Indicator/Indicator.js +37 -0
  27. package/dist/components/Indicator/index.js +2 -0
  28. package/dist/components/InlineCompletion/InlineCompletion.js +4 -4
  29. package/dist/components/Input/Input.js +9 -7
  30. package/dist/components/Input/InputCore.js +32 -13
  31. package/dist/components/List/List.js +14 -10
  32. package/dist/components/LoadingOverlay/LoadingOverlay.js +30 -0
  33. package/dist/components/LoadingOverlay/index.js +3 -0
  34. package/dist/components/LocaleProvider/ar-sa.js +11 -0
  35. package/dist/components/LocaleProvider/de-de.js +11 -0
  36. package/dist/components/LocaleProvider/es-es.js +11 -0
  37. package/dist/components/LocaleProvider/fr-fr.js +11 -0
  38. package/dist/components/LocaleProvider/it-it.js +11 -0
  39. package/dist/components/LocaleProvider/ja-jp.js +11 -0
  40. package/dist/components/LocaleProvider/ko-kr.js +11 -0
  41. package/dist/components/LocaleProvider/locale.js +11 -0
  42. package/dist/components/LocaleProvider/pt-br.js +11 -0
  43. package/dist/components/LocaleProvider/ru-ru.js +11 -0
  44. package/dist/components/LocaleProvider/zh-cn.js +11 -0
  45. package/dist/components/LogViewer/LogViewer.js +45 -38
  46. package/dist/components/Mark/Mark.js +20 -0
  47. package/dist/components/Mark/index.js +2 -0
  48. package/dist/components/Mentions/MentionsCore.js +3 -3
  49. package/dist/components/Menu/MenuItem.js +6 -4
  50. package/dist/components/NumberFormatter/NumberFormatter.js +16 -0
  51. package/dist/components/NumberFormatter/index.js +2 -0
  52. package/dist/components/OTPInput/OTPInputCore.js +7 -6
  53. package/dist/components/PasswordInput/PasswordInputCore.js +27 -26
  54. package/dist/components/Rating/RatingCore.js +18 -18
  55. package/dist/components/Resizable/Resizable.js +266 -36
  56. package/dist/components/Select/Select.js +28 -23
  57. package/dist/components/Select/SelectCore.js +26 -23
  58. package/dist/components/Select/SelectFloating.js +157 -153
  59. package/dist/components/Sparkline/Sparkline.js +45 -0
  60. package/dist/components/Sparkline/index.js +3 -0
  61. package/dist/components/Sparkline/sparkline-styles.js +18 -0
  62. package/dist/components/Spoiler/Spoiler.js +36 -0
  63. package/dist/components/Spoiler/index.js +3 -0
  64. package/dist/components/StatusBar/StatusBar.js +47 -0
  65. package/dist/components/StatusBar/index.js +3 -0
  66. package/dist/components/TabBar/TabBar.js +60 -0
  67. package/dist/components/TabBar/index.js +3 -0
  68. package/dist/components/Tabs/SortableTabList.js +116 -0
  69. package/dist/components/Tabs/Tab.js +83 -16
  70. package/dist/components/Tabs/TabList.js +94 -38
  71. package/dist/components/Tabs/edge-scroll.js +6 -0
  72. package/dist/components/Tabs/index.js +4 -3
  73. package/dist/components/Tabs/tab-metas.js +24 -0
  74. package/dist/components/TagGroup/SortableTagGroup.js +32 -20
  75. package/dist/components/TagGroup/TagGroup.js +23 -9
  76. package/dist/components/TagGroup/TagGroupItem.js +21 -15
  77. package/dist/components/TagInput/SortableTagInputCore.js +11 -11
  78. package/dist/components/TagInput/TagInputCore.js +10 -10
  79. package/dist/components/TimePicker/TimePickerPanel.js +3 -3
  80. package/dist/components/Toast/ToastContainer.js +5 -5
  81. package/dist/components/Toast/index.js +1 -1
  82. package/dist/components/Toast/{toast2.js → toast-channel.js} +1 -1
  83. package/dist/components/Toast/useToast.js +1 -1
  84. package/dist/components/Tree/SortableTree.js +39 -39
  85. package/dist/components/TreeSelect/TreeSelect.js +6 -6
  86. package/dist/components/VirtualList/VirtualList.js +133 -121
  87. package/dist/components/VisuallyHidden/VisuallyHidden.js +15 -0
  88. package/dist/components/VisuallyHidden/index.js +2 -0
  89. package/dist/components/Workbench/Workbench.js +144 -0
  90. package/dist/components/Workbench/index.js +3 -0
  91. package/dist/css/accordion.css +2 -0
  92. package/dist/css/activity-rail.css +4 -0
  93. package/dist/css/affix.css +2 -0
  94. package/dist/css/alert.css +2 -0
  95. package/dist/css/anchor.css +2 -0
  96. package/dist/css/app-shell.css +3 -1
  97. package/dist/css/approval-card.css +2 -0
  98. package/dist/css/aspect-ratio.css +2 -0
  99. package/dist/css/async-section.css +2 -0
  100. package/dist/css/avatar-group.css +2 -0
  101. package/dist/css/avatar.css +2 -0
  102. package/dist/css/back-to-top.css +2 -0
  103. package/dist/css/badge.css +2 -0
  104. package/dist/css/banner.css +2 -0
  105. package/dist/css/bottom-sheet.css +2 -0
  106. package/dist/css/breadcrumb.css +3 -1
  107. package/dist/css/button.css +3 -2
  108. package/dist/css/calendar.css +2 -0
  109. package/dist/css/card.css +2 -0
  110. package/dist/css/carousel.css +2 -0
  111. package/dist/css/cascader.css +2 -0
  112. package/dist/css/chart.css +2 -0
  113. package/dist/css/chat-container.css +2 -0
  114. package/dist/css/chat-input.css +2 -0
  115. package/dist/css/chat-message.css +2 -0
  116. package/dist/css/checkbox.css +3 -1
  117. package/dist/css/chip.css +2 -0
  118. package/dist/css/code-block.css +2 -0
  119. package/dist/css/collapsible.css +2 -0
  120. package/dist/css/color-picker.css +2 -0
  121. package/dist/css/combobox.css +2 -0
  122. package/dist/css/command.css +3 -1
  123. package/dist/css/confirm-dialog.css +2 -0
  124. package/dist/css/container.css +2 -0
  125. package/dist/css/context-menu.css +3 -1
  126. package/dist/css/conversation-list.css +2 -0
  127. package/dist/css/count-up.css +2 -0
  128. package/dist/css/data-table.css +2 -0
  129. package/dist/css/date-range-picker.css +3 -1
  130. package/dist/css/datepicker.css +2 -0
  131. package/dist/css/descriptions.css +2 -0
  132. package/dist/css/dialog.css +2 -0
  133. package/dist/css/diff-viewer.css +2 -0
  134. package/dist/css/disclosure.css +2 -0
  135. package/dist/css/divider.css +2 -0
  136. package/dist/css/drawer.css +3 -1
  137. package/dist/css/dropdown-menu.css +4 -2
  138. package/dist/css/ellipsis.css +2 -0
  139. package/dist/css/empty.css +2 -0
  140. package/dist/css/fieldset.css +4 -0
  141. package/dist/css/file-input.css +2 -0
  142. package/dist/css/file-preview.css +2 -0
  143. package/dist/css/flex.css +2 -0
  144. package/dist/css/float-button.css +2 -0
  145. package/dist/css/form.css +2 -0
  146. package/dist/css/grid.css +2 -0
  147. package/dist/css/hover-card.css +3 -1
  148. package/dist/css/icon.css +2 -0
  149. package/dist/css/image.css +2 -0
  150. package/dist/css/indicator.css +4 -0
  151. package/dist/css/inline-completion.css +2 -0
  152. package/dist/css/inline-edit.css +2 -0
  153. package/dist/css/input.css +3 -1
  154. package/dist/css/json-view.css +2 -0
  155. package/dist/css/kbd.css +2 -0
  156. package/dist/css/list.css +3 -1
  157. package/dist/css/loading-overlay.css +4 -0
  158. package/dist/css/log-viewer.css +2 -0
  159. package/dist/css/mark.css +4 -0
  160. package/dist/css/markdown-renderer.css +2 -0
  161. package/dist/css/masonry.css +2 -0
  162. package/dist/css/mentions.css +2 -0
  163. package/dist/css/menu.css +5 -3
  164. package/dist/css/model-picker.css +2 -0
  165. package/dist/css/navigation-bar.css +2 -0
  166. package/dist/css/number-input.css +2 -0
  167. package/dist/css/otp-input.css +2 -0
  168. package/dist/css/pagination.css +2 -0
  169. package/dist/css/password-input.css +3 -1
  170. package/dist/css/popover.css +3 -1
  171. package/dist/css/progress.css +2 -0
  172. package/dist/css/prompt-input.css +2 -0
  173. package/dist/css/qr-code.css +2 -0
  174. package/dist/css/radio.css +3 -1
  175. package/dist/css/rating.css +2 -0
  176. package/dist/css/resizable.css +3 -1
  177. package/dist/css/result.css +2 -0
  178. package/dist/css/scroll-area.css +2 -0
  179. package/dist/css/segmented.css +3 -1
  180. package/dist/css/select.css +2 -0
  181. package/dist/css/sidebar.css +3 -1
  182. package/dist/css/signature.css +2 -0
  183. package/dist/css/skeleton.css +2 -0
  184. package/dist/css/slider.css +3 -1
  185. package/dist/css/sources.css +2 -0
  186. package/dist/css/sparkline.css +4 -0
  187. package/dist/css/spinner.css +2 -0
  188. package/dist/css/spoiler.css +4 -0
  189. package/dist/css/stat.css +2 -0
  190. package/dist/css/status-bar.css +4 -0
  191. package/dist/css/step-timeline.css +2 -0
  192. package/dist/css/stepper.css +2 -0
  193. package/dist/css/streaming-text.css +2 -0
  194. package/dist/css/swipe-action.css +2 -0
  195. package/dist/css/switch.css +3 -1
  196. package/dist/css/tab-bar.css +4 -0
  197. package/dist/css/table.css +2 -0
  198. package/dist/css/tabs.css +5 -2
  199. package/dist/css/tag-group.css +2 -0
  200. package/dist/css/tag-input.css +2 -0
  201. package/dist/css/tag.css +3 -1
  202. package/dist/css/textarea.css +2 -0
  203. package/dist/css/thinking-indicator.css +2 -0
  204. package/dist/css/time-picker.css +2 -0
  205. package/dist/css/timeline.css +2 -0
  206. package/dist/css/toast.css +2 -0
  207. package/dist/css/toggle.css +2 -0
  208. package/dist/css/token-counter.css +2 -0
  209. package/dist/css/tokens.css +2 -0
  210. package/dist/css/tool-call-card.css +2 -0
  211. package/dist/css/toolbar.css +2 -0
  212. package/dist/css/tooltip.css +2 -0
  213. package/dist/css/tour.css +2 -0
  214. package/dist/css/transfer.css +2 -0
  215. package/dist/css/tree-select.css +2 -0
  216. package/dist/css/tree.css +3 -1
  217. package/dist/css/typography.css +2 -0
  218. package/dist/css/upload.css +2 -0
  219. package/dist/css/virtual-list.css +2 -0
  220. package/dist/css/visually-hidden.css +4 -0
  221. package/dist/css/watermark.css +2 -0
  222. package/dist/css/workbench.css +4 -0
  223. package/dist/css-manifest.json +202 -1
  224. package/dist/dates/adapter.js +9 -1
  225. package/dist/dates/buddhist.js +43 -0
  226. package/dist/dates/ethiopic.js +67 -0
  227. package/dist/dates/hebrew.js +95 -0
  228. package/dist/dates/japanese.js +41 -0
  229. package/dist/dates/persian.js +121 -0
  230. package/dist/dates/registry.js +14 -4
  231. package/dist/haze-ui.css +435 -29
  232. package/dist/headless/index.js +18 -17
  233. package/dist/hooks/useBusyPressable.js +10 -0
  234. package/dist/index.js +263 -241
  235. package/dist/mcp-docs.json +1073 -33
  236. package/dist/registry.json +256 -14
  237. package/dist/types/components/ActivityRail/ActivityRail.d.ts +30 -0
  238. package/dist/types/components/ActivityRail/index.d.ts +4 -0
  239. package/dist/types/components/Button/Button.d.ts +50 -5
  240. package/dist/types/components/Button/ButtonLink.d.ts +27 -15
  241. package/dist/types/components/Button/styles.d.ts +34 -0
  242. package/dist/types/components/Combobox/Combobox.d.ts +20 -2
  243. package/dist/types/components/Combobox/index.d.ts +1 -1
  244. package/dist/types/components/ConfigProvider/ConfigContext.d.ts +20 -0
  245. package/dist/types/components/ConfirmDialog/ConfirmDialog.d.ts +1 -1
  246. package/dist/types/components/ConfirmDialog/confirm.d.ts +33 -0
  247. package/dist/types/components/ConfirmDialog/index.d.ts +2 -0
  248. package/dist/types/components/ConversationList/ConversationList.d.ts +10 -1
  249. package/dist/types/components/DateTimePicker/DateTimePicker.d.ts +36 -0
  250. package/dist/types/components/DateTimePicker/index.d.ts +2 -0
  251. package/dist/types/components/Datepicker/Datepicker.d.ts +3 -3
  252. package/dist/types/components/Datepicker/DatepickerCore.d.ts +3 -3
  253. package/dist/types/components/Drawer/Drawer.d.ts +15 -2
  254. package/dist/types/components/Drawer/index.d.ts +1 -1
  255. package/dist/types/components/Fieldset/Fieldset.d.ts +16 -0
  256. package/dist/types/components/Fieldset/index.d.ts +2 -0
  257. package/dist/types/components/Highlight/Highlight.d.ts +27 -0
  258. package/dist/types/components/Highlight/index.d.ts +2 -0
  259. package/dist/types/components/Indicator/Indicator.d.ts +24 -0
  260. package/dist/types/components/Indicator/index.d.ts +2 -0
  261. package/dist/types/components/Input/Input.d.ts +8 -2
  262. package/dist/types/components/Input/InputCore.d.ts +11 -2
  263. package/dist/types/components/List/List.d.ts +10 -1
  264. package/dist/types/components/LoadingOverlay/LoadingOverlay.d.ts +25 -0
  265. package/dist/types/components/LoadingOverlay/index.d.ts +2 -0
  266. package/dist/types/components/LocaleProvider/locale.d.ts +11 -0
  267. package/dist/types/components/LogViewer/LogViewer.d.ts +10 -1
  268. package/dist/types/components/Mark/Mark.d.ts +12 -0
  269. package/dist/types/components/Mark/index.d.ts +2 -0
  270. package/dist/types/components/Menu/MenuItem.d.ts +15 -4
  271. package/dist/types/components/NumberFormatter/NumberFormatter.d.ts +23 -0
  272. package/dist/types/components/NumberFormatter/index.d.ts +2 -0
  273. package/dist/types/components/Resizable/Resizable.d.ts +24 -7
  274. package/dist/types/components/Resizable/index.d.ts +1 -1
  275. package/dist/types/components/Select/Select.d.ts +23 -2
  276. package/dist/types/components/Select/SelectCore.d.ts +4 -1
  277. package/dist/types/components/Select/SelectFloating.d.ts +6 -1
  278. package/dist/types/components/Select/index.d.ts +1 -1
  279. package/dist/types/components/Sparkline/Sparkline.d.ts +31 -0
  280. package/dist/types/components/Sparkline/index.d.ts +3 -0
  281. package/dist/types/components/Sparkline/sparkline-styles.d.ts +26 -0
  282. package/dist/types/components/Spoiler/Spoiler.d.ts +20 -0
  283. package/dist/types/components/Spoiler/index.d.ts +2 -0
  284. package/dist/types/components/StatusBar/StatusBar.d.ts +18 -0
  285. package/dist/types/components/StatusBar/index.d.ts +3 -0
  286. package/dist/types/components/TabBar/TabBar.d.ts +23 -0
  287. package/dist/types/components/TabBar/index.d.ts +4 -0
  288. package/dist/types/components/Tabs/SortableTabList.d.ts +46 -0
  289. package/dist/types/components/Tabs/Tab.d.ts +54 -3
  290. package/dist/types/components/Tabs/TabList.d.ts +26 -2
  291. package/dist/types/components/Tabs/edge-scroll.d.ts +17 -0
  292. package/dist/types/components/Tabs/index.d.ts +3 -1
  293. package/dist/types/components/Tabs/tab-metas.d.ts +20 -0
  294. package/dist/types/components/TagGroup/SortableTagGroup.d.ts +5 -1
  295. package/dist/types/components/TagGroup/TagGroup.d.ts +24 -2
  296. package/dist/types/components/TagGroup/index.d.ts +1 -1
  297. package/dist/types/components/Toast/index.d.ts +2 -2
  298. package/dist/types/components/Toast/useToast.d.ts +1 -1
  299. package/dist/types/components/VirtualList/VirtualList.d.ts +20 -1
  300. package/dist/types/components/VisuallyHidden/VisuallyHidden.d.ts +4 -0
  301. package/dist/types/components/VisuallyHidden/index.d.ts +2 -0
  302. package/dist/types/components/Workbench/Workbench.d.ts +50 -0
  303. package/dist/types/components/Workbench/index.d.ts +2 -0
  304. package/dist/types/dates/adapter.d.ts +33 -6
  305. package/dist/types/dates/buddhist.d.ts +14 -0
  306. package/dist/types/dates/ethiopic.d.ts +15 -0
  307. package/dist/types/dates/hebrew.d.ts +19 -0
  308. package/dist/types/dates/index.d.ts +5 -0
  309. package/dist/types/dates/japanese.d.ts +16 -0
  310. package/dist/types/dates/persian.d.ts +18 -0
  311. package/dist/types/dates/registry.d.ts +1 -1
  312. package/dist/types/headless/index.d.ts +9 -0
  313. package/dist/types/hooks/index.d.ts +13 -0
  314. package/dist/types/hooks/useBusyPressable.d.ts +33 -0
  315. package/dist/types/hooks/useElementSize.d.ts +38 -0
  316. package/dist/types/hooks/useIdle.d.ts +45 -0
  317. package/dist/types/hooks/useMutationObserver.d.ts +35 -0
  318. package/dist/types/hooks/useNetwork.d.ts +31 -0
  319. package/dist/types/hooks/useOrientation.d.ts +23 -0
  320. package/dist/types/hooks/useResizeObserver.d.ts +48 -0
  321. package/dist/types/index.d.ts +37 -9
  322. package/dist/types/utils/sortable.d.ts +8 -1
  323. package/dist/types/utils/use-end-reached.d.ts +56 -0
  324. package/dist/types/utils/viewport.d.ts +12 -0
  325. package/dist/utils/sortable-shared.js +3 -3
  326. package/dist/utils/sortable.js +15 -14
  327. package/dist/utils/use-end-reached.js +46 -0
  328. package/dist/utils/viewport.js +20 -0
  329. package/package.json +13 -5
  330. /package/dist/types/components/Toast/{toast.d.ts → toast-channel.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
1
+ import type { ComponentPropsWithRef, ElementType, ReactNode } from 'react';
2
2
  /**
3
3
  * Component-level tokens: Button can be rethemed per-component by setting
4
4
  * `--haze-button-*` custom properties on `:root` or any ancestor —
@@ -6,10 +6,55 @@ import type { ComponentPropsWithoutRef } from 'react';
6
6
  * `--haze-button-radius` (fallbacks and usage documented in ./styles).
7
7
  * ButtonLink and Toggle wear the same skin and follow along.
8
8
  */
9
- type ButtonProps = {
9
+ type ButtonOwnProps = {
10
10
  variant?: 'solid' | 'outline' | 'ghost';
11
11
  size?: 'sm' | 'md' | 'lg';
12
12
  square?: boolean;
13
- } & Omit<ComponentPropsWithoutRef<'button'>, 'type'>;
14
- export default function Button({ variant, size: sizeProp, square, className, ...rest }: ButtonProps): import("react").JSX.Element;
15
- export type { ButtonProps };
13
+ /**
14
+ * Busy state: swaps the label ink for a spinner (the button keeps its
15
+ * width — the label still sizes the cell, just transparent), forces
16
+ * `disabled` so click/Enter/submit are blocked at the platform level,
17
+ * and sets `aria-busy`. Pass an object to replace the default spinner
18
+ * (`icon`) or the announced label text (`text` — visually replaces
19
+ * the children while busy, e.g. "Saving…").
20
+ *
21
+ * On anchors/custom components (`as`) there is no native `disabled`:
22
+ * busy reports `aria-disabled`/`aria-busy` and the skin drops pointer
23
+ * events, but keyboard users can still focus — pass `tabIndex={-1}`
24
+ * yourself to fully lock a busy link.
25
+ */
26
+ loading?: boolean | {
27
+ icon?: ReactNode;
28
+ text?: ReactNode;
29
+ };
30
+ };
31
+ /**
32
+ * MUI-OverridableComponent-shaped polymorphism: own props first, then
33
+ * the target element's props minus the colliding keys. The wiring
34
+ * (classes, data-slot, aria, type gating) always lands on the rendered
35
+ * element — the same "wiring wins" precedence as FormItem's `as`.
36
+ */
37
+ type ButtonProps<T extends ElementType = 'button'> = ButtonOwnProps & {
38
+ /**
39
+ * Render element. `'button'` (default) renders a native button;
40
+ * `'a'` renders an anchor wearing the button skin — link semantics
41
+ * (`href`, ⌘/middle-click, crawlers) without a ButtonLink import.
42
+ * Any component works the same way (e.g. a router Link) as long as it
43
+ * forwards props and ref to a DOM element.
44
+ *
45
+ * Element-specific defaults are gated: `type='button'` is only set on
46
+ * the native-button shape, so anchors never carry the attribute.
47
+ */
48
+ as?: T;
49
+ } & Omit<ComponentPropsWithRef<T>, keyof ButtonOwnProps | 'as' | 'type'>;
50
+ /**
51
+ * DOM contract: idle buttons render their `children` bare —
52
+ * byte-identical to the pre-`loading` DOM (no wrapper). Only a busy
53
+ * render wraps them in `<span data-slot='label'>` (transparent ink
54
+ * keeps sizing the control) and adds
55
+ * `<span data-slot='indicator' aria-hidden>` next to it; both unmount
56
+ * when the busy phase lifts. `button > *` selectors keep working for
57
+ * idle buttons; children remount across a busy toggle.
58
+ */
59
+ export default function Button<T extends ElementType = 'button'>({ variant, size: sizeProp, square, loading: loadingProp, as, className, children, disabled: disabledProp, ...rest }: ButtonProps<T>): import("react").JSX.Element;
60
+ export type { ButtonOwnProps, ButtonProps };
@@ -1,34 +1,46 @@
1
- import type { ComponentPropsWithoutRef } from 'react';
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
2
  /**
3
3
  * A real `<a>` with the full Button appearance — for navigation that
4
- * must look like a button. Rendering `as={Button}` puts `href` on a
5
- * `<button>` (an invalid attribute: no ⌘/middle-click, no crawlable
6
- * link); ButtonLink keeps the anchor semantics and wears Button's skin
7
- * (same `variant`/`size`/`square` props, same focus/disabled visual
8
- * states).
4
+ * must look like a button.
9
5
  *
10
- * Extends the native `<a>` attributes — everything not listed below is
11
- * spread onto the anchor, so routers composing their own `Link` through
12
- * an `as` prop can inject `href`, `onClick`, `target`, `rel` and
13
- * friends (NavLink-style).
6
+ * @deprecated Use `<Button as='a'>` instead — same skin, same anchor
7
+ * semantics, and the wiring is shared with Button (single code path per
8
+ * family). ButtonLink remains as a deprecated alias and will be removed
9
+ * in the next major.
14
10
  *
15
11
  * Anchors have no `disabled` attribute: report the state with
16
12
  * `aria-disabled` (and `tabIndex={-1}` to drop it from the focus
17
- * order) — ButtonLink styles `aria-disabled` exactly like Button's
13
+ * order) — the skin styles `aria-disabled` exactly like Button's
18
14
  * `:disabled`.
19
15
  *
20
- * Component-level theming tokens (`--haze-button-*`) apply here too —
21
- * this anchor wears the exact same skin as Button (see ./styles).
16
+ * Migration note (1.4 minor): since Button learned `as`, ButtonLink
17
+ * delegates rendering to Button. Idle anchors keep the flat DOM (no
18
+ * wrapper); only a busy render wraps the children in
19
+ * `<span data-slot='label'>` and adds
20
+ * `<span data-slot='indicator' aria-hidden>`. Props stay
21
+ * contract-equal: `variant` still defaults to `'solid'` (the Button
22
+ * tier never read config) and `size` still reads the `ButtonLink`
23
+ * config section first.
22
24
  */
23
25
  type ButtonLinkProps = {
24
26
  variant?: 'solid' | 'outline' | 'ghost';
25
27
  size?: 'sm' | 'md' | 'lg';
26
28
  square?: boolean;
29
+ /** Busy state — same visual contract as Button's `loading`. */
30
+ loading?: boolean | {
31
+ icon?: ReactNode;
32
+ text?: ReactNode;
33
+ };
27
34
  } & ComponentPropsWithoutRef<'a'>;
28
- declare const _default: import("react").ForwardRefExoticComponent<{
35
+ declare const ButtonLink: import("react").ForwardRefExoticComponent<{
29
36
  variant?: "solid" | "outline" | "ghost";
30
37
  size?: "sm" | "md" | "lg";
31
38
  square?: boolean;
39
+ /** Busy state — same visual contract as Button's `loading`. */
40
+ loading?: boolean | {
41
+ icon?: ReactNode;
42
+ text?: ReactNode;
43
+ };
32
44
  } & Omit<import("react").DetailedHTMLProps<import("react").AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & import("react").RefAttributes<HTMLAnchorElement>>;
33
- export default _default;
45
+ export default ButtonLink;
34
46
  export type { ButtonLinkProps };
@@ -44,3 +44,37 @@ export declare const squareSizes: {
44
44
  readonly md: import("@linaria/core").LinariaClassName;
45
45
  readonly lg: import("@linaria/core").LinariaClassName;
46
46
  };
47
+ /**
48
+ * Layout conduit for the button's children during a busy render. The
49
+ * span only mounts while busy (idle buttons spread children directly
50
+ * under the row, byte-identical to the pre-`loading` DOM); it exists so
51
+ * the children can be gridded against the indicator. This class
52
+ * replicates the parent flex context (same gap, same alignment) inside
53
+ * the shared grid cell.
54
+ */
55
+ export declare const label: import("@linaria/core").LinariaClassName;
56
+ /**
57
+ * Anchor reset for the button skin worn by an `<a>` (Button `as='a'`
58
+ * and ButtonLink): anchors bring a UA underline; a button-looking link
59
+ * resets it (variants already own the color).
60
+ *
61
+ * Anchor-shaped disabled: Button's :disabled has no meaning on an `<a>`,
62
+ * so the state is driven by `aria-disabled` (callers pair it with
63
+ * tabIndex={-1} to drop the link from the focus order). Busy anchors
64
+ * skip the opacity dim — like Button's busy state they should look
65
+ * active, not dead — while keeping click suppression.
66
+ */
67
+ export declare const link: import("@linaria/core").LinariaClassName;
68
+ /**
69
+ * Busy state (Button `loading`). Grid stacking keeps the busy swap
70
+ * width-stable: the label span and the indicator span share
71
+ * grid-area 1/1 (gap is inert across a shared cell), so the widest of
72
+ * the two drives the cell and the label box keeps sizing the control.
73
+ * `color: transparent` hides the label's ink without removing it from
74
+ * the accessibility tree — visibility: hidden would strip the button's
75
+ * accessible name mid-request. The indicator sits on top, centered.
76
+ *
77
+ * cursor: progress reads "working" instead of the base's not-allowed
78
+ * (the control is temporarily unavailable, not forbidden).
79
+ */
80
+ export declare const loading: import("@linaria/core").LinariaClassName;
@@ -27,6 +27,16 @@ type ComboboxOptionData = {
27
27
  */
28
28
  group?: string;
29
29
  };
30
+ /**
31
+ * Semantic slot classes for Combobox (keys follow the data-slot names;
32
+ * see the `classNames` prop on {@link ComboboxProps}).
33
+ */
34
+ type ComboboxClassNames = {
35
+ root?: string;
36
+ input?: string;
37
+ item?: string;
38
+ empty?: string;
39
+ };
30
40
  type ComboboxProps = {
31
41
  /**
32
42
  * `string` in single mode, `string[]` when `multiple` is set. The
@@ -111,6 +121,14 @@ type ComboboxProps = {
111
121
  */
112
122
  virtualized?: boolean | ComboboxVirtualizedConfig;
113
123
  className?: string;
124
+ /**
125
+ * Slot classes (AntD v6 `classNames` shape), following the data-slot
126
+ * names: `root` (the positioning wrapper), `input` (the combobox
127
+ * field), `item` (each option row), `empty` (the no-match state
128
+ * block). A ConfigProvider `Combobox.classNames` section merges under
129
+ * the prop, per key.
130
+ */
131
+ classNames?: ComboboxClassNames;
114
132
  /**
115
133
  * Forwarded to the combobox `<input>` — the focusable field in both
116
134
  * single and multiple mode (multiple mode's chip box wraps it but is
@@ -119,5 +137,5 @@ type ComboboxProps = {
119
137
  */
120
138
  ref?: Ref<HTMLInputElement>;
121
139
  };
122
- export default function Combobox({ value: valueControl, open: openControl, options, multiple, onValuesChange, creatable, onCreate, onSearch, loading, empty, highlightMatches, maxHeight, placeholder, virtualThreshold, virtualized: virtualizedProp, className, ref, }: ComboboxProps): import("react").JSX.Element;
123
- export type { ComboboxProps, ComboboxVirtualizedConfig, ComboboxOptionData };
140
+ export default function Combobox({ value: valueControl, open: openControl, options, multiple, onValuesChange, creatable, onCreate, onSearch, loading, empty, highlightMatches, maxHeight, placeholder, virtualThreshold, virtualized: virtualizedProp, className, classNames, ref, }: ComboboxProps): import("react").JSX.Element;
141
+ export type { ComboboxClassNames, ComboboxProps, ComboboxVirtualizedConfig, ComboboxOptionData };
@@ -1,5 +1,5 @@
1
1
  export { default as Combobox } from './Combobox';
2
- export type { ComboboxProps, ComboboxVirtualizedConfig, ComboboxOptionData } from './Combobox';
2
+ export type { ComboboxClassNames, ComboboxProps, ComboboxVirtualizedConfig, ComboboxOptionData } from './Combobox';
3
3
  export { default as ComboboxOption } from './ComboboxOption';
4
4
  export type { ComboboxOptionProps } from './ComboboxOption';
5
5
  export { default as ComboboxGroup } from './ComboboxGroup';
@@ -1,3 +1,7 @@
1
+ import type { DrawerClassNames } from '../Drawer/Drawer';
2
+ import type { SelectClassNames } from '../Select/Select';
3
+ import type { ComboboxClassNames } from '../Combobox/Combobox';
4
+ import type { TagGroupClassNames } from '../TagGroup/TagGroup';
1
5
  import type { ToastPlacement } from '../Toast/ToastContainer';
2
6
  /**
3
7
  * Component default overrides, keyed by the exported component name —
@@ -48,6 +52,22 @@ type HazeConfig = {
48
52
  */
49
53
  closeDelay?: number;
50
54
  };
55
+ /** `Drawer` slot classes — merged under an explicit `classNames` prop. */
56
+ Drawer?: {
57
+ classNames?: DrawerClassNames;
58
+ };
59
+ /** `Select` slot classes — merged under an explicit `classNames` prop. */
60
+ Select?: {
61
+ classNames?: SelectClassNames;
62
+ };
63
+ /** `Combobox` slot classes — merged under an explicit `classNames` prop. */
64
+ Combobox?: {
65
+ classNames?: ComboboxClassNames;
66
+ };
67
+ /** `TagGroup` slot classes — merged under an explicit `classNames` prop. */
68
+ TagGroup?: {
69
+ classNames?: TagGroupClassNames;
70
+ };
51
71
  };
52
72
  /**
53
73
  * The fully merged config visible below a `ConfigProvider`. The
@@ -6,7 +6,7 @@ type ConfirmDialogProps = {
6
6
  onConfirm?: () => void;
7
7
  onCancel?: () => void;
8
8
  title?: ReactNode;
9
- children: ReactNode;
9
+ children?: ReactNode;
10
10
  confirmText?: string;
11
11
  cancelText?: string;
12
12
  variant?: 'default' | 'danger';
@@ -0,0 +1,33 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { ConfirmDialogProps } from './ConfirmDialog';
3
+ /**
4
+ * Options for the imperative confirm — {@link ConfirmDialogProps} minus
5
+ * the wired callbacks (the promise carries the answer, so `onClose`/
6
+ * `onConfirm`/`onCancel` are derived paths, not inputs).
7
+ */
8
+ type ConfirmOptions = Omit<ConfirmDialogProps, 'onClose' | 'onConfirm' | 'onCancel' | 'open' | 'children'> & {
9
+ /** Dialog body copy. */
10
+ children: ReactNode;
11
+ /** Fired when the user confirms (before the promise resolves). */
12
+ onConfirm?: () => void;
13
+ /** Fired when the user cancels or dismisses (before rejection). */
14
+ onCancel?: () => void;
15
+ };
16
+ /**
17
+ * Imperative promise-based confirm dialog, the AntD `Modal.confirm`
18
+ * shape: mounts a fresh ConfirmDialog into `document.body`, resolves
19
+ * with `true` on confirm, `false` on cancel/dismiss, and unmounts on
20
+ * settle. Safe to call outside React render (event handlers, async
21
+ * flows); not safe during SSR (no-op `false`, no mount).
22
+ *
23
+ * ```ts
24
+ * const ok = await confirm({ title: 'Discard draft?', children: '…', variant: 'danger' });
25
+ * if (ok) discard();
26
+ * ```
27
+ *
28
+ * Each call owns its own React root — multiple confirms stack (they
29
+ * open as sibling dialogs; the top layer negotiates them).
30
+ */
31
+ declare function confirm(options: ConfirmOptions): Promise<boolean>;
32
+ export { confirm };
33
+ export type { ConfirmOptions };
@@ -1,2 +1,4 @@
1
1
  export { default as ConfirmDialog } from './ConfirmDialog';
2
2
  export type { ConfirmDialogProps } from './ConfirmDialog';
3
+ export { confirm } from './confirm';
4
+ export type { ConfirmOptions } from './confirm';
@@ -1,7 +1,16 @@
1
1
  import type { ReactNode } from 'react';
2
2
  type ConversationListProps = {
3
3
  children: ReactNode;
4
+ /**
5
+ * Infinite-scroll trigger on the list's scrollport: fired when the
6
+ * scroll position comes within 200px of the end. Entering the zone
7
+ * fires once; staying inside does not re-fire; scrolling back out
8
+ * re-arms, and growth of the rendered children re-arms too, so a
9
+ * still-short list chains straight into the next page. Typical use:
10
+ * append the next page of conversations. Ignored when not provided.
11
+ */
12
+ onLoadMore?: () => void;
4
13
  className?: string;
5
14
  };
6
- export default function ConversationList({ children, className }: ConversationListProps): import("react").JSX.Element;
15
+ export default function ConversationList({ children, onLoadMore, className }: ConversationListProps): import("react").JSX.Element;
7
16
  export type { ConversationListProps };
@@ -0,0 +1,36 @@
1
+ import type { ControlOrValue } from 'react-use-control';
2
+ import type { DatepickerPreset } from '../Datepicker/DatepickerCore';
3
+ import type { CalendarCellRender } from '../Calendar/Calendar';
4
+ import type { Ref } from 'react';
5
+ /**
6
+ * Date+time picker (the Mantine DateTimePicker niche): a date calendar
7
+ * with a time field below it in one popover. This is a thin sugar over
8
+ * Datepicker — `picker` is fixed to `date` (date+time values are apples
9
+ * and day-granularity oranges for week/month/quarter/year modes) and
10
+ * `showTime` defaults to `true`; {@link showSeconds} flips it to the
11
+ * seconds-resolution form.
12
+ *
13
+ * Value serializes as `"YYYY-MM-DD HH:mm"` (or `"YYYY-MM-DD HH:mm:ss"`
14
+ * with `showSeconds`), matching Datepicker's showTime contract.
15
+ */
16
+ type DateTimePickerProps = {
17
+ value?: ControlOrValue<string>;
18
+ open?: ControlOrValue<boolean>;
19
+ min?: string;
20
+ max?: string;
21
+ /** Disables individual dates on the calendar panel (day granularity). */
22
+ disabledDate?: (date: Date) => boolean;
23
+ /** Shortcut rows at the top of the panel. */
24
+ presets?: DatepickerPreset[];
25
+ /** Include seconds in the time field (value gains a `:ss` part). */
26
+ showSeconds?: boolean;
27
+ locale?: string;
28
+ weekStartsOn?: 0 | 1;
29
+ cellRender?: CalendarCellRender;
30
+ placeholder?: string;
31
+ className?: string;
32
+ /** Forwarded to the trigger `<input>`. */
33
+ ref?: Ref<HTMLInputElement>;
34
+ };
35
+ export default function DateTimePicker({ value: valueControl, open: openControl, min, max, disabledDate, presets, showSeconds, locale, weekStartsOn, cellRender, placeholder, className, ref, }: DateTimePickerProps): import("react").JSX.Element;
36
+ export type { DateTimePickerProps };
@@ -0,0 +1,2 @@
1
+ export { default as DateTimePicker } from './DateTimePicker';
2
+ export type { DateTimePickerProps } from './DateTimePicker';
@@ -1,4 +1,4 @@
1
- import type { Ref } from 'react';
1
+ import type { ComponentPropsWithoutRef, Ref } from 'react';
2
2
  import type { ControlOrValue } from 'react-use-control';
3
3
  import type { CalendarCellRender, CalendarPickerMode } from '../Calendar/Calendar';
4
4
  import type { DatepickerPreset } from './DatepickerCore';
@@ -41,6 +41,6 @@ type DatepickerProps = {
41
41
  /** Forwarded to the trigger `<input>` (not the wrapper div) — the
42
42
  * element form bridges and `ref.current.focus()` reach. */
43
43
  ref?: Ref<HTMLInputElement>;
44
- };
45
- export default function Datepicker({ value: valueControl, open: openControl, picker, min, max, disabledDate, presets, showTime, format, parse, locale, weekStartsOn, cellRender, placeholder, className, ref, }: DatepickerProps): import("react").JSX.Element;
44
+ } & Omit<ComponentPropsWithoutRef<'div'>, 'onChange' | 'children'>;
45
+ export default function Datepicker({ value: valueControl, open: openControl, picker, min, max, disabledDate, presets, showTime, format, parse, locale, weekStartsOn, cellRender, placeholder, className, ref, ...rest }: DatepickerProps): import("react").JSX.Element;
46
46
  export type { DatepickerProps };
@@ -1,4 +1,4 @@
1
- import type { Ref } from 'react';
1
+ import type { ComponentPropsWithoutRef, Ref } from 'react';
2
2
  import type { CalendarCellRender, CalendarPickerMode } from '../Calendar/Calendar';
3
3
  /** One shortcut row at the top of the dropdown panel: clicking applies
4
4
  * `value` (serialized per `picker`) and closes the panel. */
@@ -66,6 +66,6 @@ type DatepickerCoreProps = {
66
66
  cellRender?: CalendarCellRender;
67
67
  /** Forwarded to the trigger `<input>` (not the wrapper div). */
68
68
  ref?: Ref<HTMLInputElement>;
69
- };
70
- export default function DatepickerCore({ value, onChange, open, onOpenChange, picker, min, max, disabledDate, presets, showTime, format, parse, locale, weekStartsOn, cellRender, placeholder, className, ref, }: DatepickerCoreProps): import("react").JSX.Element;
69
+ } & Omit<ComponentPropsWithoutRef<'div'>, 'onChange' | 'children'>;
70
+ export default function DatepickerCore({ value, onChange, open, onOpenChange, picker, min, max, disabledDate, presets, showTime, format, parse, locale, weekStartsOn, cellRender, placeholder, className, ref, ...rest }: DatepickerCoreProps): import("react").JSX.Element;
71
71
  export type { DatepickerCoreProps, DatepickerPreset };
@@ -18,6 +18,17 @@ type DrawerHandle = {
18
18
  /** Focus the element that held focus when the drawer last opened. */
19
19
  focusTrigger: () => void;
20
20
  };
21
+ /**
22
+ * Semantic slot classes (AntD v6 `classNames` shape): keys land classes
23
+ * on Drawer's structural parts. Drawer renders a single `<dialog>` —
24
+ * `content` is that element's part (the placement class and any
25
+ * `className` land on the same node). A `classNames` prop set via
26
+ * ConfigProvider merges under the prop's keys.
27
+ */
28
+ type DrawerClassNames = {
29
+ /** The `<dialog>` panel itself (data-slot='content'). */
30
+ content?: string;
31
+ };
21
32
  type DrawerProps = {
22
33
  open?: ControlOrValue<boolean>;
23
34
  placement?: 'left' | 'right' | 'top' | 'bottom';
@@ -34,8 +45,10 @@ type DrawerProps = {
34
45
  */
35
46
  viewTransition?: boolean;
36
47
  className?: string;
48
+ /** Slot classes (see {@link DrawerClassNames}). */
49
+ classNames?: DrawerClassNames;
37
50
  children: ReactNode;
38
51
  ref?: Ref<DrawerHandle>;
39
52
  };
40
- export default function Drawer({ open: openControl, placement, onClose, viewTransition, className, children, ref, }: DrawerProps): import("react").JSX.Element;
41
- export type { DrawerProps, DrawerHandle };
53
+ export default function Drawer({ open: openControl, placement, onClose, viewTransition, className, classNames, children, ref, }: DrawerProps): import("react").JSX.Element;
54
+ export type { DrawerClassNames, DrawerProps, DrawerHandle };
@@ -1,2 +1,2 @@
1
1
  export { default as Drawer } from './Drawer';
2
- export type { DrawerProps, DrawerHandle } from './Drawer';
2
+ export type { DrawerClassNames, DrawerProps, DrawerHandle } from './Drawer';
@@ -0,0 +1,16 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ /**
3
+ * A semantic `<fieldset>` + `<legend>` grouping for form sections —
4
+ * the native grouping HTML was made for, skinned. Screen readers name
5
+ * the group from the legend on focus entry into any control inside,
6
+ * which is the whole point over a bare div+heading.
7
+ */
8
+ type FieldsetProps = {
9
+ /** The group's legend text/content — rendered inside `<legend>` so
10
+ * assistive tech names the whole group from it. */
11
+ legend?: ReactNode;
12
+ /** Disables every form control inside (native fieldset semantics). */
13
+ disabled?: boolean;
14
+ } & Omit<ComponentPropsWithoutRef<'fieldset'>, 'disabled'>;
15
+ export default function Fieldset({ legend: legendContent, disabled, className, children, ...rest }: FieldsetProps): import("react").JSX.Element;
16
+ export type { FieldsetProps };
@@ -0,0 +1,2 @@
1
+ export { default as Fieldset } from './Fieldset';
2
+ export type { FieldsetProps } from './Fieldset';
@@ -0,0 +1,27 @@
1
+ import type { ComponentPropsWithoutRef } from 'react';
2
+ type HighlightProps = {
3
+ /** The text to scan. Rendering stays text-level: only matched
4
+ * substrings become `<mark>` children, everything else stays text
5
+ * nodes — no innerHTML, no injection surface. */
6
+ children: string;
7
+ /** One or more substrings to mark (empty strings are ignored). */
8
+ highlight: string | string[];
9
+ /**
10
+ * Case sensitivity of the match. Default `false` (the search-box
11
+ * convention: queries match regardless of letter case).
12
+ */
13
+ caseSensitive?: boolean;
14
+ /** Mark tone applied to every matched run. */
15
+ color?: 'warning' | 'primary' | 'success' | 'danger';
16
+ } & Omit<ComponentPropsWithoutRef<'mark'>, 'children' | 'color'>;
17
+ /**
18
+ * Highlights matching substrings inside a text run by wrapping them in
19
+ * {@link Mark} elements — the search-results affordance. Pure text in,
20
+ * text + marks out; non-string children are rejected by the type.
21
+ *
22
+ * Renders plain text (no wrapper DOM of its own): the outer container
23
+ * is a fragment and each match is a `<Mark data-slot="mark">`, so the
24
+ * data-slot namespace stays the shared `mark` slot.
25
+ */
26
+ export default function Highlight({ children, highlight, caseSensitive, color, ...rest }: HighlightProps): import("react").JSX.Element;
27
+ export type { HighlightProps };
@@ -0,0 +1,2 @@
1
+ export { default as Highlight } from './Highlight';
2
+ export type { HighlightProps } from './Highlight';
@@ -0,0 +1,24 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ /**
3
+ * Corner badge attached to a host element (avatar, icon button, tab) —
4
+ * the notification-dot affordance. Render without `label` for a plain
5
+ * dot; pass `label` for a count badge.
6
+ */
7
+ type IndicatorProps = {
8
+ /**
9
+ * Badge content. Omitted (undefined / null, or render-empty values
10
+ * like false / '') renders a dot (a bare status marker); a value
11
+ * renders a count badge. Strings longer than `max`-formatted are the
12
+ * caller's concern (e.g. pass "99+").
13
+ */
14
+ label?: ReactNode;
15
+ /** Zero/out semantics: number 0 shows by default in badge mode. */
16
+ showZero?: boolean;
17
+ /** Badge tone. */
18
+ color?: 'primary' | 'danger' | 'success' | 'warning';
19
+ /** Corner placement of the badge. */
20
+ position?: 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';
21
+ children: ReactNode;
22
+ } & Omit<ComponentPropsWithoutRef<'span'>, 'color' | 'content'>;
23
+ export default function Indicator({ label, showZero, color, position, className, children, ...rest }: IndicatorProps): import("react").JSX.Element;
24
+ export type { IndicatorProps };
@@ -0,0 +1,2 @@
1
+ export { default as Indicator } from './Indicator';
2
+ export type { IndicatorProps } from './Indicator';
@@ -1,11 +1,17 @@
1
- import type { ComponentPropsWithoutRef, Ref } from 'react';
1
+ import type { ComponentPropsWithoutRef, ReactNode, Ref } from 'react';
2
2
  import type { ControlOrValue } from 'react-use-control';
3
3
  type InputProps = {
4
4
  value?: ControlOrValue<string>;
5
5
  size?: 'sm' | 'md' | 'lg';
6
+ /** Content rendered inside the field at the leading edge (icon,
7
+ * currency glyph, …). See InputCore for the layout contract. */
8
+ leftSection?: ReactNode;
9
+ /** Same as `leftSection`, at the trailing edge — the conventional
10
+ * home of clear buttons and visibility toggles. */
11
+ rightSection?: ReactNode;
6
12
  /** Forwarded to the underlying `<input>` — the element form bridges
7
13
  * (react-f0rm `focusRef`), tests and `ref.current.focus()` reach. */
8
14
  ref?: Ref<HTMLInputElement>;
9
15
  } & Omit<ComponentPropsWithoutRef<'input'>, 'value' | 'size'>;
10
- export default function Input({ value: valueControl, size, className, onChange, ref, ...rest }: InputProps): import("react").JSX.Element;
16
+ export default function Input({ value: valueControl, size, className, leftSection, rightSection, onChange, ref, ...rest }: InputProps): import("react").JSX.Element;
11
17
  export type { InputProps };
@@ -1,4 +1,4 @@
1
- import type { ComponentPropsWithoutRef, Ref } from 'react';
1
+ import type { ComponentPropsWithoutRef, ReactNode, Ref } from 'react';
2
2
  type InputCoreProps = {
3
3
  value: string;
4
4
  onChange: (value: string) => void;
@@ -8,8 +8,17 @@ type InputCoreProps = {
8
8
  onNativeChange?: ComponentPropsWithoutRef<'input'>['onChange'];
9
9
  size?: 'sm' | 'md' | 'lg';
10
10
  className?: string;
11
+ /** Content rendered inside the field, before the text — an icon, a
12
+ * currency glyph, a search marker. Layout sits in a flex row with the
13
+ * input; the field keeps its border and focus ring (the box stays
14
+ * one visual unit). Interactive children must re-enable pointer
15
+ * events themselves (see PasswordInput's visibility toggle). */
16
+ leftSection?: ReactNode;
17
+ /** Same as {@link InputCoreProps.leftSection}, at the trailing edge —
18
+ * the conventional home of clear buttons and visibility toggles. */
19
+ rightSection?: ReactNode;
11
20
  /** Forwarded to the `<input>` element. */
12
21
  ref?: Ref<HTMLInputElement>;
13
22
  } & Omit<ComponentPropsWithoutRef<'input'>, 'value' | 'onChange' | 'size'>;
14
- export default function InputCore({ value, onChange, onNativeChange, size, className, ref, ...rest }: InputCoreProps): import("react").JSX.Element;
23
+ export default function InputCore({ value, onChange, onNativeChange, size, className, leftSection, rightSection, ref, ...rest }: InputCoreProps): import("react").JSX.Element;
15
24
  export type { InputCoreProps };
@@ -3,6 +3,15 @@ type ListProps = {
3
3
  variant?: 'unordered' | 'ordered' | 'none';
4
4
  className?: string;
5
5
  children: ReactNode;
6
+ /**
7
+ * Explicit load-more area rendered as the final list item. Zero
8
+ * policy: the consumer decides what appears — a "Load more" button, a
9
+ * skeleton, a spinner. Pair it with whatever triggers the next page:
10
+ * the consumer's own scroll logic (e.g. VirtualList `onEndReached`
11
+ * driving the data) or a plain button inside the slot; the slot itself
12
+ * has no behavior.
13
+ */
14
+ loadMore?: ReactNode;
6
15
  };
7
- export default function List({ variant, className, children, }: ListProps): import("react").JSX.Element;
16
+ export default function List({ variant, className, children, loadMore, }: ListProps): import("react").JSX.Element;
8
17
  export type { ListProps };
@@ -0,0 +1,25 @@
1
+ import type { ComponentPropsWithoutRef, ReactNode } from 'react';
2
+ /**
3
+ * Container-level loading state: dims the wrapped content and centers a
4
+ * spinner above it. The content stays in the tree and keeps its place
5
+ * in the focus order — deliberately, so focus survives the overlay
6
+ * (`aria-busy` on the wrapper is the AT channel, same as the Mantine
7
+ * equivalent). The veil blocks pointer and selection, but nothing here
8
+ * is modal: keyboard users can still reach the content. Consumers that
9
+ * need a full lock gate their own handlers on the same `visible` prop
10
+ * (or host the content in an `inert` subtree).
11
+ */
12
+ type LoadingOverlayProps = {
13
+ /** Whether the overlay is shown. */
14
+ visible?: boolean;
15
+ /** Optional announcement text rendered inside a visually-paired label
16
+ * under the spinner for sighted context. */
17
+ label?: ReactNode;
18
+ /** Swap the default Spinner. */
19
+ loader?: ReactNode;
20
+ /** Spinner size (when the default loader is used). */
21
+ spinnerSize?: 'sm' | 'md' | 'lg';
22
+ children: ReactNode;
23
+ } & ComponentPropsWithoutRef<'div'>;
24
+ export default function LoadingOverlay({ visible, label, loader, spinnerSize, className, children, ...rest }: LoadingOverlayProps): import("react").JSX.Element;
25
+ export type { LoadingOverlayProps };
@@ -0,0 +1,2 @@
1
+ export { default as LoadingOverlay } from './LoadingOverlay';
2
+ export type { LoadingOverlayProps } from './LoadingOverlay';
@@ -45,6 +45,10 @@ declare const defaultStrings: {
45
45
  create: string;
46
46
  noResults: string;
47
47
  };
48
+ spoiler: {
49
+ showMore: string;
50
+ showLess: string;
51
+ };
48
52
  command: {
49
53
  noResults: string;
50
54
  };
@@ -232,6 +236,13 @@ declare const defaultStrings: {
232
236
  streamingText: {
233
237
  generating: string;
234
238
  };
239
+ tabs: {
240
+ close: string;
241
+ moreTabs: string;
242
+ statusDirty: string;
243
+ statusError: string;
244
+ statusSyncing: string;
245
+ };
235
246
  tag: {
236
247
  remove: string;
237
248
  };