@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,97 @@
1
+ import { type ReactNode } from 'react';
2
+ export type TabsVariant = 'pill' | 'underline';
3
+ export type TabsSize = 'sm' | 'md';
4
+ export interface TabsItem {
5
+ /** Stable identity: the value reported, and half of the tab's id. */
6
+ value: string;
7
+ /** Visible label text or node. */
8
+ label: ReactNode;
9
+ /** A glyph drawn before the label. A component, not a name. */
10
+ icon?: ReactNode;
11
+ /** How many things are behind this tab. Drawn as a Count beside the label. */
12
+ count?: number | null;
13
+ disabled?: boolean;
14
+ /** Any extra props the consumer's renderItem needs to read. */
15
+ [key: string]: unknown;
16
+ }
17
+ export interface TabsRenderItemProps {
18
+ item: TabsItem;
19
+ /**
20
+ * Base and state-modifier class for the tab. Apply it to the element you
21
+ * render so the variant chrome stays consistent. In router mode the
22
+ * consumer appends its own active modifier, because the URL is the source
23
+ * of truth and the slider is measured from whichever child carries it.
24
+ */
25
+ className: string;
26
+ /** True when `value === item.value`. */
27
+ isActive: boolean;
28
+ /** Calls onValueChange?.(item.value) when invoked. */
29
+ onSelect: () => void;
30
+ /** Pre-rendered icon, label and count nodes for the tab body. */
31
+ children: ReactNode;
32
+ }
33
+ export interface TabsProps {
34
+ items: TabsItem[];
35
+ variant?: TabsVariant;
36
+ size?: TabsSize;
37
+ /** Names the row. A tab row with no name is announced as "tab list" alone. */
38
+ ariaLabel?: string;
39
+ className?: string;
40
+ /** Currently active item value. */
41
+ value?: string;
42
+ /** Fires when a tab is chosen. */
43
+ onValueChange?: (value: string) => void;
44
+ /**
45
+ * The id of the [TabPanel] this row controls. With it every tab carries a
46
+ * stable id and `aria-controls`, which is what lets a screen reader move
47
+ * from a tab to the section it opens.
48
+ */
49
+ panelId?: string;
50
+ /**
51
+ * Render each item yourself, for a row of ROUTER LINKS. The root becomes a
52
+ * `nav` and nothing carries a tab role: a link that navigates is not a tab,
53
+ * and a screen reader told otherwise looks for a panel that never arrives.
54
+ */
55
+ renderItem?: (props: TabsRenderItemProps) => ReactNode;
56
+ }
57
+ /**
58
+ * The id of the tab that labels a tab panel, so a panel and the row that
59
+ * controls it agree on it without passing ids between them.
60
+ */
61
+ export declare function tabId(panelId: string, value: string): string;
62
+ /**
63
+ * The in-page sections a screen owns, as the ARIA tabs pattern with MANUAL
64
+ * activation.
65
+ *
66
+ * WHAT CHANGED. Every tab was a tab stop and no arrow key did anything, so a
67
+ * keyboard user walked an eight-tab row with eight presses of Tab and a
68
+ * screen reader was told a list of eight independent buttons. It is one stop
69
+ * now: the arrows, Home and End move focus along the row and Enter or Space
70
+ * selects, which a real button already turns into its own click.
71
+ *
72
+ * SELECTION DOES NOT FOLLOW FOCUS. A tab is a section, and in this product a
73
+ * section pushes a history entry: a row that selected on every arrow press
74
+ * left one entry per keystroke for Back to walk through.
75
+ *
76
+ * AND NO `aria-current`. A tab says which one is chosen with
77
+ * `aria-selected`; `aria-current="page"` on top of it told a screen reader
78
+ * the tab was the page the reader was on, which is what a navigation link
79
+ * says. In router mode that IS what the items are, so the root becomes a
80
+ * `nav`, the tab roles go, and the consumer's own link carries the state.
81
+ */
82
+ export declare function Tabs({ items, variant, size, ariaLabel, className, value, onValueChange, panelId, renderItem, }: TabsProps): import("react/jsx-runtime").JSX.Element;
83
+ export interface TabPanelProps {
84
+ /** The same id the row was given as `panelId`. */
85
+ id: string;
86
+ /** The selected tab's value, which is what labels the panel. */
87
+ value: string;
88
+ children?: ReactNode;
89
+ className?: string;
90
+ }
91
+ /**
92
+ * The region a tab row controls, labelled by whichever tab is selected.
93
+ *
94
+ * It keeps the layout it sits in, so wrapping a screen's sections in one
95
+ * changes nothing a reader can see and everything a screen reader hears.
96
+ */
97
+ export declare function TabPanel({ id, value, children, className }: TabPanelProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './Tabs.css';
2
+ export { TabPanel, Tabs, tabId } from './Tabs.js';
3
+ export type { TabPanelProps, TabsItem, TabsProps, TabsRenderItemProps, TabsSize, TabsVariant, } from './Tabs.js';
@@ -0,0 +1,4 @@
1
+ export { TabPanel, Tabs, tabId } from '../chunk-YMWONFSI.js';
2
+ import '../chunk-BHHIIK3M.js';
3
+ import '../chunk-BZFWDIV6.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,36 @@
1
+ import { type KeyboardEvent } from 'react';
2
+ /**
3
+ * Which item in a row holds its ONE TAB STOP.
4
+ *
5
+ * The selected one, unless it is disabled: a browser refuses a disabled
6
+ * button focus, so a row whose chosen option is disabled (a tab for a section
7
+ * a plan does not include, a lens with nothing to draw) had its only stop on
8
+ * an element Tab skips, and the keyboard could not enter the row at all. It
9
+ * falls back to the first option that can take focus, and to none where every
10
+ * option is disabled, which is a row with nothing to reach.
11
+ */
12
+ export declare function tabStop(items: readonly {
13
+ disabled?: boolean | undefined;
14
+ }[], selected: number): number;
15
+ /**
16
+ * Roving focus over a row of buttons: ONE TAB STOP for the row, the arrows to
17
+ * move inside it.
18
+ *
19
+ * WHY ONE STOP. A row of eight lenses is one control, not eight: Tab should
20
+ * pass it, not walk it. That is the ARIA pattern for a tablist, a radio group
21
+ * and a toolbar alike, and it is what makes the arrows mean anything.
22
+ *
23
+ * `select` is called on a move only where the row SELECTS AS FOCUS MOVES (a
24
+ * radio group, whose choice is a setting). A tab row leaves selection to
25
+ * Enter and Space, which a real button already turns into its own click: a
26
+ * tab is a section that pushes a history entry, and a row that selected on
27
+ * every arrow press left one entry per keystroke for Back to walk through.
28
+ *
29
+ * A DISABLED BUTTON IS STEPPED OVER rather than focused: a browser refuses it
30
+ * focus, so a move that lands on one drops focus on the page body and the
31
+ * next arrow press does nothing at all.
32
+ */
33
+ export declare function useRoving(count: number, select: ((index: number) => void) | null): {
34
+ buttons: import("react").RefObject<(HTMLButtonElement | null)[]>;
35
+ onKeyDown: (event: KeyboardEvent<HTMLElement>, vertical: boolean) => void;
36
+ };
@@ -0,0 +1,275 @@
1
+ /*
2
+ * The pill register: Tabs and SegmentedControl.
3
+ *
4
+ * One item layout under two chromes. `underline` is a flat strip on a
5
+ * baseline with a sliding accent bar, for the sections of a screen;
6
+ * `pill` is a segmented chip row inside a tinted container, for a lens,
7
+ * a setting or a compact switch. SegmentedControl draws with the same
8
+ * classes, because a row of choices should not look like two different
9
+ * controls depending on which component a screen reached for.
10
+ *
11
+ * Every step comes from a token, the active chip included: the shadow it used
12
+ * to lift with was a black literal, invisible on a dark panel and a smudge on
13
+ * a light one.
14
+ */
15
+
16
+ .crewlet-tabs {
17
+ display: inline-flex;
18
+ align-items: center;
19
+ font-family: inherit;
20
+ }
21
+
22
+ /* ─── Underline (sliding accent bar) ──────────────────────────── */
23
+ /*
24
+ * THE ROW SCROLLS RATHER THAN OVERFLOWING THE PAGE. A section can own more
25
+ * tabs than a narrow window has room for, and a row that does not scroll
26
+ * pushes the whole screen sideways instead. The scrollbar itself is hidden:
27
+ * it would sit on the baseline the tabs and their bar are drawn on, and the
28
+ * row is reachable by the arrow keys either way.
29
+ */
30
+ .crewlet-tabs--underline {
31
+ display: flex;
32
+ gap: var(--spacing-2);
33
+ border-bottom: 1px solid var(--color-border-default);
34
+ position: relative;
35
+ width: 100%;
36
+ overflow-x: auto;
37
+ scrollbar-width: none;
38
+ }
39
+
40
+ .crewlet-tabs--underline::-webkit-scrollbar {
41
+ display: none;
42
+ }
43
+
44
+ .crewlet-tabs--underline::after {
45
+ /*
46
+ * The sliding bar, positioned against the row from two custom properties
47
+ * the component writes after measuring the active tab. A width of 0 keeps
48
+ * it invisible until the first measurement lands, so nothing needs an
49
+ * opacity flag.
50
+ */
51
+ content: '';
52
+ position: absolute;
53
+ bottom: -1px;
54
+ /*
55
+ * Under the LABEL, not under the tab's box: the measurement is the button,
56
+ * which carries the small side pad an inset focus ring needs, and a bar
57
+ * that ran the width of that pad read as a wider word than the one above
58
+ * it.
59
+ */
60
+ left: calc(var(--crewlet-tabs-slider-left, 0px) + var(--spacing-1));
61
+ width: max(0px, calc(var(--crewlet-tabs-slider-width, 0px) - var(--spacing-1) * 2));
62
+ height: 2px;
63
+ background: var(--color-brand-accent);
64
+ border-radius: var(--radius-pill) var(--radius-pill) 0 0;
65
+ transition:
66
+ left var(--motion-duration-base) var(--motion-easing-default),
67
+ width var(--motion-duration-base) var(--motion-easing-default);
68
+ pointer-events: none;
69
+ }
70
+
71
+ /* ─── Pill (segmented control) ────────────────────────────────── */
72
+ /*
73
+ * A WELL WITH CHIPS IN IT, not a panel with buttons in it. The container is
74
+ * the inset surface and carries no boundary of its own: the chip that is on
75
+ * is what the reader looks for, and it is found by being the one thing lifted
76
+ * off the well rather than by a border around the whole set.
77
+ *
78
+ * The inset is 2px, which is smaller than the scale's first step on purpose:
79
+ * it is the gap a chip needs to read as sitting IN the well, and a 4px one
80
+ * makes the row a control step taller than the button beside it.
81
+ */
82
+ .crewlet-tabs--pill {
83
+ --crewlet-tabs-pill-inset: 2px;
84
+
85
+ gap: var(--crewlet-tabs-pill-inset);
86
+ padding: var(--crewlet-tabs-pill-inset);
87
+ background: var(--color-surface-inset);
88
+ border-radius: var(--radius-md);
89
+ width: fit-content;
90
+ }
91
+
92
+ /* ─── Tab item (shared) ───────────────────────────────────────── */
93
+ /*
94
+ * A TARGET IS TWO DIMENSIONS. The height has been floored since this row was
95
+ * first drawn and the width was floored by nothing at all: a tab is side
96
+ * padding around whatever it holds, so a one-character mark or a bare glyph
97
+ * made a target as narrow as its own content. Measured on the engine's rail,
98
+ * the density row's chips stood 23.1px, 26px and 22.2px wide at the reader's
99
+ * default density and 20.2px, 23.1px and 19.3px at the compact one, where the
100
+ * floor a finger needs is 24px in BOTH directions.
101
+ *
102
+ * It is on the shared item rather than on the segmented option, because the
103
+ * underline chrome is the same padding around the same content and has the
104
+ * same hole. A tab whose label is wider than the floor is untouched.
105
+ */
106
+ .crewlet-tabs__tab {
107
+ display: inline-flex;
108
+ align-items: center;
109
+ justify-content: center;
110
+ gap: var(--spacing-1);
111
+ /* Never under the 24px target floor, at any density. */
112
+ min-height: var(--size-control-sm);
113
+ min-width: var(--size-target-min);
114
+ background: transparent;
115
+ border: 0;
116
+ color: var(--color-text-tertiary);
117
+ font: inherit;
118
+ font-size: var(--font-size-compact);
119
+ font-weight: var(--font-weight-medium);
120
+ text-decoration: none;
121
+ cursor: pointer;
122
+ white-space: nowrap;
123
+ transition:
124
+ background-color var(--motion-duration-fast) var(--motion-easing-default),
125
+ color var(--motion-duration-fast) var(--motion-easing-default),
126
+ box-shadow var(--motion-duration-fast) var(--motion-easing-default);
127
+ }
128
+
129
+ /*
130
+ * Underline tabs sit flush on the baseline and the slider is the indicator,
131
+ * so the label carries no chrome of its own: its only side pad is the room
132
+ * the focus ring is drawn in, and the labels stand one scale step apart.
133
+ */
134
+ .crewlet-tabs--underline .crewlet-tabs__tab {
135
+ gap: var(--spacing-2);
136
+ padding: var(--spacing-2) var(--spacing-1);
137
+ font-size: var(--font-size-compact);
138
+ position: relative;
139
+ }
140
+
141
+ .crewlet-tabs--underline.crewlet-tabs--sm .crewlet-tabs__tab {
142
+ font-size: var(--font-size-xs);
143
+ }
144
+
145
+ /*
146
+ * THE RING IS DRAWN INSIDE THE TAB. The row is a scroller, so an outset ring
147
+ * on any tab in it is clipped by the row's own box, top and bottom, and on
148
+ * the first and last tabs at the ends as well. This is what
149
+ * --size-focus-ring-inset-offset exists for.
150
+ */
151
+ .crewlet-tabs--underline .crewlet-tabs__tab:focus-visible {
152
+ outline-offset: var(--size-focus-ring-inset-offset);
153
+ }
154
+
155
+ /*
156
+ * A CHIP STANDS SHORTER THAN THE CONTROL IT SITS BESIDE, and it is the row
157
+ * that has to match: the well adds its inset above and below every chip, so a
158
+ * chip at a full control step makes the whole segmented row taller than the
159
+ * button next to it. Six pixels off the md step and four off the sm one is
160
+ * what the engine's own segmented row has always drawn.
161
+ *
162
+ * AND THE FLOOR IS TAKEN AGAIN AFTER THE SUBTRACTION. --size-control-sm
163
+ * carries a 24px floor of its own, but subtracting from a step subtracts from
164
+ * its floor too: at compact density `calc(var(--size-control-sm) - 4px)` is
165
+ * 20px, under the target a finger can hit. max() against --size-target-min
166
+ * leaves the value exactly 24px at density 1 and reachable at every other.
167
+ *
168
+ * The corner is one hairline tighter than the well around it rather than a
169
+ * step of its own, which is what reads as a chip sitting IN the well.
170
+ *
171
+ * AND THE CONTENT IS CENTRED IN THE CHIP. It was aligned to the start, for a
172
+ * chip stretched on a grid track, which is a case the pill chrome's own
173
+ * `width: fit-content` container cannot produce: the row is sized to its
174
+ * chips, so no chip is ever wider than its content except by the target floor
175
+ * above. Under that floor start alignment is a visible defect rather than an
176
+ * invisible preference: a 12px glyph in a 24px chip sat 4px from one edge and
177
+ * 8px from the other, and a one-letter mark sat further off still. The
178
+ * stretched row that wanted a common inner edge is the segmented CARD row,
179
+ * and that mode aligns its own options to the start.
180
+ */
181
+ .crewlet-tabs--pill .crewlet-tabs__tab {
182
+ min-height: max(var(--size-target-min), calc(var(--size-control-md) - 6px));
183
+ padding: 0 var(--spacing-3);
184
+ border-radius: var(--radius-chip);
185
+ font-size: var(--font-size-xs);
186
+ }
187
+
188
+ /*
189
+ * THE SMALL CHIP IS THE QUIET ONE. It is the register the rail's foot wears,
190
+ * where a theme row and a density row sit beside a status pill and are read
191
+ * past rather than read, so its side pad is the scale's first step rather
192
+ * than its second and its glyph is the step under the label register's.
193
+ *
194
+ * The height does not follow: at the reader's default density this chip is
195
+ * already exactly --size-target-min, so a shorter one would be a target a
196
+ * finger misses. The whole reduction comes out of the width, where the pad is
197
+ * spent, and the floor above catches what is left.
198
+ */
199
+ .crewlet-tabs--pill.crewlet-tabs--sm .crewlet-tabs__tab {
200
+ min-height: max(var(--size-target-min), calc(var(--size-control-sm) - 4px));
201
+ padding: 0 var(--spacing-1);
202
+ font-size: var(--font-size-2xs);
203
+ }
204
+
205
+ .crewlet-tabs--pill.crewlet-tabs--sm .crewlet-tabs__icon {
206
+ font-size: var(--font-size-xs);
207
+ }
208
+
209
+ /*
210
+ * A HOVER IS A BRIGHTENING, NOT A FILL, in both chromes. The fill is what the
211
+ * chip that is on wears, and a hovered neighbour wearing a lighter version of
212
+ * it is a second answer that looks half-chosen; on the underline row the
213
+ * whole indicator is the bar, so a tinted box under a hovered label is a
214
+ * second indicator saying something else.
215
+ */
216
+ .crewlet-tabs__tab:hover:not(.is-disabled):not(.is-active) {
217
+ color: var(--color-text-primary);
218
+ }
219
+
220
+ .crewlet-tabs__tab.is-active {
221
+ color: var(--color-text-primary);
222
+ }
223
+
224
+ .crewlet-tabs--pill .crewlet-tabs__tab.is-active {
225
+ background: var(--color-surface-subtle);
226
+ box-shadow: var(--shadow-xs);
227
+ }
228
+
229
+ /*
230
+ * THE RING IS AN OUTLINE. Forced-colors mode drops every box-shadow and keeps
231
+ * outlines, so a ring drawn as a shadow disappears for exactly the readers who
232
+ * need one most.
233
+ */
234
+ .crewlet-tabs__tab:focus-visible {
235
+ outline: 2px solid var(--color-focus);
236
+ outline-offset: 2px;
237
+ }
238
+
239
+ .crewlet-tabs__tab.is-disabled,
240
+ .crewlet-tabs__tab:disabled {
241
+ opacity: 0.55;
242
+ cursor: not-allowed;
243
+ }
244
+
245
+ /* A glyph beside a label is the label's own size, so the two sit on one line
246
+ rather than the mark outweighing the word. */
247
+ .crewlet-tabs__icon {
248
+ display: inline-flex;
249
+ font-size: var(--font-size-sm);
250
+ line-height: 1;
251
+ flex-shrink: 0;
252
+ }
253
+
254
+ .crewlet-tabs__label {
255
+ display: inline-flex;
256
+ align-items: center;
257
+ min-width: 0;
258
+ }
259
+
260
+ /* The panel a row controls keeps the layout it sits in. */
261
+ .crewlet-tab-panel {
262
+ display: contents;
263
+ }
264
+
265
+ /*
266
+ * The slider ARRIVES rather than travels, and a chip changes without a fade.
267
+ * The indicator still moves; what stops is the animation between the two
268
+ * places it can be.
269
+ */
270
+ @media (prefers-reduced-motion: reduce) {
271
+ .crewlet-tabs--underline::after,
272
+ .crewlet-tabs__tab {
273
+ transition: none;
274
+ }
275
+ }
@@ -0,0 +1,107 @@
1
+ import type { HTMLAttributes, MouseEvent, ReactNode } from 'react';
2
+ import type { PhaseTone, Tone } from '../utils/tone.js';
3
+ /**
4
+ * Which vocabulary a tag speaks: a state, or a phase. Both, because the same
5
+ * pill draws "failed" on the Model screen and "execute" on the turn beside it,
6
+ * and a second component for the second vocabulary would be one recipe spelled
7
+ * twice.
8
+ */
9
+ export type TagVariant = Tone | PhaseTone;
10
+ /**
11
+ * How much room the pill takes. The engine draws ONE badge and spends its
12
+ * variation on tone, so these are three heights of that badge rather than
13
+ * three different marks: `sm` is the engine's own geometry and the default,
14
+ * `xs` a denser mark for a packed row, `md` a small control's height for a
15
+ * toolbar.
16
+ */
17
+ export type TagSize = 'xs' | 'sm' | 'md';
18
+ /**
19
+ * The sizes a tag that ACTS may take.
20
+ *
21
+ * `xs` is an 18px pill, and a pointer target under 24px fails WCAG 2.2, so the
22
+ * interactive form starts at `sm`. It is refused by the type rather than
23
+ * documented, because a filter toggle that is 6px too short is a defect
24
+ * nothing else in the build would ever report.
25
+ */
26
+ export type InteractiveTagSize = Exclude<TagSize, 'xs'>;
27
+ export type TagAppearance = 'soft' | 'outline';
28
+ interface TagLook {
29
+ /** The state or the phase this tag names. Neutral by default. */
30
+ variant?: TagVariant | undefined;
31
+ /** A tinted fill, or a boundary over the surface beneath. */
32
+ appearance?: TagAppearance | undefined;
33
+ /** Drawn before the label. A glyph component, not a name. */
34
+ leadingIcon?: ReactNode;
35
+ /**
36
+ * Draws the variant's mark before the label. For a list where several tags
37
+ * of different states sit in one column and the mark is what a reader scans.
38
+ */
39
+ dot?: boolean | undefined;
40
+ /** A number after the label, in the tag's own ink. */
41
+ count?: number | string | undefined;
42
+ /** A machine value: an id, a CIDR range, a revision. */
43
+ monospace?: boolean | undefined;
44
+ /**
45
+ * Fade the tag in on mount.
46
+ *
47
+ * OFF BY DEFAULT, which is the change from 0.2.0. Tags mount in their
48
+ * hundreds on a data push, and a list that animates every arrival is a list
49
+ * nobody can read while it is arriving. Guarded by reduced motion either way.
50
+ */
51
+ animateIn?: boolean | undefined;
52
+ }
53
+ /** A tag that only labels: it takes no press and nothing removes it. */
54
+ export interface StaticTagProps extends TagLook, Omit<HTMLAttributes<HTMLSpanElement>, 'onClick'> {
55
+ size?: TagSize | undefined;
56
+ onClick?: undefined;
57
+ onRemove?: undefined;
58
+ pressed?: undefined;
59
+ }
60
+ /**
61
+ * A tag that acts: a filter that toggles, a chip somebody can take off, or
62
+ * both.
63
+ *
64
+ * WITH BOTH, IT IS TWO CONTROLS. The press and the remove are siblings inside
65
+ * the pill rather than one nested in the other: a `<button>` inside a
66
+ * `<button>` is invalid markup, and what a browser and a screen reader make of
67
+ * it is one control the inner half is unreachable from.
68
+ */
69
+ export interface InteractiveTagProps extends TagLook, Omit<HTMLAttributes<HTMLElement>, 'onClick'> {
70
+ size?: InteractiveTagSize | undefined;
71
+ /** Makes the tag a real button, announced with its pressed state. */
72
+ onClick?: ((event: MouseEvent<HTMLButtonElement>) => void) | undefined;
73
+ /** For a tag that toggles a filter, whether that filter is on. */
74
+ pressed?: boolean | undefined;
75
+ /** Renders a remove control that fires this. */
76
+ onRemove?: (() => void) | undefined;
77
+ /** Names the remove control. */
78
+ removeAriaLabel?: string | undefined;
79
+ }
80
+ export type TagProps = StaticTagProps | InteractiveTagProps;
81
+ /**
82
+ * A small pill that names a state, a phase or a value.
83
+ *
84
+ * COLOUR IS NEVER THE ONLY CARRIER. Every tag renders its label, in every
85
+ * variant, so a reader who cannot separate the warning hue from the danger one
86
+ * still reads two different words. `dot` adds the shape half for a column
87
+ * where the mark is what gets scanned; the word stays either way.
88
+ *
89
+ * THE FILL AND THE INK ARE DIFFERENT STEPS. A tag is the tone's `soft` tint
90
+ * under the tone's `ink`, never the solid fill with a label on it: the fill
91
+ * step is measured as a MARK, at 3:1, and putting text on it would put that
92
+ * text under the 4.5:1 it has to clear. 0.2.0 spelled five dark-theme literals
93
+ * here instead, which measured between 1.14:1 and 1.58:1 on a light page.
94
+ *
95
+ * ITS LINE BOX IS FIXED. The height comes from the size step rather than from
96
+ * the content, so a cell that holds a tag on one row and nothing on the next
97
+ * is the same height on both and a table does not ripple as states arrive.
98
+ *
99
+ * A TAG THAT ACTS IS FOUR PIXELS TALLER THAN ONE THAT LABELS, and that is the
100
+ * one place this pill departs from the engine's badge. The engine draws its
101
+ * actionable badge at the inert one's 20px, which is a pointer target under
102
+ * the 24px WCAG 2.2 accepts; everything else about the two, the tint, the ink,
103
+ * the radius, the type and the padding, is identical, so a row still reads as
104
+ * one set.
105
+ */
106
+ export declare function Tag(props: TagProps): import("react/jsx-runtime").JSX.Element;
107
+ export {};
@@ -0,0 +1,3 @@
1
+ import './Tag.css';
2
+ export { Tag } from './Tag.js';
3
+ export type { InteractiveTagProps, InteractiveTagSize, StaticTagProps, TagAppearance, TagProps, TagSize, TagVariant, } from './Tag.js';
@@ -0,0 +1,3 @@
1
+ export { Tag } from '../chunk-S2XHHEW4.js';
2
+ import '../chunk-PZSWF74H.js';
3
+ import '../chunk-ODEQTPFM.js';