@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,406 @@
1
+ /*
2
+ * The tag: a small pill naming a state, a phase or a value.
3
+ *
4
+ * THREE VARIABLES CARRY EVERY VARIANT. A tag is its tone's `soft` tint under
5
+ * its tone's `ink`, with the `line` step as the boundary it grows when it can
6
+ * be pressed, so the whole palette is three declarations per variant and the
7
+ * geometry is written once. 0.2.0 spelled five dark-theme literals instead
8
+ * (#93c5fd, #86efac, #fde68a, #fca5a5 and the accent as text), which measured
9
+ * between 1.14:1 and 1.58:1 on a light page.
10
+ *
11
+ * A PRESSED TAG DOES NOT REPAINT ITS GROUND. Every deeper fill measured under
12
+ * 4.5:1 for at least one tone in the light palette (warning reached 4.42:1
13
+ * over the elevated surface), and the engine's own pressed badge drew the
14
+ * label in its ink on a background of the same ink, at 1:1. The press is
15
+ * carried by the boundary instead: transparent at rest, the line step on
16
+ * hover, the ink step with an inset rule when it is on. The measured
17
+ * ink-on-soft composite never moves.
18
+ */
19
+
20
+ .crewlet-tag {
21
+ /*
22
+ * THE ENGINE'S BADGE. Its line box is 11px at the document's 1.5 leading
23
+ * plus a pixel of padding and a pixel of border on each side, which lands on
24
+ * 20.5px; the step below is the whole pixel that renders, and it scales with
25
+ * density the way every size token does.
26
+ *
27
+ * The height is a STEP and the floor is separate, because the two answer
28
+ * different questions. A tag that only labels takes the engine's geometry
29
+ * exactly. A tag that ACTS is a pointer target, and 20px fails WCAG 2.2, so
30
+ * it takes the 24px floor as well: the engine draws its actionable badge at
31
+ * the inert one's height, which is the one place its look and the target
32
+ * rule disagree. Nothing else about the pill changes, so a row of tags still
33
+ * reads as one set.
34
+ */
35
+ --crewlet-tag-height: calc(20px * var(--density, 1));
36
+ --crewlet-tag-floor: 0px;
37
+ --crewlet-tag-fill: var(--color-surface-inset);
38
+ --crewlet-tag-ink: var(--color-text-secondary);
39
+ --crewlet-tag-line: var(--color-border-hover);
40
+
41
+ display: inline-flex;
42
+ align-items: center;
43
+ gap: var(--spacing-1);
44
+ height: max(var(--crewlet-tag-height), var(--crewlet-tag-floor));
45
+ padding: 0 var(--spacing-2);
46
+ border: 1px solid transparent;
47
+ border-radius: var(--radius-xs);
48
+ background: var(--crewlet-tag-fill);
49
+ color: var(--crewlet-tag-ink);
50
+ font-family: var(--font-family-sans);
51
+ font-size: var(--font-size-2xs);
52
+ font-weight: var(--font-weight-medium);
53
+ /* The engine tracks the badge a hundredth of an em open, which is the
54
+ normal step at this size: a hundredth of 11px is a tenth of a pixel. */
55
+ letter-spacing: var(--font-letter-spacing-normal);
56
+ line-height: 1;
57
+ /* A tag is an atomic token: its label never breaks across lines inside the
58
+ pill. A constrained layout truncates it with an ellipsis instead. */
59
+ white-space: nowrap;
60
+ max-width: 100%;
61
+ vertical-align: middle;
62
+ box-sizing: border-box;
63
+ }
64
+
65
+ .crewlet-tag__label {
66
+ overflow: hidden;
67
+ text-overflow: ellipsis;
68
+ }
69
+
70
+ .crewlet-tag__icon {
71
+ display: inline-flex;
72
+ align-items: center;
73
+ flex: none;
74
+ }
75
+
76
+ /*
77
+ * INSIDE A PILL THE DOT IS THE PILL'S OWN INK, not the tone's fill step.
78
+ *
79
+ * StatusDot paints the fill step, which is measured as a mark against the
80
+ * OPAQUE surfaces a page is made of. Inside a tag it lands on the tone's soft
81
+ * tint instead, and that composite is a different number: the accent fell to
82
+ * 2.65:1 and the danger red to 2.96:1 over their own tints in the dark
83
+ * palette, both under the 3:1 a mark has to clear. The ink step is the pair
84
+ * that IS measured on that tint, at 4.5:1, and it is also the colour of the
85
+ * word beside it, so the shape reads as part of the label rather than as a
86
+ * second object sitting on it.
87
+ *
88
+ * Two classes deep, so it beats StatusDot's own tone rule whichever order the
89
+ * bundle writes the two files in.
90
+ */
91
+ .crewlet-tag .crewlet-tag__dot {
92
+ flex: none;
93
+ background: currentColor;
94
+ }
95
+
96
+ /* Tabular figures, so a count that ticks up does not move the label beside
97
+ it, and the tag's own ink, because the number is part of what it says. */
98
+ .crewlet-tag__count {
99
+ font-variant-numeric: tabular-nums;
100
+ font-weight: var(--font-weight-semibold);
101
+ flex: none;
102
+ }
103
+
104
+ /* ── sizes ─────────────────────────────────────────────────────────────── */
105
+
106
+ /*
107
+ * THREE HEIGHTS OF ONE BADGE. The engine draws a single pill and spends its
108
+ * variation on tone rather than on size, so the steps here differ by how much
109
+ * room the pill takes and not by what it is: the type, the radius, the weight
110
+ * and the tracking are the engine's at every one of them.
111
+ *
112
+ * xs is an 18px pill and is NON-INTERACTIVE for that reason: it is under the
113
+ * 24px target floor, and the component refuses a press at this step. It is for
114
+ * a mark inside a dense row, where the label is still the carrier.
115
+ *
116
+ * EVERY STEP SCALES WITH DENSITY, which is not decoration: written as a flat
117
+ * 18px, this one stayed put while the badge above it came down to
118
+ * 20 x 0.82 = 16.4px, so the dense mark rendered TALLER than the badge it is
119
+ * meant to sit inside a row of. A step that does not move with the rest of the
120
+ * scale is a step that overtakes one of its neighbours at some density.
121
+ */
122
+ .crewlet-tag--xs {
123
+ --crewlet-tag-height: calc(18px * var(--density, 1));
124
+ padding: 0 var(--spacing-1);
125
+ gap: 3px;
126
+ }
127
+
128
+ /* The engine's badge, and the default. */
129
+ .crewlet-tag--sm {
130
+ --crewlet-tag-height: calc(20px * var(--density, 1));
131
+ }
132
+
133
+ /* The md step is a small control's own height, so a tag and a small button in
134
+ one toolbar sit on the same baseline. One type step up with it: 11px inside
135
+ a 28px pill reads as a label that lost its box. */
136
+ .crewlet-tag--md {
137
+ --crewlet-tag-height: var(--size-control-sm);
138
+ font-size: var(--font-size-xs);
139
+ }
140
+
141
+ /*
142
+ * A TAG THAT ACTS CLEARS 24px, at every density and every step. Last among the
143
+ * steps so it is the floor whichever one is drawn, and a floor rather than a
144
+ * height so the md step keeps its 28px.
145
+ */
146
+ .crewlet-tag--acts {
147
+ --crewlet-tag-floor: max(24px, calc(24px * var(--density, 1)));
148
+ }
149
+
150
+ /* One step down from the sans, where there is a step to take: a mono face
151
+ draws larger than the sans at the same size, and a machine value beside a
152
+ word has to read as the same line. At the two smaller steps the sans is
153
+ already at the bottom of the scale and the mono stays beside it. */
154
+ .crewlet-tag--monospace .crewlet-tag__label {
155
+ font-family: var(--font-family-mono);
156
+ font-size: var(--font-size-2xs);
157
+ }
158
+
159
+ /* ── variants ──────────────────────────────────────────────────────────── */
160
+
161
+ .crewlet-tag--info {
162
+ --crewlet-tag-fill: var(--color-feedback-info-soft);
163
+ --crewlet-tag-ink: var(--color-feedback-info-ink);
164
+ --crewlet-tag-line: var(--color-feedback-info-line);
165
+ }
166
+
167
+ .crewlet-tag--success {
168
+ --crewlet-tag-fill: var(--color-feedback-success-soft);
169
+ --crewlet-tag-ink: var(--color-feedback-success-ink);
170
+ --crewlet-tag-line: var(--color-feedback-success-line);
171
+ }
172
+
173
+ .crewlet-tag--warning {
174
+ --crewlet-tag-fill: var(--color-feedback-warning-soft);
175
+ --crewlet-tag-ink: var(--color-feedback-warning-ink);
176
+ --crewlet-tag-line: var(--color-feedback-warning-line);
177
+ }
178
+
179
+ .crewlet-tag--danger {
180
+ --crewlet-tag-fill: var(--color-feedback-danger-soft);
181
+ --crewlet-tag-ink: var(--color-feedback-danger-ink);
182
+ --crewlet-tag-line: var(--color-feedback-danger-line);
183
+ }
184
+
185
+ .crewlet-tag--brand {
186
+ --crewlet-tag-fill: var(--color-brand-accent-soft);
187
+ --crewlet-tag-ink: var(--color-brand-accent-ink);
188
+ --crewlet-tag-line: var(--color-brand-accent-soft-strong);
189
+ }
190
+
191
+ /*
192
+ * The phase family has a soft step and no line step, because nothing else in
193
+ * the system needed a phase boundary. The ink is the boundary here: it is the
194
+ * same hue at a strength a 1px rule can be seen at, and a border is not text,
195
+ * so the rule that an ink step is never a BACKGROUND is untouched.
196
+ *
197
+ * A PHASE IS SET IN THE MICRO-LABEL REGISTER, uppercase and tracked open,
198
+ * where a state is set in the badge's own. Phase is the one categorical
199
+ * identity the product spends colour on outside a chart, and it is what a
200
+ * reader follows across four screens; the second register is what separates it
201
+ * at a glance from the state badge sitting beside it on the same row.
202
+ */
203
+ .crewlet-tag--phase-onboarding,
204
+ .crewlet-tag--phase-execute,
205
+ .crewlet-tag--phase-review {
206
+ letter-spacing: var(--font-letter-spacing-wide);
207
+ text-transform: uppercase;
208
+ }
209
+
210
+ .crewlet-tag--phase-onboarding {
211
+ --crewlet-tag-fill: var(--color-phase-onboarding-soft);
212
+ --crewlet-tag-ink: var(--color-phase-onboarding-ink);
213
+ --crewlet-tag-line: var(--color-phase-onboarding-ink);
214
+ }
215
+
216
+ .crewlet-tag--phase-execute {
217
+ --crewlet-tag-fill: var(--color-phase-execute-soft);
218
+ --crewlet-tag-ink: var(--color-phase-execute-ink);
219
+ --crewlet-tag-line: var(--color-phase-execute-ink);
220
+ }
221
+
222
+ .crewlet-tag--phase-review {
223
+ --crewlet-tag-fill: var(--color-phase-review-soft);
224
+ --crewlet-tag-ink: var(--color-phase-review-ink);
225
+ --crewlet-tag-line: var(--color-phase-review-ink);
226
+ }
227
+
228
+ /* ── appearance ────────────────────────────────────────────────────────── */
229
+
230
+ /*
231
+ * The outline appearance drops the tint and keeps the boundary, for a row
232
+ * where a tinted pill would be one fill too many: a tag inside a card that is
233
+ * already tinted, or a list of values where only one of them is a state.
234
+ */
235
+ .crewlet-tag--outline {
236
+ background: transparent;
237
+ border-color: var(--crewlet-tag-line);
238
+ }
239
+
240
+ /* The neutral outline is the engine's `.badge.outline`: the hairline step as
241
+ the boundary, and the tertiary ink, which is a quieter register than the
242
+ tinted outlines keep. It is the appearance for a value that is not a state
243
+ at all, so it says less than its neighbours on purpose. */
244
+ .crewlet-tag--neutral.crewlet-tag--outline {
245
+ border-color: var(--color-border-default);
246
+ --crewlet-tag-ink: var(--color-text-tertiary);
247
+ }
248
+
249
+ /* ── the interactive form ──────────────────────────────────────────────── */
250
+
251
+ .crewlet-tag--actionable {
252
+ cursor: pointer;
253
+ /* A button inherits none of these. */
254
+ font-family: inherit;
255
+ transition:
256
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
257
+ box-shadow var(--motion-duration-fast) var(--motion-easing-default);
258
+ }
259
+
260
+ .crewlet-tag--actionable:hover {
261
+ border-color: var(--crewlet-tag-line);
262
+ }
263
+
264
+ .crewlet-tag--actionable[aria-pressed='true'] {
265
+ border-color: var(--crewlet-tag-ink);
266
+ box-shadow: inset 0 0 0 1px var(--crewlet-tag-ink);
267
+ }
268
+
269
+ .crewlet-tag--actionable:focus-visible,
270
+ .crewlet-tag__press:focus-visible,
271
+ .crewlet-tag__remove:focus-visible {
272
+ outline: 2px solid var(--color-focus);
273
+ outline-offset: 2px;
274
+ }
275
+
276
+ /* ── the pill that holds two controls ──────────────────────────────────── */
277
+
278
+ /*
279
+ * A tag that both presses and removes is TWO CONTROLS SIDE BY SIDE, because
280
+ * one of them inside the other is a button inside a button: invalid markup,
281
+ * and one control whose inner half no keyboard reaches. The pill keeps the
282
+ * fill, the ink and the boundary; the press takes the left of it and the
283
+ * remove the right, each the pill's full height, so neither is under 24px.
284
+ */
285
+ .crewlet-tag--split {
286
+ padding: 0;
287
+ transition:
288
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
289
+ box-shadow var(--motion-duration-fast) var(--motion-easing-default);
290
+ }
291
+
292
+ .crewlet-tag--split .crewlet-tag__press {
293
+ display: inline-flex;
294
+ align-items: center;
295
+ align-self: stretch;
296
+ gap: inherit;
297
+ min-width: 0;
298
+ padding: 0 var(--spacing-2);
299
+ border: 0;
300
+ border-radius: var(--radius-xs) 0 0 var(--radius-xs);
301
+ background: transparent;
302
+ /* A button inherits none of these. */
303
+ color: inherit;
304
+ font-family: inherit;
305
+ font-size: inherit;
306
+ font-weight: inherit;
307
+ letter-spacing: inherit;
308
+ line-height: inherit;
309
+ cursor: pointer;
310
+ }
311
+
312
+ /* The remove has no padding of the pill's to eat back here. */
313
+ .crewlet-tag--split .crewlet-tag__remove {
314
+ margin-right: 0;
315
+ }
316
+
317
+ .crewlet-tag--split:hover {
318
+ border-color: var(--crewlet-tag-line);
319
+ }
320
+
321
+ /*
322
+ * The same boundary the single-control form draws, put on the pill: the
323
+ * press state belongs to the whole tag, and drawing it around the press half
324
+ * alone would read as a second control beside the remove.
325
+ */
326
+ .crewlet-tag--split.is-pressed {
327
+ border-color: var(--crewlet-tag-ink);
328
+ box-shadow: inset 0 0 0 1px var(--crewlet-tag-ink);
329
+ }
330
+
331
+ /* ── the remove control ────────────────────────────────────────────────── */
332
+
333
+ /*
334
+ * The target is the tag's own height, not the glyph's. A 16px close drawn as a
335
+ * 16px button is a target under the floor; drawn as a full-height one at the
336
+ * trailing edge, the glyph stays small and the thing a finger has to hit is
337
+ * the whole end of the pill.
338
+ *
339
+ * ITS OWN HEIGHT MEANS THE PILL'S OUTER BOX, which is what `--crewlet-tag-acts`
340
+ * floors at 24px. `align-self: stretch` reaches the flex container's CONTENT
341
+ * box, and the pill's is its 1px boundary shorter on each side, so the control
342
+ * measured 22px inside a 24px tag: under the floor the class beside it exists
343
+ * to hold. The block margin pulls it back over that boundary, exactly as the
344
+ * inline one already pulls it over the pill's trailing pad. The longhands
345
+ * rather than the `margin-block` shorthand: this is the one declaration that
346
+ * holds the control at a pointer target, and the suite that measures it reads
347
+ * a box the cascade decides, where the shorthand expands to nothing.
348
+ */
349
+ .crewlet-tag__remove {
350
+ display: inline-flex;
351
+ align-items: center;
352
+ justify-content: center;
353
+ align-self: stretch;
354
+ min-width: 24px;
355
+ margin-block-start: -1px;
356
+ margin-block-end: -1px;
357
+ margin-right: calc(var(--spacing-2) * -1);
358
+ padding: 0 var(--spacing-1);
359
+ border: 0;
360
+ border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
361
+ background: transparent;
362
+ color: inherit;
363
+ cursor: pointer;
364
+ opacity: 0.7;
365
+ transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
366
+ }
367
+
368
+ .crewlet-tag__remove:hover {
369
+ opacity: 1;
370
+ }
371
+
372
+ /* ── mount ─────────────────────────────────────────────────────────────── */
373
+
374
+ /*
375
+ * OPT IN, because tags arrive in their hundreds on a data push and a list that
376
+ * animates every arrival is one nobody can read while it is arriving. It is
377
+ * still here for the case it was written for: a chip the reader themselves
378
+ * just added to a field.
379
+ */
380
+ .crewlet-tag--animate-in {
381
+ animation: crewlet-tag-in var(--motion-duration-base) var(--motion-easing-emphasized);
382
+ }
383
+
384
+ @keyframes crewlet-tag-in {
385
+ from {
386
+ opacity: 0;
387
+ transform: scale(0.94);
388
+ }
389
+
390
+ to {
391
+ opacity: 1;
392
+ transform: scale(1);
393
+ }
394
+ }
395
+
396
+ @media (prefers-reduced-motion: reduce) {
397
+ .crewlet-tag--animate-in {
398
+ animation: none;
399
+ }
400
+
401
+ .crewlet-tag--actionable,
402
+ .crewlet-tag--split,
403
+ .crewlet-tag__remove {
404
+ transition: none;
405
+ }
406
+ }
@@ -0,0 +1,41 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface TagGroupProps {
3
+ /**
4
+ * What the tags are about, read before them: "what this is about", "Labels",
5
+ * "Subjects". REQUIRED, because a bare row of handles is a row of words a
6
+ * screen reader reads with nothing to hang them on.
7
+ */
8
+ label: string;
9
+ /**
10
+ * How many to show before the rest go behind a count. Six, because six
11
+ * handles or addresses are legible at a glance on one line of a card and the
12
+ * seventh is where a row starts wrapping; the measured long case is
13
+ * thirty-six service accounts.
14
+ */
15
+ max?: number | undefined;
16
+ /** The overflow control's label. */
17
+ moreLabel?: ((hidden: number) => string) | undefined;
18
+ /** What is said once the rest are shown. */
19
+ expandedMessage?: ((total: number) => string) | undefined;
20
+ className?: string | undefined;
21
+ children?: ReactNode;
22
+ }
23
+ /**
24
+ * A labelled list of tags, with the tail behind a count.
25
+ *
26
+ * IT EXPANDS IN PLACE rather than linking away, because the reason the rest
27
+ * are folded is WIDTH, not secrecy: the list somebody is working through has
28
+ * thirty-six things in it and sending them to another screen to read it is the
29
+ * opposite of helping. It is not a disclosure either. A disclosure whose
30
+ * summary reads "all 1 agents" is ungrammatical twice and hides, behind a
31
+ * click, exactly what the sentence above it has already said.
32
+ *
33
+ * A LIST, not a row of spans: the count is what a reader is told when they
34
+ * arrive, and only a list carries one.
35
+ *
36
+ * The sentence it says on expanding goes through the shared announcer, so the
37
+ * application needs one `<Announcer>` mounted in its shell. Without one the
38
+ * expansion still works and the announcer says loudly that nothing was said,
39
+ * which is the point of it being one region rather than one per component.
40
+ */
41
+ export declare function TagGroup({ label, max, moreLabel, expandedMessage, className, children, }: TagGroupProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './TagGroup.css';
2
+ export { TagGroup } from './TagGroup.js';
3
+ export type { TagGroupProps } from './TagGroup.js';
@@ -0,0 +1,4 @@
1
+ export { TagGroup } from '../chunk-V2XMNLMS.js';
2
+ import '../chunk-RSAQOKH3.js';
3
+ import '../chunk-BZFWDIV6.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,75 @@
1
+ /*
2
+ * A labelled list of tags with the tail behind a count.
3
+ *
4
+ * The overflow control is drawn as a tag rather than as a button, because it
5
+ * stands in the row where the rest of them are: a button styled as a control
6
+ * would read as a different kind of thing from the six items beside it, which
7
+ * is exactly what it is not.
8
+ */
9
+
10
+ .crewlet-tag-group {
11
+ display: flex;
12
+ flex-wrap: wrap;
13
+ align-items: center;
14
+ gap: var(--spacing-1);
15
+ margin: 0;
16
+ padding: 0;
17
+ list-style: none;
18
+ min-width: 0;
19
+ }
20
+
21
+ /* The list takes focus when the overflow control expands it and takes itself
22
+ away with it, so the reader has to be able to see where they landed. */
23
+ .crewlet-tag-group:focus-visible {
24
+ outline: 2px solid var(--color-focus);
25
+ outline-offset: 2px;
26
+ }
27
+
28
+ .crewlet-tag-group__item {
29
+ display: inline-flex;
30
+ min-width: 0;
31
+ max-width: 100%;
32
+ }
33
+
34
+ /*
35
+ * It wears the tag's own face: the badge radius, the badge type and the badge
36
+ * weight, so the row reads as one set with a dashed member rather than as six
37
+ * tags and a control. The height is the 24px target floor rather than the
38
+ * badge's 20px step, for the same reason a tag that acts takes it.
39
+ */
40
+ .crewlet-tag-group__more {
41
+ display: inline-flex;
42
+ align-items: center;
43
+ height: max(24px, calc(24px * var(--density, 1)));
44
+ padding: 0 var(--spacing-2);
45
+ border: 1px dashed var(--color-border-hover);
46
+ border-radius: var(--radius-xs);
47
+ background: transparent;
48
+ color: var(--color-text-secondary);
49
+ font-family: var(--font-family-sans);
50
+ font-size: var(--font-size-2xs);
51
+ font-weight: var(--font-weight-medium);
52
+ line-height: 1;
53
+ white-space: nowrap;
54
+ cursor: pointer;
55
+ box-sizing: border-box;
56
+ transition:
57
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
58
+ color var(--motion-duration-fast) var(--motion-easing-default);
59
+ }
60
+
61
+ .crewlet-tag-group__more:hover {
62
+ border-color: var(--color-border-strong-hover);
63
+ color: var(--color-text-primary);
64
+ }
65
+
66
+ .crewlet-tag-group__more:focus-visible {
67
+ outline: 2px solid var(--color-focus);
68
+ outline-offset: 2px;
69
+ }
70
+
71
+ @media (prefers-reduced-motion: reduce) {
72
+ .crewlet-tag-group__more {
73
+ transition: none;
74
+ }
75
+ }
@@ -0,0 +1,112 @@
1
+ import { type TagVariant } from '../Tag/index.js';
2
+ export interface TagsInputOption {
3
+ /** What is stored when the option is taken. */
4
+ value: string;
5
+ /** What is drawn, on the chip and in the list. The value itself when left out. */
6
+ label?: string | undefined;
7
+ /** Options sharing a group are listed under its name, in first-seen order. */
8
+ group?: string | undefined;
9
+ /** A short second line of identity, such as a handle. */
10
+ description?: string | undefined;
11
+ }
12
+ export interface TagsInputProps {
13
+ /** The values held, in the order they were chosen. */
14
+ value: string[];
15
+ /** Called with the next list when one is added, removed or moved. */
16
+ onChange: (next: string[]) => void;
17
+ /**
18
+ * What may be chosen. With options the field is a combobox over a
19
+ * multiselectable listbox; without them it is the free-text chip field it
20
+ * has always been.
21
+ */
22
+ options?: readonly TagsInputOption[] | undefined;
23
+ /**
24
+ * Whether a value the options do not offer may be typed in. Default true,
25
+ * which is what the field did before it had options at all.
26
+ */
27
+ allowCustom?: boolean | undefined;
28
+ /**
29
+ * Whether the ORDER of the chips is meaning: a provider fallback chain is
30
+ * read first to last, so it gets Move controls and Alt+Arrow.
31
+ */
32
+ ordered?: boolean | undefined;
33
+ placeholder?: string | undefined;
34
+ /** Variant applied to each rendered Tag. */
35
+ tagVariant?: TagVariant | undefined;
36
+ /** Monospace flag forwarded to each Tag, for machine values such as IP ranges. */
37
+ monospace?: boolean | undefined;
38
+ /** Keys that submit the current input as a new value. Defaults to Enter and comma. */
39
+ submitKeys?: string[] | undefined;
40
+ disabled?: boolean | undefined;
41
+ className?: string | undefined;
42
+ /** id forwarded to the underlying input, for a label or a FormField. */
43
+ id?: string | undefined;
44
+ /** Reject duplicate values (case-insensitive). Defaults to true. */
45
+ dedupe?: boolean | undefined;
46
+ /** Names the list of chosen values and the listbox. */
47
+ label?: string | undefined;
48
+ /**
49
+ * Names the FIELD, where nothing else does. A field inside a [FormField]
50
+ * takes its name from that label through `id`; one standing on its own has
51
+ * none at all without this.
52
+ */
53
+ 'aria-label'?: string | undefined;
54
+ 'aria-labelledby'?: string | undefined;
55
+ 'aria-describedby'?: string | undefined;
56
+ 'aria-invalid'?: boolean | undefined;
57
+ /** Focus the field on mount, for a form opened AT it. The list stays closed. */
58
+ focusOnMount?: boolean | undefined;
59
+ /** The line shown when a search matches nothing. */
60
+ emptyMessage?: ((query: string) => string) | undefined;
61
+ /** The name of a chip's Remove control. */
62
+ removeLabel?: ((label: string) => string) | undefined;
63
+ /** The names of a chip's Move controls, in an `ordered` field. */
64
+ moveEarlierLabel?: ((label: string) => string) | undefined;
65
+ moveLaterLabel?: ((label: string) => string) | undefined;
66
+ /** What is said when a value is added, removed or moved. */
67
+ addedMessage?: ((label: string) => string) | undefined;
68
+ /** What is said when a paste adds several at once. */
69
+ pastedMessage?: ((count: number) => string) | undefined;
70
+ removedMessage?: ((label: string) => string) | undefined;
71
+ movedMessage?: ((label: string, position: number, count: number) => string) | undefined;
72
+ /** Names the chip list. */
73
+ chosenLabel?: ((label: string) => string) | undefined;
74
+ }
75
+ export interface TagsInputHandle {
76
+ focus: () => void;
77
+ }
78
+ /**
79
+ * Several values in one field, as removable chips.
80
+ *
81
+ * TWO FIELDS IN ONE, and the difference is what it is offered. With no
82
+ * `options` it is the free-text chip field: type a value, press Enter or
83
+ * comma, get a chip. With them it is a searchable multi-select, which is the
84
+ * one thing a native `<select multiple>` cannot do usefully: that control is
85
+ * a scrolling box that loses its whole selection to a stray click.
86
+ *
87
+ * THE RULES IT KEEPS.
88
+ *
89
+ * - FOCUS STAYS IN THE FIELD. The highlighted option is pointed at with
90
+ * `aria-activedescendant`, and every option says whether it is chosen with
91
+ * `aria-selected` inside an `aria-multiselectable` listbox.
92
+ * - ENTER TOGGLES AND KEEPS THE LIST AND THE QUERY, so several neighbours in
93
+ * one filtered list are chosen without retyping. Tab leaves the field, as
94
+ * every form control does.
95
+ * - ESCAPE CLOSES THE LIST AND NOTHING ELSE. A second Escape reaches the
96
+ * dialog or sheet around it.
97
+ * - BACKSPACE IN AN EMPTY QUERY REMOVES THE LAST VALUE, as in every token
98
+ * field, and says so.
99
+ * - A CHOSEN VALUE THE OPTIONS DO NOT OFFER is shown as itself rather than
100
+ * dropped: a reference to something since renamed has to stay visible until
101
+ * somebody removes it on purpose.
102
+ * - EVERY ADDITION, REMOVAL AND MOVE IS ANNOUNCED, through the shared
103
+ * `Announcer`, because a chip appearing above the box is otherwise silent.
104
+ * - AFTER A REMOVE, FOCUS GOES TO THE NEXT CHIP, else the previous one, else
105
+ * the field. A control that removes itself and drops focus on the page body
106
+ * ends a keyboard user's pass through the form.
107
+ * - NOTHING IS TAKEN MID-COMPOSITION. While an input method is composing a
108
+ * word, Enter, comma and Backspace are its own.
109
+ * - IT DOES NOT COMMIT ON BLUR IN OPTIONS MODE. A query is a search there, not
110
+ * a value, so leaving the field with one typed adds nothing.
111
+ */
112
+ export declare const TagsInput: import("react").ForwardRefExoticComponent<TagsInputProps & import("react").RefAttributes<TagsInputHandle>>;
@@ -0,0 +1,3 @@
1
+ import './TagsInput.css';
2
+ export { TagsInput } from './TagsInput.js';
3
+ export type { TagsInputHandle, TagsInputOption, TagsInputProps } from './TagsInput.js';
@@ -0,0 +1,10 @@
1
+ export { TagsInput } from '../chunk-RDGD7Z7I.js';
2
+ import '../chunk-S2XHHEW4.js';
3
+ import '../chunk-PZSWF74H.js';
4
+ import '../chunk-GTOUGQQK.js';
5
+ import '../chunk-7RPGY3JE.js';
6
+ import '../chunk-ITHXJHBB.js';
7
+ import '../chunk-F27EPQ7D.js';
8
+ import '../chunk-RSAQOKH3.js';
9
+ import '../chunk-BZFWDIV6.js';
10
+ import '../chunk-ODEQTPFM.js';