@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,111 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Checkbox: a box, its label and its consequence as one target.
|
|
3
|
+
*
|
|
4
|
+
* The root IS the label element, so the row is clickable end to end. A 16px
|
|
5
|
+
* square is under every pointer-target floor there is; the row is what makes
|
|
6
|
+
* it pass, which is why the text is inside the control rather than beside it.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/*
|
|
10
|
+
* THE ROW CARRIES THE LABEL'S SIZE, and it is load-bearing rather than
|
|
11
|
+
* cosmetic: the box below is nudged onto the label's first line by arithmetic
|
|
12
|
+
* in `em`, and `em` on the box is the size it INHERITS, which is this. Left
|
|
13
|
+
* off, the row took whatever size the application's body text happened to be
|
|
14
|
+
* and the nudge was computed against a line the label does not set: on a 16px
|
|
15
|
+
* host it moved a 16px box by 3.2px to sit on an 18.9px line, which wants
|
|
16
|
+
* 1.45px.
|
|
17
|
+
*/
|
|
18
|
+
.crewlet-checkbox {
|
|
19
|
+
--crewlet-checkbox-size: 16px;
|
|
20
|
+
|
|
21
|
+
display: flex;
|
|
22
|
+
align-items: flex-start;
|
|
23
|
+
gap: var(--spacing-2);
|
|
24
|
+
min-height: var(--size-row-sm);
|
|
25
|
+
font-size: var(--font-size-sm);
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.crewlet-checkbox__control {
|
|
30
|
+
/*
|
|
31
|
+
* Nudged down by half the difference between the label's first LINE and the
|
|
32
|
+
* BOX, so the box sits on that line rather than above it.
|
|
33
|
+
*
|
|
34
|
+
* BOTH TERMS ARE NAMED. The product's own stylesheet writes this as
|
|
35
|
+
* (line-height * 1em - 1em) / 2, which is the same sum only where the box
|
|
36
|
+
* is one em tall: that one draws a native checkbox at whatever size the
|
|
37
|
+
* platform picks, and this one is a stated 16px square on a 19.6px line, so
|
|
38
|
+
* the em form leaves it a pixel low. Reading the square's own token here is
|
|
39
|
+
* what stops the two drifting when either changes.
|
|
40
|
+
*/
|
|
41
|
+
margin: calc((var(--font-line-height-snug) * 1em - var(--crewlet-checkbox-size)) / 2) 0 0;
|
|
42
|
+
width: var(--crewlet-checkbox-size);
|
|
43
|
+
height: var(--crewlet-checkbox-size);
|
|
44
|
+
flex: 0 0 auto;
|
|
45
|
+
/*
|
|
46
|
+
* THE TICK IS THE ACCENT, which is what "here, this one" means everywhere
|
|
47
|
+
* else in the system. It used to read --color-brand-primary, which is white
|
|
48
|
+
* in the dark theme: a white tick on a white box.
|
|
49
|
+
*/
|
|
50
|
+
accent-color: var(--color-brand-accent);
|
|
51
|
+
cursor: pointer;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.crewlet-checkbox--danger .crewlet-checkbox__control {
|
|
55
|
+
accent-color: var(--color-feedback-danger);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.crewlet-checkbox__text {
|
|
59
|
+
display: flex;
|
|
60
|
+
flex-direction: column;
|
|
61
|
+
gap: var(--spacing-1);
|
|
62
|
+
user-select: none;
|
|
63
|
+
min-width: 0;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.crewlet-checkbox__label {
|
|
67
|
+
font-size: var(--font-size-sm);
|
|
68
|
+
line-height: var(--font-line-height-snug);
|
|
69
|
+
color: var(--color-text-primary);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* The consequence, on the tertiary step. It says what ticking the box
|
|
74
|
+
* deletes, so it is a fact a reader has to make out rather than decoration:
|
|
75
|
+
* the muted step is measured into the 2.8 to 4.5 band on purpose and is the
|
|
76
|
+
* wrong home for a sentence about removing somebody's accounts.
|
|
77
|
+
*/
|
|
78
|
+
.crewlet-checkbox__description {
|
|
79
|
+
font-size: var(--font-size-xs);
|
|
80
|
+
line-height: var(--font-line-height-normal);
|
|
81
|
+
color: var(--color-text-tertiary);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
* The bordered row a dialog gives a decision that stands on its own. It draws
|
|
86
|
+
* a BOUNDARY and nothing else: the frame sits on the dialog's own body, and a
|
|
87
|
+
* surface of its own inside a panel of the same surface is a box that reads
|
|
88
|
+
* as a second panel rather than as one choice.
|
|
89
|
+
*
|
|
90
|
+
* A destructive choice is not tinted here either. What it deletes is said in
|
|
91
|
+
* the words, and the box itself says so in the colour of its tick; a red
|
|
92
|
+
* panel around the sentence puts the alarm on the frame, where a reader who
|
|
93
|
+
* has already decided is not reading.
|
|
94
|
+
*/
|
|
95
|
+
.crewlet-checkbox--framed {
|
|
96
|
+
gap: var(--spacing-3);
|
|
97
|
+
padding: var(--spacing-3);
|
|
98
|
+
border: 1px solid var(--color-border-default);
|
|
99
|
+
border-radius: var(--radius-lg);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.crewlet-checkbox.is-disabled,
|
|
103
|
+
.crewlet-checkbox.is-disabled .crewlet-checkbox__control {
|
|
104
|
+
cursor: not-allowed;
|
|
105
|
+
opacity: 0.6;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.crewlet-checkbox__control:focus-visible {
|
|
109
|
+
outline: 2px solid var(--color-focus);
|
|
110
|
+
outline-offset: 2px;
|
|
111
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { type HTMLAttributes } from 'react';
|
|
2
|
+
interface CodeBlockLook extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
|
|
3
|
+
/** The code to display and copy. A trailing newline is trimmed. */
|
|
4
|
+
code: string;
|
|
5
|
+
/** Shown in the header when there is no filename, and set as a data attribute. */
|
|
6
|
+
language?: string | undefined;
|
|
7
|
+
/** Shown on the left of the header. */
|
|
8
|
+
filename?: string | undefined;
|
|
9
|
+
showLineNumbers?: boolean | undefined;
|
|
10
|
+
/** Render the copy control. On by default. */
|
|
11
|
+
copyable?: boolean | undefined;
|
|
12
|
+
/** Names the copy control's action. */
|
|
13
|
+
copyLabel?: string | undefined;
|
|
14
|
+
/** A per-line prefix that is not part of the copy: `$` for a shell command. */
|
|
15
|
+
prompt?: string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Wrap long lines instead of scrolling sideways. ON by default, because a
|
|
18
|
+
* block a reader reads is the common case, a message, a record, a stack
|
|
19
|
+
* trace, and a sideways scrollbar on one of those is a line nobody finds the
|
|
20
|
+
* end of. Turn it off for a block whose columns are the point: a diff, a
|
|
21
|
+
* table of output, a log that is aligned on purpose.
|
|
22
|
+
*/
|
|
23
|
+
wrap?: boolean | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* A ceiling, after which the block scrolls itself: a CSS length, or a number
|
|
26
|
+
* of px. Without one a 900-line record pushes everything under it off the
|
|
27
|
+
* screen.
|
|
28
|
+
*/
|
|
29
|
+
maxHeight?: string | number | undefined;
|
|
30
|
+
/** No header at all, for a block inside a row that already has one. */
|
|
31
|
+
plain?: boolean | undefined;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* `selectable` and `label` travel together, and the type is what says so: a
|
|
35
|
+
* focusable `role="region"` with no accessible name is a tab stop a screen
|
|
36
|
+
* reader announces as nothing, which is worse than the plain block it
|
|
37
|
+
* replaced. A union rather than two optional props, because an optional label
|
|
38
|
+
* beside an optional flag is a label somebody forgets.
|
|
39
|
+
*/
|
|
40
|
+
export type CodeBlockProps = CodeBlockLook & ({
|
|
41
|
+
/** Take Command or Control plus A while focused, and take focus. */
|
|
42
|
+
selectable: true;
|
|
43
|
+
/** What this block is: "The turn record, as JSON". */
|
|
44
|
+
label: string;
|
|
45
|
+
} | {
|
|
46
|
+
selectable?: false | undefined;
|
|
47
|
+
label?: never;
|
|
48
|
+
});
|
|
49
|
+
/**
|
|
50
|
+
* A block of code, a config or a record.
|
|
51
|
+
*
|
|
52
|
+
* WHY THE LINES CARRY THEIR OWN NEWLINE. Each line used to be a `span` with
|
|
53
|
+
* nothing between them, so the block's `textContent` and any Range taken over
|
|
54
|
+
* it ran every line together: a reader who selected the block and copied it
|
|
55
|
+
* got one line of JSON with the structure gone. The newline is a real
|
|
56
|
+
* character in the markup now, and with line numbers off the code is ONE TEXT
|
|
57
|
+
* NODE, which is what a selection and a browser's own find both want.
|
|
58
|
+
*/
|
|
59
|
+
export declare const CodeBlock: import("react").ForwardRefExoticComponent<CodeBlockProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
60
|
+
export {};
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* CodeBlock, a monospace command, config or record surface. One step off the
|
|
3
|
+
* page, with an optional header carrying a filename and the copy control.
|
|
4
|
+
* Long lines WRAP, because the common block is one a reader reads; a caller
|
|
5
|
+
* whose columns are the point asks for the sideways scroll instead.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
.crewlet-codeblock {
|
|
9
|
+
border: 1px solid var(--color-border-default);
|
|
10
|
+
/* The block sits INSIDE a card more often than beside one, and the card's
|
|
11
|
+
own radius repeated inside it reads as a box drawn twice. */
|
|
12
|
+
border-radius: var(--radius-md);
|
|
13
|
+
background: var(--color-surface-subtle);
|
|
14
|
+
overflow: hidden;
|
|
15
|
+
font-family: var(--font-family-mono);
|
|
16
|
+
min-width: 0;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.crewlet-codeblock__header {
|
|
20
|
+
display: flex;
|
|
21
|
+
align-items: center;
|
|
22
|
+
justify-content: space-between;
|
|
23
|
+
gap: var(--spacing-4);
|
|
24
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
25
|
+
/* The rule alone, as every head in the system is drawn. A second ground
|
|
26
|
+
inside the block made the filename strip a lighter band across a surface
|
|
27
|
+
that is already one step off the page. */
|
|
28
|
+
border-bottom: 1px solid var(--color-border-default);
|
|
29
|
+
min-height: var(--size-row-md);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.crewlet-codeblock__meta {
|
|
33
|
+
display: inline-flex;
|
|
34
|
+
align-items: center;
|
|
35
|
+
gap: var(--spacing-2);
|
|
36
|
+
min-width: 0;
|
|
37
|
+
font-size: var(--font-size-xs);
|
|
38
|
+
color: var(--color-text-tertiary);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.crewlet-codeblock__filename {
|
|
42
|
+
color: var(--color-text-secondary);
|
|
43
|
+
white-space: nowrap;
|
|
44
|
+
overflow: hidden;
|
|
45
|
+
text-overflow: ellipsis;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.crewlet-codeblock__lang {
|
|
49
|
+
text-transform: uppercase;
|
|
50
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.crewlet-codeblock__pre {
|
|
54
|
+
margin: 0;
|
|
55
|
+
padding: var(--spacing-3);
|
|
56
|
+
overflow: auto;
|
|
57
|
+
font-size: var(--font-size-xs);
|
|
58
|
+
line-height: var(--font-line-height-normal);
|
|
59
|
+
color: var(--color-text-secondary);
|
|
60
|
+
/*
|
|
61
|
+
* IT WRAPS. A block a reader READS is the common case, a stack trace or a
|
|
62
|
+
* record or a model's own error text, and a sideways scrollbar on one of
|
|
63
|
+
* those is a line nobody finds the end of. `nowrap` is what the caller asks
|
|
64
|
+
* for when the columns are the point.
|
|
65
|
+
*/
|
|
66
|
+
white-space: pre-wrap;
|
|
67
|
+
overflow-wrap: anywhere;
|
|
68
|
+
tab-size: 2;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/*
|
|
72
|
+
* Columns kept, and a sideways scroll to reach them: a diff, a table of
|
|
73
|
+
* output, a log whose alignment carries meaning.
|
|
74
|
+
*/
|
|
75
|
+
.crewlet-codeblock--nowrap .crewlet-codeblock__pre {
|
|
76
|
+
white-space: pre;
|
|
77
|
+
overflow-wrap: normal;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* Bounded, with its own scroll. Without a ceiling a long record pushes
|
|
82
|
+
* everything under it off the screen, which on a detail page is every other
|
|
83
|
+
* fact about the thing being read.
|
|
84
|
+
*/
|
|
85
|
+
.crewlet-codeblock--bounded .crewlet-codeblock__pre {
|
|
86
|
+
max-height: var(--crewlet-codeblock-max-height);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/*
|
|
90
|
+
* A BLOCK THAT OWNS SELECT-ALL. Select-all is a document verb, so on a screen
|
|
91
|
+
* that is mostly one record it took the nav, the stat row and every card with
|
|
92
|
+
* it. While this block has focus the verb means "this record", which is the
|
|
93
|
+
* only thing anybody was reaching for, and the ring is what says so: a
|
|
94
|
+
* keyboard verb that changes meaning on focus, with no visible focus state, is
|
|
95
|
+
* a secret.
|
|
96
|
+
*/
|
|
97
|
+
.crewlet-codeblock__pre[role='region'] {
|
|
98
|
+
cursor: text;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.crewlet-codeblock__pre:focus-visible {
|
|
102
|
+
outline: 2px solid var(--color-focus);
|
|
103
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.crewlet-codeblock__code {
|
|
107
|
+
display: block;
|
|
108
|
+
font-family: inherit;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.crewlet-codeblock__line {
|
|
112
|
+
display: block;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.crewlet-codeblock--numbered .crewlet-codeblock__line {
|
|
116
|
+
display: grid;
|
|
117
|
+
grid-template-columns: 2ch 1fr;
|
|
118
|
+
gap: var(--spacing-3);
|
|
119
|
+
align-items: baseline;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/*
|
|
123
|
+
* A line number is a reference somebody reads aloud in a review, so it sits on
|
|
124
|
+
* the tertiary step rather than the decoration one. `user-select: none` is
|
|
125
|
+
* what keeps it out of a copy.
|
|
126
|
+
*/
|
|
127
|
+
.crewlet-codeblock__ln {
|
|
128
|
+
text-align: right;
|
|
129
|
+
color: var(--color-text-tertiary);
|
|
130
|
+
user-select: none;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.crewlet-codeblock__prompt {
|
|
134
|
+
flex: none;
|
|
135
|
+
color: var(--color-brand-accent-ink);
|
|
136
|
+
user-select: none;
|
|
137
|
+
margin-inline-end: var(--spacing-2);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.crewlet-codeblock__linecontent {
|
|
141
|
+
min-width: 0;
|
|
142
|
+
overflow-wrap: anywhere;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.crewlet-codeblock--nowrap .crewlet-codeblock__linecontent {
|
|
146
|
+
overflow-wrap: normal;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* The copy control sits in the header in the sans face, not the block's. */
|
|
150
|
+
.crewlet-codeblock__copy {
|
|
151
|
+
flex: none;
|
|
152
|
+
font-family: var(--font-family-sans);
|
|
153
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type InputProps } from '../Input/index.js';
|
|
3
|
+
export interface ComboboxOption {
|
|
4
|
+
/** What taking the option puts in the field. */
|
|
5
|
+
value: string;
|
|
6
|
+
/** What is drawn. The value itself when it is left out. */
|
|
7
|
+
label?: ReactNode;
|
|
8
|
+
/** A short second line of identity: a handle, a path, a kind. */
|
|
9
|
+
hint?: ReactNode;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** What a caller drawing its own rows is handed. */
|
|
13
|
+
export interface ComboboxListRender {
|
|
14
|
+
/** The id the field's `aria-controls` points at. Put it on the list. */
|
|
15
|
+
listId: string;
|
|
16
|
+
/** The highlighted row's index, or -1 when nothing is offered. */
|
|
17
|
+
active: number;
|
|
18
|
+
/** The id of the row at `index`. */
|
|
19
|
+
optionId: (index: number) => string;
|
|
20
|
+
/** Mouse wiring for the row at `index`. */
|
|
21
|
+
optionHandlers: (index: number) => Record<string, unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface ComboboxProps extends Omit<InputProps, 'value' | 'onChange' | 'role' | 'onKeyDown' | 'list'> {
|
|
24
|
+
/** What the field holds. The caller owns it: a completion is an edit to it. */
|
|
25
|
+
value: string;
|
|
26
|
+
onValueChange: (next: string) => void;
|
|
27
|
+
/**
|
|
28
|
+
* What is offered RIGHT NOW. The caller filters, because what a query
|
|
29
|
+
* matches is the caller's question: a secret reference matches on a prefix
|
|
30
|
+
* of the name under the caret, not on the whole field.
|
|
31
|
+
*/
|
|
32
|
+
options?: readonly ComboboxOption[];
|
|
33
|
+
/**
|
|
34
|
+
* Draws the rows itself, for a list whose rows are not plain options.
|
|
35
|
+
*
|
|
36
|
+
* `options` STILL SAYS WHAT IS OFFERED. This decides what a row looks like,
|
|
37
|
+
* not what there is: the highlight is an index into `options`, and so is
|
|
38
|
+
* what Enter takes, so a list drawn this way with no `options` is one the
|
|
39
|
+
* arrows cannot move through and Enter cannot commit from.
|
|
40
|
+
*/
|
|
41
|
+
renderList?: ((list: ComboboxListRender) => ReactNode) | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Taking an option. By default it writes the option's value into the field,
|
|
44
|
+
* which is what a completion means; a caller with a caret to place (a
|
|
45
|
+
* `${NAME}` inside a longer value) does it itself.
|
|
46
|
+
*/
|
|
47
|
+
onCommit?: ((option: ComboboxOption, index: number) => void) | undefined;
|
|
48
|
+
/** Whether the list is on screen. Controlled: only the caller knows when it has something to offer. */
|
|
49
|
+
open: boolean;
|
|
50
|
+
onOpenChange: (open: boolean) => void;
|
|
51
|
+
/** Names the list. A listbox with no name is announced as "list box" and nothing else. */
|
|
52
|
+
label: string;
|
|
53
|
+
/**
|
|
54
|
+
* Tab takes the highlighted option, which is what it means in a completion
|
|
55
|
+
* list. Left off, Tab moves focus, as it does on every form control.
|
|
56
|
+
*/
|
|
57
|
+
tabCommits?: boolean | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Which press takes a row. `mousedown` is the default and the right answer
|
|
60
|
+
* for a list that closes on blur: the field blurs first, so a list waiting
|
|
61
|
+
* for the click takes the row out from under the press that chose it.
|
|
62
|
+
* `click` is for a list inside a surface that is not going anywhere.
|
|
63
|
+
*/
|
|
64
|
+
commitOn?: 'mousedown' | 'click' | undefined;
|
|
65
|
+
/** Draws the rows in the mono face, for names read exactly rather than for sense. */
|
|
66
|
+
mono?: boolean | undefined;
|
|
67
|
+
/** The line shown while the list is open with nothing to offer. Nothing is drawn without one. */
|
|
68
|
+
emptyMessage?: ReactNode;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* A text field that offers completions.
|
|
72
|
+
*
|
|
73
|
+
* WHY THE LIST IS ANCHORED RATHER THAN PORTALLED. It is positioned absolutely
|
|
74
|
+
* under the field, inside the field's own box, so opening it moves nothing: a
|
|
75
|
+
* list that took part in the layout pushed every field under it down the form
|
|
76
|
+
* as somebody typed. It is bounded and scrolled rather than as long as the
|
|
77
|
+
* matches, and it sits on an OPAQUE surface, because a translucent one over a
|
|
78
|
+
* form leaves two sets of words in the same place.
|
|
79
|
+
*
|
|
80
|
+
* ESCAPE IS CONSUMED HERE. The list closes and the dialog or sheet around the
|
|
81
|
+
* field stays open; a second Escape reaches it. Without that, somebody
|
|
82
|
+
* dismissing a completion they did not want lost the whole editor with it.
|
|
83
|
+
*
|
|
84
|
+
* WHAT IT DOES NOT DECIDE is what matches. The caller filters and hands over
|
|
85
|
+
* what is offered, because a completion's question belongs to the value: the
|
|
86
|
+
* engine's secret references complete on the name under the caret, not on the
|
|
87
|
+
* whole field.
|
|
88
|
+
*/
|
|
89
|
+
export declare const Combobox: import("react").ForwardRefExoticComponent<ComboboxProps & import("react").RefAttributes<HTMLInputElement>>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { Combobox } from '../chunk-UOGSZKLT.js';
|
|
2
|
+
import '../chunk-GTOUGQQK.js';
|
|
3
|
+
import '../chunk-O6232G37.js';
|
|
4
|
+
import '../chunk-PQADV6P6.js';
|
|
5
|
+
import '../chunk-ITHXJHBB.js';
|
|
6
|
+
import '../chunk-F27EPQ7D.js';
|
|
7
|
+
import '../chunk-BZFWDIV6.js';
|
|
8
|
+
import '../chunk-ODEQTPFM.js';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Combobox: a field that offers completions.
|
|
3
|
+
*
|
|
4
|
+
* The panel is anchored inside the field's own box rather than portalled or
|
|
5
|
+
* laid out in the flow. In the flow it pushed every field under it down the
|
|
6
|
+
* form as somebody typed; portalled, it would have to be placed, followed and
|
|
7
|
+
* given a layer of its own for a list that never leaves its field's side.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.crewlet-combobox {
|
|
11
|
+
position: relative;
|
|
12
|
+
width: 100%;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.crewlet-combobox__panel {
|
|
16
|
+
/* Six rows and a scroll, as every list this package offers from a field. */
|
|
17
|
+
--crewlet-combobox-panel-max-height: 12rem;
|
|
18
|
+
|
|
19
|
+
position: absolute;
|
|
20
|
+
top: calc(100% + var(--spacing-1));
|
|
21
|
+
left: 0;
|
|
22
|
+
right: 0;
|
|
23
|
+
max-height: var(--crewlet-combobox-panel-max-height);
|
|
24
|
+
overflow-y: auto;
|
|
25
|
+
overscroll-behavior: contain;
|
|
26
|
+
padding: var(--spacing-1);
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
gap: 1px;
|
|
30
|
+
/*
|
|
31
|
+
* OPAQUE, and the product's own panel surface: a translucent list over a
|
|
32
|
+
* form puts two sets of words in the same place, and the words underneath
|
|
33
|
+
* are a label and a value somebody is in the middle of typing.
|
|
34
|
+
*/
|
|
35
|
+
background: var(--color-surface-subtle);
|
|
36
|
+
border: 1px solid var(--color-border-default);
|
|
37
|
+
border-radius: var(--radius-md);
|
|
38
|
+
box-shadow: var(--shadow-md);
|
|
39
|
+
/* Above the fields below it, and nothing more: it never leaves its form. */
|
|
40
|
+
z-index: var(--z-index-dropdown);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* Names read exactly rather than for sense: a secret reference, a path, a key. */
|
|
44
|
+
.crewlet-combobox__panel.is-mono .crewlet-combobox__label {
|
|
45
|
+
font-family: var(--font-family-mono);
|
|
46
|
+
font-size: var(--font-size-compact);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.crewlet-combobox__label {
|
|
50
|
+
overflow: hidden;
|
|
51
|
+
text-overflow: ellipsis;
|
|
52
|
+
white-space: nowrap;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
* The row the arrows or the pointer are on, in the hover tint. The accent is
|
|
57
|
+
* what "here, this is the current one" means elsewhere in the product; a
|
|
58
|
+
* completion list has no current one, only the row about to be taken.
|
|
59
|
+
*
|
|
60
|
+
* Scoped to the panel rather than written on the row class, because the
|
|
61
|
+
* shared listbox register paints [aria-selected] itself and the stylesheets
|
|
62
|
+
* are bundled in hash order: a rule of equal weight would win or lose by the
|
|
63
|
+
* name of a build artefact.
|
|
64
|
+
*/
|
|
65
|
+
.crewlet-combobox__panel .crewlet-listbox__option {
|
|
66
|
+
border-radius: var(--radius-xs);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.crewlet-combobox__panel .crewlet-listbox__option[aria-selected='true'],
|
|
70
|
+
.crewlet-combobox__panel .crewlet-listbox__option.is-highlight,
|
|
71
|
+
.crewlet-combobox__panel .crewlet-listbox__option:hover {
|
|
72
|
+
background: var(--color-surface-hover);
|
|
73
|
+
color: var(--color-text-primary);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.crewlet-combobox__panel .crewlet-listbox__option.is-disabled {
|
|
77
|
+
background: transparent;
|
|
78
|
+
color: var(--color-text-tertiary);
|
|
79
|
+
cursor: not-allowed;
|
|
80
|
+
}
|
|
@@ -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';
|