@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,80 @@
1
+ /*
2
+ * A row of stat tiles.
3
+ *
4
+ * ITS COLUMN COUNT NEVER MOVES with its contents. A grid that reflowed as
5
+ * tiles appeared and vanished moved every number on the page for a reason that
6
+ * had nothing to do with the numbers, which is exactly what a reader watching
7
+ * a live board is trying not to have happen.
8
+ */
9
+
10
+ .crewlet-stat-group {
11
+ display: grid;
12
+ grid-template-columns: repeat(var(--crewlet-stat-group-cols, 4), minmax(0, 1fr));
13
+ /* The flush-panel recipe: the surface, the hairline, the 12px corner and
14
+ `overflow: hidden`, which is what lets the tiles inside sit against the
15
+ corners without their own hairlines escaping past them. The engine puts
16
+ its stat row inside exactly this. */
17
+ background: var(--color-surface-subtle);
18
+ border: 1px solid var(--color-border-default);
19
+ border-radius: var(--radius-lg);
20
+ box-shadow: var(--shadow-xs), var(--shadow-hairline);
21
+ overflow: hidden;
22
+ }
23
+
24
+ /*
25
+ * A tile inside the row brings no surface of its own, whether or not its
26
+ * caller remembered `flush`. The group draws one card and the hairlines
27
+ * inside it, so a tile that kept its own border and radius is a card inside
28
+ * a card: a box inside a box, which is what the reader sees.
29
+ *
30
+ * TWO CLASSES, NOT :where(). Written as `> :where(.crewlet-statcard)` this
31
+ * weighed exactly what the tile's own `.crewlet-statcard` rule weighs, so
32
+ * which one painted was settled by whichever stylesheet the bundler put
33
+ * last. It put the tile's last, and every tile in every group drew its own
34
+ * border, its own 12px corner and its own surface inside the group's.
35
+ * Naming both classes settles it by weight, which no import order can undo.
36
+ */
37
+ .crewlet-stat-group > .crewlet-statcard {
38
+ background: transparent;
39
+ border: 0;
40
+ border-radius: var(--radius-none);
41
+ box-shadow: none;
42
+ }
43
+
44
+ /*
45
+ * A hairline between columns, drawn on the tile that follows one.
46
+ *
47
+ * NAMED TWICE, ON PURPOSE. The rule above clears the tile's own border and
48
+ * weighs two classes, so a one-class selector here loses to it and the row
49
+ * of numbers runs together with nothing between the columns. The first
50
+ * selector matches whatever a caller puts in the row; the second weighs the
51
+ * same as the rule it has to beat, and sits after it.
52
+ */
53
+ .crewlet-stat-group > * + *,
54
+ .crewlet-stat-group > .crewlet-statcard + .crewlet-statcard {
55
+ border-left: 1px solid var(--color-border-default);
56
+ }
57
+
58
+ /*
59
+ * Two columns under the shell breakpoint, which is where the engine drops its
60
+ * own stat row: 900px is a 280px rail plus a 620px content column, so it is
61
+ * the width at which a four-up row of numbers stops having a column each. The
62
+ * rules are written for the general case rather than per column count: the
63
+ * first tile of each pair loses its left hairline, and everything on the
64
+ * second row and below gains a top one.
65
+ */
66
+ @media (max-width: 900px) {
67
+ .crewlet-stat-group {
68
+ grid-template-columns: repeat(2, minmax(0, 1fr));
69
+ }
70
+
71
+ .crewlet-stat-group > *:nth-child(odd),
72
+ .crewlet-stat-group > .crewlet-statcard:nth-child(odd) {
73
+ border-left: 0;
74
+ }
75
+
76
+ .crewlet-stat-group > *:nth-child(n + 3),
77
+ .crewlet-stat-group > .crewlet-statcard:nth-child(n + 3) {
78
+ border-top: 1px solid var(--color-border-default);
79
+ }
80
+ }
@@ -0,0 +1,25 @@
1
+ import type { PhaseTone, Tone } from '../utils/tone.js';
2
+ export interface StatusDotProps {
3
+ /** Which state, or which phase. Neutral says "nothing in particular". */
4
+ tone?: Tone | PhaseTone | undefined;
5
+ /**
6
+ * A slow pulse, for a state that is still happening. Held still under a
7
+ * reduced-motion preference, where the mark still reads as its tone.
8
+ */
9
+ pulse?: boolean | undefined;
10
+ className?: string | undefined;
11
+ }
12
+ /**
13
+ * The shape half of a status.
14
+ *
15
+ * COLOUR IS NEVER THE ONLY CARRIER. Every dot sits beside its own word, and
16
+ * the dot is `aria-hidden` for exactly that reason: a screen reader that read
17
+ * both would say the state twice, and one that read only the dot would say
18
+ * nothing at all. If a dot has no word beside it, the dot is the wrong
19
+ * component and a Tag is the right one.
20
+ *
21
+ * Its fill is the tone's own fill step, which clears 3:1 against every surface
22
+ * it can sit on, because a mark is read the way a glyph is rather than the way
23
+ * text is.
24
+ */
25
+ export declare function StatusDot({ tone, pulse, className }: StatusDotProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './StatusDot.css';
2
+ export { StatusDot } from './StatusDot.js';
3
+ export type { StatusDotProps } from './StatusDot.js';
@@ -0,0 +1,2 @@
1
+ export { StatusDot } from '../chunk-PZSWF74H.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,84 @@
1
+ /*
2
+ * The status dot: a 6px mark in its tone's fill, beside the word it belongs
3
+ * to. See the component doc for why it is hidden from assistive technology.
4
+ */
5
+
6
+ .crewlet-status-dot {
7
+ display: inline-block;
8
+ width: 6px;
9
+ height: 6px;
10
+ border-radius: var(--radius-circle);
11
+ /*
12
+ * The quiet state is still a mark, so it takes the tertiary step rather than
13
+ * the decoration one the engine spends here: a 6px dot has to clear 3:1 to
14
+ * be seen at all, and --color-text-muted measures 2.33:1 on a light page and
15
+ * 2.25:1 on a dark one at their worst grounds. The tertiary step measures
16
+ * 4.87:1 and 4.65:1 on the same pair, and is the nearest step that holds.
17
+ */
18
+ background: var(--color-text-tertiary);
19
+ flex: none;
20
+ }
21
+
22
+ .crewlet-status-dot--info {
23
+ background: var(--color-feedback-info);
24
+ }
25
+
26
+ .crewlet-status-dot--success {
27
+ background: var(--color-feedback-success);
28
+ }
29
+
30
+ .crewlet-status-dot--warning {
31
+ background: var(--color-feedback-warning);
32
+ }
33
+
34
+ .crewlet-status-dot--danger {
35
+ background: var(--color-feedback-danger);
36
+ }
37
+
38
+ .crewlet-status-dot--brand {
39
+ background: var(--color-brand-accent);
40
+ }
41
+
42
+ .crewlet-status-dot--phase-onboarding {
43
+ background: var(--color-phase-onboarding);
44
+ }
45
+
46
+ .crewlet-status-dot--phase-execute {
47
+ background: var(--color-phase-execute);
48
+ }
49
+
50
+ .crewlet-status-dot--phase-review {
51
+ background: var(--color-phase-review);
52
+ }
53
+
54
+ /*
55
+ * Still happening. Three things are deliberate: the pulse never goes to
56
+ * nothing, because a mark that disappears reads as a fault rather than as work
57
+ * in progress; it alternates rather than sawtooths, so the mark comes back the
58
+ * way it went; and the round trip is 1.8s, which is the engine's own breath
59
+ * and is 0.55 flashes a second, well clear of the three that are a seizure
60
+ * risk. Three of the slow step each way makes that round trip.
61
+ */
62
+ .crewlet-status-dot.is-pulsing {
63
+ animation: crewlet-status-dot-pulse calc(var(--motion-duration-slow) * 3) var(--motion-easing-default) infinite
64
+ alternate;
65
+ }
66
+
67
+ @keyframes crewlet-status-dot-pulse {
68
+ from {
69
+ opacity: 1;
70
+ }
71
+ to {
72
+ opacity: 0.35;
73
+ }
74
+ }
75
+
76
+ /*
77
+ * A mark that cannot move should not pretend to. The dot still reads as its
78
+ * tone, and the word beside it still says what is happening.
79
+ */
80
+ @media (prefers-reduced-motion: reduce) {
81
+ .crewlet-status-dot.is-pulsing {
82
+ animation: none;
83
+ }
84
+ }
@@ -0,0 +1,38 @@
1
+ import { type InputHTMLAttributes, type ReactNode } from 'react';
2
+ export interface SwitchProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'size'> {
3
+ /** What the setting is, and the switch's NAME. */
4
+ label: ReactNode;
5
+ /** What turning it on does, when the label alone does not say. */
6
+ description?: ReactNode;
7
+ /** The bordered row a settings list uses for a decision that stands on its own. */
8
+ framed?: boolean;
9
+ /** The new state, for a caller that does not want to read it off an event. */
10
+ onCheckedChange?: (checked: boolean) => void;
11
+ }
12
+ /**
13
+ * A setting that is on or off, and takes effect as it is switched.
14
+ *
15
+ * NOT A CHECKBOX, and the difference is not decoration. A checkbox is an
16
+ * answer to a question the form asks and is read when the form is saved; a
17
+ * switch IS the change, applied the moment it moves. A screen reader says
18
+ * "on" and "off" for one and "ticked" and "unticked" for the other, and a
19
+ * reader told a webhook is "unticked" has to work out what that means for a
20
+ * delivery. This is what the two vendor screens were drawing as an On and Off
21
+ * select, which is a third spelling of the same thing.
22
+ *
23
+ * IT IS A REAL CHECKBOX INPUT wearing `role="switch"`, so Space toggles it,
24
+ * a form submits it and a label points at it without any of that being
25
+ * rebuilt. What the role changes is what it is called out loud.
26
+ *
27
+ * AND ITS STATE IS THE INPUT'S OWN, with no `aria-checked` attribute beside
28
+ * it. The role maps the element's checkedness to `aria-checked` already, and
29
+ * a second copy written as an attribute is one a browser does not update:
30
+ * left uncontrolled, or toggled by a reader before the caller's state lands,
31
+ * the attribute says one thing while the control shows another, and a screen
32
+ * reader reads the attribute.
33
+ *
34
+ * THE TRACK CARRIES A 3:1 BOUNDARY IN BOTH STATES. Drawn as two fills alone,
35
+ * off is a grey pill on a grey panel: the control most likely to be missed
36
+ * entirely is the one that says whether a thing is running.
37
+ */
38
+ export declare const Switch: import("react").ForwardRefExoticComponent<SwitchProps & import("react").RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,3 @@
1
+ import './Switch.css';
2
+ export { Switch } from './Switch.js';
3
+ export type { SwitchProps } from './Switch.js';
@@ -0,0 +1,2 @@
1
+ export { Switch } from '../chunk-EV6IMYJ6.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,169 @@
1
+ /*
2
+ * Switch: a setting that takes effect as it moves.
3
+ *
4
+ * The native checkbox is still the control. It is drawn over the track at
5
+ * full size and zero opacity rather than hidden, so the pointer hits the real
6
+ * input and nothing here has to rebuild Space, the label association or form
7
+ * submission.
8
+ *
9
+ * What zero opacity costs is the one thing the control cannot do: be seen. Its
10
+ * ring is drawn on the TRACK, keyed on the control's own focus, because an
11
+ * outline on an element at zero alpha is an outline nobody is shown. See the
12
+ * rule at the bottom of this file.
13
+ */
14
+
15
+ .crewlet-switch {
16
+ --crewlet-switch-width: 36px;
17
+ --crewlet-switch-height: 20px;
18
+ --crewlet-switch-thumb: 14px;
19
+ --crewlet-switch-inset: 3px;
20
+
21
+ display: flex;
22
+ align-items: flex-start;
23
+ gap: var(--spacing-2);
24
+ min-height: var(--size-row-sm);
25
+ /*
26
+ * The label's size, on the row, because the track below is placed against
27
+ * the label's first LINE in `em` and `em` on the track is the size it
28
+ * inherits. Left off, the sum was computed against whatever body size an
29
+ * application happened to set.
30
+ */
31
+ font-size: var(--font-size-sm);
32
+ cursor: pointer;
33
+ }
34
+
35
+ .crewlet-switch__track {
36
+ position: relative;
37
+ display: inline-flex;
38
+ flex: 0 0 auto;
39
+ width: var(--crewlet-switch-width);
40
+ height: var(--crewlet-switch-height);
41
+ /*
42
+ * Centred on the label's first LINE, the same sum a Checkbox's box takes,
43
+ * so a form holding both does not draw two rows whose controls sit at two
44
+ * heights. The literal it replaces put a 20px track 2px below a 19.6px
45
+ * line, which is a track hanging under its own sentence.
46
+ */
47
+ margin-top: calc((var(--font-line-height-snug) * 1em - var(--crewlet-switch-height)) / 2);
48
+ border-radius: var(--radius-pill);
49
+ background: var(--color-surface-inset);
50
+ /*
51
+ * A REAL BOUNDARY IN BOTH STATES. Two fills alone leave "off" as a grey
52
+ * pill on a grey panel, and the control most likely to be missed is the one
53
+ * saying whether something is running.
54
+ */
55
+ border: 1px solid var(--color-border-control);
56
+ transition: background-color var(--motion-duration-fast) var(--motion-easing-default),
57
+ border-color var(--motion-duration-fast) var(--motion-easing-default);
58
+ }
59
+
60
+ .crewlet-switch__control {
61
+ position: absolute;
62
+ inset: 0;
63
+ width: 100%;
64
+ height: 100%;
65
+ margin: 0;
66
+ opacity: 0;
67
+ cursor: pointer;
68
+ }
69
+
70
+ .crewlet-switch__thumb {
71
+ position: absolute;
72
+ top: var(--crewlet-switch-inset);
73
+ left: var(--crewlet-switch-inset);
74
+ width: var(--crewlet-switch-thumb);
75
+ height: var(--crewlet-switch-thumb);
76
+ border-radius: var(--radius-circle);
77
+ background: var(--color-text-on-accent);
78
+ box-shadow: var(--shadow-xs);
79
+ transition: transform var(--motion-duration-fast) var(--motion-easing-default);
80
+ }
81
+
82
+ /* Off, the thumb rides the neutral track and needs its own contrast. */
83
+ .crewlet-switch__control:not(:checked) ~ .crewlet-switch__thumb {
84
+ background: var(--color-text-secondary);
85
+ }
86
+
87
+ .crewlet-switch__control:checked ~ .crewlet-switch__thumb {
88
+ transform: translateX(
89
+ calc(var(--crewlet-switch-width) - var(--crewlet-switch-thumb) - var(--crewlet-switch-inset) * 2 - 2px)
90
+ );
91
+ }
92
+
93
+ .crewlet-switch__track:has(.crewlet-switch__control:checked) {
94
+ background: var(--color-brand-accent);
95
+ border-color: var(--color-brand-accent);
96
+ }
97
+
98
+ /*
99
+ * THE RING IS DRAWN ON THE TRACK, NOT ON THE CONTROL.
100
+ *
101
+ * The control is still what takes focus, and the rule this replaces put the
102
+ * ring on it for exactly that reason. It painted nothing: the control carries
103
+ * `opacity: 0`, and opacity applies to the WHOLE of an element's rendering,
104
+ * its outline included. A keyboard reader tabbing onto a switch was shown no
105
+ * indicator at all, measured on a screenshot of the focused control. It is the
106
+ * one failure a focus rule can have that reading the computed style does not
107
+ * reveal: `outline: solid 2px rgb(84, 105, 212)` was there the whole time, at
108
+ * zero alpha.
109
+ *
110
+ * So it moves to the track, which is what a reader sees, keyed on the
111
+ * control's own :focus-visible. The track is the same box: the control is
112
+ * `inset: 0` over it.
113
+ *
114
+ * OUTSET, like a Checkbox's and unlike a text field's. A 20px pill has no
115
+ * room to draw a ring inside itself, and there is no boundary to cover out
116
+ * there either: the track's own border goes the accent colour of its fill
117
+ * when the switch is on, so the ring is the only edge in that space.
118
+ */
119
+ .crewlet-switch__track:has(.crewlet-switch__control:focus-visible) {
120
+ outline: 2px solid var(--color-focus);
121
+ outline-offset: 2px;
122
+ }
123
+
124
+ .crewlet-switch__text {
125
+ display: flex;
126
+ flex-direction: column;
127
+ gap: var(--spacing-1);
128
+ user-select: none;
129
+ min-width: 0;
130
+ }
131
+
132
+ .crewlet-switch__label {
133
+ font-size: var(--font-size-sm);
134
+ line-height: var(--font-line-height-snug);
135
+ color: var(--color-text-primary);
136
+ }
137
+
138
+ .crewlet-switch__description {
139
+ font-size: var(--font-size-xs);
140
+ line-height: var(--font-line-height-normal);
141
+ color: var(--color-text-tertiary);
142
+ }
143
+
144
+ /* The same frame a Checkbox's row draws, because it is the same row: a
145
+ boundary on the dialog's own body, and no surface of its own. */
146
+ .crewlet-switch--framed {
147
+ gap: var(--spacing-3);
148
+ padding: var(--spacing-3);
149
+ border: 1px solid var(--color-border-default);
150
+ border-radius: var(--radius-lg);
151
+ }
152
+
153
+ .crewlet-switch.is-disabled,
154
+ .crewlet-switch.is-disabled .crewlet-switch__control {
155
+ cursor: not-allowed;
156
+ opacity: 0.6;
157
+ }
158
+
159
+ /*
160
+ * The thumb ARRIVES rather than slides. The state still changes and the track
161
+ * still recolours; what stops is the travel, which is the part that makes a
162
+ * reader with a vestibular disorder look away from the control they are using.
163
+ */
164
+ @media (prefers-reduced-motion: reduce) {
165
+ .crewlet-switch__track,
166
+ .crewlet-switch__thumb {
167
+ transition: none;
168
+ }
169
+ }
@@ -0,0 +1,51 @@
1
+ import type { ReactNode } from 'react';
2
+ /**
3
+ * A small table of rows and columns, given as arrays.
4
+ *
5
+ * IT IS A REAL TABLE NOW. It used to be a grid of divs and spans, which reads
6
+ * to a screen reader as a pile of text: no columns, no header association, and
7
+ * no way to ask what column a cell is in. A reader arriving at "3" in the
8
+ * fourth row learned nothing about which of four figures it was. The look is
9
+ * unchanged, because the look was never the problem.
10
+ *
11
+ * WHEN TO USE IT, and when not to. This is the table you build from arrays you
12
+ * already have: a comparison, a summary, a handful of rows inside a dialog.
13
+ * Anything with sorting, pagination, column choices, row actions or live rows
14
+ * is a DataTable, which has all of those and a column type to describe them
15
+ * with.
16
+ *
17
+ * Cells are nodes, so a cell may hold a Tag, a link or a glyph. A caption
18
+ * names the table for anybody who cannot see the heading above it; keep it if
19
+ * the surrounding text does not already say what the rows are.
20
+ */
21
+ export interface TableActionButton {
22
+ label: ReactNode;
23
+ onClick: () => void;
24
+ }
25
+ export interface TableProps {
26
+ headers: ReactNode[];
27
+ /** One array per row, in the header's own order. Cells may be any node. */
28
+ data: ReactNode[][];
29
+ /**
30
+ * What the table is about, rendered as its `<caption>`.
31
+ *
32
+ * `captionHidden` keeps it in the accessibility tree and takes it off the
33
+ * screen, for a table whose heading is already visible right above it: a
34
+ * name a screen reader can use, without saying the same words twice.
35
+ */
36
+ caption?: ReactNode;
37
+ captionHidden?: boolean;
38
+ emptyMessage?: ReactNode;
39
+ actionButton?: TableActionButton;
40
+ /**
41
+ * How tall the rows may get before they scroll, as a CSS length.
42
+ *
43
+ * A table given one becomes its own vertical scroller and its header sticks,
44
+ * so the column names stay on screen while the rows move under them. Without
45
+ * it the table is as tall as its rows and the page is what scrolls, which is
46
+ * the right answer for the handful of rows this component is for.
47
+ */
48
+ maxHeight?: string;
49
+ className?: string;
50
+ }
51
+ export declare const Table: ({ headers, data, caption, captionHidden, emptyMessage, actionButton, maxHeight, className, }: TableProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './Table.css';
2
+ export { Table } from './Table.js';
3
+ export type { TableProps, TableActionButton } from './Table.js';
@@ -0,0 +1,3 @@
1
+ export { Table } from '../chunk-FEFTGVMF.js';
2
+ import '../chunk-BZFWDIV6.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,159 @@
1
+ /*
2
+ * Table: the operator's table, on the elements a table is made of.
3
+ *
4
+ * ONE TABLE REGISTER FOR THE WHOLE PRODUCT, and this is it: a micro-label
5
+ * header on the panel's own ground, hairline rows, cells at the compact step,
6
+ * and a row as tall as the row token every other list in the system uses. The
7
+ * DataTable below carries the same values; the two differ in what they DO
8
+ * (sorting, columns, pagination), never in what a row looks like.
9
+ */
10
+ .crewlet-table {
11
+ display: flex;
12
+ flex-direction: column;
13
+ flex: 1;
14
+ min-width: 0;
15
+ /*
16
+ * THE FRAME IS THE TABLE'S, NOT THE SCROLLER'S. The boundary and the radius
17
+ * used to sit on the scroller inside, which put the action row underneath
18
+ * the frame as a loose word on the page, and let a sideways scroll carry the
19
+ * table's own edge out of view. Here the frame clips a header band that runs
20
+ * to the edge and a foot that is fenced from the rows above it, which is the
21
+ * flush panel every table on the dashboard sits in.
22
+ */
23
+ background: var(--color-surface-subtle);
24
+ border: 1px solid var(--color-border-default);
25
+ border-radius: var(--radius-lg);
26
+ overflow: hidden;
27
+ }
28
+
29
+ .crewlet-table__container {
30
+ /* The overflow is a safety net for a cell that cannot wrap (a long token, a
31
+ hash); the fixed layout below is what keeps a table inside the width it is
32
+ given. A `maxHeight` turns this into the vertical scroller the sticky
33
+ header needs, which is the only way a long table keeps its column names. */
34
+ overflow-x: auto;
35
+ overflow-y: var(--crewlet-table-overflow-y, visible);
36
+ max-height: var(--crewlet-table-max-height, none);
37
+ overscroll-behavior-x: contain;
38
+ flex: 1;
39
+ min-width: 0;
40
+ }
41
+
42
+ .crewlet-table__table {
43
+ width: 100%;
44
+ border-collapse: collapse;
45
+ /* The compact step is the table's own: a cell is scanned down a column
46
+ rather than read as a sentence, and 13px is where a row of them still
47
+ lines up against the 36px row token. */
48
+ font-size: var(--font-size-compact);
49
+ /* Fixed layout is the equal-width columns the grid drew, and it also stops
50
+ one long cell dragging the whole table sideways. */
51
+ table-layout: fixed;
52
+ }
53
+
54
+ .crewlet-table__caption {
55
+ padding: var(--spacing-3) var(--spacing-3) 0;
56
+ text-align: left;
57
+ font-size: var(--font-size-compact);
58
+ color: var(--color-text-tertiary);
59
+ }
60
+
61
+ /*
62
+ * THE HEADER IS A MICRO-LABEL, NOT A ROW OF WORDS. A column name is read once,
63
+ * at a glance, to find the column; drawn at the body step in the row's own ink
64
+ * it competed with the values under it for the same attention. The uppercase
65
+ * step at the tertiary ink is the register every other label of its kind in
66
+ * the system takes, and it is measured on the panel ground it is painted on.
67
+ *
68
+ * Sticky, so a table given a height keeps its column names while its rows
69
+ * scroll past. It costs nothing when there is no vertical scroller, and it is
70
+ * the difference between a long table that can be read and one that cannot.
71
+ */
72
+ .crewlet-table__table th {
73
+ position: sticky;
74
+ top: 0;
75
+ z-index: var(--z-index-sticky);
76
+ padding: var(--spacing-2) var(--spacing-3);
77
+ text-align: left;
78
+ font-size: var(--font-size-2xs);
79
+ font-weight: var(--font-weight-medium);
80
+ letter-spacing: var(--font-letter-spacing-wide);
81
+ text-transform: uppercase;
82
+ color: var(--color-text-tertiary);
83
+ white-space: nowrap;
84
+ background: var(--color-surface-subtle);
85
+ border-bottom: 1px solid var(--color-border-default);
86
+ }
87
+
88
+ .crewlet-table__table td {
89
+ padding: var(--spacing-2) var(--spacing-3);
90
+ color: var(--color-text-primary);
91
+ border-bottom: 1px solid var(--color-border-default);
92
+ vertical-align: middle;
93
+ /* The row token, so a table lines up with every other list in a product and
94
+ a cell holding one word is as tall as a cell holding an avatar. */
95
+ height: var(--size-row-md);
96
+ overflow-wrap: anywhere;
97
+ }
98
+
99
+ .crewlet-table__table tbody tr:last-child td {
100
+ border-bottom: none;
101
+ }
102
+
103
+ /*
104
+ * NO HOVER ON A ROW THAT DOES NOTHING. Every row used to light up under the
105
+ * pointer, which is an affordance: it says the row can be pressed, and in this
106
+ * table no row can. A tint that promises a press nothing answers is worse than
107
+ * no tint at all. DataTable carries the hover, because there a row really is
108
+ * a control.
109
+ */
110
+
111
+ .crewlet-table__empty {
112
+ padding: var(--spacing-7) var(--spacing-3);
113
+ text-align: center;
114
+ color: var(--color-text-tertiary);
115
+ font-size: var(--font-size-compact);
116
+ }
117
+
118
+ /*
119
+ * THE FOOT IS INSIDE THE FRAME, fenced by its own rule: it is a row of the
120
+ * panel rather than a word floating under it. It sits outside the scroller, so
121
+ * a table scrolled sideways does not carry its own footer off the screen.
122
+ */
123
+ .crewlet-table__action-btn {
124
+ width: 100%;
125
+ padding: var(--spacing-2) var(--spacing-3);
126
+ background: none;
127
+ border: none;
128
+ border-top: 1px solid var(--color-border-default);
129
+ color: var(--color-brand-accent-ink);
130
+ font-family: inherit;
131
+ font-size: var(--font-size-xs);
132
+ font-weight: var(--font-weight-medium);
133
+ cursor: pointer;
134
+ text-align: center;
135
+ }
136
+
137
+ .crewlet-table__action-text {
138
+ display: inline-block;
139
+ padding: var(--spacing-1) var(--spacing-3);
140
+ border-radius: var(--radius-sm);
141
+ transition: background var(--motion-duration-fast) var(--motion-easing-default);
142
+ }
143
+
144
+ .crewlet-table__action-btn:hover .crewlet-table__action-text {
145
+ background: var(--color-surface-hover);
146
+ }
147
+
148
+ /* Inset, because the foot sits on the frame's own clipped bottom edge and an
149
+ outset ring is cut away by it. */
150
+ .crewlet-table__action-btn:focus-visible {
151
+ outline: 2px solid var(--color-focus);
152
+ outline-offset: var(--size-focus-ring-inset-offset);
153
+ }
154
+
155
+ @media (prefers-reduced-motion: reduce) {
156
+ .crewlet-table__action-text {
157
+ transition: none;
158
+ }
159
+ }