@crewlethq/ui 0.2.0 → 0.3.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 +142 -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-AHX3Q2JD.css +428 -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 +60 -0
  62. package/dist/CodeBlock/index.d.ts +3 -0
  63. package/dist/CodeBlock/index.js +7 -0
  64. package/dist/CodeBlock-U2W6NNVC.css +153 -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 +54 -0
  78. package/dist/Copyable/Copyable.d.ts +34 -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 +68 -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 +49 -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 +68 -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 +138 -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 +36 -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-2PRH365R.js +74 -0
  364. package/dist/chunk-2ZQMA2WB.js +57 -0
  365. package/dist/chunk-3CZ7XAVY.js +139 -0
  366. package/dist/chunk-3EYF6HKB.js +135 -0
  367. package/dist/chunk-3ZP55QZE.js +40 -0
  368. package/dist/chunk-53DVJCVW.js +14 -0
  369. package/dist/chunk-5C5YMZQU.js +51 -0
  370. package/dist/chunk-5EKIWVOR.js +132 -0
  371. package/dist/chunk-5IMACPJS.js +495 -0
  372. package/dist/chunk-5KPQ6D7N.js +54 -0
  373. package/dist/chunk-5SDBMKUO.js +297 -0
  374. package/dist/chunk-5WS6L6FA.js +114 -0
  375. package/dist/chunk-7EM5T4ME.js +39 -0
  376. package/dist/chunk-7FZ53WDJ.js +163 -0
  377. package/dist/chunk-7HPRF5XN.js +525 -0
  378. package/dist/chunk-7RPGY3JE.js +43 -0
  379. package/dist/chunk-A2UXBCLO.js +48 -0
  380. package/dist/chunk-ARMRX2YV.js +96 -0
  381. package/dist/chunk-AV2DXAEL.js +27 -0
  382. package/dist/chunk-BHHIIK3M.js +17 -0
  383. package/dist/chunk-BZFWDIV6.js +9 -0
  384. package/dist/chunk-BZYDZBAN.js +123 -0
  385. package/dist/chunk-CMEE37QJ.js +628 -0
  386. package/dist/chunk-D3OADIM6.js +112 -0
  387. package/dist/chunk-DD5BBGBE.js +162 -0
  388. package/dist/chunk-EHMQQHYR.js +1652 -0
  389. package/dist/chunk-EN6K2IFA.js +256 -0
  390. package/dist/chunk-EPOOQZYA.js +118 -0
  391. package/dist/chunk-ESCO4XYW.js +144 -0
  392. package/dist/chunk-EUCC37WY.js +14 -0
  393. package/dist/chunk-EV6IMYJ6.js +62 -0
  394. package/dist/chunk-F27EPQ7D.js +68 -0
  395. package/dist/chunk-F4PJZ4ED.js +245 -0
  396. package/dist/chunk-F6OE5FH3.js +49 -0
  397. package/dist/chunk-FBZAKNSX.js +263 -0
  398. package/dist/chunk-FEFTGVMF.js +46 -0
  399. package/dist/chunk-G2QFRTJ2.js +823 -0
  400. package/dist/chunk-GHYY2WPF.js +907 -0
  401. package/dist/chunk-GTOUGQQK.js +147 -0
  402. package/dist/chunk-GUIF6Q6N.js +143 -0
  403. package/dist/chunk-GXQ3B46I.js +216 -0
  404. package/dist/chunk-H4FBTAYS.js +130 -0
  405. package/dist/chunk-HOXGBLEY.js +37 -0
  406. package/dist/chunk-HQNHV7D6.js +54 -0
  407. package/dist/chunk-HTDFCRJZ.js +92 -0
  408. package/dist/chunk-HZ5XZNPS.js +98 -0
  409. package/dist/chunk-IAJLHVUA.js +28 -0
  410. package/dist/chunk-IJ7QXNIJ.js +1 -0
  411. package/dist/chunk-ITHXJHBB.js +280 -0
  412. package/dist/chunk-JCSA3XVH.js +32 -0
  413. package/dist/chunk-KLJCCMF3.js +97 -0
  414. package/dist/chunk-LGCPQIOZ.js +49 -0
  415. package/dist/chunk-LWKJQTOM.js +77 -0
  416. package/dist/chunk-MNAXYY3R.js +215 -0
  417. package/dist/chunk-NN62JQLR.js +29 -0
  418. package/dist/chunk-NPZY6YYL.js +251 -0
  419. package/dist/chunk-NTRZGNEX.js +529 -0
  420. package/dist/chunk-O6232G37.js +273 -0
  421. package/dist/chunk-O67VF5MS.js +58 -0
  422. package/dist/chunk-ODEQTPFM.js +6 -0
  423. package/dist/chunk-PNFASD6F.js +98 -0
  424. package/dist/chunk-PQADV6P6.js +19 -0
  425. package/dist/chunk-PZSWF74H.js +15 -0
  426. package/dist/chunk-Q4ZPPART.js +26 -0
  427. package/dist/chunk-QNCVHRZL.js +17 -0
  428. package/dist/chunk-QVE4GJAT.js +15 -0
  429. package/dist/chunk-QYOFACSP.js +36 -0
  430. package/dist/chunk-RA2ULG6H.js +29 -0
  431. package/dist/chunk-RDGD7Z7I.js +350 -0
  432. package/dist/chunk-RK4XPHVG.js +16 -0
  433. package/dist/chunk-RSAQOKH3.js +38 -0
  434. package/dist/chunk-S2XHHEW4.js +84 -0
  435. package/dist/chunk-S4GZWSKR.js +137 -0
  436. package/dist/chunk-SFZOKW2G.js +52 -0
  437. package/dist/chunk-T7FKOJKW.js +221 -0
  438. package/dist/chunk-UG46QBLT.js +325 -0
  439. package/dist/chunk-UOGSZKLT.js +134 -0
  440. package/dist/chunk-V2XMNLMS.js +52 -0
  441. package/dist/chunk-V663QU4R.js +51 -0
  442. package/dist/chunk-W4ENKCXJ.js +40 -0
  443. package/dist/chunk-W5J7R5EB.js +107 -0
  444. package/dist/chunk-WNI2WSJF.js +27 -0
  445. package/dist/chunk-XDTYBF2F.js +36 -0
  446. package/dist/chunk-XN4JBAN3.js +32 -0
  447. package/dist/chunk-XV6WRMBC.js +211 -0
  448. package/dist/chunk-YLYOWZ4V.js +33 -0
  449. package/dist/chunk-YMWONFSI.js +170 -0
  450. package/dist/chunk-ZCR6YGQ4.js +1 -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 +14841 -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 +30 -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,109 @@
