@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,406 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The tag: a small pill naming a state, a phase or a value.
|
|
3
|
+
*
|
|
4
|
+
* THREE VARIABLES CARRY EVERY VARIANT. A tag is its tone's `soft` tint under
|
|
5
|
+
* its tone's `ink`, with the `line` step as the boundary it grows when it can
|
|
6
|
+
* be pressed, so the whole palette is three declarations per variant and the
|
|
7
|
+
* geometry is written once. 0.2.0 spelled five dark-theme literals instead
|
|
8
|
+
* (#93c5fd, #86efac, #fde68a, #fca5a5 and the accent as text), which measured
|
|
9
|
+
* between 1.14:1 and 1.58:1 on a light page.
|
|
10
|
+
*
|
|
11
|
+
* A PRESSED TAG DOES NOT REPAINT ITS GROUND. Every deeper fill measured under
|
|
12
|
+
* 4.5:1 for at least one tone in the light palette (warning reached 4.42:1
|
|
13
|
+
* over the elevated surface), and the engine's own pressed badge drew the
|
|
14
|
+
* label in its ink on a background of the same ink, at 1:1. The press is
|
|
15
|
+
* carried by the boundary instead: transparent at rest, the line step on
|
|
16
|
+
* hover, the ink step with an inset rule when it is on. The measured
|
|
17
|
+
* ink-on-soft composite never moves.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
.crewlet-tag {
|
|
21
|
+
/*
|
|
22
|
+
* THE ENGINE'S BADGE. Its line box is 11px at the document's 1.5 leading
|
|
23
|
+
* plus a pixel of padding and a pixel of border on each side, which lands on
|
|
24
|
+
* 20.5px; the step below is the whole pixel that renders, and it scales with
|
|
25
|
+
* density the way every size token does.
|
|
26
|
+
*
|
|
27
|
+
* The height is a STEP and the floor is separate, because the two answer
|
|
28
|
+
* different questions. A tag that only labels takes the engine's geometry
|
|
29
|
+
* exactly. A tag that ACTS is a pointer target, and 20px fails WCAG 2.2, so
|
|
30
|
+
* it takes the 24px floor as well: the engine draws its actionable badge at
|
|
31
|
+
* the inert one's height, which is the one place its look and the target
|
|
32
|
+
* rule disagree. Nothing else about the pill changes, so a row of tags still
|
|
33
|
+
* reads as one set.
|
|
34
|
+
*/
|
|
35
|
+
--crewlet-tag-height: calc(20px * var(--density, 1));
|
|
36
|
+
--crewlet-tag-floor: 0px;
|
|
37
|
+
--crewlet-tag-fill: var(--color-surface-inset);
|
|
38
|
+
--crewlet-tag-ink: var(--color-text-secondary);
|
|
39
|
+
--crewlet-tag-line: var(--color-border-hover);
|
|
40
|
+
|
|
41
|
+
display: inline-flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
gap: var(--spacing-1);
|
|
44
|
+
height: max(var(--crewlet-tag-height), var(--crewlet-tag-floor));
|
|
45
|
+
padding: 0 var(--spacing-2);
|
|
46
|
+
border: 1px solid transparent;
|
|
47
|
+
border-radius: var(--radius-xs);
|
|
48
|
+
background: var(--crewlet-tag-fill);
|
|
49
|
+
color: var(--crewlet-tag-ink);
|
|
50
|
+
font-family: var(--font-family-sans);
|
|
51
|
+
font-size: var(--font-size-2xs);
|
|
52
|
+
font-weight: var(--font-weight-medium);
|
|
53
|
+
/* The engine tracks the badge a hundredth of an em open, which is the
|
|
54
|
+
normal step at this size: a hundredth of 11px is a tenth of a pixel. */
|
|
55
|
+
letter-spacing: var(--font-letter-spacing-normal);
|
|
56
|
+
line-height: 1;
|
|
57
|
+
/* A tag is an atomic token: its label never breaks across lines inside the
|
|
58
|
+
pill. A constrained layout truncates it with an ellipsis instead. */
|
|
59
|
+
white-space: nowrap;
|
|
60
|
+
max-width: 100%;
|
|
61
|
+
vertical-align: middle;
|
|
62
|
+
box-sizing: border-box;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.crewlet-tag__label {
|
|
66
|
+
overflow: hidden;
|
|
67
|
+
text-overflow: ellipsis;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.crewlet-tag__icon {
|
|
71
|
+
display: inline-flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
flex: none;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/*
|
|
77
|
+
* INSIDE A PILL THE DOT IS THE PILL'S OWN INK, not the tone's fill step.
|
|
78
|
+
*
|
|
79
|
+
* StatusDot paints the fill step, which is measured as a mark against the
|
|
80
|
+
* OPAQUE surfaces a page is made of. Inside a tag it lands on the tone's soft
|
|
81
|
+
* tint instead, and that composite is a different number: the accent fell to
|
|
82
|
+
* 2.65:1 and the danger red to 2.96:1 over their own tints in the dark
|
|
83
|
+
* palette, both under the 3:1 a mark has to clear. The ink step is the pair
|
|
84
|
+
* that IS measured on that tint, at 4.5:1, and it is also the colour of the
|
|
85
|
+
* word beside it, so the shape reads as part of the label rather than as a
|
|
86
|
+
* second object sitting on it.
|
|
87
|
+
*
|
|
88
|
+
* Two classes deep, so it beats StatusDot's own tone rule whichever order the
|
|
89
|
+
* bundle writes the two files in.
|
|
90
|
+
*/
|
|
91
|
+
.crewlet-tag .crewlet-tag__dot {
|
|
92
|
+
flex: none;
|
|
93
|
+
background: currentColor;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* Tabular figures, so a count that ticks up does not move the label beside
|
|
97
|
+
it, and the tag's own ink, because the number is part of what it says. */
|
|
98
|
+
.crewlet-tag__count {
|
|
99
|
+
font-variant-numeric: tabular-nums;
|
|
100
|
+
font-weight: var(--font-weight-semibold);
|
|
101
|
+
flex: none;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ── sizes ─────────────────────────────────────────────────────────────── */
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* THREE HEIGHTS OF ONE BADGE. The engine draws a single pill and spends its
|
|
108
|
+
* variation on tone rather than on size, so the steps here differ by how much
|
|
109
|
+
* room the pill takes and not by what it is: the type, the radius, the weight
|
|
110
|
+
* and the tracking are the engine's at every one of them.
|
|
111
|
+
*
|
|
112
|
+
* xs is an 18px pill and is NON-INTERACTIVE for that reason: it is under the
|
|
113
|
+
* 24px target floor, and the component refuses a press at this step. It is for
|
|
114
|
+
* a mark inside a dense row, where the label is still the carrier.
|
|
115
|
+
*
|
|
116
|
+
* EVERY STEP SCALES WITH DENSITY, which is not decoration: written as a flat
|
|
117
|
+
* 18px, this one stayed put while the badge above it came down to
|
|
118
|
+
* 20 x 0.82 = 16.4px, so the dense mark rendered TALLER than the badge it is
|
|
119
|
+
* meant to sit inside a row of. A step that does not move with the rest of the
|
|
120
|
+
* scale is a step that overtakes one of its neighbours at some density.
|
|
121
|
+
*/
|
|
122
|
+
.crewlet-tag--xs {
|
|
123
|
+
--crewlet-tag-height: calc(18px * var(--density, 1));
|
|
124
|
+
padding: 0 var(--spacing-1);
|
|
125
|
+
gap: 3px;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* The engine's badge, and the default. */
|
|
129
|
+
.crewlet-tag--sm {
|
|
130
|
+
--crewlet-tag-height: calc(20px * var(--density, 1));
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* The md step is a small control's own height, so a tag and a small button in
|
|
134
|
+
one toolbar sit on the same baseline. One type step up with it: 11px inside
|
|
135
|
+
a 28px pill reads as a label that lost its box. */
|
|
136
|
+
.crewlet-tag--md {
|
|
137
|
+
--crewlet-tag-height: var(--size-control-sm);
|
|
138
|
+
font-size: var(--font-size-xs);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/*
|
|
142
|
+
* A TAG THAT ACTS CLEARS 24px, at every density and every step. Last among the
|
|
143
|
+
* steps so it is the floor whichever one is drawn, and a floor rather than a
|
|
144
|
+
* height so the md step keeps its 28px.
|
|
145
|
+
*/
|
|
146
|
+
.crewlet-tag--acts {
|
|
147
|
+
--crewlet-tag-floor: max(24px, calc(24px * var(--density, 1)));
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* One step down from the sans, where there is a step to take: a mono face
|
|
151
|
+
draws larger than the sans at the same size, and a machine value beside a
|
|
152
|
+
word has to read as the same line. At the two smaller steps the sans is
|
|
153
|
+
already at the bottom of the scale and the mono stays beside it. */
|
|
154
|
+
.crewlet-tag--monospace .crewlet-tag__label {
|
|
155
|
+
font-family: var(--font-family-mono);
|
|
156
|
+
font-size: var(--font-size-2xs);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/* ── variants ──────────────────────────────────────────────────────────── */
|
|
160
|
+
|
|
161
|
+
.crewlet-tag--info {
|
|
162
|
+
--crewlet-tag-fill: var(--color-feedback-info-soft);
|
|
163
|
+
--crewlet-tag-ink: var(--color-feedback-info-ink);
|
|
164
|
+
--crewlet-tag-line: var(--color-feedback-info-line);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.crewlet-tag--success {
|
|
168
|
+
--crewlet-tag-fill: var(--color-feedback-success-soft);
|
|
169
|
+
--crewlet-tag-ink: var(--color-feedback-success-ink);
|
|
170
|
+
--crewlet-tag-line: var(--color-feedback-success-line);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
.crewlet-tag--warning {
|
|
174
|
+
--crewlet-tag-fill: var(--color-feedback-warning-soft);
|
|
175
|
+
--crewlet-tag-ink: var(--color-feedback-warning-ink);
|
|
176
|
+
--crewlet-tag-line: var(--color-feedback-warning-line);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
.crewlet-tag--danger {
|
|
180
|
+
--crewlet-tag-fill: var(--color-feedback-danger-soft);
|
|
181
|
+
--crewlet-tag-ink: var(--color-feedback-danger-ink);
|
|
182
|
+
--crewlet-tag-line: var(--color-feedback-danger-line);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.crewlet-tag--brand {
|
|
186
|
+
--crewlet-tag-fill: var(--color-brand-accent-soft);
|
|
187
|
+
--crewlet-tag-ink: var(--color-brand-accent-ink);
|
|
188
|
+
--crewlet-tag-line: var(--color-brand-accent-soft-strong);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/*
|
|
192
|
+
* The phase family has a soft step and no line step, because nothing else in
|
|
193
|
+
* the system needed a phase boundary. The ink is the boundary here: it is the
|
|
194
|
+
* same hue at a strength a 1px rule can be seen at, and a border is not text,
|
|
195
|
+
* so the rule that an ink step is never a BACKGROUND is untouched.
|
|
196
|
+
*
|
|
197
|
+
* A PHASE IS SET IN THE MICRO-LABEL REGISTER, uppercase and tracked open,
|
|
198
|
+
* where a state is set in the badge's own. Phase is the one categorical
|
|
199
|
+
* identity the product spends colour on outside a chart, and it is what a
|
|
200
|
+
* reader follows across four screens; the second register is what separates it
|
|
201
|
+
* at a glance from the state badge sitting beside it on the same row.
|
|
202
|
+
*/
|
|
203
|
+
.crewlet-tag--phase-onboarding,
|
|
204
|
+
.crewlet-tag--phase-execute,
|
|
205
|
+
.crewlet-tag--phase-review {
|
|
206
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
207
|
+
text-transform: uppercase;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.crewlet-tag--phase-onboarding {
|
|
211
|
+
--crewlet-tag-fill: var(--color-phase-onboarding-soft);
|
|
212
|
+
--crewlet-tag-ink: var(--color-phase-onboarding-ink);
|
|
213
|
+
--crewlet-tag-line: var(--color-phase-onboarding-ink);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.crewlet-tag--phase-execute {
|
|
217
|
+
--crewlet-tag-fill: var(--color-phase-execute-soft);
|
|
218
|
+
--crewlet-tag-ink: var(--color-phase-execute-ink);
|
|
219
|
+
--crewlet-tag-line: var(--color-phase-execute-ink);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.crewlet-tag--phase-review {
|
|
223
|
+
--crewlet-tag-fill: var(--color-phase-review-soft);
|
|
224
|
+
--crewlet-tag-ink: var(--color-phase-review-ink);
|
|
225
|
+
--crewlet-tag-line: var(--color-phase-review-ink);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/* ── appearance ────────────────────────────────────────────────────────── */
|
|
229
|
+
|
|
230
|
+
/*
|
|
231
|
+
* The outline appearance drops the tint and keeps the boundary, for a row
|
|
232
|
+
* where a tinted pill would be one fill too many: a tag inside a card that is
|
|
233
|
+
* already tinted, or a list of values where only one of them is a state.
|
|
234
|
+
*/
|
|
235
|
+
.crewlet-tag--outline {
|
|
236
|
+
background: transparent;
|
|
237
|
+
border-color: var(--crewlet-tag-line);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* The neutral outline is the engine's `.badge.outline`: the hairline step as
|
|
241
|
+
the boundary, and the tertiary ink, which is a quieter register than the
|
|
242
|
+
tinted outlines keep. It is the appearance for a value that is not a state
|
|
243
|
+
at all, so it says less than its neighbours on purpose. */
|
|
244
|
+
.crewlet-tag--neutral.crewlet-tag--outline {
|
|
245
|
+
border-color: var(--color-border-default);
|
|
246
|
+
--crewlet-tag-ink: var(--color-text-tertiary);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/* ── the interactive form ──────────────────────────────────────────────── */
|
|
250
|
+
|
|
251
|
+
.crewlet-tag--actionable {
|
|
252
|
+
cursor: pointer;
|
|
253
|
+
/* A button inherits none of these. */
|
|
254
|
+
font-family: inherit;
|
|
255
|
+
transition:
|
|
256
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default),
|
|
257
|
+
box-shadow var(--motion-duration-fast) var(--motion-easing-default);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.crewlet-tag--actionable:hover {
|
|
261
|
+
border-color: var(--crewlet-tag-line);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
.crewlet-tag--actionable[aria-pressed='true'] {
|
|
265
|
+
border-color: var(--crewlet-tag-ink);
|
|
266
|
+
box-shadow: inset 0 0 0 1px var(--crewlet-tag-ink);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.crewlet-tag--actionable:focus-visible,
|
|
270
|
+
.crewlet-tag__press:focus-visible,
|
|
271
|
+
.crewlet-tag__remove:focus-visible {
|
|
272
|
+
outline: 2px solid var(--color-focus);
|
|
273
|
+
outline-offset: 2px;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
/* ── the pill that holds two controls ──────────────────────────────────── */
|
|
277
|
+
|
|
278
|
+
/*
|
|
279
|
+
* A tag that both presses and removes is TWO CONTROLS SIDE BY SIDE, because
|
|
280
|
+
* one of them inside the other is a button inside a button: invalid markup,
|
|
281
|
+
* and one control whose inner half no keyboard reaches. The pill keeps the
|
|
282
|
+
* fill, the ink and the boundary; the press takes the left of it and the
|
|
283
|
+
* remove the right, each the pill's full height, so neither is under 24px.
|
|
284
|
+
*/
|
|
285
|
+
.crewlet-tag--split {
|
|
286
|
+
padding: 0;
|
|
287
|
+
transition:
|
|
288
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default),
|
|
289
|
+
box-shadow var(--motion-duration-fast) var(--motion-easing-default);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.crewlet-tag--split .crewlet-tag__press {
|
|
293
|
+
display: inline-flex;
|
|
294
|
+
align-items: center;
|
|
295
|
+
align-self: stretch;
|
|
296
|
+
gap: inherit;
|
|
297
|
+
min-width: 0;
|
|
298
|
+
padding: 0 var(--spacing-2);
|
|
299
|
+
border: 0;
|
|
300
|
+
border-radius: var(--radius-xs) 0 0 var(--radius-xs);
|
|
301
|
+
background: transparent;
|
|
302
|
+
/* A button inherits none of these. */
|
|
303
|
+
color: inherit;
|
|
304
|
+
font-family: inherit;
|
|
305
|
+
font-size: inherit;
|
|
306
|
+
font-weight: inherit;
|
|
307
|
+
letter-spacing: inherit;
|
|
308
|
+
line-height: inherit;
|
|
309
|
+
cursor: pointer;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/* The remove has no padding of the pill's to eat back here. */
|
|
313
|
+
.crewlet-tag--split .crewlet-tag__remove {
|
|
314
|
+
margin-right: 0;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.crewlet-tag--split:hover {
|
|
318
|
+
border-color: var(--crewlet-tag-line);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/*
|
|
322
|
+
* The same boundary the single-control form draws, put on the pill: the
|
|
323
|
+
* press state belongs to the whole tag, and drawing it around the press half
|
|
324
|
+
* alone would read as a second control beside the remove.
|
|
325
|
+
*/
|
|
326
|
+
.crewlet-tag--split.is-pressed {
|
|
327
|
+
border-color: var(--crewlet-tag-ink);
|
|
328
|
+
box-shadow: inset 0 0 0 1px var(--crewlet-tag-ink);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/* ── the remove control ────────────────────────────────────────────────── */
|
|
332
|
+
|
|
333
|
+
/*
|
|
334
|
+
* The target is the tag's own height, not the glyph's. A 16px close drawn as a
|
|
335
|
+
* 16px button is a target under the floor; drawn as a full-height one at the
|
|
336
|
+
* trailing edge, the glyph stays small and the thing a finger has to hit is
|
|
337
|
+
* the whole end of the pill.
|
|
338
|
+
*
|
|
339
|
+
* ITS OWN HEIGHT MEANS THE PILL'S OUTER BOX, which is what `--crewlet-tag-acts`
|
|
340
|
+
* floors at 24px. `align-self: stretch` reaches the flex container's CONTENT
|
|
341
|
+
* box, and the pill's is its 1px boundary shorter on each side, so the control
|
|
342
|
+
* measured 22px inside a 24px tag: under the floor the class beside it exists
|
|
343
|
+
* to hold. The block margin pulls it back over that boundary, exactly as the
|
|
344
|
+
* inline one already pulls it over the pill's trailing pad. The longhands
|
|
345
|
+
* rather than the `margin-block` shorthand: this is the one declaration that
|
|
346
|
+
* holds the control at a pointer target, and the suite that measures it reads
|
|
347
|
+
* a box the cascade decides, where the shorthand expands to nothing.
|
|
348
|
+
*/
|
|
349
|
+
.crewlet-tag__remove {
|
|
350
|
+
display: inline-flex;
|
|
351
|
+
align-items: center;
|
|
352
|
+
justify-content: center;
|
|
353
|
+
align-self: stretch;
|
|
354
|
+
min-width: 24px;
|
|
355
|
+
margin-block-start: -1px;
|
|
356
|
+
margin-block-end: -1px;
|
|
357
|
+
margin-right: calc(var(--spacing-2) * -1);
|
|
358
|
+
padding: 0 var(--spacing-1);
|
|
359
|
+
border: 0;
|
|
360
|
+
border-radius: 0 var(--radius-xs) var(--radius-xs) 0;
|
|
361
|
+
background: transparent;
|
|
362
|
+
color: inherit;
|
|
363
|
+
cursor: pointer;
|
|
364
|
+
opacity: 0.7;
|
|
365
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.crewlet-tag__remove:hover {
|
|
369
|
+
opacity: 1;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/* ── mount ─────────────────────────────────────────────────────────────── */
|
|
373
|
+
|
|
374
|
+
/*
|
|
375
|
+
* OPT IN, because tags arrive in their hundreds on a data push and a list that
|
|
376
|
+
* animates every arrival is one nobody can read while it is arriving. It is
|
|
377
|
+
* still here for the case it was written for: a chip the reader themselves
|
|
378
|
+
* just added to a field.
|
|
379
|
+
*/
|
|
380
|
+
.crewlet-tag--animate-in {
|
|
381
|
+
animation: crewlet-tag-in var(--motion-duration-base) var(--motion-easing-emphasized);
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
@keyframes crewlet-tag-in {
|
|
385
|
+
from {
|
|
386
|
+
opacity: 0;
|
|
387
|
+
transform: scale(0.94);
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
to {
|
|
391
|
+
opacity: 1;
|
|
392
|
+
transform: scale(1);
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
@media (prefers-reduced-motion: reduce) {
|
|
397
|
+
.crewlet-tag--animate-in {
|
|
398
|
+
animation: none;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.crewlet-tag--actionable,
|
|
402
|
+
.crewlet-tag--split,
|
|
403
|
+
.crewlet-tag__remove {
|
|
404
|
+
transition: none;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface TagGroupProps {
|
|
3
|
+
/**
|
|
4
|
+
* What the tags are about, read before them: "what this is about", "Labels",
|
|
5
|
+
* "Subjects". REQUIRED, because a bare row of handles is a row of words a
|
|
6
|
+
* screen reader reads with nothing to hang them on.
|
|
7
|
+
*/
|
|
8
|
+
label: string;
|
|
9
|
+
/**
|
|
10
|
+
* How many to show before the rest go behind a count. Six, because six
|
|
11
|
+
* handles or addresses are legible at a glance on one line of a card and the
|
|
12
|
+
* seventh is where a row starts wrapping; the measured long case is
|
|
13
|
+
* thirty-six service accounts.
|
|
14
|
+
*/
|
|
15
|
+
max?: number | undefined;
|
|
16
|
+
/** The overflow control's label. */
|
|
17
|
+
moreLabel?: ((hidden: number) => string) | undefined;
|
|
18
|
+
/** What is said once the rest are shown. */
|
|
19
|
+
expandedMessage?: ((total: number) => string) | undefined;
|
|
20
|
+
className?: string | undefined;
|
|
21
|
+
children?: ReactNode;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A labelled list of tags, with the tail behind a count.
|
|
25
|
+
*
|
|
26
|
+
* IT EXPANDS IN PLACE rather than linking away, because the reason the rest
|
|
27
|
+
* are folded is WIDTH, not secrecy: the list somebody is working through has
|
|
28
|
+
* thirty-six things in it and sending them to another screen to read it is the
|
|
29
|
+
* opposite of helping. It is not a disclosure either. A disclosure whose
|
|
30
|
+
* summary reads "all 1 agents" is ungrammatical twice and hides, behind a
|
|
31
|
+
* click, exactly what the sentence above it has already said.
|
|
32
|
+
*
|
|
33
|
+
* A LIST, not a row of spans: the count is what a reader is told when they
|
|
34
|
+
* arrive, and only a list carries one.
|
|
35
|
+
*
|
|
36
|
+
* The sentence it says on expanding goes through the shared announcer, so the
|
|
37
|
+
* application needs one `<Announcer>` mounted in its shell. Without one the
|
|
38
|
+
* expansion still works and the announcer says loudly that nothing was said,
|
|
39
|
+
* which is the point of it being one region rather than one per component.
|
|
40
|
+
*/
|
|
41
|
+
export declare function TagGroup({ label, max, moreLabel, expandedMessage, className, children, }: TagGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A labelled list of tags with the tail behind a count.
|
|
3
|
+
*
|
|
4
|
+
* The overflow control is drawn as a tag rather than as a button, because it
|
|
5
|
+
* stands in the row where the rest of them are: a button styled as a control
|
|
6
|
+
* would read as a different kind of thing from the six items beside it, which
|
|
7
|
+
* is exactly what it is not.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.crewlet-tag-group {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-wrap: wrap;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: var(--spacing-1);
|
|
15
|
+
margin: 0;
|
|
16
|
+
padding: 0;
|
|
17
|
+
list-style: none;
|
|
18
|
+
min-width: 0;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/* The list takes focus when the overflow control expands it and takes itself
|
|
22
|
+
away with it, so the reader has to be able to see where they landed. */
|
|
23
|
+
.crewlet-tag-group:focus-visible {
|
|
24
|
+
outline: 2px solid var(--color-focus);
|
|
25
|
+
outline-offset: 2px;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.crewlet-tag-group__item {
|
|
29
|
+
display: inline-flex;
|
|
30
|
+
min-width: 0;
|
|
31
|
+
max-width: 100%;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* It wears the tag's own face: the badge radius, the badge type and the badge
|
|
36
|
+
* weight, so the row reads as one set with a dashed member rather than as six
|
|
37
|
+
* tags and a control. The height is the 24px target floor rather than the
|
|
38
|
+
* badge's 20px step, for the same reason a tag that acts takes it.
|
|
39
|
+
*/
|
|
40
|
+
.crewlet-tag-group__more {
|
|
41
|
+
display: inline-flex;
|
|
42
|
+
align-items: center;
|
|
43
|
+
height: max(24px, calc(24px * var(--density, 1)));
|
|
44
|
+
padding: 0 var(--spacing-2);
|
|
45
|
+
border: 1px dashed var(--color-border-hover);
|
|
46
|
+
border-radius: var(--radius-xs);
|
|
47
|
+
background: transparent;
|
|
48
|
+
color: var(--color-text-secondary);
|
|
49
|
+
font-family: var(--font-family-sans);
|
|
50
|
+
font-size: var(--font-size-2xs);
|
|
51
|
+
font-weight: var(--font-weight-medium);
|
|
52
|
+
line-height: 1;
|
|
53
|
+
white-space: nowrap;
|
|
54
|
+
cursor: pointer;
|
|
55
|
+
box-sizing: border-box;
|
|
56
|
+
transition:
|
|
57
|
+
border-color var(--motion-duration-fast) var(--motion-easing-default),
|
|
58
|
+
color var(--motion-duration-fast) var(--motion-easing-default);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.crewlet-tag-group__more:hover {
|
|
62
|
+
border-color: var(--color-border-strong-hover);
|
|
63
|
+
color: var(--color-text-primary);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.crewlet-tag-group__more:focus-visible {
|
|
67
|
+
outline: 2px solid var(--color-focus);
|
|
68
|
+
outline-offset: 2px;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media (prefers-reduced-motion: reduce) {
|
|
72
|
+
.crewlet-tag-group__more {
|
|
73
|
+
transition: none;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { type TagVariant } from '../Tag/index.js';
|
|
2
|
+
export interface TagsInputOption {
|
|
3
|
+
/** What is stored when the option is taken. */
|
|
4
|
+
value: string;
|
|
5
|
+
/** What is drawn, on the chip and in the list. The value itself when left out. */
|
|
6
|
+
label?: string | undefined;
|
|
7
|
+
/** Options sharing a group are listed under its name, in first-seen order. */
|
|
8
|
+
group?: string | undefined;
|
|
9
|
+
/** A short second line of identity, such as a handle. */
|
|
10
|
+
description?: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
export interface TagsInputProps {
|
|
13
|
+
/** The values held, in the order they were chosen. */
|
|
14
|
+
value: string[];
|
|
15
|
+
/** Called with the next list when one is added, removed or moved. */
|
|
16
|
+
onChange: (next: string[]) => void;
|
|
17
|
+
/**
|
|
18
|
+
* What may be chosen. With options the field is a combobox over a
|
|
19
|
+
* multiselectable listbox; without them it is the free-text chip field it
|
|
20
|
+
* has always been.
|
|
21
|
+
*/
|
|
22
|
+
options?: readonly TagsInputOption[] | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Whether a value the options do not offer may be typed in. Default true,
|
|
25
|
+
* which is what the field did before it had options at all.
|
|
26
|
+
*/
|
|
27
|
+
allowCustom?: boolean | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Whether the ORDER of the chips is meaning: a provider fallback chain is
|
|
30
|
+
* read first to last, so it gets Move controls and Alt+Arrow.
|
|
31
|
+
*/
|
|
32
|
+
ordered?: boolean | undefined;
|
|
33
|
+
placeholder?: string | undefined;
|
|
34
|
+
/** Variant applied to each rendered Tag. */
|
|
35
|
+
tagVariant?: TagVariant | undefined;
|
|
36
|
+
/** Monospace flag forwarded to each Tag, for machine values such as IP ranges. */
|
|
37
|
+
monospace?: boolean | undefined;
|
|
38
|
+
/** Keys that submit the current input as a new value. Defaults to Enter and comma. */
|
|
39
|
+
submitKeys?: string[] | undefined;
|
|
40
|
+
disabled?: boolean | undefined;
|
|
41
|
+
className?: string | undefined;
|
|
42
|
+
/** id forwarded to the underlying input, for a label or a FormField. */
|
|
43
|
+
id?: string | undefined;
|
|
44
|
+
/** Reject duplicate values (case-insensitive). Defaults to true. */
|
|
45
|
+
dedupe?: boolean | undefined;
|
|
46
|
+
/** Names the list of chosen values and the listbox. */
|
|
47
|
+
label?: string | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Names the FIELD, where nothing else does. A field inside a [FormField]
|
|
50
|
+
* takes its name from that label through `id`; one standing on its own has
|
|
51
|
+
* none at all without this.
|
|
52
|
+
*/
|
|
53
|
+
'aria-label'?: string | undefined;
|
|
54
|
+
'aria-labelledby'?: string | undefined;
|
|
55
|
+
'aria-describedby'?: string | undefined;
|
|
56
|
+
'aria-invalid'?: boolean | undefined;
|
|
57
|
+
/** Focus the field on mount, for a form opened AT it. The list stays closed. */
|
|
58
|
+
focusOnMount?: boolean | undefined;
|
|
59
|
+
/** The line shown when a search matches nothing. */
|
|
60
|
+
emptyMessage?: ((query: string) => string) | undefined;
|
|
61
|
+
/** The name of a chip's Remove control. */
|
|
62
|
+
removeLabel?: ((label: string) => string) | undefined;
|
|
63
|
+
/** The names of a chip's Move controls, in an `ordered` field. */
|
|
64
|
+
moveEarlierLabel?: ((label: string) => string) | undefined;
|
|
65
|
+
moveLaterLabel?: ((label: string) => string) | undefined;
|
|
66
|
+
/** What is said when a value is added, removed or moved. */
|
|
67
|
+
addedMessage?: ((label: string) => string) | undefined;
|
|
68
|
+
/** What is said when a paste adds several at once. */
|
|
69
|
+
pastedMessage?: ((count: number) => string) | undefined;
|
|
70
|
+
removedMessage?: ((label: string) => string) | undefined;
|
|
71
|
+
movedMessage?: ((label: string, position: number, count: number) => string) | undefined;
|
|
72
|
+
/** Names the chip list. */
|
|
73
|
+
chosenLabel?: ((label: string) => string) | undefined;
|
|
74
|
+
}
|
|
75
|
+
export interface TagsInputHandle {
|
|
76
|
+
focus: () => void;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Several values in one field, as removable chips.
|
|
80
|
+
*
|
|
81
|
+
* TWO FIELDS IN ONE, and the difference is what it is offered. With no
|
|
82
|
+
* `options` it is the free-text chip field: type a value, press Enter or
|
|
83
|
+
* comma, get a chip. With them it is a searchable multi-select, which is the
|
|
84
|
+
* one thing a native `<select multiple>` cannot do usefully: that control is
|
|
85
|
+
* a scrolling box that loses its whole selection to a stray click.
|
|
86
|
+
*
|
|
87
|
+
* THE RULES IT KEEPS.
|
|
88
|
+
*
|
|
89
|
+
* - FOCUS STAYS IN THE FIELD. The highlighted option is pointed at with
|
|
90
|
+
* `aria-activedescendant`, and every option says whether it is chosen with
|
|
91
|
+
* `aria-selected` inside an `aria-multiselectable` listbox.
|
|
92
|
+
* - ENTER TOGGLES AND KEEPS THE LIST AND THE QUERY, so several neighbours in
|
|
93
|
+
* one filtered list are chosen without retyping. Tab leaves the field, as
|
|
94
|
+
* every form control does.
|
|
95
|
+
* - ESCAPE CLOSES THE LIST AND NOTHING ELSE. A second Escape reaches the
|
|
96
|
+
* dialog or sheet around it.
|
|
97
|
+
* - BACKSPACE IN AN EMPTY QUERY REMOVES THE LAST VALUE, as in every token
|
|
98
|
+
* field, and says so.
|
|
99
|
+
* - A CHOSEN VALUE THE OPTIONS DO NOT OFFER is shown as itself rather than
|
|
100
|
+
* dropped: a reference to something since renamed has to stay visible until
|
|
101
|
+
* somebody removes it on purpose.
|
|
102
|
+
* - EVERY ADDITION, REMOVAL AND MOVE IS ANNOUNCED, through the shared
|
|
103
|
+
* `Announcer`, because a chip appearing above the box is otherwise silent.
|
|
104
|
+
* - AFTER A REMOVE, FOCUS GOES TO THE NEXT CHIP, else the previous one, else
|
|
105
|
+
* the field. A control that removes itself and drops focus on the page body
|
|
106
|
+
* ends a keyboard user's pass through the form.
|
|
107
|
+
* - NOTHING IS TAKEN MID-COMPOSITION. While an input method is composing a
|
|
108
|
+
* word, Enter, comma and Backspace are its own.
|
|
109
|
+
* - IT DOES NOT COMMIT ON BLUR IN OPTIONS MODE. A query is a search there, not
|
|
110
|
+
* a value, so leaving the field with one typed adds nothing.
|
|
111
|
+
*/
|
|
112
|
+
export declare const TagsInput: import("react").ForwardRefExoticComponent<TagsInputProps & import("react").RefAttributes<TagsInputHandle>>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { TagsInput } from '../chunk-RDGD7Z7I.js';
|
|
2
|
+
import '../chunk-S2XHHEW4.js';
|
|
3
|
+
import '../chunk-PZSWF74H.js';
|
|
4
|
+
import '../chunk-GTOUGQQK.js';
|
|
5
|
+
import '../chunk-7RPGY3JE.js';
|
|
6
|
+
import '../chunk-ITHXJHBB.js';
|
|
7
|
+
import '../chunk-F27EPQ7D.js';
|
|
8
|
+
import '../chunk-RSAQOKH3.js';
|
|
9
|
+
import '../chunk-BZFWDIV6.js';
|
|
10
|
+
import '../chunk-ODEQTPFM.js';
|