@crewlethq/ui 0.2.0 → 0.4.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 (497) hide show
  1. package/README.md +1714 -14
  2. package/dist/Accordion/Accordion.d.ts +54 -0
  3. package/dist/Accordion/index.d.ts +4 -0
  4. package/dist/Accordion/index.js +6 -0
  5. package/dist/Accordion-ZI2WLD5C.css +87 -0
  6. package/dist/AddPill/AddPill.d.ts +114 -0
  7. package/dist/AddPill/index.d.ts +3 -0
  8. package/dist/AddPill/index.js +3 -0
  9. package/dist/AddPill-DFWXYLIQ.css +434 -0
  10. package/dist/Announcer/Announcer.d.ts +15 -0
  11. package/dist/Announcer/index.d.ts +2 -0
  12. package/dist/Announcer/index.js +3 -0
  13. package/dist/AppShell/AppShell.d.ts +193 -0
  14. package/dist/AppShell/index.d.ts +3 -0
  15. package/dist/AppShell/index.js +6 -0
  16. package/dist/AppShell-NVE6LHNI.css +395 -0
  17. package/dist/Avatar/Avatar.d.ts +104 -0
  18. package/dist/Avatar/index.d.ts +3 -0
  19. package/dist/Avatar/index.js +2 -0
  20. package/dist/Avatar-P2KRQM2B.css +156 -0
  21. package/dist/BrandLockup/BrandLockup.d.ts +41 -0
  22. package/dist/BrandLockup/index.d.ts +3 -0
  23. package/dist/BrandLockup/index.js +2 -0
  24. package/dist/BrandLockup-6ISDEHPJ.css +108 -0
  25. package/dist/Button/Button.d.ts +88 -0
  26. package/dist/Button/index.d.ts +3 -0
  27. package/dist/Button/index.js +3 -0
  28. package/dist/Button-D4J6B4MA.css +302 -0
  29. package/dist/CalendarGrid/CalendarGrid.d.ts +87 -0
  30. package/dist/CalendarGrid/index.d.ts +3 -0
  31. package/dist/CalendarGrid/index.js +2 -0
  32. package/dist/CalendarGrid-V6TQ5QKS.css +128 -0
  33. package/dist/Callout/Callout.d.ts +47 -0
  34. package/dist/Callout/index.d.ts +3 -0
  35. package/dist/Callout/index.js +2 -0
  36. package/dist/Callout-S7QDWHDL.css +111 -0
  37. package/dist/Canvas/Canvas.d.ts +234 -0
  38. package/dist/Canvas/geometry.d.ts +249 -0
  39. package/dist/Canvas/index.d.ts +5 -0
  40. package/dist/Canvas/index.js +8 -0
  41. package/dist/Canvas/layerNode.d.ts +20 -0
  42. package/dist/Canvas-Q6JETCWR.css +315 -0
  43. package/dist/Card/Card.d.ts +164 -0
  44. package/dist/Card/headerSlot.d.ts +65 -0
  45. package/dist/Card/index.d.ts +5 -0
  46. package/dist/Card/index.js +6 -0
  47. package/dist/Card-RLR254LD.css +450 -0
  48. package/dist/Charts/ActivityStrip.d.ts +45 -0
  49. package/dist/Charts/BarList.d.ts +51 -0
  50. package/dist/Charts/Legend.d.ts +32 -0
  51. package/dist/Charts/StackedBar.d.ts +38 -0
  52. package/dist/Charts/TimeSeries.d.ts +92 -0
  53. package/dist/Charts/dataColor.d.ts +20 -0
  54. package/dist/Charts/index.d.ts +12 -0
  55. package/dist/Charts/index.js +3 -0
  56. package/dist/Charts-D7G2BSXH.css +277 -0
  57. package/dist/Checkbox/Checkbox.d.ts +45 -0
  58. package/dist/Checkbox/index.d.ts +3 -0
  59. package/dist/Checkbox/index.js +2 -0
  60. package/dist/Checkbox-VGW26YLQ.css +111 -0
  61. package/dist/CodeBlock/CodeBlock.d.ts +119 -0
  62. package/dist/CodeBlock/index.d.ts +3 -0
  63. package/dist/CodeBlock/index.js +7 -0
  64. package/dist/CodeBlock-GYNJ2HI6.css +188 -0
  65. package/dist/Combobox/Combobox.d.ts +89 -0
  66. package/dist/Combobox/index.d.ts +3 -0
  67. package/dist/Combobox/index.js +8 -0
  68. package/dist/Combobox-4FUVYIE7.css +80 -0
  69. package/dist/CommandPalette/CommandPalette.d.ts +77 -0
  70. package/dist/CommandPalette/index.d.ts +3 -0
  71. package/dist/CommandPalette/index.js +11 -0
  72. package/dist/CommandPalette-CSJDUCQA.css +115 -0
  73. package/dist/Container/Container.d.ts +17 -0
  74. package/dist/Container/index.d.ts +3 -0
  75. package/dist/Container/index.js +2 -0
  76. package/dist/Container-3TSKMGNI.css +52 -0
  77. package/dist/Copyable/CopyButton.d.ts +64 -0
  78. package/dist/Copyable/Copyable.d.ts +42 -0
  79. package/dist/Copyable/index.d.ts +5 -0
  80. package/dist/Copyable/index.js +6 -0
  81. package/dist/Copyable-5PNRFOLS.css +125 -0
  82. package/dist/Count/Count.d.ts +24 -0
  83. package/dist/Count/index.d.ts +3 -0
  84. package/dist/Count/index.js +3 -0
  85. package/dist/Count-ZVCJ6VPD.css +20 -0
  86. package/dist/DataTable/CopyableCell.d.ts +12 -0
  87. package/dist/DataTable/DataTable.d.ts +615 -0
  88. package/dist/DataTable/RowActionsMenu.d.ts +7 -0
  89. package/dist/DataTable/index.d.ts +7 -0
  90. package/dist/DataTable/index.js +14 -0
  91. package/dist/DataTable-ITNACQ2X.css +2020 -0
  92. package/dist/DataView/DataView.d.ts +109 -0
  93. package/dist/DataView/DataViewToolbar.d.ts +87 -0
  94. package/dist/DataView/FilterAxisBar.d.ts +103 -0
  95. package/dist/DataView/columns.d.ts +35 -0
  96. package/dist/DataView/filters.d.ts +184 -0
  97. package/dist/DataView/index.d.ts +11 -0
  98. package/dist/DataView/index.js +25 -0
  99. package/dist/DataView-256YF32J.css +441 -0
  100. package/dist/DateTimePicker/DateTimePicker.d.ts +91 -0
  101. package/dist/DateTimePicker/index.d.ts +3 -0
  102. package/dist/DateTimePicker/index.js +9 -0
  103. package/dist/DateTimePicker-22VNXRWC.css +199 -0
  104. package/dist/DescriptionList/DescriptionList.d.ts +36 -0
  105. package/dist/DescriptionList/index.d.ts +3 -0
  106. package/dist/DescriptionList/index.js +2 -0
  107. package/dist/DescriptionList-YYY3V3O6.css +59 -0
  108. package/dist/DiffList/DiffList.d.ts +47 -0
  109. package/dist/DiffList/index.d.ts +3 -0
  110. package/dist/DiffList/index.js +3 -0
  111. package/dist/DiffList-3EX64AAE.css +94 -0
  112. package/dist/Disclosure/Disclosure.d.ts +56 -0
  113. package/dist/Disclosure/anatomy.d.ts +43 -0
  114. package/dist/Disclosure/index.d.ts +5 -0
  115. package/dist/Disclosure/index.js +6 -0
  116. package/dist/Disclosure-VKBJJIZ7.css +176 -0
  117. package/dist/EmptyState/EmptyState.d.ts +39 -0
  118. package/dist/EmptyState/index.d.ts +3 -0
  119. package/dist/EmptyState/index.js +3 -0
  120. package/dist/EmptyState-C6HRBGT7.css +73 -0
  121. package/dist/EmptyValue/EmptyValue.d.ts +31 -0
  122. package/dist/EmptyValue/index.d.ts +3 -0
  123. package/dist/EmptyValue/index.js +3 -0
  124. package/dist/EmptyValue-4B6ODXHT.css +12 -0
  125. package/dist/EntityChip/EntityChip.d.ts +40 -0
  126. package/dist/EntityChip/index.d.ts +3 -0
  127. package/dist/EntityChip/index.js +3 -0
  128. package/dist/EntityChip-LUCPZBBG.css +64 -0
  129. package/dist/ErrorBoundary/ErrorBoundary.d.ts +58 -0
  130. package/dist/ErrorBoundary/index.d.ts +3 -0
  131. package/dist/ErrorBoundary/index.js +4 -0
  132. package/dist/ErrorBoundary-ME36CQTA.css +59 -0
  133. package/dist/Eyebrow/Eyebrow.d.ts +18 -0
  134. package/dist/Eyebrow/index.d.ts +3 -0
  135. package/dist/Eyebrow/index.js +2 -0
  136. package/dist/Eyebrow-5NREGHQH.css +46 -0
  137. package/dist/FilterChip/FilterChip.d.ts +100 -0
  138. package/dist/FilterChip/index.d.ts +3 -0
  139. package/dist/FilterChip/index.js +3 -0
  140. package/dist/FilterChip-GTGLLOXE.css +107 -0
  141. package/dist/Fullscreen/index.d.ts +2 -0
  142. package/dist/Fullscreen/index.js +1 -0
  143. package/dist/Fullscreen/useFullscreen.d.ts +32 -0
  144. package/dist/IconButton/IconButton.d.ts +45 -0
  145. package/dist/IconButton/index.d.ts +3 -0
  146. package/dist/IconButton/index.js +3 -0
  147. package/dist/IconButton-VQGNMJDI.css +158 -0
  148. package/dist/ImageUpload/ImageUpload.d.ts +37 -0
  149. package/dist/ImageUpload/index.d.ts +3 -0
  150. package/dist/ImageUpload/index.js +3 -0
  151. package/dist/ImageUpload-HKFIZR6D.css +193 -0
  152. package/dist/InlineCode/InlineCode.d.ts +37 -0
  153. package/dist/InlineCode/index.d.ts +3 -0
  154. package/dist/InlineCode/index.js +2 -0
  155. package/dist/InlineCode-6WSR5COL.css +65 -0
  156. package/dist/Input/FormField.d.ts +61 -0
  157. package/dist/Input/FormRow.d.ts +6 -0
  158. package/dist/Input/FormSection.d.ts +28 -0
  159. package/dist/Input/Input.d.ts +98 -0
  160. package/dist/Input/Label.d.ts +31 -0
  161. package/dist/Input/ReadOnlyField.d.ts +30 -0
  162. package/dist/Input/Textarea.d.ts +16 -0
  163. package/dist/Input/index.d.ts +15 -0
  164. package/dist/Input/index.js +5 -0
  165. package/dist/Input-2PU5CPKK.css +616 -0
  166. package/dist/Kbd/Kbd.d.ts +40 -0
  167. package/dist/Kbd/index.d.ts +3 -0
  168. package/dist/Kbd/index.js +3 -0
  169. package/dist/Kbd-W66MXQI5.css +61 -0
  170. package/dist/Layer/LayerHost.d.ts +23 -0
  171. package/dist/Layer/index.d.ts +7 -0
  172. package/dist/Layer/index.js +3 -0
  173. package/dist/Layer/place.d.ts +63 -0
  174. package/dist/Layer/stack.d.ts +159 -0
  175. package/dist/Layer-NAFSGCFA.css +23 -0
  176. package/dist/Layout/Layout.d.ts +104 -0
  177. package/dist/Layout/index.d.ts +3 -0
  178. package/dist/Layout/index.js +2 -0
  179. package/dist/Layout-2ZCV3IGF.css +171 -0
  180. package/dist/Link/Link.d.ts +45 -0
  181. package/dist/Link/index.d.ts +3 -0
  182. package/dist/Link/index.js +3 -0
  183. package/dist/Link-6BEFNMN2.css +80 -0
  184. package/dist/List/List.d.ts +73 -0
  185. package/dist/List/index.d.ts +3 -0
  186. package/dist/List/index.js +3 -0
  187. package/dist/List-XTHESXLR.css +161 -0
  188. package/dist/ListInput/ListInput.d.ts +68 -0
  189. package/dist/ListInput/index.d.ts +3 -0
  190. package/dist/ListInput/index.js +10 -0
  191. package/dist/ListInput-O7LJKOIG.css +147 -0
  192. package/dist/Listbox/index.d.ts +5 -0
  193. package/dist/Listbox/index.js +2 -0
  194. package/dist/Listbox/useListbox.d.ts +97 -0
  195. package/dist/Listbox/useOptionKeys.d.ts +64 -0
  196. package/dist/Listbox-X2DOTSQA.css +110 -0
  197. package/dist/Menu/Menu.d.ts +118 -0
  198. package/dist/Menu/index.d.ts +3 -0
  199. package/dist/Menu/index.js +7 -0
  200. package/dist/Menu-6DE7I66I.css +222 -0
  201. package/dist/Meter/Meter.d.ts +126 -0
  202. package/dist/Meter/index.d.ts +3 -0
  203. package/dist/Meter/index.js +3 -0
  204. package/dist/Meter-SKOOXQBC.css +87 -0
  205. package/dist/Modal/ConfirmModal.d.ts +74 -0
  206. package/dist/Modal/Modal.d.ts +154 -0
  207. package/dist/Modal/index.d.ts +5 -0
  208. package/dist/Modal/index.js +8 -0
  209. package/dist/Modal-XYQJ4BL6.css +484 -0
  210. package/dist/NewItemsNotice/NewItemsNotice.d.ts +28 -0
  211. package/dist/NewItemsNotice/index.d.ts +3 -0
  212. package/dist/NewItemsNotice/index.js +4 -0
  213. package/dist/NewItemsNotice-T4DSSPVV.css +60 -0
  214. package/dist/OrgLabel/OrgLabel.d.ts +117 -0
  215. package/dist/OrgLabel/index.d.ts +3 -0
  216. package/dist/OrgLabel/index.js +2 -0
  217. package/dist/OrgLabel-D7U6QJZD.css +293 -0
  218. package/dist/OrgNode/OrgNode.d.ts +103 -0
  219. package/dist/OrgNode/index.d.ts +3 -0
  220. package/dist/OrgNode/index.js +3 -0
  221. package/dist/OrgNode-BT7T2Q2X.css +214 -0
  222. package/dist/OrgTable/OrgTable.d.ts +113 -0
  223. package/dist/OrgTable/index.d.ts +3 -0
  224. package/dist/OrgTable/index.js +11 -0
  225. package/dist/OrgTable-VWMFC3TB.css +360 -0
  226. package/dist/PageHeader/PageHeader.d.ts +35 -0
  227. package/dist/PageHeader/index.d.ts +3 -0
  228. package/dist/PageHeader/index.js +3 -0
  229. package/dist/PageHeader-6EYWQXRE.css +88 -0
  230. package/dist/Popover/Popover.d.ts +91 -0
  231. package/dist/Popover/index.d.ts +3 -0
  232. package/dist/Popover/index.js +4 -0
  233. package/dist/Popover-WJGCF3ZQ.css +185 -0
  234. package/dist/PricingCard/PricingCard.d.ts +56 -0
  235. package/dist/PricingCard/index.d.ts +3 -0
  236. package/dist/PricingCard/index.js +4 -0
  237. package/dist/PricingCard-JFI7RYXP.css +278 -0
  238. package/dist/Prose/Prose.d.ts +33 -0
  239. package/dist/Prose/index.d.ts +3 -0
  240. package/dist/Prose/index.js +2 -0
  241. package/dist/Prose-BTXNFT2Q.css +99 -0
  242. package/dist/RelativeTime/RelativeTime.d.ts +31 -0
  243. package/dist/RelativeTime/clock.d.ts +9 -0
  244. package/dist/RelativeTime/format.d.ts +38 -0
  245. package/dist/RelativeTime/index.d.ts +6 -0
  246. package/dist/RelativeTime/index.js +4 -0
  247. package/dist/RelativeTime-EBAQPGO2.css +10 -0
  248. package/dist/SearchTrigger/SearchTrigger.d.ts +29 -0
  249. package/dist/SearchTrigger/index.d.ts +3 -0
  250. package/dist/SearchTrigger/index.js +2 -0
  251. package/dist/SearchTrigger-QXOYAUUY.css +79 -0
  252. package/dist/Section/Section.d.ts +41 -0
  253. package/dist/Section/index.d.ts +3 -0
  254. package/dist/Section/index.js +3 -0
  255. package/dist/Section-QRUPRIQ2.css +127 -0
  256. package/dist/SegmentedControl/SegmentedControl.d.ts +101 -0
  257. package/dist/SegmentedControl/index.d.ts +4 -0
  258. package/dist/SegmentedControl/index.js +5 -0
  259. package/dist/SegmentedControl-X3BI3XU4.css +68 -0
  260. package/dist/Select/Select.d.ts +153 -0
  261. package/dist/Select/index.d.ts +3 -0
  262. package/dist/Select/index.js +5 -0
  263. package/dist/Select-2X77FSWR.css +350 -0
  264. package/dist/Shortcut/index.d.ts +2 -0
  265. package/dist/Shortcut/index.js +4 -0
  266. package/dist/Shortcut/useShortcut.d.ts +68 -0
  267. package/dist/SidebarNav/SidebarNav.d.ts +117 -0
  268. package/dist/SidebarNav/index.d.ts +3 -0
  269. package/dist/SidebarNav/index.js +3 -0
  270. package/dist/SidebarNav-QGSFKZYA.css +319 -0
  271. package/dist/Skeleton/Skeleton.d.ts +50 -0
  272. package/dist/Skeleton/index.d.ts +3 -0
  273. package/dist/Skeleton/index.js +3 -0
  274. package/dist/Skeleton-V735HRGM.css +421 -0
  275. package/dist/StatCard/StatCard.d.ts +56 -0
  276. package/dist/StatCard/index.d.ts +3 -0
  277. package/dist/StatCard/index.js +3 -0
  278. package/dist/StatCard-KYPKZUWX.css +111 -0
  279. package/dist/StatGroup/StatGroup.d.ts +20 -0
  280. package/dist/StatGroup/index.d.ts +3 -0
  281. package/dist/StatGroup/index.js +2 -0
  282. package/dist/StatGroup-TGB6AEKM.css +80 -0
  283. package/dist/StatusDot/StatusDot.d.ts +25 -0
  284. package/dist/StatusDot/index.d.ts +3 -0
  285. package/dist/StatusDot/index.js +2 -0
  286. package/dist/StatusDot-HA2L2FSX.css +84 -0
  287. package/dist/Switch/Switch.d.ts +38 -0
  288. package/dist/Switch/index.d.ts +3 -0
  289. package/dist/Switch/index.js +2 -0
  290. package/dist/Switch-U4OWK4CL.css +169 -0
  291. package/dist/Table/Table.d.ts +51 -0
  292. package/dist/Table/index.d.ts +3 -0
  293. package/dist/Table/index.js +3 -0
  294. package/dist/Table-MDOLVUAW.css +159 -0
  295. package/dist/Tabs/Tabs.d.ts +97 -0
  296. package/dist/Tabs/index.d.ts +3 -0
  297. package/dist/Tabs/index.js +4 -0
  298. package/dist/Tabs/roving.d.ts +67 -0
  299. package/dist/Tabs-VLICJFVB.css +275 -0
  300. package/dist/Tag/Tag.d.ts +107 -0
  301. package/dist/Tag/index.d.ts +3 -0
  302. package/dist/Tag/index.js +3 -0
  303. package/dist/Tag-VNZEYLB6.css +406 -0
  304. package/dist/TagGroup/TagGroup.d.ts +41 -0
  305. package/dist/TagGroup/index.d.ts +3 -0
  306. package/dist/TagGroup/index.js +4 -0
  307. package/dist/TagGroup-APC2EFH4.css +75 -0
  308. package/dist/TagsInput/TagsInput.d.ts +112 -0
  309. package/dist/TagsInput/index.d.ts +3 -0
  310. package/dist/TagsInput/index.js +10 -0
  311. package/dist/TagsInput-W4P36PRJ.css +168 -0
  312. package/dist/Text/Text.d.ts +67 -0
  313. package/dist/Text/index.d.ts +3 -0
  314. package/dist/Text/index.js +2 -0
  315. package/dist/Text-XIPYYZX2.css +154 -0
  316. package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +47 -0
  317. package/dist/ThemeSwitcher/index.d.ts +4 -0
  318. package/dist/ThemeSwitcher/index.js +6 -0
  319. package/dist/ThemeSwitcher/preferences.d.ts +51 -0
  320. package/dist/TimeWindowPicker/TimeWindowPicker.d.ts +231 -0
  321. package/dist/TimeWindowPicker/index.d.ts +3 -0
  322. package/dist/TimeWindowPicker/index.js +13 -0
  323. package/dist/TimeWindowPicker/mask.d.ts +82 -0
  324. package/dist/TimeWindowPicker-7I7KWCMU.css +403 -0
  325. package/dist/Timeline/Timeline.d.ts +51 -0
  326. package/dist/Timeline/index.d.ts +3 -0
  327. package/dist/Timeline/index.js +3 -0
  328. package/dist/Timeline-27SYKOFX.css +144 -0
  329. package/dist/Toaster/Toaster.d.ts +108 -0
  330. package/dist/Toaster/index.d.ts +3 -0
  331. package/dist/Toaster/index.js +5 -0
  332. package/dist/Toaster-NVDCEIP5.css +306 -0
  333. package/dist/Toolbar/Toolbar.d.ts +62 -0
  334. package/dist/Toolbar/index.d.ts +3 -0
  335. package/dist/Toolbar/index.js +4 -0
  336. package/dist/Toolbar-IP6LXN45.css +48 -0
  337. package/dist/Tooltip/Tooltip.d.ts +51 -0
  338. package/dist/Tooltip/index.d.ts +3 -0
  339. package/dist/Tooltip/index.js +4 -0
  340. package/dist/Tooltip-LKQF7CE4.css +71 -0
  341. package/dist/Tree/index.d.ts +8 -0
  342. package/dist/Tree/index.js +1 -0
  343. package/dist/Tree/layout.d.ts +160 -0
  344. package/dist/Tree/model.d.ts +110 -0
  345. package/dist/Tree/useMeasuredSizes.d.ts +61 -0
  346. package/dist/Tree/useTreeState.d.ts +89 -0
  347. package/dist/TreeCanvas/TreeCanvas.d.ts +384 -0
  348. package/dist/TreeCanvas/index.d.ts +3 -0
  349. package/dist/TreeCanvas/index.js +10 -0
  350. package/dist/TreeCanvas/motion.d.ts +59 -0
  351. package/dist/TreeCanvas-WBNQPHC7.css +1098 -0
  352. package/dist/TreeGrid/TreeGrid.d.ts +142 -0
  353. package/dist/TreeGrid/index.d.ts +3 -0
  354. package/dist/TreeGrid/index.js +8 -0
  355. package/dist/TreeGrid-NSW7VMOX.css +132 -0
  356. package/dist/VisuallyHidden/VisuallyHidden.d.ts +23 -0
  357. package/dist/VisuallyHidden/index.d.ts +3 -0
  358. package/dist/VisuallyHidden/index.js +2 -0
  359. package/dist/VisuallyHidden-L552H7OA.css +21 -0
  360. package/dist/chunk-22O7LAW2.js +41 -0
  361. package/dist/chunk-23DHIMJA.js +38 -0
  362. package/dist/chunk-2EOKFKHX.js +263 -0
  363. package/dist/chunk-2HQR4U4D.js +143 -0
  364. package/dist/chunk-2PRH365R.js +74 -0
  365. package/dist/chunk-2ZQMA2WB.js +57 -0
  366. package/dist/chunk-34VGEDVV.js +907 -0
  367. package/dist/chunk-3CZ7XAVY.js +139 -0
  368. package/dist/chunk-3EYF6HKB.js +135 -0
  369. package/dist/chunk-3QRYCPXQ.js +116 -0
  370. package/dist/chunk-3ZP55QZE.js +40 -0
  371. package/dist/chunk-53DVJCVW.js +14 -0
  372. package/dist/chunk-5C5YMZQU.js +51 -0
  373. package/dist/chunk-5EKIWVOR.js +132 -0
  374. package/dist/chunk-5KPQ6D7N.js +54 -0
  375. package/dist/chunk-5SDBMKUO.js +297 -0
  376. package/dist/chunk-5VNUYO76.js +62 -0
  377. package/dist/chunk-5WS6L6FA.js +114 -0
  378. package/dist/chunk-6ZFVFA56.js +108 -0
  379. package/dist/chunk-7EM5T4ME.js +39 -0
  380. package/dist/chunk-7FZ53WDJ.js +163 -0
  381. package/dist/chunk-7HPRF5XN.js +525 -0
  382. package/dist/chunk-7RPGY3JE.js +43 -0
  383. package/dist/chunk-A2UXBCLO.js +48 -0
  384. package/dist/chunk-AV2DXAEL.js +27 -0
  385. package/dist/chunk-BHHIIK3M.js +17 -0
  386. package/dist/chunk-BZFWDIV6.js +9 -0
  387. package/dist/chunk-BZYDZBAN.js +123 -0
  388. package/dist/chunk-CMEE37QJ.js +628 -0
  389. package/dist/chunk-D35VTV2Z.js +106 -0
  390. package/dist/chunk-DD5BBGBE.js +162 -0
  391. package/dist/chunk-EN6K2IFA.js +256 -0
  392. package/dist/chunk-ESCO4XYW.js +144 -0
  393. package/dist/chunk-EUCC37WY.js +14 -0
  394. package/dist/chunk-EV6IMYJ6.js +62 -0
  395. package/dist/chunk-F27EPQ7D.js +68 -0
  396. package/dist/chunk-F4PJZ4ED.js +245 -0
  397. package/dist/chunk-F6OE5FH3.js +49 -0
  398. package/dist/chunk-FBZAKNSX.js +263 -0
  399. package/dist/chunk-FEFTGVMF.js +46 -0
  400. package/dist/chunk-GTOUGQQK.js +147 -0
  401. package/dist/chunk-GXQ3B46I.js +216 -0
  402. package/dist/chunk-H4FBTAYS.js +130 -0
  403. package/dist/chunk-HOXGBLEY.js +37 -0
  404. package/dist/chunk-HQNHV7D6.js +54 -0
  405. package/dist/chunk-HZ5XZNPS.js +98 -0
  406. package/dist/chunk-IAJLHVUA.js +28 -0
  407. package/dist/chunk-IJ7QXNIJ.js +1 -0
  408. package/dist/chunk-ITHXJHBB.js +280 -0
  409. package/dist/chunk-JCSA3XVH.js +32 -0
  410. package/dist/chunk-KLJCCMF3.js +97 -0
  411. package/dist/chunk-LWKJQTOM.js +77 -0
  412. package/dist/chunk-MNAXYY3R.js +215 -0
  413. package/dist/chunk-NDCATSW7.js +229 -0
  414. package/dist/chunk-NN62JQLR.js +29 -0
  415. package/dist/chunk-NPZY6YYL.js +251 -0
  416. package/dist/chunk-NTRZGNEX.js +529 -0
  417. package/dist/chunk-O6232G37.js +273 -0
  418. package/dist/chunk-O67VF5MS.js +58 -0
  419. package/dist/chunk-ODEQTPFM.js +6 -0
  420. package/dist/chunk-OFHBK7RI.js +498 -0
  421. package/dist/chunk-PNFASD6F.js +98 -0
  422. package/dist/chunk-PQADV6P6.js +19 -0
  423. package/dist/chunk-PZSWF74H.js +15 -0
  424. package/dist/chunk-Q4ZPPART.js +26 -0
  425. package/dist/chunk-QEUY3A5P.js +186 -0
  426. package/dist/chunk-QNCVHRZL.js +17 -0
  427. package/dist/chunk-QVE4GJAT.js +15 -0
  428. package/dist/chunk-QYOFACSP.js +36 -0
  429. package/dist/chunk-RA2ULG6H.js +29 -0
  430. package/dist/chunk-RDGD7Z7I.js +350 -0
  431. package/dist/chunk-RK4XPHVG.js +16 -0
  432. package/dist/chunk-RSAQOKH3.js +38 -0
  433. package/dist/chunk-S2XHHEW4.js +84 -0
  434. package/dist/chunk-S4GZWSKR.js +137 -0
  435. package/dist/chunk-SFZOKW2G.js +52 -0
  436. package/dist/chunk-UG46QBLT.js +325 -0
  437. package/dist/chunk-UOGSZKLT.js +134 -0
  438. package/dist/chunk-V2XMNLMS.js +52 -0
  439. package/dist/chunk-W4ENKCXJ.js +40 -0
  440. package/dist/chunk-W5J7R5EB.js +107 -0
  441. package/dist/chunk-WNI2WSJF.js +27 -0
  442. package/dist/chunk-WOYYD2YR.js +823 -0
  443. package/dist/chunk-WQX73TWF.js +1652 -0
  444. package/dist/chunk-XDTYBF2F.js +36 -0
  445. package/dist/chunk-XN4JBAN3.js +32 -0
  446. package/dist/chunk-XV6WRMBC.js +211 -0
  447. package/dist/chunk-YLYOWZ4V.js +33 -0
  448. package/dist/chunk-YODNNSZL.js +63 -0
  449. package/dist/chunk-ZCR6YGQ4.js +1 -0
  450. package/dist/chunk-ZFATEERP.js +144 -0
  451. package/dist/generated/index.d.ts +83 -0
  452. package/dist/generated/index.js +91 -0
  453. package/dist/index.d.ts +1 -1217
  454. package/dist/index.js +91 -4518
  455. package/dist/styles.css +14898 -4274
  456. package/dist/utils/cx.d.ts +10 -0
  457. package/dist/utils/headingLevel.d.ts +16 -0
  458. package/dist/utils/index.d.ts +6 -0
  459. package/dist/utils/index.js +4 -0
  460. package/dist/utils/tone.d.ts +25 -0
  461. package/dist/utils/useClipboard.d.ts +82 -0
  462. package/package.json +18 -10
  463. package/scripts/bundle-css.mjs +25 -0
  464. package/scripts/check-css-literals.mjs +166 -0
  465. package/scripts/check-css-variables.mjs +184 -0
  466. package/scripts/check-css.mjs +27 -0
  467. package/scripts/css-source.mjs +67 -0
  468. package/scripts/write-barrel.mjs +60 -0
  469. package/dist/Accordion-NIMJQIOI.css +0 -88
  470. package/dist/AppShell-ZW3NSFBP.css +0 -51
  471. package/dist/Avatar-V6NG6Q45.css +0 -67
  472. package/dist/Button-XGCTXXYP.css +0 -174
  473. package/dist/Callout-LEGDIMAM.css +0 -52
  474. package/dist/Card-BOZGBML7.css +0 -86
  475. package/dist/Checkbox-OCUICIIZ.css +0 -58
  476. package/dist/CodeBlock-IEMBNIQC.css +0 -90
  477. package/dist/Container-LTKBA2FW.css +0 -21
  478. package/dist/Copyable-IB57OTHZ.css +0 -123
  479. package/dist/DataTable-3GALZUW2.css +0 -1593
  480. package/dist/DateTimePicker-NMSSGVPK.css +0 -312
  481. package/dist/Eyebrow-AVBORAS2.css +0 -30
  482. package/dist/IconButton-GB4PJDG2.css +0 -82
  483. package/dist/ImageUpload-3HQDF2KC.css +0 -158
  484. package/dist/Input-ZHUTN7CU.css +0 -210
  485. package/dist/Kbd-Q77CDZY7.css +0 -23
  486. package/dist/Modal-FJVG66S4.css +0 -138
  487. package/dist/Popover-FUFULUE2.css +0 -123
  488. package/dist/PricingCard-NKYV3JHA.css +0 -238
  489. package/dist/Section-665ZIPG6.css +0 -20
  490. package/dist/Select-GPRF7PRB.css +0 -294
  491. package/dist/Skeleton-3WEFLRDN.css +0 -378
  492. package/dist/StatCard-RTJIVTRB.css +0 -50
  493. package/dist/Table-AR3TRY2E.css +0 -89
  494. package/dist/Tabs-XZ4JIH3E.css +0 -153
  495. package/dist/Tag-R5QDJLYJ.css +0 -163
  496. package/dist/TimeWindowPicker-L3G5Q7UT.css +0 -629
  497. package/dist/Toaster-2O65VOR4.css +0 -264