1
+ /**
2
+ * A list screen, whole: the head, the toolbar, the filter chips and the table.
3
+ *
4
+ * WHY ONE COMPONENT RATHER THAN FIVE A SCREEN COMPOSES ITSELF. The five parts
5
+ * are separately useful and are exported separately, but the RULES BETWEEN
6
+ * them are where every list screen went wrong on its own:
7
+ *
8
+ * 1. WHICH CHIPS ARE ON SCREEN is not "the filters that have a value". An axis
9
+ * a reader just picked from the Filter menu has no value yet, and a chip
10
+ * that appeared only once it did made picking a multiple-choice filter look
11
+ * like a control that did nothing. So a chip is drawn for an axis that
12
+ * HAS a value or that the reader JUST ADDED, and the second half is state
13
+ * that lives here because the toolbar raises it and the chip row renders it.
14
+ * 2. REMOVING A CHIP IS NOT THE SAME AS EMPTYING IT. Taking the axis off the
15
+ * list also puts its value back to the blank one, and the blank value of a
16
+ * single-choice filter is its first option ("Any status"), not the empty
17
+ * string.
18
+ * 3. THE ARCHIVED ROWS ARE HIDDEN AND THEIR COLUMN IS NOT DRAWN, until the
19
+ * toggle is on: a Deleted at column over a list with no deleted rows in it
20
+ * is a column of nothing that every reader still has to scan past.
21
+ * 4. FILTERING HAPPENS BEFORE HIDING. A reader who has both "role is admin"
22
+ * and "show archived" on wants archived admins, which is what applying the
23
+ * two in that order gives them.
24
+ *
25
+ * WHAT IT DOES NOT OWN IS THE STATE. Values and callbacks, all of them, so the
26
+ * screen keeps its filters wherever its own history lives, which for every
27
+ * screen in this product is the URL. The one exception is the two pieces of
28
+ * state that have no meaning outside this component (which chips are on, and
29
+ * which chip just opened), and the archived toggle, which is controlled when a
30
+ * caller passes a value for it and otherwise keeps its own.
31
+ */
32
+ import { type ReactNode } from 'react';
33
+ import { type DataTableProps } from '../DataTable/index.js';
34
+ import type { HeadingLevel } from '../utils/headingLevel.js';
35
+ import { type DataViewToolbarLabels } from './DataViewToolbar.js';
36
+ import { type FilterAxisLabels } from './FilterAxisBar.js';
37
+ import { type DataViewColumn, type DataViewSortState } from './columns.js';
38
+ import { type FilterDef, type FilterValues } from './filters.js';
39
+ /** Every string the composite renders on its own, by the part that renders it. */
40
+ export interface DataViewLabels {
41
+ toolbar: Partial<DataViewToolbarLabels>;
42
+ chips: Partial<FilterAxisLabels>;
43
+ /** The column appended while archived rows are shown. */
44
+ archivedAt: string;
45
+ /** What that column says for a row nobody archived. */
46
+ archivedAtAbsent: string;
47
+ }
48
+ /**
49
+ * The table properties a screen passes straight through. Each one means
50
+ * exactly what it means on [DataTable]; they are listed rather than spread so
51
+ * the composite's own signature says what it accepts.
52
+ */
53
+ type PassedToTable<TRow> = Pick<DataTableProps<TRow>, 'rowKey' | 'getRowKey' | 'rowActions' | 'onRowClick' | 'getRowHref' | 'rowTone' | 'isSelected' | 'renderExpandedRow' | 'renderAccessoryRow' | 'emptyMessage' | 'endMessage' | 'loading' | 'skeletonRows' | 'error' | 'density' | 'maxBodyHeight' | 'visibleColumns' | 'onVisibleColumnsChange' | 'columnOrder' | 'onColumnOrderChange' | 'showSettings' | 'storageKey' | 'paginated' | 'defaultItemsPerPage' | 'itemsPerPageOptions' | 'itemsPerPage' | 'onItemsPerPageChange' | 'page' | 'onPageChange' | 'pageCount' | 'resizable' | 'sortCycle' | 'stableOrder' | 'hasMore' | 'onLoadMore' | 'loadingMore' | 'loadMoreLabel' | 'archivedLabel'>;
54
+ export interface DataViewProps<TRow> extends PassedToTable<TRow> {
55
+ /** What the screen is. Left out, no header is drawn and the screen draws its own. */
56
+ title?: ReactNode;
57
+ description?: ReactNode;
58
+ /** Status beside the title. */
59
+ badges?: ReactNode;
60
+ /** What a reader can do on this screen, beside the title. */
61
+ headerActions?: ReactNode;
62
+ headingLevel?: HeadingLevel | undefined;
63
+ /**
64
+ * The axes this screen declares. They are offered in the Filter menu and
65
+ * drawn as chips, and the screen applies them itself (it usually asks a
66
+ * server). A filter declared on a COLUMN instead is applied here.
67
+ */
68
+ filters?: readonly FilterDef<TRow>[] | undefined;
69
+ filterValues?: FilterValues | undefined;
70
+ onFilterValuesChange?: ((next: FilterValues) => void) | undefined;
71
+ /** Committed: Enter in the search box, a chip edited, a chip removed. */
72
+ onApplyFilters?: (() => void) | undefined;
73
+ columns: readonly DataViewColumn<TRow>[];
74
+ rows: readonly TRow[];
75
+ /** Which column the list opens ordered by, while the sort is the view's own. */
76
+ defaultSort?: DataViewSortState | null | undefined;
77
+ /** Lift the sort into the screen (a URL, a server) by passing both of these. */
78
+ sort?: DataViewSortState | null | undefined;
79
+ onSortChange?: ((next: DataViewSortState | null) => void) | undefined;
80
+ /**
81
+ * Which rows are archived. With it the toolbar grows a toggle, the rows are
82
+ * hidden until it is on, and each one is marked when it is.
83
+ */
84
+ archivedPredicate?: ((row: TRow) => boolean) | undefined;
85
+ /** Where each archived row's own moment is read from, for the extra column. */
86
+ archivedTimestamp?: ((row: TRow) => string | number | Date | null | undefined) | undefined;
87
+ /** Lift the toggle into the screen by passing both of these. */
88
+ showArchived?: boolean | undefined;
89
+ onShowArchivedChange?: ((next: boolean) => void) | undefined;
90
+ /**
91
+ * Where the toggle is remembered when the screen does not own it. Left out,
92
+ * nothing is stored and a fresh visit hides archived rows.
93
+ */
94
+ archivedStorageKey?: string | undefined;
95
+ /**
96
+ * Draws the table on a surface of its own: a boundary, a radius and the
97
+ * subtle ground, which is what a list screen inside a padded page wants so
98
+ * the rows read as one object rather than as text on the page.
99
+ */
100
+ framed?: boolean | undefined;
101
+ /** What else belongs on the toolbar row, held to its end. */
102
+ toolbarActions?: ReactNode;
103
+ /** Keeps the toolbar under the top of the scroller. */
104
+ stickyToolbar?: boolean | undefined;
105
+ labels?: Partial<DataViewLabels> | undefined;
106
+ className?: string | undefined;
107
+ }
108
+ export declare function DataView<TRow>({ title, description, badges, headerActions, headingLevel, filters, filterValues, onFilterValuesChange, onApplyFilters, columns, rows, defaultSort, sort: sortProp, onSortChange, archivedPredicate, archivedTimestamp, showArchived: showArchivedProp, onShowArchivedChange, archivedStorageKey, archivedLabel, framed, toolbarActions, stickyToolbar, labels: labelOverrides, className, ...table }: DataViewProps<TRow>): import("react/jsx-runtime").JSX.Element;
109
+ export {};
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The one row above a list: search, the filters that can be added, the sort,
3
+ * and whatever else the screen can do here.
4
+ *
5
+ * [search ..........................] [Filter] [Sort: Name] [Show archived] [actions]
6
+ *
7
+ * ITS HEIGHT DOES NOT DEPEND ON HOW MANY FILTERS ARE ON. The axes a reader has
8
+ * added are chips on their own row underneath ([FilterAxisBar]), so a screen
9
+ * with six filters and a screen with none put their first row of data in the
10
+ * same place. A toolbar that grew a control per filter pushed the table down
11
+ * the page as it was used.
12
+ *
13
+ * THE SEARCH BOX IS ALWAYS DRAWN, and is never one of the filters the menu
14
+ * offers: a search a reader has to add from a menu is a search nobody finds.
15
+ *
16
+ * THE ACCENT MEANS SOMETHING IS ON, and only that. The Sort button takes it
17
+ * while a sort is applied and the archived toggle while archived rows are
18
+ * shown; neither takes it merely for having its menu open, which is what the
19
+ * overlay itself already says.
20
+ *
21
+ * It is a `group` rather than a WAI-ARIA `toolbar`: a row holding a text field
22
+ * cannot take the arrows away from that field's caret, so every control here
23
+ * keeps its own tab stop.
24
+ */
25
+ import { type ReactNode } from 'react';
26
+ import type { DataViewColumn } from './columns.js';
27
+ import type { FilterDef, FilterValues } from './filters.js';
28
+ import type { DataViewSortState } from './columns.js';
29
+ export interface DataViewToolbarLabels {
30
+ /** Names the row, which a screen reader reads before the controls in it. */
31
+ toolbar: string;
32
+ /** Names the search box when its own filter declares no label. */
33
+ search: string;
34
+ searchPlaceholder: string;
35
+ clearSearch: string;
36
+ /** The button that offers the axes not yet on the list. */
37
+ filter: string;
38
+ /** The menu that button opens. */
39
+ addFilter: string;
40
+ /** The button that opens the sort panel, while nothing is sorted. */
41
+ sort: string;
42
+ /** The same button once a column is sorted. */
43
+ sortedBy: (column: string) => string;
44
+ /** The sort panel's own name. */
45
+ sortPanel: string;
46
+ ascending: (column: string) => string;
47
+ descending: (column: string) => string;
48
+ /** Read after the sorted column's name on the button. */
49
+ ascendingWord: string;
50
+ descendingWord: string;
51
+ clearSort: string;
52
+ /** The archived toggle, which names what a screen calls its archived rows. */
53
+ showArchived: (archivedLabel: string) => string;
54
+ archivedCount: (archivedLabel: string) => string;
55
+ }
56
+ export declare const DATA_VIEW_TOOLBAR_LABELS: DataViewToolbarLabels;
57
+ export interface DataViewToolbarProps<TRow> {
58
+ /** Every axis the screen declares, including those already on the list. */
59
+ filters: readonly FilterDef<TRow>[];
60
+ values: FilterValues;
61
+ onValuesChange: (next: FilterValues) => void;
62
+ /** The axes already drawn as chips, which the Filter menu therefore omits. */
63
+ displayed?: readonly string[] | undefined;
64
+ /** A reader picked an axis from the Filter menu. */
65
+ onAddFilter?: ((name: string) => void) | undefined;
66
+ /** Committed: Enter in the search box, or a change the caller fetches on. */
67
+ onSubmit?: (() => void) | undefined;
68
+ /** The columns, for the sort panel. Only the sortable ones are offered. */
69
+ columns?: readonly DataViewColumn<TRow>[] | undefined;
70
+ sort?: DataViewSortState | null | undefined;
71
+ /** Left out, no sort control is drawn at all. */
72
+ onSortChange?: ((next: DataViewSortState | null) => void) | undefined;
73
+ /** Left out, no archived toggle is drawn. */
74
+ onShowArchivedChange?: ((next: boolean) => void) | undefined;
75
+ showArchived?: boolean | undefined;
76
+ /** What this screen calls its archived rows: archived, deleted, disabled. */
77
+ archivedLabel?: string | undefined;
78
+ /** How many rows the toggle would reveal. */
79
+ archivedCount?: number | undefined;
80
+ /** What else can be done here, held to the end of the row. */
81
+ actions?: ReactNode;
82
+ /** Keeps the row under the top of the scroller in a long list. */
83
+ sticky?: boolean | undefined;
84
+ labels?: Partial<DataViewToolbarLabels> | undefined;
85
+ className?: string | undefined;
86
+ }
87
+ export declare function DataViewToolbar<TRow>({ filters, values, onValuesChange, displayed, onAddFilter, onSubmit, columns, sort, onSortChange, onShowArchivedChange, showArchived, archivedLabel, archivedCount, actions, sticky, labels: overrides, className, }: DataViewToolbarProps<TRow>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,103 @@
1
+ /**
2
+ * The row of filters a reader has put on a list, one chip each.
3
+ *
4
+ * NOT [FilterChip], AND THE DIFFERENCE IS THE CONTROL RATHER THAN THE LOOK. A
5
+ * FilterChip is a switch: one fact about the list, on or off, or one answer of
6
+ * a small set. A filter AXIS is a whole dimension the reader added on purpose,
7
+ * so the chip carries three things a switch does not: which axis it is, what
8
+ * it is currently set to, and a way to take it off the list again. Pressing it
9
+ * opens that axis's own editor.
10
+ *
11
+ * THE CHIP FOR AN AXIS WITH NO VALUE YET IS THE POINT. A reader picks Role
12
+ * from the Filter menu and the chip appears reading "Role: any", with its
13
+ * editor already open. Rendered only once a value existed, picking a
14
+ * multiple-choice filter from the menu did nothing visible at all, and "click
15
+ * Filter, choose Role, nothing happens" was exactly the bug.
16
+ *
17
+ * THE EDITOR IS THE OPTION LIST ITSELF, with no picker nested inside the
18
+ * popover: a control that opens a control that opens a list is two presses and
19
+ * two overlays for one answer. The list is a real listbox with the package's
20
+ * own keyboard (the arrows, Home and End, type-ahead, disabled rows stepped
21
+ * over), so it is one tab stop however many answers it holds.
22
+ */
23
+ import { type ReactNode } from 'react';
24
+ import { type FilterDef, type FilterOperator, type FilterValue, type FilterValues } from './filters.js';
25
+ export interface FilterAxisLabels {
26
+ /** The affordance at the end of the row that takes every filter off at once. */
27
+ clearAll: string;
28
+ /** The remove control on one chip. */
29
+ remove: (label: string) => string;
30
+ /** The editor popover's own name. */
31
+ editor: (label: string) => string;
32
+ /** The option list's name inside that popover. */
33
+ options: (label: string) => string;
34
+ /** What a chip reads when its axis is on but set to nothing. */
35
+ any: string;
36
+ /** What a multiple-choice chip reads past one answer. */
37
+ selected: (howMany: number) => string;
38
+ /** The multiple-choice editor's own two controls. */
39
+ clear: string;
40
+ done: string;
41
+ /** The keycap in a text editor, saying what commits it. */
42
+ enter: string;
43
+ /**
44
+ * The word a chip puts before its value when the axis does not compare the
45
+ * way its kind normally does, so "Created: on or before 1 March" cannot be
46
+ * read as "Created: since 1 March".
47
+ */
48
+ operator: Record<FilterOperator, string>;
49
+ }
50
+ export declare const FILTER_AXIS_LABELS: FilterAxisLabels;
51
+ /**
52
+ * What a chip says it is set to.
53
+ *
54
+ * The operator word appears only when it is NOT the kind's usual one, because
55
+ * a row of chips each reading "Email contains ..." spends its width restating
56
+ * the obvious, and the one chip that compares differently then reads exactly
57
+ * like the rest.
58
+ */
59
+ export declare function formatFilterValue<TRow>(def: FilterDef<TRow>, value: FilterValue, labels: FilterAxisLabels): string;
60
+ export interface FilterAxisChipProps<TRow = unknown> {
61
+ def: FilterDef<TRow>;
62
+ value: FilterValue;
63
+ onValueChange: (value: FilterValue) => void;
64
+ /** Takes the axis off the list entirely. Left out, the chip has no remove control. */
65
+ onRemove?: (() => void) | undefined;
66
+ /**
67
+ * Opens the editor as the chip appears, for the chip a reader just added
68
+ * from the Filter menu: picking an axis and then having to press it again to
69
+ * say what it filters by is two presses for one intention.
70
+ */
71
+ autoOpen?: boolean | undefined;
72
+ onAutoOpenConsumed?: (() => void) | undefined;
73
+ labels?: FilterAxisLabels | undefined;
74
+ className?: string | undefined;
75
+ }
76
+ /** One axis, as a chip that opens its own editor. */
77
+ export declare function FilterAxisChip<TRow = unknown>({ def, value, onValueChange, onRemove, autoOpen, onAutoOpenConsumed, labels, className, }: FilterAxisChipProps<TRow>): import("react/jsx-runtime").JSX.Element;
78
+ export interface FilterAxisBarProps<TRow = unknown> {
79
+ /** Every axis the screen knows about, including the ones not on the list. */
80
+ filters: readonly FilterDef<TRow>[];
81
+ values: FilterValues;
82
+ /** Which axes are on the list right now, in the order they are drawn. */
83
+ names: readonly string[];
84
+ onValuesChange: (next: FilterValues) => void;
85
+ /**
86
+ * Committed, for a screen that fetches rather than filters in the browser.
87
+ * Called after every change, including a removal.
88
+ */
89
+ onSubmit?: (() => void) | undefined;
90
+ onRemove?: ((def: FilterDef<TRow>) => void) | undefined;
91
+ onClearAll?: (() => void) | undefined;
92
+ /** The axis whose editor opens by itself, having just been added. */
93
+ autoOpenName?: string | null | undefined;
94
+ onAutoOpenConsumed?: (() => void) | undefined;
95
+ labels?: Partial<FilterAxisLabels> | undefined;
96
+ className?: string | undefined;
97
+ children?: ReactNode;
98
+ }
99
+ /**
100
+ * The chips under a toolbar. It draws nothing at all while no axis is on, so
101
+ * an unfiltered screen carries no empty band where its data should be.
102
+ */
103
+ export declare function FilterAxisBar<TRow = unknown>({ filters, values, names, onValuesChange, onSubmit, onRemove, onClearAll, autoOpenName, onAutoOpenConsumed, labels: overrides, className, children, }: FilterAxisBarProps<TRow>): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * How a list screen declares its columns, and how that becomes a table.
3
+ *
4
+ * AN ORDERED ARRAY, EACH COLUMN CARRYING ITS OWN KEY. [DataTable] holds
5
+ * columns as a record keyed by field plus a separate order array, which is the
6
+ * right shape for a table whose reader reorders and hides columns and stores
7
+ * the result. It is the wrong shape for declaring a screen: the order and the
8
+ * columns are then two things that can disagree, and every list screen wrote
9
+ * the same twenty-line translation between them. The translation lives here
10
+ * instead, once, so a screen declares what a reader sees, in the order they
11
+ * see it, and there is still exactly one table underneath.
12
+ */
13
+ import type { ReactNode } from 'react';
14
+ import type { DataTableColumn, DataTableSortState } from '../DataTable/index.js';
15
+ import type { DataViewColumnFilter } from './filters.js';
16
+ /** Which column a list is ordered by, and which way. The table's own type. */
17
+ export type DataViewSortState = DataTableSortState;
18
+ export interface DataViewColumn<TRow = unknown> extends Omit<DataTableColumn<TRow>, 'label'>, DataViewColumnFilter<TRow> {
19
+ /** The field this column reads, and the key its sort and filter are kept under. */
20
+ key: string;
21
+ /** What the column is called, at the head of it. */
22
+ header: ReactNode;
23
+ }
24
+ export interface TableColumns<TRow> {
25
+ columns: Record<string, DataTableColumn<TRow>>;
26
+ order: string[];
27
+ }
28
+ /**
29
+ * The declared columns, as the table holds them.
30
+ *
31
+ * A column with no key is dropped rather than drawn under an empty heading:
32
+ * the table reads every value by key, so a keyless column is a column of
33
+ * nothing.
34
+ */
35
+ export declare function tableColumns<TRow>(columns: readonly DataViewColumn<TRow>[]): TableColumns<TRow>;
@@ -0,0 +1,184 @@
1
+ /**
2
+ * What a list screen can be narrowed by, and what narrowing means.
3
+ *
4
+ * THE MODEL, IN ONE PLACE. A filter has a NAME (the key its value is kept
5
+ * under), a LABEL (what a reader calls it), a KIND (what sort of value it
6
+ * holds) and an OPERATOR (what comparing that value to a row means). Every
7
+ * screen that filters a table needs all four, and the two halves that were
8
+ * written per screen before this existed disagreed at once: one read "contains"
9
+ * as case sensitive, one dropped rows whose value was absent and one kept them.
10
+ *
11
+ * WHERE THE DEFINITIONS COME FROM. Either the columns themselves
12
+ * ([filterDefsFromColumns]), which is how "every column should be filterable"
13
+ * is satisfied without writing a second schema beside the first, or the screen
14
+ * (the `filters` prop), which is how a screen declares an axis the table has no
15
+ * column for, or one the SERVER filters rather than the browser.
16
+ *
17
+ * WHO APPLIES THEM. [applyColumnFilters] applies the filters derived from
18
+ * COLUMNS and nothing else, because a column that says `filterable` is saying
19
+ * "narrow these rows here". A screen-declared filter is the screen's own: it
20
+ * usually goes into a query string and comes back as fewer rows, and a browser
21
+ * that also applied it would filter twice, once against a row field that does
22
+ * not exist. That split is the whole contract, and it is what keeps the URL out
23
+ * of the component.
24
+ *
25
+ * A VALUE IS COMPARED AS TEXT unless both sides are numbers. A row's id is a
26
+ * string in one API and a number in the next, and an operator that answered
27
+ * differently for the two would be a filter that works on one screen.
28
+ */
29
+ import type { ReactNode } from 'react';
30
+ /** What sort of value a filter holds. */
31
+ export type FilterKind = 'text' | 'number' | 'select' | 'datetime';
32
+ /**
33
+ * What comparing a filter's value to a row means.
34
+ *
35
+ * Six, and each one is a sentence a reader could say out loud: a name
36
+ * CONTAINS what was typed, a status IS one thing, a role IS ANY OF several, a
37
+ * count EQUALS a number, an event happened ON OR AFTER a moment or ON OR
38
+ * BEFORE one. The pair at the end is why this is a named operator rather than
39
+ * a property of the kind: a window between two moments is two filters over one
40
+ * column, and with a single hard-coded "after" the later bound could only be
41
+ * had by declaring a second, duplicate column.
42
+ */
43
+ export type FilterOperator = 'contains' | 'is' | 'is-any-of' | 'equals' | 'on-or-after' | 'on-or-before';
44
+ export type FilterOptionValue = string | number;
45
+ export interface FilterOption {
46
+ value: FilterOptionValue;
47
+ label: string;
48
+ /** Unavailable, and left in the list so a reader learns the answer exists. */
49
+ disabled?: boolean | undefined;
50
+ }
51
+ /** What a filter is set to. An array only in a multiple-choice filter. */
52
+ export type FilterValue = string | number | readonly FilterOptionValue[] | null | undefined;
53
+ /** Every filter's value, by name. A screen owns this object and its history. */
54
+ export type FilterValues = Record<string, FilterValue>;
55
+ export interface FilterDef<TRow = unknown> {
56
+ /** The key this filter's value is kept under, and a column key when it came from one. */
57
+ name: string;
58
+ /** What a reader calls it, in the Filter menu and on the chip. */
59
+ label: string;
60
+ /** Text by default: the kind most filters are, and the one a search box is. */
61
+ kind?: FilterKind | undefined;
62
+ /** What comparing means. Left out, the kind's own default (see [defaultOperator]). */
63
+ operator?: FilterOperator | undefined;
64
+ /** The answers, for a `select`. */
65
+ options?: readonly FilterOption[] | undefined;
66
+ /** Several answers at once, for a `select`. */
67
+ multiple?: boolean | undefined;
68
+ /** The example shown in an empty editor or search box. */
69
+ placeholder?: string | undefined;
70
+ /**
71
+ * Marks the one filter drawn as the toolbar's search box. It is always on
72
+ * screen, so it never appears in the Filter menu and never becomes a chip:
73
+ * a screen that hid its search behind "add a filter" is a screen where
74
+ * nobody finds the search.
75
+ */
76
+ role?: 'search' | undefined;
77
+ /** Whether Enter in the search box commits. True by default. */
78
+ submitOnEnter?: boolean | undefined;
79
+ /**
80
+ * Where the value is read from a row when this filter is applied in the
81
+ * browser. Defaults to `row[name]`.
82
+ */
83
+ value?: ((row: TRow) => unknown) | undefined;
84
+ }
85
+ /**
86
+ * What a filter means when its own operator is left out.
87
+ *
88
+ * Text contains, because a person typing three letters of a name is looking
89
+ * for the name that holds them. A number equals, because a partial number is
90
+ * not a fact about anything. One choice IS, several ARE ANY OF. A moment is on
91
+ * or after, which is the "since" a reader asks a log for.
92
+ */
93
+ export declare function defaultOperator(def: Pick<FilterDef, 'kind' | 'multiple'>): FilterOperator;
94
+ export declare function operatorOf(def: FilterDef<never> | FilterDef<unknown>): FilterOperator;
95
+ /**
96
+ * The value a filter has when it is not narrowing anything.
97
+ *
98
+ * NOT ALWAYS THE EMPTY STRING. A single-choice filter's first option is its
99
+ * "any" answer by convention ("All roles", "Any status"), so clearing that
100
+ * filter means going back to that option rather than to a value the list does
101
+ * not offer, which would leave the control showing a placeholder over a list
102
+ * where every answer is unselected.
103
+ */
104
+ export declare function blankFilterValue(def: FilterDef<never> | FilterDef<unknown>): FilterValue;
105
+ /** Whether a filter is narrowing anything, which is what decides its chip. */
106
+ export declare function filterHasValue(def: FilterDef<never> | FilterDef<unknown>, value: FilterValue): boolean;
107
+ /**
108
+ * What this filter does to a row, or null when it does nothing.
109
+ *
110
+ * NULL RATHER THAN A PREDICATE THAT ALWAYS ANSWERS TRUE, so a caller can count
111
+ * how many filters are actually narrowing the list, and so an unset filter
112
+ * costs nothing per row.
113
+ *
114
+ * A ROW WITH NO VALUE FAILS EVERY OPERATOR. A seat with no last-seen time is
115
+ * not before every moment and not after any of them: it was never measured,
116
+ * and answering either way would put it in a list it does not belong to. It is
117
+ * the same rule the table's comparator keeps when it sorts absent values last
118
+ * in both directions.
119
+ *
120
+ * WHAT "DOES NOTHING" MEANS IS [filterHasValue], AND ONLY THAT. A single-choice
121
+ * filter's blank answer is the first option its own list offers, which is very
122
+ * often a word rather than the empty string ("All roles", "Any status"). Asked
123
+ * here as "is the value empty", a filter cleared back to that answer went on
124
+ * comparing every row against the word `all`, matched none of them, and handed
125
+ * back an empty table under a chip row that had just been emptied. Two
126
+ * definitions of the same fact is what did it, so there is one.
127
+ */
128
+ export declare function filterPredicate<TRow>(def: FilterDef<TRow>, value: FilterValue): ((row: TRow) => boolean) | null;
129
+ /**
130
+ * Every filter, folded over the rows: AND between filters, OR inside a
131
+ * multiple-choice one.
132
+ *
133
+ * The array is returned UNCHANGED when nothing is narrowing it, so a table
134
+ * whose rows did not move does not re-render on a keystroke in an unrelated
135
+ * box.
136
+ */
137
+ export declare function applyFilters<TRow>(rows: readonly TRow[], defs: readonly FilterDef<TRow>[], values: FilterValues | undefined): readonly TRow[];
138
+ /**
139
+ * A column, as a list screen declares one.
140
+ *
141
+ * `header` rather than `label`, and an ARRAY rather than a keyed record,
142
+ * because a list screen's columns are an ordered list of fields and writing
143
+ * them as a record plus a separate order array made the order and the columns
144
+ * two things that could disagree. [DataView] translates this into the shape
145
+ * [DataTable] holds, so there is one table underneath.
146
+ */
147
+ export interface DataViewColumnFilter<TRow> {
148
+ /** Offers this column in the Filter menu. */
149
+ filterable?: boolean | undefined;
150
+ /** What sort of value it holds. Text by default. */
151
+ filterKind?: FilterKind | undefined;
152
+ /** What comparing means. The kind's default otherwise. */
153
+ filterOperator?: FilterOperator | undefined;
154
+ /** The answers, for `filterKind: 'select'`. */
155
+ filterOptions?: readonly FilterOption[] | undefined;
156
+ /** Several answers at once. */
157
+ filterMultiple?: boolean | undefined;
158
+ /** What the chip and the menu call it. The header otherwise. */
159
+ filterLabel?: string | undefined;
160
+ /** Where the value is read from a row. `row[key]` otherwise. */
161
+ filterValue?: ((row: TRow) => unknown) | undefined;
162
+ /** The example shown in an empty editor. */
163
+ filterPlaceholder?: string | undefined;
164
+ }
165
+ interface ColumnLike<TRow> extends DataViewColumnFilter<TRow> {
166
+ key: string;
167
+ header?: ReactNode;
168
+ }
169
+ /**
170
+ * The filters the columns themselves declare.
171
+ *
172
+ * A column opts in with `filterable`, and the Filter menu picks it up with no
173
+ * second schema to keep in step. A column whose header is not a string needs
174
+ * `filterLabel`: a chip reading "[object Object]" is worse than one the screen
175
+ * had to name.
176
+ */
177
+ export declare function filterDefsFromColumns<TRow>(columns: readonly ColumnLike<TRow>[]): FilterDef<TRow>[];
178
+ /**
179
+ * The rows a table shows, once the filters its own COLUMNS declare have been
180
+ * applied. A screen-declared filter is not applied here; see the note at the
181
+ * top of this file.
182
+ */
183
+ export declare function applyColumnFilters<TRow>(rows: readonly TRow[], columns: readonly ColumnLike<TRow>[], values: FilterValues | undefined): readonly TRow[];
184
+ export {};
@@ -0,0 +1,11 @@
1
+ import './DataView.css';
2
+ export { DataView } from './DataView.js';
3
+ export type { DataViewLabels, DataViewProps } from './DataView.js';
4
+ export { DATA_VIEW_TOOLBAR_LABELS, DataViewToolbar } from './DataViewToolbar.js';
5
+ export type { DataViewToolbarLabels, DataViewToolbarProps } from './DataViewToolbar.js';
6
+ export { FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, formatFilterValue } from './FilterAxisBar.js';
7
+ export type { FilterAxisBarProps, FilterAxisChipProps, FilterAxisLabels } from './FilterAxisBar.js';
8
+ export { tableColumns } from './columns.js';
9
+ export type { DataViewColumn, DataViewSortState, TableColumns } from './columns.js';
10
+ export { applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, operatorOf, } from './filters.js';
11
+ export type { DataViewColumnFilter, FilterDef, FilterKind, FilterOperator, FilterOption, FilterOptionValue, FilterValue, FilterValues, } from './filters.js';
@@ -0,0 +1,25 @@
1
+ export { DATA_VIEW_TOOLBAR_LABELS, DataView, DataViewToolbar, FILTER_AXIS_LABELS, FilterAxisBar, FilterAxisChip, applyColumnFilters, applyFilters, blankFilterValue, defaultOperator, filterDefsFromColumns, filterHasValue, filterPredicate, formatFilterValue, operatorOf, tableColumns } from '../chunk-GHYY2WPF.js';
2
+ import '../chunk-5EKIWVOR.js';
3
+ import '../chunk-HOXGBLEY.js';
4
+ import '../chunk-3CZ7XAVY.js';
5
+ import '../chunk-SFZOKW2G.js';
6
+ import '../chunk-EHMQQHYR.js';
7
+ import '../chunk-FBZAKNSX.js';
8
+ import '../chunk-EUCC37WY.js';
9
+ import '../chunk-2EOKFKHX.js';
10
+ import '../chunk-UG46QBLT.js';
11
+ import '../chunk-DD5BBGBE.js';
12
+ import '../chunk-GXQ3B46I.js';
13
+ import '../chunk-AV2DXAEL.js';
14
+ import '../chunk-2PRH365R.js';
15
+ import '../chunk-V663QU4R.js';
16
+ import '../chunk-GTOUGQQK.js';
17
+ import '../chunk-O6232G37.js';
18
+ import '../chunk-BHHIIK3M.js';
19
+ import '../chunk-PQADV6P6.js';
20
+ import '../chunk-7RPGY3JE.js';
21
+ import '../chunk-ITHXJHBB.js';
22
+ import '../chunk-F27EPQ7D.js';
23
+ import '../chunk-BZYDZBAN.js';
24
+ import '../chunk-BZFWDIV6.js';
25
+ import '../chunk-ODEQTPFM.js';