@mkbabb/glass-ui 3.2.0 → 3.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/dist/{CardFooter-3-VGho1J.js → CardFooter-C390imy7.js} +2 -2
- package/dist/{CollapsibleContent-wlmlDujU.js → CollapsibleContent-cauTbZEM.js} +1 -1
- package/dist/{CommandShortcut-C6lsz3pG.js → CommandShortcut-BiVyqipe.js} +5 -4
- package/dist/DataTable-FfkaAg2z.js +465 -0
- package/dist/DialogContent-IQ8_BRrC.js +100 -0
- package/dist/{DiscoGlyph-B7YooI2-.js → DiscoGlyph-BaZ8OawK.js} +1 -1
- package/dist/{GlyphFace-Bvk6OIas.js → GlyphFace-B_7vOmYn.js} +1 -1
- package/dist/HoverPopover-DTSYkJtw.js +96 -0
- package/dist/{IconTooltip-DXveGjx7.js → IconTooltip-BTyYn4mr.js} +1 -1
- package/dist/Input-CU9CNKmo.js +52 -0
- package/dist/{MetricBadge-J_GBCb8e.js → MetricBadge-BlrdbOGN.js} +1 -1
- package/dist/{NumberFieldContent-B6L6YrQz.js → NumberFieldContent-iOTQ5rGO.js} +8 -4
- package/dist/{PopoverContent-CxEEUL7Y.js → PopoverContent-B8WtJECb.js} +1 -1
- package/dist/Progress-DjM86vfb.js +254 -0
- package/dist/{ScrollingText-1Qjnwz6H.js → ScrollingText-P9o_DuMn.js} +1 -1
- package/dist/{SelectScrollDownButton-BvvvAbuh.js → SelectScrollDownButton-BGn3rjs9.js} +9 -8
- package/dist/TabsIndicator-DA0x9gPr.js +97 -0
- package/dist/{ToggleGroupItem-Cy7xHFEo.js → ToggleGroupItem-gyXj998A.js} +37 -40
- package/dist/UnderlineTabs-Cq_AD03t.js +39 -0
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +2 -0
- package/dist/api.js +1 -1
- package/dist/aurora.js +454 -271
- package/dist/{button-DS3ULf5i.js → button-Ckn3eDfB.js} +27 -22
- package/dist/button.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.js +2 -2
- package/dist/collapsible.js +1 -1
- package/dist/color-rkK4RMx2.js +33 -0
- package/dist/color.d.ts +1 -0
- package/dist/color.js +2 -0
- package/dist/command.js +1 -1
- package/dist/compile-DVgAxagk.js +106 -0
- package/dist/components/custom/animated-digit/AnimatedDigit.vue.d.ts +7 -7
- package/dist/components/custom/aurora/Aurora.vue.d.ts +3 -3
- package/dist/components/custom/aurora/composables/color.d.ts +3 -25
- package/dist/components/custom/aurora/composables/cursorModel.d.ts +45 -0
- package/dist/components/custom/aurora/composables/frameLoop.d.ts +30 -0
- package/dist/components/custom/aurora/composables/glSetup.d.ts +29 -0
- package/dist/components/custom/aurora/composables/runtime.d.ts +45 -35
- package/dist/components/custom/aurora/composables/uniformBridge.d.ts +67 -0
- package/dist/components/custom/aurora/composables/useAurora.d.ts +14 -1
- package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +1 -1
- package/dist/components/custom/aurora/constants/budget.d.ts +50 -0
- package/dist/components/custom/aurora/{presets.d.ts → constants/presets.d.ts} +2 -5
- package/dist/components/custom/aurora/constants/shaders/aurora.frag.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/composition.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/flow.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -0
- package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/index.d.ts +2 -2
- package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +14 -7
- package/dist/components/custom/configurator/density.d.ts +3 -8
- package/dist/components/custom/dock/DockBackgroundToggle.vue.d.ts +46 -0
- package/dist/components/custom/dock/DockIconButton.vue.d.ts +3 -3
- package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +2 -2
- package/dist/components/custom/dock/GlassDock.vue.d.ts +22 -18
- package/dist/components/custom/dock/composables/dockContext.d.ts +4 -4
- package/dist/components/custom/dock/composables/dockLayerContext.d.ts +13 -6
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +32 -8
- package/dist/components/custom/dock/index.d.ts +1 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
- package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +1 -1
- package/dist/components/custom/glyph-face/keys.d.ts +3 -29
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +48 -0
- package/dist/components/custom/goo-blob/composables/easing.d.ts +6 -0
- package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +14 -0
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +18 -0
- package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +13 -0
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +42 -0
- package/dist/components/custom/goo-blob/index.d.ts +7 -0
- package/dist/components/custom/goo-blob/shaders/metaball.frag.d.ts +1 -0
- package/dist/components/custom/goo-blob/shaders/metaball.vert.d.ts +1 -0
- package/dist/components/custom/goo-blob/shaders/oklch-perturb.glsl.d.ts +1 -0
- package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -0
- package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -0
- package/dist/components/custom/goo-blob/types.d.ts +77 -0
- package/dist/components/custom/hover-popover/HoverPopover.vue.d.ts +48 -9
- package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +2 -0
- package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +2 -2
- package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +2 -2
- package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +13 -7
- package/dist/components/custom/search/FuzzySearch.vue.d.ts +1 -1
- package/dist/components/custom/search/SearchBar.vue.d.ts +1 -1
- package/dist/components/custom/sortable-list/SortableHandle.vue.d.ts +7 -1
- package/dist/components/custom/sortable-list/context.d.ts +2 -3
- package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +6 -3
- package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +7 -3
- package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +6 -3
- package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +39 -0
- package/dist/components/custom/timeline/ContinuousMarkers.vue.d.ts +49 -0
- package/dist/components/custom/timeline/ContinuousRail.vue.d.ts +26 -0
- package/dist/components/custom/timeline/ContinuousTimeline.vue.d.ts +4 -4
- package/dist/components/custom/typewriter/TypewriterText.vue.d.ts +2 -2
- package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +45 -0
- package/dist/components/custom/watercolor-dot/index.d.ts +3 -0
- package/dist/components/custom/watercolor-dot/prng.d.ts +5 -0
- package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +24 -0
- package/dist/components/ui/_shared/menuItemVariants.d.ts +1 -1
- package/dist/components/ui/avatar/Avatar.vue.d.ts +1 -1
- package/dist/components/ui/avatar/AvatarImage.vue.d.ts +5 -1
- package/dist/components/ui/avatar/index.d.ts +1 -1
- package/dist/components/ui/badge/index.d.ts +2 -2
- package/dist/components/ui/button/Button.vue.d.ts +3 -1
- package/dist/components/ui/button/index.d.ts +2 -2
- package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
- package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
- package/dist/components/ui/combobox/Combobox.vue.d.ts +2 -2
- package/dist/components/ui/combobox/ComboboxInput.vue.d.ts +2 -1
- package/dist/components/ui/command/Command.vue.d.ts +3 -3
- package/dist/components/ui/command/CommandInput.vue.d.ts +2 -1
- package/dist/components/ui/data-table/DataTable.vue.d.ts +5 -4
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +4 -4
- package/dist/components/ui/input/Input.vue.d.ts +19 -1
- package/dist/components/ui/multi-select/MultiSelect.vue.d.ts +8 -4
- package/dist/components/ui/progress/Progress.vue.d.ts +26 -88
- package/dist/components/ui/progress/ProgressDefault.vue.d.ts +14 -0
- package/dist/components/ui/progress/ProgressGradient.vue.d.ts +25 -0
- package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +36 -0
- package/dist/components/ui/progress/index.d.ts +5 -2
- package/dist/components/ui/progress/useProgressGeometry.d.ts +60 -0
- package/dist/components/ui/select/Select.vue.d.ts +2 -2
- package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
- package/dist/components/ui/select/SelectTrigger.vue.d.ts +3 -0
- package/dist/components/ui/sheet/index.d.ts +1 -1
- package/dist/components/ui/slider/index.d.ts +12 -11
- package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
- package/dist/components/ui/textarea/Textarea.vue.d.ts +5 -1
- package/dist/components/ui/toast/Toast.vue.d.ts +4 -4
- package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
- package/dist/components/ui/toggle/index.d.ts +1 -1
- package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +2 -3
- package/dist/composables/color/index.d.ts +49 -0
- package/dist/composables/context/createContext.d.ts +56 -0
- package/dist/composables/context/index.d.ts +1 -0
- package/dist/composables/dark/darkModeSyncScript.d.ts +23 -0
- package/dist/composables/dark/index.d.ts +3 -0
- package/dist/composables/dark/useGlobalDark.d.ts +19 -2
- package/dist/composables/dom/index.d.ts +0 -3
- package/dist/composables/dom/useClipboard.d.ts +35 -12
- package/dist/composables/dom/useDocumentVisibility.d.ts +20 -0
- package/dist/composables/glass/webgl/compile.d.ts +15 -0
- package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +3 -0
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +55 -0
- package/dist/composables/motion/core/index.d.ts +1 -1
- package/dist/composables/motion/index.d.ts +1 -1
- package/dist/composables/motion/useCountup.d.ts +29 -0
- package/dist/composables/motion/useNumericTransition.d.ts +14 -3
- package/dist/composables/motion/vReveal.d.ts +2 -0
- package/dist/composables/sidebar/useSidebarState.d.ts +2 -2
- package/dist/composables/sortable/dragController.d.ts +44 -0
- package/dist/composables/sortable/dropResolver.d.ts +34 -0
- package/dist/composables/sortable/ghostRenderer.d.ts +44 -0
- package/dist/composables/sortable/index.d.ts +1 -1
- package/dist/composables/sortable/touchGate.d.ts +26 -0
- package/dist/composables/sortable/transitionTiming.d.ts +50 -0
- package/dist/composables/sortable/types.d.ts +133 -0
- package/dist/composables/sortable/useSortable.d.ts +25 -153
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +1 -1
- package/dist/controls.js +4 -4
- package/dist/createContext-DBMGRlx4.js +25 -0
- package/dist/dark.d.ts +2 -1
- package/dist/dark.js +9 -2
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +1 -1
- package/dist/disco-glyph.js +1 -1
- package/dist/dock.js +400 -261
- package/dist/dockContext-spUj_-E5.js +9 -0
- package/dist/dom.js +6 -6
- package/dist/{dropdown-menu-naE0skDg.js → dropdown-menu-EFjl5iKo.js} +1 -1
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +26 -20
- package/dist/fonts/README.md +21 -0
- package/dist/fonts/fraunces/fraunces-latin.woff2 +0 -0
- package/dist/forms.js +68 -59
- package/dist/glass-panel.js +1 -1
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +226 -328
- package/dist/glyph-face.js +2 -2
- package/dist/goo-blob.d.ts +1 -0
- package/dist/goo-blob.js +538 -0
- package/dist/header-ribbon.js +2 -2
- package/dist/hover-card.js +1 -1
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/instrument-chassis.js +1 -1
- package/dist/instrument-rail.js +1 -1
- package/dist/keys-BFoma9vm.js +9 -0
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +57 -39
- package/dist/metric-badge.js +1 -1
- package/dist/motion-core.js +82 -123
- package/dist/motion.js +62 -14
- package/dist/number-field.js +1 -1
- package/dist/paper-backdrop.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/{presets-BpTf63Hp.js → presets-1OhFpaIC.js} +1 -1
- package/dist/prng-Bz_1Tydc.js +15 -0
- package/dist/progress.js +2 -2
- package/dist/reactive.js +2 -2
- package/dist/responsive-tabs.js +38 -32
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +8 -8
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-wx8ifVFB.js → slider-BOh8ycfZ.js} +7 -11
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +36 -38
- package/dist/stacked-icons.js +2 -2
- package/dist/styles/animations.css +1 -1
- package/dist/styles/cards.css +1 -1
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock-controls.css +486 -0
- package/dist/styles/dock.css +284 -450
- package/dist/styles/fonts.css +25 -0
- package/dist/styles/glass-specular-track.css +154 -0
- package/dist/styles/glass.css +74 -2
- package/dist/styles/index.css +21 -2
- package/dist/styles/instrument-chassis.css +11 -4
- package/dist/styles/theme.css +73 -21
- package/dist/styles/tokens.css +271 -140
- package/dist/styles/typography.css +14 -8
- package/dist/styles/utilities.css +36 -8
- package/dist/styles/view-transition.css +10 -4
- package/dist/switch.js +1 -1
- package/dist/tabs.js +139 -112
- package/dist/timeline.js +219 -158
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/tokens.d.ts +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/{useAnimatedNumber-BOxrS3a6.js → useAnimatedNumber-BF6r64lA.js} +1 -1
- package/dist/useClipboard-D8vFyRCa.js +97 -0
- package/dist/{useConfiguratorState-Dq2gNv4A.js → useConfiguratorState-DUtC1jxr.js} +82 -86
- package/dist/useGlobalDark-CWiaCoEw.js +34 -0
- package/dist/useIntersectionPause-DAdVPVp4.js +53 -0
- package/dist/useSortable-DnyGXKKY.js +246 -0
- package/dist/{useTouchGate-XX8gHfay.js → useTouchGate-CS5Csc2h.js} +1 -1
- package/dist/utils/prng.d.ts +4 -0
- package/dist/vReveal-u2wSG2El.js +35 -0
- package/dist/watercolor-dot.d.ts +1 -0
- package/dist/watercolor-dot.js +129 -0
- package/package.json +101 -16
- package/src/fonts/README.md +21 -0
- package/src/fonts/fraunces/fraunces-latin.woff2 +0 -0
- package/src/styles/animations.css +1 -1
- package/src/styles/cards.css +1 -1
- package/src/styles/dock-controls.css +486 -0
- package/src/styles/dock.css +284 -450
- package/src/styles/fonts.css +25 -0
- package/src/styles/glass-specular-track.css +154 -0
- package/src/styles/glass.css +74 -2
- package/src/styles/index.css +21 -2
- package/src/styles/instrument-chassis.css +11 -4
- package/src/styles/theme.css +73 -21
- package/src/styles/tokens.css +271 -140
- package/src/styles/typography.css +14 -8
- package/src/styles/utilities.css +36 -8
- package/src/styles/view-transition.css +10 -4
- package/dist/DataTable-BsrDYdoE.js +0 -460
- package/dist/DialogContent-B61rP8lj.js +0 -93
- package/dist/HoverPopover-BlEwqG7S.js +0 -96
- package/dist/Input-IFsIzId2.js +0 -30
- package/dist/Progress-Bs44qWEM.js +0 -126
- package/dist/UnderlineTabs-B4FV2zi_.js +0 -37
- package/dist/components/custom/aurora/shaders/aurora.frag.d.ts +0 -1
- package/dist/composables/dom/useBreakpoint.d.ts +0 -38
- package/dist/composables/dom/useIdleReady.d.ts +0 -63
- package/dist/composables/dom/useViewportReady.d.ts +0 -87
- package/dist/composables/glass/webgl/frostShader.d.ts +0 -27
- package/dist/composables/motion/useAnimatedNumberMap.d.ts +0 -29
- package/dist/composables/motion/useStagger.d.ts +0 -50
- package/dist/dockContext-DM58L1Jt.js +0 -16
- package/dist/keys-SIKQYNx1.js +0 -11
- package/dist/supportsCssTimeline-IQY3gfKD.js +0 -12
- package/dist/useGlobalDark-BUUTZvkU.js +0 -24
- package/dist/useIdleReady-sLhGo6CL.js +0 -162
- package/dist/useIntersectionPause-CUmANkoc.js +0 -39
- package/dist/useSortable-DLK9kwZp.js +0 -189
- /package/dist/{HoverCardContent-DGUhpRVt.js → HoverCardContent-ICfIMZX1.js} +0 -0
- /package/dist/{InstrumentChassis-CqKPBNqp.js → InstrumentChassis-DaHIZCqy.js} +0 -0
- /package/dist/{InstrumentRail-CCjvKkpB.js → InstrumentRail-B0qqLFN0.js} +0 -0
- /package/dist/{Label-D53EOwLE.js → Label-CZk-3nTc.js} +0 -0
- /package/dist/{PaperBackdrop-Ds-wDsKf.js → PaperBackdrop-D_YZW47j.js} +0 -0
- /package/dist/{SelectGroup-DAgcsfFw.js → SelectGroup-CMdoCjRE.js} +0 -0
- /package/dist/{SelectSeparator-DN1jzLaI.js → SelectSeparator-CaJnPF3_.js} +0 -0
- /package/dist/{Separator-DXxac0j8.js → Separator-C2XtAXRp.js} +0 -0
- /package/dist/{Switch-imA0Hdjs.js → Switch-x8n6husW.js} +0 -0
- /package/dist/{Toaster-Brs6QjBU.js → Toaster-DdhMKfus.js} +0 -0
- /package/dist/{TooltipProvider-MZFRxOvT.js → TooltipProvider-D-JrSqDu.js} +0 -0
- /package/dist/components/custom/aurora/{renderMode.d.ts → constants/renderMode.d.ts} +0 -0
- /package/dist/components/custom/aurora/{shaders → constants/shaders}/aurora.vert.d.ts +0 -0
- /package/dist/{constants-DfWPi8kh.js → constants-DsCdlK9I.js} +0 -0
- /package/dist/{sheet-BnvZRXPq.js → sheet-CQYYrkr9.js} +0 -0
- /package/dist/{useGlassRenderer-C98tZnJ7.js → useGlassRenderer-Dn3WpfG-.js} +0 -0
- /package/dist/{useInterval-B58LmYth.js → useInterval-CHVYFpXV.js} +0 -0
- /package/dist/{useResizeObserver-C_7GjpRn.js → useResizeObserver-DX-STszm.js} +0 -0
- /package/dist/{useTextHighlight-CLST6an0.js → useTextHighlight-Dmtofpk2.js} +0 -0
- /package/dist/{useTimer-6FoosoDY.js → useTimer-DGgoxTXL.js} +0 -0
- /package/dist/{useUserInvalidAria-BW5iyqWR.js → useUserInvalidAria-DmvZ_6Dx.js} +0 -0
- /package/dist/{useViewTransition-CUJM7fXT.js → useViewTransition-D4ssvnXZ.js} +0 -0
package/dist/styles/dock.css
CHANGED
|
@@ -19,7 +19,11 @@
|
|
|
19
19
|
) {
|
|
20
20
|
--dock-motion-fast: var(--duration-fast) var(--ease-standard);
|
|
21
21
|
--dock-motion-standard: var(--duration-normal) var(--ease-standard);
|
|
22
|
-
|
|
22
|
+
/* AT.W6-dock-c — the FLIP-fallback timing. `--dock-resize-spring` (the
|
|
23
|
+
`--spring-snappy` linear()) is the single source curve the native
|
|
24
|
+
View-Transition path ALSO consumes, so the morph is timing-identical
|
|
25
|
+
across engines. */
|
|
26
|
+
--dock-motion-resize: var(--duration-normal) var(--dock-resize-spring);
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
/* Shared four-state contract — the focus-visible ring + disabled paint are
|
|
@@ -64,6 +68,20 @@
|
|
|
64
68
|
position: relative;
|
|
65
69
|
display: inline-flex;
|
|
66
70
|
align-items: center;
|
|
71
|
+
/* AW.W1 — the dock does NOT establish a default inline-size container.
|
|
72
|
+
`container-type: inline-size` applies `contain: inline-size`, which
|
|
73
|
+
makes an element's inline size INDEPENDENT of its contents — fatally
|
|
74
|
+
incompatible with a shrink-to-fit pill: under it `.glass-dock` cannot
|
|
75
|
+
size to its content and collapses to its padding floor (~19px) with the
|
|
76
|
+
active layer overflowing (the 3.3.0 regression — every horizontal dock,
|
|
77
|
+
collapsed AND always-expanded, rendered as a sliver). The `dock`-named
|
|
78
|
+
container is now OPT-IN via the `containerName` prop: a consumer
|
|
79
|
+
embedding the dock in a width-CONSTRAINED host (a 320px sidebar) sets
|
|
80
|
+
`containerName="dock"` to get the descendant container-query reads (the
|
|
81
|
+
audacious-label compression below), trading shrink-to-fit for the
|
|
82
|
+
host-constrained width it already has there. The default free-floating
|
|
83
|
+
dock shrink-wraps to its content (AV.W16 TW3 made this a default and
|
|
84
|
+
silently broke dock sizing for the common case). */
|
|
67
85
|
border-radius: var(--radius-dock);
|
|
68
86
|
white-space: nowrap;
|
|
69
87
|
max-inline-size: var(--dock-max-inline-size);
|
|
@@ -71,18 +89,19 @@
|
|
|
71
89
|
background: var(--glass-bg-dock, var(--glass-bg-resting));
|
|
72
90
|
backdrop-filter: var(--dock-surface-blur);
|
|
73
91
|
border: 1.5px solid var(--glass-border-dock, var(--glass-border-resting));
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
is
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
92
|
+
/* AV.W15 M3 — the full-perimeter `--glass-edge-light` rim rides as the
|
|
93
|
+
leading inset layer of the dock shadow stack (the navigation-band
|
|
94
|
+
silhouette catch-light, distinct from the top-only highlight). */
|
|
95
|
+
box-shadow: var(--glass-edge-light), var(--shadow-dock-override, var(--shadow-dock));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/* `overflow: hidden` is the clip shell for every dock. AT.W7-dock-a
|
|
99
|
+
folded out the prior `containerName` clip-lift (the container-query
|
|
100
|
+
opt-in is orthogonal — it no longer silently changes the clip), so the
|
|
101
|
+
clip applies universally and the `.expanded` / `.always-expanded` /
|
|
102
|
+
`.dock-overflow-wrap` states lift it back to `visible` where they need to
|
|
103
|
+
grow. A consumer wanting multi-line content opts into `overflow="wrap"`. */
|
|
104
|
+
.glass-dock {
|
|
86
105
|
overflow: hidden;
|
|
87
106
|
}
|
|
88
107
|
|
|
@@ -92,10 +111,22 @@
|
|
|
92
111
|
--dock-control-size: var(--dock-density-compact-control-size, 2rem);
|
|
93
112
|
--dock-layer-height: var(--dock-density-compact-layer-height, 2rem);
|
|
94
113
|
--dock-layer-gap: var(--dock-density-compact-gap, 0.25rem);
|
|
95
|
-
--dock-trigger-padding-block: var(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
114
|
+
--dock-trigger-padding-block: var(
|
|
115
|
+
--dock-density-compact-trigger-padding-block,
|
|
116
|
+
0.1875rem
|
|
117
|
+
);
|
|
118
|
+
--dock-trigger-padding-inline: var(
|
|
119
|
+
--dock-density-compact-trigger-padding-inline,
|
|
120
|
+
0.4375rem
|
|
121
|
+
);
|
|
122
|
+
--dock-tab-padding-block: var(
|
|
123
|
+
--dock-density-compact-tab-padding-block,
|
|
124
|
+
0.3125rem
|
|
125
|
+
);
|
|
126
|
+
--dock-tab-padding-inline: var(
|
|
127
|
+
--dock-density-compact-tab-padding-inline,
|
|
128
|
+
0.625rem
|
|
129
|
+
);
|
|
99
130
|
--dock-tab-h: 32px;
|
|
100
131
|
}
|
|
101
132
|
|
|
@@ -107,10 +138,22 @@
|
|
|
107
138
|
--dock-control-size: var(--dock-density-comfortable-control-size, 2.5rem);
|
|
108
139
|
--dock-layer-height: var(--dock-density-comfortable-layer-height, 2.5rem);
|
|
109
140
|
--dock-layer-gap: var(--dock-density-comfortable-gap, 0.375rem);
|
|
110
|
-
--dock-trigger-padding-block: var(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
141
|
+
--dock-trigger-padding-block: var(
|
|
142
|
+
--dock-density-comfortable-trigger-padding-block,
|
|
143
|
+
0.25rem
|
|
144
|
+
);
|
|
145
|
+
--dock-trigger-padding-inline: var(
|
|
146
|
+
--dock-density-comfortable-trigger-padding-inline,
|
|
147
|
+
0.5rem
|
|
148
|
+
);
|
|
149
|
+
--dock-tab-padding-block: var(
|
|
150
|
+
--dock-density-comfortable-tab-padding-block,
|
|
151
|
+
0.4375rem
|
|
152
|
+
);
|
|
153
|
+
--dock-tab-padding-inline: var(
|
|
154
|
+
--dock-density-comfortable-tab-padding-inline,
|
|
155
|
+
0.75rem
|
|
156
|
+
);
|
|
114
157
|
--dock-tab-h: 38px;
|
|
115
158
|
}
|
|
116
159
|
|
|
@@ -120,10 +163,22 @@
|
|
|
120
163
|
--dock-control-size: var(--dock-density-spacious-control-size, 2.75rem);
|
|
121
164
|
--dock-layer-height: var(--dock-density-spacious-layer-height, 2.75rem);
|
|
122
165
|
--dock-layer-gap: var(--dock-density-spacious-gap, 0.5rem);
|
|
123
|
-
--dock-trigger-padding-block: var(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
166
|
+
--dock-trigger-padding-block: var(
|
|
167
|
+
--dock-density-spacious-trigger-padding-block,
|
|
168
|
+
0.375rem
|
|
169
|
+
);
|
|
170
|
+
--dock-trigger-padding-inline: var(
|
|
171
|
+
--dock-density-spacious-trigger-padding-inline,
|
|
172
|
+
0.625rem
|
|
173
|
+
);
|
|
174
|
+
--dock-tab-padding-block: var(
|
|
175
|
+
--dock-density-spacious-tab-padding-block,
|
|
176
|
+
0.5rem
|
|
177
|
+
);
|
|
178
|
+
--dock-tab-padding-inline: var(
|
|
179
|
+
--dock-density-spacious-tab-padding-inline,
|
|
180
|
+
0.875rem
|
|
181
|
+
);
|
|
127
182
|
--dock-tab-h: 44px;
|
|
128
183
|
}
|
|
129
184
|
|
|
@@ -137,25 +192,47 @@
|
|
|
137
192
|
--dock-control-size: var(--dock-density-audacious-control-size, 4rem);
|
|
138
193
|
--dock-layer-height: var(--dock-density-audacious-layer-height, 4rem);
|
|
139
194
|
--dock-layer-gap: var(--dock-density-audacious-gap, 0.875rem);
|
|
140
|
-
--dock-trigger-padding-block: var(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
195
|
+
--dock-trigger-padding-block: var(
|
|
196
|
+
--dock-density-audacious-trigger-padding-block,
|
|
197
|
+
0.625rem
|
|
198
|
+
);
|
|
199
|
+
--dock-trigger-padding-inline: var(
|
|
200
|
+
--dock-density-audacious-trigger-padding-inline,
|
|
201
|
+
1rem
|
|
202
|
+
);
|
|
203
|
+
--dock-tab-padding-block: var(
|
|
204
|
+
--dock-density-audacious-tab-padding-block,
|
|
205
|
+
0.5rem
|
|
206
|
+
);
|
|
207
|
+
--dock-tab-padding-inline: var(
|
|
208
|
+
--dock-density-audacious-tab-padding-inline,
|
|
209
|
+
1.5rem
|
|
210
|
+
);
|
|
144
211
|
--dock-tab-min-height: var(--dock-density-audacious-tab-min-height, 3.5rem);
|
|
145
212
|
--dock-tab-h: var(--dock-density-audacious-tab-min-height, 3.5rem);
|
|
146
213
|
}
|
|
147
214
|
|
|
148
|
-
/* Density-audacious
|
|
149
|
-
label glyphs compress so the chrome
|
|
150
|
-
(≤14px
|
|
151
|
-
`
|
|
152
|
-
|
|
153
|
-
|
|
215
|
+
/* Density-audacious narrow-box carve (AV.W16 TW3) — when the dock's OWN
|
|
216
|
+
box is narrow the audacious-dock label glyphs compress so the chrome
|
|
217
|
+
doesn't overflow its host (≤14px below 30rem, 15px 30–45rem). Keyed off
|
|
218
|
+
the dock's `dock` inline-size container — now OPT-IN via the
|
|
219
|
+
`containerName="dock"` prop (AW.W1 removed the always-on default that
|
|
220
|
+
broke shrink-to-fit), so it fires only for a dock the consumer has
|
|
221
|
+
width-CONSTRAINED into a host (the 320px sidebar case) where the
|
|
222
|
+
compression is meaningful and the containment does not collapse the box.
|
|
223
|
+
A free-floating dock shrink-wraps (box == content) so there is nothing to
|
|
224
|
+
compress. The var
|
|
225
|
+
is set on the `.dock-label` descendant (which reads it via
|
|
226
|
+
`font-size: var(--dock-label-size)`, typography.css). Thresholds keep
|
|
227
|
+
the prior 479/719px viewport cadence as box widths (30rem ≈ 480px,
|
|
228
|
+
45rem ≈ 720px at the 16px root). */
|
|
229
|
+
@container dock (max-width: 29.9375rem) {
|
|
230
|
+
.glass-dock[data-density="audacious"] .dock-label {
|
|
154
231
|
--dock-label-size: 14px;
|
|
155
232
|
}
|
|
156
233
|
}
|
|
157
|
-
@
|
|
158
|
-
.glass-dock[data-density="audacious"] {
|
|
234
|
+
@container dock (min-width: 30rem) and (max-width: 44.9375rem) {
|
|
235
|
+
.glass-dock[data-density="audacious"] .dock-label {
|
|
159
236
|
--dock-label-size: 15px;
|
|
160
237
|
}
|
|
161
238
|
}
|
|
@@ -192,7 +269,7 @@
|
|
|
192
269
|
}
|
|
193
270
|
|
|
194
271
|
/* Vertical rails grow-to-fit + clamp, no scroll: descendants wrap to
|
|
195
|
-
multiple rows (opt-in via `
|
|
272
|
+
multiple rows (opt-in via `overflow="wrap"`) or clamp via
|
|
196
273
|
`--dock-max-block-size`; the cap fails visibly rather than masking
|
|
197
274
|
overflow as a scroll affordance. No edge-fade mask — a rail that never
|
|
198
275
|
scrolls has nothing to feather. */
|
|
@@ -262,7 +339,10 @@
|
|
|
262
339
|
* `.variant-instrument-strip` — chassis-strip carries ONE canonical
|
|
263
340
|
* border-radius (`--radius-card`), per the chassis family. */
|
|
264
341
|
.glass-dock.variant-instrument-strip {
|
|
265
|
-
padding: var(
|
|
342
|
+
padding: var(
|
|
343
|
+
--dock-instrument-strip-padding,
|
|
344
|
+
var(--dock-padding-inline, 0.75rem)
|
|
345
|
+
);
|
|
266
346
|
background: var(--glass-bg-chassis, var(--glass-bg-wash));
|
|
267
347
|
border: 1px solid var(--glass-border-quiet, var(--glass-border-resting));
|
|
268
348
|
border-radius: var(--radius-card);
|
|
@@ -305,7 +385,10 @@
|
|
|
305
385
|
}
|
|
306
386
|
|
|
307
387
|
.glass-dock.collapsed .dock-layer--summary {
|
|
308
|
-
min-width: var(
|
|
388
|
+
min-width: var(
|
|
389
|
+
--dock-collapsed-summary-min-size,
|
|
390
|
+
var(--dock-layer-height, 2.5rem)
|
|
391
|
+
);
|
|
309
392
|
justify-content: center;
|
|
310
393
|
}
|
|
311
394
|
|
|
@@ -383,15 +466,43 @@
|
|
|
383
466
|
transition: width var(--dock-motion-resize);
|
|
384
467
|
}
|
|
385
468
|
|
|
469
|
+
/* AV.W9.0 — the AU.W8b native container-morph arm (the `@supports` block that
|
|
470
|
+
opted the subtree into auto-to-length width interpolation and declared the
|
|
471
|
+
active layer's destination width as intrinsic) is RETIRED. It was never made
|
|
472
|
+
mutually exclusive with the `SpringProgress` FLIP driver in
|
|
473
|
+
`useLayerTransition.ts`: on Chrome 129+ the native arm interpolated
|
|
474
|
+
`.dock-layers` width on the browser's own clock WHILE the spring wrote inline
|
|
475
|
+
`width` per frame — a dual-driver race over the SAME property that cancelled
|
|
476
|
+
the morph and froze the dock at runtime (born-RED under
|
|
477
|
+
`proof:dock-animation-live`). One authority per concern: the size morph now
|
|
478
|
+
has exactly ONE driver on every engine — the `SpringProgress` FLIP path above
|
|
479
|
+
(`:382`), or the orthogonal View-Transitions path inside
|
|
480
|
+
`startViewTransition` (which owns size + crossfade as a single browser-side
|
|
481
|
+
mutation and never touches inline width). Neither coexists with a CSS-native
|
|
482
|
+
intrinsic-width destination, so the race is gone. This re-expresses the
|
|
483
|
+
`e8380d7` "one driver owns the morph" invariant on the modern
|
|
484
|
+
FLIP+spring(+VT) architecture. */
|
|
485
|
+
|
|
386
486
|
/* Horizontal dock content grows visibly when the active layer's natural
|
|
387
487
|
width exceeds the content area (grow-to-fit; consumers needing wrap opt
|
|
388
|
-
into `
|
|
488
|
+
into `overflow="wrap"`). No edge-fade mask — content never clips or scrolls,
|
|
389
489
|
so a feather has nothing to feather and only bleeds a stray ramp onto
|
|
390
490
|
the edge controls. */
|
|
391
|
-
.glass-dock.expanded:not(.dock-wrap) > .dock-layers {
|
|
491
|
+
.glass-dock.expanded:not(.dock-overflow-wrap) > .dock-layers {
|
|
392
492
|
overflow-x: visible;
|
|
393
493
|
}
|
|
394
494
|
|
|
495
|
+
/* AU.W8b-visibility-fork — the 3-state active/inactive/leaving visibility
|
|
496
|
+
contract below is LOAD-BEARING (the a11y-006 bite-anchor). A later refactor
|
|
497
|
+
greps for this marker so the semantics are not collapsed: the inactive layer
|
|
498
|
+
leaves the hit-test tree (`visibility:hidden`), the leaving layer stays
|
|
499
|
+
painted-but-untouchable through its fade (`visibility:visible` +
|
|
500
|
+
`pointer-events:none`), and the active layer shows IMMEDIATELY (`visibility
|
|
501
|
+
0s`, no fade-in delay). The hand-rolled 3-state fork below is now the SOLE
|
|
502
|
+
visibility authority on every engine — AV.W9.1 retired the native
|
|
503
|
+
discrete-visibility arm that used to second-drive it, so one owner governs
|
|
504
|
+
visibility (one owner governs size, one owns opacity). */
|
|
505
|
+
|
|
395
506
|
/* ── Layer crossfade + hit-test contract (shared) ──────────────────
|
|
396
507
|
Two dock-layer surfaces stack on a 1/1 CSS grid and crossfade:
|
|
397
508
|
`.dock-layer` (GlassDock's built-in collapsed↔expanded pair) and
|
|
@@ -409,12 +520,21 @@
|
|
|
409
520
|
flow, so the FLIP width measurement in `useLayerTransition` still
|
|
410
521
|
reads its geometry (`display:none` would zero it). The delayed
|
|
411
522
|
`visibility` transition holds a leaving layer `visible` for the
|
|
412
|
-
length of the opacity crossfade, then flips it `hidden`.
|
|
523
|
+
length of the opacity crossfade, then flips it `hidden`.
|
|
524
|
+
|
|
525
|
+
AU.W2 — the opacity-lockstep fold (slides-F P0, the "not iOS-smooth"
|
|
526
|
+
report). The layer fade rides `--dock-motion-resize` (the SAME duration +
|
|
527
|
+
spring the container morph runs at, `:189`/`:216`/`:385`) — NOT the faster
|
|
528
|
+
`--dock-motion-fast` (0.2s). Before, the host faded in 0.2s while the
|
|
529
|
+
container morphed in 0.3s: a 100ms-apart settle (the items appeared to lag
|
|
530
|
+
the pill). Now the fade and the morph settle in lockstep. The matched
|
|
531
|
+
`visibility` hold extends to `--duration-normal` so the leaving layer stays
|
|
532
|
+
paintable for the FULL (now longer) crossfade. */
|
|
413
533
|
.dock-layer,
|
|
414
534
|
.dock-layer-item-host {
|
|
415
535
|
transition:
|
|
416
|
-
opacity var(--dock-motion-
|
|
417
|
-
visibility 0s linear var(--duration-
|
|
536
|
+
opacity var(--dock-motion-resize),
|
|
537
|
+
visibility 0s linear var(--duration-normal);
|
|
418
538
|
}
|
|
419
539
|
|
|
420
540
|
.dock-layer:not(.layer-active),
|
|
@@ -429,9 +549,12 @@
|
|
|
429
549
|
opacity: 1;
|
|
430
550
|
visibility: visible;
|
|
431
551
|
pointer-events: auto;
|
|
432
|
-
/* The active layer shows immediately — no deferred `visibility`.
|
|
552
|
+
/* The active layer shows immediately — no deferred `visibility`. AU.W2:
|
|
553
|
+
the opacity rides `--dock-motion-resize` (lockstep with the container
|
|
554
|
+
morph), but the `visibility 0s` stays immediate (the `:434` rule
|
|
555
|
+
governs — the active layer must paint at once, no fade-in delay). */
|
|
433
556
|
transition:
|
|
434
|
-
opacity var(--dock-motion-
|
|
557
|
+
opacity var(--dock-motion-resize),
|
|
435
558
|
visibility 0s;
|
|
436
559
|
}
|
|
437
560
|
|
|
@@ -445,6 +568,19 @@
|
|
|
445
568
|
pointer-events: none;
|
|
446
569
|
}
|
|
447
570
|
|
|
571
|
+
/* AV.W9.1 — the AU.W8b native discrete-visibility arm (the second `@supports`
|
|
572
|
+
block that expressed the 3-state contract as one discrete transition over
|
|
573
|
+
opacity + visibility with a `@starting-style` entry anchor) is RETIRED. It
|
|
574
|
+
was a THIRD opacity/visibility authority overlapping the hand-rolled 3-state
|
|
575
|
+
fork above and the spring's settle — three owners for one concern. With the
|
|
576
|
+
native size arm gone (W9.0), opacity now has ONE owner everywhere: the
|
|
577
|
+
`opacity var(--dock-motion-resize)` crossfade on `.dock-layer{,-item-host}`
|
|
578
|
+
(the AU.W2 lockstep token — kept), and visibility has ONE owner: the delayed
|
|
579
|
+
`visibility 0s linear var(--duration-normal)` hold of the
|
|
580
|
+
`AU.W8b-visibility-fork` 3-state fallback above (the a11y-006 bite-anchor,
|
|
581
|
+
LOAD-BEARING). One authority per concern: size = spring/VT, opacity = the
|
|
582
|
+
CSS crossfade, visibility = the delayed-hold fork. */
|
|
583
|
+
|
|
448
584
|
/* ── Base layout — distinct per surface ─────────────────────────── */
|
|
449
585
|
.dock-layer {
|
|
450
586
|
display: flex;
|
|
@@ -503,7 +639,7 @@
|
|
|
503
639
|
so the pill's rounded edge masks the scroll boundary — hence the
|
|
504
640
|
grow-mode `overflow-x: visible` (`.dock-layers`, above) is overridden
|
|
505
641
|
back to `hidden` here. */
|
|
506
|
-
.glass-dock.dock-scroll-x.expanded:not(.dock-wrap) > .dock-layers {
|
|
642
|
+
.glass-dock.dock-scroll-x.expanded:not(.dock-overflow-wrap) > .dock-layers {
|
|
507
643
|
overflow-x: hidden;
|
|
508
644
|
}
|
|
509
645
|
|
|
@@ -539,33 +675,40 @@
|
|
|
539
675
|
display: none;
|
|
540
676
|
}
|
|
541
677
|
|
|
542
|
-
|
|
678
|
+
/* ── `overflow="wrap"` recipe (the `.dock-overflow-wrap` hook) ────────
|
|
679
|
+
Parallel to the `.dock-scroll-{x,y}` hooks the `overflow="scroll"`
|
|
680
|
+
member emits: the `overflow="wrap"` enum member emits this class. (The
|
|
681
|
+
prior `wrap` boolean's hook is retired — clean break, no alias.)
|
|
682
|
+
Expanded content wraps to multiple rows; the pill narrows to the
|
|
683
|
+
viewport gutter and snaps back to a single nowrap row past
|
|
684
|
+
`--dock-overflow-bp` (the `@media` at the tail). */
|
|
685
|
+
.glass-dock.dock-overflow-wrap {
|
|
543
686
|
white-space: normal;
|
|
544
687
|
border-radius: var(--radius-2xl);
|
|
545
688
|
max-width: var(--dock-wrap-max-width);
|
|
546
|
-
padding:
|
|
547
|
-
var(--dock-wrap-padding-block, var(--dock-padding-block, 0.375rem))
|
|
689
|
+
padding: var(--dock-wrap-padding-block, var(--dock-padding-block, 0.375rem))
|
|
548
690
|
var(--dock-wrap-padding-inline, 0.625rem);
|
|
549
691
|
}
|
|
550
692
|
|
|
551
|
-
.glass-dock.dock-wrap .dock-layer--full {
|
|
693
|
+
.glass-dock.dock-overflow-wrap .dock-layer--full {
|
|
552
694
|
flex-wrap: wrap;
|
|
553
695
|
justify-content: center;
|
|
554
696
|
height: auto;
|
|
555
697
|
min-height: var(--dock-wrap-layer-min-height, var(--dock-layer-height, 2rem));
|
|
556
|
-
gap: var(--dock-wrap-row-gap, 0.25rem)
|
|
698
|
+
gap: var(--dock-wrap-row-gap, 0.25rem)
|
|
699
|
+
var(--dock-wrap-column-gap, var(--dock-layer-gap, 0.375rem));
|
|
557
700
|
}
|
|
558
701
|
|
|
559
|
-
.glass-dock.dock-wrap .dock-layer--summary {
|
|
702
|
+
.glass-dock.dock-overflow-wrap .dock-layer--summary {
|
|
560
703
|
height: auto;
|
|
561
704
|
min-height: var(--dock-wrap-layer-min-height, var(--dock-layer-height, 2rem));
|
|
562
705
|
}
|
|
563
706
|
|
|
564
|
-
.glass-dock.dock-wrap .dock-separator {
|
|
707
|
+
.glass-dock.dock-overflow-wrap .dock-separator {
|
|
565
708
|
display: none;
|
|
566
709
|
}
|
|
567
710
|
|
|
568
|
-
.glass-dock.dock-wrap.collapsed {
|
|
711
|
+
.glass-dock.dock-overflow-wrap.collapsed {
|
|
569
712
|
border-radius: var(--radius-pill);
|
|
570
713
|
white-space: nowrap;
|
|
571
714
|
max-width: none;
|
|
@@ -633,7 +776,16 @@
|
|
|
633
776
|
border-top: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
|
|
634
777
|
}
|
|
635
778
|
|
|
779
|
+
/* AU.W8.4 — the rail is a reka-ui Tabs contract. The travelling
|
|
780
|
+
`.dock-layer-tab-indicator` (the reka TabsIndicator) now carries the
|
|
781
|
+
active affordance; the rail is `position: relative` so the indicator's
|
|
782
|
+
absolute placement is rail-local. */
|
|
783
|
+
.dock-layer-rail {
|
|
784
|
+
position: relative;
|
|
785
|
+
}
|
|
786
|
+
|
|
636
787
|
.dock-layer-rail .dock-layer-tab {
|
|
788
|
+
position: relative;
|
|
637
789
|
display: inline-flex;
|
|
638
790
|
align-items: center;
|
|
639
791
|
justify-content: center;
|
|
@@ -646,6 +798,8 @@
|
|
|
646
798
|
cursor: pointer;
|
|
647
799
|
font: inherit;
|
|
648
800
|
font-size: 0.75rem;
|
|
801
|
+
/* The tab glyph rides above the travelling indicator backplate. */
|
|
802
|
+
z-index: 1;
|
|
649
803
|
transition:
|
|
650
804
|
background var(--dock-motion-fast),
|
|
651
805
|
color var(--dock-motion-fast);
|
|
@@ -656,11 +810,47 @@
|
|
|
656
810
|
color: var(--foreground);
|
|
657
811
|
}
|
|
658
812
|
|
|
659
|
-
|
|
660
|
-
|
|
813
|
+
/* AU.W8.4 — KEEP the active glyph tint on the selected tab (reka emits
|
|
814
|
+
`data-state="active"` + `aria-selected="true"`); the per-button active
|
|
815
|
+
BACKGROUND is RETIRED — the travelling indicator carries that affordance. */
|
|
816
|
+
.dock-layer-rail .dock-layer-tab[data-state="active"] {
|
|
661
817
|
color: var(--primary);
|
|
662
818
|
}
|
|
663
819
|
|
|
820
|
+
/* AU.W8.4 — the dock control focus-ring contract does not cover
|
|
821
|
+
`.dock-layer-tab` (the rail tab is not in the `.dock-icon-button` family).
|
|
822
|
+
The roving tabindex means only the active tab is in the tab order; a
|
|
823
|
+
focus-visible tab paints the shared dock ring. */
|
|
824
|
+
.dock-layer-rail [role="tab"]:focus-visible {
|
|
825
|
+
box-shadow: var(--focus-ring-shadow);
|
|
826
|
+
outline: none;
|
|
827
|
+
}
|
|
828
|
+
|
|
829
|
+
/* AU.W8.4 — the travelling indicator (reka TabsIndicator). reka computes
|
|
830
|
+
`--reka-tabs-indicator-position` + `--reka-tabs-indicator-size` from the
|
|
831
|
+
active tab's geometry; the indicator morphs between tabs riding
|
|
832
|
+
`--dock-motion-resize` (= `--spring-dock` after AU.W8.2) — NOT a hardcoded
|
|
833
|
+
`--spring-snappy`. It paints the active-tab backplate the per-button
|
|
834
|
+
`.is-active` background used to. */
|
|
835
|
+
.dock-layer-rail .dock-layer-tab-indicator {
|
|
836
|
+
position: absolute;
|
|
837
|
+
left: 0;
|
|
838
|
+
top: 0;
|
|
839
|
+
height: var(--dock-layer-tab-size, var(--dock-control-size, 1.75rem));
|
|
840
|
+
width: var(--reka-tabs-indicator-size);
|
|
841
|
+
transform: translateX(var(--reka-tabs-indicator-position));
|
|
842
|
+
border-radius: var(--dock-layer-tab-radius, var(--radius-sm));
|
|
843
|
+
background: color-mix(in srgb, var(--primary) 15%, transparent);
|
|
844
|
+
transition:
|
|
845
|
+
width var(--dock-motion-resize),
|
|
846
|
+
transform var(--dock-motion-resize);
|
|
847
|
+
pointer-events: none;
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
/* For a vertical rail the indicator travels along the inline axis still
|
|
851
|
+
(the horizontal-always keyboard decision keeps the indicator inline);
|
|
852
|
+
reka's position var resolves to the active tab offset regardless. */
|
|
853
|
+
|
|
664
854
|
.dock-layer-stack {
|
|
665
855
|
position: relative;
|
|
666
856
|
display: grid;
|
|
@@ -706,79 +896,14 @@
|
|
|
706
896
|
height: max-content;
|
|
707
897
|
}
|
|
708
898
|
|
|
709
|
-
.dock-icon-button
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
height: var(--dock-control-size, var(--size-icon-btn));
|
|
718
|
-
padding: var(--dock-icon-padding, 0);
|
|
719
|
-
cursor: pointer;
|
|
720
|
-
border: none;
|
|
721
|
-
background: transparent;
|
|
722
|
-
border-radius: var(--dock-control-radius, var(--radius-pill));
|
|
723
|
-
/* Foreground base routes through `--dock-fg-on-aurora` (defaults to
|
|
724
|
-
`--foreground`, byte-identical to before) so a consumer floating the
|
|
725
|
-
dock over an aurora can lift contrast per-backdrop. The muted icon
|
|
726
|
-
weight mixes that base down with `--opacity-icon-muted`. */
|
|
727
|
-
color: color-mix(in srgb, var(--dock-fg-on-aurora, var(--foreground)) calc(var(--opacity-icon-muted) * 100%), transparent);
|
|
728
|
-
outline: none;
|
|
729
|
-
transition:
|
|
730
|
-
background-color var(--dock-motion-fast),
|
|
731
|
-
color var(--dock-motion-fast),
|
|
732
|
-
scale var(--dock-motion-fast),
|
|
733
|
-
opacity var(--dock-motion-fast);
|
|
734
|
-
}
|
|
735
|
-
|
|
736
|
-
.dock-icon-button--compact {
|
|
737
|
-
width: var(--dock-compact-control-size, auto);
|
|
738
|
-
height: var(--dock-compact-control-size, auto);
|
|
739
|
-
min-width: var(--dock-compact-control-min-width, 0);
|
|
740
|
-
padding: var(--dock-compact-control-padding, 0.25rem);
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
.dock-icon-button:hover:not(:disabled) {
|
|
744
|
-
background: var(--muted);
|
|
745
|
-
color: var(--btn-hover-color, var(--foreground));
|
|
746
|
-
scale: var(--scale-hover-dock);
|
|
747
|
-
}
|
|
748
|
-
|
|
749
|
-
.dock-icon-button:active:not(:disabled) {
|
|
750
|
-
scale: var(--scale-press-dock);
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
.dock-icon-button:focus:not(:focus-visible) {
|
|
754
|
-
box-shadow: none;
|
|
755
|
-
outline: none;
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
/* focus-visible ring + disabled paint hoisted to the shared `:where()`
|
|
759
|
-
group at the top; this rule adds only the box-shadow fade transition. */
|
|
760
|
-
.dock-icon-button:focus-visible {
|
|
761
|
-
transition:
|
|
762
|
-
background-color var(--dock-motion-fast),
|
|
763
|
-
color var(--dock-motion-fast),
|
|
764
|
-
scale var(--dock-motion-fast),
|
|
765
|
-
opacity var(--dock-motion-fast),
|
|
766
|
-
box-shadow var(--dock-motion-fast);
|
|
767
|
-
}
|
|
768
|
-
|
|
769
|
-
/* O.W6 Lane B — token-ladder active paint. Defaults match the prior
|
|
770
|
-
hardcoded recipe (--muted bg + --foreground color, no transform / border
|
|
771
|
-
/ shadow). Consumers override the active variant via the
|
|
772
|
-
`--dock-active-{bg,color,scale,border,shadow}` cohort scoped to a parent
|
|
773
|
-
(e.g. bbnf-buddy `ToolsLayer.vue` audacious active treatment) — no
|
|
774
|
-
`:deep()` escapes required. See tokens.css §10 (dock geometry block). */
|
|
775
|
-
.dock-icon-button:is(.is-active, .active, [aria-expanded="true"], [aria-pressed="true"]) {
|
|
776
|
-
background: var(--dock-active-bg);
|
|
777
|
-
color: var(--dock-active-color);
|
|
778
|
-
scale: var(--dock-active-scale);
|
|
779
|
-
border: var(--dock-active-border);
|
|
780
|
-
box-shadow: var(--dock-active-shadow);
|
|
781
|
-
}
|
|
899
|
+
/* AU.W8b.3 — the five dock CONTROL families (.dock-icon-button,
|
|
900
|
+
.dark-mode-toggle-button, .dock-tab-button + tiers, the
|
|
901
|
+
.dock-select-trigger / .dock-dropdown-trigger pair, and the coarse-pointer
|
|
902
|
+
per-button touch floor) carved out to dock-controls.css (imported directly
|
|
903
|
+
after this file in index.css, same @layer components). dock.css keeps the
|
|
904
|
+
shell / density / grain / layer-crossfade contract + the shared
|
|
905
|
+
cross-control four-state comma-groups (the :focus-visible / :disabled groups
|
|
906
|
+
+ the motion-token :where() group above). */
|
|
782
907
|
|
|
783
908
|
/* J.W3.B — `.dock-popover` substrate + `pop-up-*` / `pop-down-*`
|
|
784
909
|
Vue Transition keyframes retired. Hover-driven dock popovers
|
|
@@ -787,326 +912,42 @@
|
|
|
787
912
|
`popover-animate` motion vocabulary. Click-anchored popovers
|
|
788
913
|
(no dock-keep semantics) compose `<Popover>` directly. */
|
|
789
914
|
|
|
790
|
-
.
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
.dark-mode-toggle-button > svg {
|
|
806
|
-
width: 100%;
|
|
807
|
-
height: 100%;
|
|
808
|
-
max-width: 100%;
|
|
809
|
-
max-height: 100%;
|
|
810
|
-
}
|
|
811
|
-
|
|
812
|
-
.dark-mode-toggle-button:hover,
|
|
813
|
-
.dark-mode-toggle-button:focus {
|
|
814
|
-
background: var(--surface-tint-10);
|
|
815
|
-
opacity: 1;
|
|
816
|
-
outline: none;
|
|
817
|
-
}
|
|
818
|
-
|
|
819
|
-
.dark-mode-toggle-button:focus-visible {
|
|
820
|
-
box-shadow: var(--focus-ring-shadow);
|
|
821
|
-
}
|
|
822
|
-
|
|
823
|
-
.dark-mode-toggle-button[data-size="sm"] {
|
|
824
|
-
--dark-mode-toggle-size: 1.75rem;
|
|
825
|
-
--dark-mode-toggle-padding: 0.25rem;
|
|
826
|
-
}
|
|
827
|
-
|
|
828
|
-
.dark-mode-toggle-button[data-size="md"] {
|
|
829
|
-
--dark-mode-toggle-size: 2.25rem;
|
|
830
|
-
--dark-mode-toggle-padding: 0.375rem;
|
|
831
|
-
}
|
|
832
|
-
|
|
833
|
-
.dark-mode-toggle-button[data-size="lg"] {
|
|
834
|
-
--dark-mode-toggle-size: 2.75rem;
|
|
835
|
-
--dark-mode-toggle-padding: 0.5rem;
|
|
836
|
-
}
|
|
837
|
-
|
|
838
|
-
.dark-mode-toggle-button[data-size="control"] {
|
|
839
|
-
--dark-mode-toggle-size: var(--control-size, 2.25rem);
|
|
840
|
-
--dark-mode-toggle-padding: var(--control-icon-padding, 0.375rem);
|
|
841
|
-
}
|
|
842
|
-
|
|
843
|
-
.dark-mode-toggle-button[data-size="dock"],
|
|
844
|
-
.glass-dock .dark-mode-toggle-button:not([data-size="sm"]):not([data-size="lg"]):not([data-size="control"]) {
|
|
845
|
-
--dark-mode-toggle-size: var(--dock-control-size, var(--size-icon-btn));
|
|
846
|
-
--dark-mode-toggle-padding: var(--dock-icon-padding, 0);
|
|
847
|
-
}
|
|
848
|
-
|
|
849
|
-
.dock-tab-button {
|
|
850
|
-
display: inline-flex;
|
|
851
|
-
align-items: center;
|
|
852
|
-
flex-shrink: 0;
|
|
853
|
-
/* P.W4 Lane B inline-absorb: the `--dock-tab-h` density-keyed height
|
|
854
|
-
knob (parallel to DockIconButton's --dock-control-size) merged
|
|
855
|
-
here from the prior DockTabButton.vue scoped style block. The
|
|
856
|
-
density rungs that set `--dock-tab-h` per tier live in this same
|
|
857
|
-
file (the `.glass-dock[data-density="…"]` blocks above) — Q.W3
|
|
858
|
-
Lane A consolidated them out of utilities.css, closing the
|
|
859
|
-
cascade-order split-brain. When a parent <GlassDock density="…">
|
|
860
|
-
sets `--dock-tab-h`, the tab-button reserves that row even when
|
|
861
|
-
the glyph + padding sum would ride lower. Falls through to
|
|
862
|
-
`--dock-tab-min-height` (kept for audacious-tier callers) and
|
|
863
|
-
finally to `auto`. R3-spec / audit-E P0-3. */
|
|
864
|
-
min-height: var(--dock-tab-h, var(--dock-tab-min-height, auto));
|
|
865
|
-
padding-inline: var(--dock-tab-padding-inline, 0.75rem);
|
|
866
|
-
padding-block: var(--dock-tab-padding-block, 0.375rem);
|
|
867
|
-
border: none;
|
|
868
|
-
background: transparent;
|
|
869
|
-
border-radius: var(--dock-control-radius, var(--radius-pill));
|
|
870
|
-
/* Default font-size carries through to text-only tab content; consumers
|
|
871
|
-
wrapping content in an explicit type utility (e.g. `text-hero`,
|
|
872
|
-
`text-display`) on an inner <span> win because Tailwind v4 ships
|
|
873
|
-
@utility blocks in @layer utilities, which ranks above @layer
|
|
874
|
-
components — so this declaration is a fallback, not a ceiling. */
|
|
875
|
-
font-size: var(--type-small);
|
|
876
|
-
line-height: 1;
|
|
877
|
-
color: var(--muted-foreground);
|
|
878
|
-
text-decoration: none;
|
|
879
|
-
cursor: pointer;
|
|
880
|
-
white-space: nowrap;
|
|
881
|
-
outline: none;
|
|
882
|
-
/* AQ.W3 §W3.2 identity base */
|
|
883
|
-
scale: 1;
|
|
884
|
-
transition:
|
|
885
|
-
background-color var(--dock-motion-fast),
|
|
886
|
-
color var(--dock-motion-fast),
|
|
887
|
-
scale var(--dock-motion-fast);
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
.dock-tab-button:hover:not(:disabled) {
|
|
891
|
-
background: var(--surface-tint-8);
|
|
892
|
-
color: var(--foreground);
|
|
893
|
-
}
|
|
894
|
-
|
|
895
|
-
.dock-tab-button:active:not(:disabled) {
|
|
896
|
-
scale: var(--scale-press-dock);
|
|
897
|
-
}
|
|
898
|
-
|
|
899
|
-
.dock-tab-button:focus:not(:focus-visible) {
|
|
900
|
-
box-shadow: none;
|
|
901
|
-
}
|
|
902
|
-
|
|
903
|
-
/* focus-visible ring + disabled paint hoisted to the shared `:where()`
|
|
904
|
-
group at the top. */
|
|
905
|
-
|
|
906
|
-
.dock-tab-button:is(.is-active, .active, [aria-current="page"], [aria-pressed="true"]) {
|
|
907
|
-
background: var(--surface-tint-10);
|
|
908
|
-
color: var(--foreground);
|
|
909
|
-
}
|
|
910
|
-
|
|
911
|
-
/* Tier — primary ────────────────────────────────────────────
|
|
912
|
-
*
|
|
913
|
-
* Per W2.7 §9, §12, §13, §17. The primary tier composes three at-rest
|
|
914
|
-
* marks (top-highlight, bottom under-shadow, baseline glass) with three
|
|
915
|
-
* disco accents on hover (specular swap, sparkle sweep, disco-grain).
|
|
916
|
-
*
|
|
917
|
-
* Reservation: disco fires on hover only. At rest the button reads as
|
|
918
|
-
* a Vignelli-restrained composed glass surface. The `--phase-color`
|
|
919
|
-
* cascade (provided by `<InstrumentChassis>` via `data-phase`) tints
|
|
920
|
-
* the disco-grain radial only on hover; idle is neutral.
|
|
921
|
-
*
|
|
922
|
-
* K.W6 Lane B — the canonical disco-grain + sparkle-sweep + specular
|
|
923
|
-
* recipe lifted to `@utility btn-audacious` (utilities.css). The Vue
|
|
924
|
-
* <DockTabButton> attaches `btn-audacious` automatically when the
|
|
925
|
-
* consumer passes `data-tier="primary"`. The dock-local rules below
|
|
926
|
-
* are STRICTLY the dock extension: structural shell (padding, base
|
|
927
|
-
* surface tint, min-height) + phase-tint extensions (hover radial
|
|
928
|
-
* uses `--phase-color`, plus the `[data-phase]` `::before` halo).
|
|
929
|
-
*/
|
|
930
|
-
.dock-tab-button[data-tier="primary"] {
|
|
931
|
-
--dock-tab-min-height: 4rem;
|
|
932
|
-
padding-inline: 1.5rem;
|
|
933
|
-
background:
|
|
934
|
-
color-mix(in srgb, var(--card) 60%, transparent);
|
|
935
|
-
color: var(--foreground);
|
|
936
|
-
}
|
|
937
|
-
|
|
938
|
-
/* Phase-tint hover override — same disco-grain composition as
|
|
939
|
-
* `btn-audacious`, but the radial uses `--phase-color` (instrument-
|
|
940
|
-
* cluster axis) instead of the canonical `--primary`. The `--paper-
|
|
941
|
-
* clean-texture` overlay and `--glass-specular` shadow stack are
|
|
942
|
-
* inherited from the underlying `btn-audacious` utility. */
|
|
943
|
-
.dock-tab-button[data-tier="primary"]:hover:not(:disabled) {
|
|
944
|
-
--glass-grain-opacity: var(--glass-grain-opacity-disco, 0.08);
|
|
945
|
-
background-image:
|
|
946
|
-
var(--paper-clean-texture),
|
|
947
|
-
radial-gradient(
|
|
948
|
-
ellipse at 30% 30%,
|
|
949
|
-
color-mix(in srgb, var(--phase-color, var(--foreground)) 18%, transparent),
|
|
950
|
-
transparent 70%
|
|
951
|
-
);
|
|
952
|
-
background-blend-mode: overlay, normal;
|
|
953
|
-
background-size: var(--paper-texture-size), auto;
|
|
954
|
-
}
|
|
955
|
-
|
|
956
|
-
/* Q.W3.A.4 — phase-tint backplate halo at the pill wrapper.
|
|
957
|
-
*
|
|
958
|
-
* The inner `<GlyphFace>` halo (`.glyph-face-backplate { inset: -25% }`)
|
|
959
|
-
* gets clipped by the pill's `overflow: hidden`; the halo never escapes
|
|
960
|
-
* the inner glyph wrapper. This `::before` lifts the phase-tint to the
|
|
961
|
-
* pill itself so the glow composes with the whole CTA. Scoped to
|
|
962
|
-
* active phases — at idle / ready the pill stays neutral and inherits
|
|
963
|
-
* the W2.7 reservation ("disco fires on hover only"). */
|
|
964
|
-
.dock-tab-button[data-tier="primary"][data-phase]:not([data-phase="ready"]):not([data-phase="idle"])::before {
|
|
965
|
-
content: "";
|
|
966
|
-
position: absolute;
|
|
967
|
-
inset: 0;
|
|
968
|
-
border-radius: inherit;
|
|
969
|
-
background: radial-gradient(
|
|
970
|
-
ellipse at 30% 30%,
|
|
971
|
-
color-mix(in srgb, var(--phase-color, var(--foreground)) 18%, transparent) 0%,
|
|
972
|
-
transparent 70%
|
|
973
|
-
);
|
|
974
|
-
pointer-events: none;
|
|
975
|
-
z-index: -1;
|
|
976
|
-
opacity: 1;
|
|
977
|
-
transition: opacity var(--duration-fast) var(--ease-standard);
|
|
978
|
-
}
|
|
979
|
-
|
|
980
|
-
/* Tier — secondary ──────────────────────────────────────────
|
|
981
|
-
*
|
|
982
|
-
* Companion to `data-tier="primary"`. Carries the same edge-light +
|
|
983
|
-
* edge-shadow skeu vocabulary at quieter weight: no disco accent, no
|
|
984
|
-
* sparkle, no curvature radial. Composes for icon-button consumers
|
|
985
|
-
* (chassis ActionCluster, SettingsCog) where the surface needs a
|
|
986
|
-
* glass-tier read but not the audacious primary punch. Per P.W1.B
|
|
987
|
-
* audit-C §3 — closes the four bare `<DockIconButton>` consumer sites
|
|
988
|
-
* (cog + back + retake + stop) without redefining the family.
|
|
989
|
-
*/
|
|
990
|
-
.dock-tab-button[data-tier="secondary"],
|
|
991
|
-
.dock-icon-button[data-tier="secondary"] {
|
|
992
|
-
background: color-mix(in srgb, var(--card) 50%, transparent);
|
|
993
|
-
border: 1px solid var(--glass-border-quiet);
|
|
994
|
-
box-shadow:
|
|
995
|
-
var(--border-hairline),
|
|
996
|
-
var(--glass-highlight);
|
|
997
|
-
}
|
|
998
|
-
|
|
999
|
-
.dock-tab-button[data-tier="secondary"]:hover:not(:disabled),
|
|
1000
|
-
.dock-icon-button[data-tier="secondary"]:hover:not(:disabled) {
|
|
1001
|
-
background: color-mix(in srgb, var(--card) 65%, transparent);
|
|
1002
|
-
box-shadow:
|
|
1003
|
-
var(--glass-specular),
|
|
1004
|
-
0 0.5px 0 0 rgb(0 0 0 / 0.06);
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1007
|
-
.dock-select-trigger,
|
|
1008
|
-
.dock-dropdown-trigger {
|
|
1009
|
-
display: inline-flex;
|
|
1010
|
-
align-items: center;
|
|
1011
|
-
justify-content: center;
|
|
1012
|
-
flex-shrink: 0;
|
|
1013
|
-
/* AQ.W3 §W3.2 identity base */
|
|
1014
|
-
scale: 1;
|
|
1015
|
-
gap: var(--dock-trigger-gap, 0.25rem);
|
|
1016
|
-
min-height: var(--dock-trigger-min-height, auto);
|
|
1017
|
-
padding:
|
|
1018
|
-
var(--dock-trigger-padding-block, 0.25rem)
|
|
1019
|
-
var(--dock-trigger-padding-inline, 0.5rem);
|
|
1020
|
-
white-space: nowrap;
|
|
1021
|
-
cursor: pointer;
|
|
1022
|
-
border: none;
|
|
1023
|
-
background: transparent;
|
|
1024
|
-
border-radius: var(--dock-control-radius, var(--radius-pill));
|
|
1025
|
-
/* Shares the dock-icon-button legibility base (`--dock-fg-on-aurora`). */
|
|
1026
|
-
color: color-mix(in srgb, var(--dock-fg-on-aurora, var(--foreground)) calc(var(--opacity-icon-muted) * 100%), transparent);
|
|
1027
|
-
outline: none;
|
|
1028
|
-
transition:
|
|
1029
|
-
background-color var(--dock-motion-fast),
|
|
1030
|
-
color var(--dock-motion-fast),
|
|
1031
|
-
scale var(--dock-motion-fast),
|
|
1032
|
-
opacity var(--dock-motion-fast);
|
|
1033
|
-
}
|
|
1034
|
-
|
|
1035
|
-
.dock-select-trigger:hover:not(:disabled),
|
|
1036
|
-
.dock-dropdown-trigger:hover:not(:disabled) {
|
|
1037
|
-
background: var(--muted);
|
|
1038
|
-
color: var(--btn-hover-color, var(--foreground));
|
|
1039
|
-
}
|
|
1040
|
-
|
|
1041
|
-
.dock-dropdown-trigger:hover:not(:disabled) {
|
|
1042
|
-
scale: var(--scale-hover-dock);
|
|
1043
|
-
}
|
|
1044
|
-
|
|
1045
|
-
.dock-select-trigger:active:not(:disabled),
|
|
1046
|
-
.dock-dropdown-trigger:active:not(:disabled) {
|
|
1047
|
-
scale: var(--scale-press-dock);
|
|
1048
|
-
}
|
|
1049
|
-
|
|
1050
|
-
.dock-select-trigger:focus:not(:focus-visible),
|
|
1051
|
-
.dock-dropdown-trigger:focus:not(:focus-visible) {
|
|
1052
|
-
box-shadow: none;
|
|
1053
|
-
outline: none;
|
|
1054
|
-
}
|
|
1055
|
-
|
|
1056
|
-
/* focus-visible ring + disabled paint hoisted to the shared `:where()`
|
|
1057
|
-
group at the top; this rule adds only the box-shadow fade transition. */
|
|
1058
|
-
.dock-select-trigger:focus-visible,
|
|
1059
|
-
.dock-dropdown-trigger:focus-visible {
|
|
1060
|
-
transition:
|
|
1061
|
-
background-color var(--dock-motion-fast),
|
|
1062
|
-
color var(--dock-motion-fast),
|
|
1063
|
-
scale var(--dock-motion-fast),
|
|
1064
|
-
opacity var(--dock-motion-fast),
|
|
1065
|
-
box-shadow var(--dock-motion-fast);
|
|
1066
|
-
}
|
|
1067
|
-
|
|
1068
|
-
.dock-select-trigger:is(.is-active, .active, [aria-expanded="true"], [aria-pressed="true"]),
|
|
1069
|
-
.dock-dropdown-trigger:is(.is-active, .active, [aria-expanded="true"], [aria-pressed="true"]) {
|
|
1070
|
-
background: var(--muted);
|
|
1071
|
-
color: var(--foreground);
|
|
1072
|
-
}
|
|
1073
|
-
|
|
1074
|
-
.dock-select-trigger__chevron {
|
|
1075
|
-
width: var(--dock-trigger-icon-size, 0.75rem);
|
|
1076
|
-
height: var(--dock-trigger-icon-size, 0.75rem);
|
|
1077
|
-
flex-shrink: 0;
|
|
1078
|
-
opacity: 0.5;
|
|
1079
|
-
/* Individual-transform identity base (AQ.W3 §W3.2) — `rotate:` longhand
|
|
1080
|
-
for family consistency (not a stacking-context hazard: child glyph). */
|
|
1081
|
-
rotate: 0deg;
|
|
1082
|
-
transition: rotate var(--dock-motion-fast);
|
|
1083
|
-
}
|
|
1084
|
-
|
|
1085
|
-
.dock-select-trigger[data-state="open"] .dock-select-trigger__chevron {
|
|
1086
|
-
rotate: 180deg;
|
|
1087
|
-
}
|
|
1088
|
-
|
|
1089
|
-
@media (min-width: 640px) {
|
|
1090
|
-
.glass-dock.dock-wrap {
|
|
915
|
+
/* The `overflow="wrap"` desktop snap-back. Past the overflow breakpoint a
|
|
916
|
+
wrap-mode dock reverts from the narrow multi-row pill to a single nowrap
|
|
917
|
+
row. The breakpoint is the named token `--dock-overflow-bp` (tokens.css §9
|
|
918
|
+
Layout) — its single source-of-record. A `var()` cannot drive a
|
|
919
|
+
media-query feature in Baseline CSS, so this one `@media` realizes the
|
|
920
|
+
token's value; there is no longer a bare unexplained magic number — the
|
|
921
|
+
threshold lives under one name and is documented at its mint.
|
|
922
|
+
AV.W16 TW3 — KEPT as `@media` (not converted to `@container`): the wrap
|
|
923
|
+
dock is `max-width: calc(100vw - gutter)` — it spans the VIEWPORT by
|
|
924
|
+
contract, so the snap-back is genuinely viewport-semantic. The dock
|
|
925
|
+
establishes its own `dock` container and cannot self-query that
|
|
926
|
+
container for a rule on the dock root; the descendant-readable
|
|
927
|
+
label/density rules above are the container-query candidates. */
|
|
928
|
+
@media (min-width: 640px /* = var(--dock-overflow-bp) */) {
|
|
929
|
+
.glass-dock.dock-overflow-wrap {
|
|
1091
930
|
white-space: nowrap;
|
|
1092
931
|
border-radius: var(--radius-pill);
|
|
1093
932
|
max-width: none;
|
|
1094
|
-
padding:
|
|
1095
|
-
|
|
933
|
+
padding: var(
|
|
934
|
+
--dock-wrap-desktop-padding-block,
|
|
935
|
+
var(--dock-padding-block, 0.375rem)
|
|
936
|
+
)
|
|
1096
937
|
var(--dock-wrap-desktop-padding-inline, 0.75rem);
|
|
1097
938
|
}
|
|
1098
939
|
|
|
1099
|
-
.glass-dock.dock-wrap .dock-layer--full {
|
|
940
|
+
.glass-dock.dock-overflow-wrap .dock-layer--full {
|
|
1100
941
|
flex-wrap: nowrap;
|
|
1101
942
|
height: var(--dock-layer-height, 2.5rem);
|
|
1102
943
|
gap: var(--dock-wrap-desktop-gap, var(--dock-layer-gap, 0.25rem));
|
|
1103
944
|
}
|
|
1104
945
|
|
|
1105
|
-
.glass-dock.dock-wrap .dock-layer--summary {
|
|
946
|
+
.glass-dock.dock-overflow-wrap .dock-layer--summary {
|
|
1106
947
|
height: var(--dock-layer-height, 2.5rem);
|
|
1107
948
|
}
|
|
1108
949
|
|
|
1109
|
-
.glass-dock.dock-wrap .dock-separator {
|
|
950
|
+
.glass-dock.dock-overflow-wrap .dock-separator {
|
|
1110
951
|
display: block;
|
|
1111
952
|
}
|
|
1112
953
|
}
|
|
@@ -1137,18 +978,11 @@
|
|
|
1137
978
|
--size-icon-btn: var(--dock-touch-target, 2.75rem);
|
|
1138
979
|
}
|
|
1139
980
|
|
|
1140
|
-
/* S-2 — the in-dock floor above lifts the control-SIZE token
|
|
1141
|
-
only reaches a DockIconButton that has a
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
and it also reserves the slot in the dock's width-math). Compact
|
|
1147
|
-
buttons opt out — they are auto-sized affordances, not primary
|
|
1148
|
-
targets. */
|
|
1149
|
-
.dock-icon-button:not(.dock-icon-button--compact) {
|
|
1150
|
-
min-block-size: var(--dock-touch-target, 2.75rem);
|
|
1151
|
-
min-inline-size: var(--dock-touch-target, 2.75rem);
|
|
1152
|
-
}
|
|
981
|
+
/* S-2 — the in-dock floor above lifts the control-SIZE token (shell /
|
|
982
|
+
width-math), which only reaches a DockIconButton that has a
|
|
983
|
+
`.glass-dock` ancestor. The companion button-level floor (the
|
|
984
|
+
`.dock-icon-button:not(--compact)` `min-{block,inline}-size` that
|
|
985
|
+
reaches a STANDALONE DockIconButton with no dock wrapper) moved to
|
|
986
|
+
dock-controls.css with the rest of the control family (AU.W8b.3). */
|
|
1153
987
|
}
|
|
1154
988
|
}
|