@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
|
@@ -42,8 +42,36 @@ export interface UseAuroraReturn {
|
|
|
42
42
|
* acquisition and flips only when the backend readiness promise resolves.
|
|
43
43
|
*/
|
|
44
44
|
isArmed: Readonly<Ref<boolean>>;
|
|
45
|
+
/**
|
|
46
|
+
* The SETTLE BEACON. `true` once the runtime has armed, the current config has been
|
|
47
|
+
* applied, and the ground→field entrance has finished painting over it.
|
|
48
|
+
*
|
|
49
|
+
* `Aurora.vue` publishes it as `data-aurora-settled`; every capture — π, gate, or a
|
|
50
|
+
* consumer's own — waits on that attribute. A wall-clock sleep is not a substitute:
|
|
51
|
+
* inside the entrance the field paints medium-INDEPENDENTLY, so an early capture
|
|
52
|
+
* reads a picture that is identical across every medium and across page loads, with
|
|
53
|
+
* perfect confidence and no way to tell. Three seats measured that picture.
|
|
54
|
+
*
|
|
55
|
+
* Any config change re-opens it — a preset switch has its own entrance. So does a
|
|
56
|
+
* context LOSS: the field it witnesses is gone, and the restore replays the entrance,
|
|
57
|
+
* so the beacon never carries its pre-loss stamp across that replay.
|
|
58
|
+
*/
|
|
59
|
+
isSettled: Readonly<Ref<boolean>>;
|
|
45
60
|
rendererStatus: Readonly<Ref<RendererStatus>>;
|
|
46
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* How long past the last applied config the field needs before a capture is admissible.
|
|
64
|
+
*
|
|
65
|
+
* The entrance is the ground→field CROSSFADE: `.aurora-canvas-layer` transitions opacity
|
|
66
|
+
* 0→1 over `--duration-slow` (0.45 s) once `isArmed` flips, dissolving the palette-derived
|
|
67
|
+
* frame-0 ground into the live field. Until that completes a capture reads a blend of the
|
|
68
|
+
* two, which is what makes it medium-independent. 500 ms clears the 450 ms token with the
|
|
69
|
+
* margin for the frame the config write lands on.
|
|
70
|
+
*
|
|
71
|
+
* The clock is advanced by `requestAnimationFrame`, not `setTimeout`, so a backgrounded
|
|
72
|
+
* or parked surface never stamps a beacon it has not painted.
|
|
73
|
+
*/
|
|
74
|
+
export declare const AURORA_SETTLE_MS = 500;
|
|
47
75
|
/**
|
|
48
76
|
* Vue-side wrapper for the imperative `createAurora` runtime.
|
|
49
77
|
*
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import type { WebGPUCanvasFrame } from "../../../composables/glass/webgpu/useWebGPUCanvas.js";
|
|
16
16
|
import { type AuroraCursorScalars } from "./frameLoop.js";
|
|
17
17
|
import { type UploadableImageSource } from "./textureUpload.js";
|
|
18
|
-
import type
|
|
18
|
+
import { type AuroraConfig } from "../constants/presets.js";
|
|
19
19
|
import type { UsePointerVelocityField } from "../../../composables/motion/pointer/usePointerVelocityField.js";
|
|
20
20
|
export interface AuroraWGPUSetupDeps {
|
|
21
21
|
canvas: HTMLCanvasElement;
|
|
@@ -68,10 +68,23 @@ export type WarpMode = "fbm" | "cellular" | "hybrid" | "curl";
|
|
|
68
68
|
* - `swirl` — cursor-local warp and luminance lean on both engines.
|
|
69
69
|
* - `amplitude` — sizes the transient burst folded into cursor strength on the CPU.
|
|
70
70
|
* Every axis is suppressed under `prefers-reduced-motion` + the DockBackgroundToggle
|
|
71
|
-
* pause (the master tempo scalar is the single suppression seam).
|
|
72
|
-
*
|
|
71
|
+
* pause (the master tempo scalar is the single suppression seam).
|
|
72
|
+
*
|
|
73
|
+
* `swirl` is ON by default — a config opts OUT with `swirl: false`. Every aurora is
|
|
74
|
+
* pointer-shapeable, and a capability parked behind an opt-in flag is a capability the
|
|
75
|
+
* surface does not have. `light` and `scroll` remain explicit opt-ins: `light` is only
|
|
76
|
+
* meaningful where the config carries impasto to relight (see its own note), and `scroll`
|
|
77
|
+
* re-times the shader clock against page position, which no surface should inherit.
|
|
73
78
|
*/
|
|
74
79
|
export interface AuroraInteractivity {
|
|
80
|
+
/**
|
|
81
|
+
* Cursor-driven impasto relight. Steers `uLightDir`, which only `relightImpasto`
|
|
82
|
+
* consumes, and every term of that is multiplied by `uImpasto` — so `light` steers
|
|
83
|
+
* relighting ONLY where `impasto > 0`. The medium name is not the key: `impasto`
|
|
84
|
+
* defaults to 0 (`DEFAULT_AURORA_CONFIG`) and the atoms door raises it for `oil` and
|
|
85
|
+
* `vangogh` alone, so `light` over crayon, pastel, watercolor, oil-pastel, kuwahara
|
|
86
|
+
* or either metal shapes nothing unless the config sets `impasto` itself.
|
|
87
|
+
*/
|
|
75
88
|
light?: boolean;
|
|
76
89
|
scroll?: boolean;
|
|
77
90
|
/**
|
|
@@ -188,6 +201,16 @@ export interface AuroraConfig {
|
|
|
188
201
|
breathPeriod: number;
|
|
189
202
|
saturation: number;
|
|
190
203
|
paperGrain: number;
|
|
204
|
+
/**
|
|
205
|
+
* Pigment alpha of the PAINTED image, 0..1. Live presentation applies it once as the
|
|
206
|
+
* canvas element's own opacity; capture keeps it in the transparent GPU buffer.
|
|
207
|
+
*
|
|
208
|
+
* It composites over the palette-derived GROUND placeholder, which is mounted
|
|
209
|
+
* unconditionally at full opacity and is alpha-blind — a raster of the same field —
|
|
210
|
+
* so `alpha` re-weights the ground→field dissolve, not the surface's delivered
|
|
211
|
+
* presence. The presence envelope is the `opacityCeiling` prop, applied once around
|
|
212
|
+
* placeholder + canvas together.
|
|
213
|
+
*/
|
|
191
214
|
alpha: number;
|
|
192
215
|
/**
|
|
193
216
|
* the §3 chroma FLOOR (the warm-field vividness contract).
|
|
@@ -204,12 +227,46 @@ export interface AuroraConfig {
|
|
|
204
227
|
*/
|
|
205
228
|
vividness?: number;
|
|
206
229
|
/**
|
|
207
|
-
* Pointer/scroll interactivity
|
|
208
|
-
*
|
|
209
|
-
*
|
|
230
|
+
* Pointer/scroll interactivity. `swirl` is ON unless a config says
|
|
231
|
+
* `swirl: false` — the pointer shapes every aurora by default, PRM-guarded by the
|
|
232
|
+
* master tempo scalar. `light` and `scroll` stay explicit opt-ins.
|
|
233
|
+
* Aliased on `/api` as part of the `AuroraConfig` surface.
|
|
210
234
|
*/
|
|
211
235
|
interactivity?: AuroraInteractivity;
|
|
212
236
|
}
|
|
237
|
+
/**
|
|
238
|
+
* The per-axis liveness floor of the drift demand gate.
|
|
239
|
+
*
|
|
240
|
+
* The four drift axes do NOT share a domain — nuclei 0..0.05, palette 0..0.04, breath
|
|
241
|
+
* 0..0.15, warp 0..0.015 — so ONE flat epsilon over raw values would retire whole axes
|
|
242
|
+
* (any epsilon that reaches `paletteDrift` is above `warpDrift`'s entire range). Each
|
|
243
|
+
* axis therefore carries its own floor, seeded at 1% of that axis's authored domain.
|
|
244
|
+
*
|
|
245
|
+
* The floors are the SHAPE, not the cut. Cutting them where they would actually park a
|
|
246
|
+
* loop is a PAINT decision and it is `W-AURORA-FIELD`'s (π-FIELD), because the shipped
|
|
247
|
+
* configs do not separate in config space: the recessive shell field
|
|
248
|
+
* (`aurora-hero.ts` `nucleiDrift`/`paletteDrift` 0.012) and the focal studio default
|
|
249
|
+
* (0.015) sit 25% apart on both axes and are identical on the other two. What separates
|
|
250
|
+
* them is not the drift amplitude but the composited range their palettes can express —
|
|
251
|
+
* shell chroma ≤ 0.07 over an L span of 0.03 against the studio's C 0.16/0.13/0.095 —
|
|
252
|
+
* and that term is the field re-founding's to derive, not this gate's to guess.
|
|
253
|
+
*/
|
|
254
|
+
export declare const AURORA_DRIFT_FLOOR: {
|
|
255
|
+
readonly nucleiDrift: 0.0005;
|
|
256
|
+
readonly paletteDrift: 0.0004;
|
|
257
|
+
readonly breathDepth: 0.0015;
|
|
258
|
+
readonly warpDrift: 0.00015;
|
|
259
|
+
};
|
|
260
|
+
/**
|
|
261
|
+
* The demand gate over the four drift axes — the ONE predicate the WebGL2 frame loop
|
|
262
|
+
* and BOTH WGSL loops consume.
|
|
263
|
+
*
|
|
264
|
+
* It was three copies of a `!== 0` ladder, and they had already diverged: the image
|
|
265
|
+
* pipeline's copy omitted `breathDepth`, so an image-source aurora carrying breath and
|
|
266
|
+
* no drift parked its loop and never rendered the breath. Liveness is an AMPLITUDE
|
|
267
|
+
* question against each axis's own domain, never a literal comparison against zero.
|
|
268
|
+
*/
|
|
269
|
+
export declare function isAuroraDriftLive(config: AuroraConfig): boolean;
|
|
213
270
|
/**
|
|
214
271
|
* Pointer-cursor API exposed by `createAurora`. Values in 0..1 (CSS-top-origin).
|
|
215
272
|
* Runtime flips Y and eases internally.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { default as Aurora } from "./Aurora.vue.js";
|
|
2
2
|
export { resolveRenderMode, isSoftwareWebGLRenderer, type AuroraRenderMode, type ResolveRenderModeOptions, } from "./constants/renderMode.js";
|
|
3
|
-
export { useAurora } from "./composables/useAurora.js";
|
|
3
|
+
export { useAurora, AURORA_SETTLE_MS } from "./composables/useAurora.js";
|
|
4
4
|
export type { UseAuroraReturn } from "./composables/useAurora.js";
|
|
5
5
|
export { useCursorInteraction } from "./composables/useCursorInteraction.js";
|
|
6
6
|
export { createAurora } from "./composables/runtime.js";
|
|
@@ -62,14 +62,14 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
|
62
62
|
resume: () => void;
|
|
63
63
|
settled: Readonly<import("vue").Ref<boolean, boolean>>;
|
|
64
64
|
settledFrame: Readonly<import("vue").Ref<import(".").BlobSettledFrame | null, import(".").BlobSettledFrame | null>>;
|
|
65
|
-
rendererStatus: Readonly<import("vue").Ref<import("../../
|
|
65
|
+
rendererStatus: Readonly<import("vue").Ref<import("../../index.js").RendererStatus, import("../../index.js").RendererStatus>>;
|
|
66
66
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
67
67
|
click: () => any;
|
|
68
|
-
rendererStatus: (status: import("../../
|
|
68
|
+
rendererStatus: (status: import("../../index.js").RendererStatus) => any;
|
|
69
69
|
"update:paused": (value: boolean) => any;
|
|
70
70
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
71
71
|
onClick?: (() => any) | undefined;
|
|
72
|
-
onRendererStatus?: ((status: import("../../
|
|
72
|
+
onRendererStatus?: ((status: import("../../index.js").RendererStatus) => any) | undefined;
|
|
73
73
|
"onUpdate:paused"?: ((value: boolean) => any) | undefined;
|
|
74
74
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
75
75
|
declare const _default: typeof __VLS_export;
|
|
@@ -9,8 +9,14 @@ export type CardSize = "sm" | "md";
|
|
|
9
9
|
* and no capacity. `shadow` is CARD's own — Surface went three-prop and the
|
|
10
10
|
* card is the one component with a real elevation grammar, so it stamps its own
|
|
11
11
|
* `data-shadow` for the edge keying instead of routing the flag through a
|
|
12
|
-
* primitive that no longer reads it. `grain` and `specular` are gone
|
|
13
|
-
*
|
|
12
|
+
* primitive that no longer reads it. `grain` and `specular` are gone as PROPS,
|
|
13
|
+
* not as capacities: `v-specular` ships with `createSpecularWriter` and
|
|
14
|
+
* `useSpecularTracking` (`src/index.ts:475-479`) over the
|
|
15
|
+
* `.glass-specular-track` opt-in (`styles/index.css:205`), and grain lives on
|
|
16
|
+
* as `--glass-grain-opacity` (`styles/tokens/glass-fx.css:10`) and
|
|
17
|
+
* `@utility paper-grain-overlay` (`styles/paper.css:125`). A card that wants
|
|
18
|
+
* either arms it on the element.
|
|
19
|
+
* `cartoon` / `grid` / `metal` / `variant` / `dataHue` /
|
|
14
20
|
* `dataHueStrength` are struck: three of them wrote a class a consumer can write
|
|
15
21
|
* (`cartoon-surface`, `paper-grid`), and `variant`+`dataHue`+`selected` were one
|
|
16
22
|
* state wearing three props. A per-instance rim hue is `--glass-accent`, written
|
|
@@ -8,13 +8,7 @@ type __VLS_Slots = {} & {
|
|
|
8
8
|
} & {
|
|
9
9
|
default?: (props: typeof __VLS_16) => any;
|
|
10
10
|
};
|
|
11
|
-
declare const __VLS_base: import("vue").
|
|
12
|
-
"update:modelValue": (value: boolean) => any;
|
|
13
|
-
remove: (event: MouseEvent) => any;
|
|
14
|
-
}, string, import("vue").PublicProps, Readonly<import("./types.js").StaticChipProps | import("./types.js").SelectableChipProps | import("./types.js").ActionChipProps | import("./types.js").RemovableChipProps> & Readonly<{
|
|
15
|
-
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
16
|
-
onRemove?: ((event: MouseEvent) => any) | undefined;
|
|
17
|
-
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
|
+
declare const __VLS_base: import("vue").DefineSetupFnComponent<Record<string, any>, {}, {}, Record<string, any> & {}, import("vue").PublicProps>;
|
|
18
12
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
19
13
|
declare const _default: typeof __VLS_export;
|
|
20
14
|
export default _default;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type ClassValue } from "../_shared/class-names.js";
|
|
2
2
|
declare const SIZE: {
|
|
3
|
+
readonly xs: "gap-0.5 px-1 py-0.5 text-micro";
|
|
3
4
|
readonly sm: "gap-1 px-2.5 py-1 text-caption";
|
|
4
5
|
readonly md: "gap-1.5 px-3.5 py-1.5 text-small";
|
|
5
6
|
readonly lg: "gap-2 px-5 py-2 text-base";
|
|
@@ -21,6 +21,7 @@ declare const __VLS_base: import("vue").DefineComponent<CollapsibleProps, {}, {}
|
|
|
21
21
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
22
22
|
}>, {
|
|
23
23
|
disabled: boolean;
|
|
24
|
+
open: boolean;
|
|
24
25
|
defaultOpen: boolean;
|
|
25
26
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
26
27
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -10,11 +10,11 @@ declare const __VLS_base: import("vue").DefineComponent<CommandDialogProps, {},
|
|
|
10
10
|
"onUpdate:modelValue"?: ((value: import("./index.js").ComboboxValue) => any) | undefined;
|
|
11
11
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
12
12
|
}>, {
|
|
13
|
+
modal: boolean;
|
|
13
14
|
unmountOnHide: boolean;
|
|
14
15
|
open: boolean;
|
|
15
16
|
defaultOpen: boolean;
|
|
16
17
|
surface: import("../_shared/axes.js").Surface;
|
|
17
|
-
modal: boolean;
|
|
18
18
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
19
19
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
20
20
|
declare const _default: typeof __VLS_export;
|
|
@@ -53,7 +53,7 @@ export interface ConfiguratorPreset<T> {
|
|
|
53
53
|
readonly config: T;
|
|
54
54
|
}
|
|
55
55
|
declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
56
|
-
props: import("vue").PublicProps & __VLS_PrettifyLocal<{
|
|
56
|
+
props: import("vue").PublicProps & __VLS_PrettifyLocal<({
|
|
57
57
|
/** Optional preset table; presented to the `presets` slot fallback. */
|
|
58
58
|
presets?: readonly ConfiguratorPreset<T>[];
|
|
59
59
|
/** Currently active preset key — display only; selection is the consumer's. */
|
|
@@ -98,10 +98,33 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
|
|
|
98
98
|
* length to pin the band (`min === max`), or a `[min, max]` pair.
|
|
99
99
|
*/
|
|
100
100
|
asideWidth?: string | readonly [min: string, max: string];
|
|
101
|
+
/**
|
|
102
|
+
* Mount the studio inside an <ExpandableContainer>: a corner trigger that
|
|
103
|
+
* promotes the whole instrument to a full-window ROOM and back. The
|
|
104
|
+
* container already ships focus trap, Esc, body-overflow lock and focus
|
|
105
|
+
* restore, so this prop wires an affordance rather than a mechanism.
|
|
106
|
+
*
|
|
107
|
+
* The subtree is TELEPORTED, never duplicated — one mount, so a live GPU
|
|
108
|
+
* stage in the `#stage` slot survives the promotion instead of being torn
|
|
109
|
+
* down and re-created behind a second canvas.
|
|
110
|
+
*
|
|
111
|
+
* Expanded, the gallery is forced to `top`: the room has the width for the
|
|
112
|
+
* full preset ribbon, and spending it on a 400px gutter is the one thing
|
|
113
|
+
* expansion is for.
|
|
114
|
+
*/
|
|
115
|
+
expandable?: boolean;
|
|
116
|
+
/** Accessible name of the expand trigger. */
|
|
117
|
+
expandLabel?: string;
|
|
118
|
+
/** Accessible name of the collapse trigger. */
|
|
119
|
+
collapseLabel?: string;
|
|
101
120
|
/** Optional outer container override. */
|
|
102
121
|
class?: HTMLAttributes["class"];
|
|
103
122
|
} & {
|
|
123
|
+
/** Two-way so a consumer can drive/observe the room from outside the trigger. */
|
|
124
|
+
expanded?: boolean;
|
|
125
|
+
}) & {
|
|
104
126
|
onReset?: (() => any) | undefined;
|
|
127
|
+
"onUpdate:expanded"?: ((value: boolean) => any) | undefined;
|
|
105
128
|
"onSelect-preset"?: ((key: string) => any) | undefined;
|
|
106
129
|
"onSelect-layer"?: ((id: string) => any) | undefined;
|
|
107
130
|
}> & (typeof globalThis extends {
|
|
@@ -147,7 +170,7 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
|
|
|
147
170
|
(e: "select-preset", key: string): void;
|
|
148
171
|
(e: "select-layer", id: string): void;
|
|
149
172
|
(e: "reset"): void;
|
|
150
|
-
};
|
|
173
|
+
} & ((event: "update:expanded", value: boolean) => void);
|
|
151
174
|
}>) => import("vue").VNode & {
|
|
152
175
|
__ctx?: NonNullable<Awaited<typeof __VLS_setup>>;
|
|
153
176
|
};
|
|
@@ -41,7 +41,7 @@ import { type ConfiguratorSize } from "./size.js";
|
|
|
41
41
|
* interchangeable — they emphasize DIFFERENT features:
|
|
42
42
|
* - **ConfiguratorRow** (this) — for TOKEN, PRESET controls. Carries the
|
|
43
43
|
* token-`name` reference, the opt-in `reset` affordance (`canReset`), and the
|
|
44
|
-
* three-rung `size` axis (local-prop-over-inject).
|
|
44
|
+
* three-rung `size` axis (local-prop-over-inject).
|
|
45
45
|
* - **LabeledField** — for form controls. Carries stable label, description,
|
|
46
46
|
* error, requirement, state, and layout associations without styling the control.
|
|
47
47
|
*
|
|
@@ -74,7 +74,9 @@ type __VLS_Props = {
|
|
|
74
74
|
size?: ConfiguratorSize;
|
|
75
75
|
class?: HTMLAttributes["class"];
|
|
76
76
|
};
|
|
77
|
-
declare var __VLS_12: {
|
|
77
|
+
declare var __VLS_12: {
|
|
78
|
+
labelledBy: string;
|
|
79
|
+
};
|
|
78
80
|
type __VLS_Slots = {} & {
|
|
79
81
|
default?: (props: typeof __VLS_12) => any;
|
|
80
82
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--configurator-pad-inline: 1.25rem;}.configurator{-webkit-backdrop-filter: none;backdrop-filter: none;}.configurator > .configurator-presets,.configurator > .configurator-aside{-webkit-backdrop-filter: var(--glass-blur-floating);backdrop-filter: var(--glass-blur-floating);}.configurator-section-label{font-family: var(--font-text);font-size: var(--configurator-section-size);line-height: var(--type-leading-body);font-weight: var(--configurator-section-weight);letter-spacing: var(--type-tracking-tight);color: var(--foreground);}.configurator-presets{padding-block: var(--configurator-preset-row-weight);}.configurator-presets .configurator-gallery-track,.configurator-presets [role="group"]{gap: var(--configurator-preset-row-gap);}.configurator-layer{border-color: var(--configurator-divider-section);background-color: var(--configurator-section-tint);border-radius: max( var(--radius-floor),calc(var(--radius-ctx) - var(--radius-inset)) );}.configurator-layer:has(+ .configurator-layer){border-end-start-radius: 0;border-end-end-radius: 0;border-bottom-width: 0;}.configurator-layer + .configurator-layer{margin-block-start: 0;border-start-start-radius: 0;border-start-end-radius: 0;}.configurator-layer-trigger{padding-inline: var(--configurator-pad-inline);}.configurator-layer-body{padding-inline: var(--configurator-pad-inline);}.configurator-layer-body[data-dividers] > * + *{border-color: var(--configurator-divider);}.configurator-aside,.configurator-presets,.configurator-footer{border-color: var(--configurator-divider);}[data-slot="configurator"] > [data-gallery-dock]{grid-row: 1;grid-column: 1;}[data-slot="configurator"] > .configurator-stage{grid-row: 2;grid-column: 1;}[data-slot="configurator"] > .configurator-aside{grid-row: 3;grid-column: 1;}@
|
|
1
|
+
:root{--configurator-pad-inline: 1.25rem;}@layer components{.configurator-shell{-webkit-backdrop-filter: none;backdrop-filter: none;container-type: inline-size;display: grid;grid-template-rows: minmax(0,1fr);min-block-size: 0;min-inline-size: min(20rem,100%);}.configurator > .configurator-presets,.configurator > .configurator-aside{-webkit-backdrop-filter: var(--glass-blur-floating);backdrop-filter: var(--glass-blur-floating);}.configurator-section-label{font-family: var(--font-text);font-size: var(--configurator-section-size);line-height: var(--type-leading-body);font-weight: var(--configurator-section-weight);letter-spacing: var(--type-tracking-tight);color: var(--foreground);}.configurator-presets{padding-block: var(--configurator-preset-row-weight);}.configurator-presets .configurator-gallery-track,.configurator-presets [role="group"]{gap: var(--configurator-preset-row-gap);}.configurator-layer{border-width: 1px;border-color: var(--configurator-divider-section);background-color: var(--configurator-section-tint);border-radius: max( var(--radius-floor),calc(var(--radius-ctx) - var(--radius-inset)) );}.configurator-layer:has(+ .configurator-layer){border-end-start-radius: 0;border-end-end-radius: 0;border-bottom-width: 0;}.configurator-layer + .configurator-layer{margin-block-start: 0;border-start-start-radius: 0;border-start-end-radius: 0;}.configurator-layer-trigger{padding-inline: var(--configurator-pad-inline);}.configurator-layer-body{padding-inline: var(--configurator-pad-inline);}@media (hover: hover){[data-slot="configurator-reset"]:hover{background: color-mix( in oklab,var(--foreground) calc(var(--fill-hover) * 100%),transparent );color: var(--foreground);}.configurator-layer-trigger:hover{background: color-mix( in oklab,var(--foreground) calc(var(--fill-hover) * 100%),transparent );}}.configurator-layer-body[data-dividers] > * + *{border-color: var(--configurator-divider);}.configurator-aside,.configurator-presets,.configurator-footer{border-color: var(--configurator-divider);}.configurator-aside{border-block-start-width: 1px;}[data-slot="configurator"]{grid-template-columns: minmax(0,1fr);grid-template-rows: auto minmax(var(--configurator-stage-min,18rem),auto) minmax(0,1fr);}[data-slot="configurator"] > [data-gallery-dock]{grid-row: 1;grid-column: 1;}[data-slot="configurator"] > .configurator-stage{grid-row: 2;grid-column: 1;}[data-slot="configurator"] > .configurator-aside{grid-row: 3;grid-column: 1;}@container (inline-size >= 64rem){[data-slot="configurator"]{grid-template-columns: minmax(0,1fr) minmax( var(--configurator-aside-min,300px),var(--configurator-aside-max,400px) );grid-template-rows: auto minmax(0,1fr);}[data-slot="configurator"][data-gallery="aside"] > [data-gallery-dock]{grid-row: 1;grid-column: 2;}[data-slot="configurator"][data-gallery="aside"] > .configurator-stage{grid-row: 1 / span 2;grid-column: 1;}[data-slot="configurator"][data-gallery="aside"] > .configurator-aside{grid-row: 2;grid-column: 2;}[data-slot="configurator"][data-gallery="top"] > [data-gallery-dock]{grid-row: 1;grid-column: 1 / span 2;}[data-slot="configurator"][data-gallery="top"] > .configurator-stage{grid-row: 2;grid-column: 1;}[data-slot="configurator"][data-gallery="top"] > .configurator-aside{grid-row: 2;grid-column: 2;}[data-slot="configurator"] > .configurator-aside{border-block-start-width: 0;border-inline-start-width: 1px;}[data-slot="configurator"][data-aside-side="left"] > .configurator-aside{border-inline-start-width: 0;border-inline-end-width: 1px;}}[data-slot="configurator"] > [data-gallery-dock]{border-color: var(--configurator-divider);}[data-slot="configurator"][data-gallery="aside"] > [data-gallery-dock]{border-bottom-width: 1px;}@container (inline-size >= 64rem){[data-slot="configurator"][data-gallery="top"] > [data-gallery-dock]{border-bottom-width: 1px;}}.configurator-preset-tile{inline-size: clamp(160px,22cqi,232px);border-radius: var(--radius-card);}[data-slot="configurator"][data-gallery="top"] .configurator-preset-tile{inline-size: clamp(200px,20cqi,288px);}.configurator-preset-well{background-size: cover;background-position: center;image-rendering: auto;}.configurator-preset-well.is-loading{background-image: linear-gradient( 100deg,color-mix(in oklab,var(--card) 84%,transparent) 30%,color-mix(in oklab,var(--foreground) 8%,var(--card)) 50%,color-mix(in oklab,var(--card) 84%,transparent) 70% );background-size: 200% 100%;animation: configurator-preset-shimmer 1.2s ease-in-out infinite;}@media (prefers-reduced-motion: reduce){.configurator-preset-well.is-loading{animation: none;}}}@keyframes configurator-preset-shimmer{from{background-position: 200% 0;}to{background-position: -200% 0;}}@layer components{.configurator-preset-tile.is-active{box-shadow: inset 0 0 0 2px var(--focus-ring-color),var(--shadow-cartoon-lg);}.configurator-preset-chip{border-radius: var(--radius-pill);}.configurator-preset-chip.is-active{--glass-capsule-fill: var(--glass-plate-quiet);}@container (inline-size >= 64rem){[data-slot="configurator"][data-aside-side="left"] > .configurator-stage{grid-column: 2;}[data-slot="configurator"][data-aside-side="left"] > .configurator-aside{grid-column: 1;}[data-slot="configurator"][data-aside-side="left"][data-gallery="aside"] > [data-gallery-dock]{grid-column: 1;}}.configurator-expand-host[data-state="expanded"] > [data-part="panel"]{padding: var(--space-section);}.configurator-expand-host[data-state="expanded"] .configurator-shell{block-size: 100%;}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{.dark-mode-toggle-button{--dark-mode-toggle-size: 2.25rem;--dark-mode-toggle-padding: 0.375rem;appearance: none;display: inline-grid;place-items: center;flex: none;width: var(--dark-mode-toggle-size);height: var(--dark-mode-toggle-size);padding: var(--dark-mode-toggle-padding);border: 0;border-radius: var(--radius-pill);color: var(--foreground);background: transparent;opacity: 0.8;cursor: pointer;transition: opacity var(--duration-fast) var(--ease-standard),background-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard);}.dark-mode-toggle-button:hover{background: var(--surface-tint-10);opacity: 1;}.dark-mode-toggle-button:focus-visible{outline: none;box-shadow: var(--focus-ring-shadow,var(--dock-ring));opacity: 1;}.dark-mode-toggle-button > svg{display: block;width: 100%;height: 100%;fill: currentColor;}.dark-mode-toggle-button[data-size="sm"]{--dark-mode-toggle-size: 1.75rem;--dark-mode-toggle-padding: 0.25rem;}.dark-mode-toggle-button[data-size="lg"]{--dark-mode-toggle-size: 2.75rem;--dark-mode-toggle-padding: 0.5rem;}.dark-mode-toggle-button[data-size="control"]{--dark-mode-toggle-size: var(--control-size,2.25rem);--dark-mode-toggle-padding: var(--control-icon-padding,0.375rem);}.dark-mode-toggle-button[data-size="dock"],.glass-dock .dark-mode-toggle-button:not([data-size="sm"]):not([data-size="lg"]):not( [data-size="control"] ){--dark-mode-toggle-size: var(--dock-control-size,var(--size-icon-btn));--dark-mode-toggle-padding: calc( ( var(--dock-control-size,var(--size-icon-btn)) - var(--dock-control-glyph-size,var(--dock-icon-glyph,1.25rem)) ) / 2 );}.toggle-sun,.toggle-circle{transform-origin: center;transition-property: transform;transition-duration: var(--spring-dock-duration);transition-timing-function: var(--spring-dock);}:where(.dark) .dark-mode-toggle-button .toggle-sun{transform: rotate(0.5turn);}:where(.dark) .dark-mode-toggle-button .toggle-circle{transform: translateX(-15%);}}@media (prefers-reduced-motion: reduce){.dark-mode-toggle-button,.dark-mode-toggle-button .toggle-sun,.dark-mode-toggle-button .toggle-circle{transition: none;}}
|
|
1
|
+
@layer components{.dark-mode-toggle-button{--dark-mode-toggle-size: 2.25rem;--dark-mode-toggle-padding: 0.375rem;appearance: none;display: inline-grid;place-items: center;flex: none;width: var(--dark-mode-toggle-size);height: var(--dark-mode-toggle-size);padding: var(--dark-mode-toggle-padding);border: 0;border-radius: var(--radius-pill);color: var(--foreground);background: transparent;opacity: 0.8;cursor: pointer;transition: opacity var(--duration-fast) var(--ease-standard),background-color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard);}.dark-mode-toggle-button:hover{background: var(--surface-tint-10);opacity: 1;}.dark-mode-toggle-button:focus-visible{outline: none;box-shadow: var(--focus-ring-shadow,var(--dock-ring));opacity: 1;}.dark-mode-toggle-button > svg{display: block;width: 100%;height: 100%;fill: currentColor;}.dark-mode-toggle-button[data-size="sm"]{--dark-mode-toggle-size: 1.75rem;--dark-mode-toggle-padding: 0.25rem;}.dark-mode-toggle-button[data-size="lg"]{--dark-mode-toggle-size: 2.75rem;--dark-mode-toggle-padding: 0.5rem;}.dark-mode-toggle-button[data-size="control"]{--dark-mode-toggle-size: var(--control-size,2.25rem);--dark-mode-toggle-padding: var(--control-icon-padding,0.375rem);}.dark-mode-toggle-button[data-size="dock"],.glass-dock .dark-mode-toggle-button:not([data-size="sm"]):not([data-size="lg"]):not( [data-size="control"] ){--dark-mode-toggle-size: var(--dock-control-size,var(--size-icon-btn));--dark-mode-toggle-padding: calc( ( var(--dock-control-size,var(--size-icon-btn)) - var(--dock-control-glyph-size,var(--dock-icon-glyph,1.25rem)) ) / 2 );}.toggle-sun,.toggle-circle{transform-origin: center;transition-property: transform;transition-duration: var(--spring-dock-duration);transition-timing-function: var(--spring-dock);}:where(.dark) .dark-mode-toggle-button .toggle-sun{transform: rotate(0.5turn);}:where(.dark) .dark-mode-toggle-button .toggle-circle{transform: translateX(-15%);}}@layer components{@media (prefers-reduced-motion: reduce){.dark-mode-toggle-button,.dark-mode-toggle-button .toggle-sun,.dark-mode-toggle-button .toggle-circle{transition: none;}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer components{[data-deck-capture="export"] .deck-stage{--deck-export-inline: 1280px;--deck-export-block: 720px;position: relative;inset: auto;margin: 0;aspect-ratio: auto;inline-size: var(--deck-export-inline);block-size: var(--deck-export-block);max-inline-size: none;max-block-size: none;border-radius: 0;}[data-deck-capture="export"] .deck-slide{border-radius: 0;box-shadow: none;}[data-deck-capture="export"] .deck-ground,[data-deck-capture="freeze"] .deck-ground,[data-deck-capture="export"] .deck-slide,[data-deck-capture="freeze"] .deck-slide{transition: none !important;animation: none !important;}[data-deck-capture="export"] .deck-slide[data-state="active"],[data-deck-capture="freeze"] .deck-slide[data-state="active"]{--turn-x: 0px !important;--turn-s: 1 !important;--turn-r: 0deg !important;}[data-deck-capture="export"] .deck-slide::before,[data-deck-capture="export"] .deck-slide::after,[data-deck-capture="freeze"] .deck-slide::before,[data-deck-capture="freeze"] .deck-slide::after{opacity: 0 !important;animation: none !important;}[data-deck-capture="export"] [data-reveal],[data-deck-capture="freeze"] [data-reveal],[data-deck-capture="print"] [data-reveal]{opacity: 1 !important;animation: none !important;}[data-deck-capture="print"] .deck-stage{position: static;display: block;aspect-ratio: auto;inline-size: auto;block-size: auto;overflow: visible;}[data-deck-capture="print"] .deck-strip{display: block;overflow: visible;perspective: none;}[data-deck-capture="print"] .deck-ground{display: none;}[data-deck-capture="print"] .deck-slide{position: relative;opacity: 1 !important;visibility: visible !important;transform: none !important;pointer-events: auto;margin-block: var(--space-family);background: var(--background);}[data-deck-capture="print"] .deck-slide::before,[data-deck-capture="print"] .deck-slide::after{opacity: 0 !important;}}@media print{@page{size: 1280px 720px;margin: 0;}html,body{overflow: visible !important;margin: 0 !important;padding: 0 !important;print-color-adjust: exact;-webkit-print-color-adjust: exact;}html,body,#app{block-size: auto !important;min-block-size: 0 !important;}.deck-stage{position: static !important;display: block !important;aspect-ratio: auto !important;inline-size: auto !important;block-size: auto !important;overflow: visible !important;}.deck-strip{display: block !important;overflow: visible !important;perspective: none !important;}.deck-ground{display: none !important;}.deck-slide{position: relative !important;opacity: 1 !important;visibility: visible !important;transform: none !important;box-shadow: none !important;border-radius: 0 !important;margin: 0 !important;block-size: 719px !important;overflow: hidden !important;background: var(--background) !important;}.deck-slide::before,.deck-slide::after{opacity: 0 !important;}.deck-slide:not(:last-child){break-after: page;}.deck-stage .sr-only{display: none !important;}}
|
|
1
|
+
@layer components{[data-deck-capture="export"] .deck-stage{--deck-export-inline: 1280px;--deck-export-block: 720px;position: relative;inset: auto;margin: 0;aspect-ratio: auto;inline-size: var(--deck-export-inline);block-size: var(--deck-export-block);max-inline-size: none;max-block-size: none;border-radius: 0;}[data-deck-capture="export"] .deck-slide{border-radius: 0;box-shadow: none;}[data-deck-capture="export"] .deck-ground,[data-deck-capture="freeze"] .deck-ground,[data-deck-capture="export"] .deck-slide,[data-deck-capture="freeze"] .deck-slide{transition: none !important;animation: none !important;}[data-deck-capture="export"] .deck-slide[data-state="active"],[data-deck-capture="freeze"] .deck-slide[data-state="active"]{--turn-x: 0px !important;--turn-s: 1 !important;--turn-r: 0deg !important;}[data-deck-capture="export"] .deck-slide::before,[data-deck-capture="export"] .deck-slide::after,[data-deck-capture="freeze"] .deck-slide::before,[data-deck-capture="freeze"] .deck-slide::after{opacity: 0 !important;animation: none !important;}[data-deck-capture="export"] [data-reveal],[data-deck-capture="freeze"] [data-reveal],[data-deck-capture="print"] [data-reveal]{opacity: 1 !important;animation: none !important;}[data-deck-capture="print"] .deck-stage{position: static;display: block;aspect-ratio: auto;inline-size: auto;block-size: auto;overflow: visible;}[data-deck-capture="print"] .deck-strip{display: block;overflow: visible;perspective: none;}[data-deck-capture="print"] .deck-ground{display: none;}[data-deck-capture="print"] .deck-slide{position: relative;opacity: 1 !important;visibility: visible !important;transform: none !important;pointer-events: auto;margin-block: var(--space-family);background: var(--background);}[data-deck-capture="print"] .deck-slide::before,[data-deck-capture="print"] .deck-slide::after{opacity: 0 !important;}}@layer components{@media print{@page{size: 1280px 720px;margin: 0;}html,body{overflow: visible !important;margin: 0 !important;padding: 0 !important;print-color-adjust: exact;-webkit-print-color-adjust: exact;}html,body,#app{block-size: auto !important;min-block-size: 0 !important;}.deck-stage{position: static !important;display: block !important;aspect-ratio: auto !important;inline-size: auto !important;block-size: auto !important;overflow: visible !important;}.deck-strip{display: block !important;overflow: visible !important;perspective: none !important;}.deck-ground{display: none !important;}.deck-slide{position: relative !important;opacity: 1 !important;visibility: visible !important;transform: none !important;box-shadow: none !important;border-radius: 0 !important;margin: 0 !important;block-size: 719px !important;overflow: hidden !important;background: var(--background) !important;}.deck-slide::before,.deck-slide::after{opacity: 0 !important;}.deck-slide:not(:last-child){break-after: page;}.deck-stage .sr-only{display: none !important;}}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:where([data-slot="dialog-content"]){border-radius: var(--radius-3xl);display: grid;gap: var(--space-body);inline-size: min(100% - 2 * var(--space-section),32rem);padding-inline: var(--space-family);padding-block: var(--space-family);translate: -50% -50%;}:where([data-slot="dialog-header"]){display: flex;flex-direction: column;gap: var(--space-atom);text-align: start;}:where([data-slot="dialog-content"]:has([data-slot="dialog-close"])) :where([data-slot="dialog-header"]){padding-inline-end: calc(var(--touch-target) + var(--space-atom));}:where([data-slot="dialog-title"]){font-size: calc(var(--type-body) * 1.272);line-height: var(--type-leading-body);letter-spacing: var(--type-tracking-tight);}:where([data-slot="dialog-description"]){font-size: var(--type-body);line-height: var(--type-leading-body);color: var(--foreground);}:where([data-slot="dialog-footer"]){display: flex;flex-direction: row;justify-content: flex-end;gap: var(--space-body);}:where([data-slot="dialog-close"]){position: absolute;inset-block-start: var(--space-family);inset-inline-end: var(--space-family);display: inline-flex;align-items: center;justify-content: center;inline-size: var(--touch-target);block-size: var(--touch-target);border-radius: var(--radius-pill);color: var(--foreground);cursor: pointer;isolation: isolate;}:where([data-slot="dialog-close"])::before{content: "";position: absolute;inset: 0;z-index: -1;border-radius: inherit;background: transparent;transition: background-color var(--spring-press-duration) var(--spring-press),scale var(--spring-press-duration) var(--spring-press);}@media (hover: hover){:where([data-slot="dialog-close"]):hover::before{background: color-mix(in oklab,var(--foreground) 5%,transparent);scale: var(--scale-hover);}}:where([data-slot="dialog-close"]):active::before{background: color-mix(in oklab,var(--foreground) 12%,transparent);scale: var(--scale-press);}:where([data-slot="dialog-close"]):focus-visible{outline: 2px solid color-mix(in oklab,var(--foreground) 48%,transparent);outline-offset: 2px;}@property --rebuff-x{syntax: "<length>";inherits: false;initial-value: 0px;}@keyframes glass-dialog-rebuff-a{0%{--rebuff-x: 0px;}22%{--rebuff-x: -4px;}48%{--rebuff-x: 3px;}72%{--rebuff-x: -1.6px;}88%{--rebuff-x: 0.6px;}100%{--rebuff-x: 0px;}}@keyframes glass-dialog-rebuff-b{0%{--rebuff-x: 0px;}22%{--rebuff-x: -4px;}48%{--rebuff-x: 3px;}72%{--rebuff-x: -1.6px;}88%{--rebuff-x: 0.6px;}100%{--rebuff-x: 0px;}}:where([data-slot="dialog-content"][data-rebuff]){translate: calc(-50% + var(--rebuff-x)) -50%;}:where([data-slot="dialog-content"][data-rebuff="a"]){animation: glass-dialog-rebuff-a var(--spring-press-duration) var(--spring-press);}:where([data-slot="dialog-content"][data-rebuff="b"]){animation: glass-dialog-rebuff-b var(--spring-press-duration) var(--spring-press);}@keyframes glass-dialog-rebuff-flash{0%,100%{outline-color: transparent;}50%{outline-color: color-mix(in oklab,var(--foreground) 48%,transparent);}}@media (prefers-reduced-motion: reduce){:where([data-slot="dialog-content"][data-rebuff]){outline: 2px solid transparent;outline-offset: 0;animation: glass-dialog-rebuff-flash var(--spring-press-duration) linear;}}
|
|
1
|
+
@layer components{:where([data-slot="dialog-content"]){border-radius: var(--radius-3xl);display: grid;gap: var(--space-body);inline-size: min(100% - 2 * var(--space-section),32rem);padding-inline: var(--space-family);padding-block: var(--space-family);translate: -50% -50%;}:where([data-slot="dialog-header"]){display: flex;flex-direction: column;gap: var(--space-atom);text-align: start;}:where([data-slot="dialog-content"]:has([data-slot="dialog-close"])) :where([data-slot="dialog-header"]){padding-inline-end: calc(var(--touch-target) + var(--space-atom));}:where([data-slot="dialog-title"]){font-size: calc(var(--type-body) * 1.272);line-height: var(--type-leading-body);letter-spacing: var(--type-tracking-tight);}:where([data-slot="dialog-description"]){font-size: var(--type-body);line-height: var(--type-leading-body);color: var(--foreground);}:where([data-slot="dialog-footer"]){display: flex;flex-direction: row;justify-content: flex-end;gap: var(--space-body);}:where([data-slot="dialog-close"]){position: absolute;inset-block-start: var(--space-family);inset-inline-end: var(--space-family);display: inline-flex;align-items: center;justify-content: center;inline-size: var(--touch-target);block-size: var(--touch-target);border-radius: var(--radius-pill);color: var(--foreground);cursor: pointer;isolation: isolate;}:where([data-slot="dialog-close"])::before{content: "";position: absolute;inset: 0;z-index: -1;border-radius: inherit;background: transparent;transition: background-color var(--spring-press-duration) var(--spring-press),scale var(--spring-press-duration) var(--spring-press);}@media (hover: hover){:where([data-slot="dialog-close"]):hover::before{background: color-mix(in oklab,var(--foreground) 5%,transparent);scale: var(--scale-hover);}}:where([data-slot="dialog-close"]):active::before{background: color-mix(in oklab,var(--foreground) 12%,transparent);scale: var(--scale-press);}:where([data-slot="dialog-close"]):focus-visible{outline: 2px solid color-mix(in oklab,var(--foreground) 48%,transparent);outline-offset: 2px;}}@property --rebuff-x{syntax: "<length>";inherits: false;initial-value: 0px;}@keyframes glass-dialog-rebuff-a{0%{--rebuff-x: 0px;}22%{--rebuff-x: -4px;}48%{--rebuff-x: 3px;}72%{--rebuff-x: -1.6px;}88%{--rebuff-x: 0.6px;}100%{--rebuff-x: 0px;}}@keyframes glass-dialog-rebuff-b{0%{--rebuff-x: 0px;}22%{--rebuff-x: -4px;}48%{--rebuff-x: 3px;}72%{--rebuff-x: -1.6px;}88%{--rebuff-x: 0.6px;}100%{--rebuff-x: 0px;}}@layer components{:where([data-slot="dialog-content"][data-rebuff]){translate: calc(-50% + var(--rebuff-x)) -50%;}:where([data-slot="dialog-content"][data-rebuff="a"]){animation: glass-dialog-rebuff-a var(--spring-press-duration) var(--spring-press);}:where([data-slot="dialog-content"][data-rebuff="b"]){animation: glass-dialog-rebuff-b var(--spring-press-duration) var(--spring-press);}}@keyframes glass-dialog-rebuff-flash{0%,100%{outline-color: transparent;}50%{outline-color: color-mix(in oklab,var(--foreground) 48%,transparent);}}@layer components{@media (prefers-reduced-motion: reduce){:where([data-slot="dialog-content"][data-rebuff]){outline: 2px solid transparent;outline-offset: 0;animation: glass-dialog-rebuff-flash var(--spring-press-duration) linear;}}}
|
|
@@ -6,12 +6,11 @@
|
|
|
6
6
|
* class was axis-blind — a fixed VERTICAL 1px hairline that paints a useless
|
|
7
7
|
* 1px-wide sliver in a column (vertical) dock and a single cell-sliver in a grid
|
|
8
8
|
* dock. This primitive bundles the orientation contract the bare class could not:
|
|
9
|
-
* it reads the dock `orientation
|
|
10
|
-
* dock-root ancestor class (`.glass-dock.vertical
|
|
9
|
+
* it reads the dock `orientation` via `useOptionalDockContext()` and the
|
|
10
|
+
* dock-root ancestor class (`.glass-dock.vertical`) drives the
|
|
11
11
|
* PERPENDICULAR paint (dock.css) —
|
|
12
12
|
* - row dock (horizontal, default) → a vertical 1px rule
|
|
13
13
|
* - column dock (vertical) → a horizontal 1px rule
|
|
14
|
-
* - grid dock (`layout="grid"`) → a full-row section break (grid-column: 1, -1)
|
|
15
14
|
*
|
|
16
15
|
* It is a thin oriented `<div>` (KISS); `data-orientation` is the explicit axis
|
|
17
16
|
* marker (so the perpendicular paint resolves even when used inside a
|
|
@@ -22,6 +22,7 @@ declare const __VLS_base: import("vue").DefineComponent<DockProps, {
|
|
|
22
22
|
keepOpen: (kind?: import("./composables/dockContext.js").DockHoldKind) => void;
|
|
23
23
|
release: (kind?: import("./composables/dockContext.js").DockHoldKind) => void;
|
|
24
24
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DockProps> & Readonly<{}>, {
|
|
25
|
+
collapse: import(".").DockCollapse;
|
|
25
26
|
backdropMode: import(".").DockBackdropMode;
|
|
26
27
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
27
28
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { ComputedRef } from "vue";
|
|
2
2
|
export type DockOrientation = "horizontal" | "vertical";
|
|
3
|
-
export type DockLayout = "linear" | "grid";
|
|
4
3
|
/**
|
|
5
4
|
* What KIND of hold a token is. The two are different facts about the dock and
|
|
6
5
|
* only one of them is a hand:
|
|
@@ -20,7 +19,7 @@ export type DockHoldKind = "morph" | "grasp";
|
|
|
20
19
|
* Dock context surfaces the dock id + orientation + held-state coordination
|
|
21
20
|
* to descendants.
|
|
22
21
|
*
|
|
23
|
-
* One typed key carries id, orientation,
|
|
22
|
+
* One typed key carries id, orientation, and held-state coordination.
|
|
24
23
|
* Paired helpers:
|
|
25
24
|
* - `useDockContext()` — strict; throws when used outside `<GlassDock>`.
|
|
26
25
|
* - `useOptionalDockContext()` — befitting silent default for primitives
|
|
@@ -32,12 +31,6 @@ export type DockHoldKind = "morph" | "grasp";
|
|
|
32
31
|
export interface DockContext {
|
|
33
32
|
id: string;
|
|
34
33
|
orientation: ComputedRef<DockOrientation>;
|
|
35
|
-
/**
|
|
36
|
-
* In-cap arrangement (`linear` row/column vs `grid` tile panel).
|
|
37
|
-
* `<DockSeparator>` reads this to paint a full-row section break in a grid dock
|
|
38
|
-
* (a 1px perpendicular hairline is useless in a 2D tile grid).
|
|
39
|
-
*/
|
|
40
|
-
layout: ComputedRef<DockLayout>;
|
|
41
34
|
/**
|
|
42
35
|
* Acquire a hold token; suppresses timer-based collapse. `kind` defaults to
|
|
43
36
|
* `"morph"` (posture only). Pass `"grasp"` for a live pointer hold — it takes
|
|
@@ -52,5 +52,3 @@ export declare const DOCK_CROSSFADE_KEY: import("vue").InjectionKey<DockCrossfad
|
|
|
52
52
|
export declare function provideDockCrossfadeContext(context: DockCrossfadeContext): void;
|
|
53
53
|
/** Strict — throws when used outside `<DockCrossfade>`. */
|
|
54
54
|
export declare const useDockCrossfadeContext: () => DockCrossfadeContext;
|
|
55
|
-
/** Befitting silent default; reserved for future consumers. */
|
|
56
|
-
export declare const useOptionalDockCrossfadeContext: () => DockCrossfadeContext | null;
|
|
@@ -6,5 +6,5 @@ export { useDockHold } from "./useDockHold.js";
|
|
|
6
6
|
export type { UseDockHoldOptions, UseDockHoldReturn } from "./useDockHold.js";
|
|
7
7
|
export { isTeleportedTarget } from "../../_shared/overlay/isTeleportedTarget.js";
|
|
8
8
|
export { provideDockContext, useDockContext, useOptionalDockContext, DOCK_CONTEXT_KEY, type DockContext, type DockOrientation, } from "./dockContext.js";
|
|
9
|
-
export { provideDockCrossfadeContext, useDockCrossfadeContext,
|
|
9
|
+
export { provideDockCrossfadeContext, useDockCrossfadeContext, DOCK_CROSSFADE_KEY, type DockFaceDescriptor, type DockFaceRegistration, type DockCrossfadeContext, } from "./dockCrossfadeContext.js";
|
|
10
10
|
export { useDockMorphOrchestrator, type UseDockMorphOrchestratorOptions, type UseDockMorphOrchestratorReturn, } from "./useDockMorph.js";
|
|
@@ -16,18 +16,22 @@ import type { Ref } from "vue";
|
|
|
16
16
|
* STANDALONE control engages on its own drag and a control inside a dock does NOT
|
|
17
17
|
* co-engage off a sibling's hold.
|
|
18
18
|
*
|
|
19
|
-
* Why NATIVE host listeners (not a Vue `@pointerdown` template binding)
|
|
20
|
-
* reka-ui's `<SliderRoot>` is a
|
|
21
|
-
*
|
|
22
|
-
* `
|
|
23
|
-
* (`
|
|
24
|
-
* `@pointerdown` arrives
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
19
|
+
* Why NATIVE host listeners (not a Vue `@pointerdown` template binding) — and NOT
|
|
20
|
+
* because the binding would be lost. reka-ui's `<SliderRoot>` is a forwarding
|
|
21
|
+
* component and does set `inheritAttrs: false` (`SliderRoot.js:17`), but it re-merges
|
|
22
|
+
* `$attrs` by hand on the way out — `mergeProps(_ctx.$attrs, { … onPointerdown })`
|
|
23
|
+
* (`:149`) — and `mergeProps` CHAINS `onX` handlers rather than overwriting them, so a
|
|
24
|
+
* consumer `@pointerdown` arrives and runs. Measured at our pin and at the consumer's:
|
|
25
|
+
* the merged order is reka's slide start, reka's update, then the consumer — LAST,
|
|
26
|
+
* which is the one real limit (it cannot `preventDefault` ahead of the slide).
|
|
27
|
+
* `tests/components/ui/slider/attrs-pointerdown-channel.test.ts` holds the arrival as a
|
|
28
|
+
* standing arm; the order was measured at the seat and is not asserted there.
|
|
29
|
+
*
|
|
30
|
+
* The native listeners are taken for three reasons that do hold: `pointerdown` AND
|
|
31
|
+
* `touchstart` fold onto ONE acquire under one owner; the release is window-scoped and
|
|
32
|
+
* so survives reka's `setPointerCapture` retarget; and the acquire is
|
|
33
|
+
* capture-independent, which is what makes it instant-on. A Reka `dragging`-ref
|
|
34
|
+
* subscription serves none of the three and is not publicly exposed.
|
|
31
35
|
*
|
|
32
36
|
* The hold is INSTANT-ON (Apple "Building Fluid Interfaces", facet 5): the first
|
|
33
37
|
* line `keepOpen()` is capture-independent and synchronous, so the halo +
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ComputedRef, type Ref } from "vue";
|
|
2
|
+
export interface UseDockRunOptions {
|
|
3
|
+
/** The scroll port — `.dock-run`, the element the seats are children of. */
|
|
4
|
+
runEl: Ref<HTMLElement | null>;
|
|
5
|
+
/** The `role="status"` node reach announces through. */
|
|
6
|
+
statusEl: Ref<HTMLElement | null>;
|
|
7
|
+
/** Resolved layout axis; selects the scroll axis and the arrow-key pair. */
|
|
8
|
+
orientation: ComputedRef<"horizontal" | "vertical">;
|
|
9
|
+
}
|
|
10
|
+
export interface UseDockRunReturn {
|
|
11
|
+
/**
|
|
12
|
+
* Bring `seat` fully into view at its lattice anchor, on the DOCK spring. Exposed
|
|
13
|
+
* so a consumer driving selection programmatically reaches the same anchor the
|
|
14
|
+
* pointer and keyboard paths do — one reach, three callers.
|
|
15
|
+
*/
|
|
16
|
+
reach: (seat: HTMLElement) => void;
|
|
17
|
+
/** Re-derive the tab stop. Called on mount, on focus moves, and on content change. */
|
|
18
|
+
syncRoving: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function useDockRun(options: UseDockRunOptions): UseDockRunReturn;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type MaybeRefOrGetter, type Ref } from "vue";
|
|
2
2
|
import type { UseDockStateReturn } from "./useDockState.js";
|
|
3
|
-
import { type FuzzySearchState, type SearchableItem, type SearchResult } from "
|
|
3
|
+
import { type FuzzySearchState, type SearchableItem, type SearchResult } from "../../../composables/search/index.js";
|
|
4
4
|
import { type UseScrollChromeReturn } from "../../../composables/motion/scroll/useScrollChrome.js";
|
|
5
5
|
export interface UseDockSearchOptions<T extends SearchableItem = SearchableItem> {
|
|
6
6
|
/** Composes the existing dock state machine (no fork) — `armSearch`/`disarmSearch`
|