@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
@@ -1,6 +1,6 @@
1
- import { type ComponentPropsWithRef, type MouseEvent, type ReactNode } from 'react';
1
+ import { type ComponentPropsWithRef, type MouseEvent, type ReactNode, type CSSProperties } from 'react';
2
2
  import { type SxProps } from '../../styling/sx';
3
- export type ToastTone = 'neutral' | 'success' | 'danger';
3
+ export type ToastTone = 'neutral' | 'success' | 'danger' | 'info' | 'warning';
4
4
  export interface ToastAction {
5
5
  label: string;
6
6
  /** Runs on click; the toast then dismisses unless the handler calls `event.preventDefault()`. */
@@ -13,6 +13,8 @@ export interface ToastOptions {
13
13
  /** Milliseconds before auto-dismiss; `null` persists until dismissed. Defaults to the provider's. */
14
14
  duration?: number | null;
15
15
  action?: ToastAction;
16
+ /** Decorative spinner; an omitted duration persists while loading. */
17
+ loading?: boolean;
16
18
  }
17
19
  export interface ToastProviderProps {
18
20
  children?: ReactNode;
@@ -28,10 +30,43 @@ export interface ToastViewportProps extends ComponentPropsWithRef<'div'>, SxProp
28
30
  export interface ToastApi {
29
31
  toast: (options: ToastOptions) => string;
30
32
  dismiss: (id: string) => void;
33
+ /**
34
+ * Patches an open toast in place; only a changed duration restarts the countdown.
35
+ * Unknown or closing ids are ignored.
36
+ */
37
+ update: (id: string, patch: Partial<ToastOptions>) => void;
31
38
  }
39
+ type ToastState = 'open' | 'closing';
40
+ interface ToastRecord {
41
+ id: string;
42
+ options: ToastOptions;
43
+ state: ToastState;
44
+ }
45
+ interface ToastQueueContextValue {
46
+ toasts: ToastRecord[];
47
+ dismiss: (id: string) => void;
48
+ remove: (id: string) => void;
49
+ registerRoot: (id: string, root: HTMLDivElement | null) => void;
50
+ dismissLabel: string;
51
+ registerRenderer: () => () => void;
52
+ }
53
+ export declare const TOAST_VIEWPORT_INLINE_SIZE = "min(380px, calc(100vw - 32px))";
54
+ export declare function useToastQueueContext(part: string): ToastQueueContextValue;
32
55
  export declare function useToast(): ToastApi;
33
56
  declare function ToastProvider({ children, max, duration, dismissLabel, }: ToastProviderProps): import("@emotion/react/jsx-runtime").JSX.Element;
34
57
  declare function ToastViewport({ ref, className, sx, ...props }: ToastViewportProps): import("@emotion/react/jsx-runtime").JSX.Element;
58
+ export declare function ToastPortal({ children, contained }: {
59
+ children: ReactNode;
60
+ contained?: boolean;
61
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
62
+ export declare function ToastItem({ record, exposed, paused, style, className, escapeDismiss, }: {
63
+ record: ToastRecord;
64
+ exposed?: boolean;
65
+ paused?: boolean;
66
+ style?: CSSProperties;
67
+ className?: string;
68
+ escapeDismiss?: boolean;
69
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
35
70
  declare function ToastRoot(props: ToastProviderProps): import("@emotion/react/jsx-runtime").JSX.Element;
36
71
  export declare const Toast: typeof ToastRoot & {
37
72
  Provider: typeof ToastProvider;
@@ -0,0 +1,2 @@
1
+ export { ToastStack } from './toast-stack';
2
+ export type { ToastStackProps, ToastStackPosition, ToastStackVariant } from './toast-stack';
@@ -0,0 +1,28 @@
1
+ import { type ComponentPropsWithRef } from 'react';
2
+ import { type Interpolation, type Theme } from '../../styling/css';
3
+ import { type SxProps } from '../../styling/sx';
4
+ export type ToastStackVariant = 'stacked' | 'list';
5
+ export type ToastStackPosition = 'bottom-start' | 'bottom-center' | 'bottom-end';
6
+ type PartStyle = {
7
+ className?: string;
8
+ css?: Interpolation<Theme>;
9
+ };
10
+ export interface ToastStackProps extends Omit<ComponentPropsWithRef<'div'>, 'children'>, SxProps {
11
+ variant?: ToastStackVariant;
12
+ position?: ToastStackPosition;
13
+ contained?: boolean;
14
+ maxVisible?: number;
15
+ label?: string;
16
+ hotkey?: boolean;
17
+ expandLabel?: string;
18
+ collapseLabel?: string;
19
+ slotProps?: {
20
+ list?: PartStyle;
21
+ toggle?: PartStyle;
22
+ };
23
+ }
24
+ export declare function ToastStack(props: ToastStackProps): import("@emotion/react/jsx-runtime").JSX.Element;
25
+ export declare namespace ToastStack {
26
+ var displayName: string;
27
+ }
28
+ export {};
@@ -16,9 +16,9 @@ export interface TooltipTriggerProps extends ComponentPropsWithRef<'button'>, Sx
16
16
  }
17
17
  export interface TooltipContentProps extends ComponentPropsWithRef<'div'>, SxProps {
18
18
  }
19
- declare function TooltipRoot({ open: openProp, defaultOpen, onOpenChange, placement, openDelay, closeDelay, children, }: TooltipProps): import("@emotion/react/jsx-runtime").JSX.Element;
19
+ declare function TooltipRoot(props: TooltipProps): import("@emotion/react/jsx-runtime").JSX.Element;
20
20
  declare function TooltipTrigger({ ref, 'aria-describedby': ariaDescribedByProp, className, sx, ...rest }: TooltipTriggerProps): import("@emotion/react/jsx-runtime").JSX.Element;
21
- declare function TooltipContent({ ref, style, className, sx, ...rest }: TooltipContentProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
21
+ declare function TooltipContent(props: TooltipContentProps): import("@emotion/react/jsx-runtime").JSX.Element | null;
22
22
  export declare const Tooltip: typeof TooltipRoot & {
23
23
  Trigger: typeof TooltipTrigger;
24
24
  Content: typeof TooltipContent;
@@ -0,0 +1 @@
1
+ export { TreeView, type TreeNode, type TreeViewMessages, type TreeViewPartProps, type TreeViewProps, type TreeViewSlotProps, } from './tree-view';
@@ -0,0 +1,47 @@
1
+ import { type ComponentPropsWithRef, type ReactNode, type Ref } from 'react';
2
+ import { type Interpolation, type Theme } from '../../styling/css';
3
+ import { type SxProps } from '../../styling/sx';
4
+ export interface TreeNode {
5
+ id: string;
6
+ label: string;
7
+ children?: readonly TreeNode[];
8
+ hasChildren?: boolean;
9
+ icon?: ReactNode;
10
+ disabled?: boolean;
11
+ }
12
+ export interface TreeViewMessages {
13
+ loading: (label: string) => string;
14
+ error: (label: string) => string;
15
+ empty: string;
16
+ }
17
+ export interface TreeViewPartProps {
18
+ className?: string;
19
+ css?: Interpolation<Theme>;
20
+ }
21
+ export type TreeViewSlotProps = Partial<Record<'tree' | 'row' | 'label' | 'icon' | 'disclosure' | 'group' | 'status', TreeViewPartProps>>;
22
+ export interface TreeViewProps extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'defaultValue' | 'onChange'>, SxProps {
23
+ nodes: readonly TreeNode[];
24
+ value?: string | null;
25
+ defaultValue?: string | null;
26
+ onValueChange?: (id: string | null) => void;
27
+ open?: readonly string[];
28
+ defaultOpen?: readonly string[];
29
+ onOpenChange?: (ids: readonly string[]) => void;
30
+ loadChildren?: (node: TreeNode, options: {
31
+ signal: AbortSignal;
32
+ }) => Promise<readonly TreeNode[]>;
33
+ onLoadError?: (error: unknown, node: TreeNode) => void;
34
+ label?: string;
35
+ messages?: Partial<TreeViewMessages>;
36
+ empty?: ReactNode;
37
+ treeRef?: Ref<HTMLUListElement>;
38
+ locale?: Intl.LocalesArgument;
39
+ slotProps?: TreeViewSlotProps;
40
+ }
41
+ /** Single-select APG tree with real roving focus. Right opens/enters and Left closes/parents,
42
+ * including RTL. Up/Down clamp; Home/End jump; Enter/Space select; typeahead resets after 500ms.
43
+ * Lazy results are cached per instance; remount with a new key to replace the dataset cache. */
44
+ export declare function TreeView({ nodes, value, defaultValue, onValueChange, open, defaultOpen, onOpenChange, loadChildren, onLoadError, label, messages: messageProps, empty, treeRef, locale, slotProps, ref, className, sx, onKeyDown, onClick, onBlur, 'aria-label': ariaLabel, 'aria-labelledby': labelledBy, 'aria-describedby': describedBy, ...rest }: TreeViewProps): import("@emotion/react/jsx-runtime").JSX.Element;
45
+ export declare namespace TreeView {
46
+ var displayName: string;
47
+ }
@@ -0,0 +1,2 @@
1
+ export { UsageMeter } from './usage-meter';
2
+ export type { UsageMeterProps, UsageMeterSegment, UsageMeterSelection, UsageMeterState, UsageMeterSummary, UsageMeterItem, UsageMeterLabels, UsageMeterPartProps, UsageMeterSize, } from './usage-meter';
@@ -0,0 +1,83 @@
1
+ import { type ComponentPropsWithRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';
2
+ import { type Interpolation, type Theme } from '../../styling/css';
3
+ import { type SxProps } from '../../styling/sx';
4
+ export type UsageMeterState = 'normal' | 'near-limit' | 'over-limit' | 'unavailable';
5
+ export type UsageMeterSize = 'sm' | 'md' | 'lg';
6
+ export type UsageMeterSelection = {
7
+ kind: 'segment';
8
+ id: string;
9
+ } | {
10
+ kind: 'remainder';
11
+ };
12
+ export interface UsageMeterSegment {
13
+ /** Stable, nonempty, unique identity. */
14
+ id: string;
15
+ label: string;
16
+ value: number;
17
+ tone?: 'accent' | 'info' | 'success' | 'warning';
18
+ }
19
+ export type UsageMeterItem = UsageMeterSelection & {
20
+ label: string;
21
+ value: number;
22
+ };
23
+ export interface UsageMeterSummary {
24
+ total: number;
25
+ limit: number;
26
+ free: number;
27
+ over: number;
28
+ ratio: number;
29
+ state: UsageMeterState;
30
+ formattedTotal: string;
31
+ formattedLimit: string;
32
+ formattedPercent: string;
33
+ }
34
+ export interface UsageMeterLabels {
35
+ free: string;
36
+ near: string;
37
+ over: string;
38
+ normal: string;
39
+ unavailable: string;
40
+ legend: string;
41
+ }
42
+ export type UsageMeterPartProps<T extends 'div' | 'span' | 'p' | 'ul' | 'button' = 'span'> = Omit<ComponentPropsWithoutRef<T>, 'children'> & {
43
+ css?: Interpolation<Theme>;
44
+ };
45
+ export interface UsageMeterProps extends Omit<ComponentPropsWithRef<'div'>, 'children' | 'defaultValue'>, SxProps {
46
+ label: ReactNode;
47
+ segments: readonly UsageMeterSegment[];
48
+ limit: number;
49
+ warnAt?: number;
50
+ size?: UsageMeterSize;
51
+ locale?: Intl.LocalesArgument;
52
+ numberFormatOptions?: Intl.NumberFormatOptions;
53
+ unitLabel?: ReactNode;
54
+ /** English defaults; translation callbacks also localize relational value copy. */
55
+ labels?: Partial<UsageMeterLabels>;
56
+ getValueLabel?: (summary: UsageMeterSummary) => string;
57
+ getItemLabel?: (item: UsageMeterItem, summary: UsageMeterSummary) => string;
58
+ interactive?: boolean;
59
+ value?: UsageMeterSelection | null;
60
+ defaultValue?: UsageMeterSelection | null;
61
+ onValueChange?: (selection: UsageMeterSelection | null) => void;
62
+ announceChanges?: boolean;
63
+ statusIcon?: (state: UsageMeterState) => ReactNode;
64
+ slotProps?: {
65
+ root?: UsageMeterPartProps<'div'>;
66
+ title?: UsageMeterPartProps;
67
+ status?: UsageMeterPartProps;
68
+ total?: UsageMeterPartProps<'p'>;
69
+ track?: UsageMeterPartProps<'div'>;
70
+ segment?: UsageMeterPartProps;
71
+ overage?: UsageMeterPartProps;
72
+ limit?: UsageMeterPartProps;
73
+ legend?: UsageMeterPartProps<'ul'>;
74
+ item?: UsageMeterPartProps<'button'>;
75
+ };
76
+ }
77
+ /** Finite allowance, not task progress. The meter is not focusable; legend arrows/Home/End
78
+ * move focus, Enter/Space toggle a pin, and Escape clears it. Numeric ARIA saturates at the
79
+ * allowance while visible text and aria-valuetext retain actual overuse. */
80
+ export declare function UsageMeter({ ref, label, segments, limit, warnAt, size, locale, numberFormatOptions, unitLabel, labels: labelsProp, getValueLabel, getItemLabel, interactive, value, defaultValue, onValueChange, announceChanges, statusIcon, slotProps, className, sx, 'aria-labelledby': labelledBy, 'aria-describedby': describedBy, 'aria-label': ariaLabel, ...rest }: UsageMeterProps): import("@emotion/react/jsx-runtime").JSX.Element;
81
+ export declare namespace UsageMeter {
82
+ var displayName: string;
83
+ }
@@ -1,40 +1,85 @@
1
1
  export * from './components/accordion';
2
2
  export * from './components/alert';
3
+ export * from './components/announcement-bar';
3
4
  export * from './components/avatar';
5
+ export * from './components/avatar-group';
4
6
  export * from './components/badge';
7
+ export * from './components/bottom-sheet';
5
8
  export * from './components/breadcrumbs';
6
9
  export * from './components/button';
7
10
  export * from './components/calendar';
8
11
  export * from './components/card';
12
+ export * from './components/carousel';
9
13
  export * from './components/checkbox';
14
+ export * from './components/chip-group';
15
+ export * from './components/code-block';
10
16
  export * from './components/command-palette';
11
17
  export * from './components/combobox';
18
+ export * from './components/comment-thread';
12
19
  export * from './components/container';
20
+ export * from './components/context-menu';
21
+ export * from './components/copy-button';
22
+ export * from './components/countdown';
13
23
  export * from './components/date-picker';
24
+ export * from './components/date-range-picker';
14
25
  export * from './components/dialog';
15
26
  export * from './components/divider';
27
+ export * from './components/drawer';
28
+ export * from './components/elastic-slider';
29
+ export * from './components/empty-state';
30
+ export * from './components/expandable-card';
31
+ export * from './components/expanding-search';
32
+ export * from './components/file-dropzone';
33
+ export * from './components/filter-toolbar';
16
34
  export * from './components/flex';
35
+ export * from './components/hold-to-confirm';
36
+ export * from './components/image-compare';
37
+ export * from './components/inline-edit';
38
+ export * from './components/hover-card';
39
+ export * from './components/json-viewer';
17
40
  export * from './components/kbd';
41
+ export * from './components/mention-input';
18
42
  export * from './components/menu';
43
+ export * from './components/metric-card';
44
+ export * from './components/multi-select';
19
45
  export * from './components/navigation';
20
46
  export * from './components/pagination';
47
+ export * from './components/password-field';
21
48
  export * from './components/pill';
22
49
  export * from './components/popover';
23
50
  export * from './components/progress';
51
+ export * from './components/radio-cards';
24
52
  export * from './components/radio-group';
53
+ export * from './components/resizable-panels';
54
+ export * from './components/scroll-area';
55
+ export * from './components/search-field';
56
+ export * from './components/segmented-control';
25
57
  export * from './components/select';
58
+ export * from './components/signature-pad';
26
59
  export * from './components/skeleton';
60
+ export * from './components/slider';
61
+ export * from './components/sortable-data-table';
27
62
  export * from './components/spinner';
63
+ export * from './components/split-button';
28
64
  export * from './components/stack';
65
+ export * from './components/stepper';
66
+ export * from './components/swipe-actions';
29
67
  export * from './components/switch';
30
68
  export * from './components/tabs';
69
+ export * from './components/tag-input';
31
70
  export * from './components/text-field';
32
71
  export * from './components/textarea';
33
72
  export { ThemeProvider, useTheme, type ThemeProviderProps } from './components/theme-provider/theme-provider';
34
73
  export * from './components/theme-root';
74
+ export * from './components/theme-switch';
75
+ export * from './components/time-picker';
76
+ export * from './components/timeline';
35
77
  export * from './components/toast';
78
+ export * from './components/toast-stack';
36
79
  export * from './components/toggle-group';
37
80
  export * from './components/tooltip';
81
+ export * from './components/tree-view';
82
+ export * from './components/usage-meter';
38
83
  export { styled } from './styling/styled';
39
84
  export type { SxProps } from './styling/sx';
40
85
  export { theme, type JfraderTheme } from './styling/theme';
@@ -0,0 +1,53 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type ElementProps, type FloatingContext } from '@floating-ui/react';
3
+ /**
4
+ * `container`: a layer whose content holds focus and may host other layers (Popover,
5
+ * DateRangePicker). Escape and outside press are ignored by the layer itself while a child
6
+ * layer is open.
7
+ * `leaf`: a layer that hosts none (HoverCard). Focus usually stays outside it (e.g. in the
8
+ * parent's content, whose own key handling stops the event from bubbling), so Escape is
9
+ * handled in the capture phase and stops at its target once the leaf closes.
10
+ */
11
+ export type LayerKind = 'container' | 'leaf';
12
+ /** Escape and outside-press dismissal for one layer; pass the result into `useInteractions`. */
13
+ export declare function useLayerDismiss(context: FloatingContext, kind: LayerKind): ElementProps[];
14
+ /**
15
+ * Registers one overlay layer and renders `children` with its node id, which the layer passes
16
+ * to `useOverlayFloating`. Layers rendered inside `children` become its children in the tree.
17
+ */
18
+ export declare function OverlayLayer({ children }: {
19
+ children: (nodeId: string | undefined) => ReactNode;
20
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
21
+ export declare namespace OverlayLayer {
22
+ var displayName: string;
23
+ }
24
+ /**
25
+ * A layer for a menu. Its node joins the tree under the enclosing layer like any other, but the
26
+ * menu's own hooks see no parent node: useRole and useListNavigation read a parent node as a parent
27
+ * menu (a menuitem trigger, cross-axis open/close keys). The menu's content re-provides the node
28
+ * through `LayerContent`, so layers opened inside it nest under it.
29
+ */
30
+ export declare function MenuLayer({ children }: {
31
+ children: (nodeId: string | undefined) => ReactNode;
32
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
33
+ export declare namespace MenuLayer {
34
+ var displayName: string;
35
+ }
36
+ /** Makes `nodeId` the parent of layers rendered inside `children`. */
37
+ export declare function LayerContent({ nodeId, children }: {
38
+ nodeId: string | undefined;
39
+ children: ReactNode;
40
+ }): import("@emotion/react/jsx-runtime").JSX.Element;
41
+ export declare namespace LayerContent {
42
+ var displayName: string;
43
+ }
44
+ /**
45
+ * Root boundary for an overlay that does not take part in layer nesting. Inside a layer it gets
46
+ * its own empty tree and no parent node, so it never reads the enclosing layer as its parent.
47
+ */
48
+ export declare function IsolatedOverlay({ children }: {
49
+ children: ReactNode;
50
+ }): string | number | bigint | boolean | import("@emotion/react/jsx-runtime").JSX.Element | Iterable<ReactNode> | Promise<string | number | bigint | boolean | Iterable<ReactNode> | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | import("react").ReactPortal | null | undefined> | null | undefined;
51
+ export declare namespace IsolatedOverlay {
52
+ var displayName: string;
53
+ }
@@ -1,11 +1,28 @@
1
- import { type OpenChangeReason, type Placement, type UseFloatingReturn } from '@floating-ui/react';
1
+ import { type OpenChangeReason, type Placement, type Strategy, type UseFloatingReturn } from '@floating-ui/react';
2
2
  export interface OverlayFloatingOptions {
3
3
  open: boolean;
4
4
  onOpenChange: (open: boolean, event?: Event, reason?: OpenChangeReason) => void;
5
5
  placement: Placement;
6
+ /** Node id from `OverlayLayer`, for overlays that take part in nested dismissal. */
7
+ nodeId?: string;
8
+ /** Collision boundary for flip/shift/size. Defaults to the clipping ancestors (and viewport). */
9
+ boundary?: Element | null;
10
+ /** Receives the space left for the surface inside the boundary after each positioning pass. */
11
+ onAvailableSize?: (size: OverlayAvailableSize) => void;
12
+ /** CSS positioning strategy. Defaults to `absolute`. */
13
+ strategy?: Strategy;
14
+ /** Gap between the anchor and the surface, in px. Defaults to `ANCHOR_GAP`. */
15
+ gap?: number;
16
+ /** Position with `transform` (default) or with `left`/`top`, which leaves `transform` and
17
+ * `scale` free for the surface's own animation. */
18
+ transform?: boolean;
19
+ }
20
+ export interface OverlayAvailableSize {
21
+ width: number;
22
+ height: number;
6
23
  }
7
24
  /**
8
25
  * Shared positioning for Popover, Tooltip and Menu. `autoUpdate` only runs while both
9
26
  * elements are mounted, so a closed (unmounted) surface does no positioning work.
10
27
  */
11
- export declare function useOverlayFloating({ open, onOpenChange, placement, }: OverlayFloatingOptions): UseFloatingReturn<HTMLButtonElement>;
28
+ export declare function useOverlayFloating({ open, onOpenChange, placement, nodeId, boundary, onAvailableSize, strategy, gap, transform, }: OverlayFloatingOptions): UseFloatingReturn<HTMLButtonElement>;
@@ -1,2 +1,3 @@
1
1
  export declare const REDUCED_MOTION = "@media (prefers-reduced-motion: reduce)";
2
2
  export declare const FORCED_COLORS = "@media (forced-colors: active)";
3
+ export declare const COARSE_POINTER = "@media (pointer: coarse)";
@@ -34,7 +34,19 @@ export declare const theme: {
34
34
  readonly info: "var(--ui-color-info)";
35
35
  readonly infoSoft: "var(--ui-color-info-soft)";
36
36
  readonly focusRing: "var(--ui-color-focus-ring)";
37
+ readonly signatureInkBlack: "var(--ui-color-signature-ink-black)";
38
+ readonly signatureInkBlue: "var(--ui-color-signature-ink-blue)";
39
+ readonly signatureInkViolet: "var(--ui-color-signature-ink-violet)";
37
40
  readonly scrim: "var(--ui-color-scrim)";
41
+ readonly syntaxKeyword: "var(--ui-color-syntax-keyword)";
42
+ readonly syntaxString: "var(--ui-color-syntax-string)";
43
+ readonly syntaxConstant: "var(--ui-color-syntax-constant)";
44
+ readonly syntaxFunction: "var(--ui-color-syntax-function)";
45
+ readonly syntaxType: "var(--ui-color-syntax-type)";
46
+ readonly syntaxTag: "var(--ui-color-syntax-tag)";
47
+ readonly syntaxProperty: "var(--ui-color-syntax-property)";
48
+ readonly syntaxComment: "var(--ui-color-syntax-comment)";
49
+ readonly syntaxPunctuation: "var(--ui-color-syntax-punctuation)";
38
50
  };
39
51
  readonly shadow: {
40
52
  readonly raised: "var(--ui-shadow-raised)";
@@ -2,6 +2,7 @@
2
2
  * One state authority for controlled/uncontrolled components.
3
3
  * `value === undefined` means uncontrolled; internal state seeds from `defaultValue`.
4
4
  * Requests dedupe against the current value and notify only through `onChange`.
5
+ * `resetToDefault` restores the uncontrolled seed without notifying (native form reset).
5
6
  * Do not switch modes during an instance's lifetime (see SKILL.md §5).
6
7
  */
7
- export declare function useControlledState<T>(value: T | undefined, defaultValue: T | undefined, onChange?: (next: T) => void): readonly [T | undefined, (next: T) => void];
8
+ export declare function useControlledState<T>(value: T | undefined, defaultValue: T | undefined, onChange?: (next: T) => void): readonly [T | undefined, (next: T) => void, () => void];