@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.
- package/README.md +1714 -14
- package/dist/Accordion/Accordion.d.ts +54 -0
- package/dist/Accordion/index.d.ts +4 -0
- package/dist/Accordion/index.js +6 -0
- package/dist/Accordion-ZI2WLD5C.css +87 -0
- package/dist/AddPill/AddPill.d.ts +114 -0
- package/dist/AddPill/index.d.ts +3 -0
- package/dist/AddPill/index.js +3 -0
- package/dist/AddPill-DFWXYLIQ.css +434 -0
- package/dist/Announcer/Announcer.d.ts +15 -0
- package/dist/Announcer/index.d.ts +2 -0
- package/dist/Announcer/index.js +3 -0
- package/dist/AppShell/AppShell.d.ts +193 -0
- package/dist/AppShell/index.d.ts +3 -0
- package/dist/AppShell/index.js +6 -0
- package/dist/AppShell-NVE6LHNI.css +395 -0
- package/dist/Avatar/Avatar.d.ts +104 -0
- package/dist/Avatar/index.d.ts +3 -0
- package/dist/Avatar/index.js +2 -0
- package/dist/Avatar-P2KRQM2B.css +156 -0
- package/dist/BrandLockup/BrandLockup.d.ts +41 -0
- package/dist/BrandLockup/index.d.ts +3 -0
- package/dist/BrandLockup/index.js +2 -0
- package/dist/BrandLockup-6ISDEHPJ.css +108 -0
- package/dist/Button/Button.d.ts +88 -0
- package/dist/Button/index.d.ts +3 -0
- package/dist/Button/index.js +3 -0
- package/dist/Button-D4J6B4MA.css +302 -0
- package/dist/CalendarGrid/CalendarGrid.d.ts +87 -0
- package/dist/CalendarGrid/index.d.ts +3 -0
- package/dist/CalendarGrid/index.js +2 -0
- package/dist/CalendarGrid-V6TQ5QKS.css +128 -0
- package/dist/Callout/Callout.d.ts +47 -0
- package/dist/Callout/index.d.ts +3 -0
- package/dist/Callout/index.js +2 -0
- package/dist/Callout-S7QDWHDL.css +111 -0
- package/dist/Canvas/Canvas.d.ts +234 -0
- package/dist/Canvas/geometry.d.ts +249 -0
- package/dist/Canvas/index.d.ts +5 -0
- package/dist/Canvas/index.js +8 -0
- package/dist/Canvas/layerNode.d.ts +20 -0
- package/dist/Canvas-Q6JETCWR.css +315 -0
- package/dist/Card/Card.d.ts +142 -0
- package/dist/Card/headerSlot.d.ts +65 -0
- package/dist/Card/index.d.ts +5 -0
- package/dist/Card/index.js +6 -0
- package/dist/Card-AHX3Q2JD.css +428 -0
- package/dist/Charts/ActivityStrip.d.ts +45 -0
- package/dist/Charts/BarList.d.ts +51 -0
- package/dist/Charts/Legend.d.ts +32 -0
- package/dist/Charts/StackedBar.d.ts +38 -0
- package/dist/Charts/TimeSeries.d.ts +92 -0
- package/dist/Charts/dataColor.d.ts +20 -0
- package/dist/Charts/index.d.ts +12 -0
- package/dist/Charts/index.js +3 -0
- package/dist/Charts-D7G2BSXH.css +277 -0
- package/dist/Checkbox/Checkbox.d.ts +45 -0
- package/dist/Checkbox/index.d.ts +3 -0
- package/dist/Checkbox/index.js +2 -0
- package/dist/Checkbox-VGW26YLQ.css +111 -0
- package/dist/CodeBlock/CodeBlock.d.ts +60 -0
- package/dist/CodeBlock/index.d.ts +3 -0
- package/dist/CodeBlock/index.js +7 -0
- package/dist/CodeBlock-U2W6NNVC.css +153 -0
- package/dist/Combobox/Combobox.d.ts +89 -0
- package/dist/Combobox/index.d.ts +3 -0
- package/dist/Combobox/index.js +8 -0
- package/dist/Combobox-4FUVYIE7.css +80 -0
- package/dist/CommandPalette/CommandPalette.d.ts +77 -0
- package/dist/CommandPalette/index.d.ts +3 -0
- package/dist/CommandPalette/index.js +11 -0
- package/dist/CommandPalette-CSJDUCQA.css +115 -0
- package/dist/Container/Container.d.ts +17 -0
- package/dist/Container/index.d.ts +3 -0
- package/dist/Container/index.js +2 -0
- package/dist/Container-3TSKMGNI.css +52 -0
- package/dist/Copyable/CopyButton.d.ts +54 -0
- package/dist/Copyable/Copyable.d.ts +34 -0
- package/dist/Copyable/index.d.ts +5 -0
- package/dist/Copyable/index.js +6 -0
- package/dist/Copyable-5PNRFOLS.css +125 -0
- package/dist/Count/Count.d.ts +24 -0
- package/dist/Count/index.d.ts +3 -0
- package/dist/Count/index.js +3 -0
- package/dist/Count-ZVCJ6VPD.css +20 -0
- package/dist/DataTable/CopyableCell.d.ts +12 -0
- package/dist/DataTable/DataTable.d.ts +615 -0
- package/dist/DataTable/RowActionsMenu.d.ts +7 -0
- package/dist/DataTable/index.d.ts +7 -0
- package/dist/DataTable/index.js +14 -0
- package/dist/DataTable-ITNACQ2X.css +2020 -0
- package/dist/DataView/DataView.d.ts +109 -0
- package/dist/DataView/DataViewToolbar.d.ts +87 -0
- package/dist/DataView/FilterAxisBar.d.ts +103 -0
- package/dist/DataView/columns.d.ts +35 -0
- package/dist/DataView/filters.d.ts +184 -0
- package/dist/DataView/index.d.ts +11 -0
- package/dist/DataView/index.js +25 -0
- package/dist/DataView-256YF32J.css +441 -0
- package/dist/DateTimePicker/DateTimePicker.d.ts +91 -0
- package/dist/DateTimePicker/index.d.ts +3 -0
- package/dist/DateTimePicker/index.js +9 -0
- package/dist/DateTimePicker-22VNXRWC.css +199 -0
- package/dist/DescriptionList/DescriptionList.d.ts +36 -0
- package/dist/DescriptionList/index.d.ts +3 -0
- package/dist/DescriptionList/index.js +2 -0
- package/dist/DescriptionList-YYY3V3O6.css +59 -0
- package/dist/DiffList/DiffList.d.ts +47 -0
- package/dist/DiffList/index.d.ts +3 -0
- package/dist/DiffList/index.js +3 -0
- package/dist/DiffList-3EX64AAE.css +94 -0
- package/dist/Disclosure/Disclosure.d.ts +56 -0
- package/dist/Disclosure/anatomy.d.ts +43 -0
- package/dist/Disclosure/index.d.ts +5 -0
- package/dist/Disclosure/index.js +6 -0
- package/dist/Disclosure-VKBJJIZ7.css +176 -0
- package/dist/EmptyState/EmptyState.d.ts +39 -0
- package/dist/EmptyState/index.d.ts +3 -0
- package/dist/EmptyState/index.js +3 -0
- package/dist/EmptyState-C6HRBGT7.css +73 -0
- package/dist/EmptyValue/EmptyValue.d.ts +31 -0
- package/dist/EmptyValue/index.d.ts +3 -0
- package/dist/EmptyValue/index.js +3 -0
- package/dist/EmptyValue-4B6ODXHT.css +12 -0
- package/dist/EntityChip/EntityChip.d.ts +40 -0
- package/dist/EntityChip/index.d.ts +3 -0
- package/dist/EntityChip/index.js +3 -0
- package/dist/EntityChip-LUCPZBBG.css +64 -0
- package/dist/ErrorBoundary/ErrorBoundary.d.ts +58 -0
- package/dist/ErrorBoundary/index.d.ts +3 -0
- package/dist/ErrorBoundary/index.js +4 -0
- package/dist/ErrorBoundary-ME36CQTA.css +59 -0
- package/dist/Eyebrow/Eyebrow.d.ts +18 -0
- package/dist/Eyebrow/index.d.ts +3 -0
- package/dist/Eyebrow/index.js +2 -0
- package/dist/Eyebrow-5NREGHQH.css +46 -0
- package/dist/FilterChip/FilterChip.d.ts +68 -0
- package/dist/FilterChip/index.d.ts +3 -0
- package/dist/FilterChip/index.js +3 -0
- package/dist/FilterChip-GTGLLOXE.css +107 -0
- package/dist/Fullscreen/index.d.ts +2 -0
- package/dist/Fullscreen/index.js +1 -0
- package/dist/Fullscreen/useFullscreen.d.ts +32 -0
- package/dist/IconButton/IconButton.d.ts +45 -0
- package/dist/IconButton/index.d.ts +3 -0
- package/dist/IconButton/index.js +3 -0
- package/dist/IconButton-VQGNMJDI.css +158 -0
- package/dist/ImageUpload/ImageUpload.d.ts +37 -0
- package/dist/ImageUpload/index.d.ts +3 -0
- package/dist/ImageUpload/index.js +3 -0
- package/dist/ImageUpload-HKFIZR6D.css +193 -0
- package/dist/InlineCode/InlineCode.d.ts +37 -0
- package/dist/InlineCode/index.d.ts +3 -0
- package/dist/InlineCode/index.js +2 -0
- package/dist/InlineCode-6WSR5COL.css +65 -0
- package/dist/Input/FormField.d.ts +61 -0
- package/dist/Input/FormRow.d.ts +6 -0
- package/dist/Input/FormSection.d.ts +28 -0
- package/dist/Input/Input.d.ts +98 -0
- package/dist/Input/Label.d.ts +31 -0
- package/dist/Input/ReadOnlyField.d.ts +30 -0
- package/dist/Input/Textarea.d.ts +16 -0
- package/dist/Input/index.d.ts +15 -0
- package/dist/Input/index.js +5 -0
- package/dist/Input-2PU5CPKK.css +616 -0
- package/dist/Kbd/Kbd.d.ts +40 -0
- package/dist/Kbd/index.d.ts +3 -0
- package/dist/Kbd/index.js +3 -0
- package/dist/Kbd-W66MXQI5.css +61 -0
- package/dist/Layer/LayerHost.d.ts +23 -0
- package/dist/Layer/index.d.ts +7 -0
- package/dist/Layer/index.js +3 -0
- package/dist/Layer/place.d.ts +63 -0
- package/dist/Layer/stack.d.ts +159 -0
- package/dist/Layer-NAFSGCFA.css +23 -0
- package/dist/Layout/Layout.d.ts +104 -0
- package/dist/Layout/index.d.ts +3 -0
- package/dist/Layout/index.js +2 -0
- package/dist/Layout-2ZCV3IGF.css +171 -0
- package/dist/Link/Link.d.ts +45 -0
- package/dist/Link/index.d.ts +3 -0
- package/dist/Link/index.js +3 -0
- package/dist/Link-6BEFNMN2.css +80 -0
- package/dist/List/List.d.ts +73 -0
- package/dist/List/index.d.ts +3 -0
- package/dist/List/index.js +3 -0
- package/dist/List-XTHESXLR.css +161 -0
- package/dist/ListInput/ListInput.d.ts +68 -0
- package/dist/ListInput/index.d.ts +3 -0
- package/dist/ListInput/index.js +10 -0
- package/dist/ListInput-O7LJKOIG.css +147 -0
- package/dist/Listbox/index.d.ts +5 -0
- package/dist/Listbox/index.js +2 -0
- package/dist/Listbox/useListbox.d.ts +97 -0
- package/dist/Listbox/useOptionKeys.d.ts +64 -0
- package/dist/Listbox-X2DOTSQA.css +110 -0
- package/dist/Menu/Menu.d.ts +118 -0
- package/dist/Menu/index.d.ts +3 -0
- package/dist/Menu/index.js +7 -0
- package/dist/Menu-6DE7I66I.css +222 -0
- package/dist/Meter/Meter.d.ts +49 -0
- package/dist/Meter/index.d.ts +3 -0
- package/dist/Meter/index.js +3 -0
- package/dist/Meter-SKOOXQBC.css +87 -0
- package/dist/Modal/ConfirmModal.d.ts +74 -0
- package/dist/Modal/Modal.d.ts +154 -0
- package/dist/Modal/index.d.ts +5 -0
- package/dist/Modal/index.js +8 -0
- package/dist/Modal-XYQJ4BL6.css +484 -0
- package/dist/NewItemsNotice/NewItemsNotice.d.ts +28 -0
- package/dist/NewItemsNotice/index.d.ts +3 -0
- package/dist/NewItemsNotice/index.js +4 -0
- package/dist/NewItemsNotice-T4DSSPVV.css +60 -0
- package/dist/OrgLabel/OrgLabel.d.ts +117 -0
- package/dist/OrgLabel/index.d.ts +3 -0
- package/dist/OrgLabel/index.js +2 -0
- package/dist/OrgLabel-D7U6QJZD.css +293 -0
- package/dist/OrgNode/OrgNode.d.ts +103 -0
- package/dist/OrgNode/index.d.ts +3 -0
- package/dist/OrgNode/index.js +3 -0
- package/dist/OrgNode-BT7T2Q2X.css +214 -0
- package/dist/OrgTable/OrgTable.d.ts +113 -0
- package/dist/OrgTable/index.d.ts +3 -0
- package/dist/OrgTable/index.js +11 -0
- package/dist/OrgTable-VWMFC3TB.css +360 -0
- package/dist/PageHeader/PageHeader.d.ts +35 -0
- package/dist/PageHeader/index.d.ts +3 -0
- package/dist/PageHeader/index.js +3 -0
- package/dist/PageHeader-6EYWQXRE.css +88 -0
- package/dist/Popover/Popover.d.ts +91 -0
- package/dist/Popover/index.d.ts +3 -0
- package/dist/Popover/index.js +4 -0
- package/dist/Popover-WJGCF3ZQ.css +185 -0
- package/dist/PricingCard/PricingCard.d.ts +56 -0
- package/dist/PricingCard/index.d.ts +3 -0
- package/dist/PricingCard/index.js +4 -0
- package/dist/PricingCard-JFI7RYXP.css +278 -0
- package/dist/Prose/Prose.d.ts +33 -0
- package/dist/Prose/index.d.ts +3 -0
- package/dist/Prose/index.js +2 -0
- package/dist/Prose-BTXNFT2Q.css +99 -0
- package/dist/RelativeTime/RelativeTime.d.ts +31 -0
- package/dist/RelativeTime/clock.d.ts +9 -0
- package/dist/RelativeTime/format.d.ts +38 -0
- package/dist/RelativeTime/index.d.ts +6 -0
- package/dist/RelativeTime/index.js +4 -0
- package/dist/RelativeTime-EBAQPGO2.css +10 -0
- package/dist/SearchTrigger/SearchTrigger.d.ts +29 -0
- package/dist/SearchTrigger/index.d.ts +3 -0
- package/dist/SearchTrigger/index.js +2 -0
- package/dist/SearchTrigger-QXOYAUUY.css +79 -0
- package/dist/Section/Section.d.ts +41 -0
- package/dist/Section/index.d.ts +3 -0
- package/dist/Section/index.js +3 -0
- package/dist/Section-QRUPRIQ2.css +127 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +68 -0
- package/dist/SegmentedControl/index.d.ts +4 -0
- package/dist/SegmentedControl/index.js +5 -0
- package/dist/SegmentedControl-X3BI3XU4.css +68 -0
- package/dist/Select/Select.d.ts +138 -0
- package/dist/Select/index.d.ts +3 -0
- package/dist/Select/index.js +5 -0
- package/dist/Select-2X77FSWR.css +350 -0
- package/dist/Shortcut/index.d.ts +2 -0
- package/dist/Shortcut/index.js +4 -0
- package/dist/Shortcut/useShortcut.d.ts +68 -0
- package/dist/SidebarNav/SidebarNav.d.ts +117 -0
- package/dist/SidebarNav/index.d.ts +3 -0
- package/dist/SidebarNav/index.js +3 -0
- package/dist/SidebarNav-QGSFKZYA.css +319 -0
- package/dist/Skeleton/Skeleton.d.ts +50 -0
- package/dist/Skeleton/index.d.ts +3 -0
- package/dist/Skeleton/index.js +3 -0
- package/dist/Skeleton-V735HRGM.css +421 -0
- package/dist/StatCard/StatCard.d.ts +56 -0
- package/dist/StatCard/index.d.ts +3 -0
- package/dist/StatCard/index.js +3 -0
- package/dist/StatCard-KYPKZUWX.css +111 -0
- package/dist/StatGroup/StatGroup.d.ts +20 -0
- package/dist/StatGroup/index.d.ts +3 -0
- package/dist/StatGroup/index.js +2 -0
- package/dist/StatGroup-TGB6AEKM.css +80 -0
- package/dist/StatusDot/StatusDot.d.ts +25 -0
- package/dist/StatusDot/index.d.ts +3 -0
- package/dist/StatusDot/index.js +2 -0
- package/dist/StatusDot-HA2L2FSX.css +84 -0
- package/dist/Switch/Switch.d.ts +38 -0
- package/dist/Switch/index.d.ts +3 -0
- package/dist/Switch/index.js +2 -0
- package/dist/Switch-U4OWK4CL.css +169 -0
- package/dist/Table/Table.d.ts +51 -0
- package/dist/Table/index.d.ts +3 -0
- package/dist/Table/index.js +3 -0
- package/dist/Table-MDOLVUAW.css +159 -0
- package/dist/Tabs/Tabs.d.ts +97 -0
- package/dist/Tabs/index.d.ts +3 -0
- package/dist/Tabs/index.js +4 -0
- package/dist/Tabs/roving.d.ts +36 -0
- package/dist/Tabs-VLICJFVB.css +275 -0
- package/dist/Tag/Tag.d.ts +107 -0
- package/dist/Tag/index.d.ts +3 -0
- package/dist/Tag/index.js +3 -0
- package/dist/Tag-VNZEYLB6.css +406 -0
- package/dist/TagGroup/TagGroup.d.ts +41 -0
- package/dist/TagGroup/index.d.ts +3 -0
- package/dist/TagGroup/index.js +4 -0
- package/dist/TagGroup-APC2EFH4.css +75 -0
- package/dist/TagsInput/TagsInput.d.ts +112 -0
- package/dist/TagsInput/index.d.ts +3 -0
- package/dist/TagsInput/index.js +10 -0
- package/dist/TagsInput-W4P36PRJ.css +168 -0
- package/dist/Text/Text.d.ts +67 -0
- package/dist/Text/index.d.ts +3 -0
- package/dist/Text/index.js +2 -0
- package/dist/Text-XIPYYZX2.css +154 -0
- package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +47 -0
- package/dist/ThemeSwitcher/index.d.ts +4 -0
- package/dist/ThemeSwitcher/index.js +6 -0
- package/dist/ThemeSwitcher/preferences.d.ts +51 -0
- package/dist/TimeWindowPicker/TimeWindowPicker.d.ts +231 -0
- package/dist/TimeWindowPicker/index.d.ts +3 -0
- package/dist/TimeWindowPicker/index.js +13 -0
- package/dist/TimeWindowPicker/mask.d.ts +82 -0
- package/dist/TimeWindowPicker-7I7KWCMU.css +403 -0
- package/dist/Timeline/Timeline.d.ts +51 -0
- package/dist/Timeline/index.d.ts +3 -0
- package/dist/Timeline/index.js +3 -0
- package/dist/Timeline-27SYKOFX.css +144 -0
- package/dist/Toaster/Toaster.d.ts +108 -0
- package/dist/Toaster/index.d.ts +3 -0
- package/dist/Toaster/index.js +5 -0
- package/dist/Toaster-NVDCEIP5.css +306 -0
- package/dist/Toolbar/Toolbar.d.ts +62 -0
- package/dist/Toolbar/index.d.ts +3 -0
- package/dist/Toolbar/index.js +4 -0
- package/dist/Toolbar-IP6LXN45.css +48 -0
- package/dist/Tooltip/Tooltip.d.ts +51 -0
- package/dist/Tooltip/index.d.ts +3 -0
- package/dist/Tooltip/index.js +4 -0
- package/dist/Tooltip-LKQF7CE4.css +71 -0
- package/dist/Tree/index.d.ts +8 -0
- package/dist/Tree/index.js +1 -0
- package/dist/Tree/layout.d.ts +160 -0
- package/dist/Tree/model.d.ts +110 -0
- package/dist/Tree/useMeasuredSizes.d.ts +61 -0
- package/dist/Tree/useTreeState.d.ts +89 -0
- package/dist/TreeCanvas/TreeCanvas.d.ts +384 -0
- package/dist/TreeCanvas/index.d.ts +3 -0
- package/dist/TreeCanvas/index.js +10 -0
- package/dist/TreeCanvas/motion.d.ts +59 -0
- package/dist/TreeCanvas-WBNQPHC7.css +1098 -0
- package/dist/TreeGrid/TreeGrid.d.ts +142 -0
- package/dist/TreeGrid/index.d.ts +3 -0
- package/dist/TreeGrid/index.js +8 -0
- package/dist/TreeGrid-NSW7VMOX.css +132 -0
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +23 -0
- package/dist/VisuallyHidden/index.d.ts +3 -0
- package/dist/VisuallyHidden/index.js +2 -0
- package/dist/VisuallyHidden-L552H7OA.css +21 -0
- package/dist/chunk-22O7LAW2.js +41 -0
- package/dist/chunk-23DHIMJA.js +38 -0
- package/dist/chunk-2EOKFKHX.js +263 -0
- package/dist/chunk-2PRH365R.js +74 -0
- package/dist/chunk-2ZQMA2WB.js +57 -0
- package/dist/chunk-3CZ7XAVY.js +139 -0
- package/dist/chunk-3EYF6HKB.js +135 -0
- package/dist/chunk-3ZP55QZE.js +40 -0
- package/dist/chunk-53DVJCVW.js +14 -0
- package/dist/chunk-5C5YMZQU.js +51 -0
- package/dist/chunk-5EKIWVOR.js +132 -0
- package/dist/chunk-5IMACPJS.js +495 -0
- package/dist/chunk-5KPQ6D7N.js +54 -0
- package/dist/chunk-5SDBMKUO.js +297 -0
- package/dist/chunk-5WS6L6FA.js +114 -0
- package/dist/chunk-7EM5T4ME.js +39 -0
- package/dist/chunk-7FZ53WDJ.js +163 -0
- package/dist/chunk-7HPRF5XN.js +525 -0
- package/dist/chunk-7RPGY3JE.js +43 -0
- package/dist/chunk-A2UXBCLO.js +48 -0
- package/dist/chunk-ARMRX2YV.js +96 -0
- package/dist/chunk-AV2DXAEL.js +27 -0
- package/dist/chunk-BHHIIK3M.js +17 -0
- package/dist/chunk-BZFWDIV6.js +9 -0
- package/dist/chunk-BZYDZBAN.js +123 -0
- package/dist/chunk-CMEE37QJ.js +628 -0
- package/dist/chunk-D3OADIM6.js +112 -0
- package/dist/chunk-DD5BBGBE.js +162 -0
- package/dist/chunk-EHMQQHYR.js +1652 -0
- package/dist/chunk-EN6K2IFA.js +256 -0
- package/dist/chunk-EPOOQZYA.js +118 -0
- package/dist/chunk-ESCO4XYW.js +144 -0
- package/dist/chunk-EUCC37WY.js +14 -0
- package/dist/chunk-EV6IMYJ6.js +62 -0
- package/dist/chunk-F27EPQ7D.js +68 -0
- package/dist/chunk-F4PJZ4ED.js +245 -0
- package/dist/chunk-F6OE5FH3.js +49 -0
- package/dist/chunk-FBZAKNSX.js +263 -0
- package/dist/chunk-FEFTGVMF.js +46 -0
- package/dist/chunk-G2QFRTJ2.js +823 -0
- package/dist/chunk-GHYY2WPF.js +907 -0
- package/dist/chunk-GTOUGQQK.js +147 -0
- package/dist/chunk-GUIF6Q6N.js +143 -0
- package/dist/chunk-GXQ3B46I.js +216 -0
- package/dist/chunk-H4FBTAYS.js +130 -0
- package/dist/chunk-HOXGBLEY.js +37 -0
- package/dist/chunk-HQNHV7D6.js +54 -0
- package/dist/chunk-HTDFCRJZ.js +92 -0
- package/dist/chunk-HZ5XZNPS.js +98 -0
- package/dist/chunk-IAJLHVUA.js +28 -0
- package/dist/chunk-IJ7QXNIJ.js +1 -0
- package/dist/chunk-ITHXJHBB.js +280 -0
- package/dist/chunk-JCSA3XVH.js +32 -0
- package/dist/chunk-KLJCCMF3.js +97 -0
- package/dist/chunk-LGCPQIOZ.js +49 -0
- package/dist/chunk-LWKJQTOM.js +77 -0
- package/dist/chunk-MNAXYY3R.js +215 -0
- package/dist/chunk-NN62JQLR.js +29 -0
- package/dist/chunk-NPZY6YYL.js +251 -0
- package/dist/chunk-NTRZGNEX.js +529 -0
- package/dist/chunk-O6232G37.js +273 -0
- package/dist/chunk-O67VF5MS.js +58 -0
- package/dist/chunk-ODEQTPFM.js +6 -0
- package/dist/chunk-PNFASD6F.js +98 -0
- package/dist/chunk-PQADV6P6.js +19 -0
- package/dist/chunk-PZSWF74H.js +15 -0
- package/dist/chunk-Q4ZPPART.js +26 -0
- package/dist/chunk-QNCVHRZL.js +17 -0
- package/dist/chunk-QVE4GJAT.js +15 -0
- package/dist/chunk-QYOFACSP.js +36 -0
- package/dist/chunk-RA2ULG6H.js +29 -0
- package/dist/chunk-RDGD7Z7I.js +350 -0
- package/dist/chunk-RK4XPHVG.js +16 -0
- package/dist/chunk-RSAQOKH3.js +38 -0
- package/dist/chunk-S2XHHEW4.js +84 -0
- package/dist/chunk-S4GZWSKR.js +137 -0
- package/dist/chunk-SFZOKW2G.js +52 -0
- package/dist/chunk-T7FKOJKW.js +221 -0
- package/dist/chunk-UG46QBLT.js +325 -0
- package/dist/chunk-UOGSZKLT.js +134 -0
- package/dist/chunk-V2XMNLMS.js +52 -0
- package/dist/chunk-V663QU4R.js +51 -0
- package/dist/chunk-W4ENKCXJ.js +40 -0
- package/dist/chunk-W5J7R5EB.js +107 -0
- package/dist/chunk-WNI2WSJF.js +27 -0
- package/dist/chunk-XDTYBF2F.js +36 -0
- package/dist/chunk-XN4JBAN3.js +32 -0
- package/dist/chunk-XV6WRMBC.js +211 -0
- package/dist/chunk-YLYOWZ4V.js +33 -0
- package/dist/chunk-YMWONFSI.js +170 -0
- package/dist/chunk-ZCR6YGQ4.js +1 -0
- package/dist/generated/index.d.ts +83 -0
- package/dist/generated/index.js +91 -0
- package/dist/index.d.ts +1 -1217
- package/dist/index.js +91 -4518
- package/dist/styles.css +14841 -4274
- package/dist/utils/cx.d.ts +10 -0
- package/dist/utils/headingLevel.d.ts +16 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/tone.d.ts +25 -0
- package/dist/utils/useClipboard.d.ts +30 -0
- package/package.json +18 -10
- package/scripts/bundle-css.mjs +25 -0
- package/scripts/check-css-literals.mjs +166 -0
- package/scripts/check-css-variables.mjs +184 -0
- package/scripts/check-css.mjs +27 -0
- package/scripts/css-source.mjs +67 -0
- package/scripts/write-barrel.mjs +60 -0
- package/dist/Accordion-NIMJQIOI.css +0 -88
- package/dist/AppShell-ZW3NSFBP.css +0 -51
- package/dist/Avatar-V6NG6Q45.css +0 -67
- package/dist/Button-XGCTXXYP.css +0 -174
- package/dist/Callout-LEGDIMAM.css +0 -52
- package/dist/Card-BOZGBML7.css +0 -86
- package/dist/Checkbox-OCUICIIZ.css +0 -58
- package/dist/CodeBlock-IEMBNIQC.css +0 -90
- package/dist/Container-LTKBA2FW.css +0 -21
- package/dist/Copyable-IB57OTHZ.css +0 -123
- package/dist/DataTable-3GALZUW2.css +0 -1593
- package/dist/DateTimePicker-NMSSGVPK.css +0 -312
- package/dist/Eyebrow-AVBORAS2.css +0 -30
- package/dist/IconButton-GB4PJDG2.css +0 -82
- package/dist/ImageUpload-3HQDF2KC.css +0 -158
- package/dist/Input-ZHUTN7CU.css +0 -210
- package/dist/Kbd-Q77CDZY7.css +0 -23
- package/dist/Modal-FJVG66S4.css +0 -138
- package/dist/Popover-FUFULUE2.css +0 -123
- package/dist/PricingCard-NKYV3JHA.css +0 -238
- package/dist/Section-665ZIPG6.css +0 -20
- package/dist/Select-GPRF7PRB.css +0 -294
- package/dist/Skeleton-3WEFLRDN.css +0 -378
- package/dist/StatCard-RTJIVTRB.css +0 -50
- package/dist/Table-AR3TRY2E.css +0 -89
- package/dist/Tabs-XZ4JIH3E.css +0 -153
- package/dist/Tag-R5QDJLYJ.css +0 -163
- package/dist/TimeWindowPicker-L3G5Q7UT.css +0 -629
- 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,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,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
|
+
}
|