@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,142 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import { type HeadingLevel } from '../utils/headingLevel.js';
3
+ export type CardVariant =
4
+ /** One step above the page. */
5
+ 'default'
6
+ /**
7
+ * The TILE: the panel's ground with none of its lift, at the tighter inset,
8
+ * for one of many records in a grid. Its default padding is `tight`.
9
+ */
10
+ | 'subtle'
11
+ /** Transparent, with a strong border. */
12
+ | 'outlined'
13
+ /**
14
+ * A well INSIDE a card: the inset ground, the tighter radius, no border of
15
+ * its own. What a record's own sub-block takes.
16
+ */
17
+ | 'inset'
18
+ /**
19
+ * The same ground at the tighter radius, with no elevation. What a nested
20
+ * card takes so two borders at one radius do not read as a box drawn twice.
21
+ */
22
+ | 'quiet'
23
+ /** Lifted off the page. */
24
+ | 'elevated'
25
+ /**
26
+ * A dashed boundary: something that is not quite a record yet. A seat held
27
+ * by a person rather than an agent, a slot waiting to be filled.
28
+ */
29
+ | 'dashed';
30
+ /**
31
+ * `tight` is 12px on every edge, the inset a tile in a grid takes. `sm` is
32
+ * VERTICAL ONLY, because a card has one left edge and its header sets it:
33
+ * reducing the horizontal inset too puts content on a different vertical line
34
+ * from the title above it, and pushes a code block against the card's right
35
+ * edge with nowhere for its scrollbar to sit. What it is for is content whose
36
+ * rows carry their own vertical rhythm, which is a claim about height rather
37
+ * than about the edge.
38
+ */
39
+ export type CardPadding = 'none' | 'tight' | 'sm' | 'md' | 'lg';
40
+ /**
41
+ * A section's own padding, on the SAME five steps as the card's own, so one
42
+ * word names one inset wherever it is said. They were two scales sharing two
43
+ * words: `tight` meant 12px on every edge on the card and a vertical-only step
44
+ * on a section, and `md` meant 16px on a card and on a body but 8px over 16px
45
+ * on a footer. A caller who read the card's steps and wrote one on a body got
46
+ * a different inset than the one documented, with nothing to say so.
47
+ */
48
+ export type CardSectionPadding = CardPadding;
49
+ /**
50
+ * A rail down the card's leading edge, carrying a STATE. The three states a
51
+ * record can be in that a reader scans a grid for, and nothing else: identity
52
+ * (whose seat, which unit, which vendor) is carried by name, glyph and
53
+ * position, never by colour.
54
+ */
55
+ export type CardRail = 'info' | 'warning' | 'danger';
56
+ export type CardElement = 'div' | 'section' | 'article' | 'li';
57
+ interface CardLook {
58
+ variant?: CardVariant | undefined;
59
+ /**
60
+ * The inset the card's own content takes. `none` lets a table sit flush.
61
+ *
62
+ * WHERE IT IS APPLIED depends on the recipe. A card given raw children takes
63
+ * it on its own surface. A card built from `Card.Header`, `Card.Body` or
64
+ * `Card.Footer` is FLUSH and never carries padding itself, because its slots
65
+ * carry theirs and have to reach its edges: there it is the inset of
66
+ * whatever the card holds BESIDE those slots, which the card draws in a body
67
+ * of its own. Left unset it is `md`, or `tight` for a `subtle` tile.
68
+ */
69
+ padding?: CardPadding | undefined;
70
+ /** Hover, pointer and focus states. Implied by `href` and `asChild`. */
71
+ interactive?: boolean | undefined;
72
+ rail?: CardRail | undefined;
73
+ /** This card is the one the reader has chosen. */
74
+ selected?: boolean | undefined;
75
+ className?: string | undefined;
76
+ children?: ReactNode;
77
+ }
78
+ export interface CardProps extends HTMLAttributes<HTMLElement>, CardLook {
79
+ /**
80
+ * The element to draw. `section` and `article` are named by `Card.Title`
81
+ * when there is one, so a screen reader listing a page's regions finds the
82
+ * card by its own heading.
83
+ */
84
+ as?: CardElement | undefined;
85
+ /**
86
+ * The whole card goes somewhere. It draws a REAL anchor: a card that
87
+ * navigates from a click handler cannot be opened in a tab, copied, or
88
+ * announced as a link.
89
+ */
90
+ href?: string | undefined;
91
+ /** Render the single child element as the card, for a router's own Link. */
92
+ asChild?: boolean | undefined;
93
+ }
94
+ export interface CardHeaderProps extends HTMLAttributes<HTMLDivElement> {
95
+ /**
96
+ * The hairline under the header. ON by default: the header is a bar with a
97
+ * rule under it, which is the shape a reader meets on every screen. Turn it
98
+ * off for a card whose body is one paragraph, where a rule separates a title
99
+ * from the sentence that finishes it.
100
+ */
101
+ divided?: boolean | undefined;
102
+ /** A glyph before the title. Decoration: the title carries the meaning. */
103
+ icon?: ReactNode;
104
+ /** How many of something the card is about. */
105
+ count?: number | string | undefined;
106
+ /** A second line under the title. It truncates; a title does not. */
107
+ subtitle?: ReactNode;
108
+ /** The card's own controls, at the end of the header row. */
109
+ actions?: ReactNode;
110
+ }
111
+ export interface CardSectionProps extends HTMLAttributes<HTMLDivElement> {
112
+ /**
113
+ * This section's own padding. It is APPLIED, rather than declared and passed
114
+ * to the DOM: the prop used to fall through into the rest spread and render
115
+ * as a `padding="md"` attribute on a div, where it did nothing at all.
116
+ */
117
+ padding?: CardSectionPadding | undefined;
118
+ }
119
+ export type CardFooterVariant =
120
+ /** Buttons, at the end of the row. */
121
+ 'actions'
122
+ /** A quiet strip of facts: a count, a timestamp, a source. */
123
+ | 'meta';
124
+ export interface CardFooterProps extends CardSectionProps {
125
+ variant?: CardFooterVariant | undefined;
126
+ }
127
+ export interface CardTitleProps extends HTMLAttributes<HTMLHeadingElement> {
128
+ /**
129
+ * Overrides the heading element. By default the title takes the level the
130
+ * surrounding surface declares, so the same card is an `h3` under a section
131
+ * heading and an `h2` at the top of a page.
132
+ */
133
+ as?: `h${HeadingLevel}` | undefined;
134
+ }
135
+ export declare const Card: (({ variant, padding, interactive, rail, selected, as, href, asChild, className, children, ...rest }: CardProps) => import("react/jsx-runtime").JSX.Element) & {
136
+ Header: ({ divided, icon, count, subtitle, actions, className, children, ...rest }: CardHeaderProps) => import("react/jsx-runtime").JSX.Element;
137
+ Body: ({ padding, className, children, ...rest }: CardSectionProps) => import("react/jsx-runtime").JSX.Element;
138
+ Footer: ({ variant, padding, className, children, ...rest }: CardFooterProps) => import("react/jsx-runtime").JSX.Element;
139
+ Title: ({ as, className, children, ...rest }: CardTitleProps) => import("react/jsx-runtime").JSX.Element;
140
+ Description: ({ className, children, ...rest }: HTMLAttributes<HTMLParagraphElement>) => import("react/jsx-runtime").JSX.Element;
141
+ };
142
+ export {};
@@ -0,0 +1,65 @@
1
+ /**
2
+ * The seam a card's header offers the panel inside it: a place on the header
3
+ * row for that panel's OWN controls.
4
+ *
5
+ * WHY A SEAM RATHER THAN A PROP THE CALLER WIRES. A table's pager and its
6
+ * settings cog are the table's: their state is inside it, they move with its
7
+ * pages and they open its frame. A card's header is the card's. Drawing the
8
+ * first inside the second is therefore something neither component can do
9
+ * alone, and every way of faking it puts the join in the CALLER: the screen
10
+ * lifts the table's page into its own state so it can hand a pager to
11
+ * `Card.Header`'s `actions`, or it leaves the table's own bar where it is and
12
+ * pulls it up with a stylesheet of its own. The first makes every panel
13
+ * restate what the table already knows; the second is a rule about class names
14
+ * that no test holds and no reader of the card can see.
15
+ *
16
+ * So the card publishes a slot and the panel draws into it, through the React
17
+ * tree the two already share. The caller composes what it always composed:
18
+ * a card, a header, a table.
19
+ *
20
+ * THE SLOT IS TAKEN BY ONE PANEL. A card holding two tables would otherwise
21
+ * put two pagers and two cogs on one header row, each belonging to rows the
22
+ * reader cannot tell apart. The first to ask holds it; anybody else is told no
23
+ * and keeps its own bar, which is the shape it has outside a card anyway.
24
+ */
25
+ /** What the card offers, as its header sees it. Internal to [Card]. */
26
+ export interface CardHeaderSlot {
27
+ /**
28
+ * This card draws a header, so there IS a row to sit in. Read from the
29
+ * card's own children at render time rather than reported by the header
30
+ * from an effect: a panel has to know where its controls go on the first
31
+ * frame, and a header that announced itself one commit later would have
32
+ * every table draw a bar and then take it away again.
33
+ */
34
+ hasHeader: boolean;
35
+ /** The node to draw into. Null until the header has rendered one. */
36
+ node: HTMLElement | null;
37
+ /** Takes the row. True to the one holder; false to everybody after it. */
38
+ claim: (claimant: object) => boolean;
39
+ /** Gives it back, so a panel that unmounts does not hold an empty header. */
40
+ release: (claimant: object) => void;
41
+ }
42
+ export declare const CardHeaderSlotContext: import("react").Context<CardHeaderSlot | null>;
43
+ /** Where a panel's own controls are drawn, once it has asked for a header. */
44
+ export interface CardHeaderChrome {
45
+ /**
46
+ * A card's header is drawing them, so the panel draws no bar of its own.
47
+ * True from the FIRST render inside a card that has a header, before
48
+ * [CardHeaderChrome.node] exists, so nothing is ever drawn in two places.
49
+ */
50
+ hosted: boolean;
51
+ /** The node to render into, or null while there is nowhere yet. */
52
+ node: HTMLElement | null;
53
+ }
54
+ /**
55
+ * Asks the card above for its header row.
56
+ *
57
+ * `wanted` is whether this panel has controls to put there at all: a table
58
+ * with no pager and no cog asks for nothing, so the card's header stays free
59
+ * for a second table that does have them.
60
+ *
61
+ * The answer is a value rather than a rendered node, so the caller keeps its
62
+ * own controls and decides where to put them; what it gets back is the two
63
+ * facts it cannot work out for itself.
64
+ */
65
+ export declare function useCardHeaderSlot(wanted: boolean): CardHeaderChrome;
@@ -0,0 +1,5 @@
1
+ import './Card.css';
2
+ export { Card } from './Card.js';
3
+ export { useCardHeaderSlot } from './headerSlot.js';
4
+ export type { CardHeaderChrome } from './headerSlot.js';
5
+ export type { CardProps, CardHeaderProps, CardSectionProps, CardFooterProps, CardFooterVariant, CardTitleProps, CardVariant, CardPadding, CardSectionPadding, CardRail, CardElement, } from './Card.js';
@@ -0,0 +1,6 @@
1
+ export { Card } from '../chunk-T7FKOJKW.js';
2
+ export { useCardHeaderSlot } from '../chunk-AV2DXAEL.js';
3
+ import '../chunk-BHHIIK3M.js';
4
+ import '../chunk-PQADV6P6.js';
5
+ import '../chunk-BZFWDIV6.js';
6
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,428 @@
1
+ /*
2
+ * Card, THE surface. Everything on a screen is a card, a row inside one, or a
3
+ * control.
4
+ *
5
+ * TWO RECIPES, and the engine dashboard's panel is the second. A card given
6
+ * raw children is a padded block that lifts off the page. A card built from
7
+ * Header, Body and Footer is FLUSH: it carries no padding of its own, its
8
+ * slots carry theirs, and it clips them to its own radius, so the header's
9
+ * hairline and a table's first row reach the card's edges instead of stopping
10
+ * short of them. The component picks the recipe from what it was given.
11
+ *
12
+ * A flush card's own content, where it holds any beside its slots, is drawn in
13
+ * a body: see Card.tsx. Without that the header sits at the card's inset and
14
+ * the sentence under it against the border, which is the shape this file's
15
+ * `p-none` used to leave behind.
16
+ */
17
+
18
+ .crewlet-card {
19
+ position: relative;
20
+ display: flex;
21
+ flex-direction: column;
22
+ min-width: 0;
23
+ background-color: var(--color-surface-subtle);
24
+ border: 1px solid var(--color-border-default);
25
+ border-radius: var(--radius-lg);
26
+ color: var(--color-text-primary);
27
+ }
28
+
29
+ /*
30
+ * TWO GROUNDS, TWO DEVICES. On light the shadow is the elevation; on dark a
31
+ * shadow over a dark page is nearly invisible, so the hairline along the top
32
+ * edge does the job instead.
33
+ *
34
+ * THE HAIRLINE IS ON ITS OWN ELEMENT, and that is the whole reason the rule is
35
+ * two rules. `--shadow-hairline` is `none` in the light theme, and `none` is a
36
+ * value a shadow list may not carry: `box-shadow: <shadow>, none` is invalid at
37
+ * computed-value time, so the declaration is dropped and the light card loses
38
+ * the elevation the list was built around. Alone on a pseudo element the same
39
+ * token is valid in both themes, and it composes with the selection ring
40
+ * rather than replacing whichever was declared last, exactly as the rail does.
41
+ */
42
+ .crewlet-card--default:not(.crewlet-card--flush) {
43
+ box-shadow: var(--shadow-xs);
44
+ }
45
+
46
+ .crewlet-card--default:not(.crewlet-card--flush)::after,
47
+ .crewlet-card--elevated::after {
48
+ content: '';
49
+ position: absolute;
50
+ inset: 0;
51
+ border-radius: inherit;
52
+ pointer-events: none;
53
+ box-shadow: var(--shadow-hairline);
54
+ }
55
+
56
+ .crewlet-card--default {
57
+ background-color: var(--color-surface-subtle);
58
+ }
59
+
60
+ /*
61
+ * THE TILE: the panel's ground with none of its lift. One of many in a grid,
62
+ * where a shadow under every card turns a list of records into a relief map.
63
+ *
64
+ * It used to take the PAGE's ground, which is a card drawn in the colour of
65
+ * the thing behind it: on the light palette a white tile on a white page, held
66
+ * together by its hairline alone, and on dark the same trick one step darker
67
+ * than the panel beside it. The ground here is the one every other card
68
+ * already stands on, so every ink measured against a card is measured against
69
+ * this too.
70
+ */
71
+ .crewlet-card--subtle {
72
+ background-color: var(--color-surface-subtle);
73
+ }
74
+
75
+ .crewlet-card--outlined {
76
+ background-color: transparent;
77
+ border-color: var(--color-border-strong);
78
+ }
79
+
80
+ /*
81
+ * A well rather than a panel: the inset ground, and the tighter radius that
82
+ * says it is a block INSIDE a card rather than a card of its own.
83
+ */
84
+ .crewlet-card--inset {
85
+ background-color: var(--color-surface-inset);
86
+ border-color: transparent;
87
+ border-radius: var(--radius-md);
88
+ }
89
+
90
+ /*
91
+ * A card that is not the page's main surface: the same ground, the tighter
92
+ * radius, and no elevation at all. It is what a nested block takes so two
93
+ * borders at the same radius do not read as one box drawn twice.
94
+ */
95
+ .crewlet-card--quiet {
96
+ background-color: var(--color-surface-subtle);
97
+ border-radius: var(--radius-md);
98
+ }
99
+
100
+ .crewlet-card--elevated {
101
+ background-color: var(--color-surface-elevated);
102
+ box-shadow: var(--shadow-md);
103
+ }
104
+
105
+ /*
106
+ * Not a record yet. A dashed boundary says "this slot is defined and empty"
107
+ * where a solid one would claim there is something in it.
108
+ */
109
+ .crewlet-card--dashed {
110
+ background-color: transparent;
111
+ border-style: dashed;
112
+ }
113
+
114
+ /*
115
+ * THE FLUSH RECIPE. The slots reach the card's edges, and the clip is what
116
+ * makes the header's hairline and a table's own corners follow the radius
117
+ * instead of crossing it. The selection ring survives the clip because it is
118
+ * an INSET shadow; an outset one would be cut off here.
119
+ */
120
+ .crewlet-card--flush {
121
+ overflow: hidden;
122
+ }
123
+
124
+ /* ---- The inset scale ---------------------------------------------------- */
125
+
126
+ /*
127
+ * ONE WORD, ONE INSET, wherever it is said. A card's own padding, a body's and
128
+ * a footer's are the same five steps, because they are one decision asked at
129
+ * three levels. They used to be two scales that shared two words: `tight` was
130
+ * 12px on every edge on the card and a vertical-only step in a section, and
131
+ * `md` was 16px on every edge on the card and on a body and 8px over 16px on a
132
+ * footer. A caller who read the card's steps and wrote one on a body got a
133
+ * different inset, with nothing to say so.
134
+ *
135
+ * TIGHT IS THE TILE'S INSET, on every edge: one of many records in a grid,
136
+ * where at the panel's own step each tile spends a third of its height on air
137
+ * and the grid reads as a page of panels rather than as a list.
138
+ *
139
+ * SM IS VERTICAL ONLY, because a card has ONE left edge and its header sets
140
+ * it. Reducing the horizontal inset too puts content on a different vertical
141
+ * line from the title above it, and pushes a code block against the card's
142
+ * right edge with nowhere for its scrollbar to sit. What it is for is content
143
+ * whose rows carry their own vertical rhythm, which is a claim about height
144
+ * rather than about the edge.
145
+ *
146
+ * The step is the ONLY place any of these three declares a padding, so no base
147
+ * rule ties with a step on specificity and wins on source order instead.
148
+ */
149
+ .crewlet-card--p-none,
150
+ .crewlet-card__body--p-none,
151
+ .crewlet-card__footer--p-none {
152
+ padding: 0;
153
+ }
154
+
155
+ .crewlet-card--p-tight,
156
+ .crewlet-card__body--p-tight,
157
+ .crewlet-card__footer--p-tight {
158
+ padding: var(--spacing-3);
159
+ }
160
+
161
+ .crewlet-card--p-sm,
162
+ .crewlet-card__body--p-sm,
163
+ .crewlet-card__footer--p-sm {
164
+ padding: var(--spacing-2) var(--spacing-4);
165
+ }
166
+
167
+ .crewlet-card--p-md,
168
+ .crewlet-card__body--p-md,
169
+ .crewlet-card__footer--p-md {
170
+ padding: var(--spacing-4);
171
+ }
172
+
173
+ .crewlet-card--p-lg,
174
+ .crewlet-card__body--p-lg,
175
+ .crewlet-card__footer--p-lg {
176
+ padding: var(--spacing-5) var(--spacing-6);
177
+ }
178
+
179
+ /* ---- Interaction ------------------------------------------------------- */
180
+
181
+ .crewlet-card.is-interactive {
182
+ cursor: pointer;
183
+ text-decoration: none;
184
+ transition:
185
+ border-color var(--motion-duration-base) var(--motion-easing-default),
186
+ box-shadow var(--motion-duration-base) var(--motion-easing-default);
187
+ }
188
+
189
+ .crewlet-card.is-interactive:hover {
190
+ border-color: var(--color-border-hover);
191
+ box-shadow: var(--shadow-md);
192
+ }
193
+
194
+ .crewlet-card.is-interactive:focus-visible {
195
+ outline: 2px solid var(--color-focus);
196
+ outline-offset: 2px;
197
+ }
198
+
199
+ /*
200
+ * Chosen. A ring rather than a tint, because a card carries its own surface
201
+ * and a tint under it would change the ground every value on it was measured
202
+ * against.
203
+ */
204
+ .crewlet-card.is-selected {
205
+ box-shadow: var(--shadow-selection);
206
+ border-color: var(--color-brand-accent);
207
+ }
208
+
209
+ /* ---- Rails ------------------------------------------------------------- */
210
+
211
+ /*
212
+ * A state down the leading edge. Drawn as a pseudo element rather than a
213
+ * border or an inset shadow, so it composes with the elevated shadow and the
214
+ * selection ring instead of replacing whichever one was declared last.
215
+ */
216
+ .crewlet-card--rail-info::before,
217
+ .crewlet-card--rail-warning::before,
218
+ .crewlet-card--rail-danger::before {
219
+ content: '';
220
+ position: absolute;
221
+ inset-block: 0;
222
+ inset-inline-start: 0;
223
+ width: 3px;
224
+ border-start-start-radius: var(--radius-lg);
225
+ border-end-start-radius: var(--radius-lg);
226
+ }
227
+
228
+ .crewlet-card--rail-info::before {
229
+ background: var(--color-feedback-info);
230
+ }
231
+
232
+ .crewlet-card--rail-warning::before {
233
+ background: var(--color-feedback-warning);
234
+ }
235
+
236
+ .crewlet-card--rail-danger::before {
237
+ background: var(--color-feedback-danger);
238
+ }
239
+
240
+ /* ---- Slots ------------------------------------------------------------- */
241
+
242
+ /*
243
+ * The panel head: ONE LINE, at the card's own inset, with the rule under it
244
+ * reaching both edges. `--size-row-lg` is the floor, so a row of nothing but a
245
+ * title stands as tall as the rows on every other card; a control taller than
246
+ * what is left of it after the inset raises the row, which is what a head with
247
+ * a button in it draws.
248
+ */
249
+ .crewlet-card__header {
250
+ display: flex;
251
+ align-items: center;
252
+ gap: var(--spacing-3);
253
+ min-height: var(--size-row-lg);
254
+ padding: var(--spacing-3) var(--spacing-4);
255
+ border-bottom: 1px solid var(--color-border-default);
256
+ }
257
+
258
+ /*
259
+ * A head with nothing under it to separate from: a card whose body is prose
260
+ * rather than rows. It keeps the inset and gives up the rule.
261
+ */
262
+ .crewlet-card__header--plain {
263
+ border-bottom: none;
264
+ }
265
+
266
+ /*
267
+ * The name block. It CLIPS, because the head is one line: a title with nowhere
268
+ * left to go is cut at the row's end rather than allowed to spill across the
269
+ * controls beside it.
270
+ */
271
+ .crewlet-card__header-main {
272
+ display: flex;
273
+ align-items: center;
274
+ gap: var(--spacing-2);
275
+ min-width: 0;
276
+ overflow: hidden;
277
+ }
278
+
279
+ .crewlet-card__header-icon {
280
+ display: inline-flex;
281
+ flex: none;
282
+ color: var(--color-text-tertiary);
283
+ }
284
+
285
+ /*
286
+ * The actions take the end of the row, and the auto margin is the spacer
287
+ * between them and the title block. Not `justify-content: space-between`: the
288
+ * subtitle is a third child, and space-between would push it into the middle
289
+ * of the line rather than leaving it beside the name it belongs to.
290
+ */
291
+ .crewlet-card__header-actions {
292
+ display: flex;
293
+ align-items: center;
294
+ gap: var(--spacing-2);
295
+ flex: none;
296
+ margin-inline-start: auto;
297
+ }
298
+
299
+ /*
300
+ * The panel's own controls: a table's pager and its settings cog, drawn on
301
+ * this row rather than in a bar of their own under it. See Card/headerSlot.ts
302
+ * for how they get here.
303
+ *
304
+ * NO BOX WHEN THERE IS NOTHING IN IT. Every header inside a card renders this
305
+ * node, because the panel that might fill it is below the header in the tree.
306
+ * An empty one that still laid out would open the row's gap on every card in
307
+ * the product for a control nobody drew.
308
+ */
309
+ .crewlet-card__header-chrome {
310
+ display: flex;
311
+ align-items: center;
312
+ flex: none;
313
+ margin-inline-start: auto;
314
+ }
315
+
316
+ .crewlet-card__header-chrome:empty {
317
+ display: none;
318
+ }
319
+
320
+ /*
321
+ * The card's own actions take the end of the row and the panel's controls
322
+ * close onto them, so the cog stays the last thing on the line. Without this
323
+ * both carry the auto margin, and two auto margins SPLIT the free space: the
324
+ * card's actions would drift into the middle of its own header.
325
+ */
326
+ .crewlet-card__header-actions ~ .crewlet-card__header-chrome {
327
+ margin-inline-start: 0;
328
+ }
329
+
330
+ /*
331
+ * The panel body. Its inset is a step of the scale above, and a card's own
332
+ * children are drawn in one of these whenever its slots have made it flush:
333
+ * see Card.tsx.
334
+ */
335
+ .crewlet-card__body {
336
+ display: flex;
337
+ flex-direction: column;
338
+ gap: var(--spacing-3);
339
+ min-width: 0;
340
+ }
341
+
342
+ /*
343
+ * The panel foot: a quiet strip at the card's inset, in the caption register.
344
+ * A row of buttons carries its own ink, so the tertiary step here is what the
345
+ * facts beside them take.
346
+ */
347
+ .crewlet-card__footer {
348
+ display: flex;
349
+ align-items: center;
350
+ gap: var(--spacing-2);
351
+ border-top: 1px solid var(--color-border-default);
352
+ font-size: var(--font-size-xs);
353
+ color: var(--color-text-tertiary);
354
+ }
355
+
356
+ .crewlet-card__footer--actions {
357
+ justify-content: flex-end;
358
+ }
359
+
360
+ .crewlet-card__footer--meta {
361
+ justify-content: flex-start;
362
+ }
363
+
364
+ /* A footer with no inset has no rule either: there is no strip left to draw. */
365
+ .crewlet-card__footer--p-none {
366
+ border-top: none;
367
+ }
368
+
369
+ /*
370
+ * The page's leading rather than the baseline's heading leading. The title is
371
+ * a heading element, and it shares one row with a subtitle, a count and the
372
+ * card's own controls: at the tight step it is the one thing in the header on
373
+ * a different rhythm from everything beside it, which is what made a head with
374
+ * a button in it a pixel taller than one without.
375
+ */
376
+ .crewlet-card__title {
377
+ margin: 0;
378
+ display: flex;
379
+ align-items: center;
380
+ gap: var(--spacing-2);
381
+ min-width: 0;
382
+ /*
383
+ * ONE LINE, which is the head's own rule. Left to wrap, a title one pixel
384
+ * wider than the space the subtitle beside it had left broke over two lines
385
+ * and took the whole head from 48px to 67px: at 1100px wide, "By model" was
386
+ * drawn as "By" over "model" while the subtitle beside it still had a tail
387
+ * to give up. Which is what the subtitle does first; see below.
388
+ */
389
+ white-space: nowrap;
390
+ font-size: var(--font-size-sm);
391
+ font-weight: var(--font-weight-semibold);
392
+ line-height: var(--font-line-height-normal);
393
+ letter-spacing: var(--font-letter-spacing-tight);
394
+ color: var(--color-text-primary);
395
+ }
396
+
397
+ /*
398
+ * The subtitle gives up its tail and the title does not: a title is the
399
+ * record's identity and has to be read in full, while a subtitle is context.
400
+ *
401
+ * WHICH IS WHAT THE SHRINK FACTOR SAYS. Two flex items that both may shrink
402
+ * give up space in proportion to their widths, so a head one pixel too narrow
403
+ * took that pixel off the title as well, and the title has nowhere to put it
404
+ * but a second line. At a hundred to the title's one the subtitle absorbs
405
+ * effectively all of it, down to nothing, before the title gives up a pixel.
406
+ */
407
+ .crewlet-card__subtitle {
408
+ flex-shrink: 100;
409
+ font-size: var(--font-size-xs);
410
+ color: var(--color-text-tertiary);
411
+ overflow: hidden;
412
+ text-overflow: ellipsis;
413
+ white-space: nowrap;
414
+ min-width: 0;
415
+ }
416
+
417
+ .crewlet-card__description {
418
+ margin: 0;
419
+ font-size: var(--font-size-compact);
420
+ line-height: var(--font-line-height-normal);
421
+ color: var(--color-text-secondary);
422
+ }
423
+
424
+ @media (prefers-reduced-motion: reduce) {
425
+ .crewlet-card.is-interactive {
426
+ transition: none;
427
+ }
428
+ }
@@ -0,0 +1,45 @@
1
+ export interface ActivityBucket {
2
+ /** The bucket's start, epoch milliseconds. It is also the cell's key. */
3
+ t: number;
4
+ /** How much happened in it. */
5
+ v: number;
6
+ }
7
+ export interface ActivityStripProps {
8
+ buckets: ActivityBucket[];
9
+ /**
10
+ * What the strip is, read in place of the picture: "activity over the last
11
+ * hour". Required, because a picture with no name is announced as "image"
12
+ * and the reader is left to guess.
13
+ */
14
+ label: string;
15
+ /**
16
+ * The strip's own sentence, where the label is not the whole story. The
17
+ * default adds the peak and the total, which is what the shape shows.
18
+ */
19
+ summary?: (facts: {
20
+ peak: number;
21
+ total: number;
22
+ buckets: number;
23
+ }) => string;
24
+ className?: string;
25
+ }
26
+ /**
27
+ * One cell per bucket, oldest to newest: the shape of a window's activity.
28
+ *
29
+ * KEYED BY BUCKET, NEVER BY INDEX. The board this replaces keyed 60 cells
30
+ * `p0..p59` over a window recomputed from the clock on every render, so at
31
+ * each minute roll every cell's content shifted one position left and the
32
+ * whole strip was rewritten. A time-anchored key moves exactly one node.
33
+ *
34
+ * HEIGHT IS THE WHOLE ENCODING. The strip used to scale opacity with the
35
+ * value as well, which said the same thing twice and put the quietest
36
+ * buckets under 3:1 against the surface, so the marks that meant "something
37
+ * happened here, but not much" were the ones nobody could see. Every drawn
38
+ * cell is now the same solid colour and only its height varies; an empty
39
+ * bucket is a neutral hairline at the baseline, which is a different mark
40
+ * rather than a fainter one.
41
+ *
42
+ * ONE IMAGE, not sixty. The cells are marks in a single picture, so the
43
+ * strip is the `img` and its label is the sentence.
44
+ */
45
+ export declare function ActivityStrip({ buckets, label, summary, className }: ActivityStripProps): import("react/jsx-runtime").JSX.Element;