@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,616 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The form row: Input, Textarea, Label, FormField, FormRow, FormSection and
|
|
3
|
+
* ReadOnlyField.
|
|
4
|
+
*
|
|
5
|
+
* Two sizes, both on the control tokens so a field lines up with the button
|
|
6
|
+
* and the select beside it at every density: md for a form row, sm for a
|
|
7
|
+
* dense toolbar or an inline filter.
|
|
8
|
+
*
|
|
9
|
+
* THE VALUE SITS ON ONE LINE, CENTRED IN THE BOX. The control carries its
|
|
10
|
+
* inset as side padding only and the box's own height is what makes the row:
|
|
11
|
+
* with padding on all four sides a 32px field drew 39px tall, so a field, the
|
|
12
|
+
* button beside it and the select beside that were three heights.
|
|
13
|
+
*
|
|
14
|
+
* THE BOUNDARY IS --color-border-control, not the default border. A text
|
|
15
|
+
* box, a checkbox and a switch are the three things on a page whose OUTLINE
|
|
16
|
+
* is the control: with the ordinary hairline they measured 1.27:1 in light
|
|
17
|
+
* and 1.75:1 in dark, which is a box a reader has to already know is there.
|
|
18
|
+
* It is the one place this register does not follow the product's own
|
|
19
|
+
* stylesheet, which draws every field on the panel hairline.
|
|
20
|
+
*
|
|
21
|
+
* AND A FOCUSED FIELD SHOWS ONE RING, drawn as an outline over that boundary.
|
|
22
|
+
* Every field in this package states that rule for itself and states it the
|
|
23
|
+
* same way; the long version is on .crewlet-input:has(...:focus-visible)
|
|
24
|
+
* below, and Input.test.tsx holds all of them to it.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
.crewlet-input {
|
|
28
|
+
/* The width steps, named for what they hold. See InputWidth. */
|
|
29
|
+
--crewlet-input-width-xs: 140px;
|
|
30
|
+
--crewlet-input-width-sm: 200px;
|
|
31
|
+
--crewlet-input-width-md: 320px;
|
|
32
|
+
/* The widest step is the one a SENTENCE is typed into rather than a name:
|
|
33
|
+
the knowledge search asks for plain text and its own placeholder runs to
|
|
34
|
+
sixty characters, which is what this step is measured against. */
|
|
35
|
+
--crewlet-input-width-lg: 520px;
|
|
36
|
+
|
|
37
|
+
position: relative;
|
|
38
|
+
display: inline-flex;
|
|
39
|
+
align-items: center;
|
|
40
|
+
width: 100%;
|
|
41
|
+
min-height: var(--size-control-md);
|
|
42
|
+
background-color: var(--color-surface-subtle);
|
|
43
|
+
border: 1px solid var(--color-border-control);
|
|
44
|
+
border-radius: var(--radius-md);
|
|
45
|
+
/* The boundary is the only thing that moves here. The ring is an outline,
|
|
46
|
+
which takes no transition, and nothing else paints a shadow. */
|
|
47
|
+
transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.crewlet-input--w-full { max-width: none; }
|
|
51
|
+
.crewlet-input--w-xs { max-width: var(--crewlet-input-width-xs); }
|
|
52
|
+
.crewlet-input--w-sm { max-width: var(--crewlet-input-width-sm); }
|
|
53
|
+
.crewlet-input--w-md { max-width: var(--crewlet-input-width-md); }
|
|
54
|
+
.crewlet-input--w-lg { max-width: var(--crewlet-input-width-lg); }
|
|
55
|
+
|
|
56
|
+
.crewlet-input--sm { min-height: var(--size-control-sm); }
|
|
57
|
+
|
|
58
|
+
.crewlet-input:hover {
|
|
59
|
+
border-color: var(--color-border-hover);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/*
|
|
63
|
+
* ONE RING, AND IT IS THE BOUNDARY ITSELF.
|
|
64
|
+
*
|
|
65
|
+
* What this replaces drew the indicator twice. The border took --color-focus
|
|
66
|
+
* AND --shadow-focus laid a second focus-coloured ring outside it, and that
|
|
67
|
+
* token is already a ring in its own right: `0 0 0 2px background, 0 0 0 4px
|
|
68
|
+
* focus` is a background-coloured gap and then a band. So a focused field was
|
|
69
|
+
* an accent hairline, a two-pixel gap and an accent band, measured on the
|
|
70
|
+
* running dashboard as `border 1px #8b9ff5` under `#15171c 0 0 0 2px, #8b9ff5
|
|
71
|
+
* 0 0 0 4px`. Two layers of highlight, from one state.
|
|
72
|
+
*
|
|
73
|
+
* The one that is left is an OUTLINE rather than the shadow, because
|
|
74
|
+
* forced-colors mode drops every box-shadow and keeps outlines: a ring drawn
|
|
75
|
+
* as a shadow disappears for exactly the readers who most need one.
|
|
76
|
+
*
|
|
77
|
+
* It is drawn INSIDE the box, on the offset every focusable in a clipping
|
|
78
|
+
* scroller takes, so it covers the boundary rather than standing outside it.
|
|
79
|
+
* Two things follow: a scroller cannot clip it, and the field does not grow a
|
|
80
|
+
* four-pixel halo the moment a caret lands in it, which is what a filter box
|
|
81
|
+
* in a toolbar of them did to the row it sits in.
|
|
82
|
+
*
|
|
83
|
+
* THE BORDER IS LEFT ALONE. Recolouring it under the ring says nothing the
|
|
84
|
+
* ring has not already said, and it is what cost the error state its own
|
|
85
|
+
* colour: see the rule below.
|
|
86
|
+
*
|
|
87
|
+
* THE SELECTOR NAMES THE CONTROL rather than asking :focus-within. A search
|
|
88
|
+
* box holds a second focusable, its own clear control, and :focus-within drew
|
|
89
|
+
* the whole field's ring around the IconButton's ring the moment a reader
|
|
90
|
+
* tabbed onto it: a ring around a button inside a ring around the field.
|
|
91
|
+
* :focus-visible rather than :focus is the package's one vocabulary for an
|
|
92
|
+
* indicator, and for a text control the two are the same thing: every input
|
|
93
|
+
* type this slot holds, readonly and search included, matches :focus-visible
|
|
94
|
+
* on a pointer press as well as on a tab.
|
|
95
|
+
*/
|
|
96
|
+
.crewlet-input:has(.crewlet-input__control:focus-visible) {
|
|
97
|
+
outline: 2px solid var(--color-focus);
|
|
98
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.crewlet-input.is-error {
|
|
102
|
+
border-color: var(--color-feedback-danger);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/*
|
|
106
|
+
* A REFUSED FIELD KEEPS ITS COLOUR WHILE THE READER IS IN IT. The ring covers
|
|
107
|
+
* the boundary, so a focus-coloured one would paint out the one mark on the
|
|
108
|
+
* field itself saying the value cannot be saved, at the exact moment somebody
|
|
109
|
+
* is fixing it. The ring takes the danger step instead: the same token the
|
|
110
|
+
* boundary already carries, so the field does not change hue when a caret
|
|
111
|
+
* lands in it, and "here" and "refused" stay one edge rather than two.
|
|
112
|
+
*
|
|
113
|
+
* It is the FILL step, not the ink one the error line takes, because this is
|
|
114
|
+
* a graphical object rather than a word: @crewlethq/tokens measures
|
|
115
|
+
* --color-feedback-danger to 3:1 on every surface a mark can be drawn on.
|
|
116
|
+
*/
|
|
117
|
+
.crewlet-input.is-error:has(.crewlet-input__control:focus-visible) {
|
|
118
|
+
outline-color: var(--color-feedback-danger);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.crewlet-input.is-disabled {
|
|
122
|
+
opacity: 0.6;
|
|
123
|
+
cursor: not-allowed;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
.crewlet-input__control {
|
|
127
|
+
flex: 1;
|
|
128
|
+
min-width: 0;
|
|
129
|
+
background: transparent;
|
|
130
|
+
border: none;
|
|
131
|
+
outline: none;
|
|
132
|
+
font-family: inherit;
|
|
133
|
+
align-self: stretch;
|
|
134
|
+
color: var(--color-text-primary);
|
|
135
|
+
font-size: var(--font-size-compact);
|
|
136
|
+
line-height: var(--font-line-height-normal);
|
|
137
|
+
padding: 0 var(--spacing-3);
|
|
138
|
+
box-sizing: border-box;
|
|
139
|
+
width: 100%;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/*
|
|
143
|
+
* THE PLACEHOLDER IS A FACT, not decoration: it is the example of the shape a
|
|
144
|
+
* value takes, so it sits on the tertiary step (4.5:1) rather than the
|
|
145
|
+
* decoration step it used to take at 0.6 opacity, which measured 2.22:1.
|
|
146
|
+
*/
|
|
147
|
+
.crewlet-input__control::placeholder {
|
|
148
|
+
color: var(--color-text-tertiary);
|
|
149
|
+
opacity: 1;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.crewlet-input__control:disabled {
|
|
153
|
+
cursor: not-allowed;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.crewlet-input--sm .crewlet-input__control {
|
|
157
|
+
padding: 0 var(--spacing-2);
|
|
158
|
+
font-size: var(--font-size-xs);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/*
|
|
162
|
+
* The leading and trailing slots sit out of the pointer's way, so a press
|
|
163
|
+
* anywhere in the field still lands in the box. Anything a reader has to
|
|
164
|
+
* press belongs beside the field rather than inside it.
|
|
165
|
+
*/
|
|
166
|
+
.crewlet-input__leading,
|
|
167
|
+
.crewlet-input__trailing {
|
|
168
|
+
display: inline-flex;
|
|
169
|
+
align-items: center;
|
|
170
|
+
flex: none;
|
|
171
|
+
color: var(--color-text-tertiary);
|
|
172
|
+
pointer-events: none;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/*
|
|
176
|
+
* A GLYPH IS INSET ONE STEP LESS THAN TEXT. The mark reads from its own
|
|
177
|
+
* middle and the letter from its left edge, so a search glyph on the text's
|
|
178
|
+
* own 12px line sat further in than the box's other contents; at 8px the two
|
|
179
|
+
* hang on one optical edge, and the value after it starts where it does in
|
|
180
|
+
* every other field on the form.
|
|
181
|
+
*/
|
|
182
|
+
.crewlet-input__leading {
|
|
183
|
+
padding-left: var(--spacing-2);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.crewlet-input__leading + .crewlet-input__control {
|
|
187
|
+
padding-left: var(--spacing-2);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.crewlet-input__trailing {
|
|
191
|
+
padding-right: var(--spacing-3);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.crewlet-input--sm .crewlet-input__trailing { padding-right: var(--spacing-2); }
|
|
195
|
+
|
|
196
|
+
/*
|
|
197
|
+
* A TEXT AFFIX IS INSET LIKE TEXT, AND THE VALUE JOINS IT.
|
|
198
|
+
*
|
|
199
|
+
* The rule above is written for a GLYPH, which reads from its own middle and
|
|
200
|
+
* therefore hangs one step further out than a letter does. An affix is not a
|
|
201
|
+
* glyph: it is the first word of the value, so it takes the step the
|
|
202
|
+
* control's own text takes, and the control after it takes none.
|
|
203
|
+
*
|
|
204
|
+
* Both halves matter and they fail the same way. At the glyph's inset the
|
|
205
|
+
* scheme sits a step closer to the boundary than every other value on the
|
|
206
|
+
* form; with the control still paying its own inset behind it, `https://`
|
|
207
|
+
* stands a clear step away from the host, which is the two-fields reading
|
|
208
|
+
* that drawing the affix INSIDE the boundary exists to stop.
|
|
209
|
+
*
|
|
210
|
+
* Selected with `:has` on the slot, because only the affix knows which kind
|
|
211
|
+
* of leading content this is and the padding belongs to the slot.
|
|
212
|
+
*/
|
|
213
|
+
.crewlet-input__leading:has(.crewlet-input__affix) {
|
|
214
|
+
padding-left: var(--spacing-3);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.crewlet-input--sm .crewlet-input__leading:has(.crewlet-input__affix) {
|
|
218
|
+
padding-left: var(--spacing-2);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.crewlet-input__leading:has(.crewlet-input__affix) + .crewlet-input__control {
|
|
222
|
+
padding-left: 0;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
* The scheme a url field wears, INSIDE the boundary rather than beside it, so
|
|
227
|
+
* the box reads as one value: a chip in front of the field reads as two
|
|
228
|
+
* fields, and the second of them looks optional.
|
|
229
|
+
*
|
|
230
|
+
* The page's own face, not the code face it used to take. It is the start of
|
|
231
|
+
* a sentence somebody is finishing, not a token to be read exactly, and a
|
|
232
|
+
* mono `https://` in front of a proportional host is two typefaces in one
|
|
233
|
+
* value. Its ink is the SECONDARY step rather than the decoration one the
|
|
234
|
+
* product's own stylesheet gives it: the scheme is part of the value the
|
|
235
|
+
* field submits, and a value has to clear 4.5:1.
|
|
236
|
+
*/
|
|
237
|
+
.crewlet-input__affix {
|
|
238
|
+
color: var(--color-text-secondary);
|
|
239
|
+
font-size: var(--font-size-compact);
|
|
240
|
+
user-select: none;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/*
|
|
244
|
+
* THE NATIVE CLEAR CONTROL IS NOT DRAWN. `::-webkit-search-cancel-button`
|
|
245
|
+
* exists in one browser family, is drawn by nobody else, and is reachable by
|
|
246
|
+
* no keyboard anywhere, so a themed version of it was a control that half the
|
|
247
|
+
* readers of a search box did not have. Input draws its own, as a real button
|
|
248
|
+
* with a name, whenever a caller passes `onClear`.
|
|
249
|
+
*/
|
|
250
|
+
.crewlet-input__control[type='search']::-webkit-search-cancel-button {
|
|
251
|
+
-webkit-appearance: none;
|
|
252
|
+
appearance: none;
|
|
253
|
+
display: none;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/*
|
|
257
|
+
* The clear control's slot. It DOES take the pointer, unlike the leading and
|
|
258
|
+
* trailing slots above, because it is the one control that belongs inside a
|
|
259
|
+
* text box (see Input's own `onClear`).
|
|
260
|
+
*/
|
|
261
|
+
.crewlet-input__clear {
|
|
262
|
+
display: inline-flex;
|
|
263
|
+
align-items: center;
|
|
264
|
+
flex: none;
|
|
265
|
+
padding-right: var(--spacing-1);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/*
|
|
269
|
+
* A field holding a name something else resolves: a secret reference, a key,
|
|
270
|
+
* a path. Monospace and quieter than prose, because it is a value to be read
|
|
271
|
+
* exactly rather than read for sense.
|
|
272
|
+
*/
|
|
273
|
+
.crewlet-input--reference .crewlet-input__control {
|
|
274
|
+
font-family: var(--font-family-mono);
|
|
275
|
+
font-variant-ligatures: none;
|
|
276
|
+
font-size: var(--font-size-compact);
|
|
277
|
+
color: var(--color-text-secondary);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/*
|
|
281
|
+
* The search field of a command palette. Borderless and large, because the
|
|
282
|
+
* surface around it IS the field: a boundary inside a dialog whose whole body
|
|
283
|
+
* is one input is a boundary around nothing, and a drawn one made the palette
|
|
284
|
+
* read as a form with a single question.
|
|
285
|
+
*/
|
|
286
|
+
.crewlet-input--command {
|
|
287
|
+
border-color: transparent;
|
|
288
|
+
background: transparent;
|
|
289
|
+
padding-inline: 0;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/*
|
|
293
|
+
* And it draws no ring either, for the same reason: the dialog around it is
|
|
294
|
+
* what says where the reader is, and the list below carries the highlight the
|
|
295
|
+
* arrows move.
|
|
296
|
+
*
|
|
297
|
+
* The outline is kept and made TRANSPARENT rather than dropped. Forced-colors
|
|
298
|
+
* mode substitutes a system colour into a transparent outline, so the one
|
|
299
|
+
* control in the palette is not the single field in the package left with no
|
|
300
|
+
* indicator at all for the readers who depend on that mode.
|
|
301
|
+
*/
|
|
302
|
+
.crewlet-input--command:has(.crewlet-input__control:focus-visible) {
|
|
303
|
+
outline-color: transparent;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.crewlet-input--command .crewlet-input__control {
|
|
307
|
+
font-size: var(--font-size-lg);
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/* ── Textarea ────────────────────────────────────────────────────────── */
|
|
311
|
+
/* A textarea with trailing content is wrapped so the content can sit inside
|
|
312
|
+
its top right corner; the textarea itself is unchanged. */
|
|
313
|
+
.crewlet-textarea-shell {
|
|
314
|
+
--crewlet-textarea-trailing-inset: 72px;
|
|
315
|
+
|
|
316
|
+
position: relative;
|
|
317
|
+
display: block;
|
|
318
|
+
width: 100%;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.crewlet-textarea-shell .crewlet-textarea {
|
|
322
|
+
padding-right: var(--crewlet-textarea-trailing-inset);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.crewlet-textarea-shell .crewlet-input__trailing {
|
|
326
|
+
position: absolute;
|
|
327
|
+
top: var(--spacing-2);
|
|
328
|
+
right: 0;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/*
|
|
332
|
+
* The multiline field: prose a person writes, such as a goal or a mission, so
|
|
333
|
+
* it wears the page's own face. It was the code face when this rule was
|
|
334
|
+
* written for a raw JSON editor that no longer exists.
|
|
335
|
+
*/
|
|
336
|
+
.crewlet-textarea {
|
|
337
|
+
width: 100%;
|
|
338
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
339
|
+
font-family: var(--font-family-sans);
|
|
340
|
+
font-size: var(--font-size-compact);
|
|
341
|
+
line-height: var(--font-line-height-normal);
|
|
342
|
+
color: var(--color-text-primary);
|
|
343
|
+
background-color: var(--color-surface-subtle);
|
|
344
|
+
border: 1px solid var(--color-border-control);
|
|
345
|
+
border-radius: var(--radius-md);
|
|
346
|
+
transition: border-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
347
|
+
box-sizing: border-box;
|
|
348
|
+
outline: none;
|
|
349
|
+
resize: vertical;
|
|
350
|
+
min-height: var(--spacing-11);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* The same one ring the box above draws, and for the same reasons. Here it is
|
|
354
|
+
on the control itself: a textarea is the field, with nothing wrapped round
|
|
355
|
+
it and nothing focusable inside it. */
|
|
356
|
+
.crewlet-textarea:focus-visible {
|
|
357
|
+
outline: 2px solid var(--color-focus);
|
|
358
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
.crewlet-textarea.is-error {
|
|
362
|
+
border-color: var(--color-feedback-danger);
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
.crewlet-textarea.is-error:focus-visible {
|
|
366
|
+
outline-color: var(--color-feedback-danger);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
.crewlet-textarea.is-disabled {
|
|
370
|
+
opacity: 0.6;
|
|
371
|
+
cursor: not-allowed;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
.crewlet-textarea.is-auto-resize {
|
|
375
|
+
resize: none;
|
|
376
|
+
overflow: hidden;
|
|
377
|
+
min-height: var(--size-control-lg);
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.crewlet-textarea::placeholder {
|
|
381
|
+
color: var(--color-text-tertiary);
|
|
382
|
+
opacity: 1;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/* ── Label ───────────────────────────────────────────────────────────── */
|
|
386
|
+
/*
|
|
387
|
+
* THE ONE MICRO-LABEL REGISTER: 11px, medium, opened up and uppercased, on
|
|
388
|
+
* the tertiary step. A form is read by its values, and a label set in the
|
|
389
|
+
* same size and weight as the value under it competes with it for the line;
|
|
390
|
+
* in this register the eye takes the whole column of labels in one pass and
|
|
391
|
+
* stops at the values.
|
|
392
|
+
*
|
|
393
|
+
* It is declared here and in exactly two other places that must match it, the
|
|
394
|
+
* fieldset legend and the read-only field's label, because those three ARE
|
|
395
|
+
* the same label in three markup positions.
|
|
396
|
+
*/
|
|
397
|
+
.crewlet-label {
|
|
398
|
+
display: inline-flex;
|
|
399
|
+
align-items: center;
|
|
400
|
+
gap: var(--spacing-1);
|
|
401
|
+
font-size: var(--font-size-2xs);
|
|
402
|
+
font-weight: var(--font-weight-medium);
|
|
403
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
404
|
+
text-transform: uppercase;
|
|
405
|
+
color: var(--color-text-tertiary);
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.crewlet-label--with-action {
|
|
409
|
+
display: flex;
|
|
410
|
+
justify-content: space-between;
|
|
411
|
+
align-items: center;
|
|
412
|
+
gap: var(--spacing-2);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
.crewlet-label__text {
|
|
416
|
+
display: inline-flex;
|
|
417
|
+
align-items: center;
|
|
418
|
+
gap: var(--spacing-1);
|
|
419
|
+
font-size: var(--font-size-2xs);
|
|
420
|
+
font-weight: var(--font-weight-medium);
|
|
421
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
422
|
+
text-transform: uppercase;
|
|
423
|
+
color: var(--color-text-tertiary);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
/*
|
|
427
|
+
* The asterisk takes the danger INK, not the danger fill: at 3.76:1 the fill
|
|
428
|
+
* is under the floor for a mark a reader has to notice, and this one carries
|
|
429
|
+
* a rule about whether the form can be saved.
|
|
430
|
+
*/
|
|
431
|
+
.crewlet-label__required {
|
|
432
|
+
color: var(--color-feedback-danger-ink);
|
|
433
|
+
font-weight: var(--font-weight-bold);
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/* "(optional)" and "(required)": a fact about the field, on the tertiary step. */
|
|
437
|
+
.crewlet-label__note {
|
|
438
|
+
color: var(--color-text-tertiary);
|
|
439
|
+
font-weight: var(--font-weight-regular);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
.crewlet-label__action {
|
|
443
|
+
display: inline-flex;
|
|
444
|
+
align-items: center;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
/* ── FormField ───────────────────────────────────────────────────────── */
|
|
448
|
+
/* The label, the control and its lines are one thing, so they sit one step
|
|
449
|
+
apart; the step BETWEEN fields is FormRow's and FormSection's, and it is
|
|
450
|
+
four times this. A field whose own parts were as far apart as the fields
|
|
451
|
+
around it left a label reading as a heading over the row below it. */
|
|
452
|
+
.crewlet-form-field {
|
|
453
|
+
display: flex;
|
|
454
|
+
flex-direction: column;
|
|
455
|
+
gap: var(--spacing-1);
|
|
456
|
+
min-width: 0;
|
|
457
|
+
border: none;
|
|
458
|
+
margin: 0;
|
|
459
|
+
padding: 0;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/* A fieldset's legend wears the field label's register, so a list of values
|
|
463
|
+
reads as one field among the others. */
|
|
464
|
+
.crewlet-form-field__legend {
|
|
465
|
+
padding: 0;
|
|
466
|
+
margin-bottom: var(--spacing-1);
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
.crewlet-form-field__helper {
|
|
470
|
+
font-size: var(--font-size-xs);
|
|
471
|
+
line-height: var(--font-line-height-normal);
|
|
472
|
+
color: var(--color-text-tertiary);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/*
|
|
476
|
+
* The error line, on the danger INK. It stays BESIDE the help rather than
|
|
477
|
+
* replacing it: a reader told they are wrong needs the line that says what
|
|
478
|
+
* right looks like more than ever, not less.
|
|
479
|
+
*
|
|
480
|
+
* THE INK IS NOT THE HELP LINE'S. The product's own stylesheet draws a
|
|
481
|
+
* field's refusal in the same tertiary grey as its help, which leaves the one
|
|
482
|
+
* line saying the value cannot be saved indistinguishable from the line
|
|
483
|
+
* saying what the value is for. This register keeps the measured danger step.
|
|
484
|
+
*/
|
|
485
|
+
.crewlet-form-field__error {
|
|
486
|
+
font-size: var(--font-size-xs);
|
|
487
|
+
line-height: var(--font-line-height-normal);
|
|
488
|
+
color: var(--color-feedback-danger-ink);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
/* ── FormRow ─────────────────────────────────────────────────────────── */
|
|
492
|
+
.crewlet-form-row {
|
|
493
|
+
display: grid;
|
|
494
|
+
gap: var(--spacing-4);
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
.crewlet-form-row--1 { grid-template-columns: 1fr; }
|
|
498
|
+
.crewlet-form-row--2 { grid-template-columns: repeat(2, 1fr); }
|
|
499
|
+
.crewlet-form-row--3 { grid-template-columns: repeat(3, 1fr); }
|
|
500
|
+
|
|
501
|
+
@media (max-width: 768px) {
|
|
502
|
+
.crewlet-form-row--2,
|
|
503
|
+
.crewlet-form-row--3 { grid-template-columns: 1fr; }
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
/* ── FormSection ─────────────────────────────────────────────────────── */
|
|
507
|
+
.crewlet-form-section {
|
|
508
|
+
display: flex;
|
|
509
|
+
flex-direction: column;
|
|
510
|
+
gap: var(--spacing-4);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
.crewlet-form-section--divided {
|
|
514
|
+
border-top: 1px solid var(--color-border-default);
|
|
515
|
+
padding-top: var(--spacing-5);
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
.crewlet-form-section__header {
|
|
519
|
+
display: flex;
|
|
520
|
+
align-items: flex-start;
|
|
521
|
+
justify-content: space-between;
|
|
522
|
+
gap: var(--spacing-3);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
.crewlet-form-section__titles {
|
|
526
|
+
display: flex;
|
|
527
|
+
flex-direction: column;
|
|
528
|
+
gap: var(--spacing-1);
|
|
529
|
+
min-width: 0;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
.crewlet-form-section__title {
|
|
533
|
+
margin: 0;
|
|
534
|
+
font-size: var(--font-size-sm);
|
|
535
|
+
font-weight: var(--font-weight-semibold);
|
|
536
|
+
letter-spacing: var(--font-letter-spacing-tight);
|
|
537
|
+
color: var(--color-text-primary);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.crewlet-form-section__hint {
|
|
541
|
+
margin: 0;
|
|
542
|
+
font-size: var(--font-size-xs);
|
|
543
|
+
line-height: var(--font-line-height-normal);
|
|
544
|
+
color: var(--color-text-tertiary);
|
|
545
|
+
max-width: var(--size-measure-narrow);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
.crewlet-form-section__actions {
|
|
549
|
+
display: flex;
|
|
550
|
+
align-items: center;
|
|
551
|
+
gap: var(--spacing-2);
|
|
552
|
+
flex: none;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
.crewlet-form-section__body {
|
|
556
|
+
display: flex;
|
|
557
|
+
flex-direction: column;
|
|
558
|
+
gap: var(--spacing-4);
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/* ── ReadOnlyField ───────────────────────────────────────────────────── */
|
|
562
|
+
.crewlet-readonly-field {
|
|
563
|
+
display: flex;
|
|
564
|
+
flex-direction: column;
|
|
565
|
+
gap: var(--spacing-1);
|
|
566
|
+
min-width: 0;
|
|
567
|
+
}
|
|
568
|
+
|
|
569
|
+
/* The same micro-label register a Label draws, because it is the same label:
|
|
570
|
+
the field is read-only, not a different kind of field. */
|
|
571
|
+
.crewlet-readonly-field__label {
|
|
572
|
+
font-size: var(--font-size-2xs);
|
|
573
|
+
font-weight: var(--font-weight-medium);
|
|
574
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
575
|
+
text-transform: uppercase;
|
|
576
|
+
color: var(--color-text-tertiary);
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
.crewlet-readonly-field__value {
|
|
580
|
+
font-size: var(--font-size-compact);
|
|
581
|
+
line-height: var(--font-line-height-normal);
|
|
582
|
+
color: var(--color-text-primary);
|
|
583
|
+
overflow-wrap: anywhere;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
.crewlet-readonly-field__value.is-mono {
|
|
587
|
+
font-family: var(--font-family-mono);
|
|
588
|
+
font-size: var(--font-size-compact);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
/*
|
|
592
|
+
* Why it is not editable here, and where it is. The SECONDARY step rather
|
|
593
|
+
* than the decoration one: this sentence is the whole reason the reader stops
|
|
594
|
+
* looking for a control that is not on this screen.
|
|
595
|
+
*/
|
|
596
|
+
.crewlet-readonly-field__reason {
|
|
597
|
+
display: flex;
|
|
598
|
+
flex-wrap: wrap;
|
|
599
|
+
align-items: baseline;
|
|
600
|
+
gap: var(--spacing-1);
|
|
601
|
+
font-size: var(--font-size-xs);
|
|
602
|
+
line-height: var(--font-line-height-normal);
|
|
603
|
+
color: var(--color-text-secondary);
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
.crewlet-readonly-field__action {
|
|
607
|
+
display: inline-flex;
|
|
608
|
+
align-items: baseline;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
@media (prefers-reduced-motion: reduce) {
|
|
612
|
+
.crewlet-input,
|
|
613
|
+
.crewlet-textarea {
|
|
614
|
+
transition: none;
|
|
615
|
+
}
|
|
616
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Whether the reader is on an Apple platform, where Command is the command key.
|
|
4
|
+
*
|
|
5
|
+
* `userAgentData.platform` first, because `navigator.platform` is deprecated
|
|
6
|
+
* and frozen on several browsers, and the user agent string is the last
|
|
7
|
+
* resort rather than the first.
|
|
8
|
+
*/
|
|
9
|
+
export declare function isApplePlatform(): boolean;
|
|
10
|
+
/** How one key is drawn and how it is read. */
|
|
11
|
+
export declare function keyGlyph(key: string, apple: boolean): {
|
|
12
|
+
glyph: string;
|
|
13
|
+
spoken: string;
|
|
14
|
+
};
|
|
15
|
+
export interface KbdProps extends HTMLAttributes<HTMLElement> {
|
|
16
|
+
/** Draws the keycap quieter, for a hint that sits inside a field. */
|
|
17
|
+
subtle?: boolean | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* A shortcut as the keys it is pressed with, in order: `['Mod', 'Shift',
|
|
20
|
+
* 'z']`. `Mod` is the platform's command key, so one hint is right on both.
|
|
21
|
+
*
|
|
22
|
+
* With `keys`, the caps are drawn hidden and ONE SENTENCE is read instead:
|
|
23
|
+
* "Command plus Shift plus Z". A screen reader given the glyphs reads
|
|
24
|
+
* "place of interest sign Z", which names nothing anybody presses.
|
|
25
|
+
*/
|
|
26
|
+
keys?: readonly string[] | undefined;
|
|
27
|
+
/** Overrides platform detection, for a suite or a screenshot. */
|
|
28
|
+
apple?: boolean | undefined;
|
|
29
|
+
children?: ReactNode;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Kbd: a keyboard key drawn as a keycap.
|
|
33
|
+
*
|
|
34
|
+
* Two forms, and they are not alternatives: `children` is one key, for a hint
|
|
35
|
+
* inside a field ("Enter" beside a box that adds a value to a list), and
|
|
36
|
+
* `keys` is a whole shortcut, which needs the platform mapping and the spoken
|
|
37
|
+
* sentence. A hint that says Ctrl+Z to somebody on a Mac names a key they do
|
|
38
|
+
* not press.
|
|
39
|
+
*/
|
|
40
|
+
export declare const Kbd: ({ subtle, keys, apple, className, children, ...rest }: KbdProps) => import("react/jsx-runtime").JSX.Element;
|