@crewlethq/ui 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +164 -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-RLR254LD.css +450 -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 +119 -0
- package/dist/CodeBlock/index.d.ts +3 -0
- package/dist/CodeBlock/index.js +7 -0
- package/dist/CodeBlock-GYNJ2HI6.css +188 -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 +64 -0
- package/dist/Copyable/Copyable.d.ts +42 -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 +100 -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 +126 -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 +101 -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 +153 -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 +67 -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-2HQR4U4D.js +143 -0
- package/dist/chunk-2PRH365R.js +74 -0
- package/dist/chunk-2ZQMA2WB.js +57 -0
- package/dist/chunk-34VGEDVV.js +907 -0
- package/dist/chunk-3CZ7XAVY.js +139 -0
- package/dist/chunk-3EYF6HKB.js +135 -0
- package/dist/chunk-3QRYCPXQ.js +116 -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-5KPQ6D7N.js +54 -0
- package/dist/chunk-5SDBMKUO.js +297 -0
- package/dist/chunk-5VNUYO76.js +62 -0
- package/dist/chunk-5WS6L6FA.js +114 -0
- package/dist/chunk-6ZFVFA56.js +108 -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-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-D35VTV2Z.js +106 -0
- package/dist/chunk-DD5BBGBE.js +162 -0
- package/dist/chunk-EN6K2IFA.js +256 -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-GTOUGQQK.js +147 -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-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-LWKJQTOM.js +77 -0
- package/dist/chunk-MNAXYY3R.js +215 -0
- package/dist/chunk-NDCATSW7.js +229 -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-OFHBK7RI.js +498 -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-QEUY3A5P.js +186 -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-UG46QBLT.js +325 -0
- package/dist/chunk-UOGSZKLT.js +134 -0
- package/dist/chunk-V2XMNLMS.js +52 -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-WOYYD2YR.js +823 -0
- package/dist/chunk-WQX73TWF.js +1652 -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-YODNNSZL.js +63 -0
- package/dist/chunk-ZCR6YGQ4.js +1 -0
- package/dist/chunk-ZFATEERP.js +144 -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 +14898 -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 +82 -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,77 @@
|
|
|
1
|
+
import { type HTMLAttributes, type ReactNode } from 'react';
|
|
2
|
+
export interface CommandPaletteItem {
|
|
3
|
+
/** Stable across a re-query: it keys the row and names its option element. */
|
|
4
|
+
id: string;
|
|
5
|
+
/** A glyph, drawn beside the label. Decorative: the label carries the words. */
|
|
6
|
+
icon?: ReactNode;
|
|
7
|
+
label: ReactNode;
|
|
8
|
+
/** What the row is, at its end: a path, a kind, a state. */
|
|
9
|
+
hint?: ReactNode;
|
|
10
|
+
onSelect: () => void;
|
|
11
|
+
}
|
|
12
|
+
export interface CommandPaletteGroup {
|
|
13
|
+
id: string;
|
|
14
|
+
/** The heading over the group, and the name a screen reader gives it. */
|
|
15
|
+
label: string;
|
|
16
|
+
items: CommandPaletteItem[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Rest props reach the Modal's frame, which is what lets an application put
|
|
20
|
+
* its own chord on the surface (see the component doc).
|
|
21
|
+
*
|
|
22
|
+
* `role` and `onSubmit` are not among them: the surface is a dialog, and a
|
|
23
|
+
* palette announced as anything else is one a screen reader cannot get out of;
|
|
24
|
+
* a palette takes an answer from its list, not from a form submission. Nor are
|
|
25
|
+
* the three ARIA relationships, which the Modal decides: `label` names this
|
|
26
|
+
* surface and its field together.
|
|
27
|
+
*/
|
|
28
|
+
export interface CommandPaletteProps extends Omit<HTMLAttributes<HTMLElement>, 'children' | 'role' | 'onSubmit' | 'aria-label' | 'aria-labelledby' | 'aria-describedby'> {
|
|
29
|
+
open: boolean;
|
|
30
|
+
onClose: () => void;
|
|
31
|
+
/** Names the surface and its field. */
|
|
32
|
+
label?: string | undefined;
|
|
33
|
+
query: string;
|
|
34
|
+
onQueryChange: (query: string) => void;
|
|
35
|
+
/** What is offered right now. The caller does the searching and the ranking. */
|
|
36
|
+
groups: CommandPaletteGroup[];
|
|
37
|
+
placeholder?: string | undefined;
|
|
38
|
+
/** The hints under the results, usually `Kbd` keycaps. */
|
|
39
|
+
footer?: ReactNode;
|
|
40
|
+
/** Said when the query matches nothing. Name the kind of nothing it is. */
|
|
41
|
+
emptyMessage?: string | undefined;
|
|
42
|
+
/** Names the result list itself. */
|
|
43
|
+
resultsLabel?: string | undefined;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* One search surface for a whole product: screens, records, and any id pasted
|
|
47
|
+
* out of a log.
|
|
48
|
+
*
|
|
49
|
+
* IT KNOWS NOTHING ABOUT WHAT IT SEARCHES. The caller ranks and groups, and
|
|
50
|
+
* hands over rows; what this owns is the surface, the keyboard and the way a
|
|
51
|
+
* screen reader hears it. The alternative, a component that took a data source,
|
|
52
|
+
* would need one ranking rule per product and would still be wrong for the
|
|
53
|
+
* next one.
|
|
54
|
+
*
|
|
55
|
+
* IT IS A COMBOBOX. Focus stays in the field and the arrows move a highlight
|
|
56
|
+
* through the results, which the field names with `aria-activedescendant`, so a
|
|
57
|
+
* screen reader hears each result as it is reached. Results drawn as buttons
|
|
58
|
+
* instead put up to forty tab stops between the field and itself, and the
|
|
59
|
+
* highlight moved in silence.
|
|
60
|
+
*
|
|
61
|
+
* THE LIST IS THE SURFACE'S OWN BODY, not a popup above it (`popup: false`).
|
|
62
|
+
* Registered as a popup, the list would take Escape from the stack and take the
|
|
63
|
+
* veil's press on `pointerdown`, closing the palette before that press's click
|
|
64
|
+
* and letting the click land on whatever the veil was covering.
|
|
65
|
+
*
|
|
66
|
+
* A ROW OPENS ON ITS CLICK, not on the press. Nothing here closes on blur, so
|
|
67
|
+
* there is no reason to act early, and a surface gone on the press would leave
|
|
68
|
+
* the release to land on the screen beneath it. The press itself is still
|
|
69
|
+
* prevented, so it does not move focus off the field: a combobox that loses its
|
|
70
|
+
* input names no highlight, and typing reaches nothing.
|
|
71
|
+
*
|
|
72
|
+
* THE CHORD THAT OPENS IT IS THE APPLICATION'S, not this component's. Pass an
|
|
73
|
+
* `onKeyDown`: it reaches the frame, which is every key pressed inside the
|
|
74
|
+
* surface, and closing from there is one line the caller already has the
|
|
75
|
+
* definition for.
|
|
76
|
+
*/
|
|
77
|
+
export declare function CommandPalette({ open, ...rest }: CommandPaletteProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { CommandPalette } from '../chunk-ESCO4XYW.js';
|
|
2
|
+
import '../chunk-2EOKFKHX.js';
|
|
3
|
+
import '../chunk-GTOUGQQK.js';
|
|
4
|
+
import '../chunk-O6232G37.js';
|
|
5
|
+
import '../chunk-PQADV6P6.js';
|
|
6
|
+
import '../chunk-7RPGY3JE.js';
|
|
7
|
+
import '../chunk-ITHXJHBB.js';
|
|
8
|
+
import '../chunk-F27EPQ7D.js';
|
|
9
|
+
import '../chunk-BZYDZBAN.js';
|
|
10
|
+
import '../chunk-BZFWDIV6.js';
|
|
11
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The command palette: a field, a list, and a line of keyboard hints.
|
|
3
|
+
*
|
|
4
|
+
* It is a Modal with its body's padding dropped, so the three bands run edge to
|
|
5
|
+
* edge and the field reads as the surface rather than as a question on a form.
|
|
6
|
+
* The rows are the listbox register (`Listbox.css`), because a result here and
|
|
7
|
+
* a completion in a field are the same thing to a reader and the accent that
|
|
8
|
+
* marks the active row has to mean the same in both.
|
|
9
|
+
*
|
|
10
|
+
* THE TWO OVERRIDES BELOW NAME BOTH CLASSES ON PURPOSE. A single class would
|
|
11
|
+
* tie with the rule it is overriding (`.crewlet-modal--md`,
|
|
12
|
+
* `.crewlet-input--command`), and a tie is broken by the order the stylesheets
|
|
13
|
+
* happen to be concatenated in, which is alphabetical over filenames.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
.crewlet-modal.crewlet-palette {
|
|
17
|
+
/* Wider than a prompt and shorter than the window: a launcher is read in one
|
|
18
|
+
glance, and a list taller than this is a list nobody scans. */
|
|
19
|
+
--crewlet-modal-width: 620px;
|
|
20
|
+
|
|
21
|
+
max-height: min(60dvh, 520px);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/*
|
|
25
|
+
* THE BODY LAYS THE THREE BANDS OUT, and the RESULTS are what scrolls.
|
|
26
|
+
*
|
|
27
|
+
* A Modal's body is a block that scrolls its whole content, which is right for
|
|
28
|
+
* a dialog read top to bottom and wrong here: the field would ride up out of
|
|
29
|
+
* view as the arrows walked the list, and the list, sized to its own content,
|
|
30
|
+
* would never overflow, so the row the listbox brings into view by scrolling
|
|
31
|
+
* that element would have nowhere to go.
|
|
32
|
+
*/
|
|
33
|
+
.crewlet-palette .crewlet-modal__body {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-direction: column;
|
|
36
|
+
overflow: hidden;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/*
|
|
40
|
+
* The field, drawn as the surface's own top band: no box of its own, the full
|
|
41
|
+
* height of a large row, and the question asked at the reading size rather
|
|
42
|
+
* than at a control's. It is the first thing on the surface and the only thing
|
|
43
|
+
* with focus, so it is the surface's headline as much as its input.
|
|
44
|
+
*/
|
|
45
|
+
.crewlet-input.crewlet-palette__field {
|
|
46
|
+
flex-shrink: 0;
|
|
47
|
+
min-height: var(--size-row-lg);
|
|
48
|
+
padding-inline: var(--spacing-4);
|
|
49
|
+
border: none;
|
|
50
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
51
|
+
border-radius: 0;
|
|
52
|
+
background: transparent;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.crewlet-input.crewlet-palette__field .crewlet-input__control {
|
|
56
|
+
font-size: var(--font-size-md);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/*
|
|
60
|
+
* THE FOOT IS THE KEYBOARD'S OWN BAND, at the micro register rather than the
|
|
61
|
+
* modal footer's. A modal's foot carries buttons and is sized for them; this
|
|
62
|
+
* one carries a line of keycaps saying what the arrows, Enter and Escape do,
|
|
63
|
+
* and at a dialog's padding that line reads as an action row nobody can press.
|
|
64
|
+
*
|
|
65
|
+
* Both classes are named for the same reason the two rules below are: a single
|
|
66
|
+
* class ties with `.crewlet-modal__footer`, and a tie is broken by the order
|
|
67
|
+
* the stylesheets are concatenated in.
|
|
68
|
+
*/
|
|
69
|
+
.crewlet-palette .crewlet-modal__footer {
|
|
70
|
+
gap: var(--spacing-3);
|
|
71
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.crewlet-palette .crewlet-modal__footer-start {
|
|
75
|
+
gap: var(--spacing-3);
|
|
76
|
+
font-size: var(--font-size-2xs);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.crewlet-palette__results {
|
|
80
|
+
flex: 1 1 auto;
|
|
81
|
+
min-height: 0;
|
|
82
|
+
overflow-y: auto;
|
|
83
|
+
overscroll-behavior: contain;
|
|
84
|
+
padding: var(--spacing-1);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/*
|
|
88
|
+
* The glyph takes the ROW'S colour rather than a quiet step of its own, so the
|
|
89
|
+
* row under the arrows turns accent in one piece. Pinned to the tertiary step
|
|
90
|
+
* it stayed grey inside the highlight, which read as a glyph that had failed
|
|
91
|
+
* to load.
|
|
92
|
+
*/
|
|
93
|
+
.crewlet-palette__icon {
|
|
94
|
+
display: inline-flex;
|
|
95
|
+
flex-shrink: 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.crewlet-palette__label {
|
|
99
|
+
min-width: 0;
|
|
100
|
+
overflow: hidden;
|
|
101
|
+
text-overflow: ellipsis;
|
|
102
|
+
white-space: nowrap;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/*
|
|
106
|
+
* An honest empty state: it says which kind of nothing this is, and the
|
|
107
|
+
* component takes the sentence from the caller for that reason.
|
|
108
|
+
*/
|
|
109
|
+
.crewlet-palette__empty {
|
|
110
|
+
margin: 0;
|
|
111
|
+
padding: var(--spacing-5) var(--spacing-4);
|
|
112
|
+
color: var(--color-text-tertiary);
|
|
113
|
+
font-size: var(--font-size-compact);
|
|
114
|
+
text-align: center;
|
|
115
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { HTMLAttributes } from 'react';
|
|
2
|
+
export type ContainerSize = 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full';
|
|
3
|
+
export interface ContainerProps extends HTMLAttributes<HTMLDivElement> {
|
|
4
|
+
/**
|
|
5
|
+
* Max content width. sm 720, md 960, lg 1200, xl 1440, and `2xl` the
|
|
6
|
+
* content-max token (1600), which is the widest a console pane goes before
|
|
7
|
+
* a table's rows stop being scannable across. `full` keeps the gutter and
|
|
8
|
+
* drops the measure, for a canvas or a wide grid.
|
|
9
|
+
*/
|
|
10
|
+
size?: ContainerSize | undefined;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Container, the centered max-width wrapper that gives every page a
|
|
14
|
+
* consistent measure and horizontal gutter. Pair with Section for the
|
|
15
|
+
* vertical rhythm.
|
|
16
|
+
*/
|
|
17
|
+
export declare const Container: ({ size, className, children, ...rest }: ContainerProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Container, the centred content measure. One max-width scale shared by every
|
|
3
|
+
* surface, so pages line up regardless of who composed them.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
.crewlet-container {
|
|
7
|
+
width: 100%;
|
|
8
|
+
margin-inline: auto;
|
|
9
|
+
/* The console's own gutter. A wider one leaves a table's first column
|
|
10
|
+
further from the window edge than the rail beside it is. */
|
|
11
|
+
padding-inline: var(--spacing-5);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.crewlet-container--sm {
|
|
15
|
+
max-width: 720px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.crewlet-container--md {
|
|
19
|
+
max-width: 960px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.crewlet-container--lg {
|
|
23
|
+
max-width: 1200px;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.crewlet-container--xl {
|
|
27
|
+
max-width: 1440px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* The console width. It reads the content-max token rather than restating the
|
|
32
|
+
* number, because the shell and this container have to agree about where a
|
|
33
|
+
* pane stops or a screen's own header sits at a different width from the
|
|
34
|
+
* screen under it.
|
|
35
|
+
*/
|
|
36
|
+
.crewlet-container--2xl {
|
|
37
|
+
max-width: var(--size-content-max);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* No measure, and the gutter kept. A canvas, a wide grid or a table that
|
|
42
|
+
* genuinely wants the viewport still needs its content off the window edge.
|
|
43
|
+
*/
|
|
44
|
+
.crewlet-container--full {
|
|
45
|
+
max-width: none;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@media (max-width: 480px) {
|
|
49
|
+
.crewlet-container {
|
|
50
|
+
padding-inline: var(--spacing-3);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type ButtonSize, type ButtonVariant } from '../Button/index.js';
|
|
3
|
+
import { type ClipboardState } from '../utils/useClipboard.js';
|
|
4
|
+
/** What a copy control draws for each state. */
|
|
5
|
+
export declare function copyGlyph(state: ClipboardState): ReactNode;
|
|
6
|
+
export interface CopyStatusProps {
|
|
7
|
+
state: ClipboardState;
|
|
8
|
+
copiedMessage: string;
|
|
9
|
+
failedMessage: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* What the copy did, said out loud.
|
|
13
|
+
*
|
|
14
|
+
* A SIBLING OF THE CONTROL, NEVER A CHILD. An accessible name is computed
|
|
15
|
+
* from an element's contents, so a live region inside the button named it
|
|
16
|
+
* "Copied copied to the clipboard", the status text becoming part of what the
|
|
17
|
+
* button claimed to be.
|
|
18
|
+
*/
|
|
19
|
+
export declare function CopyStatus({ state, copiedMessage, failedMessage }: CopyStatusProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export interface CopyButtonProps {
|
|
21
|
+
/**
|
|
22
|
+
* The text, or a THUNK that produces it.
|
|
23
|
+
*
|
|
24
|
+
* The thunk is not a convenience. On a live record the thing worth copying
|
|
25
|
+
* is assembled from everything on the screen, and a screen that pushes twice
|
|
26
|
+
* per second would serialize the whole record on every push for a button
|
|
27
|
+
* nobody has pressed. Resolved on the press, it costs nothing until it is
|
|
28
|
+
* asked for.
|
|
29
|
+
*/
|
|
30
|
+
text: string | (() => string);
|
|
31
|
+
/** The label at rest. */
|
|
32
|
+
label?: string | undefined;
|
|
33
|
+
/** The label once the text is on the clipboard. */
|
|
34
|
+
copiedLabel?: string | undefined;
|
|
35
|
+
/** The label when the browser refused. */
|
|
36
|
+
failedLabel?: string | undefined;
|
|
37
|
+
/** Read out on success. */
|
|
38
|
+
copiedMessage?: string | undefined;
|
|
39
|
+
/** Read out on failure. */
|
|
40
|
+
failedMessage?: string | undefined;
|
|
41
|
+
size?: ButtonSize | undefined;
|
|
42
|
+
variant?: ButtonVariant | undefined;
|
|
43
|
+
title?: string | undefined;
|
|
44
|
+
/** How long `copiedLabel` stands before the control offers its action again. */
|
|
45
|
+
resetMs?: number | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* How long `failedLabel` stands. Unset it is `resetMs`; `null` holds it
|
|
48
|
+
* until the next press. See [ClipboardOptions.failedResetMs] for why a
|
|
49
|
+
* refusal wants a clock of its own — and note the cost of `null`, which is
|
|
50
|
+
* that the control's accessible name stays "Copy failed" and so names a
|
|
51
|
+
* status rather than the action it still performs.
|
|
52
|
+
*/
|
|
53
|
+
failedResetMs?: number | null | undefined;
|
|
54
|
+
className?: string | undefined;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Put text on the clipboard, and SAY WHETHER IT LANDED.
|
|
58
|
+
*
|
|
59
|
+
* The clipboard is invisible: a copy that reached no clipboard clicks exactly
|
|
60
|
+
* like one that did, so the label and the glyph are the only evidence a
|
|
61
|
+
* sighted reader gets and the status region is the only evidence anybody else
|
|
62
|
+
* gets. Both are part of the control, not decoration on it.
|
|
63
|
+
*/
|
|
64
|
+
export declare function CopyButton({ text, label, copiedLabel, failedLabel, copiedMessage, failedMessage, size, variant, title, resetMs, failedResetMs, className, }: CopyButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type CopyableVariant = 'chip' | 'inline' | 'block';
|
|
2
|
+
export interface CopyableProps {
|
|
3
|
+
/** The value shown, and the text copied. */
|
|
4
|
+
value: string | number | null | undefined;
|
|
5
|
+
/** Shown instead of the value, when the value itself is not what to read. */
|
|
6
|
+
display?: string | undefined;
|
|
7
|
+
variant?: CopyableVariant | undefined;
|
|
8
|
+
monospace?: boolean | undefined;
|
|
9
|
+
truncate?: boolean | undefined;
|
|
10
|
+
truncateLength?: number | undefined;
|
|
11
|
+
/** Names the copy control. */
|
|
12
|
+
ariaLabel?: string | undefined;
|
|
13
|
+
/** The copy control's tooltip. */
|
|
14
|
+
title?: string | undefined;
|
|
15
|
+
/** Read out on success. */
|
|
16
|
+
copiedMessage?: string | undefined;
|
|
17
|
+
/** Read out on failure. */
|
|
18
|
+
failedMessage?: string | undefined;
|
|
19
|
+
/** How long the tick stands before the control settles back. */
|
|
20
|
+
resetMs?: number | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* How long the refusal glyph stands. Unset it is `resetMs`; `null` holds it
|
|
23
|
+
* until the next press. See [ClipboardOptions.failedResetMs] for why a
|
|
24
|
+
* refusal wants a clock of its own.
|
|
25
|
+
*/
|
|
26
|
+
failedResetMs?: number | null | undefined;
|
|
27
|
+
className?: string | undefined;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* An identifier, with a control that copies it.
|
|
31
|
+
*
|
|
32
|
+
* ONE TAB STOP. The value used to be a `role="button"` span with its own
|
|
33
|
+
* `tabIndex` beside the button that did the same thing, so every id in a table
|
|
34
|
+
* was two stops on the way to the next row, and the first of them was a button
|
|
35
|
+
* that was not one. The value is text now, and the button is the only control.
|
|
36
|
+
*
|
|
37
|
+
* A REFUSAL IS REPORTED. The previous implementation awaited
|
|
38
|
+
* `document.execCommand` and reported success whatever it returned, so on the
|
|
39
|
+
* plain http origin anybody reads a remote dashboard at, the tick appeared and
|
|
40
|
+
* the clipboard was empty.
|
|
41
|
+
*/
|
|
42
|
+
export declare const Copyable: ({ value, display, variant, monospace, truncate, truncateLength, ariaLabel, title, copiedMessage, failedMessage, resetMs, failedResetMs, className, }: CopyableProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyable: a value and the one control that copies it.
|
|
3
|
+
*
|
|
4
|
+
* Three framings, and they differ only in how the value is drawn:
|
|
5
|
+
*
|
|
6
|
+
* chip A compact pill for a table cell, with head and tail truncation.
|
|
7
|
+
* inline The value inline in a detail row, no chip behind it.
|
|
8
|
+
* block A bordered panel for a full URL or a command.
|
|
9
|
+
*
|
|
10
|
+
* The control is an IconButton in every one of them, and it is the only tab
|
|
11
|
+
* stop: the value is text.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
.crewlet-copyable {
|
|
15
|
+
display: inline-flex;
|
|
16
|
+
align-items: center;
|
|
17
|
+
gap: var(--spacing-1);
|
|
18
|
+
max-width: 100%;
|
|
19
|
+
vertical-align: middle;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.crewlet-copyable__value {
|
|
23
|
+
font-family: var(--font-family-mono);
|
|
24
|
+
font-variant-ligatures: none;
|
|
25
|
+
letter-spacing: var(--font-letter-spacing-snug);
|
|
26
|
+
/* The ink every identifier chip in the system takes. A step quieter made a
|
|
27
|
+
value a reader is about to copy the faintest thing in its own row. */
|
|
28
|
+
color: var(--color-text-secondary);
|
|
29
|
+
white-space: nowrap;
|
|
30
|
+
min-width: 0;
|
|
31
|
+
overflow: hidden;
|
|
32
|
+
text-overflow: ellipsis;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/*
|
|
36
|
+
* The control is quiet until the row is reached, and it is REVEALED BY FOCUS
|
|
37
|
+
* as well as by hover: hidden from a keyboard reader, an opacity of 0 is a
|
|
38
|
+
* control that takes a tab stop and shows nothing.
|
|
39
|
+
*/
|
|
40
|
+
.crewlet-copyable__button {
|
|
41
|
+
flex: none;
|
|
42
|
+
opacity: 0;
|
|
43
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.crewlet-copyable:hover .crewlet-copyable__button,
|
|
47
|
+
.crewlet-copyable__button:focus-visible,
|
|
48
|
+
.crewlet-copyable.is-copied .crewlet-copyable__button,
|
|
49
|
+
.crewlet-copyable.is-failed .crewlet-copyable__button {
|
|
50
|
+
opacity: 1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.crewlet-copyable.is-copied .crewlet-copyable__button {
|
|
54
|
+
color: var(--color-feedback-success-ink);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.crewlet-copyable.is-failed .crewlet-copyable__button {
|
|
58
|
+
color: var(--color-feedback-danger-ink);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* ---- chip -------------------------------------------------------------- */
|
|
62
|
+
|
|
63
|
+
.crewlet-copyable--chip .crewlet-copyable__value {
|
|
64
|
+
font-size: var(--font-size-2xs);
|
|
65
|
+
background: var(--color-surface-inset);
|
|
66
|
+
padding: 1px var(--spacing-1);
|
|
67
|
+
border-radius: var(--radius-xs);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* ---- inline ------------------------------------------------------------ */
|
|
71
|
+
|
|
72
|
+
.crewlet-copyable--inline .crewlet-copyable__value {
|
|
73
|
+
font-size: var(--font-size-xs);
|
|
74
|
+
background: transparent;
|
|
75
|
+
padding: 0;
|
|
76
|
+
color: var(--color-text-secondary);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* ---- block ------------------------------------------------------------- */
|
|
80
|
+
|
|
81
|
+
.crewlet-copyable--block {
|
|
82
|
+
display: inline-flex;
|
|
83
|
+
width: 100%;
|
|
84
|
+
max-width: 100%;
|
|
85
|
+
box-sizing: border-box;
|
|
86
|
+
justify-content: space-between;
|
|
87
|
+
gap: var(--spacing-2);
|
|
88
|
+
/* The bordered value surface, which is the one a code block and a field
|
|
89
|
+
take. The elevated step here lifted a one-line value off the card it sits
|
|
90
|
+
on further than the card lifts off the page. */
|
|
91
|
+
background: var(--color-surface-subtle);
|
|
92
|
+
border: 1px solid var(--color-border-default);
|
|
93
|
+
border-radius: var(--radius-md);
|
|
94
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.crewlet-copyable--block .crewlet-copyable__value {
|
|
98
|
+
font-size: var(--font-size-compact);
|
|
99
|
+
color: var(--color-text-primary);
|
|
100
|
+
background: transparent;
|
|
101
|
+
padding: 0;
|
|
102
|
+
white-space: nowrap;
|
|
103
|
+
overflow-x: auto;
|
|
104
|
+
flex: 1;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* A panel's control is always drawn: there is nothing else in the panel. */
|
|
108
|
+
.crewlet-copyable--block .crewlet-copyable__button {
|
|
109
|
+
opacity: 1;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/*
|
|
113
|
+
* The mono face for any framing, for a value that is a command rather than an
|
|
114
|
+
* identifier. The value is already mono, so this is what a caller reaches for
|
|
115
|
+
* when `display` has replaced it with prose.
|
|
116
|
+
*/
|
|
117
|
+
.crewlet-copyable--monospace .crewlet-copyable__value {
|
|
118
|
+
font-family: var(--font-family-mono);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@media (prefers-reduced-motion: reduce) {
|
|
122
|
+
.crewlet-copyable__button {
|
|
123
|
+
transition: none;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface CountProps {
|
|
2
|
+
/** How many. Rendered as it is given, so a caller decides its own formatting. */
|
|
3
|
+
value: number | string;
|
|
4
|
+
/**
|
|
5
|
+
* What is being counted, read after the number: "3 open incidents". Without
|
|
6
|
+
* one the number is read on its own, which is right beside a heading that
|
|
7
|
+
* already says what it counts.
|
|
8
|
+
*/
|
|
9
|
+
label?: string | undefined;
|
|
10
|
+
className?: string | undefined;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* How many of something a panel, a tab or a heading is about.
|
|
14
|
+
*
|
|
15
|
+
* IT IS NEVER TINTED, and that is the whole rule. A count coloured by severity
|
|
16
|
+
* is a claim the number cannot support: three of something is not a warning,
|
|
17
|
+
* and a red 3 beside "Failures" says the same thing twice while a red 3 beside
|
|
18
|
+
* "Retries" says something nobody meant. It sits on the inset surface in the
|
|
19
|
+
* tertiary ink, in every context.
|
|
20
|
+
*
|
|
21
|
+
* Tabular figures, so a count that ticks up does not shift the heading beside
|
|
22
|
+
* it, and a minimum width so 1 and 10 draw the same pill.
|
|
23
|
+
*/
|
|
24
|
+
export declare function Count({ value, label, className }: CountProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The count pill. One neutral look, deliberately: see the component doc for
|
|
3
|
+
* why a count is never tinted.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
.crewlet-count {
|
|
7
|
+
display: inline-flex;
|
|
8
|
+
align-items: center;
|
|
9
|
+
justify-content: center;
|
|
10
|
+
min-width: 20px;
|
|
11
|
+
padding: 1px var(--spacing-2);
|
|
12
|
+
border-radius: var(--radius-pill);
|
|
13
|
+
background: var(--color-surface-inset);
|
|
14
|
+
color: var(--color-text-tertiary);
|
|
15
|
+
font-size: var(--font-size-2xs);
|
|
16
|
+
font-weight: var(--font-weight-medium);
|
|
17
|
+
/* A count that ticks up must not shift the heading beside it. */
|
|
18
|
+
font-variant-numeric: tabular-nums;
|
|
19
|
+
line-height: var(--font-line-height-normal);
|
|
20
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface CopyableCellProps {
|
|
3
|
+
value: string | number | null | undefined;
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
/** The button's accessible name. */
|
|
6
|
+
ariaLabel?: string;
|
|
7
|
+
/** What the status line says once the value is on the clipboard. */
|
|
8
|
+
copiedLabel?: string;
|
|
9
|
+
/** What it says when the clipboard refused. */
|
|
10
|
+
failedLabel?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const CopyableCell: ({ value, children, ariaLabel, copiedLabel, failedLabel, }: CopyableCellProps) => import("react/jsx-runtime").JSX.Element;
|