@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,49 @@
1
+ import { VisuallyHidden } from './chunk-BZFWDIV6.js';
2
+ import { cx } from './chunk-ODEQTPFM.js';
3
+ import './Meter-SKOOXQBC.css';
4
+ import { useId } from 'react';
5
+ import { jsxs, jsx } from 'react/jsx-runtime';
6
+
7
+ function meterTone(percent) {
8
+ if (percent >= 100) return "danger";
9
+ if (percent >= 75) return "warning";
10
+ return "brand";
11
+ }
12
+ function Meter({
13
+ value,
14
+ max,
15
+ label,
16
+ valueText,
17
+ hint,
18
+ tone,
19
+ size = "default",
20
+ hideLabel = false,
21
+ className,
22
+ ...rest
23
+ }) {
24
+ const labelId = useId();
25
+ const percent = max > 0 ? Math.min(100, Math.max(0, value / max * 100)) : 0;
26
+ const drawn = tone ?? meterTone(percent);
27
+ const trailing = hint ?? valueText;
28
+ return /* @__PURE__ */ jsxs("div", { ...rest, className: cx("crewlet-meter", `crewlet-meter--${size}`, className), children: [
29
+ hideLabel ? /* @__PURE__ */ jsx(VisuallyHidden, { id: labelId, children: label }) : /* @__PURE__ */ jsxs("div", { className: "crewlet-meter__legend", children: [
30
+ /* @__PURE__ */ jsx("span", { id: labelId, className: "crewlet-meter__label", children: label }),
31
+ trailing === void 0 ? null : /* @__PURE__ */ jsx("span", { className: "crewlet-meter__hint", children: trailing })
32
+ ] }),
33
+ /* @__PURE__ */ jsx(
34
+ "div",
35
+ {
36
+ className: "crewlet-meter__track",
37
+ role: "meter",
38
+ "aria-labelledby": labelId,
39
+ "aria-valuenow": value,
40
+ "aria-valuemin": 0,
41
+ "aria-valuemax": max,
42
+ "aria-valuetext": valueText,
43
+ children: /* @__PURE__ */ jsx("div", { className: "crewlet-meter__fill", "data-tone": drawn, style: { width: `${percent}%` } })
44
+ }
45
+ )
46
+ ] });
47
+ }
48
+
49
+ export { Meter, meterTone };
@@ -0,0 +1,77 @@
1
+ import { DisclosureAnatomy } from './chunk-5KPQ6D7N.js';
2
+ import { useHeadingLevel } from './chunk-PQADV6P6.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import './Disclosure-VKBJJIZ7.css';
5
+ import { useState, useId, useCallback } from 'react';
6
+ import { jsxs, jsx } from 'react/jsx-runtime';
7
+
8
+ function Disclosure({
9
+ title,
10
+ meta,
11
+ count,
12
+ mono,
13
+ actions,
14
+ open: controlledOpen,
15
+ defaultOpen = false,
16
+ onOpenChange,
17
+ lazy = false,
18
+ variant = "default",
19
+ size = "default",
20
+ headingLevel,
21
+ className,
22
+ children,
23
+ ...rest
24
+ }) {
25
+ const [uncontrolled, setUncontrolled] = useState(defaultOpen);
26
+ const controlled = controlledOpen !== void 0;
27
+ const open = controlled ? controlledOpen : uncontrolled;
28
+ const level = useHeadingLevel();
29
+ const rid = useId();
30
+ const toggle = useCallback(() => {
31
+ if (!controlled) setUncontrolled(!open);
32
+ onOpenChange?.(!open);
33
+ }, [controlled, onOpenChange, open]);
34
+ return /* @__PURE__ */ jsxs(
35
+ "div",
36
+ {
37
+ ...rest,
38
+ className: cx(
39
+ "crewlet-disclosure",
40
+ `crewlet-disclosure--${variant}`,
41
+ size === "compact" && "crewlet-disclosure--compact",
42
+ className
43
+ ),
44
+ "data-state": open ? "open" : "closed",
45
+ children: [
46
+ /* @__PURE__ */ jsx(
47
+ DisclosureAnatomy,
48
+ {
49
+ open,
50
+ onToggle: toggle,
51
+ title,
52
+ meta,
53
+ count,
54
+ mono,
55
+ actions,
56
+ headingLevel: headingLevel ?? level,
57
+ triggerId: `${rid}-trigger`,
58
+ panelId: `${rid}-panel`
59
+ }
60
+ ),
61
+ lazy && !open ? null : /* @__PURE__ */ jsx(
62
+ "div",
63
+ {
64
+ id: `${rid}-panel`,
65
+ role: "region",
66
+ "aria-labelledby": `${rid}-trigger`,
67
+ className: "crewlet-disclosure__panel",
68
+ hidden: !open,
69
+ children
70
+ }
71
+ )
72
+ ]
73
+ }
74
+ );
75
+ }
76
+
77
+ export { Disclosure };
@@ -0,0 +1,215 @@
1
+ import { useModalLayer, focusables } from './chunk-ITHXJHBB.js';
2
+ import { IconButton } from './chunk-F27EPQ7D.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import './AppShell-NVE6LHNI.css';
5
+ import { createContext, useContext, useId, useState, useRef, useCallback, useEffect, useLayoutEffect, useSyncExternalStore } from 'react';
6
+ import { breakpoint } from '@crewlethq/tokens';
7
+ import { MenuGlyph } from '@crewlethq/icons/glyphs';
8
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
9
+
10
+ var NARROW = `(max-width: ${breakpoint.shell})`;
11
+ var AppShellContext = createContext(null);
12
+ function useAppShell() {
13
+ const shell = useContext(AppShellContext);
14
+ if (!shell) throw new Error("useAppShell must be called inside an <AppShell>.");
15
+ return shell;
16
+ }
17
+ function useMediaMatch(query) {
18
+ const subscribe = useCallback(
19
+ (notify) => {
20
+ if (typeof window === "undefined" || typeof window.matchMedia !== "function") return () => {
21
+ };
22
+ const list = window.matchMedia(query);
23
+ list.addEventListener("change", notify);
24
+ return () => list.removeEventListener("change", notify);
25
+ },
26
+ [query]
27
+ );
28
+ const read = useCallback(
29
+ () => typeof window !== "undefined" && typeof window.matchMedia === "function" ? window.matchMedia(query).matches : false,
30
+ [query]
31
+ );
32
+ return useSyncExternalStore(subscribe, read, () => false);
33
+ }
34
+ function AppShell({
35
+ sidebar,
36
+ topbar,
37
+ banner,
38
+ footer,
39
+ mainId,
40
+ mainRef,
41
+ fill = false,
42
+ navigationKey,
43
+ toggleLabel = "Sections",
44
+ skipLabel = "Skip to content",
45
+ className,
46
+ style,
47
+ children,
48
+ ...rest
49
+ }) {
50
+ const generatedId = useId();
51
+ const railId = `${generatedId}-rail`;
52
+ const main = mainId ?? `${generatedId}-main`;
53
+ const narrow = useMediaMatch(NARROW);
54
+ const [drawerOpen, setDrawerOpen] = useState(false);
55
+ const [scroller, setScroller] = useState(null);
56
+ const [drawerZ, setDrawerZ] = useState(null);
57
+ const rail = useRef(null);
58
+ const closeDrawer = useCallback(() => setDrawerOpen(false), []);
59
+ const openDrawer = useCallback(() => setDrawerOpen(true), []);
60
+ const toggleDrawer = useCallback(() => setDrawerOpen((open) => !open), []);
61
+ useEffect(() => setDrawerOpen(false), [navigationKey]);
62
+ useEffect(() => {
63
+ if (!narrow) setDrawerOpen(false);
64
+ }, [narrow]);
65
+ const setMain = useCallback(
66
+ (element) => {
67
+ setScroller(element);
68
+ if (typeof mainRef === "function") mainRef(element);
69
+ else if (mainRef) mainRef.current = element;
70
+ },
71
+ [mainRef]
72
+ );
73
+ const shell = {
74
+ narrow,
75
+ drawerOpen,
76
+ openDrawer,
77
+ closeDrawer,
78
+ toggleDrawer,
79
+ scroller,
80
+ railId,
81
+ toggleLabel,
82
+ hasRail: sidebar !== void 0 && sidebar !== null
83
+ };
84
+ return /* @__PURE__ */ jsx(AppShellContext.Provider, { value: shell, children: /* @__PURE__ */ jsxs(
85
+ "div",
86
+ {
87
+ ...rest,
88
+ className: cx("crewlet-app-shell", fill && "crewlet-app-shell--fill", className),
89
+ style: drawerZ === null ? style : { ...style, ["--crewlet-app-shell-drawer-z"]: String(drawerZ) },
90
+ children: [
91
+ /* @__PURE__ */ jsx(
92
+ "a",
93
+ {
94
+ className: "crewlet-app-shell__skip",
95
+ href: `#${main}`,
96
+ onClick: (event) => {
97
+ event.preventDefault();
98
+ scroller?.focus();
99
+ },
100
+ children: skipLabel
101
+ }
102
+ ),
103
+ drawerOpen ? /* @__PURE__ */ jsx(ShellDrawer, { rail, onClose: closeDrawer, onZIndex: setDrawerZ }) : null,
104
+ shell.hasRail ? /* @__PURE__ */ jsx(
105
+ "aside",
106
+ {
107
+ ref: rail,
108
+ id: railId,
109
+ className: "crewlet-app-shell__rail",
110
+ "data-open": drawerOpen || void 0,
111
+ role: drawerOpen ? "dialog" : void 0,
112
+ "aria-modal": drawerOpen || void 0,
113
+ "aria-label": drawerOpen ? toggleLabel : void 0,
114
+ children: sidebar
115
+ }
116
+ ) : null,
117
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-app-shell__column", children: [
118
+ topbar,
119
+ banner ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__banner", children: banner }) : null,
120
+ /* @__PURE__ */ jsx("main", { id: main, ref: setMain, className: "crewlet-app-shell__main", tabIndex: -1, children: /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__content", children }) }),
121
+ footer
122
+ ] })
123
+ ]
124
+ }
125
+ ) });
126
+ }
127
+ function ShellDrawer({
128
+ rail,
129
+ onClose,
130
+ onZIndex
131
+ }) {
132
+ const layer = useModalLayer({
133
+ onClose,
134
+ // The row for the screen the reader is on, which is where the rail's own
135
+ // highlight already points, else the first control in it.
136
+ initialFocus: () => {
137
+ const element = rail.current;
138
+ if (!element) return null;
139
+ return element.querySelector('[aria-current="page"]') ?? focusables(element)[0] ?? null;
140
+ }
141
+ });
142
+ const { panelRef, zIndex } = layer;
143
+ useEffect(() => {
144
+ onZIndex(zIndex);
145
+ return () => onZIndex(null);
146
+ }, [onZIndex, zIndex]);
147
+ useLayoutEffect(() => {
148
+ panelRef(rail.current);
149
+ return () => panelRef(null);
150
+ }, [panelRef, rail]);
151
+ return /* @__PURE__ */ jsx(
152
+ "div",
153
+ {
154
+ className: "crewlet-app-shell__veil",
155
+ ref: layer.veilRef,
156
+ role: "presentation",
157
+ style: { zIndex }
158
+ }
159
+ );
160
+ }
161
+ function AppShellRail({ header, footer, className, children }) {
162
+ return /* @__PURE__ */ jsxs("div", { className: cx("crewlet-app-shell__rail-inner", className), children: [
163
+ header ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__rail-head", children: header }) : null,
164
+ /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__rail-body", children }),
165
+ footer ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__rail-foot", children: footer }) : null
166
+ ] });
167
+ }
168
+ function AppShellRailRow({ icon, trailing, onClick, label, className, children }) {
169
+ const inside = /* @__PURE__ */ jsxs(Fragment, { children: [
170
+ icon ? /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-icon", "aria-hidden": true, children: icon }) : null,
171
+ /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-label", children }),
172
+ trailing ? /* @__PURE__ */ jsx("span", { className: "crewlet-app-shell__rail-row-trailing", children: trailing }) : null
173
+ ] });
174
+ if (onClick === void 0) return /* @__PURE__ */ jsx("div", { className: cx("crewlet-app-shell__rail-row", className), children: inside });
175
+ return /* @__PURE__ */ jsx(
176
+ "button",
177
+ {
178
+ type: "button",
179
+ className: cx("crewlet-app-shell__rail-row", "crewlet-app-shell__rail-row--action", className),
180
+ "aria-label": label,
181
+ onClick,
182
+ children: inside
183
+ }
184
+ );
185
+ }
186
+ function AppShellToggle({ className }) {
187
+ const { drawerOpen, toggleDrawer, railId, toggleLabel, hasRail } = useAppShell();
188
+ if (!hasRail) return null;
189
+ return /* @__PURE__ */ jsx("span", { className: cx("crewlet-app-shell__toggle", className), children: /* @__PURE__ */ jsx(
190
+ IconButton,
191
+ {
192
+ label: toggleLabel,
193
+ icon: /* @__PURE__ */ jsx(MenuGlyph, { size: "md" }),
194
+ size: "md",
195
+ "aria-expanded": drawerOpen,
196
+ "aria-controls": railId,
197
+ "aria-haspopup": "dialog",
198
+ onClick: toggleDrawer
199
+ }
200
+ ) });
201
+ }
202
+ function AppShellTopbar({ title, titleId, actions, className, children, ...rest }) {
203
+ return /* @__PURE__ */ jsxs("header", { ...rest, className: cx("crewlet-app-shell__topbar", className), children: [
204
+ /* @__PURE__ */ jsx(AppShellToggle, {}),
205
+ title === void 0 ? null : /* @__PURE__ */ jsx("h1", { className: "crewlet-app-shell__title", id: titleId, children: title }),
206
+ children,
207
+ actions ? /* @__PURE__ */ jsx("div", { className: "crewlet-app-shell__actions", children: actions }) : null
208
+ ] });
209
+ }
210
+ AppShell.Rail = AppShellRail;
211
+ AppShell.RailRow = AppShellRailRow;
212
+ AppShell.Topbar = AppShellTopbar;
213
+ AppShell.Toggle = AppShellToggle;
214
+
215
+ export { AppShell, AppShellRail, AppShellRailRow, AppShellToggle, AppShellTopbar, useAppShell };
@@ -0,0 +1,29 @@
1
+ import { cx } from './chunk-ODEQTPFM.js';
2
+ import './InlineCode-6WSR5COL.css';
3
+ import { jsx } from 'react/jsx-runtime';
4
+
5
+ function InlineCode({
6
+ variant = "default",
7
+ tone = "default",
8
+ truncate = false,
9
+ className,
10
+ children,
11
+ ...rest
12
+ }) {
13
+ return /* @__PURE__ */ jsx(
14
+ "code",
15
+ {
16
+ ...rest,
17
+ className: cx(
18
+ "crewlet-inline-code",
19
+ `crewlet-inline-code--${variant}`,
20
+ tone === "inherit" && "crewlet-inline-code--inherit",
21
+ truncate && "crewlet-inline-code--truncate",
22
+ className
23
+ ),
24
+ children
25
+ }
26
+ );
27
+ }
28
+
29
+ export { InlineCode };
@@ -0,0 +1,251 @@
1
+ import { useLayerContainer } from './chunk-7RPGY3JE.js';
2
+ import { VisuallyHidden } from './chunk-BZFWDIV6.js';
3
+ import { cx } from './chunk-ODEQTPFM.js';
4
+ import './Toaster-NVDCEIP5.css';
5
+ import { createContext, useMemo, useState, useRef, useEffect, useContext, useCallback } from 'react';
6
+ import { createPortal } from 'react-dom';
7
+ import { CloseGlyph, ErrorFillGlyph, WarningFillGlyph, CheckCircleFillGlyph, InfoFillGlyph } from '@crewlethq/icons/glyphs';
8
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
9
+
10
+ var ICONS = {
11
+ info: /* @__PURE__ */ jsx(InfoFillGlyph, { size: "md" }),
12
+ success: /* @__PURE__ */ jsx(CheckCircleFillGlyph, { size: "md" }),
13
+ warning: /* @__PURE__ */ jsx(WarningFillGlyph, { size: "md" }),
14
+ danger: /* @__PURE__ */ jsx(ErrorFillGlyph, { size: "md" })
15
+ };
16
+ var TITLES = {
17
+ info: null,
18
+ success: "Success",
19
+ warning: "Heads up",
20
+ danger: "Something went wrong"
21
+ };
22
+ var DURATIONS = {
23
+ info: 4e3,
24
+ success: 4e3,
25
+ warning: 0,
26
+ danger: 0
27
+ };
28
+ var KNOWN = /* @__PURE__ */ new Set(["info", "success", "warning", "danger"]);
29
+ var isKnown = (variant) => KNOWN.has(variant);
30
+ var politeness = (variant) => variant === "danger" || variant === "quota" ? "assertive" : "polite";
31
+ var isToastAction = (value) => {
32
+ if (!value || typeof value !== "object") return false;
33
+ const shape = value;
34
+ return "label" in shape && ("onClick" in shape || "href" in shape);
35
+ };
36
+ var sentences = (parts) => parts.length < 2 ? parts[0] ?? "" : parts.map((part) => /[.!?]$/.test(part) ? part : `${part}.`).join(" ");
37
+ function spoken(toast, titles) {
38
+ const parts = [toast.title, toast.message].filter((part) => typeof part === "string");
39
+ if (parts.length > 0) return parts.join(". ");
40
+ const variant = toast.variant ?? "info";
41
+ return isKnown(variant) ? titles[variant] ?? "Notification" : "Notification";
42
+ }
43
+ function ToastItem({
44
+ toast,
45
+ onDismiss,
46
+ renderAction,
47
+ dismissLabel,
48
+ titles
49
+ }) {
50
+ const variant = toast.variant ?? "info";
51
+ const known = isKnown(variant);
52
+ const { id, version } = toast;
53
+ const duration = toast.duration ?? (known ? DURATIONS[variant] : 0);
54
+ const dismiss = useCallback(() => onDismiss(id), [onDismiss, id]);
55
+ const [paused, setPaused] = useState(false);
56
+ const remaining = useRef(duration);
57
+ useEffect(() => {
58
+ remaining.current = duration;
59
+ }, [duration, version]);
60
+ useEffect(() => {
61
+ if (duration <= 0 || paused) return;
62
+ const startedAt = Date.now();
63
+ const timer = window.setTimeout(dismiss, remaining.current);
64
+ return () => {
65
+ window.clearTimeout(timer);
66
+ remaining.current = Math.max(0, remaining.current - (Date.now() - startedAt));
67
+ };
68
+ }, [duration, paused, version, dismiss]);
69
+ const icon = toast.icon ?? (known ? ICONS[variant] : null);
70
+ const title = toast.title ?? (toast.message === void 0 && known ? titles[variant] : null);
71
+ const action = () => {
72
+ if (toast.action === void 0 || toast.action === null) return null;
73
+ if (!isToastAction(toast.action)) return /* @__PURE__ */ jsx("div", { className: "crewlet-toast__actions", children: toast.action });
74
+ const one = toast.action;
75
+ if (renderAction) return /* @__PURE__ */ jsx("div", { className: "crewlet-toast__actions", children: renderAction(one, { onDismiss: dismiss }) });
76
+ if (one.href) {
77
+ const external = one.external ?? /^https?:\/\//.test(one.href);
78
+ return /* @__PURE__ */ jsx("div", { className: "crewlet-toast__actions", children: /* @__PURE__ */ jsx(
79
+ "a",
80
+ {
81
+ className: "crewlet-toast__action-link",
82
+ href: one.href,
83
+ target: external ? "_blank" : void 0,
84
+ rel: external ? "noreferrer" : void 0,
85
+ onClick: dismiss,
86
+ children: one.label
87
+ }
88
+ ) });
89
+ }
90
+ return /* @__PURE__ */ jsx("div", { className: "crewlet-toast__actions", children: /* @__PURE__ */ jsx(
91
+ "button",
92
+ {
93
+ type: "button",
94
+ className: "crewlet-toast__action-btn",
95
+ onClick: () => {
96
+ one.onClick?.();
97
+ dismiss();
98
+ },
99
+ children: one.label
100
+ }
101
+ ) });
102
+ };
103
+ return (
104
+ /*
105
+ * NO ROLE AND NO LIVE REGION HERE. The two regions at the foot of the
106
+ * stack say what arrived; a toast that also announced itself would be a
107
+ * live region inside a live region, which assistive technology reads
108
+ * twice or not at all.
109
+ */
110
+ /* @__PURE__ */ jsxs(
111
+ "div",
112
+ {
113
+ className: cx("crewlet-toast", `crewlet-toast--${variant}`),
114
+ onMouseEnter: () => setPaused(true),
115
+ onMouseLeave: () => setPaused(false),
116
+ onFocus: () => setPaused(true),
117
+ onBlur: () => setPaused(false),
118
+ children: [
119
+ toast.renderBody ? toast.renderBody({ onDismiss: dismiss, toast }) : /* @__PURE__ */ jsxs(Fragment, { children: [
120
+ icon ? /* @__PURE__ */ jsx("span", { className: "crewlet-toast__icon", "aria-hidden": true, children: icon }) : null,
121
+ /* @__PURE__ */ jsxs("div", { className: "crewlet-toast__body", children: [
122
+ title ? /* @__PURE__ */ jsx("div", { className: "crewlet-toast__title", children: title }) : null,
123
+ toast.message ? /* @__PURE__ */ jsx("div", { className: "crewlet-toast__message", children: toast.message }) : null,
124
+ action()
125
+ ] })
126
+ ] }),
127
+ /* @__PURE__ */ jsx("button", { type: "button", className: "crewlet-toast__dismiss", onClick: dismiss, "aria-label": dismissLabel, children: /* @__PURE__ */ jsx(CloseGlyph, { size: "sm" }) }),
128
+ duration > 0 ? /* @__PURE__ */ jsx(
129
+ "div",
130
+ {
131
+ className: cx("crewlet-toast__progress", paused && "is-paused"),
132
+ style: { animationDuration: `${duration}ms` },
133
+ "aria-hidden": true
134
+ },
135
+ version ?? 0
136
+ ) : null
137
+ ]
138
+ }
139
+ )
140
+ );
141
+ }
142
+ function Toaster({
143
+ toasts,
144
+ onDismiss,
145
+ renderAction,
146
+ position = "bottom-right",
147
+ politeLabel = "Notifications",
148
+ assertiveLabel = "Alerts",
149
+ dismissLabel = "Dismiss notification",
150
+ titles,
151
+ className = ""
152
+ }) {
153
+ const container = useLayerContainer();
154
+ const said = useMemo(() => ({ ...TITLES, ...titles }), [titles]);
155
+ const [polite, setPolite] = useState({ text: "", n: 0 });
156
+ const [assertive, setAssertive] = useState({ text: "", n: 0 });
157
+ const announced = useRef(/* @__PURE__ */ new Set());
158
+ const nth = useRef(0);
159
+ useEffect(() => {
160
+ const live = /* @__PURE__ */ new Set();
161
+ const fresh = { polite: [], assertive: [] };
162
+ for (const toast of toasts) {
163
+ const key = `${toast.id}:${toast.version ?? 0}`;
164
+ live.add(key);
165
+ if (announced.current.has(key)) continue;
166
+ fresh[politeness(toast.variant ?? "info")].push(spoken(toast, said));
167
+ }
168
+ announced.current = live;
169
+ if (fresh.polite.length > 0) {
170
+ nth.current += 1;
171
+ setPolite({ text: sentences(fresh.polite), n: nth.current });
172
+ }
173
+ if (fresh.assertive.length > 0) {
174
+ nth.current += 1;
175
+ setAssertive({ text: sentences(fresh.assertive), n: nth.current });
176
+ }
177
+ }, [toasts, said]);
178
+ if (container === null) return null;
179
+ return createPortal(
180
+ /*
181
+ * ALWAYS MOUNTED, which is the change from 0.2.0. The whole element used
182
+ * to arrive with the first toast, and a live region that is inserted
183
+ * already holding its text is a region most screen readers never announce:
184
+ * they watch a region for changes, and a region's first appearance is not
185
+ * one.
186
+ */
187
+ /* @__PURE__ */ jsxs("div", { className: cx("crewlet-toaster", `crewlet-toaster--${position}`, className), children: [
188
+ toasts.map((toast) => /* @__PURE__ */ jsx(
189
+ ToastItem,
190
+ {
191
+ toast,
192
+ onDismiss,
193
+ renderAction,
194
+ dismissLabel,
195
+ titles: said
196
+ },
197
+ toast.id
198
+ )),
199
+ /* @__PURE__ */ jsxs(VisuallyHidden, { children: [
200
+ /* @__PURE__ */ jsx("span", { role: "status", "aria-live": "polite", "aria-label": politeLabel, children: /* @__PURE__ */ jsx("span", { children: polite.text }, polite.n) }),
201
+ /* @__PURE__ */ jsx("span", { role: "alert", "aria-live": "assertive", "aria-label": assertiveLabel, children: /* @__PURE__ */ jsx("span", { children: assertive.text }, assertive.n) })
202
+ ] })
203
+ ] }),
204
+ container
205
+ );
206
+ }
207
+ var NONE = {
208
+ ok: () => "",
209
+ failed: () => "",
210
+ show: () => "",
211
+ dismiss: () => {
212
+ }
213
+ };
214
+ var ToastContext = createContext(NONE);
215
+ function useToast() {
216
+ return useContext(ToastContext);
217
+ }
218
+ function ToastProvider({ children, position = "bottom-right", renderAction, max = 4 }) {
219
+ const [toasts, setToasts] = useState([]);
220
+ const next = useRef(1);
221
+ const dismiss = useCallback((id) => {
222
+ setToasts((current) => current.filter((toast) => toast.id !== id));
223
+ }, []);
224
+ const show = useCallback(
225
+ (toast) => {
226
+ const id = toast.id ?? `crewlet-toast-${next.current++}`;
227
+ setToasts((current) => {
228
+ const rest = current.filter((one) => one.id !== id);
229
+ const version = (current.find((one) => one.id === id)?.version ?? 0) + 1;
230
+ return [...rest, { ...toast, id, version }].slice(-max);
231
+ });
232
+ return id;
233
+ },
234
+ [max]
235
+ );
236
+ const api = useMemo(
237
+ () => ({
238
+ show,
239
+ dismiss,
240
+ ok: (message, options) => show({ ...options, variant: "success", message }),
241
+ failed: (message, options) => show({ ...options, variant: "danger", message })
242
+ }),
243
+ [show, dismiss]
244
+ );
245
+ return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: api, children: [
246
+ children,
247
+ /* @__PURE__ */ jsx(Toaster, { toasts, onDismiss: dismiss, position, renderAction })
248
+ ] });
249
+ }
250
+
251
+ export { ToastProvider, Toaster, useToast };