@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,31 @@
1
+ import type { TimeHTMLAttributes } from 'react';
2
+ import { type TimeValue } from './format.js';
3
+ export type RelativeTimeMode =
4
+ /** "4m ago", "in 30m", "just now", "due". When something happened. */
5
+ 'relative'
6
+ /** "4m 20s". How long something has been going. */
7
+ | 'elapsed';
8
+ export interface RelativeTimeProps extends Omit<TimeHTMLAttributes<HTMLTimeElement>, 'dateTime'> {
9
+ value: TimeValue;
10
+ mode?: RelativeTimeMode | undefined;
11
+ /**
12
+ * Overrides the shared clock, for a story or a suite. Left alone, every
13
+ * relative time in the document advances together on one ticker.
14
+ */
15
+ now?: number | undefined;
16
+ /** What an unparseable or absent value means. */
17
+ emptyLabel?: string | undefined;
18
+ }
19
+ /**
20
+ * When something happened, kept current.
21
+ *
22
+ * A REAL `time` ELEMENT, carrying the exact instant in `dateTime` and in its
23
+ * title. The words a reader sees are approximate on purpose, and the moment
24
+ * they need the real one, hovering gives it to them and a machine reading the
25
+ * page has had it all along.
26
+ *
27
+ * It subscribes to the shared clock, so the words advance on their own rather
28
+ * than freezing at whatever they were when an unrelated push last happened to
29
+ * re-render the row.
30
+ */
31
+ export declare function RelativeTime({ value, mode, now, emptyLabel, className, ...rest }: RelativeTimeProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The shared instant, in epoch ms, re-rendering the caller once a second.
3
+ *
4
+ * Pass the value DOWN rather than calling this again deeper: two components
5
+ * reading their own clock is the disagreement it exists to prevent.
6
+ */
7
+ export declare function useNow(): number;
8
+ /** The current instant without subscribing, for an event handler or an effect. */
9
+ export declare function currentNow(): number;
@@ -0,0 +1,38 @@
1
+ /** Anything a caller has a time in. */
2
+ export type TimeValue = Date | number | string | null | undefined;
3
+ /**
4
+ * The instant a value names, or null when it names none.
5
+ *
6
+ * A NAIVE STAMP IS READ AS UTC. Servers emit both the aware form
7
+ * (`2026-01-01T00:00:00Z`) and the naive one, often for the same instant, and
8
+ * `new Date()` reads the naive one as LOCAL time: a reader in Berlin would see
9
+ * every naive stamp an hour out, and the two encodings of one instant would
10
+ * render as two different times on the same screen.
11
+ */
12
+ export declare function toInstant(value: TimeValue): number | null;
13
+ /**
14
+ * "4m ago", "2h ago", "just now", "in 30m", "due".
15
+ *
16
+ * `now` is a REQUIRED argument rather than a call to a clock inside. Every
17
+ * relative time on a screen has to agree with every other, and a function that
18
+ * read the clock itself would answer differently for two rows rendered in the
19
+ * same frame. `useNow` is the one ticker that supplies it.
20
+ *
21
+ * Null for a value that names no instant, so a caller decides what an absence
22
+ * looks like. A dash chosen here would be the one absence in a product that
23
+ * says nothing about what is missing.
24
+ */
25
+ export declare function formatRelative(value: TimeValue, now: number): string | null;
26
+ /** The same rules, forward: "in 4m", and "due" once it has arrived. */
27
+ export declare function formatUntil(value: TimeValue, now: number): string | null;
28
+ /**
29
+ * How long, as a running duration: "12s", "4m 20s", "1h 5m".
30
+ *
31
+ * Different from the relative form on purpose. Beside something that is still
32
+ * happening, "4m ago" claims it is over; this says how long it has been going.
33
+ */
34
+ export declare function formatElapsed(value: TimeValue, now: number): string | null;
35
+ /** The full instant, for the title a reader hovers to see exactly when. */
36
+ export declare function formatExact(value: TimeValue): string | null;
37
+ /** The machine-readable form a `time` element carries. */
38
+ export declare function toISO(value: TimeValue): string | null;
@@ -0,0 +1,6 @@
1
+ import './RelativeTime.css';
2
+ export { RelativeTime } from './RelativeTime.js';
3
+ export type { RelativeTimeProps, RelativeTimeMode } from './RelativeTime.js';
4
+ export { useNow, currentNow } from './clock.js';
5
+ export { formatElapsed, formatExact, formatRelative, formatUntil, toISO, toInstant, } from './format.js';
6
+ export type { TimeValue } from './format.js';
@@ -0,0 +1,4 @@
1
+ export { RelativeTime, currentNow, formatElapsed, formatExact, formatRelative, formatUntil, toISO, toInstant, useNow } from '../chunk-3CZ7XAVY.js';
2
+ import '../chunk-EUCC37WY.js';
3
+ import '../chunk-BZFWDIV6.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,10 @@
1
+ /*
2
+ * A relative time is text, so it takes the register around it. Its one rule is
3
+ * tabular figures: the words change once a second, and proportional digits
4
+ * would move whatever sits beside them on every tick.
5
+ */
6
+
7
+ .crewlet-relative-time {
8
+ font-variant-numeric: tabular-nums;
9
+ white-space: nowrap;
10
+ }
@@ -0,0 +1,29 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ export interface SearchTriggerProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children' | 'aria-label'> {
3
+ /** What it is called, drawn inside the box and used as its name. */
4
+ label?: string | undefined;
5
+ /** The shortcut hint, as a Kbd with `keys`. */
6
+ shortcut?: ReactNode;
7
+ /**
8
+ * The shortcut in the syntax `aria-keyshortcuts` takes, such as
9
+ * `"Control+K Meta+K /"`. A screen reader reads it with the control, which
10
+ * is the only place a reader who cannot see the keycaps learns the shortcut
11
+ * exists.
12
+ */
13
+ keyshortcuts?: string | undefined;
14
+ /** The leading glyph. A magnifier by default. */
15
+ icon?: ReactNode;
16
+ }
17
+ /**
18
+ * The control that opens search, drawn as the field it is standing in for.
19
+ *
20
+ * IT IS A BUTTON, not an input. What it opens is a palette with its own field,
21
+ * and a box that takes focus and then throws the first keystroke away is worse
22
+ * than one that never looked like a field at all.
23
+ *
24
+ * ITS NAME IS ON THE BUTTON, not in its text. The narrow layout hides the
25
+ * label and the hint and leaves the glyph, and content under `display: none`
26
+ * names nothing: the dashboard this comes from had a search button that a
27
+ * screen reader announced as "button" at every width under the breakpoint.
28
+ */
29
+ export declare const SearchTrigger: import("react").ForwardRefExoticComponent<SearchTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,3 @@
1
+ import './SearchTrigger.css';
2
+ export { SearchTrigger } from './SearchTrigger.js';
3
+ export type { SearchTriggerProps } from './SearchTrigger.js';
@@ -0,0 +1,2 @@
1
+ export { SearchTrigger } from '../chunk-Q4ZPPART.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,79 @@
1
+ /*
2
+ * A button drawn as the field it stands in for.
3
+ *
4
+ * Below the shell breakpoint it keeps the glyph and drops the label and the
5
+ * hint, which is why the name lives on the button rather than in its text.
6
+ */
7
+
8
+ .crewlet-search-trigger {
9
+ display: inline-flex;
10
+ align-items: center;
11
+ gap: var(--spacing-2);
12
+ /* The resting width of the box. A topbar with less room sets it. */
13
+ --crewlet-search-trigger-width: 220px;
14
+ min-width: var(--crewlet-search-trigger-width);
15
+ height: var(--size-control-md);
16
+ padding: 0 var(--spacing-2) 0 var(--spacing-3);
17
+ border: 1px solid var(--color-border-default);
18
+ border-radius: var(--radius-md);
19
+ background: var(--color-surface-subtle);
20
+ color: var(--color-text-tertiary);
21
+ font-family: var(--font-family-sans);
22
+ font-size: var(--font-size-compact);
23
+ cursor: pointer;
24
+ transition:
25
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
26
+ color var(--motion-duration-fast) var(--motion-easing-default);
27
+ }
28
+
29
+ .crewlet-search-trigger:hover {
30
+ border-color: var(--color-border-hover);
31
+ color: var(--color-text-primary);
32
+ }
33
+
34
+ .crewlet-search-trigger:focus-visible {
35
+ outline: 2px solid var(--color-focus);
36
+ outline-offset: 2px;
37
+ }
38
+
39
+ .crewlet-search-trigger__icon {
40
+ display: inline-flex;
41
+ flex: none;
42
+ }
43
+
44
+ /* The glyph is quieter than the word beside it, on the decoration step, which
45
+ is the one thing that step is for. */
46
+ .crewlet-search-trigger__icon svg {
47
+ color: var(--color-text-muted);
48
+ }
49
+
50
+ .crewlet-search-trigger__label {
51
+ overflow: hidden;
52
+ text-overflow: ellipsis;
53
+ white-space: nowrap;
54
+ }
55
+
56
+ /* The hint as a whole, so its keys stay together at the end of the box. */
57
+ .crewlet-search-trigger__shortcut {
58
+ display: inline-flex;
59
+ align-items: center;
60
+ margin-left: auto;
61
+ flex: none;
62
+ }
63
+
64
+ @media (max-width: 900px) {
65
+ .crewlet-search-trigger {
66
+ min-width: 0;
67
+ }
68
+
69
+ .crewlet-search-trigger__label,
70
+ .crewlet-search-trigger__shortcut {
71
+ display: none;
72
+ }
73
+ }
74
+
75
+ @media (prefers-reduced-motion: reduce) {
76
+ .crewlet-search-trigger {
77
+ transition: none;
78
+ }
79
+ }
@@ -0,0 +1,41 @@
1
+ import { type HTMLAttributes, type ReactNode } from 'react';
2
+ import { type HeadingLevel } from '../utils/headingLevel.js';
3
+ export type SectionSpacing =
4
+ /** No band padding at all, and no gap under the header either. */
5
+ 'none'
6
+ /**
7
+ * THE DEFAULT: a console band, no vertical padding and one gap between the
8
+ * header and what it introduces. A screen is a stack of these, and a
9
+ * marketing band between each pair of panels puts one panel per viewport.
10
+ */
11
+ | 'compact'
12
+ /** A marketing band. State one: a page of them is a deliberate page. */
13
+ | 'sm' | 'md' | 'lg';
14
+ export type SectionElement = 'section' | 'div' | 'header' | 'footer' | 'article';
15
+ export interface SectionProps extends Omit<HTMLAttributes<HTMLElement>, 'title'> {
16
+ as?: SectionElement | undefined;
17
+ /** Vertical rhythm. Defaults to `compact`, the console band. */
18
+ spacing?: SectionSpacing | undefined;
19
+ /**
20
+ * The section's heading. With one, the element is named by it and everything
21
+ * inside is a heading level deeper.
22
+ */
23
+ title?: ReactNode;
24
+ /** Overrides the level the heading is rendered at. */
25
+ headingLevel?: HeadingLevel | undefined;
26
+ /** A sentence beside the title saying what the section is for. */
27
+ description?: ReactNode;
28
+ /** The section's own controls, at the end of the heading row. */
29
+ actions?: ReactNode;
30
+ }
31
+ /**
32
+ * A band with its own rhythm, and optionally its own heading.
33
+ *
34
+ * WHY THE HEADER BELONGS HERE. A screen is a stack of named sections, and each
35
+ * one used to be hand-built out of a row, a type utility and a spacer. Built
36
+ * by hand, the heading level was whatever the author typed, so a document
37
+ * outline had levels missing; here the level comes from where the section
38
+ * actually sits, and its contents are one level deeper without anybody
39
+ * counting.
40
+ */
41
+ export declare const Section: ({ as: As, spacing, title, headingLevel, description, actions, className, children, ...rest }: SectionProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './Section.css';
2
+ export { Section } from './Section.js';
3
+ export type { SectionProps, SectionSpacing, SectionElement } from './Section.js';
@@ -0,0 +1,3 @@
1
+ export { Section } from '../chunk-A2UXBCLO.js';
2
+ import '../chunk-PQADV6P6.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,127 @@
1
+ /*
2
+ * Section, the vertical rhythm band. One spacing scale keeps the cadence
3
+ * between page sections consistent, and collapses on small viewports.
4
+ */
5
+
6
+ .crewlet-section {
7
+ position: relative;
8
+ }
9
+
10
+ .crewlet-section--none {
11
+ padding-block: 0;
12
+ }
13
+
14
+ /*
15
+ * The console preset: no band padding, one gap between the heading and what it
16
+ * introduces. A screen is a stack of these, and a marketing band between each
17
+ * pair would put one panel per viewport.
18
+ */
19
+ .crewlet-section--compact {
20
+ display: flex;
21
+ flex-direction: column;
22
+ gap: var(--spacing-3);
23
+ padding-block: 0;
24
+ }
25
+
26
+ .crewlet-section--sm {
27
+ padding-block: var(--spacing-9);
28
+ }
29
+
30
+ .crewlet-section--md {
31
+ padding-block: var(--spacing-11);
32
+ }
33
+
34
+ /*
35
+ * The largest band is a multiple of the largest spacing step rather than a
36
+ * number of its own: the scale stops at 80px, this band has always been 120,
37
+ * and written as a literal it would be the one measure on the page a density
38
+ * setting could not reach.
39
+ */
40
+ .crewlet-section--lg {
41
+ padding-block: calc(var(--spacing-11) * 1.5);
42
+ }
43
+
44
+ .crewlet-section__header {
45
+ display: flex;
46
+ align-items: baseline;
47
+ gap: var(--spacing-3);
48
+ min-width: 0;
49
+ }
50
+
51
+ /*
52
+ * The page's leading, not the baseline's heading leading. A band title sits on
53
+ * one line beside its own sentence, and the tight step every heading element
54
+ * inherits puts the two on different rhythms within one row.
55
+ */
56
+ .crewlet-section__title {
57
+ margin: 0;
58
+ font-family: var(--font-family-display);
59
+ font-size: var(--font-size-lg);
60
+ font-weight: var(--font-weight-semibold);
61
+ line-height: var(--font-line-height-normal);
62
+ letter-spacing: var(--font-letter-spacing-tight);
63
+ color: var(--color-text-primary);
64
+ min-width: 0;
65
+ }
66
+
67
+ /*
68
+ * Beside the title, not under it, and it gives up its tail first: the heading
69
+ * is what a reader scans for and the sentence is what they read once they have
70
+ * found it.
71
+ */
72
+ .crewlet-section__description {
73
+ margin: 0;
74
+ min-width: 0;
75
+ overflow: hidden;
76
+ text-overflow: ellipsis;
77
+ white-space: nowrap;
78
+ /* THE CAPTION REGISTER. It is one line beside a heading, truncated before
79
+ the heading gives up a character, so it is glanced at rather than read:
80
+ the compact step it used to take made it the same weight of text as a
81
+ table cell and it competed with the title it qualifies. */
82
+ font-size: var(--font-size-xs);
83
+ color: var(--color-text-tertiary);
84
+ max-width: var(--size-measure);
85
+ }
86
+
87
+ .crewlet-section__actions {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: var(--spacing-2);
91
+ flex: none;
92
+ margin-inline-start: auto;
93
+ }
94
+
95
+ /* A titled band lays its header and its content out as a column. */
96
+ .crewlet-section--titled {
97
+ display: flex;
98
+ flex-direction: column;
99
+ gap: var(--spacing-3);
100
+ }
101
+
102
+ @media (max-width: 768px) {
103
+ .crewlet-section--sm {
104
+ padding-block: var(--spacing-7);
105
+ }
106
+
107
+ .crewlet-section--md {
108
+ padding-block: var(--spacing-9);
109
+ }
110
+
111
+ .crewlet-section--lg {
112
+ padding-block: var(--spacing-10);
113
+ }
114
+
115
+ /*
116
+ * Narrow: the sentence moves under the heading rather than competing with it
117
+ * for a line that has room for neither.
118
+ */
119
+ .crewlet-section__header {
120
+ flex-wrap: wrap;
121
+ }
122
+
123
+ .crewlet-section__description {
124
+ white-space: normal;
125
+ flex-basis: 100%;
126
+ }
127
+ }
@@ -0,0 +1,68 @@
1
+ import type { ReactNode } from 'react';
2
+ export type SegmentedSize = 'sm' | 'md';
3
+ export interface SegmentedOption<T extends string = string> {
4
+ value: T;
5
+ /** What is drawn. An empty label makes the option icon-only. */
6
+ label?: ReactNode;
7
+ /**
8
+ * What an icon-only option is CALLED. A `title` is a tooltip and a screen
9
+ * reader is not shown one, so an option drawn as a glyph alone takes its
10
+ * name from here, or from `title` where the two say the same thing.
11
+ */
12
+ srLabel?: string;
13
+ icon?: ReactNode;
14
+ title?: string;
15
+ count?: number | null;
16
+ disabled?: boolean;
17
+ /**
18
+ * A second line under the label. With one, the options are drawn as card
19
+ * rows rather than chips, for a choice a reader has to read before making.
20
+ */
21
+ description?: ReactNode;
22
+ }
23
+ interface SegmentedShared<T extends string> {
24
+ /** Names the group. A row of choices with no name is announced as a row of buttons. */
25
+ label: string;
26
+ options: readonly SegmentedOption<T>[];
27
+ value: T;
28
+ onValueChange: (value: T) => void;
29
+ size?: SegmentedSize | undefined;
30
+ className?: string | undefined;
31
+ }
32
+ /**
33
+ * What the row IS, which decides both its roles and when it reports a change.
34
+ *
35
+ * `radio` is a SETTING or a filter (the theme, the density, a lens with no
36
+ * panel): announced as a radio group, and the arrows select as they move,
37
+ * because a choice that is not in the URL costs nothing to change on every
38
+ * keypress.
39
+ *
40
+ * `tabs` is a row of SECTIONS, and in this product a section pushes a history
41
+ * entry: the arrows move focus and Enter or Space selects, so walking the row
42
+ * with the keyboard does not leave an entry per keypress for Back to walk
43
+ * back through. `panelId` names the [TabPanel] it controls.
44
+ */
45
+ type SegmentedSemantics = {
46
+ semantics: 'tabs';
47
+ panelId: string;
48
+ } | {
49
+ semantics: 'radio';
50
+ panelId?: undefined;
51
+ };
52
+ export type SegmentedControlProps<T extends string = string> = SegmentedShared<T> & SegmentedSemantics;
53
+ /**
54
+ * A row of mutually exclusive choices.
55
+ *
56
+ * WHY IT IS NOT JUST TABS. The two rows look alike and are not alike: one is
57
+ * a setting and one is a place. The engine drew its theme and density
58
+ * controls as tabs, so a screen reader announced them as tabs, went looking
59
+ * for the panels each one opened, and found none; and it drew its lens rows
60
+ * as radios that selected on every arrow press, so walking a row with the
61
+ * keyboard pushed a history entry per keystroke.
62
+ *
63
+ * It draws with the Tabs pill classes, because a row of choices should not
64
+ * look like two different controls depending on which component a screen
65
+ * reached for.
66
+ */
67
+ export declare function SegmentedControl<T extends string = string>({ label, options, value, onValueChange, size, className, semantics, panelId, }: SegmentedControlProps<T>): import("react/jsx-runtime").JSX.Element;
68
+ export {};
@@ -0,0 +1,4 @@
1
+ import '../Tabs/Tabs.css';
2
+ import './SegmentedControl.css';
3
+ export { SegmentedControl } from './SegmentedControl.js';
4
+ export type { SegmentedControlProps, SegmentedOption, SegmentedSize } from './SegmentedControl.js';
@@ -0,0 +1,5 @@
1
+ export { SegmentedControl } from '../chunk-ARMRX2YV.js';
2
+ import '../chunk-YMWONFSI.js';
3
+ import '../chunk-BHHIIK3M.js';
4
+ import '../chunk-BZFWDIV6.js';
5
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,68 @@
1
+ /*
2
+ * SegmentedControl: the pill row, drawn with the Tabs classes.
3
+ *
4
+ * Only what is its own lives here. The chrome, the sizes and the active chip
5
+ * come from Tabs.css, so a lens row and a setting row look the same whichever
6
+ * component a screen reached for.
7
+ */
8
+
9
+ .crewlet-segmented__text {
10
+ display: inline-flex;
11
+ flex-direction: column;
12
+ align-items: flex-start;
13
+ gap: 1px;
14
+ min-width: 0;
15
+ }
16
+
17
+ /*
18
+ * A choice a reader has to READ before making it is a card row, not a chip:
19
+ * a template with a sentence under its name does not fit in a pill, and
20
+ * squeezing it there is how the sentence ends up truncated to nothing.
21
+ */
22
+ /*
23
+ * TWO CLASSES, so this wins whatever order the stylesheets are bundled in.
24
+ * `.crewlet-tabs` sets the row's own display and alignment, and a rule of
25
+ * equal weight in a file that happens to come later takes them back.
26
+ */
27
+ .crewlet-tabs.crewlet-segmented--cards {
28
+ display: grid;
29
+ gap: var(--spacing-2);
30
+ width: 100%;
31
+ align-items: stretch;
32
+ }
33
+
34
+ /*
35
+ * The same frame a framed Checkbox draws, because it is the same row: a
36
+ * boundary on the body it sits in, and no surface of its own. A choice with a
37
+ * surface inside a panel of the same surface reads as a second panel.
38
+ */
39
+ .crewlet-segmented--cards .crewlet-segmented__option {
40
+ justify-content: flex-start;
41
+ text-align: left;
42
+ /* A sentence under a name is a sentence: it wraps rather than being cut. */
43
+ white-space: normal;
44
+ padding: var(--spacing-3);
45
+ border: 1px solid var(--color-border-default);
46
+ border-radius: var(--radius-lg);
47
+ font-size: var(--font-size-compact);
48
+ }
49
+
50
+ /* The one card that is chosen takes the accent, which is what "here, this
51
+ one" means everywhere else in the product. */
52
+ .crewlet-segmented--cards .crewlet-segmented__option.is-active {
53
+ border-color: var(--color-brand-accent);
54
+ background: var(--color-brand-accent-soft);
55
+ color: var(--color-brand-accent-ink);
56
+ }
57
+
58
+ .crewlet-segmented__description {
59
+ font-size: var(--font-size-xs);
60
+ font-weight: var(--font-weight-regular);
61
+ line-height: var(--font-line-height-normal);
62
+ color: var(--color-text-tertiary);
63
+ white-space: normal;
64
+ }
65
+
66
+ .crewlet-segmented--cards .crewlet-segmented__option.is-active .crewlet-segmented__description {
67
+ color: var(--color-brand-accent-ink);
68
+ }