@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,138 @@
1
+ import { type FocusEventHandler, type ReactNode, type SelectHTMLAttributes } from 'react';
2
+ export type SelectValue = string | number;
3
+ export type SelectSize = 'sm' | 'md';
4
+ export type SelectAlign = 'left' | 'right';
5
+ /**
6
+ * How wide the control is.
7
+ *
8
+ * `full` is a field on a form, which takes the line it is given. `auto` is a
9
+ * picker in a toolbar: it sizes to the answer it is showing, between a floor
10
+ * that keeps a row of them even and a cap that stops one long value pushing
11
+ * the rest of the bar off the screen. A filter row of full-width selects is
12
+ * one question per line, which is not what a filter bar is.
13
+ */
14
+ export type SelectWidth = 'full' | 'auto';
15
+ /**
16
+ * Which control this is.
17
+ *
18
+ * `listbox` IS THE HOUSE STYLE, and it is the default. Every dropdown in the
19
+ * product is this one: it takes the theme, the density, the tokens and the
20
+ * layer stack, so a list opened in a dark dialog is drawn by the design system
21
+ * rather than by the operating system, and the two do not sit beside each
22
+ * other looking like two products. It is also the only one that can do what
23
+ * several surfaces need at all: more than one choice, a search over dozens, a
24
+ * group heading, a second line of identity under an option.
25
+ *
26
+ * What it had to earn back, and now does, is everything a reader got free from
27
+ * the platform: type-ahead, Home and End, disabled rows stepped over, the
28
+ * highlight announced through `aria-activedescendant`, Tab closing the list
29
+ * and carrying on, and a stored value the options no longer offer kept rather
30
+ * than silently swapped. Those live in `useOptionKeys` and `useListbox`, so
31
+ * there is one keyboard for every list in the package.
32
+ *
33
+ * `native` is a real `<select>` in uilet's chrome, and it is drawn ONLY where
34
+ * a caller asks for it by name. The one thing it still has that this cannot
35
+ * is the phone's own full-screen picker and the platform's assistive
36
+ * behaviour in a web view, so a surface that is mostly used on a handset can
37
+ * opt into it deliberately. It takes one choice only.
38
+ */
39
+ export type SelectMode = 'listbox' | 'native';
40
+ export interface SelectOption {
41
+ value: SelectValue;
42
+ label: ReactNode;
43
+ /** A second line under the label: a handle, a path, what the choice means. */
44
+ description?: ReactNode;
45
+ disabled?: boolean;
46
+ /** Options sharing a group are listed under its name, in first-seen order. */
47
+ group?: string;
48
+ /**
49
+ * What type-ahead and the search match against, where the label is not a
50
+ * string. Without it a node label is matched by its value, which is a
51
+ * worse answer than no match at all when the two differ.
52
+ */
53
+ text?: string;
54
+ }
55
+ /**
56
+ * The form-control properties that reach whichever element this draws.
57
+ *
58
+ * The focus handlers are typed on `HTMLElement` rather than on
59
+ * `HTMLSelectElement`, because the element a caller's handler lands on depends
60
+ * on the mode: the listbox's trigger is a button and the native mode's is a
61
+ * `select`. A handler written for the wider type works in both.
62
+ */
63
+ type NativePassthrough = Pick<SelectHTMLAttributes<HTMLSelectElement>, 'autoFocus' | 'name' | 'required' | 'aria-describedby'> & {
64
+ onBlur?: FocusEventHandler<HTMLElement> | undefined;
65
+ onFocus?: FocusEventHandler<HTMLElement> | undefined;
66
+ };
67
+ export interface SelectProps extends NativePassthrough {
68
+ id?: string;
69
+ /**
70
+ * Which control to draw. `listbox` by default, which is the house style; ask
71
+ * for `native` only with a reason, and say it at the call site. See
72
+ * [SelectMode].
73
+ */
74
+ mode?: SelectMode | undefined;
75
+ /**
76
+ * The chosen value. In `multiple` mode an array; a value the options do not
77
+ * offer is kept rather than dropped, because a reference to something since
78
+ * renamed has to stay visible until somebody removes it on purpose.
79
+ */
80
+ value: SelectValue | SelectValue[] | undefined;
81
+ onChange?: (value: SelectValue | SelectValue[], option: SelectOption) => void;
82
+ options: SelectOption[];
83
+ placeholder?: string;
84
+ disabled?: boolean;
85
+ className?: string;
86
+ menuClassName?: string;
87
+ size?: SelectSize;
88
+ /** How wide the control is. See [SelectWidth]. */
89
+ width?: SelectWidth;
90
+ align?: SelectAlign;
91
+ /**
92
+ * A filter that is ON. It takes the accent border and the accent INK, which
93
+ * is what "here, this is narrowing the list" means everywhere else; the fill
94
+ * it used to take put a value on a coloured ground at 3.58:1.
95
+ */
96
+ active?: boolean;
97
+ /** Marks the value as refused. Sets `aria-invalid`. */
98
+ error?: boolean;
99
+ ariaLabel?: string;
100
+ searchable?: boolean;
101
+ searchPlaceholder?: string;
102
+ /** Listbox mode only. A native select cannot hold several choices usefully. */
103
+ multiple?: boolean;
104
+ renderTrigger?: (option: SelectOption | null, ctx: {
105
+ open: boolean;
106
+ }) => ReactNode;
107
+ renderOption?: (option: SelectOption, ctx: {
108
+ active: boolean;
109
+ selected: boolean;
110
+ }) => ReactNode;
111
+ renderMultiLabel?: (selected: SelectOption[]) => ReactNode;
112
+ /** The line shown when a search matches nothing. */
113
+ emptyMessage?: string;
114
+ }
115
+ /**
116
+ * A picker over a known set of values.
117
+ *
118
+ * WHAT CHANGED. The listbox mode used to add its own `mousedown` listener to
119
+ * the document and swallow every press inside its panel so the popover around
120
+ * it would not close, which is the shape a component takes when it is not on
121
+ * a shared stack. It is a popup on the layer stack now, so a press on a
122
+ * dialog's veil closes the list and leaves the dialog, and Escape reaches the
123
+ * list first and stops there.
124
+ *
125
+ * The keyboard is the shared listbox model, so the arrows wrap, the highlight
126
+ * is clamped rather than reset as a search narrows, and nothing is taken
127
+ * while an input method is composing a word. What this adds on top is what
128
+ * the model cannot know: which options are DISABLED, so the arrows, Home and
129
+ * End step over them rather than parking the highlight on a row Enter will
130
+ * refuse.
131
+ *
132
+ * THE HIGHLIGHT IS ANNOUNCED. The list points at its active row with
133
+ * `aria-activedescendant` and every row carries an id, which is what a screen
134
+ * reader reads as the arrows move. Without it the reader heard the list open
135
+ * and then silence.
136
+ */
137
+ export declare const Select: import("react").ForwardRefExoticComponent<SelectProps & import("react").RefAttributes<HTMLElement>>;
138
+ export {};
@@ -0,0 +1,3 @@
1
+ import './Select.css';
2
+ export { Select } from './Select.js';
3
+ export type { SelectAlign, SelectMode, SelectOption, SelectProps, SelectSize, SelectValue, } from './Select.js';
@@ -0,0 +1,5 @@
1
+ export { Select } from '../chunk-5IMACPJS.js';
2
+ import '../chunk-GTOUGQQK.js';
3
+ import '../chunk-7RPGY3JE.js';
4
+ import '../chunk-ITHXJHBB.js';
5
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,350 @@
1
+ /*
2
+ * Select: one chrome over two controls, and the product's only dropdown.
3
+ *
4
+ * The native mode is a real `<select>` drawn transparent over this frame, so
5
+ * the platform keeps its own overlay, its own type-ahead and, on a phone, its
6
+ * own full-screen picker. The listbox mode is the hand-built panel, portalled
7
+ * into the nearest layer host and drawn with the shared listbox register, so
8
+ * a list of options looks the same wherever it is offered from.
9
+ *
10
+ * The boundary is --color-border-control, like every other control: the
11
+ * hairline measured 1.27:1 in light, which is a box a reader has to know is
12
+ * there already.
13
+ */
14
+
15
+ .crewlet-select {
16
+ /*
17
+ * The toolbar picker's bounds. The floor keeps a row of filters even when
18
+ * one of them is showing "Any"; the cap stops a long value pushing the rest
19
+ * of the bar off the screen, and the label truncates instead.
20
+ */
21
+ --crewlet-select-auto-min-width: 132px;
22
+ --crewlet-select-auto-max-width: 220px;
23
+
24
+ position: relative;
25
+ display: inline-flex;
26
+ align-items: center;
27
+ width: 100%;
28
+ min-height: var(--size-control-md);
29
+ background-color: var(--color-surface-subtle);
30
+ border: 1px solid var(--color-border-control);
31
+ border-radius: var(--radius-md);
32
+ color: var(--color-text-primary);
33
+ /* The boundary is the only thing that moves. The ring is an outline, which
34
+ takes no transition, and nothing else here paints a shadow. */
35
+ transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
36
+ }
37
+
38
+ .crewlet-select--sm {
39
+ min-height: var(--size-control-sm);
40
+ }
41
+
42
+ /* A picker in a toolbar sizes to its answer. See [SelectWidth]. */
43
+ .crewlet-select--auto {
44
+ width: auto;
45
+ min-width: var(--crewlet-select-auto-min-width);
46
+ max-width: var(--crewlet-select-auto-max-width);
47
+ flex: 0 1 auto;
48
+ }
49
+
50
+ .crewlet-select:hover {
51
+ border-color: var(--color-border-hover);
52
+ }
53
+
54
+ /*
55
+ * ONE RING, and the same one every field in this package draws: an outline
56
+ * over the boundary, inset so a scroller cannot clip it. See Input.css for
57
+ * why it is not the border plus --shadow-focus it used to be, and why an
58
+ * outline is the half that survives forced-colors mode.
59
+ *
60
+ * :focus-within is enough HERE, where the Input's own rule has to name its
61
+ * control: this frame holds the trigger and a chevron, and the chevron takes
62
+ * no focus. Anything focusable added beside the trigger would have to narrow
63
+ * this selector, or its ring would be drawn inside the field's.
64
+ *
65
+ * It is also why the trigger is asked nothing about :focus-visible. A native
66
+ * <select> matches that on a pointer press and a <button> does not, so
67
+ * keying the frame on it would ring one of Select's two modes on a click and
68
+ * leave the other bare.
69
+ */
70
+ .crewlet-select:focus-within {
71
+ outline: 2px solid var(--color-focus);
72
+ outline-offset: var(--size-focus-ring-inset-offset);
73
+ }
74
+
75
+ /*
76
+ * A FILTER THAT IS ON. The accent border says where the reader is and the
77
+ * accent INK says what it is set to. It used to be the accent FILL with the
78
+ * value written on it, which measured 3.58:1 in dark: the one control on the
79
+ * page whose whole job is to say "this list is narrowed" was the hardest to
80
+ * read on it.
81
+ */
82
+ .crewlet-select.is-active {
83
+ border-color: var(--color-brand-accent);
84
+ color: var(--color-brand-accent-ink);
85
+ }
86
+
87
+ .crewlet-select.is-active .crewlet-select__label,
88
+ .crewlet-select.is-active .crewlet-select__native,
89
+ .crewlet-select.is-active .crewlet-select__chevron {
90
+ color: var(--color-brand-accent-ink);
91
+ }
92
+
93
+ .crewlet-select.is-error {
94
+ border-color: var(--color-feedback-danger);
95
+ }
96
+
97
+ /* A refused picker keeps its colour while the reader is in it: the ring
98
+ covers the boundary, so a focus-coloured one would paint out the refusal.
99
+ See Input.css. */
100
+ .crewlet-select.is-error:focus-within {
101
+ outline-color: var(--color-feedback-danger);
102
+ }
103
+
104
+ .crewlet-select.is-disabled {
105
+ opacity: 0.6;
106
+ cursor: not-allowed;
107
+ }
108
+
109
+ /* ── The trigger, native and built ───────────────────────────────────── */
110
+
111
+ /*
112
+ * The trigger IS the field: the value sits on one line inset by the same step
113
+ * a text box insets its own, and the box's height is what makes the row. It
114
+ * stretches to the frame so a press anywhere in the control opens the list.
115
+ */
116
+ .crewlet-select__native,
117
+ .crewlet-select__trigger {
118
+ appearance: none;
119
+ -webkit-appearance: none;
120
+ flex: 1;
121
+ min-width: 0;
122
+ display: inline-flex;
123
+ align-items: center;
124
+ align-self: stretch;
125
+ gap: var(--spacing-2);
126
+ background: transparent;
127
+ border: none;
128
+ outline: none;
129
+ cursor: pointer;
130
+ font: inherit;
131
+ font-size: var(--font-size-compact);
132
+ color: inherit;
133
+ text-align: left;
134
+ padding: 0 var(--spacing-3);
135
+ /* Room for the chevron, which sits over the control rather than beside it:
136
+ its own inset twice over, plus the glyph. */
137
+ padding-right: var(--spacing-6);
138
+ }
139
+
140
+ .crewlet-select--sm .crewlet-select__native,
141
+ .crewlet-select--sm .crewlet-select__trigger {
142
+ font-size: var(--font-size-xs);
143
+ padding: 0 var(--spacing-2);
144
+ padding-right: var(--spacing-6);
145
+ }
146
+
147
+ .crewlet-select__native:disabled,
148
+ .crewlet-select__trigger:disabled {
149
+ cursor: not-allowed;
150
+ }
151
+
152
+ /*
153
+ * THE TRIGGER DRAWS NO RING OF ITS OWN. The frame around it is the field a
154
+ * reader sees, and it is already ringed by the rule above. The transparent
155
+ * outline that used to sit here was the frame's forced-colors stand-in put on
156
+ * the wrong element: with the frame drawing a real outline now, that one was
157
+ * a second system-coloured ring inside the first for the readers that mode
158
+ * exists for, and it sat two pixels further out than the frame's own.
159
+ */
160
+ .crewlet-select__label {
161
+ flex: 1;
162
+ min-width: 0;
163
+ overflow: hidden;
164
+ text-overflow: ellipsis;
165
+ white-space: nowrap;
166
+ }
167
+
168
+ /* Nothing chosen: the tertiary step, which is measured, because it is the
169
+ example of what belongs here rather than decoration. */
170
+ .crewlet-select__label.is-placeholder {
171
+ color: var(--color-text-tertiary);
172
+ }
173
+
174
+ /*
175
+ * The chevron is DECORATION and takes the decoration step. It says a second
176
+ * time what the control's own role, name and boundary already say, and a mark
177
+ * that repeats is a mark that must not compete with the value beside it.
178
+ *
179
+ * The selector names the ELEMENT as well as the class, which is what says
180
+ * this is the one exemption the decoration step has: an svg, never a word.
181
+ */
182
+ svg.crewlet-select__chevron {
183
+ position: absolute;
184
+ right: var(--spacing-2);
185
+ pointer-events: none;
186
+ color: var(--color-text-muted);
187
+ }
188
+
189
+ /* ── The panel ───────────────────────────────────────────────────────── */
190
+
191
+ .crewlet-select__menu {
192
+ /* Six rows and a scroll. A list that draws past the bottom of the dialog
193
+ it was opened in is a list whose last answers nobody finds. */
194
+ --crewlet-select-menu-max-height: 12rem;
195
+
196
+ position: fixed;
197
+ display: flex;
198
+ flex-direction: column;
199
+ min-width: 0;
200
+ max-height: var(--crewlet-select-menu-max-height);
201
+ /*
202
+ * THE PANEL IS THE PRODUCT'S SURFACE, on the panel hairline, at the panel
203
+ * corner. A list offered from a field is another panel over the one the
204
+ * field is in, not a heavier kind of thing: the elevated surface and the
205
+ * large shadow it used to lift with read as a dialog, over a form the
206
+ * reader has not left.
207
+ */
208
+ background: var(--color-surface-subtle);
209
+ border: 1px solid var(--color-border-default);
210
+ border-radius: var(--radius-md);
211
+ box-shadow: var(--shadow-md);
212
+ overflow: hidden;
213
+ /*
214
+ * The popover band. A list portalled out of its form has to paint over the
215
+ * dialog it was opened inside, and the shared listbox model does not hand
216
+ * back the layer's own depth, so this is the token for the band rather than
217
+ * a number.
218
+ */
219
+ z-index: var(--z-index-popover);
220
+ }
221
+
222
+ /* Inside a layer host the panel is placed against the host's own box. */
223
+ .crewlet-select__menu--in-host {
224
+ position: absolute;
225
+ }
226
+
227
+ .crewlet-select__list {
228
+ flex: 1;
229
+ min-height: 0;
230
+ }
231
+
232
+ .crewlet-select__group {
233
+ display: flex;
234
+ flex-direction: column;
235
+ gap: 1px;
236
+ }
237
+
238
+ .crewlet-select__option {
239
+ align-items: flex-start;
240
+ }
241
+
242
+ /*
243
+ * WHAT IS CHOSEN AND WHERE THE READER IS ARE TWO DIFFERENT FACTS, and this
244
+ * list draws them with two different marks: the chosen row carries the tick,
245
+ * in the accent ink, and the row the arrows or the pointer are on carries the
246
+ * hover tint. Drawn as one tint they collided on the commonest list there is,
247
+ * a filter whose current answer is also the row it opens on.
248
+ *
249
+ * The rules are scoped to the panel rather than written on the option class,
250
+ * because the shared listbox register paints [aria-selected] itself and the
251
+ * stylesheets are bundled in hash order: a rule of equal weight would win or
252
+ * lose by the name of a build artefact.
253
+ */
254
+ .crewlet-select__menu .crewlet-listbox__option,
255
+ .crewlet-select__menu .crewlet-listbox__option[aria-selected='true'] {
256
+ border-radius: var(--radius-xs);
257
+ background: transparent;
258
+ color: var(--color-text-primary);
259
+ }
260
+
261
+ .crewlet-select__menu .crewlet-listbox__option.is-highlight,
262
+ .crewlet-select__menu .crewlet-listbox__option:hover {
263
+ background: var(--color-surface-hover);
264
+ color: var(--color-text-primary);
265
+ }
266
+
267
+ /*
268
+ * A row a caller draws itself (`renderOption`) has no tick column, so the
269
+ * choice is said in the weight as well. It is the one mark that costs the row
270
+ * nothing: a custom row with no tick and no tint said nothing at all.
271
+ */
272
+ .crewlet-select__menu .crewlet-listbox__option.is-selected {
273
+ font-weight: var(--font-weight-medium);
274
+ }
275
+
276
+ .crewlet-select__menu .crewlet-listbox__option.is-disabled {
277
+ background: transparent;
278
+ color: var(--color-text-tertiary);
279
+ cursor: not-allowed;
280
+ }
281
+
282
+ .crewlet-select__option-tick {
283
+ display: inline-flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ flex: none;
287
+ width: 16px;
288
+ height: 16px;
289
+ margin-top: 1px;
290
+ color: var(--color-brand-accent-ink);
291
+ }
292
+
293
+ .crewlet-select__option-body {
294
+ display: flex;
295
+ flex-direction: column;
296
+ gap: 1px;
297
+ min-width: 0;
298
+ }
299
+
300
+ .crewlet-select__option-label {
301
+ overflow: hidden;
302
+ text-overflow: ellipsis;
303
+ }
304
+
305
+ .crewlet-select__option-desc {
306
+ font-size: var(--font-size-2xs);
307
+ line-height: var(--font-line-height-normal);
308
+ color: var(--color-text-tertiary);
309
+ }
310
+
311
+ /* The second line stays the second line on the row the reader is on: it is
312
+ the same fact, and a description that changes colour with the highlight
313
+ reads as a different kind of thing under the pointer. */
314
+ .crewlet-select__menu .crewlet-listbox__option.is-highlight .crewlet-select__option-desc {
315
+ color: var(--color-text-tertiary);
316
+ }
317
+
318
+ /* ── The search box ──────────────────────────────────────────────────── */
319
+
320
+ .crewlet-select__search {
321
+ display: flex;
322
+ align-items: center;
323
+ gap: var(--spacing-2);
324
+ padding: var(--spacing-2) var(--spacing-3);
325
+ border-bottom: 1px solid var(--color-border-default);
326
+ color: var(--color-text-tertiary);
327
+ flex: none;
328
+ }
329
+
330
+ .crewlet-select__search-input {
331
+ flex: 1;
332
+ min-width: 0;
333
+ background: transparent;
334
+ border: none;
335
+ outline: none;
336
+ font: inherit;
337
+ font-size: var(--font-size-compact);
338
+ color: var(--color-text-primary);
339
+ }
340
+
341
+ .crewlet-select__search-input::placeholder {
342
+ color: var(--color-text-tertiary);
343
+ opacity: 1;
344
+ }
345
+
346
+ @media (prefers-reduced-motion: reduce) {
347
+ .crewlet-select {
348
+ transition: none;
349
+ }
350
+ }
@@ -0,0 +1,2 @@
1
+ export { matchesShortcut, useShortcut } from './useShortcut.js';
2
+ export type { ShortcutChord, ShortcutKey, ShortcutOptions } from './useShortcut.js';
@@ -0,0 +1,4 @@
1
+ export { matchesShortcut, useShortcut } from '../chunk-F6OE5FH3.js';
2
+ import '../chunk-7RPGY3JE.js';
3
+ import '../chunk-ITHXJHBB.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,68 @@
1
+ /**
2
+ * A keyboard shortcut that belongs to the PAGE.
3
+ *
4
+ * WHY IT IS NOT A `keydown` LISTENER. Four rules separate a shortcut that
5
+ * works from one that fires in the wrong place, and every one of them was a
6
+ * defect somewhere before it was a rule here:
7
+ *
8
+ * - NOT A PRESS SOMETHING ELSE HAS ALREADY HANDLED. A surface that closes on
9
+ * its own chord calls `preventDefault`, and a second handler acting on the
10
+ * same press undoes what the first one did.
11
+ * - NOT A PRESS AN INPUT METHOD IS COMPOSING. Somebody typing Japanese,
12
+ * Chinese or Korean builds each word in a composition, whose Enter, Escape
13
+ * and arrows still reach the page as key presses. See `isComposing`.
14
+ * - NOT WHILE A MODAL HOLDS THE KEYBOARD. `aria-modal` says the page behind a
15
+ * dialog cannot be reached, and a page shortcut that fires through it breaks
16
+ * that in the most expensive way available: search opened over a dialog can
17
+ * navigate, the navigation unmounts the dialog, and a write whose outcome
18
+ * nobody has seen goes with it.
19
+ * - NOT A BARE KEY WHILE SOMEBODY IS TYPING. A slash is a search shortcut on
20
+ * an empty page and a character in a filter box. The set of what counts as
21
+ * typing includes `select`, which the dashboard this is ported from left
22
+ * out: a slash pressed on a focused native select opened search instead of
23
+ * jumping to the option the reader was spelling.
24
+ */
25
+ /**
26
+ * A press with modifiers. `mod` is the platform's command key: Command on an
27
+ * Apple keyboard, Control everywhere else, so one binding is right on both.
28
+ */
29
+ export interface ShortcutChord {
30
+ /** The key as the browser reports it, compared without case for a letter. */
31
+ key: string;
32
+ mod?: boolean | undefined;
33
+ shift?: boolean | undefined;
34
+ alt?: boolean | undefined;
35
+ }
36
+ /** A bare key (`'/'`, `'?'`) or a chord. */
37
+ export type ShortcutKey = string | ShortcutChord;
38
+ /**
39
+ * Whether this press is one of these shortcuts.
40
+ *
41
+ * Exported because a surface sometimes has to answer the same question about
42
+ * a press it is handed rather than about one it subscribed to: a command
43
+ * palette closes on the chord that opened it, and two spellings of "is this
44
+ * that chord" is how the two come to disagree.
45
+ */
46
+ export declare function matchesShortcut(event: KeyboardEvent, keys: readonly ShortcutKey[]): boolean;
47
+ export interface ShortcutOptions {
48
+ /** The presses that fire it. */
49
+ keys: readonly ShortcutKey[];
50
+ /** What to do. The press is already claimed with `preventDefault` by then. */
51
+ onKey: (event: KeyboardEvent) => void;
52
+ /**
53
+ * `page` is a shortcut the page owns, silent while a modal is open.
54
+ *
55
+ * `any` is for a shortcut owned by a surface that is itself up, because a
56
+ * surface cannot use `page`: it IS the modal that would silence it. It is
57
+ * NOT a way out of the modal rule, and the caller owes the other half of
58
+ * it: pass `enabled: isTopmost` from that surface's own `useModalLayer`, so
59
+ * the chord belongs to whichever surface holds the keyboard. Bound without
60
+ * it, a palette's own chord closes the palette from beneath a dialog raised
61
+ * over it, and focus lands behind that dialog's veil.
62
+ */
63
+ scope?: 'page' | 'any' | undefined;
64
+ /** False to unbind it, for a shortcut that belongs to a state. */
65
+ enabled?: boolean | undefined;
66
+ }
67
+ /** Binds `keys` for as long as the component is mounted and `enabled`. */
68
+ export declare function useShortcut({ keys, onKey, scope, enabled }: ShortcutOptions): void;