@jfrader/ui 0.4.0 → 0.5.1

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 (307) hide show
  1. package/README.md +2 -0
  2. package/dist/accordion-DLul6vIl.js +205 -0
  3. package/dist/accordion.js +1 -1
  4. package/dist/{alert-BBqaKI4k.js → alert-DS_einpy.js} +1 -1
  5. package/dist/alert.js +1 -1
  6. package/dist/announcement-bar-Dlbq5-9D.js +382 -0
  7. package/dist/announcement-bar.js +2 -0
  8. package/dist/avatar-CaGJHy1N.js +145 -0
  9. package/dist/avatar-group-M1opAQEG.js +138 -0
  10. package/dist/avatar-group.js +2 -0
  11. package/dist/avatar.js +1 -1
  12. package/dist/badge-CjM5Agqk.js +119 -0
  13. package/dist/badge.js +1 -1
  14. package/dist/bottom-sheet-DjZOPq4k.js +674 -0
  15. package/dist/bottom-sheet.js +2 -0
  16. package/dist/{breadcrumbs-DVAOxfvL.js → breadcrumbs-BDK_LiwH.js} +11 -4
  17. package/dist/breadcrumbs.js +1 -1
  18. package/dist/{button-P2e7_44z.js → button-NLY0h6EJ.js} +8 -8
  19. package/dist/button.js +1 -1
  20. package/dist/calendar-BzJdv_SZ.js +449 -0
  21. package/dist/calendar.js +1 -1
  22. package/dist/card-Ca4KQKYQ.js +154 -0
  23. package/dist/card.js +1 -1
  24. package/dist/carousel-B7OrvD6J.js +474 -0
  25. package/dist/carousel.js +2 -0
  26. package/dist/{checkbox-COYG6L7d.js → checkbox-DKSzExj2.js} +17 -16
  27. package/dist/checkbox.js +1 -1
  28. package/dist/chip-group-DjQ0_6Y9.js +290 -0
  29. package/dist/chip-group.js +2 -0
  30. package/dist/code-block/shiki.js +147 -0
  31. package/dist/code-block-B5we2lZa.js +293 -0
  32. package/dist/code-block.js +2 -0
  33. package/dist/collection-registry-k6JcD3Jr.js +44 -0
  34. package/dist/combobox-DFFqOBCi.js +339 -0
  35. package/dist/combobox.js +1 -1
  36. package/dist/command-palette-BmQu2w4H.js +391 -0
  37. package/dist/command-palette.js +1 -1
  38. package/dist/comment-thread-ASaXDcGo.js +1410 -0
  39. package/dist/comment-thread.js +2 -0
  40. package/dist/context-menu-__1c2Dk9.js +370 -0
  41. package/dist/context-menu.js +2 -0
  42. package/dist/copy-button-DCSLcYS-.js +252 -0
  43. package/dist/copy-button.js +2 -0
  44. package/dist/countdown-Dp_TD1VP.js +293 -0
  45. package/dist/countdown.js +2 -0
  46. package/dist/date-picker-BiPN7yeK.js +255 -0
  47. package/dist/date-picker.js +1 -1
  48. package/dist/date-range-picker-DQpUeKqV.js +570 -0
  49. package/dist/date-range-picker.js +2 -0
  50. package/dist/{dialog-xaydbXl2.js → dialog-BX1zYMs-.js} +21 -20
  51. package/dist/dialog.js +1 -1
  52. package/dist/{divider-DYoJf0I_.js → divider-Cp7aNbhM.js} +21 -20
  53. package/dist/divider.js +1 -1
  54. package/dist/drawer-DsASTiP-.js +553 -0
  55. package/dist/drawer.js +2 -0
  56. package/dist/elastic-slider-BG6K019r.js +395 -0
  57. package/dist/elastic-slider.js +2 -0
  58. package/dist/empty-state-CDgrjPPf.js +142 -0
  59. package/dist/empty-state.js +2 -0
  60. package/dist/expandable-card-rUATve0o.js +347 -0
  61. package/dist/expandable-card.js +2 -0
  62. package/dist/expanding-search-BxOwtdwt.js +238 -0
  63. package/dist/expanding-search.js +2 -0
  64. package/dist/field-anatomy-COVdNpf5.js +84 -0
  65. package/dist/file-dropzone-BuXm3Tea.js +457 -0
  66. package/dist/file-dropzone.js +2 -0
  67. package/dist/filter-toolbar-Cy5Hqur-.js +314 -0
  68. package/dist/filter-toolbar.js +2 -0
  69. package/dist/hold-to-confirm-DjB2EVjM.js +294 -0
  70. package/dist/hold-to-confirm.js +2 -0
  71. package/dist/hover-card-CoMJKg1g.js +347 -0
  72. package/dist/hover-card.js +2 -0
  73. package/dist/image-compare-BxY8Ykzt.js +415 -0
  74. package/dist/image-compare.js +2 -0
  75. package/dist/index.js +84 -38
  76. package/dist/inline-edit-C0eeml65.js +535 -0
  77. package/dist/inline-edit.js +2 -0
  78. package/dist/input-control-DmMuAuPS.js +34 -0
  79. package/dist/json-viewer-DgWqyU75.js +802 -0
  80. package/dist/json-viewer.js +2 -0
  81. package/dist/listbox-style-WX-RASp1.js +59 -0
  82. package/dist/{media-D_eA_I-e.js → media-8yrN85VT.js} +2 -2
  83. package/dist/mention-input-sq61si9L.js +600 -0
  84. package/dist/mention-input.js +2 -0
  85. package/dist/menu-DDKgmK2F.js +295 -0
  86. package/dist/menu.js +1 -1
  87. package/dist/metric-card--lVTz5Wn.js +118 -0
  88. package/dist/metric-card.js +2 -0
  89. package/dist/multi-select-DG1BCFX7.js +598 -0
  90. package/dist/multi-select.js +2 -0
  91. package/dist/{navigation-DhnKriOp.js → navigation-CC26JDr-.js} +24 -18
  92. package/dist/navigation.js +1 -1
  93. package/dist/overlay-layer-qEbpEtb8.js +78 -0
  94. package/dist/overlay-portal-C4JZFq2M.js +15 -0
  95. package/dist/{pagination-DYdwsxwe.js → pagination-BfkeWbmP.js} +24 -23
  96. package/dist/pagination.js +1 -1
  97. package/dist/password-field-03pWRkuY.js +250 -0
  98. package/dist/password-field.js +2 -0
  99. package/dist/pill-BaS-uIbn.js +58 -0
  100. package/dist/pill.js +1 -1
  101. package/dist/popover-CErIw2q3.js +125 -0
  102. package/dist/popover.js +1 -1
  103. package/dist/{progress-BpJswTG4.js → progress-DAQkfhPd.js} +5 -5
  104. package/dist/progress.js +1 -1
  105. package/dist/radio-cards-Cu9cBssN.js +456 -0
  106. package/dist/radio-cards.js +2 -0
  107. package/dist/{radio-group-Ce0_IWQr.js → radio-group-TIK0-iPX.js} +22 -19
  108. package/dist/radio-group.js +1 -1
  109. package/dist/resizable-panels-DUpQEpwG.js +520 -0
  110. package/dist/resizable-panels.js +2 -0
  111. package/dist/scroll-area-CcZyiSOQ.js +371 -0
  112. package/dist/scroll-area.js +2 -0
  113. package/dist/search-field-DMvho0KQ.js +274 -0
  114. package/dist/search-field.js +2 -0
  115. package/dist/segmented-control-8ZUGnsZm.js +327 -0
  116. package/dist/segmented-control.js +2 -0
  117. package/dist/select-D5rhJ8gi.js +293 -0
  118. package/dist/select.js +1 -1
  119. package/dist/signature-pad-_bTeguN9.js +645 -0
  120. package/dist/signature-pad.js +2 -0
  121. package/dist/{skeleton-OoFlOEXO.js → skeleton-XQQDkCHd.js} +1 -1
  122. package/dist/skeleton.js +1 -1
  123. package/dist/slider-DVG6-Awh.js +308 -0
  124. package/dist/slider.js +2 -0
  125. package/dist/sortable-data-table-CYKT_Ng7.js +365 -0
  126. package/dist/sortable-data-table.js +2 -0
  127. package/dist/{spinner-C2YDoiMn.js → spinner-DtxvDPdM.js} +1 -1
  128. package/dist/spinner.js +1 -1
  129. package/dist/split-button-BCw4zZom.js +262 -0
  130. package/dist/split-button.js +2 -0
  131. package/dist/stepper-CruHbXxX.js +480 -0
  132. package/dist/stepper.js +2 -0
  133. package/dist/swipe-actions-CBuJREU1.js +420 -0
  134. package/dist/swipe-actions.js +2 -0
  135. package/dist/switch-C1WrKrf-.js +145 -0
  136. package/dist/switch.js +1 -1
  137. package/dist/tabs-XluwRjgg.js +210 -0
  138. package/dist/tabs.js +1 -1
  139. package/dist/tag-input-DSRCyrX2.js +418 -0
  140. package/dist/tag-input.js +2 -0
  141. package/dist/{text-field-D60ok14S.js → text-field-hU72iSVS.js} +20 -17
  142. package/dist/text-field.js +1 -1
  143. package/dist/{textarea-DyfjtP0A.js → textarea-3k4Y0QQ3.js} +23 -20
  144. package/dist/textarea.js +1 -1
  145. package/dist/theme-root.js +1 -1
  146. package/dist/theme-switch-C505TtU8.js +166 -0
  147. package/dist/theme-switch.js +2 -0
  148. package/dist/time-picker-CPlhW0tr.js +311 -0
  149. package/dist/time-picker.js +2 -0
  150. package/dist/timeline-B0uAAVfT.js +624 -0
  151. package/dist/timeline.js +2 -0
  152. package/dist/toast-B7wo3sX1.js +371 -0
  153. package/dist/toast-stack-B40VpS4M.js +197 -0
  154. package/dist/toast-stack.js +2 -0
  155. package/dist/toast.js +1 -1
  156. package/dist/{toggle-group-CI0e7hFm.js → toggle-group-B2fpFZwV.js} +5 -5
  157. package/dist/toggle-group.js +1 -1
  158. package/dist/tooltip-BvgVTCTN.js +120 -0
  159. package/dist/tooltip.js +1 -1
  160. package/dist/tree-view-j8qLqkb_.js +364 -0
  161. package/dist/tree-view.js +2 -0
  162. package/dist/types/components/announcement-bar/announcement-bar.d.ts +75 -0
  163. package/dist/types/components/announcement-bar/index.d.ts +2 -0
  164. package/dist/types/components/avatar-group/avatar-group.d.ts +43 -0
  165. package/dist/types/components/avatar-group/index.d.ts +2 -0
  166. package/dist/types/components/bottom-sheet/bottom-sheet.d.ts +60 -0
  167. package/dist/types/components/bottom-sheet/index.d.ts +2 -0
  168. package/dist/types/components/calendar/calendar.d.ts +25 -1
  169. package/dist/types/components/calendar/index.d.ts +1 -1
  170. package/dist/types/components/carousel/carousel.d.ts +73 -0
  171. package/dist/types/components/carousel/index.d.ts +2 -0
  172. package/dist/types/components/checkbox/checkbox.d.ts +1 -1
  173. package/dist/types/components/chip-group/chip-group.d.ts +54 -0
  174. package/dist/types/components/chip-group/index.d.ts +1 -0
  175. package/dist/types/components/code-block/code-block.d.ts +58 -0
  176. package/dist/types/components/code-block/index.d.ts +1 -0
  177. package/dist/types/components/code-block/shiki.d.ts +3 -0
  178. package/dist/types/components/combobox/combobox.d.ts +1 -1
  179. package/dist/types/components/command-palette/command-palette.d.ts +2 -2
  180. package/dist/types/components/comment-thread/comment-thread.d.ts +118 -0
  181. package/dist/types/components/comment-thread/index.d.ts +1 -0
  182. package/dist/types/components/comment-thread/thread-core.d.ts +96 -0
  183. package/dist/types/components/comment-thread/thread-parts.d.ts +114 -0
  184. package/dist/types/components/context-menu/context-menu.d.ts +55 -0
  185. package/dist/types/components/context-menu/index.d.ts +2 -0
  186. package/dist/types/components/copy-button/copy-button.d.ts +49 -0
  187. package/dist/types/components/copy-button/index.d.ts +2 -0
  188. package/dist/types/components/countdown/countdown.d.ts +37 -0
  189. package/dist/types/components/countdown/index.d.ts +1 -0
  190. package/dist/types/components/date-picker/date-picker.d.ts +1 -1
  191. package/dist/types/components/date-range-picker/date-range-picker.d.ts +103 -0
  192. package/dist/types/components/date-range-picker/index.d.ts +2 -0
  193. package/dist/types/components/drawer/drawer.d.ts +59 -0
  194. package/dist/types/components/drawer/index.d.ts +2 -0
  195. package/dist/types/components/elastic-slider/elastic-slider.d.ts +53 -0
  196. package/dist/types/components/elastic-slider/index.d.ts +1 -0
  197. package/dist/types/components/empty-state/empty-state.d.ts +36 -0
  198. package/dist/types/components/empty-state/index.d.ts +2 -0
  199. package/dist/types/components/expandable-card/expandable-card.d.ts +28 -0
  200. package/dist/types/components/expandable-card/index.d.ts +2 -0
  201. package/dist/types/components/expanding-search/expanding-search.d.ts +22 -0
  202. package/dist/types/components/expanding-search/index.d.ts +1 -0
  203. package/dist/types/components/field/field-anatomy.d.ts +4 -2
  204. package/dist/types/components/file-dropzone/file-dropzone.d.ts +93 -0
  205. package/dist/types/components/file-dropzone/index.d.ts +2 -0
  206. package/dist/types/components/filter-toolbar/filter-toolbar.d.ts +70 -0
  207. package/dist/types/components/filter-toolbar/index.d.ts +1 -0
  208. package/dist/types/components/hold-to-confirm/hold-to-confirm.d.ts +32 -0
  209. package/dist/types/components/hold-to-confirm/index.d.ts +2 -0
  210. package/dist/types/components/hover-card/hover-card.d.ts +97 -0
  211. package/dist/types/components/hover-card/index.d.ts +2 -0
  212. package/dist/types/components/image-compare/image-compare.d.ts +54 -0
  213. package/dist/types/components/image-compare/index.d.ts +1 -0
  214. package/dist/types/components/inline-edit/index.d.ts +2 -0
  215. package/dist/types/components/inline-edit/inline-edit.d.ts +93 -0
  216. package/dist/types/components/json-viewer/index.d.ts +2 -0
  217. package/dist/types/components/json-viewer/json-viewer.d.ts +82 -0
  218. package/dist/types/components/mention-input/index.d.ts +2 -0
  219. package/dist/types/components/mention-input/mention-input.d.ts +87 -0
  220. package/dist/types/components/menu/menu.d.ts +68 -7
  221. package/dist/types/components/metric-card/index.d.ts +1 -0
  222. package/dist/types/components/metric-card/metric-card.d.ts +37 -0
  223. package/dist/types/components/multi-select/index.d.ts +2 -0
  224. package/dist/types/components/multi-select/multi-select.d.ts +73 -0
  225. package/dist/types/components/pagination/pagination.d.ts +1 -1
  226. package/dist/types/components/password-field/index.d.ts +2 -0
  227. package/dist/types/components/password-field/password-field.d.ts +34 -0
  228. package/dist/types/components/popover/popover.d.ts +1 -1
  229. package/dist/types/components/radio-cards/index.d.ts +1 -0
  230. package/dist/types/components/radio-cards/radio-cards.d.ts +42 -0
  231. package/dist/types/components/radio-group/radio-group.d.ts +1 -1
  232. package/dist/types/components/resizable-panels/index.d.ts +2 -0
  233. package/dist/types/components/resizable-panels/resizable-panels.d.ts +42 -0
  234. package/dist/types/components/scroll-area/index.d.ts +2 -0
  235. package/dist/types/components/scroll-area/scroll-area.d.ts +34 -0
  236. package/dist/types/components/search-field/index.d.ts +1 -0
  237. package/dist/types/components/search-field/search-field.d.ts +31 -0
  238. package/dist/types/components/segmented-control/index.d.ts +2 -0
  239. package/dist/types/components/segmented-control/segmented-control.d.ts +32 -0
  240. package/dist/types/components/select/select.d.ts +1 -1
  241. package/dist/types/components/signature-pad/index.d.ts +2 -0
  242. package/dist/types/components/signature-pad/signature-pad.d.ts +104 -0
  243. package/dist/types/components/slider/index.d.ts +1 -0
  244. package/dist/types/components/slider/slider-style.d.ts +14 -0
  245. package/dist/types/components/slider/slider.d.ts +62 -0
  246. package/dist/types/components/slider/use-slider-interaction.d.ts +79 -0
  247. package/dist/types/components/sortable-data-table/index.d.ts +1 -0
  248. package/dist/types/components/sortable-data-table/sortable-data-table.d.ts +76 -0
  249. package/dist/types/components/split-button/index.d.ts +2 -0
  250. package/dist/types/components/split-button/split-button.d.ts +55 -0
  251. package/dist/types/components/stepper/index.d.ts +2 -0
  252. package/dist/types/components/stepper/stepper.d.ts +85 -0
  253. package/dist/types/components/swipe-actions/index.d.ts +2 -0
  254. package/dist/types/components/swipe-actions/swipe-actions.d.ts +44 -0
  255. package/dist/types/components/tabs/tabs.d.ts +1 -1
  256. package/dist/types/components/tag-input/index.d.ts +2 -0
  257. package/dist/types/components/tag-input/tag-input.d.ts +66 -0
  258. package/dist/types/components/text-field/text-field.d.ts +1 -1
  259. package/dist/types/components/textarea/textarea.d.ts +1 -1
  260. package/dist/types/components/theme-switch/index.d.ts +1 -0
  261. package/dist/types/components/theme-switch/theme-switch.d.ts +33 -0
  262. package/dist/types/components/time-picker/index.d.ts +2 -0
  263. package/dist/types/components/time-picker/time-picker.d.ts +48 -0
  264. package/dist/types/components/timeline/index.d.ts +2 -0
  265. package/dist/types/components/timeline/timeline.d.ts +66 -0
  266. package/dist/types/components/toast/toast.d.ts +37 -2
  267. package/dist/types/components/toast-stack/index.d.ts +2 -0
  268. package/dist/types/components/toast-stack/toast-stack.d.ts +28 -0
  269. package/dist/types/components/tooltip/tooltip.d.ts +2 -2
  270. package/dist/types/components/tree-view/index.d.ts +1 -0
  271. package/dist/types/components/tree-view/tree-view.d.ts +47 -0
  272. package/dist/types/components/usage-meter/index.d.ts +2 -0
  273. package/dist/types/components/usage-meter/usage-meter.d.ts +83 -0
  274. package/dist/types/index.d.ts +45 -0
  275. package/dist/types/overlay/overlay-layer.d.ts +53 -0
  276. package/dist/types/overlay/use-overlay-floating.d.ts +19 -2
  277. package/dist/types/styling/media.d.ts +1 -0
  278. package/dist/types/styling/theme.d.ts +12 -0
  279. package/dist/types/utils/use-controlled-state.d.ts +2 -1
  280. package/dist/usage-meter-qyQ3rYVv.js +463 -0
  281. package/dist/usage-meter.js +2 -0
  282. package/dist/use-controlled-state-DpeVQZNR.js +20 -0
  283. package/dist/use-latest-callback-cj1OOQL6.js +11 -0
  284. package/dist/use-overlay-floating-Bx2jBKAA.js +33 -0
  285. package/dist/use-slider-interaction-ChL-208h.js +234 -0
  286. package/package.json +195 -3
  287. package/dist/accordion-Bd-j04hW.js +0 -198
  288. package/dist/avatar-BahDVO9t.js +0 -132
  289. package/dist/badge-B_sLygxU.js +0 -108
  290. package/dist/calendar-C9Yad_-w.js +0 -394
  291. package/dist/card-D-aI2QHx.js +0 -158
  292. package/dist/collection-registry-BTYi6zGh.js +0 -98
  293. package/dist/combobox-DiMC2g_u.js +0 -327
  294. package/dist/command-palette-V_2pEay7.js +0 -379
  295. package/dist/date-picker-C29Uo4Tx.js +0 -250
  296. package/dist/field-anatomy-D2ToMeRa.js +0 -109
  297. package/dist/menu-CGPTNRnF.js +0 -216
  298. package/dist/pill-DO2gHzMb.js +0 -56
  299. package/dist/popover-CdRXjQqI.js +0 -113
  300. package/dist/select-BgG7WgSh.js +0 -286
  301. package/dist/switch-Dr-qjmT4.js +0 -142
  302. package/dist/tabs-CK_g1RKa.js +0 -203
  303. package/dist/toast-CjmELMZZ.js +0 -283
  304. package/dist/tooltip-CaL3rKbV.js +0 -108
  305. package/dist/use-controlled-state-CVXDa-qM.js +0 -21
  306. package/dist/use-overlay-floating-Bit-f0FU.js +0 -31
  307. package/dist/{theme-root-BbTBuLMQ.js → theme-root-Bs1U3uPA.js} +2 -2
