@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,41 @@
1
+ import type { ReactNode } from 'react';
2
+ /** What a caller is handed when it draws the link element itself. */
3
+ export interface BrandLinkProps {
4
+ className: string;
5
+ children: ReactNode;
6
+ /** Present only when `href` was given; a router link takes its own target. */
7
+ href?: string | undefined;
8
+ 'aria-label': string;
9
+ }
10
+ export interface BrandLockupProps {
11
+ /** The product's name, and the name of the link. Required, for that reason. */
12
+ name: string;
13
+ /** The mark. DECORATION: the name beside it is what a reader is told. */
14
+ mark?: ReactNode;
15
+ /**
16
+ * Where the reader is: the company, the workspace, "Superadmin". It sits
17
+ * under the product name, because on this screen the company is the subject
18
+ * and the product is the tool.
19
+ */
20
+ context?: ReactNode;
21
+ /** Home. Without it, and without `renderLink`, the lockup is not a link. */
22
+ href?: string | undefined;
23
+ /** Draws the link element, for a router that owns navigation (conlet's NavLink). */
24
+ renderLink?: ((props: BrandLinkProps) => ReactNode) | undefined;
25
+ className?: string | undefined;
26
+ }
27
+ /**
28
+ * The mark, the product name and what the reader is inside, as one block at
29
+ * the head of the rail.
30
+ *
31
+ * THE LINK IS NAMED BY THE PRODUCT, and the context line is outside it. Inside
32
+ * it, the link's accessible name would be "Crewlet Acme Holdings" and would
33
+ * change whenever the company was renamed, so the one landmark that always
34
+ * means "go home" would be announced differently on every deployment. It stays
35
+ * readable, drawn on the line below and indented to the name above it by the
36
+ * mark's own box, which is a component variable rather than a guess.
37
+ *
38
+ * The mark is hidden from assistive technology: a logo beside its own name is
39
+ * the definition of decoration.
40
+ */
41
+ export declare function BrandLockup({ name, mark, context, href, renderLink, className }: BrandLockupProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './BrandLockup.css';
2
+ export { BrandLockup } from './BrandLockup.js';
3
+ export type { BrandLinkProps, BrandLockupProps } from './BrandLockup.js';
@@ -0,0 +1,2 @@
1
+ export { BrandLockup } from '../chunk-WNI2WSJF.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,108 @@
1
+ /*
2
+ * The brand lockup at the head of the rail.
3
+ *
4
+ * ONE INSET FOR THE WHOLE RAIL, so the mark, the group labels and the row
5
+ * text all start on the same vertical line. The lockup has no row of its own,
6
+ * so it adds the rail's gutter to a row's pad rather than spending a literal
7
+ * somebody has to remember to move when either changes.
8
+ */
9
+
10
+ /*
11
+ * IT FITS THE BAR IT IS DRAWN BESIDE. The rail's head is the top bar's own
12
+ * height (64px, a fixed token at every density), so the lockup has to come in
13
+ * under that height with its context line on: mark 24 plus one 11px line at
14
+ * the document's own leading plus twice the block padding is 56.5px at the
15
+ * normal density and 58.7px at comfortable. It was 66.5px, which grew the head
16
+ * past the bar and put a visible kink across the window on every deployment
17
+ * that names a company.
18
+ *
19
+ * NO GAP BETWEEN THE TWO LINES. They are one lockup rather than two stacked
20
+ * labels, and the leading is the space between them: a gap on top of it reads
21
+ * as a product name with a caption under it, which is the wrong relation. Both
22
+ * lines take the DOCUMENT'S leading rather than a tight step of their own,
23
+ * because the eight pixels it spends here are eight the rail's head already
24
+ * has and the two lines otherwise sit closer together than any other pair of
25
+ * lines in the product.
26
+ */
27
+ .crewlet-brand {
28
+ display: flex;
29
+ flex-direction: column;
30
+ justify-content: center;
31
+ min-width: 0;
32
+ /* The mark's box, and what the context line is indented by. It is also the
33
+ link's target height, so it sits on the 24px floor rather than under it.
34
+ A consumer with a wider mark sets this rather than editing two rules. */
35
+ --crewlet-brand-mark: 24px;
36
+ padding: var(--spacing-2) calc(var(--size-nav-gutter) + var(--size-nav-row-pad));
37
+ }
38
+
39
+ .crewlet-brand__home {
40
+ display: inline-flex;
41
+ align-items: center;
42
+ align-self: flex-start;
43
+ gap: var(--spacing-2);
44
+ min-width: 0;
45
+ max-width: 100%;
46
+ border-radius: var(--radius-sm);
47
+ color: var(--color-text-primary);
48
+ text-decoration: none;
49
+ }
50
+
51
+ .crewlet-brand__home:focus-visible {
52
+ outline: 2px solid var(--color-focus);
53
+ outline-offset: 2px;
54
+ }
55
+
56
+ .crewlet-brand__mark {
57
+ display: inline-flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ flex: none;
61
+ width: var(--crewlet-brand-mark);
62
+ height: var(--crewlet-brand-mark);
63
+ }
64
+
65
+ .crewlet-brand__mark > * {
66
+ width: 100%;
67
+ height: 100%;
68
+ }
69
+
70
+ .crewlet-brand__name {
71
+ font-family: var(--font-family-sans);
72
+ font-size: var(--font-size-sm);
73
+ font-weight: var(--font-weight-semibold);
74
+ letter-spacing: var(--font-letter-spacing-tight);
75
+ line-height: var(--font-line-height-normal);
76
+ color: var(--color-text-primary);
77
+ overflow: hidden;
78
+ text-overflow: ellipsis;
79
+ white-space: nowrap;
80
+ }
81
+
82
+ /* Indented to the name above it by the mark's own box, and truncated: a
83
+ company name is as long as somebody registered it.
84
+
85
+ THE RAIL'S OWN MICRO-LABEL REGISTER, which is the wide step rather than the
86
+ wider one an Eyebrow takes: this line and the nav's group labels are the two
87
+ uppercase runs in the rail, they sit twenty pixels apart, and at the wider
88
+ step the company's name was visibly broader than the sections under it
89
+ rather than quieter than them. The suite holds the two together. */
90
+ .crewlet-brand__context {
91
+ padding-left: calc(var(--crewlet-brand-mark) + var(--spacing-2));
92
+ font-family: var(--font-family-sans);
93
+ font-size: var(--font-size-2xs);
94
+ /* THE REGULAR WEIGHT, which is the one thing that separates this line from
95
+ the nav's group labels below it. The two are the only uppercase runs in
96
+ the rail and they sit twenty pixels apart; drawn at the same size, the
97
+ same tracking and the same weight they read as two headings of one list
98
+ rather than as the company's name above the sections in it. A group name
99
+ is what a reader scans, so the weight stays there and goes from here. */
100
+ font-weight: var(--font-weight-regular);
101
+ letter-spacing: var(--font-letter-spacing-wide);
102
+ line-height: var(--font-line-height-normal);
103
+ text-transform: uppercase;
104
+ color: var(--color-text-tertiary);
105
+ overflow: hidden;
106
+ text-overflow: ellipsis;
107
+ white-space: nowrap;
108
+ }
@@ -0,0 +1,88 @@
1
+ import { type AnchorHTMLAttributes, type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ export type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'tertiary' | 'accent' | 'danger';
3
+ export type ButtonSize = 'small' | 'medium' | 'large';
4
+ export type ButtonShape = 'square' | 'pill';
5
+ interface ButtonLook {
6
+ /** The hierarchy, not a palette: primary is the one action on the screen. */
7
+ variant?: ButtonVariant | undefined;
8
+ size?: ButtonSize | undefined;
9
+ shape?: ButtonShape | undefined;
10
+ /** Drawn before the label. A glyph component, not a name. */
11
+ leadingIcon?: ReactNode;
12
+ /** Drawn after the label: a chevron, an external mark, a count. */
13
+ trailingIcon?: ReactNode;
14
+ /** Fills the line it is on. */
15
+ block?: boolean | undefined;
16
+ className?: string | undefined;
17
+ children?: ReactNode;
18
+ }
19
+ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, ButtonLook {
20
+ /** Sets `aria-pressed`: a toggle that is on, such as a filter. */
21
+ pressed?: boolean | undefined;
22
+ /**
23
+ * Mid-action. The spinner takes the leading icon's place, the label stays
24
+ * put, and the press does nothing.
25
+ *
26
+ * NOT the native `disabled`, which takes focus away from the control the
27
+ * reader just used and drops it on the page body, then refuses to give it
28
+ * back when the action finishes. `aria-disabled` with `aria-busy` says the
29
+ * same thing to a screen reader and leaves focus where it was.
30
+ */
31
+ loading?: boolean | undefined;
32
+ /**
33
+ * Unavailable, and why. It reads the same as `disabled` to a screen reader
34
+ * and keeps its focus and its pointer events, which is the whole point: a
35
+ * natively disabled button takes no hover and no focus, so the tooltip
36
+ * explaining why "Review and save" cannot be pressed is unreachable by
37
+ * exactly the reader who needs it. The reason is linked with
38
+ * `aria-describedby`, so it is read after the name rather than instead of it.
39
+ */
40
+ disabledReason?: string | undefined;
41
+ /**
42
+ * Render the single child element with the Button's styling merged onto it
43
+ * instead of a native button, to put this look on a router's own Link while
44
+ * keeping its navigation. Mirrors the Radix `asChild` API.
45
+ *
46
+ * Ignored by `loading`: a link has no pending state to show.
47
+ */
48
+ asChild?: boolean | undefined;
49
+ }
50
+ /**
51
+ * The button recipe, spelled once for every element drawn as a button.
52
+ *
53
+ * IT FORWARDS EVERYTHING. A menu trigger needs `aria-haspopup`,
54
+ * `aria-expanded`, `aria-controls`, a ref to hand focus back to and a
55
+ * `tabIndex` of -1 when the keyboard reaches its actions another way; a list's
56
+ * Move buttons need a ref and a name longer than their tooltip; a canvas node
57
+ * needs a data attribute a stylesheet reads. Without those, each of them
58
+ * hand-wrote the class list beside the primitive, and a recipe spelled in two
59
+ * places is how the two drift apart.
60
+ *
61
+ * An icon-only button is named by its `title` unless `aria-label` names it
62
+ * more precisely: "Move goal 2 of 3 up" where the tooltip says "Move up".
63
+ */
64
+ export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
65
+ export interface ButtonLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement>, ButtonLook {
66
+ href: string;
67
+ /**
68
+ * Leaves the application. Opens a tab and withholds the referrer and the
69
+ * opener, which a link to somebody else's site must never be without, and
70
+ * draws the mark that says so unless the caller supplies its own trailing
71
+ * icon or turns it off.
72
+ */
73
+ external?: boolean | undefined;
74
+ }
75
+ /**
76
+ * A link drawn as a button: it goes somewhere rather than doing something.
77
+ *
78
+ * An action that navigates has to be a real anchor, so it can be opened in a
79
+ * tab, copied, and read as a link. It wears exactly the class list the
80
+ * matching Button wears, because it used to be a hand-written anchor carrying
81
+ * the recipe at each call site.
82
+ *
83
+ * There is deliberately no `asChild` here and no `loading`: `asChild` would
84
+ * push `target` and `rel` back out to every call site, and a link has no
85
+ * pending state.
86
+ */
87
+ export declare const ButtonLink: import("react").ForwardRefExoticComponent<ButtonLinkProps & import("react").RefAttributes<HTMLAnchorElement>>;
88
+ export {};
@@ -0,0 +1,3 @@
1
+ import './Button.css';
2
+ export { Button, ButtonLink } from './Button.js';
3
+ export type { ButtonLinkProps, ButtonProps, ButtonShape, ButtonSize, ButtonVariant } from './Button.js';
@@ -0,0 +1,3 @@
1
+ export { Button, ButtonLink } from '../chunk-BZYDZBAN.js';
2
+ import '../chunk-BZFWDIV6.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,302 @@
1
+ /*
2
+ * The button, and the link drawn as one.
3
+ *
4
+ * SIX VARIANTS, AND THEY ARE A HIERARCHY RATHER THAN A PALETTE. primary is the
5
+ * one action on the screen and takes the accent fill; secondary is everything
6
+ * else; outline is the branded yes on a page that already has a primary;
7
+ * tertiary is for a dense toolbar; danger is destructive, and the only one
8
+ * that spends the critical hue. accent is primary's own recipe under the name
9
+ * a caller may already have written.
10
+ *
11
+ * THE ONE ACTION IS THE ACCENT FILL. It reads as the answer a screen is
12
+ * asking for, which is what a filled monochrome button could not do beside a
13
+ * secondary of the same neutral family: on the dark palette a white primary
14
+ * and a light-grey secondary were one pair of greys, and the reader had to
15
+ * compare them to find the action.
16
+ *
17
+ * Every size is a --size-control-* step, so a button, a select and an input in
18
+ * one row are the same height at every density, and none of them can fall
19
+ * under the 24px a finger can hit. The padding ramp is one spacing step per
20
+ * size, so a small button in a toolbar is tight and a large one on a landing
21
+ * page is not.
22
+ */
23
+
24
+ .crewlet-btn {
25
+ display: inline-flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ gap: var(--spacing-2);
29
+ border: 1px solid transparent;
30
+ border-radius: var(--radius-md);
31
+ font-family: var(--font-family-sans);
32
+ /*
33
+ * MEDIUM, and the tracking left alone. A control's label is read at a
34
+ * glance rather than for sense, and the semibold it carried made a row of
35
+ * three buttons read as three headings; the negative tracking it carried
36
+ * with it is a display-size correction that closes up 12px text.
37
+ */
38
+ font-weight: var(--font-weight-medium);
39
+ letter-spacing: var(--font-letter-spacing-normal);
40
+ text-decoration: none;
41
+ white-space: nowrap;
42
+ cursor: pointer;
43
+ transition:
44
+ background var(--motion-duration-fast) var(--motion-easing-default),
45
+ color var(--motion-duration-fast) var(--motion-easing-default),
46
+ border-color var(--motion-duration-fast) var(--motion-easing-default);
47
+ }
48
+
49
+ /*
50
+ * A BUTTON IS NOT A LINK, WHATEVER ELEMENT IT IS. Several of these controls
51
+ * are anchors, because a step that leaves for somebody else's site has to be a
52
+ * real href, and a document baseline underlines a hovered link. That is right
53
+ * for a link inside a sentence and wrong for something drawn as a filled
54
+ * button: "Install on GitHub" grew an underline the Create button beside it
55
+ * never had, so two controls that are the same act looked like two kinds of
56
+ * thing.
57
+ */
58
+ .crewlet-btn,
59
+ .crewlet-btn:hover {
60
+ text-decoration: none;
61
+ }
62
+
63
+ /*
64
+ * THE FOCUS RING IS AN OUTLINE. Forced-colors mode drops every box-shadow and
65
+ * keeps outlines, so a ring drawn as a shadow disappears for exactly the
66
+ * readers who most need one.
67
+ */
68
+ .crewlet-btn:focus-visible {
69
+ outline: 2px solid var(--color-focus);
70
+ outline-offset: 2px;
71
+ }
72
+
73
+ .crewlet-btn:disabled,
74
+ .crewlet-btn[aria-disabled='true'] {
75
+ opacity: 0.5;
76
+ cursor: not-allowed;
77
+ }
78
+
79
+ /*
80
+ * Only the natively disabled one stops taking the pointer. A soft-disabled
81
+ * button keeps its hover and its focus on purpose: the tooltip that explains
82
+ * why it cannot be pressed is unreachable otherwise.
83
+ */
84
+ .crewlet-btn:disabled {
85
+ pointer-events: none;
86
+ }
87
+
88
+ /* Sizes: the height is the control step, and the padding is one scale step
89
+ per size. min-height rather than height, so a label that wraps is read
90
+ rather than clipped. */
91
+ .crewlet-btn--small {
92
+ min-height: var(--size-control-sm);
93
+ padding: 0 var(--spacing-2);
94
+ font-size: var(--font-size-xs);
95
+ }
96
+
97
+ .crewlet-btn--medium {
98
+ min-height: var(--size-control-md);
99
+ padding: 0 var(--spacing-3);
100
+ font-size: var(--font-size-compact);
101
+ }
102
+
103
+ .crewlet-btn--large {
104
+ min-height: var(--size-control-lg);
105
+ padding: 0 var(--spacing-4);
106
+ font-size: var(--font-size-sm);
107
+ }
108
+
109
+ .crewlet-btn--square {
110
+ border-radius: var(--radius-md);
111
+ }
112
+
113
+ .crewlet-btn--pill {
114
+ border-radius: var(--radius-pill);
115
+ }
116
+
117
+ /* A pill spends one step more than its square, because a rounded end eats the
118
+ room a straight one gives the first letter. */
119
+ .crewlet-btn--pill.crewlet-btn--small {
120
+ padding: 0 var(--spacing-3);
121
+ }
122
+
123
+ .crewlet-btn--pill.crewlet-btn--medium {
124
+ padding: 0 var(--spacing-4);
125
+ }
126
+
127
+ .crewlet-btn--pill.crewlet-btn--large {
128
+ padding: 0 var(--spacing-5);
129
+ }
130
+
131
+ .crewlet-btn--block {
132
+ width: 100%;
133
+ }
134
+
135
+ /*
136
+ * Primary: the accent fill, and the one action on the screen.
137
+ *
138
+ * `accent` is the same recipe under the other name it is written as. They are
139
+ * one rule rather than two, so the pair cannot drift into two blues, and the
140
+ * name stays because call sites already spell it.
141
+ *
142
+ * THE BORDER IS TRANSPARENT rather than the fill: a filled control needs no
143
+ * boundary, and one drawn in the fill's own colour makes the button a step
144
+ * wider than the secondary beside it in every forced-colors stylesheet that
145
+ * repaints backgrounds and keeps borders.
146
+ */
147
+ .crewlet-btn--primary,
148
+ .crewlet-btn--accent {
149
+ background: var(--color-brand-accent);
150
+ color: var(--color-text-on-accent);
151
+ border-color: transparent;
152
+ }
153
+
154
+ .crewlet-btn--primary:hover:not(:disabled):not([aria-disabled='true']),
155
+ .crewlet-btn--accent:hover:not(:disabled):not([aria-disabled='true']) {
156
+ background: var(--color-brand-accent-hover);
157
+ border-color: transparent;
158
+ }
159
+
160
+ .crewlet-btn--primary:active:not(:disabled):not([aria-disabled='true']),
161
+ .crewlet-btn--accent:active:not(:disabled):not([aria-disabled='true']) {
162
+ background: var(--color-brand-accent-active);
163
+ border-color: transparent;
164
+ }
165
+
166
+ /* Secondary: a surface with a visible boundary. Everything else. */
167
+ .crewlet-btn--secondary {
168
+ background: var(--color-surface-subtle);
169
+ color: var(--color-text-primary);
170
+ border-color: var(--color-border-default);
171
+ }
172
+
173
+ .crewlet-btn--secondary:hover:not(:disabled):not([aria-disabled='true']) {
174
+ background: var(--color-surface-elevated);
175
+ border-color: var(--color-border-hover);
176
+ }
177
+
178
+ .crewlet-btn--secondary:active:not(:disabled):not([aria-disabled='true']) {
179
+ background: var(--color-surface-pressed);
180
+ }
181
+
182
+ /* Outline: the branded secondary. Its ink is the accent's text step, never
183
+ the fill, which is not a text colour on any surface. */
184
+ .crewlet-btn--outline {
185
+ background: transparent;
186
+ color: var(--color-brand-accent-ink);
187
+ border-color: var(--color-brand-accent);
188
+ }
189
+
190
+ .crewlet-btn--outline:hover:not(:disabled):not([aria-disabled='true']) {
191
+ background: var(--color-brand-accent-soft);
192
+ }
193
+
194
+ /* Tertiary: borderless, for a dense toolbar. */
195
+ .crewlet-btn--tertiary {
196
+ background: transparent;
197
+ color: var(--color-text-secondary);
198
+ border-color: transparent;
199
+ }
200
+
201
+ .crewlet-btn--tertiary:hover:not(:disabled):not([aria-disabled='true']) {
202
+ background: var(--color-surface-hover);
203
+ color: var(--color-text-primary);
204
+ }
205
+
206
+ .crewlet-btn--tertiary:active:not(:disabled):not([aria-disabled='true']) {
207
+ background: var(--color-surface-pressed);
208
+ }
209
+
210
+ /*
211
+ * Danger: destructive, and the only button that spends the critical hue.
212
+ *
213
+ * A SECONDARY THAT HAS GONE RED, not a red slab. It sits in the same row as
214
+ * Cancel and it is the button a reader must not press by reflex, so it holds
215
+ * the secondary's own weight until it is pointed at and states itself in its
216
+ * INK, which is the step measured as text; the red fill it used to carry
217
+ * pulled the eye to the destructive answer first on every dialog that had one.
218
+ * The hue arrives on hover, as the tint plus the full fill on the boundary.
219
+ */
220
+ .crewlet-btn--danger {
221
+ background: var(--color-surface-subtle);
222
+ color: var(--color-feedback-danger-ink);
223
+ border-color: var(--color-border-default);
224
+ }
225
+
226
+ .crewlet-btn--danger:hover:not(:disabled):not([aria-disabled='true']) {
227
+ background: var(--color-feedback-danger-soft);
228
+ border-color: var(--color-feedback-danger);
229
+ }
230
+
231
+ .crewlet-btn--danger:active:not(:disabled):not([aria-disabled='true']) {
232
+ background: var(--color-feedback-danger-soft);
233
+ border-color: var(--color-feedback-danger-hover);
234
+ }
235
+
236
+ /* A toggle that is on. Drawn from the state a screen reader is already told
237
+ about, so the two cannot disagree. */
238
+ .crewlet-btn[aria-pressed='true'] {
239
+ background: var(--color-brand-accent-soft);
240
+ color: var(--color-brand-accent-ink);
241
+ border-color: var(--color-brand-accent-soft-strong);
242
+ }
243
+
244
+ .crewlet-btn__icon,
245
+ .crewlet-btn__label {
246
+ display: inline-flex;
247
+ align-items: center;
248
+ }
249
+
250
+ /*
251
+ * A glyph inside a button follows the label's own size, which is what lets one
252
+ * rule serve every step. The SVG sits on the baseline as an inline box, where
253
+ * the font ligature this replaced was inline-block and centred itself.
254
+ */
255
+ .crewlet-btn__icon .crewlet-glyph {
256
+ width: 1em;
257
+ height: 1em;
258
+ }
259
+
260
+ /*
261
+ * Pending. The spinner takes the leading icon's place, so a button that has
262
+ * one neither moves nor changes width mid-action, and the label stays exactly
263
+ * as it was: a button whose text becomes "Saving" has stopped saying what it
264
+ * does.
265
+ */
266
+ .crewlet-btn__spinner {
267
+ display: inline-block;
268
+ width: 1em;
269
+ height: 1em;
270
+ border: 2px solid currentColor;
271
+ border-right-color: transparent;
272
+ border-radius: var(--radius-circle);
273
+ opacity: 0.7;
274
+ animation: crewlet-btn-spin var(--motion-duration-slow) linear infinite;
275
+ flex: none;
276
+ }
277
+
278
+ @keyframes crewlet-btn-spin {
279
+ to {
280
+ transform: rotate(360deg);
281
+ }
282
+ }
283
+
284
+ /* A disabled button already reads as unavailable; a loading one should still
285
+ read as this button, mid-action. */
286
+ .crewlet-btn--loading {
287
+ cursor: progress;
288
+ }
289
+
290
+ /*
291
+ * A spinner that cannot spin should not pretend to, and a colour change that
292
+ * cannot fade is still a colour change. The ring reads as pending either way.
293
+ */
294
+ @media (prefers-reduced-motion: reduce) {
295
+ .crewlet-btn {
296
+ transition: none;
297
+ }
298
+
299
+ .crewlet-btn__spinner {
300
+ animation: none;
301
+ }
302
+ }
@@ -0,0 +1,87 @@
1
+ /** A day, with the month 0-based as `Date` has it. */
2
+ export interface CalendarDate {
3
+ year: number;
4
+ month: number;
5
+ day: number;
6
+ }
7
+ export declare const sameDay: (a: CalendarDate, b: CalendarDate) => boolean;
8
+ /** Negative when `a` is earlier, positive when later, zero on the same day. */
9
+ export declare function compareDays(a: CalendarDate, b: CalendarDate): number;
10
+ export declare const daysInMonth: (year: number, month: number) => number;
11
+ /** The same day shifted by `days`, rolling over months and years. */
12
+ export declare function shiftDay(date: CalendarDate, days: number): CalendarDate;
13
+ /** The same day in another month, clamped to that month's length. */
14
+ export declare function shiftMonth(date: CalendarDate, months: number): CalendarDate;
15
+ export declare const today: () => CalendarDate;
16
+ export interface CalendarGridProps {
17
+ /** Names the grid. A month grid with no name is announced as "grid". */
18
+ label: string;
19
+ /** The month on screen. */
20
+ year: number;
21
+ month: number;
22
+ /** Where the roving focus is. It is a DAY, and it may be outside the month on screen. */
23
+ focused: CalendarDate;
24
+ onFocusedChange: (next: CalendarDate) => void;
25
+ /** Asked for when the focus walks out of the month on screen. */
26
+ onMonthChange?: ((year: number, month: number) => void) | undefined;
27
+ /** Taking a day. A disabled day never reaches this. */
28
+ onSelect: (date: CalendarDate) => void;
29
+ /** The chosen days: one, or the two ends of a range. */
30
+ selected?: readonly CalendarDate[] | undefined;
31
+ /** Whether a day lies strictly inside the chosen range. */
32
+ inRange?: ((date: CalendarDate) => boolean) | undefined;
33
+ /** Whether a day may be taken. A disabled day stays focusable, and says so. */
34
+ isDisabled?: ((date: CalendarDate) => boolean) | undefined;
35
+ onHover?: ((date: CalendarDate | null) => void) | undefined;
36
+ /** 0 is Sunday (the United States), 1 is Monday (ISO 8601). */
37
+ firstDayOfWeek?: 0 | 1;
38
+ /** Whether the days either side of the month are drawn. */
39
+ showOutsideDays?: boolean;
40
+ /** What a day is CALLED. The full date, because "3" names nothing on its own. */
41
+ dayLabel?: ((date: CalendarDate) => string) | undefined;
42
+ monthNames?: readonly string[];
43
+ weekdayNames?: readonly string[];
44
+ weekdayMarks?: readonly string[];
45
+ className?: string;
46
+ }
47
+ /**
48
+ * A month of days, as a real grid.
49
+ *
50
+ * WHAT IT REPLACES. Two pickers drew 42 buttons in a row and called the
51
+ * container a grid. The role was a claim the markup did not keep: a grid
52
+ * holds rows and a gridcell sits in one, so a screen reader told it was
53
+ * reading a grid found no rows to move between, and axe refused the role
54
+ * outright. Every one of those buttons was also its own tab stop, so a
55
+ * keyboard user reached the day after next by pressing Tab forty times, and
56
+ * no arrow key did anything at all.
57
+ *
58
+ * THE RULES IT KEEPS.
59
+ *
60
+ * - ONE TAB STOP for the whole month, with the arrows moving inside it: Left
61
+ * and Right a day, Up and Down a week, Home and End the ends of the week,
62
+ * Page a month and Shift+Page a year. Walking out of the month on screen
63
+ * turns the page rather than stopping at the edge.
64
+ * - A DAY IS CALLED BY ITS DATE. "3" names nothing: a reader arrowing across
65
+ * a month heard a run of numbers with no month, no weekday and no year in
66
+ * any of them.
67
+ * - THE STATE IS EXPOSED, not just drawn: `aria-selected` on the chosen days
68
+ * and `aria-current="date"` on today, which is the difference between a
69
+ * ring somebody can see and a fact somebody can hear.
70
+ * - A DISABLED DAY STAYS FOCUSABLE and says it is disabled. Skipped instead,
71
+ * a month whose first half is out of bounds swallows every arrow press
72
+ * until the keyboard happens to land somewhere allowed.
73
+ * - A RANGE IS ONE BAND, not two chips and some tinted squares. The grid asks
74
+ * `inRange` about each chosen day's NEIGHBOURS to learn which end it is, so
75
+ * the band's ends are drawn closed and its middle is drawn open. Nothing new
76
+ * is passed in for it: two more props naming the ends would be a second
77
+ * statement of the range that could disagree with `inRange` about where it
78
+ * stops.
79
+ * - A PADDING CELL IS AN EMPTY CELL, not a hidden one. Where the days either
80
+ * side of the month are not drawn (`showOutsideDays: false`, which is what
81
+ * a two-month range view uses), the cell still has to be a `gridcell`: a
82
+ * `row` whose cells are all `aria-hidden` owns nothing, which is a grid
83
+ * with rows a screen reader cannot read and an axe violation
84
+ * (`aria-required-children`) with it. It carries no name, no state and no
85
+ * tab stop, because there is no day there to name, tint or move to.
86
+ */
87
+ export declare function CalendarGrid({ label, year, month, focused, onFocusedChange, onMonthChange, onSelect, selected, inRange, isDisabled, onHover, firstDayOfWeek, showOutsideDays, dayLabel, monthNames, weekdayNames, weekdayMarks, className, }: CalendarGridProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './CalendarGrid.css';
2
+ export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today, } from './CalendarGrid.js';
3
+ export type { CalendarDate, CalendarGridProps } from './CalendarGrid.js';
@@ -0,0 +1,2 @@
1
+ export { CalendarGrid, compareDays, daysInMonth, sameDay, shiftDay, shiftMonth, today } from '../chunk-GXQ3B46I.js';
2
+ import '../chunk-ODEQTPFM.js';