@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,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,119 @@
|
|
|
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
|
+
* THIS IS THE WRAPPING PROP, and the only one. `plain` is about the header;
|
|
24
|
+
* see its note.
|
|
25
|
+
*/
|
|
26
|
+
wrap?: boolean | undefined;
|
|
27
|
+
/**
|
|
28
|
+
* A ceiling for THIS block, after which it scrolls itself: a CSS length, or
|
|
29
|
+
* a number of px. Without one a 900-line record pushes everything under it
|
|
30
|
+
* off the screen.
|
|
31
|
+
*
|
|
32
|
+
* There is no default, and a ceiling every caller has to remember is a
|
|
33
|
+
* ceiling somebody forgets — so the value is also readable from the CASCADE.
|
|
34
|
+
* An application that wants one ceiling for every block it renders declares
|
|
35
|
+
* `--crewlet-codeblock-max-height` on an ancestor (`:root`, a route's own
|
|
36
|
+
* wrapper) and passes nothing here; this prop then OVERRIDES that ancestor
|
|
37
|
+
* for one block, `maxHeight="none"` escapes it, and with neither set the
|
|
38
|
+
* block is unbounded exactly as it has always been.
|
|
39
|
+
*/
|
|
40
|
+
maxHeight?: string | number | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* No HEADER at all, for a block inside a row that already has one: no
|
|
43
|
+
* filename strip, no language, no copy control.
|
|
44
|
+
*
|
|
45
|
+
* IT IS ABOUT THE CHROME, NEVER THE TEXT. A `plain` block still wraps, and a
|
|
46
|
+
* block with a header wraps too — wrapping is `wrap` and nothing else. The
|
|
47
|
+
* name is worth reading twice when porting, because it is a word other code
|
|
48
|
+
* blocks spend on the opposite meaning: a `plain` that turned WRAPPING off
|
|
49
|
+
* is `wrap={false}` here.
|
|
50
|
+
*/
|
|
51
|
+
plain?: boolean | undefined;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* WHAT MAKES A BLOCK FOCUSABLE IS TWO DECISIONS, AND A NAME IS WHAT BOTH OWE.
|
|
55
|
+
*
|
|
56
|
+
* `selectable` is an INTENT only the caller has: this block is the record the
|
|
57
|
+
* screen is about, so while it has focus Command or Control plus A means this
|
|
58
|
+
* record rather than the document.
|
|
59
|
+
*
|
|
60
|
+
* `focusWhenScrollable` is an OBLIGATION the component discharges for itself.
|
|
61
|
+
* The `pre` is `overflow: auto`, so a ceiling or `wrap={false}` can turn any
|
|
62
|
+
* block into a scroll container, and a scroll container no keyboard can reach
|
|
63
|
+
* is content no keyboard can read. Whether a given block is one is a fact
|
|
64
|
+
* about the RENDERED BOX, not about any prop — the same code overflows at one
|
|
65
|
+
* viewport and not at the next — so the component measures it. A card carrying
|
|
66
|
+
* dozens of tool-argument blocks then gets a tab stop in front of the two that
|
|
67
|
+
* scroll rather than in front of all of them.
|
|
68
|
+
*
|
|
69
|
+
* They are separate because they answer different questions, and welding them
|
|
70
|
+
* gets both cases wrong: a block promoted for its scrollbar would start
|
|
71
|
+
* swallowing a chord nobody pressed for it, and a block that owns the chord
|
|
72
|
+
* would have to scroll to be named.
|
|
73
|
+
*
|
|
74
|
+
* `label` is the part they SHARE, and the type is what says so: a focusable
|
|
75
|
+
* `role="region"` with no accessible name is a tab stop a screen reader
|
|
76
|
+
* announces as nothing, which is worse than the plain block it replaced. So
|
|
77
|
+
* every arm that can take focus demands one, from either door, and the arm
|
|
78
|
+
* that cannot take focus refuses one — an optional label beside an optional
|
|
79
|
+
* flag is a label somebody forgets, and a label on a block that can never be
|
|
80
|
+
* named is a prop that silently does nothing.
|
|
81
|
+
*/
|
|
82
|
+
export type CodeBlockProps = CodeBlockLook & ({
|
|
83
|
+
/** Take Command or Control plus A while focused, and take focus. */
|
|
84
|
+
selectable: true;
|
|
85
|
+
/** Also take focus when the rendered box turns out to scroll. */
|
|
86
|
+
focusWhenScrollable?: boolean | undefined;
|
|
87
|
+
/** What this block is: "The turn record, as JSON". */
|
|
88
|
+
label: string;
|
|
89
|
+
} | {
|
|
90
|
+
selectable?: false | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Take focus when, and only when, the rendered box scrolls — on
|
|
93
|
+
* either axis. The block is a named region then and nothing more: the
|
|
94
|
+
* select-all chord stays with the browser.
|
|
95
|
+
*/
|
|
96
|
+
focusWhenScrollable: true;
|
|
97
|
+
/**
|
|
98
|
+
* What this block is. Required although the block may never take
|
|
99
|
+
* focus, because whether it does is a property of the box at one
|
|
100
|
+
* viewport and not of this call.
|
|
101
|
+
*/
|
|
102
|
+
label: string;
|
|
103
|
+
} | {
|
|
104
|
+
selectable?: false | undefined;
|
|
105
|
+
focusWhenScrollable?: false | undefined;
|
|
106
|
+
label?: never;
|
|
107
|
+
});
|
|
108
|
+
/**
|
|
109
|
+
* A block of code, a config or a record.
|
|
110
|
+
*
|
|
111
|
+
* WHY THE LINES CARRY THEIR OWN NEWLINE. Each line used to be a `span` with
|
|
112
|
+
* nothing between them, so the block's `textContent` and any Range taken over
|
|
113
|
+
* it ran every line together: a reader who selected the block and copied it
|
|
114
|
+
* got one line of JSON with the structure gone. The newline is a real
|
|
115
|
+
* character in the markup now, and with line numbers off the code is ONE TEXT
|
|
116
|
+
* NODE, which is what a selection and a browser's own find both want.
|
|
117
|
+
*/
|
|
118
|
+
export declare const CodeBlock: import("react").ForwardRefExoticComponent<CodeBlockProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
119
|
+
export {};
|
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
* THE CEILING IS A CASCADING ONE, read here and declared nowhere, so the
|
|
71
|
+
* fallback IS the default: with nothing set the block is unbounded, as it
|
|
72
|
+
* has always been. `maxHeight` writes the property inline on the block, and
|
|
73
|
+
* an application that wants one ceiling for every block it renders writes it
|
|
74
|
+
* once on an ancestor instead — because a ceiling every call site has to
|
|
75
|
+
* remember is a ceiling somebody forgets, and the right height is a fact
|
|
76
|
+
* about the SURFACE the block sits on rather than about the component.
|
|
77
|
+
*
|
|
78
|
+
* Declared with a fallback rather than seeded on `.crewlet-codeblock`: a
|
|
79
|
+
* name a component declares on itself stops inheriting, so seeding it would
|
|
80
|
+
* be the one shape in which an ancestor's value can never arrive.
|
|
81
|
+
*
|
|
82
|
+
* ONE DECLARATION, in the rule below. `.crewlet-codeblock--bounded` is still
|
|
83
|
+
* emitted as the marker that this block set a ceiling of its own — the hook
|
|
84
|
+
* an application stylesheet and a reader of the DOM key on — but it draws
|
|
85
|
+
* nothing, because a second rule restating this height is how the two come
|
|
86
|
+
* to disagree.
|
|
87
|
+
*/
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* The ceiling, at the specificity the rule it replaces already had.
|
|
92
|
+
*
|
|
93
|
+
* `.crewlet-codeblock .crewlet-codeblock__pre` rather than
|
|
94
|
+
* `.crewlet-codeblock__pre`, and the extra class earns its place: the rule
|
|
95
|
+
* that used to set this was `.crewlet-codeblock--bounded .crewlet-codeblock__pre`
|
|
96
|
+
* at (0,2,0), and an application overriding it wrote `.crewlet-codeblock__pre
|
|
97
|
+
* { max-height: … }` at (0,1,0) and expected to LOSE. Declaring it on the
|
|
98
|
+
* single class drops this to (0,1,0), which turns every one of those
|
|
99
|
+
* overrides into a tie decided by sheet order — so a consumer who wrote a
|
|
100
|
+
* losing rule on purpose silently starts winning. Same two-class weight,
|
|
101
|
+
* same outcome for anybody who already had an opinion.
|
|
102
|
+
*/
|
|
103
|
+
.crewlet-codeblock .crewlet-codeblock__pre {
|
|
104
|
+
max-height: var(--crewlet-codeblock-max-height, none);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/*
|
|
108
|
+
* Columns kept, and a sideways scroll to reach them: a diff, a table of
|
|
109
|
+
* output, a log whose alignment carries meaning.
|
|
110
|
+
*/
|
|
111
|
+
.crewlet-codeblock--nowrap .crewlet-codeblock__pre {
|
|
112
|
+
white-space: pre;
|
|
113
|
+
overflow-wrap: normal;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/*
|
|
117
|
+
* A BLOCK A READER CAN REACH. Two things put the block in the tab order and
|
|
118
|
+
* the role follows both: `selectable`, and `focusWhenScrollable` on a box that
|
|
119
|
+
* turned out to scroll.
|
|
120
|
+
*
|
|
121
|
+
* On the first, select-all is a document verb, so on a screen that is mostly
|
|
122
|
+
* one record it took the nav, the stat row and every card with it. While this
|
|
123
|
+
* block has focus the verb means "this record", which is the only thing
|
|
124
|
+
* anybody was reaching for, and the ring is what says so: a keyboard verb that
|
|
125
|
+
* changes meaning on focus, with no visible focus state, is a secret. On the
|
|
126
|
+
* second the block keeps no keys at all; the ring is there because a scroll
|
|
127
|
+
* container a reader arrows through has to say where they are.
|
|
128
|
+
*
|
|
129
|
+
* The text cursor is right for both, and it is what the caret-shape of a
|
|
130
|
+
* `pre` full of selectable text should always have been.
|
|
131
|
+
*/
|
|
132
|
+
.crewlet-codeblock__pre[role='region'] {
|
|
133
|
+
cursor: text;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.crewlet-codeblock__pre:focus-visible {
|
|
137
|
+
outline: 2px solid var(--color-focus);
|
|
138
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.crewlet-codeblock__code {
|
|
142
|
+
display: block;
|
|
143
|
+
font-family: inherit;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.crewlet-codeblock__line {
|
|
147
|
+
display: block;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.crewlet-codeblock--numbered .crewlet-codeblock__line {
|
|
151
|
+
display: grid;
|
|
152
|
+
grid-template-columns: 2ch 1fr;
|
|
153
|
+
gap: var(--spacing-3);
|
|
154
|
+
align-items: baseline;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/*
|
|
158
|
+
* A line number is a reference somebody reads aloud in a review, so it sits on
|
|
159
|
+
* the tertiary step rather than the decoration one. `user-select: none` is
|
|
160
|
+
* what keeps it out of a copy.
|
|
161
|
+
*/
|
|
162
|
+
.crewlet-codeblock__ln {
|
|
163
|
+
text-align: right;
|
|
164
|
+
color: var(--color-text-tertiary);
|
|
165
|
+
user-select: none;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
.crewlet-codeblock__prompt {
|
|
169
|
+
flex: none;
|
|
170
|
+
color: var(--color-brand-accent-ink);
|
|
171
|
+
user-select: none;
|
|
172
|
+
margin-inline-end: var(--spacing-2);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.crewlet-codeblock__linecontent {
|
|
176
|
+
min-width: 0;
|
|
177
|
+
overflow-wrap: anywhere;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.crewlet-codeblock--nowrap .crewlet-codeblock__linecontent {
|
|
181
|
+
overflow-wrap: normal;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* The copy control sits in the header in the sans face, not the block's. */
|
|
185
|
+
.crewlet-codeblock__copy {
|
|
186
|
+
flex: none;
|
|
187
|
+
font-family: var(--font-family-sans);
|
|
188
|
+
}
|
|
@@ -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
|
+
}
|