@@ -0,0 +1,79 @@
1
+ import { type ComponentPropsWithRef, type KeyboardEvent, type PointerEvent, type ReactNode, type RefCallback, type RefObject } from 'react';
2
+ import type { Interpolation, Theme } from '../../styling/css';
3
+ export type SliderValue = number | readonly [number, number];
4
+ export type SliderMark = number | {
5
+ value: number;
6
+ label?: ReactNode;
7
+ };
8
+ export type SliderPart<E extends 'div' | 'span' | 'button'> = ComponentPropsWithRef<E> & {
9
+ css?: Interpolation<Theme>;
10
+ };
11
+ /** Pointer position for one gesture sample, in domain units plus the geometry to convert them. */
12
+ export interface SliderPointerSample {
13
+ /** Unclamped domain value under the pointer (grab offset applied). */
14
+ raw: number;
15
+ /** Bounds the dragged thumb may take. */
16
+ low: number;
17
+ high: number;
18
+ /** CSS pixels per domain unit along the control. */
19
+ pxPerUnit: number;
20
+ rtl: boolean;
21
+ pointerType: string;
22
+ }
23
+ export declare function joinIds(...values: (string | false | undefined)[]): string | undefined;
24
+ export declare function hasContent(node: ReactNode): boolean;
25
+ export declare function indexedPart<E extends 'div' | 'span' | 'button'>(part: SliderPart<E> | ((index: number) => SliderPart<E>) | undefined, index: number): SliderPart<E> | undefined;
26
+ export declare function useSliderFormat(locale: Intl.LocalesArgument, formatOptions: Intl.NumberFormatOptions | undefined, formatValue: ((value: number, formatter: Intl.NumberFormat) => string) | undefined): {
27
+ formatter: Intl.NumberFormat;
28
+ format: (n: number) => string;
29
+ };
30
+ export interface SliderInteractionOptions {
31
+ /** Public component name used in configuration errors. */
32
+ component: string;
33
+ range: boolean;
34
+ value: SliderValue | undefined;
35
+ defaultValue: SliderValue | undefined;
36
+ min: number;
37
+ max: number;
38
+ step: number;
39
+ largeStep: number | undefined;
40
+ minStepsBetweenThumbs: number;
41
+ disabled: boolean;
42
+ onValueChange: (next: SliderValue) => void;
43
+ onValueCommit: (next: SliderValue) => void;
44
+ /** Visual feedback hook: runs for every accepted pointer sample, before the value request. */
45
+ onPointerSample?: (sample: SliderPointerSample) => void;
46
+ /** Maps a pointer sample to the raw domain target (e.g. magnetic detents). Defaults to `raw`. */
47
+ resolvePointer?: (sample: SliderPointerSample) => number;
48
+ /** Runs once when a gesture ends: completed (pointerup) or cancelled (cancel, lost capture, disable, reset). */
49
+ onGestureEnd?: (completed: boolean) => void;
50
+ }
51
+ export interface SliderInteraction {
52
+ id: string;
53
+ controlRef: RefObject<HTMLDivElement | null>;
54
+ current: SliderValue;
55
+ values: number[] | readonly [number, number];
56
+ active: number | null;
57
+ bounds: (index: number) => number[];
58
+ percent: (n: number) => number;
59
+ normalizeMarks: (marks: readonly SliderMark[]) => {
60
+ value: number;
61
+ label?: ReactNode;
62
+ }[];
63
+ /** Handlers for the pointer-capture control; consumer slot handlers run first and may veto. */
64
+ controlHandlers: (part: SliderPart<'div'> | undefined) => {
65
+ ref: RefCallback<HTMLDivElement>;
66
+ onPointerDown: (e: PointerEvent<HTMLDivElement>) => void;
67
+ onPointerMove: (e: PointerEvent<HTMLDivElement>) => void;
68
+ onPointerUp: (e: PointerEvent<HTMLDivElement>) => void;
69
+ onPointerCancel: (e: PointerEvent<HTMLDivElement>) => void;
70
+ onLostPointerCapture: (e: PointerEvent<HTMLDivElement>) => void;
71
+ };
72
+ /** Root `onKeyDown` tail: routes movement keys from a thumb inside this control. */
73
+ handleRootKeyDown: (event: KeyboardEvent<HTMLDivElement>) => void;
74
+ /** Activation of a mark shortcut: one change + commit for a changed request, nothing otherwise. */
75
+ selectMark: (markValue: number) => void;
76
+ /** Remembers the last focused thumb for equidistant range presses. */
77
+ noteFocus: (index: number) => void;
78
+ }
79
+ export declare function useSliderInteraction(options: SliderInteractionOptions): SliderInteraction;
@@ -0,0 +1 @@
1
+ export { SortableDataTable, type SortableDataTableProps, type DataColumn, type DataTableMessages, type DataTablePartProps, type DataTableSlotProps, type SortDirection, type SortState, } from './sortable-data-table';
@@ -0,0 +1,76 @@
1
+ import { type ComponentPropsWithRef, type CSSProperties, type ReactNode, type Ref } from 'react';
2
+ import { type Interpolation, type Theme } from '../../styling/css';
3
+ import { type SxProps } from '../../styling/sx';
4
+ export type SortDirection = 'asc' | 'desc';
5
+ export interface SortState {
6
+ columnId: string;
7
+ direction: SortDirection;
8
+ }
9
+ export interface DataColumn<T> {
10
+ id: string;
11
+ header: ReactNode;
12
+ accessor?: (row: T) => string | number | Date | null | undefined;
13
+ cell?: (row: T) => ReactNode;
14
+ sortable?: boolean;
15
+ sortLabel?: string;
16
+ compare?: (a: T, b: T) => number;
17
+ numeric?: boolean;
18
+ width?: CSSProperties['width'];
19
+ }
20
+ export interface DataTableMessages {
21
+ empty: string;
22
+ missing: string;
23
+ clear: string;
24
+ scrollLabel: string;
25
+ sortButton: (header: string, direction: SortDirection | null) => string;
26
+ sortStatus: (header: string, direction: SortDirection) => string;
27
+ selectRow: (rowLabel: string) => string;
28
+ selectAll: string;
29
+ selectionStatus: (visibleSelected: number, totalSelected: number, visibleRows: number, formatted: {
30
+ visibleSelected: string;
31
+ totalSelected: string;
32
+ visibleRows: string;
33
+ }) => string;
34
+ }
35
+ export interface DataTablePartProps {
36
+ className?: string;
37
+ css?: Interpolation<Theme>;
38
+ }
39
+ export type DataTableSlotProps = Partial<Record<'scroller' | 'table' | 'caption' | 'headerCell' | 'sortButton' | 'row' | 'cell' | 'footer' | 'status', DataTablePartProps>>;
40
+ export type SortableDataTableProps<T> = Omit<ComponentPropsWithRef<'div'>, 'children' | 'defaultValue' | 'onChange'> & SxProps & {
41
+ rows: readonly T[];
42
+ columns: readonly DataColumn<T>[];
43
+ getRowId: (row: T) => string;
44
+ caption: ReactNode;
45
+ captionHidden?: boolean;
46
+ defaultValue?: SortState | null;
47
+ onValueChange?: (sort: SortState | null) => void;
48
+ selectedKeys?: readonly string[];
49
+ defaultSelectedKeys?: readonly string[];
50
+ onSelectionChange?: (keys: readonly string[]) => void;
51
+ locale?: Intl.LocalesArgument;
52
+ dateFormatOptions?: Intl.DateTimeFormatOptions;
53
+ timeZone?: string;
54
+ messages?: Partial<DataTableMessages>;
55
+ empty?: ReactNode;
56
+ loading?: boolean;
57
+ size?: 'sm' | 'md';
58
+ tableRef?: Ref<HTMLTableElement>;
59
+ slotProps?: DataTableSlotProps;
60
+ } & ({
61
+ sortMode: 'manual';
62
+ value: SortState | null;
63
+ } | {
64
+ sortMode?: 'client';
65
+ value?: SortState | null;
66
+ }) & ({
67
+ selectable: true;
68
+ getRowLabel: (row: T) => string;
69
+ } | {
70
+ selectable?: false;
71
+ getRowLabel?: (row: T) => string;
72
+ });
73
+ export declare function SortableDataTable<T>({ ref, rows, columns, getRowId, caption, captionHidden, value, defaultValue, onValueChange, sortMode, selectable, getRowLabel, selectedKeys, defaultSelectedKeys, onSelectionChange, locale, dateFormatOptions, timeZone, messages: messageOverrides, empty, loading, size, tableRef, slotProps, className, sx, ...rest }: SortableDataTableProps<T>): import("@emotion/react/jsx-runtime").JSX.Element;
74
+ export declare namespace SortableDataTable {
75
+ var displayName: string;
76
+ }
@@ -0,0 +1,2 @@
1
+ export { SplitButton } from './split-button';
2
+ export type { SplitButtonActionProps, SplitButtonContentProps, SplitButtonItemProps, SplitButtonItemTone, SplitButtonProps, SplitButtonSeparatorProps, SplitButtonTriggerProps, } from './split-button';
@@ -0,0 +1,55 @@
1
+ import { type ComponentPropsWithRef, type ReactNode } from 'react';
2
+ import { type Placement } from '@floating-ui/react';
3
+ import { type SxProps } from '../../styling/sx';
4
+ import { type ButtonProps, type ButtonSize, type ButtonTone, type ButtonVariant } from '../button';
5
+ import { type MenuItemTone, type MenuContentProps, type MenuItemProps, type MenuSeparatorProps } from '../menu/menu';
6
+ export type SplitButtonItemTone = MenuItemTone;
7
+ export interface SplitButtonProps extends Omit<ComponentPropsWithRef<'div'>, 'role'>, SxProps {
8
+ /** Appearance of the Action; the Trigger uses the matching subdued fill. */
9
+ variant?: ButtonVariant;
10
+ tone?: ButtonTone;
11
+ size?: ButtonSize;
12
+ /** Disables Action, Trigger and items, and asks once for an open menu to close. */
13
+ disabled?: boolean;
14
+ open?: boolean;
15
+ defaultOpen?: boolean;
16
+ onOpenChange?: (open: boolean) => void;
17
+ /** Menu placement relative to the Trigger; `start`/`end` follow the group's direction. */
18
+ placement?: Placement;
19
+ children?: ReactNode;
20
+ }
21
+ export interface SplitButtonActionProps extends Omit<ButtonProps, 'render'> {
22
+ /**
23
+ * Labels the Action may show. They share one grid cell so the Action keeps the width of the
24
+ * longest one while its label changes; a label swap fades in.
25
+ */
26
+ reserveLabels?: readonly string[];
27
+ }
28
+ type SplitButtonTriggerBaseProps = Omit<ButtonProps, 'render' | 'variant' | 'tone' | 'size' | 'loading' | 'startIcon' | 'endIcon' | 'aria-haspopup' | 'aria-expanded' | 'aria-controls'>;
29
+ /** The Trigger has no visible text: it needs a localized `aria-label` or `aria-labelledby`. */
30
+ export type SplitButtonTriggerProps = SplitButtonTriggerBaseProps & ({
31
+ 'aria-label': string;
32
+ } | {
33
+ 'aria-labelledby': string;
34
+ });
35
+ export interface SplitButtonContentProps extends Omit<MenuContentProps, 'role'> {
36
+ }
37
+ export interface SplitButtonItemProps extends MenuItemProps {
38
+ tone?: SplitButtonItemTone;
39
+ }
40
+ export interface SplitButtonSeparatorProps extends MenuSeparatorProps {
41
+ }
42
+ declare function SplitButtonRoot({ ref, variant, tone, size, disabled, open: openProp, defaultOpen, onOpenChange, placement, className, sx, children, ...rest }: SplitButtonProps): import("@emotion/react/jsx-runtime").JSX.Element;
43
+ declare function SplitButtonAction({ ref, variant, tone, size, disabled, reserveLabels, children, className, sx, ...rest }: SplitButtonActionProps): import("@emotion/react/jsx-runtime").JSX.Element;
44
+ declare function SplitButtonTrigger({ ref, disabled, children, className, sx, ...rest }: SplitButtonTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
45
+ declare function SplitButtonContent({ dir, 'aria-labelledby': ariaLabelledBy, ...props }: SplitButtonContentProps): import("@emotion/react/jsx-runtime").JSX.Element;
46
+ declare function SplitButtonItem({ tone, disabled, ...props }: SplitButtonItemProps): import("@emotion/react/jsx-runtime").JSX.Element;
47
+ declare function SplitButtonSeparator(props: SplitButtonSeparatorProps): import("@emotion/react/jsx-runtime").JSX.Element;
48
+ export declare const SplitButton: typeof SplitButtonRoot & {
49
+ Action: typeof SplitButtonAction;
50
+ Trigger: typeof SplitButtonTrigger;
51
+ Content: typeof SplitButtonContent;
52
+ Item: typeof SplitButtonItem;
53
+ Separator: typeof SplitButtonSeparator;
54
+ };
55
+ export {};
@@ -0,0 +1,2 @@
1
+ export { Stepper } from './stepper';
2
+ export type { StepperBaseProps, StepperDetails, StepperHeadSlotProps, StepperInteractiveProps, StepperOrientation, StepperPartProps, StepperProps, StepperSize, StepperSlotProps, StepperStaticProps, StepperStatus, StepperStep, } from './stepper';
@@ -0,0 +1,85 @@
1
+ import { type ComponentPropsWithRef, type ReactNode } from 'react';
2
+ import { type Interpolation, type Theme } from '../../styling/css';
3
+ import { type SxProps } from '../../styling/sx';
4
+ export type StepperOrientation = 'horizontal' | 'vertical';
5
+ export type StepperSize = 'sm' | 'md';
6
+ export type StepperDetails = 'all' | 'current';
7
+ export type StepperStatus = 'complete' | 'current' | 'upcoming' | 'error';
8
+ export interface StepperStep {
9
+ /** Stable unique identity. */
10
+ id: string;
11
+ /** Visible label; the default accessible name starts with it. */
12
+ label: string;
13
+ /** Secondary text. `0` renders; `false`/`null`/`undefined` render nothing. */
14
+ description?: ReactNode;
15
+ /** Error text; when renderable the step's status is `error` and the text is always shown. */
16
+ error?: ReactNode;
17
+ /** A disabled completed step cannot be selected or focused. */
18
+ disabled?: boolean;
19
+ /** Decorative marker content replacing the numeral/check/error glyph. */
20
+ icon?: ReactNode;
21
+ }
22
+ export interface StepperPartProps {
23
+ className?: string;
24
+ css?: Interpolation<Theme>;
25
+ }
26
+ /**
27
+ * Native button props for interactive step heads; static heads only use `className`/`css`.
28
+ * Step names come from `getStepLabel`, so the slot takes no `aria-label`/`aria-labelledby`.
29
+ */
30
+ export type StepperHeadSlotProps = Omit<ComponentPropsWithRef<'button'>, 'children' | 'ref' | 'type' | 'disabled' | 'tabIndex' | 'aria-current' | 'aria-disabled' | 'aria-label' | 'aria-labelledby'> & StepperPartProps;
31
+ export interface StepperSlotProps {
32
+ root?: StepperPartProps;
33
+ list?: StepperPartProps;
34
+ item?: StepperPartProps;
35
+ head?: StepperHeadSlotProps;
36
+ marker?: StepperPartProps;
37
+ label?: StepperPartProps;
38
+ description?: StepperPartProps;
39
+ connector?: StepperPartProps;
40
+ caption?: StepperPartProps;
41
+ }
42
+ export interface StepperBaseProps extends SxProps {
43
+ steps: readonly StepperStep[];
44
+ /** Controlled current index, `0..steps.length` (`steps.length` = all complete). */
45
+ value?: number;
46
+ /** Uncontrolled initial current index. */
47
+ defaultValue?: number;
48
+ /** Requested index after a completed step is activated (interactive mode). */
49
+ onValueChange?: (index: number) => void;
50
+ orientation?: StepperOrientation;
51
+ /** Which descriptions show; errors always show. */
52
+ details?: StepperDetails;
53
+ /** Markers only, with the current step in a caption. Error steps keep their label and text. */
54
+ compact?: boolean;
55
+ /** Horizontal steppers fold to compact below a 30rem container width. */
56
+ responsive?: boolean;
57
+ /** Marker and text scale; interactive targets stay at least 32px. */
58
+ size?: StepperSize;
59
+ /** Accessible name of the group/navigation when no `aria-label`/`aria-labelledby` is given. */
60
+ label?: string;
61
+ /** Caption shown once every step is complete. */
62
+ completeLabel?: ReactNode;
63
+ /** Locale for the default numerals and counts. */
64
+ locale?: Intl.LocalesArgument;
65
+ /** Full accessible name of a step; translate the wording here. */
66
+ getStepLabel?: (step: StepperStep, index: number, count: number, status: StepperStatus) => string;
67
+ /** Live summary of an accepted change; `step` is null when every step is complete. */
68
+ getChangeLabel?: (step: StepperStep | null, index: number, count: number) => string;
69
+ /** Announces accepted value changes in a polite live region. */
70
+ announceChanges?: boolean;
71
+ slotProps?: StepperSlotProps;
72
+ }
73
+ export type StepperStaticProps = StepperBaseProps & {
74
+ /** Static indicator: a labelled group without controls. */
75
+ interactive?: false;
76
+ } & Omit<ComponentPropsWithRef<'div'>, keyof StepperBaseProps | 'children'>;
77
+ export type StepperInteractiveProps = StepperBaseProps & {
78
+ /** Navigation: completed steps are buttons that request `onValueChange`. */
79
+ interactive: true;
80
+ } & Omit<ComponentPropsWithRef<'nav'>, keyof StepperBaseProps | 'children'>;
81
+ export type StepperProps = StepperStaticProps | StepperInteractiveProps;
82
+ export declare function Stepper(props: StepperProps): import("@emotion/react/jsx-runtime").JSX.Element;
83
+ export declare namespace Stepper {
84
+ var displayName: string;
85
+ }
@@ -0,0 +1,2 @@
1
+ export { SwipeActions } from './swipe-actions';
2
+ export type { SwipeAction, SwipeActionsProps, SwipeActionsRowProps, SwipeActionsSide, SwipeActionsValue, } from './swipe-actions';
@@ -0,0 +1,44 @@
1
+ import { type ComponentPropsWithRef, type ReactNode } from 'react';
2
+ import { type Interpolation, type Theme } from '../../styling/css';
3
+ import { type SxProps } from '../../styling/sx';
4
+ export type SwipeActionsSide = 'leading' | 'trailing';
5
+ export type SwipeActionsValue = {
6
+ id: string;
7
+ side: SwipeActionsSide;
8
+ } | null;
9
+ export interface SwipeAction {
10
+ id: string;
11
+ label: string;
12
+ icon?: ReactNode;
13
+ tone?: 'neutral' | 'accent' | 'danger';
14
+ disabled?: boolean;
15
+ onSelect: () => void;
16
+ /** Caller intent that this command keeps its row. Every command closes the rail and the row
17
+ * never deletes data itself, so this is metadata for the caller's `onSelect`. */
18
+ keepRow?: boolean;
19
+ }
20
+ type Slot = {
21
+ className?: string;
22
+ css?: Interpolation<Theme>;
23
+ };
24
+ export interface SwipeActionsProps extends Omit<ComponentPropsWithRef<'ul'>, 'value' | 'defaultValue'>, SxProps {
25
+ value?: SwipeActionsValue;
26
+ defaultValue?: SwipeActionsValue;
27
+ onValueChange?: (value: SwipeActionsValue) => void;
28
+ }
29
+ export interface SwipeActionsRowProps extends ComponentPropsWithRef<'li'>, SxProps {
30
+ id: string;
31
+ label: string;
32
+ actionsLabel: string;
33
+ leading?: readonly SwipeAction[];
34
+ trailing?: readonly SwipeAction[];
35
+ fullSwipe?: boolean;
36
+ disabled?: boolean;
37
+ slotProps?: Partial<Record<'content' | 'body' | 'action' | 'actionIcon' | 'actionLabel' | 'trigger' | 'menu' | 'menuItem', Slot>>;
38
+ }
39
+ declare function SwipeActionsRoot({ ref, className, sx, value: valueProp, defaultValue, onValueChange, children, onKeyDown, ...props }: SwipeActionsProps): import("@emotion/react/jsx-runtime").JSX.Element;
40
+ declare function SwipeActionsRow({ id, label, actionsLabel, leading, trailing, fullSwipe, disabled, ref, className, sx, children, slotProps, onPointerDown, onPointerMove, onPointerUp, onPointerCancel, onLostPointerCapture, onClickCapture, ...props }: SwipeActionsRowProps): import("@emotion/react/jsx-runtime").JSX.Element;
41
+ export declare const SwipeActions: typeof SwipeActionsRoot & {
42
+ Row: typeof SwipeActionsRow;
43
+ };
44
+ export {};
@@ -18,7 +18,7 @@ export interface TabsPanelProps extends ComponentPropsWithRef<'div'>, SxProps {
18
18
  }
19
19
  declare function TabsRoot({ ref, value: valueProp, defaultValue, onValueChange, orientation, activation, className, sx, ...rest }: TabsProps): import("@emotion/react/jsx-runtime").JSX.Element;
20
20
  declare function TabsList({ ref, onKeyDown, className, sx, ...rest }: TabsListProps): import("@emotion/react/jsx-runtime").JSX.Element;
21
- declare function TabsTab({ ref, value, disabled, onClick, onFocus, className, sx, ...rest }: TabsTabProps): import("@emotion/react/jsx-runtime").JSX.Element;
21
+ declare function TabsTab({ ref, value, disabled, onClick, onFocus, onPointerDown, className, sx, ...rest }: TabsTabProps): import("@emotion/react/jsx-runtime").JSX.Element;
22
22
  declare function TabsPanel({ ref, value, tabIndex, 'aria-labelledby': ariaLabelledByProp, className, sx, ...rest }: TabsPanelProps): import("@emotion/react/jsx-runtime").JSX.Element;
23
23
  export declare const Tabs: typeof TabsRoot & {
24
24
  List: typeof TabsList;
@@ -0,0 +1,2 @@
1
+ export { TagInput } from './tag-input';
2
+ export type { TagInputMessages, TagInputPartProps, TagInputProps, TagInputSeparator, TagInputSize, TagInputSlotProps, } from './tag-input';
@@ -0,0 +1,66 @@
1
+ import { type ComponentPropsWithRef, type ReactNode } from 'react';
2
+ import type { SxProps } from '../../styling/sx';
3
+ import { type FieldPartProps, type FieldSlotProps } from '../field/field-anatomy';
4
+ export type TagInputSize = 'sm' | 'md' | 'lg';
5
+ export type TagInputSeparator = 'Enter' | ',';
6
+ export interface TagInputMessages {
7
+ /** Accessible name of the token list. */
8
+ listLabel: string;
9
+ /** Accessible name of a token's remove button. */
10
+ remove: (token: string) => string;
11
+ added: (token: string) => string;
12
+ removed: (token: string) => string;
13
+ picked: (token: string) => string;
14
+ /** Receives the committed token the draft matched. */
15
+ duplicate: (token: string) => string;
16
+ /** Receives `maxTokens`. */
17
+ limit: (count: number) => string;
18
+ /** Validation message while `required` and no token is committed. */
19
+ required: string;
20
+ }
21
+ export interface TagInputPartProps extends FieldPartProps {
22
+ }
23
+ export interface TagInputSlotProps extends FieldSlotProps<TagInputPartProps> {
24
+ list?: TagInputPartProps;
25
+ token?: TagInputPartProps;
26
+ remove?: TagInputPartProps;
27
+ input?: TagInputPartProps;
28
+ status?: TagInputPartProps;
29
+ }
30
+ export interface TagInputProps extends Omit<ComponentPropsWithRef<'input'>, 'size' | 'value' | 'defaultValue' | 'type' | 'children'>, SxProps {
31
+ /**
32
+ * Committed tokens in order. Entries must be unique, nonempty and already normalized; the
33
+ * component renders them as given and never rewrites a provided list.
34
+ */
35
+ value?: readonly string[];
36
+ defaultValue?: readonly string[];
37
+ onValueChange?: (value: string[]) => void;
38
+ /** Draft text in the input, independent from the committed tokens. */
39
+ inputValue?: string;
40
+ defaultInputValue?: string;
41
+ onInputChange?: (value: string) => void;
42
+ label?: ReactNode;
43
+ description?: ReactNode;
44
+ error?: ReactNode;
45
+ size?: TagInputSize;
46
+ /** Keys that commit the draft. Without `','`, commas are ordinary token text. */
47
+ separators?: readonly TagInputSeparator[];
48
+ /** Commit the draft when focus leaves the whole field. */
49
+ commitOnBlur?: boolean;
50
+ /** Turns the draft into a token before comparison. Defaults to trimming whitespace. */
51
+ normalize?: (draft: string) => string;
52
+ /** Returns a rejection message, or `null` to accept the token. */
53
+ validateToken?: (token: string) => string | null;
54
+ /** Additions stop at this count; an initial or controlled list longer than it is kept. */
55
+ maxTokens?: number;
56
+ /** Locale for duplicate comparison and default number formatting. */
57
+ locale?: Intl.LocalesArgument;
58
+ messages?: Partial<TagInputMessages>;
59
+ /** Replaces the remove glyph; rendered decoratively inside each remove button. */
60
+ removeIcon?: ReactNode;
61
+ slotProps?: TagInputSlotProps;
62
+ }
63
+ export declare function TagInput({ ref, value, defaultValue, onValueChange, inputValue, defaultInputValue, onInputChange, label, description, error, size, separators, commitOnBlur, normalize, validateToken, maxTokens, locale, messages: messagesProp, removeIcon, slotProps, className, sx, dir, name, form, disabled, readOnly, required, onChange, onKeyDown, onBlur, onCompositionStart, onCompositionEnd, id: idProp, 'aria-labelledby': ariaLabelledByProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TagInputProps): import("@emotion/react/jsx-runtime").JSX.Element;
64
+ export declare namespace TagInput {
65
+ var displayName: string;
66
+ }
@@ -12,7 +12,7 @@ export interface TextFieldProps extends Omit<ComponentPropsWithRef<'input'>, 'si
12
12
  onValueChange?: (value: string) => void;
13
13
  slotProps?: FieldSlotProps<TextFieldPartProps>;
14
14
  }
15
- export declare function TextField({ ref, label, description, error, size, onChange, onValueChange, slotProps, className, sx, required, id: idProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TextFieldProps): import("@emotion/react/jsx-runtime").JSX.Element;
15
+ export declare function TextField({ ref, label, description, error, size, onChange, onValueChange, slotProps, className, sx, required, id: idProp, dir, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TextFieldProps): import("@emotion/react/jsx-runtime").JSX.Element;
16
16
  export declare namespace TextField {
17
17
  var displayName: string;
18
18
  }
@@ -15,7 +15,7 @@ export interface TextareaProps extends ComponentPropsWithRef<'textarea'>, SxProp
15
15
  onValueChange?: (value: string) => void;
16
16
  slotProps?: FieldSlotProps<TextareaPartProps>;
17
17
  }
18
- export declare function Textarea({ ref, label, description, error, size, resize, autoResize, rows, onChange, onValueChange, slotProps, className, sx, required, id: idProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TextareaProps): import("@emotion/react/jsx-runtime").JSX.Element;
18
+ export declare function Textarea({ ref, label, description, error, size, resize, autoResize, rows, onChange, onValueChange, slotProps, className, sx, dir, required, id: idProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalidProp, ...rest }: TextareaProps): import("@emotion/react/jsx-runtime").JSX.Element;
19
19
  export declare namespace Textarea {
20
20
  var displayName: string;
21
21
  }
@@ -0,0 +1 @@
1
+ export { ThemeSwitch, type ThemeSwitchProps, type ThemeSwitchValue, type ThemeSwitchTransition, type ThemeSwitchChangeDetails, } from './theme-switch';
@@ -0,0 +1,33 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type SwitchPartProps, type SwitchProps } from '../switch';
3
+ export type ThemeSwitchValue = 'light' | 'dark';
4
+ export type ThemeSwitchTransition = 'reveal' | 'eclipse' | 'split' | 'rise';
5
+ export interface ThemeSwitchChangeDetails {
6
+ transition: ThemeSwitchTransition;
7
+ trigger: HTMLInputElement;
8
+ reducedMotion: boolean;
9
+ }
10
+ export interface ThemeSwitchProps extends Omit<SwitchProps, 'value' | 'defaultValue' | 'checked' | 'defaultChecked' | 'onCheckedChange' | 'children' | 'slotProps'> {
11
+ value?: ThemeSwitchValue;
12
+ defaultValue?: ThemeSwitchValue;
13
+ onValueChange?: (next: ThemeSwitchValue, details: ThemeSwitchChangeDetails) => void;
14
+ label: ReactNode;
15
+ iconOnly?: boolean;
16
+ lightIcon?: ReactNode;
17
+ darkIcon?: ReactNode;
18
+ transition?: ThemeSwitchTransition;
19
+ loading?: boolean;
20
+ slotProps?: SwitchProps['slotProps'] & {
21
+ iconFrame?: SwitchPartProps;
22
+ lightIcon?: SwitchPartProps;
23
+ darkIcon?: SwitchPartProps;
24
+ };
25
+ }
26
+ /** Composes Switch: Space toggles dark appearance; the accessible name stays stable.
27
+ * The consumer applies the requested theme. The ref reaches Switch's native input.
28
+ * The decorative icon frame is a hidden label for the input, so clicking the glyph toggles too.
29
+ */
30
+ export declare function ThemeSwitch({ value: valueProp, defaultValue, onValueChange, label, iconOnly, lightIcon, darkIcon, transition, loading, className, sx, slotProps, onChange, onClick, dir, id: idProp, ...rest }: ThemeSwitchProps): import("@emotion/react/jsx-runtime").JSX.Element;
31
+ export declare namespace ThemeSwitch {
32
+ var displayName: string;
33
+ }
@@ -0,0 +1,2 @@
1
+ export { TimePicker } from './time-picker';
2
+ export type { TimePickerProps, TimePickerSize, TimePickerSlotProps, TimePickerMinuteStep, TimePickerHourCycle, } from './time-picker';
@@ -0,0 +1,48 @@
1
+ import { type ComponentPropsWithRef, type ReactNode } from 'react';
2
+ import { type Interpolation, type Theme } from '../../styling/css';
3
+ import { type SxProps } from '../../styling/sx';
4
+ export type TimePickerSize = 'sm' | 'md' | 'lg';
5
+ export type TimePickerMinuteStep = 1 | 5 | 10 | 15 | 30;
6
+ export type TimePickerHourCycle = 'h12' | 'h23';
7
+ type Slot<Tag extends 'div' | 'span' | 'label' | 'button'> = Omit<ComponentPropsWithRef<Tag>, 'children'> & {
8
+ css?: Interpolation<Theme>;
9
+ };
10
+ export interface TimePickerSlotProps {
11
+ root?: Slot<'div'>;
12
+ label?: Slot<'label'>;
13
+ control?: Slot<'button'>;
14
+ content?: Slot<'div'>;
15
+ option?: Slot<'div'>;
16
+ description?: Slot<'span'>;
17
+ error?: Slot<'span'>;
18
+ icon?: Slot<'span'>;
19
+ }
20
+ export interface TimePickerProps extends Omit<ComponentPropsWithRef<'button'>, 'value' | 'defaultValue' | 'onChange' | 'size' | 'children'>, SxProps {
21
+ value?: string;
22
+ defaultValue?: string;
23
+ onValueChange?: (time: string) => void;
24
+ open?: boolean;
25
+ defaultOpen?: boolean;
26
+ onOpenChange?: (open: boolean) => void;
27
+ minuteStep?: TimePickerMinuteStep;
28
+ min?: string;
29
+ max?: string;
30
+ /** Supply a locale for deterministic server rendering. */
31
+ locale?: string;
32
+ hourCycle?: TimePickerHourCycle;
33
+ label?: ReactNode;
34
+ description?: ReactNode;
35
+ error?: ReactNode;
36
+ placeholder?: ReactNode;
37
+ size?: TimePickerSize;
38
+ readOnly?: boolean;
39
+ /** Semantic only: the hidden form field does not enforce native required validation. */
40
+ required?: boolean;
41
+ icon?: ReactNode;
42
+ slotProps?: TimePickerSlotProps;
43
+ }
44
+ export declare function TimePicker({ ref, value: valueProp, defaultValue, onValueChange, open: openProp, defaultOpen, onOpenChange, minuteStep, min, max, locale, hourCycle, label, description, error, placeholder, size, disabled, readOnly, required, name, icon, slotProps, className, sx, dir, id: idProp, onClick, onKeyDown, onBlur, ...rest }: TimePickerProps): import("@emotion/react/jsx-runtime").JSX.Element;
45
+ export declare namespace TimePicker {
46
+ var displayName: string;
47
+ }
48
+ export {};
@@ -0,0 +1,2 @@
1
+ export { Timeline } from './timeline';
2
+ export type { TimelineEvent, TimelineHeadingLevel, TimelineLabels, TimelinePartProps, TimelineProps, TimelineSize, TimelineSlotProps, TimelineTone, } from './timeline';
@@ -0,0 +1,66 @@
1
+ import { type ComponentPropsWithRef, type CSSProperties, type ReactNode } from 'react';
2
+ import { type Interpolation, type Theme } from '../../styling/css';
3
+ import { type SxProps } from '../../styling/sx';
4
+ export type TimelineTone = 'neutral' | 'success' | 'danger';
5
+ export type TimelineSize = 'sm' | 'md';
6
+ export type TimelineHeadingLevel = 2 | 3 | 4 | 5 | 6;
7
+ export interface TimelineEvent {
8
+ /** Unique, stable identity across updates. */
9
+ id: string;
10
+ /** Epoch ms, a Date, or an ISO date-time with `Z` or an explicit offset. */
11
+ at: string | number | Date;
12
+ /** Who acted; shown as text next to the title. */
13
+ actor?: string;
14
+ /** Literal outcome ("Deploy failed"), so tone is never the only cue. */
15
+ title: ReactNode;
16
+ meta?: ReactNode;
17
+ /** Content (including 0; not false, null or '') makes the title a disclosure button for this panel. */
18
+ detail?: ReactNode;
19
+ /** Actor portrait URL; takes precedence over `icon`. */
20
+ avatar?: string;
21
+ icon?: ReactNode;
22
+ tone?: TimelineTone;
23
+ }
24
+ export interface TimelineLabels {
25
+ /** Region name when neither `aria-label` nor `aria-labelledby` is given. */
26
+ region: string;
27
+ empty: string;
28
+ /** Heading of the trailing group for events whose date cannot be read. */
29
+ invalidTime: string;
30
+ /** Announced when events with new ids arrive. */
31
+ newEvents: (count: number) => string;
32
+ /** Event count shown beside each day heading. */
33
+ dayCount: (count: number) => string;
34
+ }
35
+ export interface TimelinePartProps {
36
+ className?: string;
37
+ css?: Interpolation<Theme>;
38
+ }
39
+ export type TimelineSlotProps = Partial<Record<'scroller' | 'group' | 'heading' | 'list' | 'item' | 'marker' | 'trigger' | 'time' | 'detail' | 'status', TimelinePartProps>>;
40
+ export interface TimelineProps extends Omit<ComponentPropsWithRef<'div'>, 'defaultValue' | 'onChange' | 'children'>, SxProps {
41
+ /** Caller-owned events in any order; the component sorts a copy. */
42
+ events: readonly TimelineEvent[];
43
+ /** Reference instant in epoch ms. Pass the same value on server and client. */
44
+ now: number;
45
+ /** Ids of events whose detail is open (controlled). */
46
+ value?: readonly string[];
47
+ defaultValue?: readonly string[];
48
+ /** Requested open ids after a disclosure interaction. */
49
+ onValueChange?: (ids: string[]) => void;
50
+ /** Formatting locale; pass one explicitly for matching server and client output. */
51
+ locale?: Intl.LocalesArgument;
52
+ /** IANA zone used for day grouping and every displayed date. */
53
+ timeZone?: string;
54
+ headingLevel?: TimelineHeadingLevel;
55
+ /** Bounds the timeline in its own scroller; without it the timeline grows in page flow. */
56
+ maxHeight?: CSSProperties['maxHeight'];
57
+ /** Scroll to an event newer than any shown before. Never moves focus. */
58
+ scrollToNew?: boolean;
59
+ size?: TimelineSize;
60
+ labels?: Partial<TimelineLabels>;
61
+ slotProps?: TimelineSlotProps;
62
+ }
63
+ export declare function Timeline({ ref, events, now, value, defaultValue, onValueChange, locale, timeZone, headingLevel, maxHeight, scrollToNew, size, labels: labelProps, slotProps, className, sx, onKeyDown, onFocus, onBlur, 'aria-label': ariaLabelProp, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy, ...rest }: TimelineProps): import("@emotion/react/jsx-runtime").JSX.Element;
64
+ export declare namespace Timeline {
65
+ var displayName: string;
66
+ }