@crewlethq/ui 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1714 -14
- package/dist/Accordion/Accordion.d.ts +54 -0
- package/dist/Accordion/index.d.ts +4 -0
- package/dist/Accordion/index.js +6 -0
- package/dist/Accordion-ZI2WLD5C.css +87 -0
- package/dist/AddPill/AddPill.d.ts +114 -0
- package/dist/AddPill/index.d.ts +3 -0
- package/dist/AddPill/index.js +3 -0
- package/dist/AddPill-DFWXYLIQ.css +434 -0
- package/dist/Announcer/Announcer.d.ts +15 -0
- package/dist/Announcer/index.d.ts +2 -0
- package/dist/Announcer/index.js +3 -0
- package/dist/AppShell/AppShell.d.ts +193 -0
- package/dist/AppShell/index.d.ts +3 -0
- package/dist/AppShell/index.js +6 -0
- package/dist/AppShell-NVE6LHNI.css +395 -0
- package/dist/Avatar/Avatar.d.ts +104 -0
- package/dist/Avatar/index.d.ts +3 -0
- package/dist/Avatar/index.js +2 -0
- package/dist/Avatar-P2KRQM2B.css +156 -0
- package/dist/BrandLockup/BrandLockup.d.ts +41 -0
- package/dist/BrandLockup/index.d.ts +3 -0
- package/dist/BrandLockup/index.js +2 -0
- package/dist/BrandLockup-6ISDEHPJ.css +108 -0
- package/dist/Button/Button.d.ts +88 -0
- package/dist/Button/index.d.ts +3 -0
- package/dist/Button/index.js +3 -0
- package/dist/Button-D4J6B4MA.css +302 -0
- package/dist/CalendarGrid/CalendarGrid.d.ts +87 -0
- package/dist/CalendarGrid/index.d.ts +3 -0
- package/dist/CalendarGrid/index.js +2 -0
- package/dist/CalendarGrid-V6TQ5QKS.css +128 -0
- package/dist/Callout/Callout.d.ts +47 -0
- package/dist/Callout/index.d.ts +3 -0
- package/dist/Callout/index.js +2 -0
- package/dist/Callout-S7QDWHDL.css +111 -0
- package/dist/Canvas/Canvas.d.ts +234 -0
- package/dist/Canvas/geometry.d.ts +249 -0
- package/dist/Canvas/index.d.ts +5 -0
- package/dist/Canvas/index.js +8 -0
- package/dist/Canvas/layerNode.d.ts +20 -0
- package/dist/Canvas-Q6JETCWR.css +315 -0
- package/dist/Card/Card.d.ts +164 -0
- package/dist/Card/headerSlot.d.ts +65 -0
- package/dist/Card/index.d.ts +5 -0
- package/dist/Card/index.js +6 -0
- package/dist/Card-RLR254LD.css +450 -0
- package/dist/Charts/ActivityStrip.d.ts +45 -0
- package/dist/Charts/BarList.d.ts +51 -0
- package/dist/Charts/Legend.d.ts +32 -0
- package/dist/Charts/StackedBar.d.ts +38 -0
- package/dist/Charts/TimeSeries.d.ts +92 -0
- package/dist/Charts/dataColor.d.ts +20 -0
- package/dist/Charts/index.d.ts +12 -0
- package/dist/Charts/index.js +3 -0
- package/dist/Charts-D7G2BSXH.css +277 -0
- package/dist/Checkbox/Checkbox.d.ts +45 -0
- package/dist/Checkbox/index.d.ts +3 -0
- package/dist/Checkbox/index.js +2 -0
- package/dist/Checkbox-VGW26YLQ.css +111 -0
- package/dist/CodeBlock/CodeBlock.d.ts +119 -0
- package/dist/CodeBlock/index.d.ts +3 -0
- package/dist/CodeBlock/index.js +7 -0
- package/dist/CodeBlock-GYNJ2HI6.css +188 -0
- package/dist/Combobox/Combobox.d.ts +89 -0
- package/dist/Combobox/index.d.ts +3 -0
- package/dist/Combobox/index.js +8 -0
- package/dist/Combobox-4FUVYIE7.css +80 -0
- package/dist/CommandPalette/CommandPalette.d.ts +77 -0
- package/dist/CommandPalette/index.d.ts +3 -0
- package/dist/CommandPalette/index.js +11 -0
- package/dist/CommandPalette-CSJDUCQA.css +115 -0
- package/dist/Container/Container.d.ts +17 -0
- package/dist/Container/index.d.ts +3 -0
- package/dist/Container/index.js +2 -0
- package/dist/Container-3TSKMGNI.css +52 -0
- package/dist/Copyable/CopyButton.d.ts +64 -0
- package/dist/Copyable/Copyable.d.ts +42 -0
- package/dist/Copyable/index.d.ts +5 -0
- package/dist/Copyable/index.js +6 -0
- package/dist/Copyable-5PNRFOLS.css +125 -0
- package/dist/Count/Count.d.ts +24 -0
- package/dist/Count/index.d.ts +3 -0
- package/dist/Count/index.js +3 -0
- package/dist/Count-ZVCJ6VPD.css +20 -0
- package/dist/DataTable/CopyableCell.d.ts +12 -0
- package/dist/DataTable/DataTable.d.ts +615 -0
- package/dist/DataTable/RowActionsMenu.d.ts +7 -0
- package/dist/DataTable/index.d.ts +7 -0
- package/dist/DataTable/index.js +14 -0
- package/dist/DataTable-ITNACQ2X.css +2020 -0
- package/dist/DataView/DataView.d.ts +109 -0
- package/dist/DataView/DataViewToolbar.d.ts +87 -0
- package/dist/DataView/FilterAxisBar.d.ts +103 -0
- package/dist/DataView/columns.d.ts +35 -0
- package/dist/DataView/filters.d.ts +184 -0
- package/dist/DataView/index.d.ts +11 -0
- package/dist/DataView/index.js +25 -0
- package/dist/DataView-256YF32J.css +441 -0
- package/dist/DateTimePicker/DateTimePicker.d.ts +91 -0
- package/dist/DateTimePicker/index.d.ts +3 -0
- package/dist/DateTimePicker/index.js +9 -0
- package/dist/DateTimePicker-22VNXRWC.css +199 -0
- package/dist/DescriptionList/DescriptionList.d.ts +36 -0
- package/dist/DescriptionList/index.d.ts +3 -0
- package/dist/DescriptionList/index.js +2 -0
- package/dist/DescriptionList-YYY3V3O6.css +59 -0
- package/dist/DiffList/DiffList.d.ts +47 -0
- package/dist/DiffList/index.d.ts +3 -0
- package/dist/DiffList/index.js +3 -0
- package/dist/DiffList-3EX64AAE.css +94 -0
- package/dist/Disclosure/Disclosure.d.ts +56 -0
- package/dist/Disclosure/anatomy.d.ts +43 -0
- package/dist/Disclosure/index.d.ts +5 -0
- package/dist/Disclosure/index.js +6 -0
- package/dist/Disclosure-VKBJJIZ7.css +176 -0
- package/dist/EmptyState/EmptyState.d.ts +39 -0
- package/dist/EmptyState/index.d.ts +3 -0
- package/dist/EmptyState/index.js +3 -0
- package/dist/EmptyState-C6HRBGT7.css +73 -0
- package/dist/EmptyValue/EmptyValue.d.ts +31 -0
- package/dist/EmptyValue/index.d.ts +3 -0
- package/dist/EmptyValue/index.js +3 -0
- package/dist/EmptyValue-4B6ODXHT.css +12 -0
- package/dist/EntityChip/EntityChip.d.ts +40 -0
- package/dist/EntityChip/index.d.ts +3 -0
- package/dist/EntityChip/index.js +3 -0
- package/dist/EntityChip-LUCPZBBG.css +64 -0
- package/dist/ErrorBoundary/ErrorBoundary.d.ts +58 -0
- package/dist/ErrorBoundary/index.d.ts +3 -0
- package/dist/ErrorBoundary/index.js +4 -0
- package/dist/ErrorBoundary-ME36CQTA.css +59 -0
- package/dist/Eyebrow/Eyebrow.d.ts +18 -0
- package/dist/Eyebrow/index.d.ts +3 -0
- package/dist/Eyebrow/index.js +2 -0
- package/dist/Eyebrow-5NREGHQH.css +46 -0
- package/dist/FilterChip/FilterChip.d.ts +100 -0
- package/dist/FilterChip/index.d.ts +3 -0
- package/dist/FilterChip/index.js +3 -0
- package/dist/FilterChip-GTGLLOXE.css +107 -0
- package/dist/Fullscreen/index.d.ts +2 -0
- package/dist/Fullscreen/index.js +1 -0
- package/dist/Fullscreen/useFullscreen.d.ts +32 -0
- package/dist/IconButton/IconButton.d.ts +45 -0
- package/dist/IconButton/index.d.ts +3 -0
- package/dist/IconButton/index.js +3 -0
- package/dist/IconButton-VQGNMJDI.css +158 -0
- package/dist/ImageUpload/ImageUpload.d.ts +37 -0
- package/dist/ImageUpload/index.d.ts +3 -0
- package/dist/ImageUpload/index.js +3 -0
- package/dist/ImageUpload-HKFIZR6D.css +193 -0
- package/dist/InlineCode/InlineCode.d.ts +37 -0
- package/dist/InlineCode/index.d.ts +3 -0
- package/dist/InlineCode/index.js +2 -0
- package/dist/InlineCode-6WSR5COL.css +65 -0
- package/dist/Input/FormField.d.ts +61 -0
- package/dist/Input/FormRow.d.ts +6 -0
- package/dist/Input/FormSection.d.ts +28 -0
- package/dist/Input/Input.d.ts +98 -0
- package/dist/Input/Label.d.ts +31 -0
- package/dist/Input/ReadOnlyField.d.ts +30 -0
- package/dist/Input/Textarea.d.ts +16 -0
- package/dist/Input/index.d.ts +15 -0
- package/dist/Input/index.js +5 -0
- package/dist/Input-2PU5CPKK.css +616 -0
- package/dist/Kbd/Kbd.d.ts +40 -0
- package/dist/Kbd/index.d.ts +3 -0
- package/dist/Kbd/index.js +3 -0
- package/dist/Kbd-W66MXQI5.css +61 -0
- package/dist/Layer/LayerHost.d.ts +23 -0
- package/dist/Layer/index.d.ts +7 -0
- package/dist/Layer/index.js +3 -0
- package/dist/Layer/place.d.ts +63 -0
- package/dist/Layer/stack.d.ts +159 -0
- package/dist/Layer-NAFSGCFA.css +23 -0
- package/dist/Layout/Layout.d.ts +104 -0
- package/dist/Layout/index.d.ts +3 -0
- package/dist/Layout/index.js +2 -0
- package/dist/Layout-2ZCV3IGF.css +171 -0
- package/dist/Link/Link.d.ts +45 -0
- package/dist/Link/index.d.ts +3 -0
- package/dist/Link/index.js +3 -0
- package/dist/Link-6BEFNMN2.css +80 -0
- package/dist/List/List.d.ts +73 -0
- package/dist/List/index.d.ts +3 -0
- package/dist/List/index.js +3 -0
- package/dist/List-XTHESXLR.css +161 -0
- package/dist/ListInput/ListInput.d.ts +68 -0
- package/dist/ListInput/index.d.ts +3 -0
- package/dist/ListInput/index.js +10 -0
- package/dist/ListInput-O7LJKOIG.css +147 -0
- package/dist/Listbox/index.d.ts +5 -0
- package/dist/Listbox/index.js +2 -0
- package/dist/Listbox/useListbox.d.ts +97 -0
- package/dist/Listbox/useOptionKeys.d.ts +64 -0
- package/dist/Listbox-X2DOTSQA.css +110 -0
- package/dist/Menu/Menu.d.ts +118 -0
- package/dist/Menu/index.d.ts +3 -0
- package/dist/Menu/index.js +7 -0
- package/dist/Menu-6DE7I66I.css +222 -0
- package/dist/Meter/Meter.d.ts +126 -0
- package/dist/Meter/index.d.ts +3 -0
- package/dist/Meter/index.js +3 -0
- package/dist/Meter-SKOOXQBC.css +87 -0
- package/dist/Modal/ConfirmModal.d.ts +74 -0
- package/dist/Modal/Modal.d.ts +154 -0
- package/dist/Modal/index.d.ts +5 -0
- package/dist/Modal/index.js +8 -0
- package/dist/Modal-XYQJ4BL6.css +484 -0
- package/dist/NewItemsNotice/NewItemsNotice.d.ts +28 -0
- package/dist/NewItemsNotice/index.d.ts +3 -0
- package/dist/NewItemsNotice/index.js +4 -0
- package/dist/NewItemsNotice-T4DSSPVV.css +60 -0
- package/dist/OrgLabel/OrgLabel.d.ts +117 -0
- package/dist/OrgLabel/index.d.ts +3 -0
- package/dist/OrgLabel/index.js +2 -0
- package/dist/OrgLabel-D7U6QJZD.css +293 -0
- package/dist/OrgNode/OrgNode.d.ts +103 -0
- package/dist/OrgNode/index.d.ts +3 -0
- package/dist/OrgNode/index.js +3 -0
- package/dist/OrgNode-BT7T2Q2X.css +214 -0
- package/dist/OrgTable/OrgTable.d.ts +113 -0
- package/dist/OrgTable/index.d.ts +3 -0
- package/dist/OrgTable/index.js +11 -0
- package/dist/OrgTable-VWMFC3TB.css +360 -0
- package/dist/PageHeader/PageHeader.d.ts +35 -0
- package/dist/PageHeader/index.d.ts +3 -0
- package/dist/PageHeader/index.js +3 -0
- package/dist/PageHeader-6EYWQXRE.css +88 -0
- package/dist/Popover/Popover.d.ts +91 -0
- package/dist/Popover/index.d.ts +3 -0
- package/dist/Popover/index.js +4 -0
- package/dist/Popover-WJGCF3ZQ.css +185 -0
- package/dist/PricingCard/PricingCard.d.ts +56 -0
- package/dist/PricingCard/index.d.ts +3 -0
- package/dist/PricingCard/index.js +4 -0
- package/dist/PricingCard-JFI7RYXP.css +278 -0
- package/dist/Prose/Prose.d.ts +33 -0
- package/dist/Prose/index.d.ts +3 -0
- package/dist/Prose/index.js +2 -0
- package/dist/Prose-BTXNFT2Q.css +99 -0
- package/dist/RelativeTime/RelativeTime.d.ts +31 -0
- package/dist/RelativeTime/clock.d.ts +9 -0
- package/dist/RelativeTime/format.d.ts +38 -0
- package/dist/RelativeTime/index.d.ts +6 -0
- package/dist/RelativeTime/index.js +4 -0
- package/dist/RelativeTime-EBAQPGO2.css +10 -0
- package/dist/SearchTrigger/SearchTrigger.d.ts +29 -0
- package/dist/SearchTrigger/index.d.ts +3 -0
- package/dist/SearchTrigger/index.js +2 -0
- package/dist/SearchTrigger-QXOYAUUY.css +79 -0
- package/dist/Section/Section.d.ts +41 -0
- package/dist/Section/index.d.ts +3 -0
- package/dist/Section/index.js +3 -0
- package/dist/Section-QRUPRIQ2.css +127 -0
- package/dist/SegmentedControl/SegmentedControl.d.ts +101 -0
- package/dist/SegmentedControl/index.d.ts +4 -0
- package/dist/SegmentedControl/index.js +5 -0
- package/dist/SegmentedControl-X3BI3XU4.css +68 -0
- package/dist/Select/Select.d.ts +153 -0
- package/dist/Select/index.d.ts +3 -0
- package/dist/Select/index.js +5 -0
- package/dist/Select-2X77FSWR.css +350 -0
- package/dist/Shortcut/index.d.ts +2 -0
- package/dist/Shortcut/index.js +4 -0
- package/dist/Shortcut/useShortcut.d.ts +68 -0
- package/dist/SidebarNav/SidebarNav.d.ts +117 -0
- package/dist/SidebarNav/index.d.ts +3 -0
- package/dist/SidebarNav/index.js +3 -0
- package/dist/SidebarNav-QGSFKZYA.css +319 -0
- package/dist/Skeleton/Skeleton.d.ts +50 -0
- package/dist/Skeleton/index.d.ts +3 -0
- package/dist/Skeleton/index.js +3 -0
- package/dist/Skeleton-V735HRGM.css +421 -0
- package/dist/StatCard/StatCard.d.ts +56 -0
- package/dist/StatCard/index.d.ts +3 -0
- package/dist/StatCard/index.js +3 -0
- package/dist/StatCard-KYPKZUWX.css +111 -0
- package/dist/StatGroup/StatGroup.d.ts +20 -0
- package/dist/StatGroup/index.d.ts +3 -0
- package/dist/StatGroup/index.js +2 -0
- package/dist/StatGroup-TGB6AEKM.css +80 -0
- package/dist/StatusDot/StatusDot.d.ts +25 -0
- package/dist/StatusDot/index.d.ts +3 -0
- package/dist/StatusDot/index.js +2 -0
- package/dist/StatusDot-HA2L2FSX.css +84 -0
- package/dist/Switch/Switch.d.ts +38 -0
- package/dist/Switch/index.d.ts +3 -0
- package/dist/Switch/index.js +2 -0
- package/dist/Switch-U4OWK4CL.css +169 -0
- package/dist/Table/Table.d.ts +51 -0
- package/dist/Table/index.d.ts +3 -0
- package/dist/Table/index.js +3 -0
- package/dist/Table-MDOLVUAW.css +159 -0
- package/dist/Tabs/Tabs.d.ts +97 -0
- package/dist/Tabs/index.d.ts +3 -0
- package/dist/Tabs/index.js +4 -0
- package/dist/Tabs/roving.d.ts +67 -0
- package/dist/Tabs-VLICJFVB.css +275 -0
- package/dist/Tag/Tag.d.ts +107 -0
- package/dist/Tag/index.d.ts +3 -0
- package/dist/Tag/index.js +3 -0
- package/dist/Tag-VNZEYLB6.css +406 -0
- package/dist/TagGroup/TagGroup.d.ts +41 -0
- package/dist/TagGroup/index.d.ts +3 -0
- package/dist/TagGroup/index.js +4 -0
- package/dist/TagGroup-APC2EFH4.css +75 -0
- package/dist/TagsInput/TagsInput.d.ts +112 -0
- package/dist/TagsInput/index.d.ts +3 -0
- package/dist/TagsInput/index.js +10 -0
- package/dist/TagsInput-W4P36PRJ.css +168 -0
- package/dist/Text/Text.d.ts +67 -0
- package/dist/Text/index.d.ts +3 -0
- package/dist/Text/index.js +2 -0
- package/dist/Text-XIPYYZX2.css +154 -0
- package/dist/ThemeSwitcher/ThemeSwitcher.d.ts +47 -0
- package/dist/ThemeSwitcher/index.d.ts +4 -0
- package/dist/ThemeSwitcher/index.js +6 -0
- package/dist/ThemeSwitcher/preferences.d.ts +51 -0
- package/dist/TimeWindowPicker/TimeWindowPicker.d.ts +231 -0
- package/dist/TimeWindowPicker/index.d.ts +3 -0
- package/dist/TimeWindowPicker/index.js +13 -0
- package/dist/TimeWindowPicker/mask.d.ts +82 -0
- package/dist/TimeWindowPicker-7I7KWCMU.css +403 -0
- package/dist/Timeline/Timeline.d.ts +51 -0
- package/dist/Timeline/index.d.ts +3 -0
- package/dist/Timeline/index.js +3 -0
- package/dist/Timeline-27SYKOFX.css +144 -0
- package/dist/Toaster/Toaster.d.ts +108 -0
- package/dist/Toaster/index.d.ts +3 -0
- package/dist/Toaster/index.js +5 -0
- package/dist/Toaster-NVDCEIP5.css +306 -0
- package/dist/Toolbar/Toolbar.d.ts +62 -0
- package/dist/Toolbar/index.d.ts +3 -0
- package/dist/Toolbar/index.js +4 -0
- package/dist/Toolbar-IP6LXN45.css +48 -0
- package/dist/Tooltip/Tooltip.d.ts +51 -0
- package/dist/Tooltip/index.d.ts +3 -0
- package/dist/Tooltip/index.js +4 -0
- package/dist/Tooltip-LKQF7CE4.css +71 -0
- package/dist/Tree/index.d.ts +8 -0
- package/dist/Tree/index.js +1 -0
- package/dist/Tree/layout.d.ts +160 -0
- package/dist/Tree/model.d.ts +110 -0
- package/dist/Tree/useMeasuredSizes.d.ts +61 -0
- package/dist/Tree/useTreeState.d.ts +89 -0
- package/dist/TreeCanvas/TreeCanvas.d.ts +384 -0
- package/dist/TreeCanvas/index.d.ts +3 -0
- package/dist/TreeCanvas/index.js +10 -0
- package/dist/TreeCanvas/motion.d.ts +59 -0
- package/dist/TreeCanvas-WBNQPHC7.css +1098 -0
- package/dist/TreeGrid/TreeGrid.d.ts +142 -0
- package/dist/TreeGrid/index.d.ts +3 -0
- package/dist/TreeGrid/index.js +8 -0
- package/dist/TreeGrid-NSW7VMOX.css +132 -0
- package/dist/VisuallyHidden/VisuallyHidden.d.ts +23 -0
- package/dist/VisuallyHidden/index.d.ts +3 -0
- package/dist/VisuallyHidden/index.js +2 -0
- package/dist/VisuallyHidden-L552H7OA.css +21 -0
- package/dist/chunk-22O7LAW2.js +41 -0
- package/dist/chunk-23DHIMJA.js +38 -0
- package/dist/chunk-2EOKFKHX.js +263 -0
- package/dist/chunk-2HQR4U4D.js +143 -0
- package/dist/chunk-2PRH365R.js +74 -0
- package/dist/chunk-2ZQMA2WB.js +57 -0
- package/dist/chunk-34VGEDVV.js +907 -0
- package/dist/chunk-3CZ7XAVY.js +139 -0
- package/dist/chunk-3EYF6HKB.js +135 -0
- package/dist/chunk-3QRYCPXQ.js +116 -0
- package/dist/chunk-3ZP55QZE.js +40 -0
- package/dist/chunk-53DVJCVW.js +14 -0
- package/dist/chunk-5C5YMZQU.js +51 -0
- package/dist/chunk-5EKIWVOR.js +132 -0
- package/dist/chunk-5KPQ6D7N.js +54 -0
- package/dist/chunk-5SDBMKUO.js +297 -0
- package/dist/chunk-5VNUYO76.js +62 -0
- package/dist/chunk-5WS6L6FA.js +114 -0
- package/dist/chunk-6ZFVFA56.js +108 -0
- package/dist/chunk-7EM5T4ME.js +39 -0
- package/dist/chunk-7FZ53WDJ.js +163 -0
- package/dist/chunk-7HPRF5XN.js +525 -0
- package/dist/chunk-7RPGY3JE.js +43 -0
- package/dist/chunk-A2UXBCLO.js +48 -0
- package/dist/chunk-AV2DXAEL.js +27 -0
- package/dist/chunk-BHHIIK3M.js +17 -0
- package/dist/chunk-BZFWDIV6.js +9 -0
- package/dist/chunk-BZYDZBAN.js +123 -0
- package/dist/chunk-CMEE37QJ.js +628 -0
- package/dist/chunk-D35VTV2Z.js +106 -0
- package/dist/chunk-DD5BBGBE.js +162 -0
- package/dist/chunk-EN6K2IFA.js +256 -0
- package/dist/chunk-ESCO4XYW.js +144 -0
- package/dist/chunk-EUCC37WY.js +14 -0
- package/dist/chunk-EV6IMYJ6.js +62 -0
- package/dist/chunk-F27EPQ7D.js +68 -0
- package/dist/chunk-F4PJZ4ED.js +245 -0
- package/dist/chunk-F6OE5FH3.js +49 -0
- package/dist/chunk-FBZAKNSX.js +263 -0
- package/dist/chunk-FEFTGVMF.js +46 -0
- package/dist/chunk-GTOUGQQK.js +147 -0
- package/dist/chunk-GXQ3B46I.js +216 -0
- package/dist/chunk-H4FBTAYS.js +130 -0
- package/dist/chunk-HOXGBLEY.js +37 -0
- package/dist/chunk-HQNHV7D6.js +54 -0
- package/dist/chunk-HZ5XZNPS.js +98 -0
- package/dist/chunk-IAJLHVUA.js +28 -0
- package/dist/chunk-IJ7QXNIJ.js +1 -0
- package/dist/chunk-ITHXJHBB.js +280 -0
- package/dist/chunk-JCSA3XVH.js +32 -0
- package/dist/chunk-KLJCCMF3.js +97 -0
- package/dist/chunk-LWKJQTOM.js +77 -0
- package/dist/chunk-MNAXYY3R.js +215 -0
- package/dist/chunk-NDCATSW7.js +229 -0
- package/dist/chunk-NN62JQLR.js +29 -0
- package/dist/chunk-NPZY6YYL.js +251 -0
- package/dist/chunk-NTRZGNEX.js +529 -0
- package/dist/chunk-O6232G37.js +273 -0
- package/dist/chunk-O67VF5MS.js +58 -0
- package/dist/chunk-ODEQTPFM.js +6 -0
- package/dist/chunk-OFHBK7RI.js +498 -0
- package/dist/chunk-PNFASD6F.js +98 -0
- package/dist/chunk-PQADV6P6.js +19 -0
- package/dist/chunk-PZSWF74H.js +15 -0
- package/dist/chunk-Q4ZPPART.js +26 -0
- package/dist/chunk-QEUY3A5P.js +186 -0
- package/dist/chunk-QNCVHRZL.js +17 -0
- package/dist/chunk-QVE4GJAT.js +15 -0
- package/dist/chunk-QYOFACSP.js +36 -0
- package/dist/chunk-RA2ULG6H.js +29 -0
- package/dist/chunk-RDGD7Z7I.js +350 -0
- package/dist/chunk-RK4XPHVG.js +16 -0
- package/dist/chunk-RSAQOKH3.js +38 -0
- package/dist/chunk-S2XHHEW4.js +84 -0
- package/dist/chunk-S4GZWSKR.js +137 -0
- package/dist/chunk-SFZOKW2G.js +52 -0
- package/dist/chunk-UG46QBLT.js +325 -0
- package/dist/chunk-UOGSZKLT.js +134 -0
- package/dist/chunk-V2XMNLMS.js +52 -0
- package/dist/chunk-W4ENKCXJ.js +40 -0
- package/dist/chunk-W5J7R5EB.js +107 -0
- package/dist/chunk-WNI2WSJF.js +27 -0
- package/dist/chunk-WOYYD2YR.js +823 -0
- package/dist/chunk-WQX73TWF.js +1652 -0
- package/dist/chunk-XDTYBF2F.js +36 -0
- package/dist/chunk-XN4JBAN3.js +32 -0
- package/dist/chunk-XV6WRMBC.js +211 -0
- package/dist/chunk-YLYOWZ4V.js +33 -0
- package/dist/chunk-YODNNSZL.js +63 -0
- package/dist/chunk-ZCR6YGQ4.js +1 -0
- package/dist/chunk-ZFATEERP.js +144 -0
- package/dist/generated/index.d.ts +83 -0
- package/dist/generated/index.js +91 -0
- package/dist/index.d.ts +1 -1217
- package/dist/index.js +91 -4518
- package/dist/styles.css +14898 -4274
- package/dist/utils/cx.d.ts +10 -0
- package/dist/utils/headingLevel.d.ts +16 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/tone.d.ts +25 -0
- package/dist/utils/useClipboard.d.ts +82 -0
- package/package.json +18 -10
- package/scripts/bundle-css.mjs +25 -0
- package/scripts/check-css-literals.mjs +166 -0
- package/scripts/check-css-variables.mjs +184 -0
- package/scripts/check-css.mjs +27 -0
- package/scripts/css-source.mjs +67 -0
- package/scripts/write-barrel.mjs +60 -0
- package/dist/Accordion-NIMJQIOI.css +0 -88
- package/dist/AppShell-ZW3NSFBP.css +0 -51
- package/dist/Avatar-V6NG6Q45.css +0 -67
- package/dist/Button-XGCTXXYP.css +0 -174
- package/dist/Callout-LEGDIMAM.css +0 -52
- package/dist/Card-BOZGBML7.css +0 -86
- package/dist/Checkbox-OCUICIIZ.css +0 -58
- package/dist/CodeBlock-IEMBNIQC.css +0 -90
- package/dist/Container-LTKBA2FW.css +0 -21
- package/dist/Copyable-IB57OTHZ.css +0 -123
- package/dist/DataTable-3GALZUW2.css +0 -1593
- package/dist/DateTimePicker-NMSSGVPK.css +0 -312
- package/dist/Eyebrow-AVBORAS2.css +0 -30
- package/dist/IconButton-GB4PJDG2.css +0 -82
- package/dist/ImageUpload-3HQDF2KC.css +0 -158
- package/dist/Input-ZHUTN7CU.css +0 -210
- package/dist/Kbd-Q77CDZY7.css +0 -23
- package/dist/Modal-FJVG66S4.css +0 -138
- package/dist/Popover-FUFULUE2.css +0 -123
- package/dist/PricingCard-NKYV3JHA.css +0 -238
- package/dist/Section-665ZIPG6.css +0 -20
- package/dist/Select-GPRF7PRB.css +0 -294
- package/dist/Skeleton-3WEFLRDN.css +0 -378
- package/dist/StatCard-RTJIVTRB.css +0 -50
- package/dist/Table-AR3TRY2E.css +0 -89
- package/dist/Tabs-XZ4JIH3E.css +0 -153
- package/dist/Tag-R5QDJLYJ.css +0 -163
- package/dist/TimeWindowPicker-L3G5Q7UT.css +0 -629
- package/dist/Toaster-2O65VOR4.css +0 -264
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The month grid, shared by every picker.
|
|
3
|
+
*
|
|
4
|
+
* Seven equal columns, drawn as a grid rather than a wrapped row of buttons,
|
|
5
|
+
* so a week is a row a reader can move along and a day sits in one. The cells
|
|
6
|
+
* are spans with grid roles rather than buttons: a button inside a gridcell
|
|
7
|
+
* is two focusable things where the pattern has one, and the roving tabindex
|
|
8
|
+
* is what makes the month a single tab stop.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
.crewlet-calendar {
|
|
12
|
+
display: grid;
|
|
13
|
+
gap: 1px;
|
|
14
|
+
user-select: none;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.crewlet-calendar__weekdays,
|
|
18
|
+
.crewlet-calendar__week {
|
|
19
|
+
display: grid;
|
|
20
|
+
grid-template-columns: repeat(7, 1fr);
|
|
21
|
+
gap: 1px;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.crewlet-calendar__weekday {
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: center;
|
|
27
|
+
justify-content: center;
|
|
28
|
+
height: var(--size-row-sm);
|
|
29
|
+
font-size: var(--font-size-2xs);
|
|
30
|
+
font-weight: var(--font-weight-medium);
|
|
31
|
+
letter-spacing: var(--font-letter-spacing-wide);
|
|
32
|
+
text-transform: uppercase;
|
|
33
|
+
color: var(--color-text-tertiary);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.crewlet-calendar__day {
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
/* Never under the 24px target floor, at any density. */
|
|
41
|
+
min-width: var(--size-control-sm);
|
|
42
|
+
height: var(--size-control-sm);
|
|
43
|
+
/* The corner every small row in the package wears: a menu item, a
|
|
44
|
+
completion, a day. */
|
|
45
|
+
border-radius: var(--radius-xs);
|
|
46
|
+
font-size: var(--font-size-compact);
|
|
47
|
+
font-variant-numeric: tabular-nums;
|
|
48
|
+
color: var(--color-text-primary);
|
|
49
|
+
cursor: pointer;
|
|
50
|
+
transition: background-color var(--motion-duration-fast) var(--motion-easing-default);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.crewlet-calendar__day:hover:not(.is-disabled):not(.is-selected):not(.is-blank) {
|
|
54
|
+
background: var(--color-surface-hover);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.crewlet-calendar__day.is-outside {
|
|
58
|
+
color: var(--color-text-tertiary);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/* A padding cell holds the column open and nothing else: no day, no tint, and
|
|
62
|
+
no cursor promising that a press does something. */
|
|
63
|
+
.crewlet-calendar__day.is-blank {
|
|
64
|
+
cursor: default;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.crewlet-calendar__day.is-disabled {
|
|
68
|
+
color: var(--color-text-tertiary);
|
|
69
|
+
cursor: not-allowed;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/*
|
|
73
|
+
* TODAY IS A RING, not a fill: the fill means "chosen", and the two are
|
|
74
|
+
* different facts that are often true of different days.
|
|
75
|
+
*/
|
|
76
|
+
.crewlet-calendar__day.is-today {
|
|
77
|
+
box-shadow: inset 0 0 0 1px var(--color-border-hover);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* A RANGE IS ONE BAND. The cells sit 1px apart, so a tint on each of them
|
|
82
|
+
* alone reads as a row of separate squares with the ground showing between.
|
|
83
|
+
* An OUTLINE in the band's own colour closes that gap on every side, which is
|
|
84
|
+
* what joins the weeks a multi-week range runs through as well as the days.
|
|
85
|
+
*
|
|
86
|
+
* An outline rather than a box-shadow because today's ring is a box-shadow: a
|
|
87
|
+
* second one on the same element replaces it, and a day that is both today and
|
|
88
|
+
* inside the chosen range would lose the ring that says which day it is. The
|
|
89
|
+
* focus ring is an outline too and is declared after this, so it still wins on
|
|
90
|
+
* the day the keyboard is on.
|
|
91
|
+
*/
|
|
92
|
+
.crewlet-calendar__day.is-in-range {
|
|
93
|
+
background: var(--color-brand-accent-soft);
|
|
94
|
+
color: var(--color-brand-accent-ink);
|
|
95
|
+
border-radius: 0;
|
|
96
|
+
outline: 1px solid var(--color-brand-accent-soft);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.crewlet-calendar__day.is-selected {
|
|
100
|
+
background: var(--color-brand-accent);
|
|
101
|
+
color: var(--color-text-on-accent);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/*
|
|
105
|
+
* The ends of the band: the chosen day keeps its own fill and its own corner,
|
|
106
|
+
* and carries the band's colour around it so the chip reads as joined to the
|
|
107
|
+
* run beside it rather than floating one gap away from it.
|
|
108
|
+
*/
|
|
109
|
+
.crewlet-calendar__day.is-range-start,
|
|
110
|
+
.crewlet-calendar__day.is-range-end {
|
|
111
|
+
outline: 1px solid var(--color-brand-accent-soft);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
* The ring is an OUTLINE, drawn INSIDE the cell: the grid is a clipping box
|
|
116
|
+
* at its edges, so an outset ring on the first or last column is cut off by
|
|
117
|
+
* it and painted over by the row beneath.
|
|
118
|
+
*/
|
|
119
|
+
.crewlet-calendar__day:focus-visible {
|
|
120
|
+
outline: 2px solid var(--color-focus);
|
|
121
|
+
outline-offset: var(--size-focus-ring-inset-offset);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
@media (prefers-reduced-motion: reduce) {
|
|
125
|
+
.crewlet-calendar__day {
|
|
126
|
+
transition: none;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
2
|
+
import type { Tone } from '../utils/tone.js';
|
|
3
|
+
/**
|
|
4
|
+
* The tones a callout speaks in.
|
|
5
|
+
*
|
|
6
|
+
* `brand` is deliberately not one of them. The accent means "where the reader
|
|
7
|
+
* is", and a banner is never that: an accented strip across a screen claims
|
|
8
|
+
* the reader's own position for a sentence about the system.
|
|
9
|
+
*/
|
|
10
|
+
export type CalloutVariant = Exclude<Tone, 'brand'>;
|
|
11
|
+
/**
|
|
12
|
+
* A card in the content flow, or a strip across the surface it heads.
|
|
13
|
+
*
|
|
14
|
+
* `banner` is full bleed with no radius and only a bottom border, for the
|
|
15
|
+
* place a shell puts one: above a screen's content, against the edges, where a
|
|
16
|
+
* rounded card would leave a gutter of page colour down both sides.
|
|
17
|
+
*/
|
|
18
|
+
export type CalloutLayout = 'card' | 'banner';
|
|
19
|
+
export interface CalloutProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
|
|
20
|
+
variant?: CalloutVariant | undefined;
|
|
21
|
+
/** A bold lead-in before the message. */
|
|
22
|
+
title?: ReactNode;
|
|
23
|
+
/** A glyph replacing the variant's own. A component, not a name. */
|
|
24
|
+
icon?: ReactNode;
|
|
25
|
+
layout?: CalloutLayout | undefined;
|
|
26
|
+
/** A control at the trailing edge: "Reconnect", "Open the log", "Dismiss". */
|
|
27
|
+
action?: ReactNode;
|
|
28
|
+
/**
|
|
29
|
+
* Announce this when it appears. OFF by default, which is the change from
|
|
30
|
+
* 0.2.0: every static banner on a screen was a live region, so a screen
|
|
31
|
+
* reader arriving at a page read out each of them in turn, and one that had
|
|
32
|
+
* been on the page for an hour was announced as news. Set it on a callout
|
|
33
|
+
* that appears IN RESPONSE to something, and use `role="alert"` for the one
|
|
34
|
+
* that must interrupt.
|
|
35
|
+
*/
|
|
36
|
+
live?: 'polite' | 'assertive' | undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A status in the content flow: an unreachable backend, a permission gate, a
|
|
40
|
+
* destructive action about to happen.
|
|
41
|
+
*
|
|
42
|
+
* It stays until the condition clears, which is what separates it from a
|
|
43
|
+
* toast. Anything a reader would want to find again must not be a toast; and
|
|
44
|
+
* anything that is the OUTCOME of a press they just made should not be a
|
|
45
|
+
* callout they have to go looking for.
|
|
46
|
+
*/
|
|
47
|
+
export declare const Callout: ({ variant, title, icon, layout, action, live, className, children, ...rest }: CalloutProps) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* The callout: a status that stays in the content flow.
|
|
3
|
+
*
|
|
4
|
+
* ITS INK IS THE TONE'S OWN `-ink` STEP, not a mix. 0.2.0 built every one of
|
|
5
|
+
* these with `color-mix(in srgb, <fill> 55%, var(--color-text-primary))`,
|
|
6
|
+
* which produces a colour nobody measured: the light warning reached 4.41:1
|
|
7
|
+
* against its own tint. The ink, the soft fill and the line are three declared
|
|
8
|
+
* steps the palette suite measures against each other, so the pair a reader
|
|
9
|
+
* sees is the pair that was checked.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
.crewlet-callout {
|
|
13
|
+
--crewlet-callout-fill: var(--color-surface-inset);
|
|
14
|
+
--crewlet-callout-ink: var(--color-text-secondary);
|
|
15
|
+
/*
|
|
16
|
+
* TRANSPARENT, because the tint is the boundary. The engine's banner is a
|
|
17
|
+
* block of the tone's soft step with no rule around it: a 1px line in the
|
|
18
|
+
* same hue as the fill behind it adds a second edge a reader reads as a
|
|
19
|
+
* card, and the thing this component IS is a sentence the screen is saying
|
|
20
|
+
* rather than a card the screen contains. The pixel is still spent, so a
|
|
21
|
+
* consumer that overrides the line gets it back without the box moving.
|
|
22
|
+
*/
|
|
23
|
+
--crewlet-callout-line: transparent;
|
|
24
|
+
|
|
25
|
+
display: flex;
|
|
26
|
+
align-items: flex-start;
|
|
27
|
+
gap: var(--spacing-2);
|
|
28
|
+
/* The engine's own: a tight strip rather than a padded card. This sits
|
|
29
|
+
above a screen or between two sections and takes a line or two of text,
|
|
30
|
+
and the card's 16px made a one-line banner 48px tall. */
|
|
31
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
32
|
+
border: 1px solid var(--crewlet-callout-line);
|
|
33
|
+
border-radius: var(--radius-md);
|
|
34
|
+
background: var(--crewlet-callout-fill);
|
|
35
|
+
color: var(--crewlet-callout-ink);
|
|
36
|
+
font-family: var(--font-family-sans);
|
|
37
|
+
font-size: var(--font-size-compact);
|
|
38
|
+
line-height: var(--font-line-height-normal);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.crewlet-callout__icon {
|
|
42
|
+
display: inline-flex;
|
|
43
|
+
flex: none;
|
|
44
|
+
/* On the first line's optical centre rather than its box top, which a 16px
|
|
45
|
+
glyph beside a 13px line sits two pixels above. */
|
|
46
|
+
margin-top: 2px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.crewlet-callout__content {
|
|
50
|
+
min-width: 0;
|
|
51
|
+
flex: 1;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.crewlet-callout__title {
|
|
55
|
+
font-weight: var(--font-weight-semibold);
|
|
56
|
+
margin-right: var(--spacing-2);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.crewlet-callout__action {
|
|
60
|
+
flex: none;
|
|
61
|
+
align-self: center;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* Inline code inside a callout takes the callout's ink. A mono chip that kept
|
|
66
|
+
* its own neutral ink inside a danger banner read as the one part of the
|
|
67
|
+
* sentence that was fine.
|
|
68
|
+
*/
|
|
69
|
+
.crewlet-callout code,
|
|
70
|
+
.crewlet-callout .crewlet-inline-code {
|
|
71
|
+
color: inherit;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* ── tones ─────────────────────────────────────────────────────────────── */
|
|
75
|
+
|
|
76
|
+
.crewlet-callout--info {
|
|
77
|
+
--crewlet-callout-fill: var(--color-feedback-info-soft);
|
|
78
|
+
--crewlet-callout-ink: var(--color-feedback-info-ink);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.crewlet-callout--success {
|
|
82
|
+
--crewlet-callout-fill: var(--color-feedback-success-soft);
|
|
83
|
+
--crewlet-callout-ink: var(--color-feedback-success-ink);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.crewlet-callout--warning {
|
|
87
|
+
--crewlet-callout-fill: var(--color-feedback-warning-soft);
|
|
88
|
+
--crewlet-callout-ink: var(--color-feedback-warning-ink);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.crewlet-callout--danger {
|
|
92
|
+
--crewlet-callout-fill: var(--color-feedback-danger-soft);
|
|
93
|
+
--crewlet-callout-ink: var(--color-feedback-danger-ink);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/* ── layouts ───────────────────────────────────────────────────────────── */
|
|
97
|
+
|
|
98
|
+
/*
|
|
99
|
+
* The banner is what a shell puts above a screen: against both edges, with no
|
|
100
|
+
* radius and no side borders, because a rounded card there leaves a gutter of
|
|
101
|
+
* page colour down each side and reads as content rather than as chrome.
|
|
102
|
+
*/
|
|
103
|
+
.crewlet-callout--banner {
|
|
104
|
+
border-radius: var(--radius-none);
|
|
105
|
+
/* The one layout that keeps a visible rule, on the edge it meets the screen
|
|
106
|
+
at: full bleed, there is no tint boundary at the sides for the eye to
|
|
107
|
+
stop on, so the bottom line is what says the strip has ended. */
|
|
108
|
+
border-width: 0 0 1px;
|
|
109
|
+
border-bottom-color: var(--color-border-default);
|
|
110
|
+
padding: var(--spacing-2) var(--spacing-4);
|
|
111
|
+
}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A bounded, pannable and zoomable viewport over positioned content.
|
|
3
|
+
*
|
|
4
|
+
* WHY IT EXISTS. A hierarchy drawn as a chart grows wider than any screen, and
|
|
5
|
+
* the page's own scroller is the wrong instrument for it: an application shell
|
|
6
|
+
* usually has exactly one element allowed to scroll, and a chart that scrolled
|
|
7
|
+
* it sideways would fight the router's scroll memory and every other screen's
|
|
8
|
+
* layout. So the chart lives in its own viewport, the geometry of moving
|
|
9
|
+
* around it is `geometry.ts`, and this component is the wiring from pointers,
|
|
10
|
+
* wheels and keys to that geometry.
|
|
11
|
+
*
|
|
12
|
+
* THE RULES IT KEEPS.
|
|
13
|
+
*
|
|
14
|
+
* - IT FILLS THE HEIGHT ITS CONTAINER GIVES IT and never grows the page. A
|
|
15
|
+
* screen that wants a full height canvas gives it a full height box.
|
|
16
|
+
* - THE PAGE STILL SCROLLS. A plain wheel pans the canvas only while focus is
|
|
17
|
+
* inside it; otherwise the wheel belongs to the page, so a reader scrolling
|
|
18
|
+
* down is never caught by a chart passing under the pointer. Ctrl or Command
|
|
19
|
+
* with the wheel zooms toward the cursor wherever the pointer is, which is
|
|
20
|
+
* also what a trackpad pinch sends.
|
|
21
|
+
* - TOUCH IS OPT IN. Until the canvas is tapped, one finger scrolls the page
|
|
22
|
+
* (`touch-action: pan-y`); a tap activates it, one finger then pans, and a
|
|
23
|
+
* visible Done control hands the finger back to the page. Two fingers pinch
|
|
24
|
+
* toward their midpoint at any time, because two fingers are never a scroll.
|
|
25
|
+
* - THE ZOOM KEYS ARE THE CANVAS'S, WHEREVER FOCUS IS INSIDE IT: `+`, `-` and
|
|
26
|
+
* `0` (and Ctrl or Command with `=`, `-` and `0`) work on an item as well as
|
|
27
|
+
* on the viewport, because the tab stop a chart hands out is an ITEM and a
|
|
28
|
+
* reader who has navigated the content is exactly the reader who wants to
|
|
29
|
+
* zoom it. They are in no other keyboard pattern here, so there is nothing
|
|
30
|
+
* for them to collide with. The PAN keys are the viewport's own: the arrows
|
|
31
|
+
* belong to whatever holds focus, so a tree's navigation and a listbox's
|
|
32
|
+
* selection are never eaten. A text field inside keeps every key it is sent.
|
|
33
|
+
* - HOW FAR IT ZOOMS IS THE CONTENT'S ANSWER: out as far as the fit, because
|
|
34
|
+
* there is nothing beyond the whole chart to see, and in until the largest
|
|
35
|
+
* item fills the pane, because that is what a reader pressing Zoom in is
|
|
36
|
+
* asking for. See `zoomLimits`.
|
|
37
|
+
* - THE ZOOM SAYS WHAT IT IS, between the two steppers, and a reader can type
|
|
38
|
+
* one. A zoom has a value as well as a direction, and two chevrons say only
|
|
39
|
+
* the direction: without the readout, getting back to actual size from a
|
|
40
|
+
* stray pinch is pressing a chevron until it looks right. What is typed goes
|
|
41
|
+
* through the same clamp as every other zoom.
|
|
42
|
+
* - A FOCUSED ITEM IS NEVER SCROLLED INTO VIEW BEHIND THE TRANSFORM'S BACK.
|
|
43
|
+
* The viewport clips rather than scrolls, but a browser still scrolls a
|
|
44
|
+
* clipping box to show a focused descendant; that scroll is converted into a
|
|
45
|
+
* pan and reset, so the transform stays the one source of truth.
|
|
46
|
+
* - ITS CHROME IS ONE GROUP IN ONE CORNER: the zoom bar, whatever the caller
|
|
47
|
+
* adds to the end of it, and whatever bars it stacks under it. Everything in
|
|
48
|
+
* that group acts on the canvas, so it is drawn beside the canvas rather
|
|
49
|
+
* than in the page's own toolbar.
|
|
50
|
+
* - ITS OVERLAY IS A LayerHost. The untransformed layer over the viewport is
|
|
51
|
+
* the portal target for every menu, popover and picker opened from an item
|
|
52
|
+
* inside, so each is placed from its anchor's viewport rectangle rather than
|
|
53
|
+
* scaled by the zoom or clipped inside a card. The host receives
|
|
54
|
+
* `LAYER_REPOSITION_EVENT` whenever the content moves beneath it, which is
|
|
55
|
+
* how an open surface follows its anchor through a pan or a zoom.
|
|
56
|
+
* - FIT HAPPENS ONCE, on the first layout that has both a measured viewport
|
|
57
|
+
* and content bounds, and again only on request. A data push that changes
|
|
58
|
+
* the content never moves the operator's view, and nothing is shown before
|
|
59
|
+
* that first fit.
|
|
60
|
+
* - MOTION ONLY ON REQUEST. A fit, a zoom button or a reveal eases; a drag, a
|
|
61
|
+
* pinch, a wheel and a relayout anchor never do, and under reduced motion
|
|
62
|
+
* nothing does. An easing lasts as long as its transition: a clamp that
|
|
63
|
+
* arrives while one runs (a data push) rides along with it, and one that
|
|
64
|
+
* arrives after it has settled moves at once, as any move nobody asked for
|
|
65
|
+
* must. A request that moves nothing starts no easing.
|
|
66
|
+
*
|
|
67
|
+
* Pointer capture is used where the browser has it and the drag is tracked on
|
|
68
|
+
* the window either way, so a drag that leaves the viewport keeps panning.
|
|
69
|
+
* Fullscreen is not this component's concern: a surface that goes fullscreen
|
|
70
|
+
* must take its dialogs and toasts with it, so the screen that owns those
|
|
71
|
+
* decides.
|
|
72
|
+
*
|
|
73
|
+
* Ported from the engine dashboard's `ui/Canvas.tsx`, with its suite.
|
|
74
|
+
*/
|
|
75
|
+
import { type ReactNode, type Ref } from 'react';
|
|
76
|
+
import { type CanvasPoint, type CanvasRect } from './geometry.js';
|
|
77
|
+
/**
|
|
78
|
+
* How a view change moves: a correction to where the reader already is, or the
|
|
79
|
+
* chart travelling somewhere else. See the state that holds it, below.
|
|
80
|
+
*/
|
|
81
|
+
export type CanvasEase = 'near' | 'travel';
|
|
82
|
+
/** What a screen can ask of a canvas it holds a ref to. */
|
|
83
|
+
export interface CanvasHandle {
|
|
84
|
+
/** Show all of the content. Eases, unless reduced motion is set. */
|
|
85
|
+
fit(): void;
|
|
86
|
+
/** Zoom about the viewport centre. */
|
|
87
|
+
zoomBy(factor: number): void;
|
|
88
|
+
/** Pan the least distance that brings a world rectangle into view. */
|
|
89
|
+
reveal(target: CanvasRect): void;
|
|
90
|
+
/** Keep a node still on screen across a relayout: see `anchorView`. */
|
|
91
|
+
anchor(before: CanvasPoint, after: CanvasPoint): void;
|
|
92
|
+
/**
|
|
93
|
+
* Ease onto one world rectangle, remembering the view it left.
|
|
94
|
+
*
|
|
95
|
+
* For a surface that is about one item and has to say WHERE that item is:
|
|
96
|
+
* the chart moves to it, leaves room around it (`regionView`), and gives the
|
|
97
|
+
* reader their own view back on [restoreView]. Calling it twice remembers
|
|
98
|
+
* only the first view, so a second region is still left by one restore.
|
|
99
|
+
*
|
|
100
|
+
* `context` is how many times the region's own width the visible width comes
|
|
101
|
+
* to: [CANVAS_FOCUS_CONTEXT] unless it is named, and
|
|
102
|
+
* [CANVAS_COMPOSE_CONTEXT] for a region a reader has to type into rather
|
|
103
|
+
* than merely look at. `ceiling` is how far in the ease may zoom, for a
|
|
104
|
+
* region with a size of its own to respect: see [regionView].
|
|
105
|
+
*/
|
|
106
|
+
focusRegion(target: CanvasRect, context?: number, ceiling?: number): void;
|
|
107
|
+
/**
|
|
108
|
+
* Remember the view the reader is on NOW, as the one [restoreView] gives
|
|
109
|
+
* back, without moving anything.
|
|
110
|
+
*
|
|
111
|
+
* FOR A REGION THAT DOES NOT EXIST YET. [focusRegion] remembers the view it
|
|
112
|
+
* leaves, which is the right moment whenever the thing being eased onto was
|
|
113
|
+
* already on the chart. A node being COMPOSED is not: its card has to be
|
|
114
|
+
* added to the content and measured before there is a rectangle to ease
|
|
115
|
+
* onto, and the content growing is itself a change the canvas answers by
|
|
116
|
+
* keeping what it holds reachable. So by the time `focusRegion` could be
|
|
117
|
+
* called, the view is no longer the one the reader was on, and what came
|
|
118
|
+
* back afterwards was the chart as the GHOST had left it. Measured on the
|
|
119
|
+
* engine's own builder: 198px sideways, every time an add was cancelled.
|
|
120
|
+
*
|
|
121
|
+
* Calling it twice keeps the first view, as [focusRegion] does.
|
|
122
|
+
*/
|
|
123
|
+
rememberView(): void;
|
|
124
|
+
/** Ease back to the view [focusRegion] left, if it has not been given back already. */
|
|
125
|
+
restoreView(): void;
|
|
126
|
+
/** A world rectangle in viewport coordinates, for positioning an overlay. */
|
|
127
|
+
screenRect(target: CanvasRect): CanvasRect;
|
|
128
|
+
}
|
|
129
|
+
/** Every string the canvas renders on its own. */
|
|
130
|
+
export interface CanvasLabels {
|
|
131
|
+
zoomIn: string;
|
|
132
|
+
zoomOut: string;
|
|
133
|
+
fit: string;
|
|
134
|
+
/**
|
|
135
|
+
* The zoom readout, given the zoom as a whole percentage. It is also what
|
|
136
|
+
* opens the box a reader types one into, so it says both.
|
|
137
|
+
*/
|
|
138
|
+
zoom: (percent: number) => string;
|
|
139
|
+
/** The box a reader types a zoom into. */
|
|
140
|
+
zoomLevel: string;
|
|
141
|
+
/** The control that hands one finger back to the page. */
|
|
142
|
+
done: string;
|
|
143
|
+
/** Read after the canvas's name, so a keyboard reader learns its keys. */
|
|
144
|
+
keys: string;
|
|
145
|
+
}
|
|
146
|
+
export interface CanvasProps {
|
|
147
|
+
/** The accessible name of the viewport, such as "Organization chart". */
|
|
148
|
+
label: string;
|
|
149
|
+
/** The laid out content's bounds in world units, or null until it has been measured. */
|
|
150
|
+
content: CanvasRect | null;
|
|
151
|
+
/** The positioned content: the layer that is panned and zoomed. */
|
|
152
|
+
children: ReactNode;
|
|
153
|
+
/**
|
|
154
|
+
* Anything drawn over the viewport without the transform, such as a note
|
|
155
|
+
* about what the chart is showing.
|
|
156
|
+
*
|
|
157
|
+
* THE LAYER IS INERT AND ITS CHILDREN ARE NOT. Empty space passes a press
|
|
158
|
+
* through to the viewport beneath, but each child takes its own presses
|
|
159
|
+
* back, because a control drawn here has to be pressable. So a note that
|
|
160
|
+
* must not swallow the drag that pans the chart sets `pointer-events: none`
|
|
161
|
+
* on itself.
|
|
162
|
+
*/
|
|
163
|
+
overlay?: ReactNode;
|
|
164
|
+
/** The zoom out, zoom in and fit controls. */
|
|
165
|
+
controls?: boolean | undefined;
|
|
166
|
+
/**
|
|
167
|
+
* Which corner the controls sit in.
|
|
168
|
+
*
|
|
169
|
+
* `top-right` is where a chart's own toolbar belongs, and where the console
|
|
170
|
+
* org chart puts it: out of the way of the content, which a tree grows
|
|
171
|
+
* DOWNWARD from its root, and beside the first place a reader looks after
|
|
172
|
+
* the root itself.
|
|
173
|
+
*/
|
|
174
|
+
controlsPlacement?: 'top-right' | 'bottom-right' | undefined;
|
|
175
|
+
/**
|
|
176
|
+
* Anything else in the control bar, drawn after the zoom controls: a
|
|
177
|
+
* fullscreen toggle, a print, a download. It is in the bar rather than in
|
|
178
|
+
* the page's own toolbar because it acts on the CANVAS, and a control that
|
|
179
|
+
* acts on the canvas from 800px away is a control nobody finds.
|
|
180
|
+
*/
|
|
181
|
+
controlsExtra?: ReactNode | undefined;
|
|
182
|
+
/**
|
|
183
|
+
* Bars of the caller's own, stacked under the control bar in the same
|
|
184
|
+
* corner: a switch between two drawings of the content, a note about a key.
|
|
185
|
+
* Each is a surface of its own, as the bar is.
|
|
186
|
+
*/
|
|
187
|
+
controlsBelow?: ReactNode | undefined;
|
|
188
|
+
/**
|
|
189
|
+
* A note under the controls, about a key or a state: "Press Esc to leave
|
|
190
|
+
* fullscreen".
|
|
191
|
+
*
|
|
192
|
+
* DECORATION, AND AN ANNOUNCEMENT. It takes no press and no tab stop, so it
|
|
193
|
+
* never comes between a reader and the chart; it is a `status` region, so a
|
|
194
|
+
* canvas that puts one up when it enters a state a reader cannot see out of
|
|
195
|
+
* says so to a reader who cannot see it either. Give it a node whose content
|
|
196
|
+
* comes and goes rather than the node itself: the region stays in the
|
|
197
|
+
* document while it is empty, and a live region that was already there when
|
|
198
|
+
* its message arrives is a message a screen reader announces.
|
|
199
|
+
*/
|
|
200
|
+
hint?: ReactNode | undefined;
|
|
201
|
+
/**
|
|
202
|
+
* The width, in world units, of the largest single item the content draws.
|
|
203
|
+
*
|
|
204
|
+
* It is what the largest zoom is derived from ([zoomLimits]): a reader who
|
|
205
|
+
* keeps pressing Zoom in is asking to look at one item, so the ceiling is
|
|
206
|
+
* the zoom that gives them one. Unset, the fixed ceiling stands.
|
|
207
|
+
*/
|
|
208
|
+
largestItemWidth?: number | undefined;
|
|
209
|
+
/**
|
|
210
|
+
* Pushes the content back, for a surface opened OVER the canvas that is
|
|
211
|
+
* about one part of it.
|
|
212
|
+
*
|
|
213
|
+
* The content is blurred and faded rather than covered, so the chart is
|
|
214
|
+
* still there behind the decision being made about it, which is what the
|
|
215
|
+
* console chart does while a node is being added. It is a state rather than
|
|
216
|
+
* an entrance, so a reader who asked for less motion simply gets it.
|
|
217
|
+
*/
|
|
218
|
+
dimmed?: boolean | undefined;
|
|
219
|
+
/**
|
|
220
|
+
* Whether one finger can pan the canvas at all.
|
|
221
|
+
*
|
|
222
|
+
* On by default, behind the tap that activates it. Turned off, one finger
|
|
223
|
+
* always belongs to the page and only a two finger pinch reaches the canvas,
|
|
224
|
+
* which is what a chart embedded in a long scrolling page wants.
|
|
225
|
+
*/
|
|
226
|
+
touch?: boolean | undefined;
|
|
227
|
+
/** Every string the canvas renders itself, for another language. */
|
|
228
|
+
labels?: Partial<CanvasLabels> | undefined;
|
|
229
|
+
/** Called once, when the first measured layout has been fitted. */
|
|
230
|
+
onReady?: (() => void) | undefined;
|
|
231
|
+
ref?: Ref<CanvasHandle> | undefined;
|
|
232
|
+
className?: string | undefined;
|
|
233
|
+
}
|
|
234
|
+
export declare function Canvas({ label, content, children, overlay, controls, controlsPlacement, controlsExtra, controlsBelow, hint, largestItemWidth, dimmed, touch, labels, onReady, ref, className, }: CanvasProps): import("react/jsx-runtime").JSX.Element;
|