@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,176 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The disclosure anatomy, declared once for every expander in the package.
|
|
3
|
+
*
|
|
4
|
+
* THE TRIGGER AND THE SECTION'S CONTROLS ARE SIBLINGS. A copy button nested
|
|
5
|
+
* inside the trigger would be a button inside a button, which is invalid, and
|
|
6
|
+
* worse, pressing it would collapse the very thing it just copied. The bar is
|
|
7
|
+
* what puts them side by side, and `width: auto` on the trigger is load
|
|
8
|
+
* bearing: it overrides the standalone case's `width: 100%`, which inside this
|
|
9
|
+
* row would claim the whole line and push the controls onto one of their own.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
.crewlet-disclosure {
|
|
13
|
+
min-width: 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.crewlet-disclosure__bar {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: var(--spacing-1);
|
|
20
|
+
min-width: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.crewlet-disclosure__heading {
|
|
24
|
+
margin: 0;
|
|
25
|
+
font: inherit;
|
|
26
|
+
flex: 1;
|
|
27
|
+
min-width: 0;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* The expander head the dashboard draws: the caption size, the chevron a step
|
|
32
|
+
* closer to the words than the words are to each other, and the whole row on
|
|
33
|
+
* the secondary step until a pointer reaches it. `--size-row-sm` is the one
|
|
34
|
+
* addition, and it is not decoration: a 12px row with 4px of padding is a
|
|
35
|
+
* 20px target, under the 24px WCAG 2.2 accepts, so the row keeps the floor
|
|
36
|
+
* every other control in the package keeps.
|
|
37
|
+
*/
|
|
38
|
+
.crewlet-disclosure__trigger {
|
|
39
|
+
display: flex;
|
|
40
|
+
align-items: center;
|
|
41
|
+
gap: var(--spacing-1);
|
|
42
|
+
width: 100%;
|
|
43
|
+
min-width: 0;
|
|
44
|
+
min-height: var(--size-row-sm);
|
|
45
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
46
|
+
border: none;
|
|
47
|
+
border-radius: var(--radius-xs);
|
|
48
|
+
background: none;
|
|
49
|
+
color: var(--color-text-secondary);
|
|
50
|
+
font: inherit;
|
|
51
|
+
font-size: var(--font-size-xs);
|
|
52
|
+
text-align: left;
|
|
53
|
+
cursor: pointer;
|
|
54
|
+
transition:
|
|
55
|
+
color var(--motion-duration-fast) var(--motion-easing-default),
|
|
56
|
+
background var(--motion-duration-fast) var(--motion-easing-default);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.crewlet-disclosure__bar > .crewlet-disclosure__trigger {
|
|
60
|
+
flex: 1;
|
|
61
|
+
width: auto;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* NEUTRAL on hover, not the accent. The accent is the one colour that means
|
|
66
|
+
* "where the reader is"; spending it on every expander a pointer passes over
|
|
67
|
+
* makes it mean "under the cursor" instead.
|
|
68
|
+
*/
|
|
69
|
+
.crewlet-disclosure__trigger:hover {
|
|
70
|
+
color: var(--color-text-primary);
|
|
71
|
+
background: var(--color-surface-hover);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.crewlet-disclosure__trigger:focus-visible {
|
|
75
|
+
outline: 2px solid var(--color-focus);
|
|
76
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.crewlet-disclosure__trigger:disabled {
|
|
80
|
+
cursor: not-allowed;
|
|
81
|
+
/* Quieter, but still legible: a disabled row a reader cannot read is a row
|
|
82
|
+
they cannot learn is unavailable. */
|
|
83
|
+
color: var(--color-text-tertiary);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.crewlet-disclosure__trigger:disabled:hover {
|
|
87
|
+
background: none;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* ONE glyph, turned. Two drawings (a right chevron closed, a down one open)
|
|
92
|
+
* swap shapes at the moment of the change, so the control reads as two
|
|
93
|
+
* different controls rather than as one that moved.
|
|
94
|
+
*/
|
|
95
|
+
.crewlet-disclosure__chevron {
|
|
96
|
+
flex: none;
|
|
97
|
+
color: var(--color-text-tertiary);
|
|
98
|
+
transform: rotate(-90deg);
|
|
99
|
+
transition: transform var(--motion-duration-base) var(--motion-easing-out);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.crewlet-disclosure__trigger[aria-expanded='true'] .crewlet-disclosure__chevron {
|
|
103
|
+
transform: rotate(0deg);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.crewlet-disclosure__title {
|
|
107
|
+
min-width: 0;
|
|
108
|
+
overflow: hidden;
|
|
109
|
+
text-overflow: ellipsis;
|
|
110
|
+
white-space: nowrap;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.crewlet-disclosure__title--mono {
|
|
114
|
+
font-family: var(--font-family-mono);
|
|
115
|
+
font-variant-ligatures: none;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* A fact inside the button: quieter than the title it belongs to. */
|
|
119
|
+
.crewlet-disclosure__meta {
|
|
120
|
+
flex: none;
|
|
121
|
+
color: var(--color-text-tertiary);
|
|
122
|
+
font-size: var(--font-size-xs);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.crewlet-disclosure__actions {
|
|
126
|
+
display: flex;
|
|
127
|
+
align-items: center;
|
|
128
|
+
gap: var(--spacing-1);
|
|
129
|
+
flex: none;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.crewlet-disclosure__panel {
|
|
133
|
+
display: flex;
|
|
134
|
+
flex-direction: column;
|
|
135
|
+
gap: var(--spacing-2);
|
|
136
|
+
padding: var(--spacing-2);
|
|
137
|
+
color: var(--color-text-secondary);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* ---- Sizes and variants ------------------------------------------------ */
|
|
141
|
+
|
|
142
|
+
/*
|
|
143
|
+
* ONLY THE PANEL. The trigger's compact register was one size down and one gap
|
|
144
|
+
* in; both are what the standalone trigger is now set at, so a second rule
|
|
145
|
+
* restating them would be a rule that can only ever drift from the first.
|
|
146
|
+
*/
|
|
147
|
+
.crewlet-disclosure--compact .crewlet-disclosure__panel {
|
|
148
|
+
gap: var(--spacing-1);
|
|
149
|
+
padding: var(--spacing-1) var(--spacing-2);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/*
|
|
153
|
+
* An aside: what was considered, not what was decided. The rule down its edge
|
|
154
|
+
* is what lets a reader skip the block by its shape.
|
|
155
|
+
*/
|
|
156
|
+
.crewlet-disclosure--aside .crewlet-disclosure__trigger {
|
|
157
|
+
color: var(--color-text-tertiary);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/*
|
|
161
|
+
* The hover step rather than the strong one. This rule is a margin down the
|
|
162
|
+
* side of an aside, not a boundary a reader has to find: at the strong step it
|
|
163
|
+
* reads as a second border inside the card it sits in.
|
|
164
|
+
*/
|
|
165
|
+
.crewlet-disclosure--aside .crewlet-disclosure__panel {
|
|
166
|
+
border-left: 2px solid var(--color-border-hover);
|
|
167
|
+
margin-left: var(--spacing-1);
|
|
168
|
+
padding-left: var(--spacing-3);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@media (prefers-reduced-motion: reduce) {
|
|
172
|
+
.crewlet-disclosure__trigger,
|
|
173
|
+
.crewlet-disclosure__chevron {
|
|
174
|
+
transition: none;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import { type HeadingLevel } from '../utils/headingLevel.js';
|
|
3
|
+
export type EmptyStateSize = 'default' | 'compact';
|
|
4
|
+
export interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
5
|
+
/** A glyph, drawn large and quiet. Replaced by `illustration` when both are given. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
/** A full drawing, where a glyph is too small to carry the moment: a first run. */
|
|
8
|
+
illustration?: ReactNode;
|
|
9
|
+
title: ReactNode;
|
|
10
|
+
/**
|
|
11
|
+
* WHY it is empty and what would fill it. REQUIRED, and not optional
|
|
12
|
+
* politeness: "No events" on a company that has never run and "no events"
|
|
13
|
+
* on a node whose event store could not be read are the same sentence and
|
|
14
|
+
* completely different problems, and a reader cannot tell them apart from
|
|
15
|
+
* the list. The story shows the three cases this distinguishes.
|
|
16
|
+
*/
|
|
17
|
+
description: ReactNode;
|
|
18
|
+
/** What would fill it, as a control: "Create the first seat", "Connect Slack". */
|
|
19
|
+
action?: ReactNode;
|
|
20
|
+
/** `compact` is for an empty state inside a panel rather than a screen. */
|
|
21
|
+
size?: EmptyStateSize | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* The heading level of the title. Taken from where the component finds
|
|
24
|
+
* itself by default; `none` renders no heading at all, for an empty state
|
|
25
|
+
* inside a section whose own heading already names it.
|
|
26
|
+
*/
|
|
27
|
+
headingLevel?: HeadingLevel | 'none' | undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Nothing here, said honestly.
|
|
31
|
+
*
|
|
32
|
+
* AN EMPTY STATE IS A SENTENCE, NOT A SHRUG. The three states it has to keep
|
|
33
|
+
* apart are "nothing has happened yet", "nothing could be read" and "this is
|
|
34
|
+
* not configured": the first is fine, the second is a fault somebody has to
|
|
35
|
+
* look at, and the third is a thing they can go and do. Rendered as the same
|
|
36
|
+
* grey "No data", they are indistinguishable, and the fault is the one that
|
|
37
|
+
* gets missed.
|
|
38
|
+
*/
|
|
39
|
+
export declare function EmptyState({ icon, illustration, title, description, action, size, headingLevel, className, ...rest }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The empty state.
|
|
3
|
+
*
|
|
4
|
+
* ITS MARK IS DECORATION and takes the decoration ink, which is the one place
|
|
5
|
+
* that step is allowed: a 32px glyph a reader does not have to make out. Every
|
|
6
|
+
* word in the box is on a step that clears 4.5:1, because the sentence is the
|
|
7
|
+
* whole point of the component.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.crewlet-empty-state {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
align-items: center;
|
|
14
|
+
justify-content: center;
|
|
15
|
+
gap: var(--spacing-2);
|
|
16
|
+
padding: var(--spacing-8) var(--spacing-4);
|
|
17
|
+
text-align: center;
|
|
18
|
+
font-family: var(--font-family-sans);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.crewlet-empty-state--compact {
|
|
22
|
+
padding: var(--spacing-6) var(--spacing-4);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.crewlet-empty-state__mark {
|
|
26
|
+
display: inline-flex;
|
|
27
|
+
margin-bottom: var(--spacing-1);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* The decoration step, and this is the one thing it is for: a 32px drawing a
|
|
32
|
+
* reader does not have to make out. It is set on the svg rather than on the
|
|
33
|
+
* wrapper so that it can never reach a word, which is the rule the package
|
|
34
|
+
* checks.
|
|
35
|
+
*/
|
|
36
|
+
.crewlet-empty-state__mark svg {
|
|
37
|
+
color: var(--color-text-muted);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* A STEP DOWN FROM THE PAGE'S OWN INK, both of them. The engine sets the
|
|
42
|
+
* sentence at the secondary step and the line under it at the tertiary one,
|
|
43
|
+
* and the reason is that nothing is here: the box is telling a reader what is
|
|
44
|
+
* absent, so it should not out-shout the content around it that is present.
|
|
45
|
+
* Both steps clear 4.5:1 on every ground in both palettes, which is what makes
|
|
46
|
+
* quiet different from faint.
|
|
47
|
+
*/
|
|
48
|
+
/*
|
|
49
|
+
* The page's own leading. The box is a sentence with a sentence under it, and
|
|
50
|
+
* at the tight step the heading's line sits closer to its own descenders than
|
|
51
|
+
* to the line it introduces.
|
|
52
|
+
*/
|
|
53
|
+
.crewlet-empty-state__title {
|
|
54
|
+
margin: 0;
|
|
55
|
+
font-size: var(--font-size-sm);
|
|
56
|
+
font-weight: var(--font-weight-medium);
|
|
57
|
+
line-height: var(--font-line-height-normal);
|
|
58
|
+
color: var(--color-text-secondary);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.crewlet-empty-state__description {
|
|
62
|
+
margin: 0;
|
|
63
|
+
/* Narrow on purpose: this is one or two sentences, and a line of it running
|
|
64
|
+
the width of a screen is a line nobody finishes. */
|
|
65
|
+
max-width: var(--size-measure-narrow);
|
|
66
|
+
font-size: var(--font-size-xs);
|
|
67
|
+
line-height: var(--font-line-height-normal);
|
|
68
|
+
color: var(--color-text-tertiary);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.crewlet-empty-state__action {
|
|
72
|
+
margin-top: var(--spacing-2);
|
|
73
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The mark an absent value is drawn as: an EN dash, U+2013.
|
|
3
|
+
*
|
|
4
|
+
* An en dash rather than an em dash, which this design system does not use
|
|
5
|
+
* anywhere; rather than a hyphen, which is a minus sign in a column of
|
|
6
|
+
* numbers; and rather than an empty cell, which reads as a value nobody has
|
|
7
|
+
* looked at yet.
|
|
8
|
+
*/
|
|
9
|
+
export declare const EMPTY_VALUE = "\u2013";
|
|
10
|
+
export interface EmptyValueProps {
|
|
11
|
+
/**
|
|
12
|
+
* What the absence means, read in place of the dash. "Not reported" is the
|
|
13
|
+
* honest default: the value was asked for and nothing came back. A caller
|
|
14
|
+
* that knows better should say so, because the distinctions matter: "Not
|
|
15
|
+
* configured" is a thing somebody can fix, "Not applicable" is not a gap at
|
|
16
|
+
* all, and "Not reported yet" is a thing that may still arrive.
|
|
17
|
+
*/
|
|
18
|
+
label?: string | undefined;
|
|
19
|
+
className?: string | undefined;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* A value that is not there, said once rather than drawn as a punctuation mark
|
|
23
|
+
* a screen reader reads as "dash" or skips entirely.
|
|
24
|
+
*
|
|
25
|
+
* AN ABSENT NUMBER IS A MARKED ABSENCE, NEVER A ZERO. A cost nobody measured
|
|
26
|
+
* and a cost of nothing are different facts, and a table that draws both as
|
|
27
|
+
* `0` has thrown the difference away where it can never be recovered. Every
|
|
28
|
+
* place that would have written a bare dash uses this instead, so the absence
|
|
29
|
+
* carries its own meaning and its own reading.
|
|
30
|
+
*/
|
|
31
|
+
export declare function EmptyValue({ label, className }: EmptyValueProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The absent value sits on the tertiary step, quieter than the values around
|
|
3
|
+
* it in a column and still over the 4.5:1 floor. NOT the decoration step: the
|
|
4
|
+
* dash is what tells a sighted reader the value is absent, so it is a fact
|
|
5
|
+
* they have to be able to make out, not an ornament.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.crewlet-empty-value {
|
|
9
|
+
color: var(--color-text-tertiary);
|
|
10
|
+
/* A dash in a numeric column lines up with the digits above it. */
|
|
11
|
+
font-variant-numeric: tabular-nums;
|
|
12
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
import { type AvatarSizeStep } from '../Avatar/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Whether the engine runs this one.
|
|
5
|
+
*
|
|
6
|
+
* `human` draws the badge with a dashed edge, which is structure and not
|
|
7
|
+
* status: a human seat is a real seat that no agent occupies. It is carried by
|
|
8
|
+
* the edge rather than by a hue, so the status hues keep meaning only what
|
|
9
|
+
* they mean.
|
|
10
|
+
*/
|
|
11
|
+
export type EntityChipVariant = 'agent' | 'human';
|
|
12
|
+
export interface EntityChipProps extends Omit<HTMLAttributes<HTMLElement>, 'children'> {
|
|
13
|
+
/** Who or what this is. Drawn as initials and read as the chip's own text. */
|
|
14
|
+
name: string;
|
|
15
|
+
/** Where it goes. With neither this nor `asChild` the chip is inert text. */
|
|
16
|
+
href?: string | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Render the single child element as the chip instead of an anchor, to put
|
|
19
|
+
* this look on a router's own Link while keeping its navigation.
|
|
20
|
+
*/
|
|
21
|
+
asChild?: boolean | undefined;
|
|
22
|
+
variant?: EntityChipVariant | undefined;
|
|
23
|
+
/** The badge's step. The name takes the surrounding text size either way. */
|
|
24
|
+
size?: AvatarSizeStep | undefined;
|
|
25
|
+
children?: ReactNode;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A name with its badge, as one thing.
|
|
29
|
+
*
|
|
30
|
+
* IT IS NOT DRAWN IN THE ACCENT, and that is the rule the component exists to
|
|
31
|
+
* hold. A seat's name is IDENTITY, and the accent means "where the reader is";
|
|
32
|
+
* a name rendered in the accent at every place it appears is identity-colouring
|
|
33
|
+
* by accident, and it leaves the one thing on the page that IS the reader's
|
|
34
|
+
* position indistinguishable from forty links that are not. The affordance is
|
|
35
|
+
* the hover and the cursor, which is what a whole-row link has anyway.
|
|
36
|
+
*
|
|
37
|
+
* The badge is DECORATIVE here: the name is printed right beside it, and a
|
|
38
|
+
* badge that was also read would make every row say the name twice.
|
|
39
|
+
*/
|
|
40
|
+
export declare function EntityChip({ name, href, asChild, variant, size, className, children, ...rest }: EntityChipProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A name with its badge, as one thing.
|
|
3
|
+
*
|
|
4
|
+
* A LINK THAT IS A ROW TAKES THE PAGE'S TEXT COLOUR, not the link colour.
|
|
5
|
+
* Otherwise every seat name in every list renders in the accent, which is
|
|
6
|
+
* identity-colouring by accident and leaves the one thing on the page that IS
|
|
7
|
+
* the reader's position looking exactly like forty links that are not. The
|
|
8
|
+
* affordance is the hover and the cursor.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
.crewlet-entity-chip {
|
|
12
|
+
display: inline-flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: var(--spacing-2);
|
|
15
|
+
min-width: 0;
|
|
16
|
+
max-width: 100%;
|
|
17
|
+
color: var(--color-text-primary);
|
|
18
|
+
font-family: var(--font-family-sans);
|
|
19
|
+
text-decoration: none;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.crewlet-entity-chip__name {
|
|
23
|
+
overflow: hidden;
|
|
24
|
+
text-overflow: ellipsis;
|
|
25
|
+
white-space: nowrap;
|
|
26
|
+
min-width: 0;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.crewlet-entity-chip--link {
|
|
30
|
+
cursor: pointer;
|
|
31
|
+
transition: color var(--motion-duration-fast) var(--motion-easing-default);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* TWO CARRIERS ON HOVER: the accent ink on the chip, and an underline on the
|
|
36
|
+
* NAME. The ink is the engine's, and it is the accent's own meaning, where the
|
|
37
|
+
* reader is about to be, spent for exactly as long as the pointer is there; at
|
|
38
|
+
* rest the chip stays in the page's ink, because a name rendered in the accent
|
|
39
|
+
* everywhere it appears is identity-colouring by accident and leaves the one
|
|
40
|
+
* thing on the page that IS the reader's position looking like forty links
|
|
41
|
+
* that are not. The underline is what a reader who cannot separate the two
|
|
42
|
+
* inks sees instead, and it costs the badge beside it no movement.
|
|
43
|
+
*/
|
|
44
|
+
.crewlet-entity-chip--link:hover,
|
|
45
|
+
.crewlet-entity-chip--link:focus-visible {
|
|
46
|
+
color: var(--color-brand-accent-ink);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.crewlet-entity-chip--link:hover .crewlet-entity-chip__name,
|
|
50
|
+
.crewlet-entity-chip--link:focus-visible .crewlet-entity-chip__name {
|
|
51
|
+
text-decoration: underline;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.crewlet-entity-chip--link:focus-visible {
|
|
55
|
+
outline: 2px solid var(--color-focus);
|
|
56
|
+
outline-offset: 2px;
|
|
57
|
+
border-radius: var(--radius-xs);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@media (prefers-reduced-motion: reduce) {
|
|
61
|
+
.crewlet-entity-chip--link {
|
|
62
|
+
transition: none;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Component, type ErrorInfo, type ReactNode } from 'react';
|
|
2
|
+
export interface ErrorBoundaryProps {
|
|
3
|
+
/**
|
|
4
|
+
* What the reader is looking at. A NEW VALUE IS A NEW CHANCE TO RENDER, so a
|
|
5
|
+
* route, a tab or a selected record is the right thing to pass: without one,
|
|
6
|
+
* a boundary that has caught stays caught until the page is reloaded, and
|
|
7
|
+
* going somewhere else shows the failure of the screen you left.
|
|
8
|
+
*/
|
|
9
|
+
resetKey?: string | number | undefined;
|
|
10
|
+
/** Draws the failure. Without one, the boundary draws the block below. */
|
|
11
|
+
fallback?: ((error: Error, reset: () => void) => ReactNode) | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Reports the failure to wherever the application collects them.
|
|
14
|
+
*
|
|
15
|
+
* The one thing a fallback cannot do: it runs during a render, where a write
|
|
16
|
+
* to a log, a counter or a session is a side effect in the wrong phase.
|
|
17
|
+
*/
|
|
18
|
+
onError?: ((error: Error, info: ErrorInfo) => void) | undefined;
|
|
19
|
+
/** The default fallback's heading. */
|
|
20
|
+
title?: string | undefined;
|
|
21
|
+
/** The default fallback's sentence. */
|
|
22
|
+
description?: string | undefined;
|
|
23
|
+
/** The default fallback's button. */
|
|
24
|
+
retryLabel?: string | undefined;
|
|
25
|
+
children?: ReactNode;
|
|
26
|
+
}
|
|
27
|
+
interface ErrorBoundaryState {
|
|
28
|
+
error: Error | null;
|
|
29
|
+
/** The key the current state belongs to, so a change of key is visible here. */
|
|
30
|
+
resetKey: string | number | undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* One region that throws takes itself down, and nothing else.
|
|
34
|
+
*
|
|
35
|
+
* WITHOUT ONE, A RENDER ERROR UNMOUNTS THE WHOLE APPLICATION. That is React's
|
|
36
|
+
* contract, and it is what one malformed field did to the dashboard this is
|
|
37
|
+
* ported from: a seat whose model was a per-phase mapping reached a component
|
|
38
|
+
* as an object child, and the reader was left with a blank page, no navigation
|
|
39
|
+
* and no way to learn which screen or which field. The console that has no
|
|
40
|
+
* boundary at all has the same failure waiting in it.
|
|
41
|
+
*
|
|
42
|
+
* WHERE IT GOES: around the routed screen, and only there. The shell around it
|
|
43
|
+
* is what a reader needs in order to get somewhere else, so a boundary that
|
|
44
|
+
* wraps the shell too takes the way out down with the screen.
|
|
45
|
+
*
|
|
46
|
+
* IT RESETS on a new `resetKey` and when the reader asks to try again. React
|
|
47
|
+
* reports a caught error to the console itself, so this logs nothing: a second
|
|
48
|
+
* report says the same thing twice and makes the first one harder to find.
|
|
49
|
+
*/
|
|
50
|
+
export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
|
|
51
|
+
state: ErrorBoundaryState;
|
|
52
|
+
static getDerivedStateFromError(error: unknown): Partial<ErrorBoundaryState>;
|
|
53
|
+
static getDerivedStateFromProps(props: ErrorBoundaryProps, state: ErrorBoundaryState): Partial<ErrorBoundaryState> | null;
|
|
54
|
+
componentDidCatch(error: Error, info: ErrorInfo): void;
|
|
55
|
+
private readonly reset;
|
|
56
|
+
render(): ReactNode;
|
|
57
|
+
}
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The default fallback: a quiet block on the inset surface rather than a red
|
|
3
|
+
* panel. A screen that failed to draw is not an error the reader made, and a
|
|
4
|
+
* danger frame around it says the opposite. The one danger note is the
|
|
5
|
+
* message itself, which is the part a report needs.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.crewlet-error-boundary {
|
|
9
|
+
display: flex;
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
align-items: flex-start;
|
|
12
|
+
gap: var(--spacing-3);
|
|
13
|
+
/* The panel's own body inset and its lift: a fallback is still a panel of
|
|
14
|
+
the product, and one drawn without the rim read as a block of unstyled
|
|
15
|
+
text where the screen should have been. */
|
|
16
|
+
padding: var(--spacing-4);
|
|
17
|
+
border: 1px solid var(--color-border-default);
|
|
18
|
+
border-radius: var(--radius-lg);
|
|
19
|
+
background: var(--color-surface-subtle);
|
|
20
|
+
box-shadow: var(--shadow-xs), var(--shadow-hairline);
|
|
21
|
+
max-width: var(--size-measure);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.crewlet-error-boundary__title {
|
|
25
|
+
margin: 0;
|
|
26
|
+
font-family: var(--font-family-sans);
|
|
27
|
+
/* The panel title register. It was the 18px heading step, which on a block
|
|
28
|
+
that replaces one section of a screen announced itself more loudly than
|
|
29
|
+
the screen's own name. */
|
|
30
|
+
font-size: var(--font-size-sm);
|
|
31
|
+
font-weight: var(--font-weight-semibold);
|
|
32
|
+
letter-spacing: var(--font-letter-spacing-tight);
|
|
33
|
+
color: var(--color-text-primary);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.crewlet-error-boundary__description {
|
|
37
|
+
margin: 0;
|
|
38
|
+
font-family: var(--font-family-sans);
|
|
39
|
+
font-size: var(--font-size-compact);
|
|
40
|
+
line-height: var(--font-line-height-normal);
|
|
41
|
+
color: var(--color-text-secondary);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* The message wraps rather than scrolls: it is one sentence from a thrown
|
|
45
|
+
error, and a reader asked to copy it should be able to see all of it. */
|
|
46
|
+
.crewlet-error-boundary__message {
|
|
47
|
+
margin: 0;
|
|
48
|
+
max-width: 100%;
|
|
49
|
+
padding: var(--spacing-3);
|
|
50
|
+
border: 1px solid var(--color-feedback-danger-line);
|
|
51
|
+
border-radius: var(--radius-md);
|
|
52
|
+
background: var(--color-surface-inset);
|
|
53
|
+
font-family: var(--font-family-mono);
|
|
54
|
+
font-size: var(--font-size-compact);
|
|
55
|
+
line-height: var(--font-line-height-normal);
|
|
56
|
+
color: var(--color-feedback-danger-ink);
|
|
57
|
+
white-space: pre-wrap;
|
|
58
|
+
overflow-wrap: anywhere;
|
|
59
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
export type EyebrowVariant = 'muted' | 'accent' | 'gradient';
|
|
3
|
+
export type EyebrowElement = 'span' | 'div' | 'p';
|
|
4
|
+
export interface EyebrowProps extends HTMLAttributes<HTMLElement> {
|
|
5
|
+
/** Element to render. Defaults to an inline span. */
|
|
6
|
+
as?: EyebrowElement | undefined;
|
|
7
|
+
variant?: EyebrowVariant | undefined;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Eyebrow (kicker), the small uppercase label that sits above a section title
|
|
11
|
+
* to name the section.
|
|
12
|
+
*
|
|
13
|
+
* It is set in THE micro-label register, the same one `Text variant="label"`
|
|
14
|
+
* and a table's column head take, so a kicker over a marketing band and a
|
|
15
|
+
* column head in a console read as one system rather than as two ideas of
|
|
16
|
+
* what a small uppercase label is.
|
|
17
|
+
*/
|
|
18
|
+
export declare const Eyebrow: ({ as: As, variant, className, children, ...rest }: EyebrowProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Eyebrow (kicker), the uppercase label that names a section.
|
|
3
|
+
*
|
|
4
|
+
* THE ONE MICRO-LABEL REGISTER, and it is the same one `Text variant="label"`
|
|
5
|
+
* and a table's column head are set in: 11px, medium, the wide track,
|
|
6
|
+
* uppercase, on the tertiary step. It used to be its own thing (monospace, one
|
|
7
|
+
* size up, semibold, the wider track), and two registers that mean "this names
|
|
8
|
+
* the block under it" is exactly how a page ends up with six tracking values
|
|
9
|
+
* for one job.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
.crewlet-eyebrow {
|
|
13
|
+
display: inline-block;
|
|
14
|
+
font-size: var(--font-size-2xs);
|
|
15
|
+
font-weight: var(--font-weight-medium);
|
|
16
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
17
|
+
text-transform: uppercase;
|
|
18
|
+
line-height: var(--font-line-height-snug);
|
|
19
|
+
color: var(--color-text-tertiary);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.crewlet-eyebrow--muted {
|
|
23
|
+
color: var(--color-text-tertiary);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
* The accent as TEXT takes the INK step, never the fill. The fill is a mark
|
|
28
|
+
* and clears 3:1; a word has to clear 4.5:1, and an 11px uppercase label is
|
|
29
|
+
* exactly where a fill-as-text fails.
|
|
30
|
+
*/
|
|
31
|
+
.crewlet-eyebrow--accent {
|
|
32
|
+
color: var(--color-brand-accent-ink);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* A marketing hero's kicker. A gradient painted through the glyphs has no
|
|
37
|
+
* measurable contrast, so it is reserved for display type over a surface the
|
|
38
|
+
* page controls, never for a label carrying a fact on its own.
|
|
39
|
+
*/
|
|
40
|
+
.crewlet-eyebrow--gradient {
|
|
41
|
+
background: var(--color-brand-gradient);
|
|
42
|
+
-webkit-background-clip: text;
|
|
43
|
+
background-clip: text;
|
|
44
|
+
-webkit-text-fill-color: transparent;
|
|
45
|
+
color: transparent;
|
|
46
|
+
}
|