@crewlethq/ui 0.2.0 → 0.4.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 +164 -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-RLR254LD.css +450 -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 +119 -0
  62. package/dist/CodeBlock/index.d.ts +3 -0
  63. package/dist/CodeBlock/index.js +7 -0
  64. package/dist/CodeBlock-GYNJ2HI6.css +188 -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 +64 -0
  78. package/dist/Copyable/Copyable.d.ts +42 -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 +100 -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 +126 -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 +101 -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 +153 -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 +67 -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-2HQR4U4D.js +143 -0
  364. package/dist/chunk-2PRH365R.js +74 -0
  365. package/dist/chunk-2ZQMA2WB.js +57 -0
  366. package/dist/chunk-34VGEDVV.js +907 -0
  367. package/dist/chunk-3CZ7XAVY.js +139 -0
  368. package/dist/chunk-3EYF6HKB.js +135 -0
  369. package/dist/chunk-3QRYCPXQ.js +116 -0
  370. package/dist/chunk-3ZP55QZE.js +40 -0
  371. package/dist/chunk-53DVJCVW.js +14 -0
  372. package/dist/chunk-5C5YMZQU.js +51 -0
  373. package/dist/chunk-5EKIWVOR.js +132 -0
  374. package/dist/chunk-5KPQ6D7N.js +54 -0
  375. package/dist/chunk-5SDBMKUO.js +297 -0
  376. package/dist/chunk-5VNUYO76.js +62 -0
  377. package/dist/chunk-5WS6L6FA.js +114 -0
  378. package/dist/chunk-6ZFVFA56.js +108 -0
  379. package/dist/chunk-7EM5T4ME.js +39 -0
  380. package/dist/chunk-7FZ53WDJ.js +163 -0
  381. package/dist/chunk-7HPRF5XN.js +525 -0
  382. package/dist/chunk-7RPGY3JE.js +43 -0
  383. package/dist/chunk-A2UXBCLO.js +48 -0
  384. package/dist/chunk-AV2DXAEL.js +27 -0
  385. package/dist/chunk-BHHIIK3M.js +17 -0
  386. package/dist/chunk-BZFWDIV6.js +9 -0
  387. package/dist/chunk-BZYDZBAN.js +123 -0
  388. package/dist/chunk-CMEE37QJ.js +628 -0
  389. package/dist/chunk-D35VTV2Z.js +106 -0
  390. package/dist/chunk-DD5BBGBE.js +162 -0
  391. package/dist/chunk-EN6K2IFA.js +256 -0
  392. package/dist/chunk-ESCO4XYW.js +144 -0
  393. package/dist/chunk-EUCC37WY.js +14 -0
  394. package/dist/chunk-EV6IMYJ6.js +62 -0
  395. package/dist/chunk-F27EPQ7D.js +68 -0
  396. package/dist/chunk-F4PJZ4ED.js +245 -0
  397. package/dist/chunk-F6OE5FH3.js +49 -0
  398. package/dist/chunk-FBZAKNSX.js +263 -0
  399. package/dist/chunk-FEFTGVMF.js +46 -0
  400. package/dist/chunk-GTOUGQQK.js +147 -0
  401. package/dist/chunk-GXQ3B46I.js +216 -0
  402. package/dist/chunk-H4FBTAYS.js +130 -0
  403. package/dist/chunk-HOXGBLEY.js +37 -0
  404. package/dist/chunk-HQNHV7D6.js +54 -0
  405. package/dist/chunk-HZ5XZNPS.js +98 -0
  406. package/dist/chunk-IAJLHVUA.js +28 -0
  407. package/dist/chunk-IJ7QXNIJ.js +1 -0
  408. package/dist/chunk-ITHXJHBB.js +280 -0
  409. package/dist/chunk-JCSA3XVH.js +32 -0
  410. package/dist/chunk-KLJCCMF3.js +97 -0
  411. package/dist/chunk-LWKJQTOM.js +77 -0
  412. package/dist/chunk-MNAXYY3R.js +215 -0
  413. package/dist/chunk-NDCATSW7.js +229 -0
  414. package/dist/chunk-NN62JQLR.js +29 -0
  415. package/dist/chunk-NPZY6YYL.js +251 -0
  416. package/dist/chunk-NTRZGNEX.js +529 -0
  417. package/dist/chunk-O6232G37.js +273 -0
  418. package/dist/chunk-O67VF5MS.js +58 -0
  419. package/dist/chunk-ODEQTPFM.js +6 -0
  420. package/dist/chunk-OFHBK7RI.js +498 -0
  421. package/dist/chunk-PNFASD6F.js +98 -0
  422. package/dist/chunk-PQADV6P6.js +19 -0
  423. package/dist/chunk-PZSWF74H.js +15 -0
  424. package/dist/chunk-Q4ZPPART.js +26 -0
  425. package/dist/chunk-QEUY3A5P.js +186 -0
  426. package/dist/chunk-QNCVHRZL.js +17 -0
  427. package/dist/chunk-QVE4GJAT.js +15 -0
  428. package/dist/chunk-QYOFACSP.js +36 -0
  429. package/dist/chunk-RA2ULG6H.js +29 -0
  430. package/dist/chunk-RDGD7Z7I.js +350 -0
  431. package/dist/chunk-RK4XPHVG.js +16 -0
  432. package/dist/chunk-RSAQOKH3.js +38 -0
  433. package/dist/chunk-S2XHHEW4.js +84 -0
  434. package/dist/chunk-S4GZWSKR.js +137 -0
  435. package/dist/chunk-SFZOKW2G.js +52 -0
  436. package/dist/chunk-UG46QBLT.js +325 -0
  437. package/dist/chunk-UOGSZKLT.js +134 -0
  438. package/dist/chunk-V2XMNLMS.js +52 -0
  439. package/dist/chunk-W4ENKCXJ.js +40 -0
  440. package/dist/chunk-W5J7R5EB.js +107 -0
  441. package/dist/chunk-WNI2WSJF.js +27 -0
  442. package/dist/chunk-WOYYD2YR.js +823 -0
  443. package/dist/chunk-WQX73TWF.js +1652 -0
  444. package/dist/chunk-XDTYBF2F.js +36 -0
  445. package/dist/chunk-XN4JBAN3.js +32 -0
  446. package/dist/chunk-XV6WRMBC.js +211 -0
  447. package/dist/chunk-YLYOWZ4V.js +33 -0
  448. package/dist/chunk-YODNNSZL.js +63 -0
  449. package/dist/chunk-ZCR6YGQ4.js +1 -0
  450. package/dist/chunk-ZFATEERP.js +144 -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 +14898 -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 +82 -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,100 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ /**
3
+ * How a row of chips behaves: several on at once, or exactly one.
4
+ *
5
+ * The two are different CONTROLS, not two looks. A toggle group is a set of
6
+ * independent switches, each a button with a pressed state that Tab reaches;
7
+ * a radio group is one choice, where the arrows move inside it and Tab steps
8
+ * past the whole thing. A screen reader is told which of the two it is looking
9
+ * at, so this is a prop rather than a styling flag.
10
+ */
11
+ export type FilterChipSemantics = 'toggle' | 'radio';
12
+ /**
13
+ * Whether an arrow key APPLIES the filter it lands on, or only moves to it.
14
+ *
15
+ * `automatic` is the platform's own radio group and the default: the choice
16
+ * changes as focus moves, which costs nothing where the choice costs nothing.
17
+ *
18
+ * `manual` moves focus alone, and Enter or Space applies — which a real
19
+ * button already turns into its own click. A filter row is the one place that
20
+ * is routinely wrong: a chip row that drives a URL parameter re-runs the
21
+ * screen's query on every change, so arrowing across five chips under
22
+ * `automatic` fires five queries nobody asked for and redraws the list under
23
+ * the reader four times on the way past.
24
+ *
25
+ * It says nothing about a `toggle` row, which has no arrow keys to qualify:
26
+ * every chip there is its own tab stop and its own switch.
27
+ */
28
+ export type FilterChipActivation = 'automatic' | 'manual';
29
+ /** The attribute the group finds its own chips by, without a registry to keep. */
30
+ export declare const FILTER_CHIP_ATTRIBUTE = "data-crewlet-filter-chip";
31
+ export interface FilterChipProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'type' | 'value' | 'onChange'> {
32
+ /** Whether this filter is on. Inside a radio group it comes from the group. */
33
+ pressed?: boolean | undefined;
34
+ /** Called with what the state would become. */
35
+ onPressedChange?: ((pressed: boolean) => void) | undefined;
36
+ /** How many rows this filter leaves. Drawn after the label, in the chip's ink. */
37
+ count?: number | string | undefined;
38
+ /** What this chip stands for inside a radio group. */
39
+ value?: string | undefined;
40
+ children: ReactNode;
41
+ }
42
+ /**
43
+ * A filter that is off, or on.
44
+ *
45
+ * NEUTRAL UNTIL IT IS ON, and then it takes the accent. The accent is the one
46
+ * colour that means "where the reader is", and the thing currently narrowing
47
+ * the list is exactly that: the reader's own position in the data. A row of
48
+ * chips accented at rest would spend the colour on controls none of which is
49
+ * doing anything.
50
+ *
51
+ * It is a real `<button type="button">`. The chip this replaces declared no
52
+ * type, so every one of them inside a form submitted it.
53
+ */
54
+ export declare function FilterChip({ pressed, onPressedChange, count, value, className, onClick, children, ...rest }: FilterChipProps): import("react/jsx-runtime").JSX.Element;
55
+ export interface FilterChipGroupProps {
56
+ /**
57
+ * What the row filters, read before the chips themselves: "Event kind",
58
+ * "Seat". REQUIRED, because a row of chips with no name is a row of words a
59
+ * screen reader reads with nothing to hang them on.
60
+ */
61
+ label: string;
62
+ semantics?: FilterChipSemantics | undefined;
63
+ /** Whether the arrows apply the filter they land on. Radio rows only. */
64
+ activate?: FilterChipActivation | undefined;
65
+ /**
66
+ * The sentence a manual row is described by, or `null` for none where the
67
+ * screen already says it elsewhere. Defaults to naming the key that
68
+ * applies, because a radio group that does not select as it moves is the
69
+ * unusual one and nothing else on the row says so.
70
+ */
71
+ activateHint?: string | null | undefined;
72
+ /** The chosen value in radio mode. `null` is a deliberate none. */
73
+ value?: string | null | undefined;
74
+ onValueChange?: ((value: string | null) => void) | undefined;
75
+ /**
76
+ * Whether a second press on the chosen chip clears it. Off by default: a
77
+ * choice that can empty itself leaves a reader in a state with no answer,
78
+ * and most rows carry an explicit "All" chip instead.
79
+ */
80
+ allowNone?: boolean | undefined;
81
+ /** Hide the label visually. It stays in the accessibility tree. */
82
+ hideLabel?: boolean | undefined;
83
+ className?: string | undefined;
84
+ children?: ReactNode;
85
+ }
86
+ /**
87
+ * A named row of filters.
88
+ *
89
+ * In radio mode the arrows move AND choose by default, which is what the
90
+ * platform's own radio group does: a reader arrowing through a set of choices
91
+ * is choosing, and a group where focus and selection come apart makes them
92
+ * press Space after every move for a reason they could not name.
93
+ *
94
+ * `activate="manual"` is where the reason CAN be named: a row driving a URL
95
+ * parameter runs the screen's query again on every change, and there the
96
+ * moves a reader makes on the way to the chip they want are queries nobody
97
+ * asked for. Then the row says which key applies, because a radio group that
98
+ * does not select as it moves is the unusual one.
99
+ */
100
+ export declare function FilterChipGroup({ label, semantics, activate, activateHint, value, onValueChange, allowNone, hideLabel, className, children, }: FilterChipGroupProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './FilterChip.css';
2
+ export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from './FilterChip.js';
3
+ export type { FilterChipActivation, FilterChipGroupProps, FilterChipProps, FilterChipSemantics, } from './FilterChip.js';
@@ -0,0 +1,3 @@
1
+ export { FILTER_CHIP_ATTRIBUTE, FilterChip, FilterChipGroup } from '../chunk-ZFATEERP.js';
2
+ import '../chunk-BZFWDIV6.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,107 @@
1
+ /*
2
+ * The filter chip: neutral until it is on, and then the accent.
3
+ *
4
+ * WHY THE ACCENT HERE AND NOWHERE ELSE IN A ROW OF CONTROLS. The accent means
5
+ * "where the reader is". The filter currently narrowing a list is exactly
6
+ * that, so it is the one control in a toolbar entitled to the colour; a chip
7
+ * that carried it at rest would spend it on a row where nothing is happening.
8
+ *
9
+ * The pressed ground is the accent SOFT tint under the accent INK, the same
10
+ * measured pair a Tag uses, never the accent fill with a label on it: the fill
11
+ * step is measured as a mark at 3:1 and would put its own label under 4.5:1.
12
+ */
13
+
14
+ .crewlet-filter-chip-group {
15
+ display: flex;
16
+ align-items: center;
17
+ flex-wrap: wrap;
18
+ gap: var(--spacing-2);
19
+ min-width: 0;
20
+ }
21
+
22
+ /* The micro register: the same label step a Text `label` and a stat draw. */
23
+ .crewlet-filter-chip-group__label {
24
+ font-size: var(--font-size-2xs);
25
+ font-weight: var(--font-weight-medium);
26
+ letter-spacing: var(--font-letter-spacing-wide);
27
+ text-transform: uppercase;
28
+ color: var(--color-text-tertiary);
29
+ }
30
+
31
+ .crewlet-filter-chip {
32
+ display: inline-flex;
33
+ align-items: center;
34
+ gap: var(--spacing-1);
35
+ height: var(--size-control-sm);
36
+ /* The engine's own padding, and a full step tighter than 0.2.0 drew: a
37
+ Filter menu puts six of these in one row under a list, and the extra 4px
38
+ on each side was what pushed the sixth onto a second line. */
39
+ padding: 0 var(--spacing-2);
40
+ border: 1px solid var(--color-border-default);
41
+ border-radius: var(--radius-pill);
42
+ background: transparent;
43
+ /*
44
+ * The QUIET step at rest. A chip that is off is an option a reader has not
45
+ * taken and the row of them is scanned rather than read; the one that is on
46
+ * is the only thing in the row entitled to say so, and it says it in the
47
+ * accent.
48
+ */
49
+ color: var(--color-text-tertiary);
50
+ font-family: var(--font-family-sans);
51
+ font-size: var(--font-size-xs);
52
+ /* Regular, which is what the engine's chip inherits from the document. The
53
+ row is a set of equal options and a medium weight on every one of them
54
+ made a toolbar of six read as six headings. */
55
+ font-weight: var(--font-weight-regular);
56
+ line-height: 1;
57
+ white-space: nowrap;
58
+ cursor: pointer;
59
+ box-sizing: border-box;
60
+ transition:
61
+ background var(--motion-duration-fast) var(--motion-easing-default),
62
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
63
+ color var(--motion-duration-fast) var(--motion-easing-default);
64
+ }
65
+
66
+ .crewlet-filter-chip:hover {
67
+ border-color: var(--color-border-hover);
68
+ color: var(--color-text-primary);
69
+ }
70
+
71
+ .crewlet-filter-chip:focus-visible {
72
+ outline: 2px solid var(--color-focus);
73
+ outline-offset: 2px;
74
+ }
75
+
76
+ .crewlet-filter-chip:disabled {
77
+ opacity: 0.5;
78
+ cursor: not-allowed;
79
+ }
80
+
81
+ .crewlet-filter-chip[aria-pressed='true'],
82
+ .crewlet-filter-chip[aria-checked='true'] {
83
+ background: var(--color-brand-accent-soft);
84
+ border-color: var(--color-brand-accent-soft-strong);
85
+ color: var(--color-brand-accent-ink);
86
+ }
87
+
88
+ /*
89
+ * The count takes the chip's own ink, in both states.
90
+ *
91
+ * The engine draws it in the DECORATION step, which measures 2.25:1 at its
92
+ * worst and is the one step this package refuses to put a word on: a number
93
+ * that says how far a filter narrows a list is a fact a reader acts on, not a
94
+ * hairline. It was already one step quieter than the label here, and the label
95
+ * has since come down to meet it, so inheriting is what the engine's two-tone
96
+ * pill now looks like anyway, one measured step higher.
97
+ */
98
+ .crewlet-filter-chip__count {
99
+ font-variant-numeric: tabular-nums;
100
+ color: inherit;
101
+ }
102
+
103
+ @media (prefers-reduced-motion: reduce) {
104
+ .crewlet-filter-chip {
105
+ transition: none;
106
+ }
107
+ }
@@ -0,0 +1,2 @@
1
+ export { useFullscreen } from './useFullscreen.js';
2
+ export type { Fullscreen } from './useFullscreen.js';
@@ -0,0 +1 @@
1
+ export { useFullscreen } from '../chunk-XDTYBF2F.js';
@@ -0,0 +1,32 @@
1
+ /**
2
+ * The browser's fullscreen, for one element.
3
+ *
4
+ * WHAT IT IS FOR. A canvas, a chart or a diagram is the one thing on a screen
5
+ * that genuinely wants the whole window, and it is drawn from ONE element's
6
+ * subtree: a fullscreen element renders only what is inside it, so the surface
7
+ * that goes fullscreen has to be the one holding its own toolbar, its dialogs
8
+ * and its overlays. That is also why an overlay portals into the nearest
9
+ * `LayerHost` rather than into the body (see the Layer module): portalled to
10
+ * the body it would be outside the fullscreen element and simply not painted.
11
+ *
12
+ * NOT DRAWN WHERE THE API IS MISSING. iPhone Safari offers no element
13
+ * fullscreen at all, and a control that is drawn and then fails is worse than
14
+ * one that was never there, so `supported` is what a caller renders on.
15
+ *
16
+ * `supported` ASKS THE DOCUMENT, NOT THE ELEMENT. The engine's version read
17
+ * the element's own `requestFullscreen` in an effect, which answers false for
18
+ * as long as the ref is empty: a control inside a panel that mounts later was
19
+ * never drawn at all, on browsers that support it perfectly well.
20
+ */
21
+ import { type RefObject } from 'react';
22
+ export interface Fullscreen {
23
+ /** Whether this browser offers element fullscreen. A control that draws on it. */
24
+ supported: boolean;
25
+ /** Whether THIS element is the one the document is showing fullscreen. */
26
+ active: boolean;
27
+ enter: () => void;
28
+ exit: () => void;
29
+ toggle: () => void;
30
+ }
31
+ /** Drives fullscreen for `ref`, and reports whether it is the element showing. */
32
+ export declare function useFullscreen(ref: RefObject<HTMLElement | null>): Fullscreen;
@@ -0,0 +1,45 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ export type IconButtonSize = 'sm' | 'md' | 'lg';
3
+ export type IconButtonVariant =
4
+ /** The bordered square: a secondary Button with no room for a label. */
5
+ 'secondary'
6
+ /** Transparent, neutral ink, a surface tint on hover. */
7
+ | 'ghost'
8
+ /** Transparent, the accent on hover. */
9
+ | 'ghost-brand'
10
+ /** Transparent, the critical hue on hover. */
11
+ | 'ghost-danger'
12
+ /** A soft accent square with a matching boundary: the add beside a label. */
13
+ | 'soft-brand';
14
+ export interface IconButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'aria-label'> {
15
+ /**
16
+ * What the button does, in words. REQUIRED, and not a convenience: an
17
+ * icon-only control has no text, so without this it is announced as
18
+ * "button" and a reader has to press it to find out what it was.
19
+ */
20
+ label: string;
21
+ /** The glyph. A component from @crewlethq/icons/glyphs, not a name. */
22
+ icon?: ReactNode;
23
+ size?: IconButtonSize | undefined;
24
+ variant?: IconButtonVariant | undefined;
25
+ /** Sets `aria-pressed`: a toggle that is on. */
26
+ pressed?: boolean | undefined;
27
+ /** Unavailable, and why. See Button's own prop for why it is not `disabled`. */
28
+ disabledReason?: string | undefined;
29
+ /** Render the single child element with these classes instead of a button. */
30
+ asChild?: boolean | undefined;
31
+ children?: ReactNode;
32
+ }
33
+ /**
34
+ * A square icon-only control: a row action, a copy, a drag handle, the close
35
+ * in a dialog's corner.
36
+ *
37
+ * ITS SMALLEST STEP IS 24px, not the 22 it was. A pointer target under 24px
38
+ * fails WCAG 2.2, and at compact density a 22px square was 18: this size, like
39
+ * every control step, is `--size-control-*`, which floors at 24 for that
40
+ * reason.
41
+ *
42
+ * Distinct from Button, which has a label slot and a text size. Anything with
43
+ * a word beside the glyph is a Button.
44
+ */
45
+ export declare const IconButton: import("react").ForwardRefExoticComponent<IconButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,3 @@
1
+ import './IconButton.css';
2
+ export { IconButton } from './IconButton.js';
3
+ export type { IconButtonProps, IconButtonSize, IconButtonVariant } from './IconButton.js';
@@ -0,0 +1,3 @@
1
+ export { IconButton } from '../chunk-F27EPQ7D.js';
2
+ import '../chunk-BZFWDIV6.js';
3
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,158 @@
1
+ /*
2
+ * IconButton: a square icon-only control.
3
+ *
4
+ * Three square steps, each a --size-control-* token, so an icon button sits
5
+ * exactly as tall as the button, select or input beside it at every density,
6
+ * and the smallest cannot fall under the 24px a pointer target needs.
7
+ *
8
+ * THE CORNER IS THE BUTTON'S. An icon-only control is the square case of the
9
+ * same control, so it takes --radius-md: a toolbar of six-pixel squares
10
+ * beside an eight-pixel button reads as two families of control.
11
+ */
12
+
13
+ .crewlet-icon-btn {
14
+ display: inline-flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ padding: 0;
18
+ background: transparent;
19
+ border: 1px solid transparent;
20
+ border-radius: var(--radius-md);
21
+ cursor: pointer;
22
+ line-height: 1;
23
+ flex-shrink: 0;
24
+ transition:
25
+ background var(--motion-duration-fast) var(--motion-easing-default),
26
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
27
+ color var(--motion-duration-fast) var(--motion-easing-default);
28
+ }
29
+
30
+ /* An outline, never a shadow alone: forced-colors mode keeps one and drops
31
+ the other. */
32
+ .crewlet-icon-btn:focus-visible {
33
+ outline: 2px solid var(--color-focus);
34
+ outline-offset: 2px;
35
+ }
36
+
37
+ .crewlet-icon-btn:disabled,
38
+ .crewlet-icon-btn[aria-disabled='true'] {
39
+ opacity: 0.5;
40
+ cursor: not-allowed;
41
+ }
42
+
43
+ .crewlet-icon-btn:disabled {
44
+ pointer-events: none;
45
+ }
46
+
47
+ .crewlet-icon-btn--sm {
48
+ width: var(--size-control-sm);
49
+ height: var(--size-control-sm);
50
+ }
51
+
52
+ .crewlet-icon-btn--md {
53
+ width: var(--size-control-md);
54
+ height: var(--size-control-md);
55
+ }
56
+
57
+ .crewlet-icon-btn--lg {
58
+ width: var(--size-control-lg);
59
+ height: var(--size-control-lg);
60
+ }
61
+
62
+ /*
63
+ * The glyph inside follows the button's step, at the ratio a label sets: a
64
+ * medium button draws its leading glyph at its own 13px text, so a square one
65
+ * drawing a 16px glyph put a heavier mark in the same toolbar row.
66
+ */
67
+ .crewlet-icon-btn--sm .crewlet-glyph {
68
+ width: var(--font-size-xs);
69
+ height: var(--font-size-xs);
70
+ }
71
+
72
+ .crewlet-icon-btn--md .crewlet-glyph {
73
+ width: var(--font-size-sm);
74
+ height: var(--font-size-sm);
75
+ }
76
+
77
+ .crewlet-icon-btn--lg .crewlet-glyph {
78
+ width: var(--font-size-xl);
79
+ height: var(--font-size-xl);
80
+ }
81
+
82
+ /*
83
+ * secondary: the bordered square. The same surface, boundary and states as a
84
+ * secondary Button, for an icon-only control that has to read as a control
85
+ * with nothing around it to say so: a step in a toolbar, a month's back and
86
+ * forward, an add beside a field. Without it a call site drew a Button with
87
+ * no label and squared it off with a stylesheet of its own.
88
+ */
89
+ .crewlet-icon-btn--secondary {
90
+ background: var(--color-surface-subtle);
91
+ border-color: var(--color-border-default);
92
+ color: var(--color-text-primary);
93
+ }
94
+
95
+ .crewlet-icon-btn--secondary:hover:not(:disabled):not([aria-disabled='true']) {
96
+ background: var(--color-surface-elevated);
97
+ border-color: var(--color-border-hover);
98
+ }
99
+
100
+ .crewlet-icon-btn--secondary:active:not(:disabled):not([aria-disabled='true']) {
101
+ background: var(--color-surface-pressed);
102
+ }
103
+
104
+ /* ghost: transparent, neutral ink, a mild tint on hover. */
105
+ .crewlet-icon-btn--ghost {
106
+ color: var(--color-text-secondary);
107
+ }
108
+
109
+ .crewlet-icon-btn--ghost:hover:not(:disabled):not([aria-disabled='true']) {
110
+ background: var(--color-surface-hover);
111
+ color: var(--color-text-primary);
112
+ }
113
+
114
+ /* ghost-brand: transparent, the accent on hover. */
115
+ .crewlet-icon-btn--ghost-brand {
116
+ color: var(--color-text-tertiary);
117
+ }
118
+
119
+ .crewlet-icon-btn--ghost-brand:hover:not(:disabled):not([aria-disabled='true']) {
120
+ background: var(--color-brand-accent-soft);
121
+ border-color: var(--color-brand-accent-soft-strong);
122
+ color: var(--color-brand-accent-ink);
123
+ }
124
+
125
+ /* ghost-danger: transparent, the critical hue on hover, from the token rather
126
+ than the rose literal it used to carry. */
127
+ .crewlet-icon-btn--ghost-danger {
128
+ color: var(--color-text-tertiary);
129
+ }
130
+
131
+ .crewlet-icon-btn--ghost-danger:hover:not(:disabled):not([aria-disabled='true']) {
132
+ background: var(--color-feedback-danger-soft);
133
+ color: var(--color-feedback-danger-ink);
134
+ }
135
+
136
+ /* soft-brand: a tinted square with a matching boundary. */
137
+ .crewlet-icon-btn--soft-brand {
138
+ background: var(--color-brand-accent-soft);
139
+ border-color: var(--color-brand-accent-soft-strong);
140
+ color: var(--color-brand-accent-ink);
141
+ }
142
+
143
+ .crewlet-icon-btn--soft-brand:hover:not(:disabled):not([aria-disabled='true']) {
144
+ background: var(--color-brand-accent-soft-strong);
145
+ border-color: var(--color-brand-accent);
146
+ }
147
+
148
+ /* A toggle that is on, drawn from the state a screen reader is already told. */
149
+ .crewlet-icon-btn[aria-pressed='true'] {
150
+ background: var(--color-brand-accent-soft);
151
+ color: var(--color-brand-accent-ink);
152
+ }
153
+
154
+ @media (prefers-reduced-motion: reduce) {
155
+ .crewlet-icon-btn {
156
+ transition: none;
157
+ }
158
+ }
@@ -0,0 +1,37 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ import { type AvatarShape } from '../Avatar/index.js';
3
+ export interface ImageUploadProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect'> {
4
+ /** Current image source. When set, the control shows the image and the overlay label reads "Change". */
5
+ src?: string | undefined;
6
+ /** Display name used for the initials fallback when no image is set. */
7
+ name?: string | undefined;
8
+ /** Rendered width and height in pixels. */
9
+ size?: number | undefined;
10
+ /**
11
+ * Outline shape passed through to the preview and fallback. Defaults to
12
+ * "square", as Avatar does: what this control takes is normally a company
13
+ * logo, and a wide mark cropped into a circle loses its ends.
14
+ */
15
+ shape?: AvatarShape | undefined;
16
+ /** When true, the control is display only: no overlay, no remove button, no file picker. */
17
+ readOnly?: boolean | undefined;
18
+ /** When true, the control shows a spinner and ignores interaction while an upload is in flight. */
19
+ uploading?: boolean | undefined;
20
+ /** Accepted file types for the hidden file input. Defaults to "image/*". */
21
+ accept?: string | undefined;
22
+ /** Called with the raw selected File. The upload happens over the network, so no client-side encoding is performed. */
23
+ onSelect: (file: File) => void;
24
+ /** Called when the remove button is pressed. The button only renders when an image is set and the control is editable. */
25
+ onRemove?: (() => void) | undefined;
26
+ }
27
+ /**
28
+ * ImageUpload, a click-to-upload affordance built on top of Avatar. Shows the
29
+ * current image (or an initials fallback), an overlay with a camera icon and
30
+ * an "Upload" or "Change" label (shown on hover, or always while no image is
31
+ * set), a hidden file input, a remove button, and an uploading state. One
32
+ * primitive covers both square logos and round profile pictures.
33
+ *
34
+ * The selection callback hands back the raw File rather than a data URL because
35
+ * the upload now happens over the network.
36
+ */
37
+ export declare const ImageUpload: ({ src, name, size, shape, readOnly, uploading, accept, onSelect, onRemove, className, style, ...rest }: ImageUploadProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './ImageUpload.css';
2
+ export { ImageUpload } from './ImageUpload.js';
3
+ export type { ImageUploadProps } from './ImageUpload.js';
@@ -0,0 +1,3 @@
1
+ export { ImageUpload } from '../chunk-5WS6L6FA.js';
2
+ import '../chunk-PNFASD6F.js';
3
+ import '../chunk-ODEQTPFM.js';