@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,1098 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* A hierarchy drawn as cards on a canvas (TreeCanvas.tsx).
|
|
3
|
+
*
|
|
4
|
+
* Every card is measured and placed by the tidy tree layout with a transform:
|
|
5
|
+
* the card width variable wide in the `card` appearance, as wide as its own
|
|
6
|
+
* name in `node`.
|
|
7
|
+
*
|
|
8
|
+
* A CARD IS NEUTRAL UNLESS IT IS TONED, and a tone is never a taxonomy. A
|
|
9
|
+
* chart that tinted its cards by what they CONTAIN would spend the one hue
|
|
10
|
+
* that means "where the reader is" on a classification the reader then has to
|
|
11
|
+
* decode. `--color-node-*` is the other thing a hue can be: a mark an operator
|
|
12
|
+
* puts on one node so they can find it again, or one a chart derives from a
|
|
13
|
+
* stable identity. Nothing is claimed by two cards sharing one, so the palette
|
|
14
|
+
* is not measured for separability and no legend is owed; what IS measured is
|
|
15
|
+
* that the name drawn on a tinted card clears 7:1 on it and the caption 4.5:1,
|
|
16
|
+
* in both themes.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
.crewlet-tree-canvas {
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
height: 100%;
|
|
23
|
+
min-height: 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.crewlet-tree-canvas > .crewlet-canvas {
|
|
27
|
+
flex: 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.crewlet-tree-canvas__tree,
|
|
31
|
+
.crewlet-tree-canvas__card,
|
|
32
|
+
.crewlet-tree-canvas__links,
|
|
33
|
+
.crewlet-tree-canvas__gap,
|
|
34
|
+
.crewlet-tree-canvas__margin {
|
|
35
|
+
position: absolute;
|
|
36
|
+
top: 0;
|
|
37
|
+
left: 0;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/*
|
|
41
|
+
* THE CARD'S FRAME IS THE CHART'S, NOT THE CALLER'S.
|
|
42
|
+
*
|
|
43
|
+
* The box used to carry a width and nothing else, so every consumer drew the
|
|
44
|
+
* surface, the boundary, the radius and the lift itself, and two charts in one
|
|
45
|
+
* product drew four different cards. What a node of a hierarchy LOOKS like is
|
|
46
|
+
* one decision, so it is made here; what a card SAYS is still entirely the
|
|
47
|
+
* caller's.
|
|
48
|
+
*
|
|
49
|
+
* One width for every card, so a chart reads as a column of equal cards rather
|
|
50
|
+
* than a ransom note. A caller that wants wider cards rebinds the variable on
|
|
51
|
+
* the chart rather than on each card, because the layout measures what it is
|
|
52
|
+
* given and two widths in one chart is a decision, not a default.
|
|
53
|
+
*
|
|
54
|
+
* A COLUMN, and the pointer's controls are not a track in it. They used to be:
|
|
55
|
+
* the card was two columns and the second held the strip, so every name in the
|
|
56
|
+
* chart was measured against the width three buttons left over and the longer
|
|
57
|
+
* half of them were truncated at rest, for controls nobody was pointing at. The
|
|
58
|
+
* strip is drawn over the card's end instead and appears when the card is
|
|
59
|
+
* reached, so the row below is what the card says with all of the width, and
|
|
60
|
+
* what is left over when a name is short is space rather than chrome.
|
|
61
|
+
*/
|
|
62
|
+
.crewlet-tree-canvas__card {
|
|
63
|
+
/*
|
|
64
|
+
* ABSOLUTE, WHICH IS ALSO THE CONTAINING BLOCK THE STRIP NEEDS. It used to
|
|
65
|
+
* say `relative` here, one rule after the block above had said `absolute`
|
|
66
|
+
* for the same element at the same specificity, so the later word won and
|
|
67
|
+
* every card was left in normal flow: the transform that places it was then
|
|
68
|
+
* added to wherever the stack of cards before it had already pushed it, and
|
|
69
|
+
* a chart's Nth card was drawn the height of the N-1 before it too low.
|
|
70
|
+
* Nothing caught it, because the layout is arithmetic a suite checks with no
|
|
71
|
+
* browser and jsdom computes no position at all. An absolutely positioned
|
|
72
|
+
* box is a containing block for its own absolutely positioned descendants,
|
|
73
|
+
* so the actions strip keeps what `relative` was added for.
|
|
74
|
+
*/
|
|
75
|
+
position: absolute;
|
|
76
|
+
width: var(--crewlet-tree-canvas-card-width, 15rem);
|
|
77
|
+
display: flex;
|
|
78
|
+
flex-direction: column;
|
|
79
|
+
align-items: stretch;
|
|
80
|
+
background: var(--crewlet-tree-canvas-card-fill, var(--color-surface-subtle));
|
|
81
|
+
border: 1px solid var(--crewlet-tree-canvas-card-line, var(--color-border-default));
|
|
82
|
+
border-radius: var(--radius-lg);
|
|
83
|
+
box-shadow: var(--shadow-xs);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/*
|
|
87
|
+
* A TONED CARD IS OPAQUE UNDER ITS TINT. The neutral surface step is itself
|
|
88
|
+
* translucent, and the connectors are drawn under the cards, so a tint laid
|
|
89
|
+
* straight on it would have the branches of the rank above running through the
|
|
90
|
+
* card's own face. The page's ground goes down first and the tint over it, in
|
|
91
|
+
* one declaration, so the card is exactly the tint over the page wherever it
|
|
92
|
+
* sits.
|
|
93
|
+
*/
|
|
94
|
+
.crewlet-tree-canvas__card[data-tone] {
|
|
95
|
+
background-color: var(--color-surface-background);
|
|
96
|
+
background-image: linear-gradient(
|
|
97
|
+
var(--crewlet-tree-canvas-card-fill),
|
|
98
|
+
var(--crewlet-tree-canvas-card-fill)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/*
|
|
103
|
+
* The halo: a hairline ring OUTSIDE the card's own boundary, at the lightest
|
|
104
|
+
* of the hue's three alphas. It is what says a card is toned at all from the
|
|
105
|
+
* far end of a chart, where the fill is a few pixels of tint; drawn as its own
|
|
106
|
+
* ring rather than a second border so it never competes with the boundary that
|
|
107
|
+
* says where the card ends. Pointer-transparent, because it is drawn over the
|
|
108
|
+
* gap the next card's controls reach into.
|
|
109
|
+
*/
|
|
110
|
+
.crewlet-tree-canvas__card[data-tone]::after {
|
|
111
|
+
content: '';
|
|
112
|
+
position: absolute;
|
|
113
|
+
inset: -3px;
|
|
114
|
+
border: 1px solid var(--crewlet-tree-canvas-card-halo);
|
|
115
|
+
border-radius: var(--radius-lg);
|
|
116
|
+
pointer-events: none;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/*
|
|
120
|
+
* The six hues, each as the four steps a toned card draws: the fill it sits
|
|
121
|
+
* on, the boundary around it, the halo outside that, and the ink its name is
|
|
122
|
+
* written in. The ink is published as a variable rather than applied here
|
|
123
|
+
* because WHICH text is the name is the caller's to say.
|
|
124
|
+
*/
|
|
125
|
+
.crewlet-tree-canvas__card[data-tone='purple'] {
|
|
126
|
+
--crewlet-tree-canvas-card-fill: var(--color-node-purple-fill);
|
|
127
|
+
--crewlet-tree-canvas-card-line: var(--color-node-purple-line);
|
|
128
|
+
--crewlet-tree-canvas-card-halo: var(--color-node-purple-halo);
|
|
129
|
+
--crewlet-tree-canvas-card-ink: var(--color-node-purple-ink);
|
|
130
|
+
--crewlet-tree-canvas-card-accent: var(--color-node-purple);
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.crewlet-tree-canvas__card[data-tone='cyan'] {
|
|
134
|
+
--crewlet-tree-canvas-card-fill: var(--color-node-cyan-fill);
|
|
135
|
+
--crewlet-tree-canvas-card-line: var(--color-node-cyan-line);
|
|
136
|
+
--crewlet-tree-canvas-card-halo: var(--color-node-cyan-halo);
|
|
137
|
+
--crewlet-tree-canvas-card-ink: var(--color-node-cyan-ink);
|
|
138
|
+
--crewlet-tree-canvas-card-accent: var(--color-node-cyan);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.crewlet-tree-canvas__card[data-tone='green'] {
|
|
142
|
+
--crewlet-tree-canvas-card-fill: var(--color-node-green-fill);
|
|
143
|
+
--crewlet-tree-canvas-card-line: var(--color-node-green-line);
|
|
144
|
+
--crewlet-tree-canvas-card-halo: var(--color-node-green-halo);
|
|
145
|
+
--crewlet-tree-canvas-card-ink: var(--color-node-green-ink);
|
|
146
|
+
--crewlet-tree-canvas-card-accent: var(--color-node-green);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.crewlet-tree-canvas__card[data-tone='amber'] {
|
|
150
|
+
--crewlet-tree-canvas-card-fill: var(--color-node-amber-fill);
|
|
151
|
+
--crewlet-tree-canvas-card-line: var(--color-node-amber-line);
|
|
152
|
+
--crewlet-tree-canvas-card-halo: var(--color-node-amber-halo);
|
|
153
|
+
--crewlet-tree-canvas-card-ink: var(--color-node-amber-ink);
|
|
154
|
+
--crewlet-tree-canvas-card-accent: var(--color-node-amber);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.crewlet-tree-canvas__card[data-tone='rose'] {
|
|
158
|
+
--crewlet-tree-canvas-card-fill: var(--color-node-rose-fill);
|
|
159
|
+
--crewlet-tree-canvas-card-line: var(--color-node-rose-line);
|
|
160
|
+
--crewlet-tree-canvas-card-halo: var(--color-node-rose-halo);
|
|
161
|
+
--crewlet-tree-canvas-card-ink: var(--color-node-rose-ink);
|
|
162
|
+
--crewlet-tree-canvas-card-accent: var(--color-node-rose);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.crewlet-tree-canvas__card[data-tone='blue'] {
|
|
166
|
+
--crewlet-tree-canvas-card-fill: var(--color-node-blue-fill);
|
|
167
|
+
--crewlet-tree-canvas-card-line: var(--color-node-blue-line);
|
|
168
|
+
--crewlet-tree-canvas-card-halo: var(--color-node-blue-halo);
|
|
169
|
+
--crewlet-tree-canvas-card-ink: var(--color-node-blue-ink);
|
|
170
|
+
--crewlet-tree-canvas-card-accent: var(--color-node-blue);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/*
|
|
174
|
+
* A card that stands for somebody outside the system takes the dashed edge
|
|
175
|
+
* every such seat wears. The BOUNDARY says it rather than a hue, so it reads
|
|
176
|
+
* to somebody who cannot separate the hue at all.
|
|
177
|
+
*/
|
|
178
|
+
.crewlet-tree-canvas__card--outline {
|
|
179
|
+
border-style: dashed;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/*
|
|
183
|
+
* THE NODES INSIDE THE CARD. `role="treeitem"` is this component's own
|
|
184
|
+
* contract, handed to the caller by `ctx.item(id)`, so the inset a node sits
|
|
185
|
+
* on and the two states it can be in belong here rather than to whatever a
|
|
186
|
+
* caller happens to spell around them.
|
|
187
|
+
*/
|
|
188
|
+
.crewlet-tree-canvas__card [role='treeitem'] {
|
|
189
|
+
/*
|
|
190
|
+
* A NODE IS A STACK, and the stack is the component's too. The inset and
|
|
191
|
+
* the radius moved here and the rhythm INSIDE the node did not, so every
|
|
192
|
+
* caller still wrote the same three declarations around its own name and
|
|
193
|
+
* meta line: the Storybook story did, which is how two charts in one
|
|
194
|
+
* product come to space their nodes differently. What a node SAYS is still
|
|
195
|
+
* entirely the caller's; how its lines sit is the chart's.
|
|
196
|
+
*/
|
|
197
|
+
display: flex;
|
|
198
|
+
flex-direction: column;
|
|
199
|
+
gap: var(--spacing-1);
|
|
200
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
201
|
+
border-radius: var(--radius-lg);
|
|
202
|
+
min-width: 0;
|
|
203
|
+
/* A node is selectable and focusable and is NOT a button: the text cursor
|
|
204
|
+
over it promised a selection the drag to pan takes away. */
|
|
205
|
+
cursor: default;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/*
|
|
209
|
+
* The ring is drawn INSIDE the node: it sits on the card's own edge, and the
|
|
210
|
+
* canvas clips, so an outset ring is cut away on the cards nearest the frame.
|
|
211
|
+
* This component hands out the tab stop, so the indicator is its to draw; left
|
|
212
|
+
* to the caller it was drawn on some charts and on others not at all.
|
|
213
|
+
*/
|
|
214
|
+
.crewlet-tree-canvas__card [role='treeitem']:focus-visible {
|
|
215
|
+
outline: 2px solid var(--color-focus);
|
|
216
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
/* The selection is where the reader is, so it takes the accent. Inset, for the
|
|
220
|
+
same reason the ring is. */
|
|
221
|
+
.crewlet-tree-canvas__card [role='treeitem'][aria-selected='true'] {
|
|
222
|
+
box-shadow: inset 0 0 0 1px var(--color-brand-accent);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/*
|
|
226
|
+
* THE POINTER'S CONTROLS, drawn over the end of the card and quiet until it is
|
|
227
|
+
* reached.
|
|
228
|
+
*
|
|
229
|
+
* REVEALED BY FOCUS AS WELL AS BY HOVER, which is the rule every quiet control
|
|
230
|
+
* in this package keeps: an opacity of 0 alone is a control a keyboard reader
|
|
231
|
+
* is shown nothing of.
|
|
232
|
+
*
|
|
233
|
+
* THE CARD'S OWN STRIP APPEARS WITH THE CARD, and a ROW's appears with its row.
|
|
234
|
+
* A card is the thing a pointer addresses, so reaching one anywhere has to show
|
|
235
|
+
* what can be done to it, and the add control below it already appears that
|
|
236
|
+
* way: keyed on the treeitem alone, pointing at a unit's lead chip showed the
|
|
237
|
+
* add and not the menu beside its name. A row is addressed on its own, so an
|
|
238
|
+
* expanded unit shows the controls of the row under the pointer rather than of
|
|
239
|
+
* all nine at once. Both are the same selector written against a different
|
|
240
|
+
* ancestor, and a row's strip has to be its treeitem's immediate next sibling,
|
|
241
|
+
* which is what `ctx.actions` says.
|
|
242
|
+
*
|
|
243
|
+
* The strip covers what it is drawn over, so it carries the card's own ground
|
|
244
|
+
* rather than sitting transparent on top of a name it half hides. And it is
|
|
245
|
+
* inert while quiet: a button at zero opacity that still takes the press is a
|
|
246
|
+
* control that acts on a card the reader has not reached.
|
|
247
|
+
*
|
|
248
|
+
* `[aria-expanded='true']` is a menu opened FROM the strip. Focus is then in
|
|
249
|
+
* the menu's own surface, which is portalled out of the card, so neither
|
|
250
|
+
* `:hover` nor `:focus-within` holds any more and the strip would vanish from
|
|
251
|
+
* under its own open menu. `data-menu-open` is the same fact from the
|
|
252
|
+
* component's state, for a menu whose open state the caller keeps.
|
|
253
|
+
*/
|
|
254
|
+
/*
|
|
255
|
+
* WHATEVER HOLDS A STRIP IS ITS CONTAINING BLOCK. A card's own strip hangs off
|
|
256
|
+
* the card, which is positioned above; a strip beside a ROW inside a card hangs
|
|
257
|
+
* off that row, and the row is the caller's element, drawn however the caller
|
|
258
|
+
* likes. Asking every caller to remember `position: relative` on it is asking
|
|
259
|
+
* for a chart where each of nine rows draws its controls over the card's top
|
|
260
|
+
* right corner, all on top of one another, and nothing says why. So the rule
|
|
261
|
+
* finds the parent instead of the parent declaring itself.
|
|
262
|
+
*/
|
|
263
|
+
.crewlet-tree-canvas__card :has(> .crewlet-tree-canvas__actions) {
|
|
264
|
+
position: relative;
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
.crewlet-tree-canvas__actions {
|
|
268
|
+
position: absolute;
|
|
269
|
+
top: 0;
|
|
270
|
+
right: 0;
|
|
271
|
+
z-index: var(--z-index-raised);
|
|
272
|
+
display: flex;
|
|
273
|
+
align-items: center;
|
|
274
|
+
gap: var(--spacing-1);
|
|
275
|
+
padding: var(--spacing-1);
|
|
276
|
+
border-radius: var(--radius-lg);
|
|
277
|
+
background: var(--color-surface-subtle);
|
|
278
|
+
opacity: 0;
|
|
279
|
+
pointer-events: none;
|
|
280
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.crewlet-tree-canvas__card:hover > .crewlet-tree-canvas__actions,
|
|
284
|
+
.crewlet-tree-canvas__card:focus-within > .crewlet-tree-canvas__actions,
|
|
285
|
+
.crewlet-tree-canvas__card:has([aria-selected='true']) > .crewlet-tree-canvas__actions,
|
|
286
|
+
.crewlet-tree-canvas__card [role='treeitem']:hover + .crewlet-tree-canvas__actions,
|
|
287
|
+
.crewlet-tree-canvas__card [role='treeitem']:focus-visible + .crewlet-tree-canvas__actions,
|
|
288
|
+
.crewlet-tree-canvas__card [role='treeitem'][aria-selected='true'] + .crewlet-tree-canvas__actions,
|
|
289
|
+
.crewlet-tree-canvas__actions:hover,
|
|
290
|
+
.crewlet-tree-canvas__actions:focus-within,
|
|
291
|
+
.crewlet-tree-canvas__actions[data-menu-open='true'],
|
|
292
|
+
.crewlet-tree-canvas__actions:has([aria-expanded='true']) {
|
|
293
|
+
opacity: 1;
|
|
294
|
+
pointer-events: auto;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/*
|
|
298
|
+
* WHAT HANGS UNDER A CARD: the control that adds a child, on the branch the
|
|
299
|
+
* children come off.
|
|
300
|
+
*
|
|
301
|
+
* Its room is kept at rest and only its content is quiet, because this strip is
|
|
302
|
+
* INSIDE the card the layout measures: revealed by growing the card, every
|
|
303
|
+
* hover would push the whole rank below it down and move the card the pointer
|
|
304
|
+
* was on. So the band is always there and the reveal is opacity, exactly as the
|
|
305
|
+
* actions strip's is.
|
|
306
|
+
*
|
|
307
|
+
* Card-wide rather than per node here, because there is one of these to a card
|
|
308
|
+
* and it is the CARD's branch it hangs from, not any one row's.
|
|
309
|
+
*/
|
|
310
|
+
.crewlet-tree-canvas__under {
|
|
311
|
+
display: flex;
|
|
312
|
+
align-items: center;
|
|
313
|
+
justify-content: center;
|
|
314
|
+
padding: 0 var(--spacing-2) var(--spacing-2);
|
|
315
|
+
opacity: 0;
|
|
316
|
+
pointer-events: none;
|
|
317
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/*
|
|
321
|
+
* And a band that turned out empty takes no room at all. The component draws no
|
|
322
|
+
* slot for a caller that returns nothing; a caller can also return a component
|
|
323
|
+
* that itself renders nothing, which is an element as far as the component can
|
|
324
|
+
* tell, and this is what catches that.
|
|
325
|
+
*/
|
|
326
|
+
.crewlet-tree-canvas__under:empty {
|
|
327
|
+
display: none;
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
.crewlet-tree-canvas__card:hover > .crewlet-tree-canvas__under,
|
|
331
|
+
.crewlet-tree-canvas__card:focus-within > .crewlet-tree-canvas__under,
|
|
332
|
+
.crewlet-tree-canvas__card:has([aria-selected='true']) > .crewlet-tree-canvas__under,
|
|
333
|
+
.crewlet-tree-canvas__under:has([aria-expanded='true']) {
|
|
334
|
+
opacity: 1;
|
|
335
|
+
pointer-events: auto;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/*
|
|
339
|
+
* A reveal is a state change rather than an entrance, so under reduced motion
|
|
340
|
+
* it simply happens. The control is still shown and still reached the same way.
|
|
341
|
+
*/
|
|
342
|
+
@media (prefers-reduced-motion: reduce) {
|
|
343
|
+
.crewlet-tree-canvas__actions,
|
|
344
|
+
.crewlet-tree-canvas__under,
|
|
345
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__under > :not(.crewlet-add-pill),
|
|
346
|
+
.crewlet-tree-canvas--node .crewlet-org-node__leading,
|
|
347
|
+
.crewlet-tree-canvas--node .crewlet-org-node-lead__clear {
|
|
348
|
+
transition: none;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
/*
|
|
353
|
+
* The gaps between cards, as tokens: measured like a card, so density scales
|
|
354
|
+
* the space between cards with the space inside them. A layout constant in
|
|
355
|
+
* TypeScript could not do that, and a chart at comfortable density would
|
|
356
|
+
* crowd.
|
|
357
|
+
*/
|
|
358
|
+
.crewlet-tree-canvas__gap {
|
|
359
|
+
width: var(--spacing-6);
|
|
360
|
+
height: var(--spacing-7);
|
|
361
|
+
visibility: hidden;
|
|
362
|
+
pointer-events: none;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/*
|
|
366
|
+
* The space around the whole chart, as a token, for the reason the gaps are
|
|
367
|
+
* one. None by default: a chart of panels is read inside its own frame, and
|
|
368
|
+
* the space around it is the page's. The `node` appearance takes the console
|
|
369
|
+
* chart's own margin below, which is what keeps the outermost node's halo and
|
|
370
|
+
* its focus ring off the canvas's clip.
|
|
371
|
+
*/
|
|
372
|
+
.crewlet-tree-canvas__margin {
|
|
373
|
+
width: var(--spacing-0);
|
|
374
|
+
height: var(--spacing-0);
|
|
375
|
+
visibility: hidden;
|
|
376
|
+
pointer-events: none;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/* ---------------------------------------------------------------------------
|
|
380
|
+
* THE CHART ARRIVING, AND REARRANGING.
|
|
381
|
+
*
|
|
382
|
+
* A card waiting its turn is drawn at nothing and is still MEASURED, because
|
|
383
|
+
* the layout the entrance plays over is the layout the chart ends at; it is
|
|
384
|
+
* never `display: none`, which would make every card's arrival a relayout of
|
|
385
|
+
* everything after it. The branch into a card waits for the card, so the chart
|
|
386
|
+
* never has loose ends while it comes in.
|
|
387
|
+
*
|
|
388
|
+
* The TRAVEL is not here: a card's position is a transform the layout
|
|
389
|
+
* computes, and a transition on it would fire on the first paint of every card
|
|
390
|
+
* the measurement pass adds, which is the entrance played twice at two speeds.
|
|
391
|
+
* It is tweened over the layout's own numbers instead (`motion.ts`).
|
|
392
|
+
* ------------------------------------------------------------------------- */
|
|
393
|
+
|
|
394
|
+
.crewlet-tree-canvas__card[data-enter='waiting'],
|
|
395
|
+
.crewlet-tree-canvas__links path[data-enter='waiting'] {
|
|
396
|
+
opacity: 0;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
.crewlet-tree-canvas__card[data-enter='shown'] {
|
|
400
|
+
animation: crewlet-tree-canvas-arrive var(--motion-duration-slow) var(--motion-easing-default) both;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
.crewlet-tree-canvas__links path[data-enter='shown'] {
|
|
404
|
+
animation: crewlet-tree-canvas-arrive var(--motion-duration-moderate) var(--motion-easing-default)
|
|
405
|
+
both;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
@keyframes crewlet-tree-canvas-arrive {
|
|
409
|
+
from {
|
|
410
|
+
opacity: 0;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
to {
|
|
414
|
+
opacity: 1;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/*
|
|
419
|
+
* A READER WHO ASKED FOR LESS is given the whole chart at once. The component
|
|
420
|
+
* does not start the staggered reveal at all under this query, so nothing here
|
|
421
|
+
* has an animation to cancel; this is what catches a card that was mid-reveal
|
|
422
|
+
* when the setting changed.
|
|
423
|
+
*/
|
|
424
|
+
@media (prefers-reduced-motion: reduce) {
|
|
425
|
+
.crewlet-tree-canvas__card[data-enter],
|
|
426
|
+
.crewlet-tree-canvas__links path[data-enter] {
|
|
427
|
+
opacity: 1;
|
|
428
|
+
animation: none;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.crewlet-tree-canvas__links {
|
|
433
|
+
overflow: visible;
|
|
434
|
+
pointer-events: none;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/*
|
|
438
|
+
* THE CONNECTORS ARE THE CONTENT, and they take the step that is measured to
|
|
439
|
+
* be resolvable. The SHAPE is `layoutConnectors`, which draws a rounded step
|
|
440
|
+
* from each parent's bottom into each child's top; what is decided here is only
|
|
441
|
+
* how dark it is, and that the joins are round so a corner reads as a turn
|
|
442
|
+
* rather than as two lines meeting.
|
|
443
|
+
*
|
|
444
|
+
* A connector is the only thing on the chart that says who reports to whom:
|
|
445
|
+
* remove it and the picture is a scatter of cards. That makes it a graphical
|
|
446
|
+
* object a reader has to make out, at the 3:1 floor, and the boundary steps
|
|
447
|
+
* are not measured there because a hairline between two panels is understood
|
|
448
|
+
* from the panels rather than from the line. `--color-border-hover` measured
|
|
449
|
+
* 1.48:1 on the canvas's ground in light and 2.11:1 in dark; the control
|
|
450
|
+
* boundary step, which the palette suite already holds at 3:1 on every ground,
|
|
451
|
+
* measures 4.83:1 and 4.78:1. Darker than the chart this is drawn from, and
|
|
452
|
+
* deliberately: there the hierarchy was a line a reader had to hunt for.
|
|
453
|
+
*/
|
|
454
|
+
.crewlet-tree-canvas__links path {
|
|
455
|
+
fill: none;
|
|
456
|
+
stroke: var(--color-border-control);
|
|
457
|
+
stroke-width: 1;
|
|
458
|
+
stroke-linecap: round;
|
|
459
|
+
stroke-linejoin: round;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/*
|
|
463
|
+
* A TONED CARD IS REACHED BY ITS OWN BRANCH. The line into it carries the
|
|
464
|
+
* card's boundary step, which is the same value the card's own edge takes, so
|
|
465
|
+
* the branch arrives as part of the card rather than as the chart's neutral
|
|
466
|
+
* ink ending on somebody else's colour.
|
|
467
|
+
*/
|
|
468
|
+
.crewlet-tree-canvas__links path[data-tone='purple'] {
|
|
469
|
+
stroke: var(--color-node-purple-line);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.crewlet-tree-canvas__links path[data-tone='cyan'] {
|
|
473
|
+
stroke: var(--color-node-cyan-line);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.crewlet-tree-canvas__links path[data-tone='green'] {
|
|
477
|
+
stroke: var(--color-node-green-line);
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
.crewlet-tree-canvas__links path[data-tone='amber'] {
|
|
481
|
+
stroke: var(--color-node-amber-line);
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
.crewlet-tree-canvas__links path[data-tone='rose'] {
|
|
485
|
+
stroke: var(--color-node-rose-line);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
.crewlet-tree-canvas__links path[data-tone='blue'] {
|
|
489
|
+
stroke: var(--color-node-blue-line);
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
/* ---------------------------------------------------------------------------
|
|
493
|
+
* THE `node` APPEARANCE: an org chart node rather than a panel.
|
|
494
|
+
*
|
|
495
|
+
* The console's org chart draws a node as one rank tall, as wide as its own
|
|
496
|
+
* name, with three zones across it: an icon on the left, the name and its
|
|
497
|
+
* caption centred in what is left, and a column of actions down the right
|
|
498
|
+
* edge. This is that drawing, and the numbers are that chart's own, taken up
|
|
499
|
+
* by the ratio between its 10px name and this package's smallest name step so
|
|
500
|
+
* every proportion across the node is the one it was drawn at.
|
|
501
|
+
*
|
|
502
|
+
* THE ZONES ARE FIXED AND THE NAME TAKES WHAT IS LEFT. The icon zone and the
|
|
503
|
+
* actions column are the same width on every node in the chart, so the names
|
|
504
|
+
* down a rank start and end on the same two lines however long they are; the
|
|
505
|
+
* actions column keeps its width whether or not its controls are drawn, for
|
|
506
|
+
* the reason the `card` appearance's strip does, and the name is centred in
|
|
507
|
+
* the middle zone rather than in the card, which would slide it left under an
|
|
508
|
+
* actions column nobody is pointing at.
|
|
509
|
+
* ------------------------------------------------------------------------- */
|
|
510
|
+
|
|
511
|
+
/*
|
|
512
|
+
* THE CONSOLE CHART'S OWN SPACING, which is a rank-and-order layout's: 50
|
|
513
|
+
* units between neighbouring nodes on a rank, and ranks a whole node's height
|
|
514
|
+
* apart, with a margin around the chart. The steps nearest those on this
|
|
515
|
+
* scale, so density scales them with everything else:
|
|
516
|
+
*
|
|
517
|
+
* - ACROSS: `--spacing-9`, 48px against the console chart's 50. The two are
|
|
518
|
+
* directly comparable, because there a node's box IS its drawn width.
|
|
519
|
+
* - DOWN: `--spacing-11` PLUS the strip that hangs under a node, which is
|
|
520
|
+
* where the add control lives. NOT comparable to that chart's 70, which is
|
|
521
|
+
* the gap between boxes 30 taller than the node drawn in them: half of that
|
|
522
|
+
* padding is the add control and the other half is empty chart. What is
|
|
523
|
+
* comparable is the gap a reader sees, from a node's bottom edge to its
|
|
524
|
+
* children's tops: 100px there and 104 here, of which the first 24 hold the
|
|
525
|
+
* add control, exactly as the first 15 of that chart's 100 hold its own. The
|
|
526
|
+
* strip used to be INSIDE the card and the gap was `--spacing-11` alone; the
|
|
527
|
+
* drawn distance is the same number either way, and the room simply moved
|
|
528
|
+
* from the card's box into the gap with the control that needs it.
|
|
529
|
+
* - AROUND: `--spacing-8`, 40px against 36, and deliberately the step above
|
|
530
|
+
* rather than below: the canvas CLIPS, and the outermost node's halo and
|
|
531
|
+
* focus ring have to clear the frame.
|
|
532
|
+
*/
|
|
533
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__gap {
|
|
534
|
+
width: var(--spacing-9);
|
|
535
|
+
height: calc(var(--spacing-11) + var(--size-target-min));
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__margin {
|
|
539
|
+
width: var(--spacing-8);
|
|
540
|
+
height: var(--spacing-8);
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
/*
|
|
544
|
+
* AS WIDE AS THE NAME, between a floor and a ceiling. The floor is what the
|
|
545
|
+
* three zones need before a name is squeezed into nothing; the ceiling is
|
|
546
|
+
* where a name stops being read and starts being scanned, and a name past it
|
|
547
|
+
* truncates. A chart of equal cards is the `card` appearance's decision and
|
|
548
|
+
* this is the other one: a node here says what it is by its size as well as
|
|
549
|
+
* its words, and forty of them at one width is a wall.
|
|
550
|
+
*/
|
|
551
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__card {
|
|
552
|
+
width: max-content;
|
|
553
|
+
min-width: var(--crewlet-tree-canvas-node-min-width, 9.5rem);
|
|
554
|
+
max-width: var(--crewlet-tree-canvas-node-max-width, 16.5rem);
|
|
555
|
+
/*
|
|
556
|
+
* AND OPAQUE, EVERY ONE OF THEM. The branches are drawn UNDER the cards, and
|
|
557
|
+
* the neutral surface step is translucent wherever no theme is loaded, so a
|
|
558
|
+
* node with no tone had the connectors of the rank above running through its
|
|
559
|
+
* own face and through its name. A toned card already went down as the
|
|
560
|
+
* page's ground plus its tint for exactly this reason; here the same pair
|
|
561
|
+
* covers the neutral node too, with the card's own step standing in for the
|
|
562
|
+
* tint, so one declaration answers for both and a node is the same grey
|
|
563
|
+
* wherever the chart is panned to. The console chart lays an opaque
|
|
564
|
+
* rectangle under every card and says so: it is what stops the wires
|
|
565
|
+
* showing through.
|
|
566
|
+
*/
|
|
567
|
+
background-color: var(--color-surface-background);
|
|
568
|
+
background-image: linear-gradient(
|
|
569
|
+
var(--crewlet-tree-canvas-card-fill, var(--color-surface-subtle)),
|
|
570
|
+
var(--crewlet-tree-canvas-card-fill, var(--color-surface-subtle))
|
|
571
|
+
);
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/*
|
|
575
|
+
* ONE RANK TALL, AND NEVER SHORTER THAN THE COLUMN BESIDE IT. The rank is a
|
|
576
|
+
* row step, which density scales with everything else; the floor is two
|
|
577
|
+
* pointer targets, because the actions column splits this height into two
|
|
578
|
+
* cells and a cell under 24px is a control a finger cannot reliably hit. At
|
|
579
|
+
* compact density the row step alone is 39px, so the floor is what holds, and
|
|
580
|
+
* the node is a little less dense than the rest of the page. That is the cost
|
|
581
|
+
* of the target floor and it is paid here rather than by the controls.
|
|
582
|
+
*/
|
|
583
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__card [role='treeitem'] {
|
|
584
|
+
flex-direction: row;
|
|
585
|
+
align-items: center;
|
|
586
|
+
gap: 0;
|
|
587
|
+
/* The actions column's room, kept on every node whether it is drawn or not. */
|
|
588
|
+
padding: 0 max(var(--size-control-sm), var(--size-target-min)) 0 0;
|
|
589
|
+
min-height: max(var(--size-row-lg), calc(2 * var(--size-target-min)));
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
/*
|
|
593
|
+
* THE ACTIONS ARE A COLUMN DOWN THE RIGHT EDGE, in the room the node already
|
|
594
|
+
* keeps for them: a hairline separating them from the name, and each control
|
|
595
|
+
* taking an equal share of the node's height with a hairline between. No
|
|
596
|
+
* ground of its own, because it covers nothing, and a ground would be a patch
|
|
597
|
+
* of the neutral surface over a toned node.
|
|
598
|
+
*/
|
|
599
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__actions {
|
|
600
|
+
top: 0;
|
|
601
|
+
/*
|
|
602
|
+
* THE COLUMN IS THE NAME'S ROW, NOT THE WHOLE NODE. A node can carry a strip
|
|
603
|
+
* along its bottom edge saying something about itself (a unit's lead), and a
|
|
604
|
+
* column run to the node's full height would cut that strip short and put a
|
|
605
|
+
* control beside a fact rather than beside the name it acts on.
|
|
606
|
+
*/
|
|
607
|
+
bottom: auto;
|
|
608
|
+
height: max(var(--size-row-lg), calc(2 * var(--size-target-min)));
|
|
609
|
+
right: 0;
|
|
610
|
+
flex-direction: column;
|
|
611
|
+
/* A control step, floored at a pointer target: the small step is 28px and
|
|
612
|
+
compact density takes it to 23, which is a cell a finger misses. */
|
|
613
|
+
width: max(var(--size-control-sm), var(--size-target-min));
|
|
614
|
+
gap: 0;
|
|
615
|
+
padding: 0;
|
|
616
|
+
background: none;
|
|
617
|
+
border-radius: 0;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
/*
|
|
621
|
+
* THE RULE BESIDE THE NAME IS INSET, top and bottom, like every hairline the
|
|
622
|
+
* console chart draws inside a node (`y1 = 4, y2 = NODE_H - 4` on a 38px
|
|
623
|
+
* node). Run edge to edge it turned the node into a table of cells; floating
|
|
624
|
+
* clear of both edges it reads as a card with a column beside the name, which
|
|
625
|
+
* is what that chart draws.
|
|
626
|
+
*
|
|
627
|
+
* AND IT TAKES NO WIDTH FROM THE CELLS. Drawn as a border it would be inside
|
|
628
|
+
* the column's own box, so each control would be a pixel narrower than the
|
|
629
|
+
* target floor the column is sized to; drawn outside the box, on the boundary,
|
|
630
|
+
* the cells keep the whole width. That was a `box-shadow` before, which cannot
|
|
631
|
+
* be inset along its own length.
|
|
632
|
+
*/
|
|
633
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__actions::before {
|
|
634
|
+
content: '';
|
|
635
|
+
position: absolute;
|
|
636
|
+
top: var(--spacing-1);
|
|
637
|
+
bottom: var(--spacing-1);
|
|
638
|
+
left: -1px;
|
|
639
|
+
width: 1px;
|
|
640
|
+
background: var(--color-border-default);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__actions > * {
|
|
644
|
+
position: relative;
|
|
645
|
+
flex: 1;
|
|
646
|
+
width: 100%;
|
|
647
|
+
min-height: var(--size-target-min);
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
/* The divider between two cells, inset each side for the reason the column's
|
|
651
|
+
own rule is: that chart draws it from `ACT_X + 4` to `nw - 4`. */
|
|
652
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__actions > * + *::before {
|
|
653
|
+
content: '';
|
|
654
|
+
position: absolute;
|
|
655
|
+
top: 0;
|
|
656
|
+
right: var(--spacing-1);
|
|
657
|
+
left: var(--spacing-1);
|
|
658
|
+
height: 1px;
|
|
659
|
+
background: var(--color-border-default);
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
/*
|
|
663
|
+
* WHAT HANGS UNDER A NODE HANGS BELOW IT: on the branch its children come off,
|
|
664
|
+
* outside the card's own rounded border, which is where the console chart puts
|
|
665
|
+
* it (`pillY = fullH + 3`). Inside the card it was a band of the card's face
|
|
666
|
+
* with a hole punched in it, the branch started at the card's bottom edge 13px
|
|
667
|
+
* BELOW the mark and never reached it, and the disc's ground was the page's
|
|
668
|
+
* over the card's, which is two greys where there should be one line broken by
|
|
669
|
+
* one disc.
|
|
670
|
+
*
|
|
671
|
+
* OUT OF THE FLOW, so the card's MEASURED box is the node itself and nothing
|
|
672
|
+
* here can ever relay the chart: a hover changes an opacity and no size. The
|
|
673
|
+
* room the strip needs is in the rank gap instead, which is a constant of the
|
|
674
|
+
* layout (see the gap probe above), so it is reserved in the only place that
|
|
675
|
+
* cannot move under a pointer. `top: 100%` is the card's padding box, one
|
|
676
|
+
* hairline above its border's outside edge, which puts the disc's centre 11px
|
|
677
|
+
* below the card exactly as that chart's 9px is at its own scale.
|
|
678
|
+
*
|
|
679
|
+
* THE STRIP ITSELF IS DRAWN AT REST HERE, which is the one place this
|
|
680
|
+
* appearance parts company with the `card` one, and it is what the console
|
|
681
|
+
* chart does: the mark that adds a child is on every branch of a resting
|
|
682
|
+
* chart, at a third of a node's height and at a little over half ink, so it
|
|
683
|
+
* says a child can go here without being a control anybody has to look past.
|
|
684
|
+
* `AddPill` draws itself that way and brightens when it is reached.
|
|
685
|
+
*
|
|
686
|
+
* WHAT IS IN THE STRIP AND IS NOT THAT is still quiet, because it is a
|
|
687
|
+
* CONTROL rather than an affordance, and a control on every branch of a chart
|
|
688
|
+
* of a hundred nodes is a hundred buttons drawn over a picture of an
|
|
689
|
+
* organization. It appears the way the actions strip does.
|
|
690
|
+
*
|
|
691
|
+
* THREE COLUMNS, AND THE MIDDLE ONE IS THE ADD'S ALONE. The console chart
|
|
692
|
+
* centres the add on `nw / 2` and has nothing else on the branch at all, and
|
|
693
|
+
* that is the shape here too: the disclosure a collapsing chart needs is drawn
|
|
694
|
+
* on the card's LEADING EDGE instead (below), where it can never be under the
|
|
695
|
+
* one control this strip is for.
|
|
696
|
+
*
|
|
697
|
+
* SO THE MIDDLE TRACK IS THE PILL'S WIDEST FOOTPRINT. The pill OPENS over its
|
|
698
|
+
* own mark, out of the flow and centred on it, at one pointer target per
|
|
699
|
+
* choice; the room a CLOSED pill asks for is one target, so anything placed
|
|
700
|
+
* beside it sat exactly where the second choice would land, and a reader who
|
|
701
|
+
* reached for it pressed "add a unit" instead. The reservation is a floor on
|
|
702
|
+
* the pill's own box, at the widest pill `AddPill` takes (four choices), which
|
|
703
|
+
* the `auto` track then follows: nothing a caller puts in this strip can be
|
|
704
|
+
* covered by one, whatever it holds. The mark stays centred in that box, so
|
|
705
|
+
* the add lands on the node's axis whether or not anything is beside it.
|
|
706
|
+
*/
|
|
707
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__under {
|
|
708
|
+
position: absolute;
|
|
709
|
+
top: 100%;
|
|
710
|
+
right: 0;
|
|
711
|
+
left: 0;
|
|
712
|
+
display: grid;
|
|
713
|
+
grid-template-columns: 1fr auto 1fr;
|
|
714
|
+
align-items: center;
|
|
715
|
+
gap: var(--spacing-1);
|
|
716
|
+
padding: 0;
|
|
717
|
+
min-height: var(--size-target-min);
|
|
718
|
+
opacity: 1;
|
|
719
|
+
pointer-events: auto;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__under > * {
|
|
723
|
+
grid-column: 1;
|
|
724
|
+
justify-self: end;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__under > .crewlet-add-pill {
|
|
728
|
+
grid-column: 2;
|
|
729
|
+
justify-self: center;
|
|
730
|
+
min-width: calc(4 * var(--size-target-min));
|
|
731
|
+
}
|
|
732
|
+
|
|
733
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__under > :not(.crewlet-add-pill) {
|
|
734
|
+
opacity: 0;
|
|
735
|
+
pointer-events: none;
|
|
736
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
.crewlet-tree-canvas--node
|
|
740
|
+
.crewlet-tree-canvas__card:hover
|
|
741
|
+
> .crewlet-tree-canvas__under
|
|
742
|
+
> :not(.crewlet-add-pill),
|
|
743
|
+
.crewlet-tree-canvas--node
|
|
744
|
+
.crewlet-tree-canvas__card:focus-within
|
|
745
|
+
> .crewlet-tree-canvas__under
|
|
746
|
+
> :not(.crewlet-add-pill),
|
|
747
|
+
.crewlet-tree-canvas--node
|
|
748
|
+
.crewlet-tree-canvas__card:has([aria-selected='true'])
|
|
749
|
+
> .crewlet-tree-canvas__under
|
|
750
|
+
> :not(.crewlet-add-pill) {
|
|
751
|
+
opacity: 1;
|
|
752
|
+
pointer-events: auto;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
/*
|
|
756
|
+
* THE DISCLOSURE, ON THE CARD'S LEADING EDGE.
|
|
757
|
+
*
|
|
758
|
+
* NOT ON THE BRANCH, which is the whole point. What hangs under a node is the
|
|
759
|
+
* control that ADDS a child, on the node's own axis, and the console chart has
|
|
760
|
+
* nothing else there because its chart cannot collapse at all. This one can,
|
|
761
|
+
* so it owes a reader a disclosure; drawn on the branch beside the add, the
|
|
762
|
+
* two were a pair fighting over one place, and an add pill splitting open
|
|
763
|
+
* covered the chevron a reader had just reached for.
|
|
764
|
+
*
|
|
765
|
+
* THE START OF THE ROW IS WHERE A HIERARCHY PUTS ONE. Every outline, file tree
|
|
766
|
+
* and nested table a reader has met opens and closes from the leading edge of
|
|
767
|
+
* the row, and this is that edge: the node's, rather than its children's line.
|
|
768
|
+
*
|
|
769
|
+
* STRADDLING THE BOUNDARY AND OUT OF THE FLOW, exactly as the add straddles
|
|
770
|
+
* the bottom one. A node that can be expanded is then the same width, the same
|
|
771
|
+
* height and in the same place as one that cannot, so nothing here can relay
|
|
772
|
+
* the chart; and the zones across a node stay the two the console chart draws,
|
|
773
|
+
* rather than becoming three with an empty one on every seat. It is centred on
|
|
774
|
+
* the node's FIRST RANK for the reason the actions column stops there: a node
|
|
775
|
+
* may carry a strip along its bottom edge stating a fact, and a control
|
|
776
|
+
* centred over the pair would sit beside the fact rather than beside the name.
|
|
777
|
+
*
|
|
778
|
+
* AND IT IS A SIBLING OF THE TREEITEM, never a child, which is what lets it be
|
|
779
|
+
* placed from here at all: the card is the positioned ancestor either way, and
|
|
780
|
+
* a tree's items hold nothing focusable. `OrgNodeDisclosure` is the element,
|
|
781
|
+
* and it hides itself the way the actions strip does.
|
|
782
|
+
*
|
|
783
|
+
* AND IT IS QUIET UNTIL THE CARD IS REACHED, with the actions column and the
|
|
784
|
+
* lead's own clear: a chart of a hundred nodes is not a hundred chevrons drawn
|
|
785
|
+
* over a picture of an organization. Revealed by FOCUS as well as by a
|
|
786
|
+
* pointer, because a control a pointer alone reveals is a control a keyboard
|
|
787
|
+
* reader is shown nothing of.
|
|
788
|
+
*/
|
|
789
|
+
.crewlet-tree-canvas--node .crewlet-org-node__leading {
|
|
790
|
+
position: absolute;
|
|
791
|
+
top: calc(max(var(--size-row-lg), 2 * var(--size-target-min)) / 2);
|
|
792
|
+
left: 0;
|
|
793
|
+
z-index: var(--z-index-raised);
|
|
794
|
+
transform: translate(-50%, -50%);
|
|
795
|
+
opacity: 0;
|
|
796
|
+
pointer-events: none;
|
|
797
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__card:hover .crewlet-org-node__leading,
|
|
801
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__card:focus-within .crewlet-org-node__leading,
|
|
802
|
+
.crewlet-tree-canvas--node
|
|
803
|
+
.crewlet-tree-canvas__card:has([aria-selected='true'])
|
|
804
|
+
.crewlet-org-node__leading {
|
|
805
|
+
opacity: 1;
|
|
806
|
+
pointer-events: auto;
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
/*
|
|
810
|
+
* A CONTROL DRAWN ON A FACT the node states is quiet with the rest of them.
|
|
811
|
+
* The lead along a unit's bottom edge stays drawn, because who leads a unit is
|
|
812
|
+
* a fact about the organization; the control that CLEARS it is a tool, so it
|
|
813
|
+
* arrives with the actions column and the expander and leaves with them. Keyed
|
|
814
|
+
* on the card, and on focus as well as hover, because a control revealed by a
|
|
815
|
+
* pointer alone is a control a keyboard reader is shown nothing of.
|
|
816
|
+
*/
|
|
817
|
+
.crewlet-tree-canvas--node .crewlet-org-node-lead__clear {
|
|
818
|
+
opacity: 0;
|
|
819
|
+
pointer-events: none;
|
|
820
|
+
transition: opacity var(--motion-duration-fast) var(--motion-easing-default);
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__card:hover .crewlet-org-node-lead__clear,
|
|
824
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__card:focus-within .crewlet-org-node-lead__clear,
|
|
825
|
+
.crewlet-tree-canvas--node
|
|
826
|
+
.crewlet-tree-canvas__card:has([aria-selected='true'])
|
|
827
|
+
.crewlet-org-node-lead__clear {
|
|
828
|
+
opacity: 1;
|
|
829
|
+
pointer-events: auto;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
/*
|
|
833
|
+
* THE BRANCHES ARE HEAVIER HERE. A node is half the height of a card, so a
|
|
834
|
+
* hairline between two ranks of them is a thread; this is the console chart's
|
|
835
|
+
* own weight, at the same ratio to a node's height.
|
|
836
|
+
*/
|
|
837
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__links path {
|
|
838
|
+
stroke-width: 3;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
/*
|
|
842
|
+
* THE CONTROLS IN A NODE'S COLUMN fill their cell rather than sitting in it:
|
|
843
|
+
* the column is two hairline-separated halves of the node's height, and a
|
|
844
|
+
* control centred in one with its own rounded square inside would be a button
|
|
845
|
+
* drawn inside a button. Their targets are the cells, which are the node's
|
|
846
|
+
* full height between them and the column's own width across.
|
|
847
|
+
*/
|
|
848
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__actions .crewlet-menu-anchor {
|
|
849
|
+
display: flex;
|
|
850
|
+
flex: 1;
|
|
851
|
+
width: 100%;
|
|
852
|
+
min-height: 0;
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__actions .crewlet-icon-btn {
|
|
856
|
+
width: 100%;
|
|
857
|
+
height: 100%;
|
|
858
|
+
border-radius: 0;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
/*
|
|
862
|
+
* A CONTROL ON AN EDGE IS A DISC: a ground of its own, so the line it sits on,
|
|
863
|
+
* or the card it straddles, stops at its edge rather than running through it.
|
|
864
|
+
*
|
|
865
|
+
* ONE RULE FOR BOTH EDGES, because it is one drawing: the disclosure on the
|
|
866
|
+
* leading boundary and whatever else a caller hangs on the branch are the same
|
|
867
|
+
* disc at the same step, and written twice they were the pair a reader met as
|
|
868
|
+
* two different controls. The ADD is `AddPill` and draws its own, quieter
|
|
869
|
+
* disc, on this same ground.
|
|
870
|
+
*
|
|
871
|
+
* DRAWN AT THE TARGET'S SIZE here, where the add is drawn smaller than its
|
|
872
|
+
* target: these are only ever seen on a node the pointer or focus has already
|
|
873
|
+
* reached, so there is no resting chart for them to be quiet on.
|
|
874
|
+
*/
|
|
875
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__under .crewlet-icon-btn,
|
|
876
|
+
.crewlet-tree-canvas--node .crewlet-org-node__leading .crewlet-icon-btn {
|
|
877
|
+
width: var(--size-target-min);
|
|
878
|
+
height: var(--size-target-min);
|
|
879
|
+
min-width: var(--size-target-min);
|
|
880
|
+
min-height: var(--size-target-min);
|
|
881
|
+
color: var(--color-brand-accent-ink);
|
|
882
|
+
/* The NODE's own ground, which is what `AddPill` masks with too: one grey
|
|
883
|
+
for every disc a node carries, rather than the page's on one edge and the
|
|
884
|
+
card's on the other. */
|
|
885
|
+
background-color: var(--color-surface-background);
|
|
886
|
+
background-image: linear-gradient(var(--color-surface-subtle), var(--color-surface-subtle));
|
|
887
|
+
border: 1px solid var(--color-border-default);
|
|
888
|
+
border-radius: var(--radius-circle);
|
|
889
|
+
}
|
|
890
|
+
|
|
891
|
+
.crewlet-tree-canvas--node .crewlet-tree-canvas__under .crewlet-icon-btn:hover,
|
|
892
|
+
.crewlet-tree-canvas--node .crewlet-org-node__leading .crewlet-icon-btn:hover {
|
|
893
|
+
border-color: var(--color-brand-accent);
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
/*
|
|
897
|
+
* A CONTROL THE KEYBOARD OPENS AND THE POINTER REACHES ANOTHER WAY.
|
|
898
|
+
*
|
|
899
|
+
* The ContextMenu key opens a node's own menu, and a menu has to be anchored
|
|
900
|
+
* to something on the node to be placed at all; a chart whose visible controls
|
|
901
|
+
* are two named buttons still needs that anchor. Marked, it takes no cell of
|
|
902
|
+
* the column and is drawn nowhere, so the column is the controls a reader can
|
|
903
|
+
* see and nothing else. It stays in the DOM and keeps its place: an anchor
|
|
904
|
+
* removed from the flow entirely places its menu at the corner of the page.
|
|
905
|
+
*/
|
|
906
|
+
.crewlet-tree-canvas__actions > [data-keyboard-only] {
|
|
907
|
+
position: absolute;
|
|
908
|
+
inset: 0;
|
|
909
|
+
flex: none;
|
|
910
|
+
border: 0;
|
|
911
|
+
opacity: 0;
|
|
912
|
+
pointer-events: none;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
/* And it is not a cell, so it takes no divider either: the hairline between
|
|
916
|
+
two cells is drawn by the second one's own ::before. */
|
|
917
|
+
.crewlet-tree-canvas__actions > [data-keyboard-only]::before {
|
|
918
|
+
content: none;
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
/* ---------------------------------------------------------------------------
|
|
922
|
+
* A NODE BEING COMPOSED: the ghost, and the form drawn inside it.
|
|
923
|
+
*
|
|
924
|
+
* WHAT IT SAYS. A chart that asked for a child's name in a dialog over itself
|
|
925
|
+
* said everything about the child and nothing about WHERE it was going, which
|
|
926
|
+
* is the one question a chart answers. The ghost is that answer drawn: the
|
|
927
|
+
* chart makes room in the rank the new node will land in, the branch reaches
|
|
928
|
+
* the place it will hang from, and the form is IN that place. The console
|
|
929
|
+
* chart this package is drawn to match does exactly this, and every step below
|
|
930
|
+
* is its step.
|
|
931
|
+
*
|
|
932
|
+
* IT IS THE ONLY DASHED THING ON THE CHART THAT IS NOT A HUMAN SEAT, and the
|
|
933
|
+
* two never collide: `cardOutline` marks a node of the data and this marks a
|
|
934
|
+
* node that is not one yet, so no card can carry both. What tells them apart
|
|
935
|
+
* is the hue and the breath: a human seat's edge is the chart's own boundary
|
|
936
|
+
* step and does not move, and this one is the accent, with a ring outside it
|
|
937
|
+
* that pulses for as long as the form is open.
|
|
938
|
+
*
|
|
939
|
+
* ITS GROUND IS EVERY OTHER CARD'S. The ghost holds a real form with real
|
|
940
|
+
* labels, helps and refusals in it, so it is NOT tinted: every contrast
|
|
941
|
+
* measured for that form on a panel holds here unchanged, and what says the
|
|
942
|
+
* card is a proposal is its boundary rather than its face. Opaque for the
|
|
943
|
+
* reason a toned card is: the neutral surface step is translucent and the
|
|
944
|
+
* branches are drawn underneath, so the page's ground goes down first.
|
|
945
|
+
* ------------------------------------------------------------------------- */
|
|
946
|
+
|
|
947
|
+
/*
|
|
948
|
+
* WIDER THAN A NODE, because a node is a name and this is a form. Qualified
|
|
949
|
+
* with the chart's own class so it outranks the `node` appearance's width
|
|
950
|
+
* rule, which is two classes: written as one class it lost on specificity and
|
|
951
|
+
* the ghost was drawn at a name's width with the form spilling out of it.
|
|
952
|
+
*/
|
|
953
|
+
.crewlet-tree-canvas .crewlet-tree-canvas__card--composing {
|
|
954
|
+
width: var(--crewlet-tree-canvas-compose-width, 20rem);
|
|
955
|
+
min-width: 0;
|
|
956
|
+
max-width: none;
|
|
957
|
+
padding: var(--spacing-4);
|
|
958
|
+
gap: var(--spacing-3);
|
|
959
|
+
background-color: var(--color-surface-background);
|
|
960
|
+
background-image: linear-gradient(var(--color-surface-subtle), var(--color-surface-subtle));
|
|
961
|
+
border: 1px dashed var(--color-brand-accent-soft-strong);
|
|
962
|
+
box-shadow: var(--shadow-md);
|
|
963
|
+
animation: crewlet-tree-canvas-ghost-card var(--motion-duration-slow) var(--motion-easing-emphasized)
|
|
964
|
+
var(--motion-duration-base) both;
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
/*
|
|
968
|
+
* THE RING THAT BREATHES, outside the boundary, exactly where a toned card's
|
|
969
|
+
* halo is: it is what says the card is waiting for the reader from the far
|
|
970
|
+
* end of a chart, where a dashed hairline is a few pixels. It is decoration
|
|
971
|
+
* over the gap the next card's controls reach into, so it takes no pointer.
|
|
972
|
+
*/
|
|
973
|
+
.crewlet-tree-canvas__card--composing::after {
|
|
974
|
+
content: '';
|
|
975
|
+
position: absolute;
|
|
976
|
+
inset: -3px;
|
|
977
|
+
border: 1px solid var(--color-brand-accent-soft-strong);
|
|
978
|
+
border-radius: var(--radius-lg);
|
|
979
|
+
pointer-events: none;
|
|
980
|
+
animation:
|
|
981
|
+
crewlet-tree-canvas-ghost-glow var(--motion-duration-slow) var(--motion-easing-default)
|
|
982
|
+
var(--motion-duration-moderate) both,
|
|
983
|
+
/* A BREATH RATHER THAN A TRANSITION, so it is a multiple of the scale's
|
|
984
|
+
longest step (1.8s) rather than a number off it: the scale tops out at
|
|
985
|
+
one UI transition, and a pulse held there would strobe. The console
|
|
986
|
+
chart's own is 2s. It starts where the fade in ends. */
|
|
987
|
+
crewlet-tree-canvas-ghost-pulse calc(var(--motion-duration-slow) * 6)
|
|
988
|
+
var(--motion-easing-in-out)
|
|
989
|
+
calc(var(--motion-duration-moderate) + var(--motion-duration-slow)) infinite;
|
|
990
|
+
}
|
|
991
|
+
|
|
992
|
+
/*
|
|
993
|
+
* THE FORM ARRIVES LAST, and from slightly above and behind: the wire, then
|
|
994
|
+
* the card, then the glow, then what is inside it, which is the order a reader
|
|
995
|
+
* follows from the node they pressed to the thing they have to fill in. The
|
|
996
|
+
* caller's own element, whatever it drew, because the ghost's contents are
|
|
997
|
+
* entirely the caller's.
|
|
998
|
+
*/
|
|
999
|
+
.crewlet-tree-canvas__card--composing > * {
|
|
1000
|
+
animation: crewlet-tree-canvas-ghost-form var(--motion-duration-slow)
|
|
1001
|
+
var(--motion-easing-emphasized) var(--motion-duration-slow) both;
|
|
1002
|
+
}
|
|
1003
|
+
|
|
1004
|
+
/*
|
|
1005
|
+
* THE BRANCH INTO THE GHOST, drawn first and dashed like the card it reaches.
|
|
1006
|
+
* Same path, same arithmetic and same rank as every other branch: what is
|
|
1007
|
+
* being proposed is drawn in the chart's own language, so a reader sees where
|
|
1008
|
+
* it will hang rather than a decoration that happens to be nearby.
|
|
1009
|
+
*/
|
|
1010
|
+
.crewlet-tree-canvas__links path[data-composing='true'] {
|
|
1011
|
+
stroke: var(--color-brand-accent-soft-strong);
|
|
1012
|
+
stroke-width: 2;
|
|
1013
|
+
stroke-dasharray: 6 4;
|
|
1014
|
+
animation: crewlet-tree-canvas-ghost-wire var(--motion-duration-slow)
|
|
1015
|
+
var(--motion-easing-emphasized) both;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
@keyframes crewlet-tree-canvas-ghost-wire {
|
|
1019
|
+
from {
|
|
1020
|
+
opacity: 0;
|
|
1021
|
+
}
|
|
1022
|
+
|
|
1023
|
+
to {
|
|
1024
|
+
opacity: 1;
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
|
|
1028
|
+
@keyframes crewlet-tree-canvas-ghost-card {
|
|
1029
|
+
from {
|
|
1030
|
+
opacity: 0;
|
|
1031
|
+
}
|
|
1032
|
+
|
|
1033
|
+
to {
|
|
1034
|
+
opacity: 1;
|
|
1035
|
+
}
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
@keyframes crewlet-tree-canvas-ghost-glow {
|
|
1039
|
+
from {
|
|
1040
|
+
opacity: 0;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
to {
|
|
1044
|
+
opacity: 1;
|
|
1045
|
+
}
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
@keyframes crewlet-tree-canvas-ghost-pulse {
|
|
1049
|
+
0%,
|
|
1050
|
+
100% {
|
|
1051
|
+
opacity: 0.5;
|
|
1052
|
+
}
|
|
1053
|
+
|
|
1054
|
+
50% {
|
|
1055
|
+
opacity: 1;
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
@keyframes crewlet-tree-canvas-ghost-form {
|
|
1060
|
+
from {
|
|
1061
|
+
opacity: 0;
|
|
1062
|
+
transform: scale(0.9) translateY(-8px);
|
|
1063
|
+
}
|
|
1064
|
+
|
|
1065
|
+
to {
|
|
1066
|
+
opacity: 1;
|
|
1067
|
+
transform: scale(1) translateY(0);
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
/*
|
|
1072
|
+
* A READER WHO ASKED FOR LESS gets the ghost DRAWN, in place, at once. Nothing
|
|
1073
|
+
* about the add is behind the motion: the chart still makes room, the branch
|
|
1074
|
+
* is still dashed, the view still moves onto it and focus still lands in the
|
|
1075
|
+
* form. Only the arrival, the breath and the rise are dropped, and the ring
|
|
1076
|
+
* stays at the bright end of the pulse rather than wherever it was stopped.
|
|
1077
|
+
*/
|
|
1078
|
+
@media (prefers-reduced-motion: reduce) {
|
|
1079
|
+
/* NOT `transform` on the card itself: its transform is where the layout
|
|
1080
|
+
put it, written as an inline style, and a rule here saying `none` would
|
|
1081
|
+
be a rule that only ever fires when something else drops that style. */
|
|
1082
|
+
.crewlet-tree-canvas__card--composing,
|
|
1083
|
+
.crewlet-tree-canvas__links path[data-composing='true'] {
|
|
1084
|
+
opacity: 1;
|
|
1085
|
+
animation: none;
|
|
1086
|
+
}
|
|
1087
|
+
|
|
1088
|
+
.crewlet-tree-canvas__card--composing > * {
|
|
1089
|
+
opacity: 1;
|
|
1090
|
+
transform: none;
|
|
1091
|
+
animation: none;
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
.crewlet-tree-canvas__card--composing::after {
|
|
1095
|
+
opacity: 1;
|
|
1096
|
+
animation: none;
|
|
1097
|
+
}
|
|
1098
|
+
}
|