@@ -0,0 +1,8 @@
1
+ export { createTreeModel, isTypeAheadKey, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeTypeAhead, treeVisible, typeAheadBuffer, TYPE_AHEAD_RESET_MS, } from './model.js';
2
+ export type { TreeInput, TreeModel, TypeAheadState } from './model.js';
3
+ export { layoutConnectors, layoutForest } from './layout.js';
4
+ export type { ForestLayout, LayoutGaps, LayoutNode, LayoutRanks, PlacedNode, TreeConnector, TreeConnectorShape, } from './layout.js';
5
+ export { treeItemAction, treeStep, useTreeState } from './useTreeState.js';
6
+ export type { TreeItemAction, TreeKeyEvent, TreeState, TreeStep, TreeViewHandle } from './useTreeState.js';
7
+ export { SIZE_EPSILON, useLayoutAnchor, useMeasuredSizes } from './useMeasuredSizes.js';
8
+ export type { MeasuredSizes } from './useMeasuredSizes.js';
@@ -0,0 +1 @@
1
+ export { SIZE_EPSILON, TYPE_AHEAD_RESET_MS, createTreeModel, isTypeAheadKey, layoutConnectors, layoutForest, treeAllExpandable, treeAncestors, treeCollapseOrAscend, treeExpandOrDescend, treeExpandTo, treeExpandable, treeFirst, treeFirstChild, treeItemAction, treeLast, treeLevel, treeNext, treeParent, treePosInSet, treePrevious, treeSetSize, treeStep, treeTypeAhead, treeVisible, typeAheadBuffer, useLayoutAnchor, useMeasuredSizes, useTreeState } from '../chunk-NTRZGNEX.js';
@@ -0,0 +1,160 @@
1
+ /**
2
+ * A tidy layout for a forest of variable size boxes, as a pure function.
3
+ *
4
+ * WHY IT IS HAND WRITTEN. The package ships no layout library: the ones that
5
+ * exist either lay out general graphs (and cost two orders of magnitude more
6
+ * code and time for a tree) or assume every node is the same size, and a unit
7
+ * card that stacks its seats inside it is as tall as its membership. This is
8
+ * the Reingold-Tilford family, sized to that problem.
9
+ *
10
+ * THE RULES IT KEEPS.
11
+ *
12
+ * - SIZES ARE INPUT. Nothing here measures anything: the caller passes each
13
+ * box's width and height (measured in a browser by `useMeasuredSizes`,
14
+ * injected in a test), so the layout is deterministic and testable without a
15
+ * DOM.
16
+ * - CHILDREN SIT AT THEIR PARENT'S BOTTOM PLUS `gapY` (`ranks: 'per-parent'`,
17
+ * the default), or on a band shared by every box of their depth
18
+ * (`ranks: 'shared'`). Per-parent is the tidier of the two where cards vary
19
+ * in height, because a short card's children do not hang a tall neighbour's
20
+ * height below it; shared is what an ORG CHART looks like, where a rank of
21
+ * the organization is a row a reader scans across, and it is what the
22
+ * console's own chart draws. See [LayoutGaps.ranks].
23
+ * - SEPARATION IS BY VERTICAL EXTENT, NOT BY DEPTH. A tall card in one subtree
24
+ * can sit beside a grandchild in the next, and a contour indexed by depth
25
+ * would let the two overlap. Each subtree's left and right outline is kept
26
+ * as a function of y, and a neighbour is placed `gapX` clear of every y they
27
+ * share, including the band between a parent and its children where the
28
+ * connector runs. On shared ranks that band carries no constraint, because
29
+ * nothing is ever drawn between two ranks: a subtree is then held clear of
30
+ * its neighbour exactly where the two have boxes on one rank, which is the
31
+ * separation a rank-and-order layout keeps and is why a wide subtree's outer
32
+ * grandchild may sit under its parent's neighbour.
33
+ * - PARENTS ARE CENTRED over their first and last child.
34
+ * - SIBLINGS ARE PACKED FROM BOTH SIDES AND AVERAGED. Packing only from the
35
+ * left pushes a small subtree between two large ones against its left
36
+ * neighbour. Both packings satisfy every separation, the constraints are
37
+ * linear, so their average does too; the result is also mirror symmetric,
38
+ * which is what reads as tidy.
39
+ * - A ZERO HEIGHT BOX STILL OCCUPIES ITS ROW, so two of them are never drawn
40
+ * on top of each other.
41
+ *
42
+ * Coordinates come back with the forest's top left corner at the origin plus
43
+ * `margin`, and boxes in pre-order. The outline merge costs time proportional to a subtree's
44
+ * breakpoints, so a layout is roughly quadratic in the worst case; for the few
45
+ * hundred boxes of an organization chart that is well under a millisecond per
46
+ * hundred nodes, and it runs on a size change, never per frame.
47
+ */
48
+ import type { CanvasRect } from '../Canvas/geometry.js';
49
+ /** One box to lay out: a size, an id and its children. */
50
+ export interface LayoutNode {
51
+ id: string;
52
+ width: number;
53
+ height: number;
54
+ children: readonly LayoutNode[];
55
+ }
56
+ /**
57
+ * Where a box's top edge sits: under its own parent, or on its depth's band.
58
+ *
59
+ * `per-parent` puts every box `gapY` under its own parent's bottom, so a rank
60
+ * of the chart is not a straight line and a short card's children ride up
61
+ * beside a tall neighbour's. It is the tidier drawing of a forest whose cards
62
+ * vary a lot in height.
63
+ *
64
+ * `shared` gives every depth ONE band, as tall as the tallest box in it, and
65
+ * centres each box in its band; the next band starts `gapY` below. That is
66
+ * what an ORG CHART is: a rank is a row a reader scans across, and two units
67
+ * of one company sit on one line whether or not one of them carries a lead
68
+ * along its bottom edge. It is also what a rank-and-order graph layout
69
+ * produces for a tree, which is what the console's chart is drawn with.
70
+ */
71
+ export type LayoutRanks = 'per-parent' | 'shared';
72
+ export interface LayoutGaps {
73
+ /** Horizontal space between neighbouring boxes that share any height. */
74
+ gapX: number;
75
+ /**
76
+ * Vertical space between ranks: a box's bottom and its children's tops on
77
+ * `per-parent`, one band's bottom and the next band's top on `shared`.
78
+ */
79
+ gapY: number;
80
+ /** Where a box's top edge sits. Unset, `per-parent`. */
81
+ ranks?: LayoutRanks | undefined;
82
+ /**
83
+ * Space kept on all four sides of the forest.
84
+ *
85
+ * IT IS PART OF THE LAYOUT rather than padding on whatever draws it, because
86
+ * the canvas scrolls and CLIPS: a margin drawn as padding is outside the
87
+ * scrollable content, so the outermost card's halo, its focus ring and the
88
+ * control hanging under it are cut off at the frame at exactly the moment a
89
+ * reader has panned to that card. Unset, none.
90
+ */
91
+ margin?: number | undefined;
92
+ }
93
+ /** A box where the layout put it. */
94
+ export interface PlacedNode extends CanvasRect {
95
+ id: string;
96
+ depth: number;
97
+ parent: string | null;
98
+ }
99
+ export interface ForestLayout {
100
+ /** Every box, in pre-order. */
101
+ nodes: PlacedNode[];
102
+ byId: Map<string, PlacedNode>;
103
+ /** The forest's extent: always at the origin. */
104
+ bounds: CanvasRect;
105
+ }
106
+ /** Lays out a forest of measured boxes: see the module doc for the rules. */
107
+ export declare function layoutForest(roots: readonly LayoutNode[], gaps: LayoutGaps): ForestLayout;
108
+ /** The two shapes a connector is drawn in: see [layoutConnectors]. */
109
+ export type TreeConnectorShape = 'step' | 'curve';
110
+ /**
111
+ * One connector: the child it arrives at, the parent it leaves, and the path.
112
+ *
113
+ * IT CARRIES THE CHILD'S ID because a connector can be the child's own colour.
114
+ * A chart that tints a node by what it holds tints the line into it too, or the
115
+ * branch arrives at a tinted card in the chart's neutral ink and reads as
116
+ * somebody else's. The id is the only thing a caller needs to ask its own
117
+ * question about the line, and it costs nothing to the caller that has none.
118
+ */
119
+ export interface TreeConnector {
120
+ /** The box the connector arrives at. */
121
+ id: string;
122
+ /** The box it leaves. */
123
+ parent: string;
124
+ /** SVG path data, in layout coordinates. */
125
+ d: string;
126
+ }
127
+ /**
128
+ * The connector from each box to its parent, as SVG path data: down from the
129
+ * parent's bottom centre and into the child's top centre.
130
+ *
131
+ * TWO SHAPES, AND THE DEFAULT IS THE STEP: down, a rounded corner, across the
132
+ * middle of the gap, another rounded corner, and down into the child. The
133
+ * square step and the single cubic were both tried here first.
134
+ *
135
+ * A SQUARE step reads correctly at any width but meets its own siblings at a
136
+ * right angle on the shared horizontal run, so a parent with four children
137
+ * draws one long line with four corners on it and which corner belongs to
138
+ * which child is read by tracing.
139
+ *
140
+ * A single CUBIC from the parent's bottom to the child's top (`curve`) fixes
141
+ * that when the children sit close together, and loses definition exactly
142
+ * where a chart is widest. A subtree is as wide as everything under it, so the
143
+ * horizontal distance between a parent and an outer child grows without bound
144
+ * while the vertical gap stays one rank; with both control points halfway down
145
+ * that gap, the curve spends most of its length running horizontally in the
146
+ * middle of the gap and reads as a long flat line passing under the parent,
147
+ * its ends two stubs nowhere near it. Measured on a three-unit company: 430
148
+ * units across, 105 down.
149
+ *
150
+ * The rounded step is the shape that keeps both properties, so it is what a
151
+ * chart gets unless it asks otherwise: the corner is where the branch turns,
152
+ * so it sits near the CHILD rather than shared with its siblings, and the drop
153
+ * into each child is vertical however far to the side it is. `curve` is the
154
+ * shape of the console's own org chart, which this package is drawn to match,
155
+ * and a caller that wants that drawing asks for it knowing the above.
156
+ *
157
+ * Here rather than in the component that draws them, because it is arithmetic
158
+ * over the layout and nothing about it is React's.
159
+ */
160
+ export declare function layoutConnectors(layout: ForestLayout, shape?: TreeConnectorShape): TreeConnector[];
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The visible order of a collapsible tree, as pure functions.
3
+ *
4
+ * WHY IT EXISTS. Two views of one hierarchy need the same answers: a chart
5
+ * drawn as a `tree` and an outline drawn as a `treegrid`. They are different
6
+ * ARIA patterns (a treegrid has cells and row actions a tree must not contain)
7
+ * so they cannot share one keyboard hook, but "what is the next visible row",
8
+ * "where does Left go" and "which row does typing `eng` land on" must not have
9
+ * two answers. The model is that shared half; each view owns its roles, its
10
+ * focus and its keys.
11
+ *
12
+ * THE RULES IT KEEPS.
13
+ *
14
+ * - VISIBLE ORDER IS PRE-ORDER, skipping the descendants of collapsed nodes.
15
+ * - RIGHT EXPANDS A CLOSED NODE, or moves to the first child of an open one;
16
+ * LEFT COLLAPSES AN OPEN NODE, or moves to the parent. A leaf only moves.
17
+ * - TYPE AHEAD matches the start of a visible label, case insensitively, from
18
+ * the row after the current one and wrapping. Typing one character again
19
+ * cycles through the rows that start with it. A word never STARTS with `+`,
20
+ * `-` or `0`: those are a canvas's zoom and fit keys, and a press that means
21
+ * "fit" one moment and "find the row starting with zero" the next is a press
22
+ * nobody can predict. Inside a word they are ordinary characters, so
23
+ * "Q3 2026" is still typed whole.
24
+ * - NOTHING IS MUTATED. Expansion is a set the view owns and passes in.
25
+ *
26
+ * Every function is named for the tree, because this module's exports reach a
27
+ * consumer through the package barrel: `visible` and `level` are words an
28
+ * application has its own meaning for, and `treeVisible` and `treeLevel` are
29
+ * not.
30
+ */
31
+ /** One node as a caller describes it: an id, the text a reader sees, and children. */
32
+ export interface TreeInput {
33
+ id: string;
34
+ /** What type ahead matches against: the text a person reads on the row. */
35
+ label: string;
36
+ children?: readonly TreeInput[];
37
+ }
38
+ export interface TreeModel {
39
+ roots: readonly string[];
40
+ children: ReadonlyMap<string, readonly string[]>;
41
+ parent: ReadonlyMap<string, string | null>;
42
+ label: ReadonlyMap<string, string>;
43
+ /** Zero for a root. */
44
+ depth: ReadonlyMap<string, number>;
45
+ /** Every node in pre-order, collapsed or not. */
46
+ order: readonly string[];
47
+ }
48
+ /** Builds the model. Ids must be unique across the whole forest. */
49
+ export declare function createTreeModel(forest: readonly TreeInput[]): TreeModel;
50
+ /** Whether a node has children, so a view gives it `aria-expanded` and a chevron. */
51
+ export declare function treeExpandable(tree: TreeModel, id: string): boolean;
52
+ /** `aria-level`: one for a root. */
53
+ export declare function treeLevel(tree: TreeModel, id: string): number;
54
+ /** `aria-setsize`: how many siblings, itself included. */
55
+ export declare function treeSetSize(tree: TreeModel, id: string): number;
56
+ /** `aria-posinset`: one based position among its siblings. */
57
+ export declare function treePosInSet(tree: TreeModel, id: string): number;
58
+ export declare function treeParent(tree: TreeModel, id: string): string | null;
59
+ export declare function treeFirstChild(tree: TreeModel, id: string): string | null;
60
+ /** Its ancestors, the root first. */
61
+ export declare function treeAncestors(tree: TreeModel, id: string): string[];
62
+ /** The expanded set with every ancestor of `id` opened, so the node is visible. */
63
+ export declare function treeExpandTo(tree: TreeModel, expanded: ReadonlySet<string>, id: string): Set<string>;
64
+ /** Every node that can be expanded: what "Expand all" sets. */
65
+ export declare function treeAllExpandable(tree: TreeModel): Set<string>;
66
+ /** Every visible node, in order. */
67
+ export declare function treeVisible(tree: TreeModel, expanded: ReadonlySet<string>): string[];
68
+ export declare function treeFirst(tree: TreeModel): string | null;
69
+ export declare function treeLast(tree: TreeModel, expanded: ReadonlySet<string>): string | null;
70
+ /** The next visible node after `id`, or null at the end. */
71
+ export declare function treeNext(tree: TreeModel, expanded: ReadonlySet<string>, id: string): string | null;
72
+ /** The visible node before `id`, or null at the start. */
73
+ export declare function treePrevious(tree: TreeModel, expanded: ReadonlySet<string>, id: string): string | null;
74
+ /** What Right means on `id`: expand it, move to its first child, or nothing. */
75
+ export declare function treeExpandOrDescend(tree: TreeModel, expanded: ReadonlySet<string>, id: string): {
76
+ expand: string;
77
+ } | {
78
+ focus: string;
79
+ } | null;
80
+ /** What Left means on `id`: collapse it, move to its parent, or nothing. */
81
+ export declare function treeCollapseOrAscend(tree: TreeModel, expanded: ReadonlySet<string>, id: string): {
82
+ collapse: string;
83
+ } | {
84
+ focus: string;
85
+ } | null;
86
+ /**
87
+ * How long a pause ends a type ahead word: the WAI-ARIA practices' own
88
+ * examples use half a second.
89
+ */
90
+ export declare const TYPE_AHEAD_RESET_MS = 500;
91
+ /**
92
+ * The word typed so far, and when its last key was pressed (milliseconds). A
93
+ * view starts from `{ text: '', at: 0 }` and keeps what `typeAheadBuffer`
94
+ * returns.
95
+ */
96
+ export interface TypeAheadState {
97
+ text: string;
98
+ at: number;
99
+ }
100
+ /** Whether a key press at `now` is a type ahead character rather than a command. */
101
+ export declare function isTypeAheadKey(event: {
102
+ key: string;
103
+ ctrlKey?: boolean;
104
+ metaKey?: boolean;
105
+ altKey?: boolean;
106
+ }, state: TypeAheadState, now: number): boolean;
107
+ /** The buffer after a type ahead key at `now`. */
108
+ export declare function typeAheadBuffer(state: TypeAheadState, key: string, now: number): TypeAheadState;
109
+ /** The visible node whose label starts with `text`, searching after `from` and wrapping. */
110
+ export declare function treeTypeAhead(tree: TreeModel, expanded: ReadonlySet<string>, from: string | null, text: string): string | null;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The rendered size of each card, measured by the browser, for a layout to use.
3
+ *
4
+ * WHY IT EXISTS. A card's height depends on what it holds (a unit stacks its
5
+ * seats), its spacing scales with the density setting, and its text follows
6
+ * the reader's own browser font size. A layout fed sizes copied into
7
+ * TypeScript as constants would overlap cards in compact or comfortable
8
+ * density and at any font size but the one somebody tested. So the cards are
9
+ * rendered at their real width (a token), measured, and the measured sizes are
10
+ * what the layout runs on.
11
+ *
12
+ * THE RULES IT KEEPS.
13
+ *
14
+ * - ONE ResizeObserver for every card, not one per card: a chart of a few
15
+ * hundred cards should cost one observer and one batched update per frame.
16
+ * - A SIZE CHANGE IS APPLIED BEFORE PAINT. The observer reports after layout
17
+ * and before paint, and the update is flushed synchronously there, so a card
18
+ * that grows (a font finished loading, density changed, an operation added a
19
+ * seat) is never painted overlapping its neighbour for a frame.
20
+ * - SUB-PIXEL NOISE IS NOT A CHANGE. Fractional re-measurements under half a
21
+ * pixel do not trigger a relayout, which would otherwise jitter a chart
22
+ * whose text renders at fractional sizes.
23
+ * - NOTHING IS LAID OUT BEFORE IT IS MEASURED. `measured(ids)` says whether
24
+ * every card a layout needs has a size yet; until it does the caller shows
25
+ * nothing and fits nothing.
26
+ * - THE ACTED ON NODE STAYS PUT. `useLayoutAnchor` moves the view before paint
27
+ * so the node the operator just touched keeps its screen position when a
28
+ * relayout moves it in the world.
29
+ *
30
+ * Sizes are border box, unscaled by any transform: a card inside a zoomed
31
+ * canvas reports the size it is laid out at, which is the size a layout needs.
32
+ * The observer WATCHES the border box too, not the default content box:
33
+ * density scales a card's padding, and a change to padding alone moves the
34
+ * border box without touching the content box, so an observer left on the
35
+ * default would never report it and the cards would overlap. A size is kept
36
+ * after its card unmounts, so a card that returns (an undo) is placed at its
37
+ * last size until the observer reports it again.
38
+ */
39
+ import type { CanvasPoint, CanvasSize } from '../Canvas/geometry.js';
40
+ /** Changes smaller than this, in CSS pixels, are measurement noise rather than a new size. */
41
+ export declare const SIZE_EPSILON = 0.5;
42
+ export interface MeasuredSizes {
43
+ /** The ref callback for the element drawn for `id`. Stable for the life of the id. */
44
+ measure: (id: string) => (el: HTMLElement | null) => void;
45
+ /** Every size seen so far, by id. A new map whenever any size changes. */
46
+ sizes: ReadonlyMap<string, CanvasSize>;
47
+ /** Whether every one of `ids` has been measured at least once. */
48
+ measured: (ids: Iterable<string>) => boolean;
49
+ }
50
+ export declare function useMeasuredSizes(): MeasuredSizes;
51
+ /**
52
+ * Keeps the acted on node still on screen when a new layout moves it.
53
+ *
54
+ * `positions` is each node's world position in the current layout (null while
55
+ * there is none); `anchorId` is the node the operator just acted on. When a
56
+ * new layout moves that node, `keep(before, after)` runs before paint with its
57
+ * old and new position; a canvas's `anchor` is exactly that. A node that did
58
+ * not exist in the previous layout has no position to keep, so the caller
59
+ * anchors something that did (a new seat's unit, a deleted seat's neighbour).
60
+ */
61
+ export declare function useLayoutAnchor(positions: ReadonlyMap<string, CanvasPoint> | null, anchorId: string | null, keep: (before: CanvasPoint, after: CanvasPoint) => void): void;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * A collapsible tree's state, and what a key press asks of it.
3
+ *
4
+ * ONE COPY FOR BOTH PATTERNS. A chart drawn as a `tree` and an outline drawn
5
+ * as a `treegrid` keep the same expansion and roving focus rules over the same
6
+ * visible order model; only their roles, their focus and their cells differ.
7
+ * That shared half lives here.
8
+ */
9
+ import { type TreeInput, type TreeModel } from './model.js';
10
+ /** The slice of a keyboard event these functions read, so a plain object works too. */
11
+ export interface TreeKeyEvent {
12
+ key: string;
13
+ ctrlKey?: boolean;
14
+ metaKey?: boolean;
15
+ altKey?: boolean;
16
+ shiftKey?: boolean;
17
+ }
18
+ export interface TreeState {
19
+ readonly model: TreeModel;
20
+ readonly expanded: ReadonlySet<string>;
21
+ /** Every visible node, in order. */
22
+ readonly rows: readonly string[];
23
+ /** The roving tab stop: always a visible node, or `null` for an empty tree. */
24
+ readonly active: string | null;
25
+ setActive(id: string): void;
26
+ toggle(id: string): void;
27
+ expandAll(): void;
28
+ /** Collapses everything but the tops, so the tree keeps something to stand on. */
29
+ collapseAll(): void;
30
+ /** Opens every collapsed ancestor of `id`; true when any was closed. */
31
+ open(id: string): boolean;
32
+ /**
33
+ * The node typing `key` at `now` finds after `from`: `null` when nothing
34
+ * matches, `undefined` when the key is not a type ahead key at all.
35
+ */
36
+ typed(event: TreeKeyEvent, from: string, now: number): string | null | undefined;
37
+ }
38
+ /**
39
+ * What is collapsed, which node holds the tab stop, and type ahead.
40
+ *
41
+ * COLLAPSED, NOT EXPANDED, IS WHAT IS KEPT: a node nobody has closed is open,
42
+ * which is also what a node an operation just added should be. The tab stop is
43
+ * the node last focused, else the selection, else the first node, and is moved
44
+ * to the nearest visible ancestor when its own node is hidden or gone, so the
45
+ * tree always has exactly one way in.
46
+ */
47
+ export declare function useTreeState(forest: readonly TreeInput[], selected: string | null): TreeState;
48
+ /** What a navigation key asks of a tree: focus a node, or open or close one. */
49
+ export type TreeStep = {
50
+ readonly focus: string;
51
+ } | {
52
+ readonly toggle: string;
53
+ };
54
+ /**
55
+ * What a navigation key pressed on `id` asks for: a step, `null` for a key
56
+ * that is the tree's but leads nowhere (Up on the first node), or `undefined`
57
+ * for a key that is not the tree's at all, which the caller leaves alone.
58
+ *
59
+ * Down and Up walk the visible order; Right opens a closed node or enters an
60
+ * open one; Left closes an open node or climbs to the parent; Home and End
61
+ * jump; a printable key types ahead. A chord with Ctrl, Command or Alt is
62
+ * never the tree's.
63
+ */
64
+ export declare function treeStep(tree: TreeState, id: string, event: TreeKeyEvent & {
65
+ timeStamp: number;
66
+ }): TreeStep | null | undefined;
67
+ /**
68
+ * What a key press asks of the ITEM it landed on, as opposed to of the tree.
69
+ *
70
+ * `activate` is the item's primary action (a row's editor, a card's form),
71
+ * `remove` deletes it, and `menu` opens its own menu, which the widget handles
72
+ * itself because it owns which menu is open. Shift+F10 is the menu too: the
73
+ * ContextMenu key is missing from several keyboards and every platform that
74
+ * lacks it offers that chord instead.
75
+ *
76
+ * Shift with Enter, Delete or Backspace is NOT the item's: those are a text
77
+ * selection's or an application's, and an item that claimed them would delete
78
+ * a node while somebody was extending a selection over it.
79
+ */
80
+ export type TreeItemAction = 'activate' | 'remove' | 'menu';
81
+ export declare function treeItemAction(event: TreeKeyEvent): TreeItemAction | null;
82
+ /** What a screen can ask of a tree view it holds a ref to. */
83
+ export interface TreeViewHandle {
84
+ /** Open every collapsed ancestor of a node, focus it, and bring it into view. */
85
+ focusNode(id: string): void;
86
+ expandAll(): void;
87
+ /** Collapse everything but the tops, so the tree keeps something to stand on. */
88
+ collapseAll(): void;
89
+ }