@mkbabb/glass-ui 8.0.0 → 10.0.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/MIGRATION.md +4768 -0
- package/README.md +57 -13
- package/dist/DialogContent-CwIBvou_.js +157 -0
- package/dist/{DropdownMenuTrigger-8UZsBtZ8.js → DropdownMenuTrigger-CKRnhDSQ.js} +1 -1
- package/dist/{Surface-i1tWC-Ga.js → Surface-1nPoabc3.js} +1 -1
- package/dist/{accent-tone-solve-Cw7WkRD9.js → accent-tone-solve-5H6FY2QO.js} +1 -1
- package/dist/aurora.js +386 -355
- package/dist/{badge-owUOaaba.js → badge-BO6BC4G5.js} +1 -1
- package/dist/badge.js +1 -1
- package/dist/blob.js +44 -44
- package/dist/{button-yvGPb0Bx.js → button-BOFTUPyU.js} +1 -1
- package/dist/button.js +1 -1
- package/dist/{card-3HFFpC7_.js → card-ByyqRBvK.js} +2 -2
- package/dist/card.js +1 -1
- package/dist/carousel.js +3 -3
- package/dist/{checkbox-BnXuGgJ3.js → checkbox-B1qn65se.js} +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/chip.js +8 -3
- package/dist/{class-names-q-UGOkHH.js → class-names-FlXcvRRT.js} +65 -18
- package/dist/{collapsible-B7O6m-Ch.js → collapsible-DFzK29Oh.js} +5 -2
- package/dist/collapsible.js +1 -1
- package/dist/color.glsl-DTJhdekG.js +34 -0
- package/dist/color.js +11 -11
- package/dist/color.wgsl-BTszLY39.js +398 -0
- package/dist/{command-BuBnYpxF.js → command-C-5xSEJ2.js} +8 -8
- package/dist/command.js +1 -1
- package/dist/component-styles.css +1 -0
- package/dist/components/_shared/class-names.d.ts +10 -1
- package/dist/components/_shared/control.d.ts +0 -1
- package/dist/components/_shared/index.d.ts +0 -1
- package/dist/components/_shared/menu/menu.css +1 -1
- package/dist/components/_shared/overlay/index.d.ts +1 -0
- package/dist/components/_shared/overlay/shortcuts.d.ts +12 -0
- package/dist/components/aurora/Aurora.vue.d.ts +1 -0
- package/dist/components/aurora/composables/atoms.d.ts +22 -6
- package/dist/components/aurora/composables/frameLoop.d.ts +6 -5
- package/dist/components/aurora/composables/runtime.d.ts +28 -1
- package/dist/components/aurora/composables/useAurora.d.ts +28 -0
- package/dist/components/aurora/composables/wgpuSetup.d.ts +1 -1
- package/dist/components/aurora/constants/presets.d.ts +62 -5
- package/dist/components/aurora/index.d.ts +1 -1
- package/dist/components/blob/Blob.vue.d.ts +3 -3
- package/dist/components/card/Card.vue.d.ts +8 -2
- package/dist/components/chip/Chip.vue.d.ts +1 -7
- package/dist/components/chip/chipVariants.d.ts +1 -0
- package/dist/components/collapsible/Collapsible.vue.d.ts +1 -0
- package/dist/components/command/CommandDialog.vue.d.ts +1 -1
- package/dist/components/configurator/Configurator.vue.d.ts +25 -2
- package/dist/components/configurator/ConfiguratorRow.vue.d.ts +4 -2
- package/dist/components/configurator/styles.css +1 -1
- package/dist/components/dark-mode-toggle/dark-mode-toggle.css +1 -1
- package/dist/components/deck/styles/capture.css +1 -1
- package/dist/components/dialog/styles.css +1 -1
- package/dist/components/dock/DockSeparator.vue.d.ts +2 -3
- package/dist/components/dock/GlassDock.vue.d.ts +1 -0
- package/dist/components/dock/composables/dockContext.d.ts +1 -8
- package/dist/components/dock/composables/dockCrossfadeContext.d.ts +0 -2
- package/dist/components/dock/composables/index.d.ts +1 -1
- package/dist/components/dock/composables/useDockHold.d.ts +16 -12
- package/dist/components/dock/composables/useDockRun.d.ts +20 -0
- package/dist/components/dock/composables/useDockSearch.d.ts +1 -1
- package/dist/components/dock/composables/useDockShellProps.d.ts +18 -101
- package/dist/components/dock/composables/useDockState.d.ts +2 -9
- package/dist/components/dock/constants.d.ts +15 -0
- package/dist/components/dock/index.d.ts +2 -2
- package/dist/components/dock/styles/controls/icon-button.css +1 -1
- package/dist/components/dock/styles/controls/tab-button.css +1 -1
- package/dist/components/dock/styles/controls/triggers.css +1 -1
- package/dist/components/dock/styles/controls.css +1 -1
- package/dist/components/dock/styles/density.css +1 -1
- package/dist/components/dock/styles/index.css +1 -1
- package/dist/components/dock/styles/layer-group.css +1 -1
- package/dist/components/dock/styles/layers.css +1 -1
- package/dist/components/dock/styles/morph.css +1 -1
- package/dist/components/dock/styles/run.css +1 -0
- package/dist/components/dock/styles/search.css +1 -1
- package/dist/components/dock/styles/shape.css +1 -1
- package/dist/components/dock/styles/shell-regions.css +1 -1
- package/dist/components/dock/styles/shell.css +1 -1
- package/dist/components/fourier-field/FourierField.vue.d.ts +29 -26
- package/dist/components/fourier-field/clock.d.ts +35 -0
- package/dist/components/fourier-field/constants.d.ts +80 -104
- package/dist/components/fourier-field/index.d.ts +3 -28
- package/dist/components/fourier-field/math.d.ts +69 -77
- package/dist/components/fourier-field/renderer/mint.d.ts +50 -0
- package/dist/components/fourier-field/renderer/uniforms.d.ts +84 -0
- package/dist/components/fourier-field/renderer/wgpu.d.ts +28 -0
- package/dist/components/fourier-field/shaders/compute.wgsl.d.ts +1 -0
- package/dist/components/fourier-field/shaders/render.wgsl.d.ts +1 -0
- package/dist/components/fourier-field/useFourierField.d.ts +49 -0
- package/dist/components/handmark/HandMark.vue.d.ts +18 -14
- package/dist/components/handmark/index.d.ts +4 -23
- package/dist/components/handmark/stroke.d.ts +92 -0
- package/dist/components/labeled-field/LabeledSwitch.vue.d.ts +3 -1
- package/dist/components/labeled-field/types.d.ts +1 -1
- package/dist/components/menu/DropdownMenu.vue.d.ts +1 -1
- package/dist/components/metric/coalesce-metric.d.ts +6 -1
- package/dist/components/metric/styles.css +1 -1
- package/dist/components/popover/Popover.vue.d.ts +1 -1
- package/dist/components/scroll-progress-rim/styles.css +1 -1
- package/dist/components/sheet/styles.css +1 -1
- package/dist/components/slider/styles.css +1 -1
- package/dist/components/tabs/SegmentedTabs.vue.d.ts +25 -112
- package/dist/components/tabs/composables/useTabDragMorph.d.ts +1 -1
- package/dist/components/tabs/composables/useTabResponsive.d.ts +11 -11
- package/dist/components/tabs/index.d.ts +1 -1
- package/dist/components/tabs/styles/drag.css +1 -1
- package/dist/components/tabs/styles/segmented.css +1 -1
- package/dist/components/tabs/types.d.ts +85 -0
- package/dist/components/timeline/index.d.ts +2 -0
- package/dist/components/toast/Toast.vue.d.ts +2 -2
- package/dist/composables/color/index.d.ts +0 -15
- package/dist/composables/dark/darkModeSyncScript.d.ts +42 -0
- package/dist/composables/dom/useResolveTokenColor.d.ts +1 -1
- package/dist/composables/glass/index.d.ts +2 -0
- package/dist/composables/keyboard/useKeyboardShortcuts.d.ts +47 -1
- package/dist/composables/motion/pointer/pointerFieldMappings.d.ts +0 -41
- package/dist/{components/search/composables → composables/search}/index.d.ts +2 -2
- package/dist/{components/search/composables/fuzzySearchIndex.d.ts → composables/search/match.d.ts} +8 -3
- package/dist/composables/sidebar/types.d.ts +5 -1
- package/dist/configurator-DiwVN573.js +339 -0
- package/dist/configurator.js +1 -1
- package/dist/constellation.js +5 -5
- package/dist/{content-CWO-XL7o.js → content-So3j6SOe.js} +1 -1
- package/dist/control-DJp15L4U.js +7 -0
- package/dist/dark-mode-toggle.js +2 -2
- package/dist/{dark-z_P5QwqI.js → dark-pONY3x93.js} +2 -2
- package/dist/dark.js +1 -1
- package/dist/{data-table-_RrOEdiw.js → data-table-Ba_uTfPc.js} +3 -3
- package/dist/data-table.js +1 -1
- package/dist/{deck-Ci6YjB5e.js → deck-Cm_VmyNL.js} +1 -1
- package/dist/deck.js +1 -1
- package/dist/{dialog-CbRnTRtg.js → dialog-BZoFG0j8.js} +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +718 -496
- package/dist/dom.js +90 -8
- package/dist/easing.js +5 -5
- package/dist/expandable-container-CZUj9BzY.js +142 -0
- package/dist/expandable-container.js +2 -142
- package/dist/fourier-field.js +638 -855
- package/dist/fourier-math.js +6 -6
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +88 -75
- package/dist/handmark.js +330 -718
- package/dist/index.d.ts +2 -2
- package/dist/infinite-scroll.js +16 -17
- package/dist/{input-Bls2A4Tt.js → input-eLZ_AU7l.js} +1 -1
- package/dist/input.js +1 -1
- package/dist/keyboard.js +64 -21
- package/dist/{label-BQEZhnK_.js → label-CE03H1KL.js} +2 -2
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +9 -6
- package/dist/{menu-wLu1XGKn.js → menu-BnmCOa3y.js} +93 -90
- package/dist/menu.js +2 -2
- package/dist/metric.js +12 -7
- package/dist/{motion-D4uYE0UM.js → motion-BvV1_24p.js} +1 -1
- package/dist/motion-core.js +35 -35
- package/dist/{number-field-NFAwQ0HK.js → number-field-RP89046a.js} +2 -2
- package/dist/number-field.js +1 -1
- package/dist/pager-dots.js +3 -3
- package/dist/{participation-B0hdsIRo.js → participation-Di4UHbzk.js} +8 -8
- package/dist/{pointerFieldMappings-DP5tla5z.js → pointerFieldMappings-DXwlU5uj.js} +7 -23
- package/dist/popover-DA87hFBx.js +184 -0
- package/dist/popover.js +1 -1
- package/dist/{progress-DF8dWZIX.js → progress-eVa-mc7J.js} +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-Ci8o-pDx.js → radio-group-B58Bz16F.js} +2 -2
- package/dist/radio-group.js +1 -1
- package/dist/{select-CDgwGH_P.js → select-fy3vtArm.js} +13 -13
- package/dist/select.js +1 -1
- package/dist/{separator-CN11t406.js → separator-D4EZM10u.js} +2 -2
- package/dist/separator.js +1 -1
- package/dist/{sheet-BEFvnO_u.js → sheet-BQJyER59.js} +120 -115
- package/dist/sheet.js +2 -2
- package/dist/shortcuts-DGGWNRNe.js +13 -0
- package/dist/sidebar.js +4 -4
- package/dist/{slider-gsc8jDIo.js → slider-5ChjjWSR.js} +1 -1
- package/dist/slider.js +1 -1
- package/dist/{status-dot-BpnqOP5N.js → status-dot-W4LFiJps.js} +2 -2
- package/dist/status-dot.js +1 -1
- package/dist/styles/accessibility.css +1 -1
- package/dist/styles/animations.css +1 -1
- package/dist/styles/components.css +1 -1
- package/dist/styles/glass/a11y-fallback.css +1 -1
- package/dist/styles/glass/dissolve.css +1 -1
- package/dist/styles/glass/focus-veil.css +1 -1
- package/dist/styles/glass/ladder.css +1 -1
- package/dist/styles/glass/material.css +1 -1
- package/dist/styles/glass/overlay-plate.css +1 -1
- package/dist/styles/glass/reveal.css +1 -1
- package/dist/styles/glass-specular-track.css +1 -1
- package/dist/styles/paper.css +1 -1
- package/dist/styles/scroll-choreography.css +1 -1
- package/dist/styles/scroll-chrome.css +1 -1
- package/dist/styles/scroll-driven.css +1 -1
- package/dist/styles/theme/literals.css +1 -1
- package/dist/styles/tokens/color-radius.css +1 -1
- package/dist/styles/tokens/dark-arm-glass.css +1 -1
- package/dist/styles/tokens/light-dark.css +1 -1
- package/dist/styles/tokens/offsets.css +1 -1
- package/dist/styles/tokens/scheme-motion.css +1 -1
- package/dist/styles/tokens/sizing.css +1 -1
- package/dist/styles/typography/semantic.css +1 -1
- package/dist/styles/typography/utilities.css +1 -1
- package/dist/styles/utilities/a11y-overrides.css +1 -1
- package/dist/styles/utilities/responsive.css +1 -1
- package/dist/styles/view-transition.css +1 -1
- package/dist/styles/viz-reveal.css +1 -1
- package/dist/surface.js +1 -1
- package/dist/{switch-DxZzDrmV.js → switch-BYUZ6g9G.js} +2 -2
- package/dist/switch.js +1 -1
- package/dist/{tabs-CYscnq5H.js → tabs-rdRXKXxd.js} +4 -3
- package/dist/tabs.js +1 -1
- package/dist/textarea.js +1 -1
- package/dist/timeline.js +44 -42
- package/dist/{toast-9c6Kp58L.js → toast-DVOwo6GB.js} +1 -1
- package/dist/toast.js +1 -1
- package/dist/{toggle-group-11aPGMfE.js → toggle-group-CC5b3o1R.js} +2 -2
- package/dist/toggle-group.js +1 -1
- package/dist/{tooltip-DqKMZ4dn.js → tooltip-DhTHhtJN.js} +2 -2
- package/dist/tooltip.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{useAccentTone-DFAh1osB.js → useAccentTone-DitmKfGL.js} +1 -1
- package/dist/{resolveCanvasColor-6MCrswTB.js → useCanvas2D-CQRElMyE.js} +1 -11
- package/dist/{usePointerVelocityField-DsIf7yyq.js → usePointerVelocityField-Lx26_Yap.js} +1 -1
- package/dist/useResolveTokenColor-B2FfJnd9.js +24 -0
- package/package.json +5 -21
- package/dist/DialogContent-4hzLiaCQ.js +0 -152
- package/dist/canvas.d.ts +0 -1
- package/dist/canvas.js +0 -2
- package/dist/color.wgsl-B0N3mKMb.js +0 -412
- package/dist/compile-D7VYG3gi.js +0 -19
- package/dist/components/dock/composables/useDockOverflowFit.d.ts +0 -20
- package/dist/components/dock/composables/useDockTouchGate.d.ts +0 -42
- package/dist/components/dock/styles/overflow.css +0 -1
- package/dist/components/fourier-field/composables/fourierFieldGLSetup.d.ts +0 -24
- package/dist/components/fourier-field/composables/fourierFieldWGPUSetup.d.ts +0 -31
- package/dist/components/fourier-field/composables/uniformBridgeWGPU.d.ts +0 -39
- package/dist/components/fourier-field/composables/useFourierField.d.ts +0 -56
- package/dist/components/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +0 -1
- package/dist/components/fourier-field/shaders/fourier-field.glsl.d.ts +0 -4
- package/dist/components/fourier-field/shaders/fourier-field.render.wgsl.d.ts +0 -1
- package/dist/components/fourier-field/shaders/fourier-field.ribbon.d.ts +0 -51
- package/dist/components/handmark/brush.d.ts +0 -269
- package/dist/components/handmark/composables/useHandMark.d.ts +0 -99
- package/dist/components/handmark/constants.d.ts +0 -69
- package/dist/components/handmark/freehand.d.ts +0 -69
- package/dist/components/handmark/geometry.d.ts +0 -62
- package/dist/components/handmark/ink.d.ts +0 -11
- package/dist/components/handmark/noise.d.ts +0 -30
- package/dist/components/handmark/texture.d.ts +0 -39
- package/dist/components/handmark/types.d.ts +0 -70
- package/dist/components/search/SearchBar.vue.d.ts +0 -38
- package/dist/components/search/index.d.ts +0 -8
- package/dist/components/search/searchVariants.d.ts +0 -16
- package/dist/configurator-BoeScnDL.js +0 -311
- package/dist/control-Da4XeT43.js +0 -11
- package/dist/popover-DBMKTPkL.js +0 -181
- package/dist/search.d.ts +0 -1
- package/dist/search.js +0 -61
- package/dist/useFuzzySearch-CUnZknpm.js +0 -177
- package/dist/useResolveTokenColor-CspQv_ik.js +0 -107
- /package/dist/{components/search/composables → composables/search}/types.d.ts +0 -0
- /package/dist/{components/search/composables → composables/search}/useFuzzySearch.d.ts +0 -0
|
@@ -1,34 +1,24 @@
|
|
|
1
1
|
import { type ComputedRef } from "vue";
|
|
2
|
-
export type DockSize = "sm" | "md" | "lg" | "xl";
|
|
3
2
|
export type DockBackdropMode = "live" | "static";
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Collapse posture. `"closed"` (default) mounts collapsed, `"open"` mounts
|
|
5
|
+
* expanded, and `false` never collapses at all — the single opt-out of the
|
|
6
|
+
* collapse↔expand machinery, on both orientations.
|
|
7
|
+
*/
|
|
8
|
+
export type DockCollapse = false | "closed" | "open";
|
|
5
9
|
/**
|
|
6
10
|
* The GlassDock prop shape. Every dock—horizontal or vertical—reads the same
|
|
7
|
-
* surface; orientation
|
|
8
|
-
*
|
|
11
|
+
* surface; orientation is the single layout axis and the collapse surface applies
|
|
12
|
+
* on both.
|
|
9
13
|
*/
|
|
10
14
|
export interface DockProps {
|
|
11
15
|
fitContent?: boolean;
|
|
12
|
-
/**
|
|
13
|
-
* Positioning register: `"inline"` (default) participates in normal flow;
|
|
14
|
-
* `"fixed"` pins the dock centred to the viewport bottom; `"sticky"` rides
|
|
15
|
-
* the `.dock-sticky` register.
|
|
16
|
-
*/
|
|
17
|
-
position?: "fixed" | "inline" | "sticky";
|
|
18
16
|
/**
|
|
19
17
|
* Backdrop material mode. `"live"` (default) samples and filters the painted
|
|
20
18
|
* backdrop; `"static"` uses a solid plate with no luminance observer or
|
|
21
19
|
* backdrop-filter work.
|
|
22
20
|
*/
|
|
23
21
|
backdropMode?: DockBackdropMode;
|
|
24
|
-
/**
|
|
25
|
-
* Never collapse: render permanently expanded, the single opt-out of the
|
|
26
|
-
* collapse↔expand machinery. Default `false` (every dock is collapsible).
|
|
27
|
-
* A vertical dock morphs its height too. A `layout="grid"` dock is
|
|
28
|
-
* always expanded by contract (a 2D tile panel does not read as a collapsible
|
|
29
|
-
* pill). A vertical navigation column can opt into the static expanded posture.
|
|
30
|
-
*/
|
|
31
|
-
alwaysExpanded?: boolean;
|
|
32
22
|
/**
|
|
33
23
|
* Corner treatment.
|
|
34
24
|
* `"pill"` — the stadium silhouette (default).
|
|
@@ -46,8 +36,8 @@ export interface DockProps {
|
|
|
46
36
|
* surface where the superellipse reads (cards/pills stay
|
|
47
37
|
* round); the border-radius arc is the cross-engine contract.
|
|
48
38
|
*
|
|
49
|
-
* Paints on both orientations: a vertical dock reads `shape="rounded"` for the
|
|
50
|
-
* look, a horizontal dock reads `shape="card"` for the big-dock shell
|
|
39
|
+
* Paints on both orientations: a vertical dock reads `shape="rounded"` for the
|
|
40
|
+
* tool-palette look, a horizontal dock reads `shape="card"` for the big-dock shell.
|
|
51
41
|
*/
|
|
52
42
|
shape?: "pill" | "rounded" | "card";
|
|
53
43
|
/**
|
|
@@ -58,76 +48,15 @@ export interface DockProps {
|
|
|
58
48
|
*/
|
|
59
49
|
orientation?: "horizontal" | "vertical";
|
|
60
50
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* `--dock-max-block-size` vertically). The ONE knob governing every
|
|
69
|
-
* overflow behavior.
|
|
70
|
-
* `"grow"` — content grows to fit then overflows visibly past
|
|
71
|
-
* the cap (the default; nothing clips or scrolls).
|
|
72
|
-
* `"wrap"` — expanded content wraps to multiple rows via CONTENT-DRIVEN
|
|
73
|
-
* intrinsic flex-wrap (the `.dock-overflow-wrap` recipe). The
|
|
74
|
-
* dock shrink-wraps to content and caps that intrinsic width
|
|
75
|
-
* at `max-inline-size: var(--dock-max-inline-size)`, so the row
|
|
76
|
-
* reflows to N rows EXACTLY when its intrinsic width exceeds
|
|
77
|
-
* the cap — at ANY viewport width — and collapses to one row
|
|
78
|
-
* when it fits (no viewport breakpoint). The wrapped multi-row silhouette lifts
|
|
79
|
-
* onto the card/floating shadow tier as the dock expands.
|
|
80
|
-
* HORIZONTAL-ONLY: a vertical dock grows-to-fit + clamps via
|
|
81
|
-
* `--dock-max-block-size` (its own overflow story), so the
|
|
82
|
-
* `.dock-overflow-wrap` class is not emitted for a vertical
|
|
83
|
-
* orientation.
|
|
84
|
-
*
|
|
85
|
-
* A capped axis is intrinsically a scroll axis: a horizontal
|
|
86
|
-
* dock's inline axis reads `.dock-scroll-x` unconditionally (the CSS
|
|
87
|
-
* `overflow-x: auto` scrolls ONLY when the row exceeds
|
|
88
|
-
* `--dock-max-inline-size`; under the cap nothing scrolls), and a vertical
|
|
89
|
-
* vertical dock's block axis scrolls via the unconditional cap-derived shell rule
|
|
90
|
-
* (`--dock-max-block-size` is the sole knob). No prop, no unreachable
|
|
91
|
-
* controls.
|
|
92
|
-
*/
|
|
93
|
-
overflow?: "grow" | "wrap";
|
|
94
|
-
/**
|
|
95
|
-
* Idle-collapse delay in ms (default 3600). Inert on an always-expanded dock.
|
|
96
|
-
*/
|
|
97
|
-
collapseDelay?: number;
|
|
98
|
-
/**
|
|
99
|
-
* Start in the collapsed state (default true). Applies on BOTH orientations
|
|
100
|
-
* and a vertical dock morphs its block axis open too. Inert on an always-expanded dock.
|
|
101
|
-
*/
|
|
102
|
-
startCollapsed?: boolean;
|
|
103
|
-
/**
|
|
104
|
-
* Posture ownership on a COLLAPSIBLE dock.
|
|
105
|
-
* `"auto"` (default) — the built-in FSM owns posture.
|
|
106
|
-
* `"manual"` — the consumer owns posture. Every internal environmental writer
|
|
107
|
-
* (hover, focus, idle timer, outside-click, collapsed-tap, touch)
|
|
108
|
-
* is suppressed at BOTH poles; only `expand()`/`collapse()` write.
|
|
109
|
-
* Mount pole from `startCollapsed`. Read posture via `expanded`.
|
|
110
|
-
* a11y: the consumer MUST author a focusable disclosure in a
|
|
111
|
-
* never-inert slot (`#persistent`/`#collapsed`) — glass does not
|
|
112
|
-
* auto-expand on focus in manual and provides no fallback.
|
|
113
|
-
* Resolved to `"auto"` on an always-expanded dock (that pole is force-pinned;
|
|
114
|
-
* interaction is meaningless there — no dead combination reaches the FSM).
|
|
51
|
+
* Collapse posture — mount pole AND opt-out in one member.
|
|
52
|
+
* `"closed"` (default) — collapsible, mounts collapsed.
|
|
53
|
+
* `"open"` — collapsible, mounts expanded.
|
|
54
|
+
* `false` — never collapses; the FSM is force-pinned and every
|
|
55
|
+
* environmental writer (hover, focus, idle timer,
|
|
56
|
+
* outside-click, collapsed-tap, touch) is quiet.
|
|
57
|
+
* Applies on BOTH orientations: a vertical dock morphs its block axis too.
|
|
115
58
|
*/
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* In-cap arrangement. `"linear"` (default) lays the active layer out as a
|
|
119
|
-
* linear row/column. `"grid"` makes the active layer a self-wrapping tile
|
|
120
|
-
* grid (Launchpad/Stage-Manager track symmetry — `auto-fill` columns of
|
|
121
|
-
* `--dock-tile-min`). ORTHOGONAL to `overflow` (the OVER-cap strategy):
|
|
122
|
-
* `layout` is the IN-cap arrangement.
|
|
123
|
-
*
|
|
124
|
-
* Hard contract: a `layout="grid"` dock is `alwaysExpanded` (a 2D panel
|
|
125
|
-
* does not read as a collapsible pill, and no width morph means no
|
|
126
|
-
* per-frame grid reflow). The canonical pairing is
|
|
127
|
-
* `shape="card" layout="grid"` (the props stay independent — no
|
|
128
|
-
* auto-implication of `shape`).
|
|
129
|
-
*/
|
|
130
|
-
layout?: "linear" | "grid";
|
|
59
|
+
collapse?: DockCollapse;
|
|
131
60
|
/**
|
|
132
61
|
* The KNOWN background-layer canvas the dock floats over (an aurora/blob
|
|
133
62
|
* `<canvas>`) — an element, a getter, or a CSS selector. When present, the
|
|
@@ -135,24 +64,12 @@ export interface DockProps {
|
|
|
135
64
|
* case); absent, it stack-walks the painted page background (the static case).
|
|
136
65
|
*/
|
|
137
66
|
backgroundCanvas?: HTMLCanvasElement | (() => HTMLCanvasElement | null) | string | null;
|
|
138
|
-
/**
|
|
139
|
-
* Native dynamic-search mode. Default `false`. When enabled, the dock stamps
|
|
140
|
-
* `[data-search]` and renders `#search` inside the existing morph aperture. The
|
|
141
|
-
* consumer composes `useDockSearch` and supplies its field and result menu. The
|
|
142
|
-
* dock's `--dock-morph-t` remains the sole pill-to-field motion scalar.
|
|
143
|
-
*/
|
|
144
|
-
search?: boolean;
|
|
145
67
|
}
|
|
146
68
|
/** The resolved shell-prop computeds the GlassDock SFC binds. */
|
|
147
69
|
export interface DockShellProps {
|
|
148
|
-
collapseDelay: ComputedRef<number>;
|
|
149
70
|
startCollapsed: ComputedRef<boolean>;
|
|
150
|
-
interaction: ComputedRef<DockInteraction>;
|
|
151
|
-
layoutValue: ComputedRef<"linear" | "grid">;
|
|
152
71
|
shape: ComputedRef<"pill" | "rounded" | "card">;
|
|
153
72
|
orientation: ComputedRef<"horizontal" | "vertical">;
|
|
154
|
-
size: ComputedRef<DockSize>;
|
|
155
|
-
scrollClass: ComputedRef<string | null>;
|
|
156
73
|
alwaysExpanded: ComputedRef<boolean>;
|
|
157
74
|
fitContent: ComputedRef<boolean>;
|
|
158
75
|
}
|
|
@@ -1,20 +1,13 @@
|
|
|
1
1
|
import type { ComputedRef, Ref } from "vue";
|
|
2
2
|
import type { DockHoldKind } from "./dockContext.js";
|
|
3
|
-
import type { DockInteraction } from "./useDockShellProps.js";
|
|
4
3
|
export interface UseDockStateOptions {
|
|
5
|
-
/** Delay before auto-collapse after mouse leaves (ms)
|
|
4
|
+
/** Delay before auto-collapse after mouse leaves (ms). Defaults to
|
|
5
|
+
* `DOCK_COLLAPSE_DELAY_MS`, the one idle window every GlassDock reads. */
|
|
6
6
|
collapseDelay?: number;
|
|
7
7
|
/** Root element ref — used for contains() checks */
|
|
8
8
|
rootEl: Ref<HTMLElement | null>;
|
|
9
9
|
/** Disable collapse behavior and keep the dock expanded. */
|
|
10
10
|
alwaysExpanded?: Ref<boolean> | boolean;
|
|
11
|
-
/**
|
|
12
|
-
* Posture ownership. `"auto"` (default) runs the built-in FSM; `"manual"`
|
|
13
|
-
* suppresses every environmental writer (hover, focus, idle timer,
|
|
14
|
-
* outside-click, collapsed-tap) at BOTH poles, leaving only `expand()` /
|
|
15
|
-
* `collapse()` operative — the consumer owns posture.
|
|
16
|
-
*/
|
|
17
|
-
interaction?: Ref<DockInteraction> | DockInteraction;
|
|
18
11
|
/** Mount-only posture for a collapsible dock. */
|
|
19
12
|
initialExpanded?: boolean;
|
|
20
13
|
/** Ref that suppresses click-away during an active dock animation. */
|
|
@@ -33,4 +33,19 @@ export declare const DOCK_LAYER_GROUP_LABEL = "glass-ui:dock-layer-group";
|
|
|
33
33
|
/** Intent dwell before a collapsed→hover expand commits. A chasing leave inside
|
|
34
34
|
* this window cancels the expansion. */
|
|
35
35
|
export declare const HOVER_INTENT_MS = 60;
|
|
36
|
+
/**
|
|
37
|
+
* The ONE idle window before an unheld, unhovered dock auto-collapses.
|
|
38
|
+
*
|
|
39
|
+
* [2026-08-12 · BK #47 W1 SURFACE] `collapseDelay` was a per-dock prop; it is struck
|
|
40
|
+
* and this is its single resolution point. The patient-dwell value (2500 → 3600) is a
|
|
41
|
+
* forgiving hover/interaction window.
|
|
42
|
+
*
|
|
43
|
+
* [2026-08-24 · BK #47 W3 LATTICE] ~~`useDockState` and `useDockTouchGate` both default
|
|
44
|
+
* to it, so the two owners of the same timer cannot drift apart.~~ — `useDockTouchGate`
|
|
45
|
+
* is DELETED (a JS touch gate beside a native snap scroller is a second owner of one
|
|
46
|
+
* gesture; `touch-action: pan-x` + mandatory snap supersede it outright). There is now
|
|
47
|
+
* exactly ONE consumer, `useDockState`, so the drift this sentence guarded against is
|
|
48
|
+
* not merely prevented — it has no second party left to occur between.
|
|
49
|
+
*/
|
|
50
|
+
export declare const DOCK_COLLAPSE_DELAY_MS = 3600;
|
|
36
51
|
export declare const MORPH_SETTLE_MS = 840;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { default as GlassDock } from "./GlassDock.vue.js";
|
|
2
|
-
export type { DockBackdropMode,
|
|
2
|
+
export type { DockBackdropMode, DockCollapse, DockProps, } from "./composables/useDockShellProps.js";
|
|
3
3
|
export { default as DockLayerGroup } from "./DockLayerGroup.vue.js";
|
|
4
4
|
export { default as DockLayer } from "./DockLayer.vue.js";
|
|
5
5
|
export { default as DockCrossfade } from "./DockCrossfade.vue.js";
|
|
@@ -9,7 +9,7 @@ export { default as DockTrigger } from "./DockTrigger.vue.js";
|
|
|
9
9
|
export { default as DockBackgroundToggle } from "./DockBackgroundToggle.vue.js";
|
|
10
10
|
export { default as DockSeparator } from "./DockSeparator.vue.js";
|
|
11
11
|
export type { UseDockStateOptions, UseDockStateReturn, DockState } from "./composables/index.js";
|
|
12
|
-
export { DOCK_CONTEXT_KEY, useDockContext, useOptionalDockContext, provideDockContext, type DockContext, type DockOrientation,
|
|
12
|
+
export { DOCK_CONTEXT_KEY, useDockContext, useOptionalDockContext, provideDockContext, type DockContext, type DockOrientation, } from "./composables/dockContext.js";
|
|
13
13
|
export { useDockCtaReceive, type UseDockCtaReceiveOptions, type UseDockCtaReceiveReturn, type DockCtaReceivePreset, } from "../../composables/motion/morph/useDockCtaReceive.js";
|
|
14
14
|
export { useDockSearch } from "./composables/index.js";
|
|
15
15
|
export type { UseDockSearchOptions, UseDockSearchReturn } from "./composables/index.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{@property --dock-press-t{syntax: "<number>";inherits: true;initial-value: 0;}.dock-icon-button{display: inline-flex;align-items: center;justify-content: center;flex-shrink: 0;scale: 1;width: var(--dock-control-size,var(--size-icon-btn));height: var(--dock-control-size,var(--size-icon-btn));padding: var(--dock-icon-padding,0);cursor: pointer;border: none;background: transparent;border-radius: var(--dock-control-radius,var(--radius-pill));color: color-mix( in srgb,var(--dock-fg-on-aurora,var(--foreground)) calc(var(--opacity-icon-muted) * 100%),transparent );outline: none;transition: background-color var(--dock-motion-fast),color var(--dock-motion-fast),scale var(--dock-press-spring),opacity var(--dock-motion-fast),box-shadow var(--dock-motion-fast);--glass-btn-press-t: var(--dock-press-t,0);filter: brightness(calc(1 - var(--dock-press-t,0) * 0.04));&:hover:not(:disabled):not([aria-disabled="true"]){background: var(--dock-icon-hover-bg,var(--dock-control-hover-bg));color: var(--btn-hover-color,var(--foreground));scale: var(--scale-hover-dock);}&:active:not(:disabled):not([aria-disabled="true"]){background: var(--dock-control-press-bg);}&:active:not(:disabled):not([data-press-armed]):not([aria-disabled="true"]){scale: var(--scale-press-dock);}&:disabled,&[aria-disabled="true"]{opacity: var(--opacity-disabled,0.4);pointer-events: none;cursor: default;}&:focus:not(:focus-visible){
|
|
1
|
+
@layer components{@property --dock-press-t{syntax: "<number>";inherits: true;initial-value: 0;}.dock-icon-button{display: inline-flex;align-items: center;justify-content: center;flex-shrink: 0;scale: 1;width: var(--dock-control-size,var(--size-icon-btn));height: var(--dock-control-size,var(--size-icon-btn));padding: var(--dock-icon-padding,0);cursor: pointer;border: none;background: transparent;border-radius: var(--dock-control-radius,var(--radius-pill));color: color-mix( in srgb,var(--dock-fg-on-aurora,var(--foreground)) calc(var(--opacity-icon-muted) * 100%),transparent );outline: none;transition: background-color var(--dock-motion-fast),color var(--dock-motion-fast),scale var(--dock-press-spring),opacity var(--dock-motion-fast),box-shadow var(--dock-motion-fast);--glass-btn-press-t: var(--dock-press-t,0);filter: brightness(calc(1 - var(--dock-press-t,0) * 0.04));&:hover:not(:disabled):not([aria-disabled="true"]){background: var(--dock-icon-hover-bg,var(--dock-control-hover-bg));color: var(--btn-hover-color,var(--foreground));scale: var(--scale-hover-dock);}&:active:not(:disabled):not([aria-disabled="true"]){background: var(--dock-control-press-bg);}&:active:not(:disabled):not([data-press-armed]):not([aria-disabled="true"]){scale: var(--scale-press-dock);}&:disabled,&[aria-disabled="true"]{opacity: var(--opacity-disabled,0.4);pointer-events: none;cursor: default;}&:focus:not(:focus-visible){outline: none;}&:is(.is-active,.active,[aria-expanded="true"],[aria-pressed="true"]){background: var(--dock-active-bg);color: var(--dock-active-color);scale: var(--dock-active-scale);border: var(--dock-active-border);box-shadow: var(--dock-active-shadow);}&[data-active]{--glass-capsule-fill: var( --dock-control-active-bg,var(--glass-plate-floating) );background: var(--glass-capsule-fill);color: var(--dock-fg-on-aurora,var(--foreground));}}.dock-icon-button > svg{width: var(--dock-icon-glyph,1.25rem);height: var(--dock-icon-glyph,1.25rem);}.dock-icon-button--compact{width: var(--dock-compact-control-size,auto);height: var(--dock-compact-control-size,auto);min-width: var(--dock-compact-control-min-width,0);padding: var(--dock-compact-control-padding,0.25rem);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.dock-tab-button{display: inline-flex;align-items: center;flex-shrink: 0;min-height: var(--dock-tab-h,var(--dock-tab-min-height,auto));padding-inline: var(--dock-tab-padding-inline,0.75rem);padding-block: var(--dock-tab-padding-block,0.375rem);border: none;background: transparent;background-clip: content-box;border-radius: var(--dock-control-radius,var(--radius-pill));font-size: var(--type-small);line-height: 1;color: var(--muted-foreground);text-decoration: none;cursor: pointer;white-space: nowrap;outline: none;scale: 1;transition: background-color var(--dock-motion-fast),color var(--dock-motion-fast),scale var(--dock-press-spring);&:hover:not(:disabled):not([aria-disabled="true"]){background: var(--dock-control-hover-bg);color: var(--foreground);scale: var(--scale-hover-dock);}&:active:not(:disabled):not([aria-disabled="true"]){background: var(--dock-control-press-bg);scale: var(--scale-press-dock);}&:
|
|
1
|
+
@layer components{.dock-tab-button{display: inline-flex;align-items: center;flex-shrink: 0;min-height: var(--dock-tab-h,var(--dock-tab-min-height,auto));padding-inline: var(--dock-tab-padding-inline,0.75rem);padding-block: var(--dock-tab-padding-block,0.375rem);border: none;background: transparent;background-clip: content-box;border-radius: var(--dock-control-radius,var(--radius-pill));font-size: var(--type-small);line-height: 1;color: var(--muted-foreground);text-decoration: none;cursor: pointer;white-space: nowrap;outline: none;scale: 1;transition: background-color var(--dock-motion-fast),color var(--dock-motion-fast),scale var(--dock-press-spring);&:hover:not(:disabled):not([aria-disabled="true"]){background: var(--dock-control-hover-bg);color: var(--foreground);scale: var(--scale-hover-dock);}&:active:not(:disabled):not([aria-disabled="true"]){background: var(--dock-control-press-bg);scale: var(--scale-press-dock);}&:is(.is-active,.active,[aria-current="page"],[aria-pressed="true"]){background: var(--dock-control-active-bg);color: var(--foreground);}}.dock-tab-button[data-tier="primary"]{--dock-tab-min-height: 4rem;padding-inline: 1.5rem;background: color-mix(in srgb,var(--card) 60%,transparent);color: var(--foreground);}.dock-tab-button[data-tier="secondary"],.dock-icon-button[data-tier="secondary"]{background: color-mix(in srgb,var(--card) 50%,transparent);border: 1px solid var(--glass-border-quiet);box-shadow: var(--border-hairline);}.dock-tab-button[data-tier="secondary"]:hover:not(:disabled):not([aria-disabled="true"]),.dock-icon-button[data-tier="secondary"]:hover:not(:disabled):not([aria-disabled="true"]){background: color-mix(in srgb,var(--card) 65%,transparent);box-shadow: var(--glass-material-rim),0 0.5px 0 0 rgb(0 0 0 / 0.06);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.dock-trigger,.dock-select-trigger,.dock-dropdown-trigger{display: inline-flex;align-items: center;justify-content: center;flex-shrink: 0;scale: 1;gap: var(--dock-trigger-gap,0.25rem);min-height: var(--dock-trigger-min-height,auto);padding: var(--dock-trigger-padding-block,0.25rem) var(--dock-trigger-padding-inline,0.5rem);white-space: nowrap;cursor: pointer;border: none;background: transparent;background-clip: content-box;border-radius: var(--dock-control-radius,var(--radius-pill));color: color-mix( in srgb,var(--dock-fg-on-aurora,var(--foreground)) calc(var(--opacity-icon-muted) * 100%),transparent );outline: none;transition: background-color var(--dock-motion-fast),color var(--dock-motion-fast),scale var(--dock-press-spring),opacity var(--dock-motion-fast);}.dock-trigger:hover:not(:disabled),.dock-select-trigger:hover:not(:disabled),.dock-dropdown-trigger:hover:not(:disabled){background: var(--dock-control-hover-bg);color: var(--btn-hover-color,var(--foreground));}.dock-trigger:active:not(:disabled),.dock-select-trigger:active:not(:disabled),.dock-dropdown-trigger:active:not(:disabled){background: var(--dock-control-press-bg);scale: var(--scale-press-dock);}.dock-trigger:focus:not(:focus-visible),.dock-select-trigger:focus:not(:focus-visible),.dock-dropdown-trigger:focus:not(:focus-visible){
|
|
1
|
+
@layer components{.dock-trigger,.dock-select-trigger,.dock-dropdown-trigger{display: inline-flex;align-items: center;justify-content: center;flex-shrink: 0;scale: 1;gap: var(--dock-trigger-gap,0.25rem);min-height: var(--dock-trigger-min-height,auto);padding: var(--dock-trigger-padding-block,0.25rem) var(--dock-trigger-padding-inline,0.5rem);white-space: nowrap;cursor: pointer;border: none;background: transparent;background-clip: content-box;border-radius: var(--dock-control-radius,var(--radius-pill));color: color-mix( in srgb,var(--dock-fg-on-aurora,var(--foreground)) calc(var(--opacity-icon-muted) * 100%),transparent );outline: none;transition: background-color var(--dock-motion-fast),color var(--dock-motion-fast),scale var(--dock-press-spring),opacity var(--dock-motion-fast);}.dock-trigger:hover:not(:disabled),.dock-select-trigger:hover:not(:disabled),.dock-dropdown-trigger:hover:not(:disabled){background: var(--dock-control-hover-bg);color: var(--btn-hover-color,var(--foreground));}.dock-trigger:active:not(:disabled),.dock-select-trigger:active:not(:disabled),.dock-dropdown-trigger:active:not(:disabled){background: var(--dock-control-press-bg);scale: var(--scale-press-dock);}.dock-trigger:focus:not(:focus-visible),.dock-select-trigger:focus:not(:focus-visible),.dock-dropdown-trigger:focus:not(:focus-visible){outline: none;}.dock-trigger:focus-visible,.dock-select-trigger:focus-visible,.dock-dropdown-trigger:focus-visible{transition: background-color var(--dock-motion-fast),color var(--dock-motion-fast),scale var(--dock-press-spring),opacity var(--dock-motion-fast),box-shadow var(--dock-motion-fast);}.dock-trigger:is( .is-active,.active,[aria-expanded="true"],[aria-pressed="true"] ),.dock-select-trigger:is( .is-active,.active,[aria-expanded="true"],[aria-pressed="true"] ),.dock-dropdown-trigger:is( .is-active,.active,[aria-expanded="true"],[aria-pressed="true"] ){background: var(--dock-control-active-bg);color: var(--foreground);}.dock-select-trigger__chevron{width: var(--dock-trigger-icon-size,0.75rem);height: var(--dock-trigger-icon-size,0.75rem);flex-shrink: 0;opacity: 0.5;rotate: 0deg;transition: rotate var(--dock-press-spring);}.dock-select-trigger[data-state="open"] .dock-select-trigger__chevron{rotate: 180deg;}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@import "./controls/icon-button.css";@import "./controls/tab-button.css";@import "./controls/triggers.css";@import "./controls/touch-floor.css";@layer components{
|
|
1
|
+
@import "./controls/icon-button.css";@import "./controls/tab-button.css";@import "./controls/triggers.css";@import "./controls/touch-floor.css";@layer components{:where( .dock-icon-button,.dock-tab-button,.dock-select-trigger,.dock-dropdown-trigger ){--glass-specular-size: var(--dock-control-specular-size,22%);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--dock-content-safe-inset: var(--dock-vertical-extend-length,2.5rem);--dock-
|
|
1
|
+
:root{--dock-content-safe-inset: var(--dock-vertical-extend-length,2.5rem);--dock-morph-max-stretch: 1.14;--dock-search-shrink-start: calc(0rem * var(--dock-scale));--dock-search-shrink-end: calc(7.25rem * var(--dock-scale));}@layer components{.glass-dock{--dock-padding-block: calc( var(--dock-density-comfortable-padding-block,0.5rem) * var(--dock-scale) );--dock-padding-inline: calc( var(--dock-density-comfortable-padding-inline,0.75rem) * var(--dock-scale) );--dock-control-size: max( calc( var(--dock-density-comfortable-control-size,2.5rem) * var(--dock-scale) ),var(--dock-control-floor,0px) );--dock-layer-height: max( calc( var(--dock-density-comfortable-layer-height,2.5rem) * var(--dock-scale) ),var(--dock-control-floor,0px) );--dock-control-safe-inset: calc(var(--dock-control-size) * 0.1);--dock-layer-gap: calc( var(--dock-density-comfortable-gap,0.375rem) * var(--dock-scale) );--dock-trigger-padding-block: calc( var(--dock-density-comfortable-trigger-padding-block,0.25rem) * var(--dock-scale) );--dock-trigger-padding-inline: calc( var(--dock-density-comfortable-trigger-padding-inline,0.5rem) * var(--dock-scale) );--dock-tab-padding-block: calc( var(--dock-density-comfortable-tab-padding-block,0.4375rem) * var(--dock-scale) );--dock-tab-padding-inline: calc( var(--dock-density-comfortable-tab-padding-inline,0.75rem) * var(--dock-scale) );--dock-tab-h: calc(38px * var(--dock-scale));}.glass-dock[data-preset="cockpit"]{--dock-control-size: max( calc(2.75rem * var(--dock-scale)),var(--dock-control-floor,0px) );--dock-layer-height: max( calc(2.75rem * var(--dock-scale)),var(--dock-control-floor,0px) );--dock-padding-block: calc( var(--dock-density-compact-padding-block,0.25rem) * var(--dock-scale) );--dock-padding-inline: calc( var(--dock-density-compact-padding-inline,0.375rem) * var(--dock-scale) );--dock-layer-gap: calc( var(--dock-density-compact-gap,0.25rem) * var(--dock-scale) );--dock-control-safe-inset: calc(var(--dock-control-size) * 0.1);--dock-trigger-padding-block: calc( var(--dock-density-compact-trigger-padding-block,0.1875rem) * var(--dock-scale) );--dock-trigger-padding-inline: calc( var(--dock-density-compact-trigger-padding-inline,0.4375rem) * var(--dock-scale) );--dock-tab-padding-block: calc( var(--dock-density-compact-tab-padding-block,0.3125rem) * var(--dock-scale) );--dock-tab-padding-inline: calc( var(--dock-density-compact-tab-padding-inline,0.625rem) * var(--dock-scale) );--dock-tab-h: calc(32px * var(--dock-scale));--dock-label-ratio: 0.275;--dock-icon-glyph: max( calc(var(--dock-layer-height) * var(--dock-icon-glyph-ratio)),var(--dock-icon-glyph-floor) );--dock-control-glyph-size: var(--dock-icon-glyph);}.glass-dock{--dock-icon-glyph: max( calc( var(--dock-layer-height,calc(2.5rem * var(--dock-scale))) * var(--dock-icon-glyph-ratio) ),var(--dock-icon-glyph-floor) );--dock-control-glyph-size: var(--dock-icon-glyph);}@media (pointer: coarse){.glass-dock{--dock-scale: var(--dock-mobile-scale,1);--dock-control-floor: var(--dock-touch-target,2.75rem);--size-icon-btn: var(--dock-touch-target,2.75rem);--dock-icon-glyph: max( calc( var(--dock-layer-height,calc(2.5rem * var(--dock-scale))) * var(--dock-icon-glyph-ratio) ),var(--dock-icon-glyph-floor) );--dock-control-glyph-size: var(--dock-icon-glyph);--dock-collapsed-padding: calc(0.25rem * var(--dock-scale));--dock-layer-tab-size: calc(1.75rem * var(--dock-scale));--dock-collapsed-summary-min-size: calc( var(--dock-layer-height,2.5rem) * 0.85 );}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@import "./shell.css";@import "./shell-regions.css";@import "./dock.css";@import "./morph.css";@import "./adaptive-legibility.css";@import "./density.css";@import "./shape.css";@import "./layers.css";@import "./layer-group.css";@import "./crossfade.css";@import "./
|
|
1
|
+
@import "./shell.css";@import "./shell-regions.css";@import "./dock.css";@import "./morph.css";@import "./adaptive-legibility.css";@import "./density.css";@import "./shape.css";@import "./layers.css";@import "./layer-group.css";@import "./crossfade.css";@import "./run.css";@import "./cta-seat.css";@import "./search.css";@property --dock-morph-t{syntax: "<number>";inherits: true;initial-value: 0;}@property --dock-t{syntax: "<number>";inherits: false;initial-value: 0;}@property --dock-local-scale{syntax: "<number>";inherits: true;initial-value: 1;}@property --dock-scale{syntax: "<number>";inherits: true;initial-value: 1;}@property --dock-pitch{syntax: "<length>";inherits: true;initial-value: 0px;}@property --dock-open-pitches{syntax: "<number>";inherits: true;initial-value: 3;}@layer components{:where( .glass-dock,.dock-layer-tab,.dock-icon-button,.dark-mode-toggle-button,.dock-tab-button,.dock-select-trigger,.dock-dropdown-trigger ){--dock-motion-fast: var(--duration-fast) var(--ease-standard);--dock-motion-standard: var(--duration-normal) var(--ease-standard);--dock-motion-resize: var(--spring-dock-duration) var(--dock-resize-spring);--dock-ring-width: var(--focus-ring-width);--dock-ring-offset: var(--focus-ring-width);--dock-ring-color: color-mix(in srgb,var(--focus-ring-color) 48%,transparent);--dock-ring-reserve: calc(var(--dock-ring-width) + var(--dock-ring-offset));}.dock-icon-button:focus-visible,.dock-tab-button:focus-visible,.dock-select-trigger:focus-visible,.dock-dropdown-trigger:focus-visible{outline: var(--dock-ring-width) solid var(--dock-ring-color);outline-offset: var(--dock-ring-offset);}.glass-dock [data-ring-yield]:focus-visible{outline: none;}.dock-icon-button:disabled,.dock-tab-button:disabled,.dock-select-trigger:disabled,.dock-dropdown-trigger:disabled,.dock-icon-button[aria-disabled="true"],.dock-tab-button[aria-disabled="true"]{opacity: var(--opacity-disabled);cursor: not-allowed;}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.dock-separator{@apply flex-shrink-0;width: 1px;height: var(--dock-separator-height);margin: 0 0.375rem;background: var(--dock-hairline);}.glass-dock.vertical .dock-separator,.dock-layer-group.vertical .dock-separator,.dock-separator[data-orientation="vertical"]{width: var(--dock-separator-height);height: 1px;align-self: center;margin: 0.375rem 0;}
|
|
1
|
+
@layer components{.dock-separator{@apply flex-shrink-0;width: 1px;height: var(--dock-separator-height);margin: 0 0.375rem;background: var(--dock-hairline);}.glass-dock.vertical .dock-separator,.dock-layer-group.vertical .dock-separator,.dock-separator[data-orientation="vertical"]{width: var(--dock-separator-height);height: 1px;align-self: center;margin: 0.375rem 0;}:is(.glass-dock,.dock-layer-group):not(.vertical) .dock-hairline{align-self: stretch;height: 100%;margin-block: 0;}:is(.glass-dock,.dock-layer-group).vertical .dock-hairline{align-self: stretch;width: 100%;margin-inline: 0;}.dock-spacer{@apply flex-1;}.dock-layer-group{display: flex;gap: var(--dock-layer-group-gap,var(--dock-layer-gap,0.25rem));min-width: 0;min-height: 0;}.dock-layer-group.horizontal{flex-direction: row;align-items: stretch;}.dock-layer-group.horizontal.switcher-end{flex-direction: row-reverse;}.dock-layer-group.vertical{flex-direction: column;align-items: stretch;}.dock-layer-group.vertical.switcher-end{flex-direction: column-reverse;}:where(.glass-dock,.dock-layer-group) .dock-layer-switcher{display: flex;flex-direction: column;flex-shrink: 0;align-self: start;min-height: max-content;gap: var(--dock-layer-switcher-gap,0.125rem);padding: var(--dock-layer-switcher-padding,0.125rem);background: var(--dock-layer-switcher-bg,transparent);border-right: 1px solid var(--dock-hairline);}.dock-layer-group.vertical .dock-layer-switcher{flex-direction: row;border-right: none;border-bottom: 1px solid var(--dock-hairline);}.dock-layer-group.horizontal.switcher-end .dock-layer-switcher{border-right: none;border-left: 1px solid var(--dock-hairline);}.dock-layer-group.vertical.switcher-end .dock-layer-switcher{border-bottom: none;border-top: 1px solid var(--dock-hairline);}:where(.glass-dock,.dock-layer-group) .dock-layer-switcher{position: relative;}:where(.glass-dock,.dock-layer-group) .dock-layer-switcher .dock-layer-tab{position: relative;display: inline-flex;align-items: center;justify-content: center;flex-shrink: 0;width: var(--dock-layer-tab-size,var(--dock-control-size,1.75rem));height: var(--dock-layer-tab-size,var(--dock-control-size,1.75rem));border: 0;border-radius: var(--dock-layer-tab-radius,var(--radius-sm));background: transparent;color: var( --dock-layer-switcher-glyph,color-mix( in srgb,var(--dock-fg-on-aurora,var(--foreground)) 78%,transparent ) );cursor: pointer;font: inherit;font-size: var(--type-caption);z-index: 1;transition: background var(--dock-motion-fast),color var(--dock-motion-fast);}:where(.glass-dock,.dock-layer-group) .dock-layer-switcher .dock-layer-tab svg{width: 1rem;height: 1rem;flex-shrink: 0;}:where(.glass-dock,.dock-layer-group) .dock-layer-switcher .dock-layer-tab:hover{background: var( --dock-layer-switcher-hover,color-mix(in srgb,var(--accent) 30%,transparent) );color: var(--dock-fg-on-aurora,var(--foreground));}:where(.glass-dock,.dock-layer-group) .dock-layer-switcher .dock-layer-tab[aria-selected="true"]{color: var( --dock-layer-switcher-glyph-active,var(--dock-fg-on-aurora,var(--foreground)) );}:where(.glass-dock,.dock-layer-group) .dock-layer-switcher [role="tab"]:focus-visible{outline: var(--dock-ring-width) solid var(--dock-ring-color);outline-offset: var(--dock-ring-offset);}:where(.glass-dock,.dock-layer-group) .dock-layer-switcher .dock-layer-tab-indicator{position: absolute;left: 0;top: 0;width: var(--dock-layer-tab-size,var(--dock-control-size,1.75rem));opacity: 0;border-radius: var(--dock-layer-tab-radius,var(--radius-sm));background: var(--dock-layer-switcher-active,var(--glass-plate-floating));transition: width var(--spring-dock-duration) var(--spring-dock),height var(--spring-dock-duration) var(--spring-dock),translate var(--spring-dock-duration) var(--spring-dock);pointer-events: none;}.dock-layer-group.vertical .dock-layer-switcher .dock-layer-tab-indicator{width: auto;height: var(--dock-layer-tab-size,var(--dock-control-size,1.75rem));}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{:where(.glass-dock,.dock-layer-group) .dock-layers{display: grid;min-width: 0;}.glass-dock[data-morphing]{--dock-live: calc( var(--dock-collapsed-px,var(--dock-expanded-px,0px)) + ( var(--dock-expanded-px,0px) - var(--dock-collapsed-px,var(--dock-expanded-px,0px)) ) * clamp(0,var(--dock-expand-t),1) );--dock-size-scale: clamp( 0.06,calc(var(--dock-live) / max(var(--dock-expanded-px,1px),1px)),1 );transform-origin: center center;will-change: transform;}.glass-dock[data-morphing]:not(.vertical){inline-size: var(--dock-expanded-px);}.glass-dock[data-morphing].vertical{block-size: var(--dock-expanded-px);}.glass-dock.expanded
|
|
1
|
+
@layer components{:where(.glass-dock,.dock-layer-group) .dock-layers{display: grid;min-width: 0;}.glass-dock[data-morphing]{--dock-live: calc( var(--dock-collapsed-px,var(--dock-expanded-px,0px)) + ( var(--dock-expanded-px,0px) - var(--dock-collapsed-px,var(--dock-expanded-px,0px)) ) * clamp(0,var(--dock-expand-t),1) );--dock-size-scale: clamp( 0.06,calc(var(--dock-live) / max(var(--dock-expanded-px,1px),1px)),1 );transform-origin: center center;will-change: transform;}.glass-dock[data-morphing]:not(.vertical){inline-size: var(--dock-expanded-px);}.glass-dock[data-morphing].vertical{block-size: var(--dock-expanded-px);}.glass-dock.expanded > .dock-controls > .dock-layers{overflow-x: visible;}:where(.glass-dock,.dock-layer-group) .dock-layer{transition: visibility 0s linear var(--duration-normal);}:where(.glass-dock,.dock-layer-group) .dock-layer:not(.is-active):not(.is-leaving){opacity: 0;visibility: hidden;pointer-events: none;}:where(.glass-dock,.dock-layer-group) .dock-layer.is-active{opacity: 1;visibility: visible;pointer-events: auto;transition: visibility 0s;}:where(.glass-dock,.dock-layer-group) .dock-layer.is-leaving{opacity: 0;visibility: visible;pointer-events: none;}.glass-dock[data-morphing] .dock-layer.is-leaving{opacity: calc(1 - var(--dock-morph-t));}.glass-dock .dock-layer.is-leaving.is-press-keepalive{opacity: 1;visibility: visible;pointer-events: none;}.glass-dock .dock-layer.is-leaving.is-press-keepalive [inert]{visibility: hidden;}.glass-dock .dock-layer.is-leaving.is-press-keepalive [data-dock-press-origin]{position: relative;z-index: 1;pointer-events: auto;}:where(.glass-dock,.dock-layer-group) .dock-layer{display: flex;align-items: center;grid-area: 1 / 1;gap: var(--dock-layer-gap,0.375rem);}.glass-dock:not(.vertical) .dock-layer{white-space: nowrap;min-height: var(--dock-layer-height,2.5rem);}:where(.glass-dock,.dock-layer-group) .dock-layer.is-active{position: relative;}:where(.glass-dock,.dock-layer-group) .dock-layer:not(.is-active){position: absolute;inset: 0;}.glass-dock[data-morphing] .dock-layer.is-active > *{--dock-stagger-window: var(--dock-stagger-window-size,0.55);--dock-stagger-onset: 0;--child-reveal: clamp( 0,calc( (var(--dock-expand-t) - var(--dock-stagger-onset)) / var(--dock-stagger-window) ),1 );opacity: var(--child-reveal);scale: calc(0.82 + 0.18 * var(--child-reveal));transform-origin: center;}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(2 of :not(.dock-separator)):nth-last-child(n + 2 of :not(.dock-separator)),.glass-dock[data-morphing] .dock-layer.is-active > *:nth-last-child(2 of :not(.dock-separator)):nth-child(n + 2 of :not(.dock-separator)){--dock-stagger-onset: calc(var(--dock-stagger-step) * 1);}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(3 of :not(.dock-separator)):nth-last-child(n + 3 of :not(.dock-separator)),.glass-dock[data-morphing] .dock-layer.is-active > *:nth-last-child(3 of :not(.dock-separator)):nth-child(n + 3 of :not(.dock-separator)){--dock-stagger-onset: calc(var(--dock-stagger-step) * 2);}.glass-dock[data-morphing] .dock-layer.is-active > *:nth-child(n + 4 of :not(.dock-separator)):nth-last-child(n + 4 of :not(.dock-separator)){--dock-stagger-onset: calc(var(--dock-stagger-step) * 3);}.glass-dock.expanded:not(.fit-content):not([data-morphing]) .dock-layers{width: 100%;}.glass-dock.expanded:not(.fit-content) .dock-layer--full{width: 100%;}.glass-dock.always-expanded{cursor: default;}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.glass-dock.expanded,.glass-dock.always-expanded{--dock-expand-t: 1;}.glass-dock.collapsed{--dock-expand-t: 0;}.glass-dock.expanded[data-morphing],.glass-dock.always-expanded[data-morphing]{--dock-expand-t: var(--dock-morph-t);}.glass-dock.collapsed[data-morphing]{--dock-expand-t: calc(1 - var(--dock-morph-t));}.glass-dock:not(.vertical)
|
|
1
|
+
@layer components{.glass-dock.expanded,.glass-dock.always-expanded{--dock-expand-t: 1;}.glass-dock.collapsed{--dock-expand-t: 0;}.glass-dock.expanded[data-morphing],.glass-dock.always-expanded[data-morphing]{--dock-expand-t: var(--dock-morph-t);}.glass-dock.collapsed[data-morphing]{--dock-expand-t: calc(1 - var(--dock-morph-t));}.glass-dock:not(.vertical){--dock-pad-collapsed: max( var(--dock-padding-block,0.375rem),var(--dock-collapsed-padding,0px) );padding-block: var(--dock-padding-block,0.375rem);padding-inline: calc( var(--dock-pad-collapsed) + (var(--dock-padding-inline,0.5rem) - var(--dock-pad-collapsed)) * var(--dock-expand-t) );}.glass-dock.vertical{--dock-pad-collapsed: max( var(--dock-padding-inline,0.5rem),var(--dock-collapsed-padding,0px) );padding-inline: var(--dock-padding-inline,0.5rem);padding-block: calc( var(--dock-pad-collapsed) + (var(--dock-padding-block,0.375rem) - var(--dock-pad-collapsed)) * var(--dock-expand-t) );}.glass-dock.collapsed{cursor: pointer;justify-content: center;box-shadow: var(--shadow-dock-override,var(--shadow-dock-collapsed));}.glass-dock .dock-layer--summary{min-width: var( --dock-collapsed-summary-min-size,var(--dock-layer-height,2.5rem) );min-block-size: var( --dock-collapsed-summary-min-size,var(--dock-layer-height,2.5rem) );block-size: var( --dock-collapsed-summary-min-size,var(--dock-layer-height,2.5rem) );height: var( --dock-collapsed-summary-min-size,var(--dock-layer-height,2.5rem) );aspect-ratio: 1;justify-content: center;}.glass-dock[data-morphing] .dock-layer--summary{--dock-expand-t: var(--dock-morph-t);}.glass-dock .dock-layer--summary:empty{min-width: 0;inline-size: 0;padding: 0;margin: 0;border: 0;}.glass-dock.collapsed:has(.dock-layer--summary:empty) .dock-persistent + .dock-layers{margin-inline-start: 0;}.glass-dock.collapsed:has(.dock-layer--summary:empty) .dock-persistent{display: grid;place-items: center;}.glass-dock.collapsed:has(.dock-layer--summary:empty) .dock-persistent > *{place-self: center;}.glass-dock.collapsed .dock-persistent svg,.glass-dock.collapsed .dock-layer--summary svg{min-width: 1rem;min-height: 1rem;}.glass-dock.collapsed:hover{box-shadow: var(--shadow-dock-override,var(--shadow-dock));}.glass-dock[data-held] .dock-plate{--dock-plate-expanded-border: var(--glass-border-floating);transition: border-color var(--duration-fast) var(--ease-standard);}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer components{.glass-dock{--dock-seat: var(--dock-control-size);--dock-run-gap: 0.5rem;--dock-pitch: calc(var(--dock-seat) + var(--dock-run-gap));--dock-open-pitches: 3;--dock-open-seat: calc( var(--dock-open-pitches) * var(--dock-pitch) - var(--dock-run-gap) );}.glass-dock.vertical{--dock-open-pitches: 2;}.glass-dock > .dock-controls > .dock-layers{flex: 1 1 auto;min-inline-size: 0;min-block-size: 0;}.glass-dock > .dock-controls > .dock-persistent{flex: 0 0 auto;}.glass-dock .dock-run{overflow-x: auto;overflow-y: hidden;scroll-snap-type: x mandatory;scroll-padding-inline: calc(var(--dock-pitch) / 2);touch-action: pan-x;overscroll-behavior: contain;scrollbar-width: none;min-inline-size: 0;box-sizing: content-box;padding-block: var(--dock-ring-reserve);margin-block: calc(-1 * var(--dock-ring-reserve));gap: var(--dock-run-gap);}.glass-dock .dock-run::-webkit-scrollbar{display: none;}.glass-dock .dock-run > *{scroll-snap-align: start;flex: 0 0 auto;}.glass-dock.vertical .dock-run{overflow-x: hidden;overflow-y: auto;scroll-snap-type: y mandatory;scroll-padding-block: calc(var(--dock-pitch) / 2);touch-action: pan-y;min-block-size: 0;padding-block: 0;margin-block: 0;padding-inline: var(--dock-ring-reserve);margin-inline: calc(-1 * var(--dock-ring-reserve));}.glass-dock .dock-run > [aria-current]:not([aria-current="false"]),.glass-dock .dock-run > :has([aria-current]:not([aria-current="false"])){inline-size: var(--dock-open-seat);transition: inline-size var(--spring-dock-duration) var(--spring-dock);}.glass-dock .dock-run > :not([aria-current]:not([aria-current="false"])):not( :has([aria-current]:not([aria-current="false"])) ){transition: inline-size var(--spring-dock-duration) var(--spring-dock);}.glass-dock.vertical .dock-run > [aria-current]:not([aria-current="false"]),.glass-dock.vertical .dock-run > :has([aria-current]:not([aria-current="false"])){inline-size: auto;block-size: var(--dock-open-seat);transition: block-size var(--spring-dock-duration) var(--spring-dock);}.glass-dock.vertical .dock-run > :not([aria-current]:not([aria-current="false"])):not( :has([aria-current]:not([aria-current="false"])) ){transition: block-size var(--spring-dock-duration) var(--spring-dock);}.glass-dock{timeline-scope: --dock-run;--dock-cap-rest: 50%;--dock-cap-cut: var(--radius-card);}.glass-dock.shape-rounded{--dock-cap-rest: var(--radius-card);--dock-cap-cut: var(--radius-xs);}.glass-dock.shape-card{--dock-cap-rest: var(--dock-card-radius,var(--radius-dock-card));--dock-cap-cut: var(--radius-lg);}.glass-dock .dock-run{scroll-timeline: --dock-run inline;}.glass-dock.vertical .dock-run{scroll-timeline: --dock-run block;}.glass-dock .dock-plate{animation: gl-dock-cap-inline-start linear both,gl-dock-cap-inline-end linear both;animation-timeline: --dock-run,--dock-run;animation-range: 0 var(--dock-pitch),calc(100% - var(--dock-pitch)) 100%;animation-direction: normal,reverse;}.glass-dock.vertical .dock-plate{animation: gl-dock-cap-block-start linear both,gl-dock-cap-block-end linear both;animation-timeline: --dock-run,--dock-run;animation-range: 0 var(--dock-pitch),calc(100% - var(--dock-pitch)) 100%;animation-direction: normal,reverse;}.glass-dock .dock-run-status{position: absolute;inline-size: 1px;block-size: 1px;margin: -1px;padding: 0;overflow: hidden;clip-path: inset(50%);white-space: nowrap;border: 0;}}@keyframes gl-dock-cap-inline-start{from{border-start-start-radius: var(--dock-cap-rest);border-end-start-radius: var(--dock-cap-rest);}to{border-start-start-radius: var(--dock-cap-cut);border-end-start-radius: var(--dock-cap-cut);}}@keyframes gl-dock-cap-inline-end{from{border-start-end-radius: var(--dock-cap-rest);border-end-end-radius: var(--dock-cap-rest);}to{border-start-end-radius: var(--dock-cap-cut);border-end-end-radius: var(--dock-cap-cut);}}@keyframes gl-dock-cap-block-start{from{border-start-start-radius: var(--dock-cap-rest);border-start-end-radius: var(--dock-cap-rest);}to{border-start-start-radius: var(--dock-cap-cut);border-start-end-radius: var(--dock-cap-cut);}}@keyframes gl-dock-cap-block-end{from{border-end-start-radius: var(--dock-cap-rest);border-end-end-radius: var(--dock-cap-rest);}to{border-end-start-radius: var(--dock-cap-cut);border-end-end-radius: var(--dock-cap-cut);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.glass-dock
|
|
1
|
+
@layer components{.glass-dock .dock-search-field{display: flex;flex-direction: column;inline-size: 100%;min-inline-size: 0;gap: var(--dock-search-field-gap,0.375rem);}.glass-dock .dock-search-field .input-bar{--glass-veil-tier: var(--glass-veil-floating);@apply glass-plate;color: var(--foreground);}.glass-dock .dock-search-field .input-bar-field::placeholder,.glass-dock .dock-search-field .dock-search-ghost,.glass-dock .dock-search-field .dock-search-result-meta{color: var(--on-glass-muted);}.glass-dock .dock-search-field .dock-search-result{color: var(--foreground);}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.glass-dock{border-radius:
|
|
1
|
+
@layer components{.glass-dock{border-radius: var(--radius-dock);}.glass-dock[data-morphing]:not(.vertical){scale: var(--dock-size-scale,1) 1;}.glass-dock[data-morphing].vertical{scale: 1 var(--dock-size-scale,1);}.glass-dock[data-morphing]:not(.vertical) > .dock-controls > .dock-persistent,.glass-dock[data-morphing]:not(.vertical) > .dock-controls > .dock-layers{scale: calc(1 / max(var(--dock-size-scale,1),0.06)) 1;will-change: transform;}.glass-dock[data-morphing].vertical > .dock-controls > .dock-persistent,.glass-dock[data-morphing].vertical > .dock-controls > .dock-layers{scale: 1 calc(1 / max(var(--dock-size-scale,1),0.06));will-change: transform;}.glass-dock{--motion-weight: 1;}@media (prefers-reduced-motion: reduce){.glass-dock{--motion-weight: 0;}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.dock-persistent{display: flex;align-items: center;flex-shrink: 0;gap: var(--dock-layer-gap,0.375rem);}.glass-dock:not(.vertical) .dock-persistent{flex-direction: row;}.glass-dock.vertical .dock-persistent{flex-direction: column;align-items: stretch;}.glass-dock:not(.vertical) .dock-persistent + .dock-layers{margin-inline-start: var(--dock-layer-gap,0.375rem);}.glass-dock.vertical .dock-persistent + .dock-layers{margin-block-start: var(--dock-layer-gap,0.375rem);}.glass-dock.vertical .dock-layer{flex-direction: column;align-items: stretch;
|
|
1
|
+
@layer components{.dock-persistent{display: flex;align-items: center;flex-shrink: 0;gap: var(--dock-layer-gap,0.375rem);}.glass-dock:not(.vertical) .dock-persistent{flex-direction: row;}.glass-dock.vertical .dock-persistent{flex-direction: column;align-items: stretch;}.glass-dock:not(.vertical) .dock-persistent + .dock-layers{margin-inline-start: var(--dock-layer-gap,0.375rem);}.glass-dock.vertical .dock-persistent + .dock-layers{margin-block-start: var(--dock-layer-gap,0.375rem);}.glass-dock.vertical .dock-layer{flex-direction: column;align-items: stretch;min-width: 0;}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.glass-dock{--glass-blur-resting: blur( calc(var(--glass-blur-resting-radius) * var(--glass-level)) ) saturate(1.2);--dock-surface-blur: var(--glass-blur-resting);--dock-separator-height: calc(var(--dock-h,var(--size-icon-btn)) * 0.5);--dock-
|
|
1
|
+
@layer components{.glass-dock{--glass-blur-resting: blur( calc(var(--glass-blur-resting-radius) * var(--glass-level)) ) saturate(1.2);--dock-surface-blur: var(--glass-blur-resting);--dock-separator-height: calc(var(--dock-h,var(--size-icon-btn)) * 0.5);--dock-stagger-window-size: 0.4;--dock-stagger-step: 0.08;--dock-card-radius: var(--radius-dock-card);position: relative;z-index: 0;margin: 0 auto;--glass-backdrop: light;--dock-plate-collapsed-tier: var(--glass-veil-wash);--dock-plate-collapsed-border: var(--glass-border-floating);--dock-plate-expanded-tier: var(--glass-veil-dock);--dock-plate-expanded-border: var(--glass-border-dock);contain: layout style;display: inline-flex;align-items: center;white-space: nowrap;padding: var(--dock-padding-block,0.375rem) var(--dock-padding-inline,0.5rem);box-shadow: var(--glass-rim-top),var(--glass-rim-bottom),var(--shadow-dock-override,var(--shadow-dock));}.dark .glass-dock{--glass-blur-resting: blur( calc(var(--glass-blur-resting-radius) * var(--glass-level)) ) saturate(1.3) brightness(1.14);}.glass-dock{overflow: visible;}.glass-dock.vertical{display: inline-flex;flex-direction: column;align-items: stretch;justify-content: flex-start;gap: var(--dock-layer-gap,0.375rem);white-space: normal;width: auto;height: auto;max-block-size: var(--dock-max-block-size);padding: var(--dock-padding-block,0.375rem);border-radius: var(--radius-dock);transition: box-shadow var(--dock-motion-standard),transform var(--dock-motion-resize),scale var(--dock-motion-resize);}.glass-dock.vertical[data-morphing]{transition-property: box-shadow,transform;}.glass-dock.vertical:hover,.glass-dock.vertical:active,.glass-dock.vertical[data-held]{will-change: transform;}.glass-dock.vertical{padding: var(--dock-vertical-padding,var(--dock-padding-inline,0.5rem));}.glass-dock.vertical.shape-pill{border-radius: var(--radius-pill);}.glass-dock.vertical.shape-rounded{border-radius: var(--radius-card);}.glass-dock.vertical.shape-card{border-radius: calc( var(--radius-pill) + (var(--dock-card-radius) - var(--radius-pill)) * var(--dock-expand-t) );}.glass-dock:not(.vertical).shape-rounded{border-radius: var(--radius-card);}.glass-dock:not(.vertical).shape-card{border-radius: calc( var(--radius-pill) + (var(--dock-card-radius) - var(--radius-pill)) * var(--dock-expand-t) );}@supports (corner-shape: superellipse(2)){.glass-dock:not(.vertical).shape-card{corner-shape: var(--corner-shape-bigdock);}}}
|
|
@@ -1,48 +1,50 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { OklchStop } from "../../composables/color/index.js";
|
|
2
2
|
import { type BasisComponent } from "./math.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type FourierFieldConfig } from "./constants.js";
|
|
4
4
|
import type { RendererStatus } from "../../composables/glass/webgpu/rendererStatus.js";
|
|
5
5
|
/**
|
|
6
|
-
* FourierField —
|
|
7
|
-
* sibling primitive to Aurora, GooBlob, and DotFlowField. A chain of rotating circles
|
|
8
|
-
* stacked tip-to-tail draws the reconstructing partial-sum curve; a glowing comet head
|
|
9
|
-
* leads the fading trail. WebGPU-FIRST: the compute pass writes the partial-sum curve +
|
|
10
|
-
* the epicycle chain tips, the fullscreen-fragment render pass composites the SDF field; a
|
|
11
|
-
* WebGL2 GLSL twin is the fallback. It composes `useFourierField` with the
|
|
12
|
-
* `createGpuSubstrate` picker over the ONE canvas lifecycle leaf (offscreen-pause, live-PRM
|
|
13
|
-
* freeze, consumer-owned DPR) and the SHARED `usePointerVelocityField` (the pointer SCRUBS
|
|
14
|
-
* the reconstruction).
|
|
6
|
+
* FourierField — the drawing machine.
|
|
15
7
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
8
|
+
* Aurora is weather and the blob is a creature; this one is the substrate whose motion is
|
|
9
|
+
* a CHECKABLE CLAIM. Every frame is the truncated inverse transform of a fixed spectrum,
|
|
10
|
+
* `Σ c_k·e^{2πikt}`, and a reader can verify it: the rings are the terms, the chain is the
|
|
11
|
+
* sum, the head is where the parameter currently is. Nothing decorative moves.
|
|
18
12
|
*
|
|
19
|
-
*
|
|
20
|
-
* `
|
|
21
|
-
* the
|
|
13
|
+
* The two payoffs are CLOSURE — every index is an integer, so the figure completes exactly
|
|
14
|
+
* at `t = 1` — and ASSEMBLY — the spectrum is amplitude-ordered, so every step of the N
|
|
15
|
+
* axis adds the largest remaining correction rather than the next arbitrary frequency.
|
|
16
|
+
*
|
|
17
|
+
* WebGPU only. There is one renderer, because a second one would be a second paint law,
|
|
18
|
+
* and where WebGPU is absent the field declares it and paints nothing.
|
|
22
19
|
*/
|
|
23
20
|
type __VLS_Props = {
|
|
24
|
-
/** The
|
|
21
|
+
/** The author config. Defaults to the shipped identity. */
|
|
25
22
|
config?: FourierFieldConfig;
|
|
26
|
-
/** An explicit
|
|
23
|
+
/** An explicit spectrum. When absent, the config's `source` decides. */
|
|
27
24
|
spectrum?: readonly BasisComponent[];
|
|
28
|
-
/** Resolve the
|
|
25
|
+
/** Resolve the ramp as OKLCh (the studio themes it). Wins over `color`. */
|
|
29
26
|
getPalette?: () => OklchStop[];
|
|
30
|
-
/** Ambient-consumer
|
|
27
|
+
/** Ambient-consumer colour seam — a token or a literal; derives a two-stop ramp. */
|
|
31
28
|
color?: string;
|
|
32
|
-
/**
|
|
33
|
-
colorResolver?: ColorResolver;
|
|
34
|
-
/** Extra seed mixed into the generated elliptic spectrum PRNG. Default "". */
|
|
29
|
+
/** Seed for the generated spectrum. */
|
|
35
30
|
seed?: string;
|
|
36
|
-
/**
|
|
31
|
+
/** Hold the clock. The figure stays live; only time stops. */
|
|
37
32
|
freeze?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* The pointer scrubs and flicks the clock, and the host becomes a real slider.
|
|
35
|
+
* `false` is the decor mount: no listeners, no role, no tab stop.
|
|
36
|
+
*/
|
|
37
|
+
interactive?: boolean;
|
|
38
38
|
};
|
|
39
39
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
40
|
-
backend: () => import("../../
|
|
40
|
+
backend: () => import("../../index.js").GpuBackend;
|
|
41
41
|
pause: () => void;
|
|
42
42
|
resume: () => void;
|
|
43
43
|
wake: () => void;
|
|
44
|
-
renderAt: (timeSec: number) => void;
|
|
45
44
|
setHeadT: (t: number) => void;
|
|
45
|
+
/** The live loop parameter. Unwrapped on the exposed proxy, so a transport binds it. */
|
|
46
|
+
headT: Readonly<import("vue").Ref<number, number>>;
|
|
47
|
+
flick: (turnsPerSec: number) => void;
|
|
46
48
|
rendererStatus: Readonly<import("vue").Ref<RendererStatus, RendererStatus>>;
|
|
47
49
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
48
50
|
rendererStatus: (status: RendererStatus) => any;
|
|
@@ -51,6 +53,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
|
51
53
|
}>, {
|
|
52
54
|
seed: string;
|
|
53
55
|
freeze: boolean;
|
|
56
|
+
interactive: boolean;
|
|
54
57
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
55
58
|
declare const _default: typeof __VLS_export;
|
|
56
59
|
export default _default;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The substrate-travel spring, bound by JOB rather than by a remembered pair. This module
|
|
3
|
+
* owns exactly one invariant about it — the damping fraction it CONSUMES — because that is
|
|
4
|
+
* what decides whether a flick can rewind the drawing.
|
|
5
|
+
*/
|
|
6
|
+
export declare const FOURIER_TRAVEL_SPRING: import("../../composables/motion/index.js").SpringPresetRow;
|
|
7
|
+
/** The consumed damping fraction. At or above this, a flick has no backward frames. */
|
|
8
|
+
export declare const FOURIER_SETTLE_ZETA_FLOOR = 0.82;
|
|
9
|
+
export interface FourierClockInput {
|
|
10
|
+
/** Seconds elapsed since the last step. */
|
|
11
|
+
dt: number;
|
|
12
|
+
/** The config's speed multiplier. */
|
|
13
|
+
speed: number;
|
|
14
|
+
/** The pointer's horizontal velocity, or 0 when the pointer is not driving. */
|
|
15
|
+
scrubVelocity: number;
|
|
16
|
+
/** The pointer field's transient flick burst (0..1), or 0. */
|
|
17
|
+
burst: number;
|
|
18
|
+
/** Whether the pointer is engaged at all this step. */
|
|
19
|
+
engaged: boolean;
|
|
20
|
+
/** Hold the parameter and clear the momentum. */
|
|
21
|
+
frozen: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface FourierClock {
|
|
24
|
+
/** The loop parameter `head_t ∈ [0,1)`. */
|
|
25
|
+
readonly headT: number;
|
|
26
|
+
/** The current rate offset (turns/s) the flick spring is carrying. */
|
|
27
|
+
readonly momentum: number;
|
|
28
|
+
/** Advance one step; returns the rate the step actually used (never negative). */
|
|
29
|
+
step: (input: FourierClockInput) => number;
|
|
30
|
+
/** Seat the parameter directly. Takes no spring — a hand's position is not physics. */
|
|
31
|
+
set: (t: number) => void;
|
|
32
|
+
/** Inject one impulse in turns per second, capped by the advance budget. */
|
|
33
|
+
flick: (turnsPerSec: number) => void;
|
|
34
|
+
}
|
|
35
|
+
export declare function createFourierClock(): FourierClock;
|