@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,185 @@
1
+ /*
2
+ * The anchored panel.
3
+ *
4
+ * It is placed by arithmetic (see Popover.tsx), so this stylesheet owns only
5
+ * what the panel looks like and how it enters. Two positioning modes, and one
6
+ * branch decides which: inside a LayerHost the panel is absolute in that
7
+ * host's own box, and against the window it is fixed, because the coordinates
8
+ * it is given are viewport coordinates and an absolute panel under an
9
+ * unpositioned body is offset by the page's scroll.
10
+ *
11
+ * An OPAQUE surface, never the glass one: glass carries chrome, and anything
12
+ * carrying words sits on something a contrast ratio can be measured against.
13
+ */
14
+
15
+ .crewlet-popover {
16
+ position: fixed;
17
+ background: var(--color-surface-subtle);
18
+ border: 1px solid var(--color-border-default);
19
+ border-radius: var(--radius-lg);
20
+ box-shadow: var(--shadow-xl);
21
+ /* Wide enough that a panel is a panel: below this a popover reads as a
22
+ tooltip that happens to hold controls. */
23
+ min-width: 260px;
24
+ max-width: 380px;
25
+ max-height: min(360px, 60vh);
26
+ overflow-y: auto;
27
+ overscroll-behavior: contain;
28
+ animation: crewlet-popover-in var(--motion-duration-base) var(--motion-easing-emphasized);
29
+ }
30
+
31
+ .crewlet-popover--in-host {
32
+ position: absolute;
33
+ }
34
+
35
+ .crewlet-popover--below {
36
+ transform-origin: top left;
37
+ }
38
+
39
+ .crewlet-popover--above {
40
+ transform-origin: bottom left;
41
+ }
42
+
43
+ /* A panel that takes focus shows it on the panel, not only on what is inside. */
44
+ .crewlet-popover:focus-visible {
45
+ outline: 2px solid var(--color-focus);
46
+ outline-offset: 2px;
47
+ }
48
+
49
+ /* Up from under its anchor, which is where it is about to be. */
50
+ @keyframes crewlet-popover-in {
51
+ from {
52
+ opacity: 0;
53
+ transform: translateY(var(--spacing-2));
54
+ }
55
+ }
56
+
57
+ /* A list inside a panel. The rows carry the menu's register, because a row of
58
+ verbs is a row of verbs wherever it is drawn.
59
+
60
+ WHAT THEY DO NOT TAKE FROM A MENU IS ITS `white-space: nowrap`. A menu panel
61
+ is as wide as its longest row and can afford an unbreakable line; this panel
62
+ is a declared width range, so a line that cannot break has nowhere to go but
63
+ sideways out of a box whose `overflow-y` already makes the other axis
64
+ scroll. A row's text is often a bare child of the row as well, which is a
65
+ place `text-overflow` cannot reach, so the line would be clipped with
66
+ nothing to say it had been. It wraps instead. */
67
+ .crewlet-popover__list {
68
+ list-style: none;
69
+ margin: 0;
70
+ padding: var(--spacing-1);
71
+ display: flex;
72
+ flex-direction: column;
73
+ }
74
+
75
+ .crewlet-popover__item {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: var(--spacing-2);
79
+ min-height: var(--size-row-sm);
80
+ padding: 0 var(--spacing-2);
81
+ border-radius: var(--radius-xs);
82
+ cursor: pointer;
83
+ background: transparent;
84
+ border: none;
85
+ color: var(--color-text-primary);
86
+ font-size: var(--font-size-compact);
87
+ font-family: inherit;
88
+ text-align: left;
89
+ width: 100%;
90
+ }
91
+
92
+ /*
93
+ * A NEUTRAL hover. The accent means "where the reader is": a selection, an
94
+ * active filter, the row a listbox's arrows are on. A row that turned the
95
+ * accent under the pointer said the reader was somewhere they were only
96
+ * passing over, and with focus moving row to row in a menu it said it twice.
97
+ */
98
+ .crewlet-popover__item:hover:not(.is-disabled):not([aria-disabled='true']) {
99
+ background: var(--color-surface-hover);
100
+ }
101
+
102
+ /*
103
+ * The tint is on `:focus` and the ring on `:focus-visible`, as in a menu: a
104
+ * panel that takes focus as it opens hands it to its first row, and a row a
105
+ * script focused after a pointer opened the panel matches no browser's
106
+ * `:focus-visible`, so the panel came up with nothing lit. See Menu.css.
107
+ */
108
+ .crewlet-popover__item:focus {
109
+ background: var(--color-surface-hover);
110
+ }
111
+
112
+ .crewlet-popover__item:focus-visible {
113
+ outline: 2px solid var(--color-focus);
114
+ /* Inside a panel that scrolls its own rows, an outset ring is clipped by the
115
+ scroller and painted over by the next row. */
116
+ outline-offset: var(--size-focus-ring-inset-offset);
117
+ }
118
+
119
+ .crewlet-popover__item.is-disabled,
120
+ .crewlet-popover__item[aria-disabled='true'] {
121
+ color: var(--color-text-tertiary);
122
+ cursor: not-allowed;
123
+ }
124
+
125
+ /* The current answer of a choice: the one place the accent belongs here. */
126
+ .crewlet-popover__item.is-active {
127
+ color: var(--color-brand-accent-ink);
128
+ }
129
+
130
+ .crewlet-popover__item-icon {
131
+ flex-shrink: 0;
132
+ }
133
+
134
+ .crewlet-popover__item-spacer {
135
+ flex: 1;
136
+ }
137
+
138
+ .crewlet-popover__item-trail {
139
+ margin-left: auto;
140
+ padding-left: var(--spacing-4);
141
+ font-size: var(--font-size-xs);
142
+ color: var(--color-text-tertiary);
143
+ }
144
+
145
+ /* A heading above a group of rows. */
146
+ .crewlet-popover__heading {
147
+ padding: var(--spacing-2) var(--spacing-3) var(--spacing-1);
148
+ font-size: var(--font-size-2xs);
149
+ font-weight: var(--font-weight-medium);
150
+ letter-spacing: var(--font-letter-spacing-wide);
151
+ text-transform: uppercase;
152
+ color: var(--color-text-tertiary);
153
+ }
154
+
155
+ .crewlet-popover__divider {
156
+ height: 1px;
157
+ background: var(--color-border-default);
158
+ margin: var(--spacing-1) 0;
159
+ }
160
+
161
+ /* An inline editor: a panel hosting a single control while a value is edited
162
+ in place. Sized snug around it. */
163
+ .crewlet-popover__editor {
164
+ padding: var(--spacing-3);
165
+ min-width: 240px;
166
+ }
167
+
168
+ .crewlet-popover__editor-label {
169
+ display: block;
170
+ margin-bottom: var(--spacing-2);
171
+ font-size: var(--font-size-2xs);
172
+ letter-spacing: var(--font-letter-spacing-wide);
173
+ text-transform: uppercase;
174
+ color: var(--color-text-tertiary);
175
+ }
176
+
177
+ /*
178
+ * The rows carry no transition, and that is the rule rather than an omission:
179
+ * the arrows move the highlight, and a fade lags a held arrow key.
180
+ */
181
+ @media (prefers-reduced-motion: reduce) {
182
+ .crewlet-popover {
183
+ animation: none;
184
+ }
185
+ }
@@ -0,0 +1,56 @@
1
+ import { type ButtonHTMLAttributes, type HTMLAttributes, type ReactNode } from 'react';
2
+ export type PricingCardTagVariant = 'neutral' | 'top' | 'save' | 'pending';
3
+ /**
4
+ * PricingCard is the canonical plan-tier card surface. It owns the
5
+ * outer container (the selected, pending, unavailable and disabled
6
+ * states, plus the interactive hover), and exposes compound parts
7
+ * (`PricingCard.Header / Name / Tag / Price / Amount / Cadence /
8
+ * PriceNote / Body / Footer`) so the caller composes the content.
9
+ *
10
+ * The card renders as a `<button>` by default so the entire surface
11
+ * is clickable in a picker context. Pass `interactive={false}` for
12
+ * a static display card (a pricing comparison) and the surface
13
+ * renders as a `<div>` instead.
14
+ */
15
+ export interface PricingCardProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'disabled'> {
16
+ selected?: boolean;
17
+ pending?: boolean;
18
+ /**
19
+ * Soft-disabled: the option is shown but cannot be chosen right now.
20
+ * Click is suppressed and the interactive card is announced as
21
+ * disabled through `aria-disabled` while staying focusable, so a
22
+ * keyboard or screen reader user can still reach it and read why.
23
+ * State that reason in the card content, since the dimmed surface
24
+ * alone does not explain it.
25
+ */
26
+ unavailable?: boolean;
27
+ /** Hard disabled. Click is suppressed. */
28
+ disabled?: boolean;
29
+ /** When false (default true), render a `<div>` instead of a `<button>`. */
30
+ interactive?: boolean;
31
+ }
32
+ interface PricingCardRootProps extends PricingCardProps {
33
+ children?: ReactNode;
34
+ }
35
+ interface TagProps extends HTMLAttributes<HTMLSpanElement> {
36
+ variant?: PricingCardTagVariant;
37
+ }
38
+ interface AmountProps extends HTMLAttributes<HTMLSpanElement> {
39
+ /** Strikethrough; used to show the pre-discount price. */
40
+ strike?: boolean;
41
+ /** Highlighted with the discounted accent colour. */
42
+ discounted?: boolean;
43
+ }
44
+ export declare const PricingCard: import("react").ForwardRefExoticComponent<PricingCardRootProps & import("react").RefAttributes<HTMLButtonElement>> & {
45
+ Header: ({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
46
+ Name: ({ className, children, ...rest }: HTMLAttributes<HTMLSpanElement>) => import("react/jsx-runtime").JSX.Element;
47
+ Tag: ({ variant, className, children, ...rest }: TagProps) => import("react/jsx-runtime").JSX.Element;
48
+ Price: ({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
49
+ Amount: ({ strike, discounted, className, children, ...rest }: AmountProps) => import("react/jsx-runtime").JSX.Element;
50
+ Cadence: ({ className, children, ...rest }: HTMLAttributes<HTMLSpanElement>) => import("react/jsx-runtime").JSX.Element;
51
+ PriceNote: ({ className, children, ...rest }: HTMLAttributes<HTMLSpanElement>) => import("react/jsx-runtime").JSX.Element;
52
+ Body: ({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
53
+ Footer: ({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
54
+ Grid: ({ className, children, ...rest }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
55
+ };
56
+ export {};
@@ -0,0 +1,3 @@
1
+ import './PricingCard.css';
2
+ export { PricingCard } from './PricingCard.js';
3
+ export type { PricingCardProps, PricingCardTagVariant } from './PricingCard.js';
@@ -0,0 +1,4 @@
1
+ export { PricingCard } from '../chunk-KLJCCMF3.js';
2
+ import '../chunk-S2XHHEW4.js';
3
+ import '../chunk-PZSWF74H.js';
4
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,278 @@
1
+ /*
2
+ * PricingCard, the plan-tier card surface.
3
+ *
4
+ * The primitive owns the outer card (border, radius, padding, states), the
5
+ * header, the price block and the grid container, and leaves the body and the
6
+ * footer to the caller.
7
+ *
8
+ * EVERY COLOUR IS A TOKEN NOW. The tags, the price note and the card's own
9
+ * ground were dark-theme literals: an amber at rgba(251, 191, 36, 0.75), a
10
+ * green at #86efac and a white lift at 2 percent, none of which is visible on
11
+ * a light page. The status hues here are the same soft-and-ink pairs the Tag
12
+ * and the Callout draw, so a "Save 10 percent" chip and a success tag on the
13
+ * screen behind it are the same green.
14
+ */
15
+
16
+ /* ── Grid container ─────────────────────────────────────────────── */
17
+ .crewlet-pricing-card-grid {
18
+ display: grid;
19
+ grid-template-columns: repeat(4, minmax(0, 1fr));
20
+ gap: var(--spacing-3);
21
+ align-items: stretch;
22
+ }
23
+
24
+ @media (max-width: 1200px) {
25
+ .crewlet-pricing-card-grid {
26
+ grid-template-columns: repeat(2, minmax(0, 1fr));
27
+ }
28
+ }
29
+
30
+ @media (max-width: 768px) {
31
+ .crewlet-pricing-card-grid {
32
+ grid-template-columns: minmax(0, 1fr);
33
+ }
34
+ }
35
+
36
+ /* ── Card root ──────────────────────────────────────────────────── */
37
+ .crewlet-pricing-card {
38
+ text-align: left;
39
+ /* The panel recipe: on dark the top hairline is the elevation, on light the
40
+ shadow is. One card surface across the system, so a plan tier and a
41
+ dashboard panel are the same object. */
42
+ background: var(--color-surface-subtle);
43
+ border: 1px solid var(--color-border-default);
44
+ border-radius: var(--radius-lg);
45
+ box-shadow: var(--shadow-xs), var(--shadow-hairline);
46
+ padding: var(--spacing-4);
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: var(--spacing-3);
50
+ font-family: var(--font-family-sans);
51
+ color: var(--color-text-primary);
52
+ min-width: 0;
53
+ container-type: inline-size;
54
+ transition:
55
+ border-color var(--motion-duration-fast) var(--motion-easing-default),
56
+ background var(--motion-duration-fast) var(--motion-easing-default),
57
+ box-shadow var(--motion-duration-fast) var(--motion-easing-default);
58
+ }
59
+
60
+ .crewlet-pricing-card.is-interactive {
61
+ cursor: pointer;
62
+ }
63
+
64
+ .crewlet-pricing-card.is-interactive:hover:not(.is-disabled):not(.is-unavailable):not(:disabled) {
65
+ border-color: var(--color-brand-accent-soft-strong);
66
+ }
67
+
68
+ .crewlet-pricing-card:focus-visible {
69
+ outline: 2px solid var(--color-focus);
70
+ outline-offset: 2px;
71
+ }
72
+
73
+ /* The chosen plan takes the selection ring, which is the same inset rule
74
+ every selected surface in the system draws. */
75
+ .crewlet-pricing-card.is-selected {
76
+ border-color: var(--color-brand-accent);
77
+ background: var(--color-brand-accent-soft);
78
+ box-shadow: var(--shadow-selection), var(--shadow-hairline);
79
+ }
80
+
81
+ .crewlet-pricing-card.is-disabled,
82
+ .crewlet-pricing-card:disabled {
83
+ opacity: 0.5;
84
+ cursor: not-allowed;
85
+ }
86
+
87
+ .crewlet-pricing-card.is-unavailable {
88
+ opacity: 0.65;
89
+ cursor: not-allowed;
90
+ }
91
+
92
+ .crewlet-pricing-card.is-selected:has(.crewlet-pricing-card__amount--discounted) {
93
+ box-shadow: var(--shadow-selection), var(--shadow-hairline), var(--shadow-glow);
94
+ }
95
+
96
+ /* Compact a card's interior at small container widths, so a four-up grid on a
97
+ tablet does not render unreadably tight. */
98
+ @container (max-width: 320px) {
99
+ .crewlet-pricing-card {
100
+ padding: var(--spacing-3);
101
+ gap: var(--spacing-2);
102
+ }
103
+
104
+ .crewlet-pricing-card__amount { font-size: var(--font-size-xl); }
105
+ }
106
+
107
+ @container (max-width: 240px) {
108
+ .crewlet-pricing-card {
109
+ padding: var(--spacing-2);
110
+ }
111
+
112
+ .crewlet-pricing-card__amount { font-size: var(--font-size-lg); }
113
+ .crewlet-pricing-card__name { font-size: var(--font-size-sm); }
114
+ }
115
+
116
+ /* ── Header (name and tags) ─────────────────────────────────────── */
117
+ .crewlet-pricing-card__header {
118
+ display: flex;
119
+ align-items: center;
120
+ gap: var(--spacing-2);
121
+ flex-wrap: wrap;
122
+ }
123
+
124
+ .crewlet-pricing-card__name {
125
+ font-size: var(--font-size-md);
126
+ font-weight: var(--font-weight-semibold);
127
+ color: var(--color-text-primary);
128
+ }
129
+
130
+ /* ── Tags ───────────────────────────────────────────────────────── */
131
+
132
+ /*
133
+ * A PRICING TAG IS A TAG. It had its own pill here, with its own radius, its
134
+ * own type and its own tint table, so a "Save 10 percent" chip and a success
135
+ * tag two screens away were the same claim drawn two ways; four of the five
136
+ * declarations it needed were the Tag's own, already written down. It renders
137
+ * the shared primitive now, and what is left in this file is the only thing
138
+ * this card has to say about it: where the top tag sits.
139
+ *
140
+ * Pending, for a change that takes effect later, is the warning tone and the
141
+ * only signal on the card (no border tint, no ground change), so the eye reads
142
+ * it as a heads-up annotation rather than as a status competing with the
143
+ * selection ring.
144
+ */
145
+ .crewlet-pricing-card__tag--top {
146
+ margin-left: auto;
147
+ }
148
+
149
+ /* ── Price block ────────────────────────────────────────────────── */
150
+ .crewlet-pricing-card__price {
151
+ display: flex;
152
+ align-items: baseline;
153
+ flex-wrap: wrap;
154
+ gap: var(--spacing-2);
155
+ }
156
+
157
+ .crewlet-pricing-card__amount {
158
+ font-size: var(--font-size-2xl);
159
+ font-weight: var(--font-weight-semibold);
160
+ color: var(--color-text-primary);
161
+ font-variant-numeric: tabular-nums;
162
+ transition: color var(--motion-duration-base) var(--motion-easing-default);
163
+ }
164
+
165
+ .crewlet-pricing-card__amount--strike {
166
+ font-size: var(--font-size-md);
167
+ font-weight: var(--font-weight-medium);
168
+ color: var(--color-text-tertiary);
169
+ text-decoration: line-through;
170
+ text-decoration-thickness: 1.5px;
171
+ }
172
+
173
+ /* The discounted price is TEXT, so it takes the accent's ink step rather than
174
+ its fill: the fill measures 3.77:1 as text on a light card. */
175
+ .crewlet-pricing-card__amount--discounted {
176
+ color: var(--color-brand-accent-ink);
177
+ animation: crewlet-pricing-card-discount-pop var(--motion-duration-slow) var(--motion-easing-spring);
178
+ transform-origin: left center;
179
+ }
180
+
181
+ @keyframes crewlet-pricing-card-discount-pop {
182
+ 0% {
183
+ transform: scale(0.92);
184
+ opacity: 0;
185
+ }
186
+
187
+ 60% {
188
+ transform: scale(1.06);
189
+ opacity: 1;
190
+ }
191
+
192
+ 100% {
193
+ transform: scale(1);
194
+ opacity: 1;
195
+ }
196
+ }
197
+
198
+ .crewlet-pricing-card__cadence {
199
+ font-size: var(--font-size-xs);
200
+ color: var(--color-text-secondary);
201
+ }
202
+
203
+ /*
204
+ * A short label under the price: "Save $X (10 percent off)" on a discounted
205
+ * plan, or "Billed annually" and "Free forever" on a pricing page.
206
+ */
207
+ .crewlet-pricing-card__price-note {
208
+ /* Layout and arrival only. The pill, the tint and the ink are the Tag's. */
209
+ flex-basis: 100%;
210
+ margin-top: 2px;
211
+ width: max-content;
212
+ max-width: 100%;
213
+ animation: crewlet-pricing-card-price-note-enter var(--motion-duration-slow) var(--motion-easing-spring);
214
+ }
215
+
216
+ /*
217
+ * A NOTE THAT LEADS WITH A GLYPH IS STILL TWO THINGS.
218
+ *
219
+ * The pill spaces its own slots, and a caller's glyph is not one of them: the
220
+ * children it is given are ONE slot, the label, so the gap the pill spends
221
+ * between a dot and a word does not reach inside it and a discount icon ends
222
+ * up touching the "Save" beside it. The label carries the same step instead,
223
+ * which is what this note drew for itself before it became a Tag. It is
224
+ * layout, not look: the pill, the tint and the type are still the Tag's.
225
+ *
226
+ * `min-width: 0` with it, because the label is a flex item of the pill and a
227
+ * flex item does not shrink below its content without it, which is what would
228
+ * push a long note past the card's edge instead of ellipsing inside it.
229
+ */
230
+ .crewlet-pricing-card__price-note .crewlet-tag__label {
231
+ display: inline-flex;
232
+ align-items: center;
233
+ gap: var(--spacing-1);
234
+ min-width: 0;
235
+ }
236
+
237
+ @keyframes crewlet-pricing-card-price-note-enter {
238
+ 0% {
239
+ transform: translateY(-4px);
240
+ opacity: 0;
241
+ }
242
+
243
+ 100% {
244
+ transform: translateY(0);
245
+ opacity: 1;
246
+ }
247
+ }
248
+
249
+ /* ── Body and footer slots ──────────────────────────────────────── */
250
+ .crewlet-pricing-card__body {
251
+ display: flex;
252
+ flex-direction: column;
253
+ gap: var(--spacing-3);
254
+ min-width: 0;
255
+ }
256
+
257
+ .crewlet-pricing-card__footer {
258
+ margin-top: auto;
259
+ display: flex;
260
+ gap: var(--spacing-2);
261
+ }
262
+
263
+ /*
264
+ * The price still changes and the note still appears; neither jumps to say so.
265
+ * A price that pops is a nice touch for somebody who can watch it and a
266
+ * genuine problem for somebody who cannot.
267
+ */
268
+ @media (prefers-reduced-motion: reduce) {
269
+ .crewlet-pricing-card,
270
+ .crewlet-pricing-card__amount {
271
+ transition: none;
272
+ }
273
+
274
+ .crewlet-pricing-card__amount--discounted,
275
+ .crewlet-pricing-card__price-note {
276
+ animation: none;
277
+ }
278
+ }
@@ -0,0 +1,33 @@
1
+ import type { ElementType, HTMLAttributes } from 'react';
2
+ export type ProseTone = 'default' | 'muted';
3
+ export interface ProseProps extends HTMLAttributes<HTMLElement> {
4
+ /** The element to draw. A `p` by default. */
5
+ as?: ElementType | undefined;
6
+ tone?: ProseTone | undefined;
7
+ /**
8
+ * The text is still arriving. It draws a caret after the last character, and
9
+ * the caret holds still under a reduced-motion preference.
10
+ */
11
+ streaming?: boolean | undefined;
12
+ /**
13
+ * An attempt that was given up on. Dimmed rather than removed: a reader has
14
+ * already read it, and making it vanish reads as a glitch.
15
+ */
16
+ dimmed?: boolean | undefined;
17
+ /** Bounds the line length. On by default; a measure is the point. */
18
+ measure?: 'normal' | 'narrow' | 'none' | undefined;
19
+ }
20
+ /**
21
+ * Natural language a person or a model wrote.
22
+ *
23
+ * WHY IT IS NOT A CODE BLOCK. Reasoning and speech used to be set in the same
24
+ * monospace block that carries tool JSON: 11px, tight leading, unbounded
25
+ * measure. That is a wall of text nobody reads. Here they get the
26
+ * proportional face, real leading and a bounded measure, and monospace stays
27
+ * where it means something.
28
+ *
29
+ * `white-space: pre-wrap` keeps the writer's own paragraph breaks, which are
30
+ * load bearing in a long answer, without turning a long line into a
31
+ * horizontal scroll.
32
+ */
33
+ export declare function Prose({ as: Tag, tone, streaming, dimmed, measure, className, children, ...rest }: ProseProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,3 @@
1
+ import './Prose.css';
2
+ export { Prose } from './Prose.js';
3
+ export type { ProseProps, ProseTone } from './Prose.js';
@@ -0,0 +1,2 @@
1
+ export { Prose } from '../chunk-JCSA3XVH.js';
2
+ import '../chunk-ODEQTPFM.js';
@@ -0,0 +1,99 @@
1
+ /*
2
+ * Natural language: the proportional face, real leading, a bounded measure.
3
+ */
4
+
5
+ .crewlet-prose {
6
+ /*
7
+ * The caret's blink, which is not a token: the motion scale covers a
8
+ * transition a reader barely registers, and this is a one-second pulse that
9
+ * has to read as a cursor. It is a component variable so an application can
10
+ * slow it without restating the rule.
11
+ */
12
+ --crewlet-prose-caret-period: 1.1s;
13
+ margin: 0;
14
+ font-family: var(--font-family-sans);
15
+ font-size: var(--font-size-compact);
16
+ line-height: var(--font-line-height-relaxed);
17
+ color: var(--color-text-primary);
18
+ /* The writer's own paragraph breaks survive, and a long line still wraps. */
19
+ white-space: pre-wrap;
20
+ overflow-wrap: anywhere;
21
+ }
22
+
23
+ .crewlet-prose--measure-normal {
24
+ max-width: var(--size-measure);
25
+ }
26
+
27
+ .crewlet-prose--measure-narrow {
28
+ max-width: var(--size-measure-narrow);
29
+ }
30
+
31
+ .crewlet-prose--muted {
32
+ color: var(--color-text-secondary);
33
+ }
34
+
35
+ /*
36
+ * An attempt a provider gave up on. Dimmed rather than deleted, because a
37
+ * reader has already read it and making it vanish reads as a glitch.
38
+ */
39
+ .crewlet-prose--dimmed {
40
+ opacity: 0.65;
41
+ }
42
+
43
+ /*
44
+ * THE TWO QUIETING DEVICES DO NOT STACK. The opacity above is already what
45
+ * says "given up on", and applied to the muted step as well it takes the words
46
+ * to 3.08:1 on the panel, under the floor for anything a reader reads; the
47
+ * primary step at the same opacity measures 6.16:1. A given-up attempt is
48
+ * still text somebody goes back to, so the dimming is the whole of the signal
49
+ * and the ink stays the one that was measured.
50
+ */
51
+ .crewlet-prose--dimmed.crewlet-prose--muted {
52
+ color: var(--color-text-primary);
53
+ }
54
+
55
+ /*
56
+ * Text arriving right now. The transition is on COLOUR only, never on height:
57
+ * animating the height of a growing block makes every append a reflow the
58
+ * reader can feel, which is the opposite of the point.
59
+ */
60
+ .crewlet-prose--streaming {
61
+ transition: color var(--motion-duration-slow) var(--motion-easing-default);
62
+ }
63
+
64
+ .crewlet-prose--streaming::after {
65
+ content: '';
66
+ display: inline-block;
67
+ width: 2px;
68
+ height: 1em;
69
+ margin-inline-start: 2px;
70
+ vertical-align: text-bottom;
71
+ background: var(--color-brand-accent);
72
+ animation: crewlet-prose-caret var(--crewlet-prose-caret-period) steps(1) infinite;
73
+ }
74
+
75
+ @keyframes crewlet-prose-caret {
76
+ 0%,
77
+ 49% {
78
+ opacity: 1;
79
+ }
80
+ 50%,
81
+ 100% {
82
+ opacity: 0;
83
+ }
84
+ }
85
+
86
+ /*
87
+ * An indicator that will not stop is exactly what this setting is for, so the
88
+ * caret stops rather than merely slowing: it stays drawn, so the reader can
89
+ * still see where the text has reached.
90
+ */
91
+ @media (prefers-reduced-motion: reduce) {
92
+ .crewlet-prose--streaming {
93
+ transition: none;
94
+ }
95
+
96
+ .crewlet-prose--streaming::after {
97
+ animation: none;
98
+ }
99
+ }