@mkbabb/glass-ui 3.9.0 → 3.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{CardAction-DuArVky-.js → CardAction-DrAcAV4d.js} +2 -2
- package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-mV2e1aG6.js} +2 -2
- package/dist/{DataTable-CUHMukiQ.js → DataTable-C3E6jZ5B.js} +2 -2
- package/dist/{DialogContent-BRkT1cjP.js → DialogContent-BxaaafFi.js} +1 -1
- package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-CDA_SaCe.js} +1 -1
- package/dist/{MetricBadge-lTc002u2.js → MetricBadge-idgrkqoP.js} +1 -1
- package/dist/{Notification-BxK8LZMw.js → Notification-Cu0nN17_.js} +3 -3
- package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-CHEWghnY.js} +2 -2
- package/dist/{PopoverContent-BId6ggf_.js → PopoverContent-DpUvdYY-.js} +1 -1
- package/dist/{Progress-iEuD9pxG.js → Progress-BW-StFw2.js} +1 -1
- package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-DruYCni_.js} +1 -1
- package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-pirzjm--.js} +3 -3
- package/dist/{Switch-LDKLmmgx.js → Switch-DeAqg6pi.js} +1 -1
- package/dist/{TabsList-B8CVOQPC.js → TabsList-BAVzOZpg.js} +2 -2
- package/dist/{Toaster-1rYWrmAm.js → Toaster-CvuuW_y9.js} +49 -46
- package/dist/{ToggleGroupItem-Cev4pOVK.js → ToggleGroupItem-DtD37b4G.js} +4 -4
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +4 -4
- package/dist/api.js +1 -1
- package/dist/aurora.js +238 -547
- package/dist/{badge-BvwvT50i.js → badge-NdCQMvvB.js} +2 -2
- package/dist/badge.js +1 -1
- package/dist/{button-DN39cGqL.js → button-DyiWFAOE.js} +12 -12
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -2
- package/dist/card.js +1 -1
- package/dist/carousel.js +5 -5
- package/dist/collapsible.js +1 -1
- package/dist/{color-8jBjWiJ6.js → color-B65wWyQz.js} +9 -7
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/{compile-DAjIoEy2.js → compile-Ce_V55zi.js} +23 -23
- package/dist/components/custom/aurora/composables/atoms.d.ts +21 -4
- package/dist/components/custom/aurora/composables/runtime.d.ts +0 -9
- package/dist/components/custom/aurora/composables/uniformBridge.d.ts +0 -11
- package/dist/components/custom/aurora/constants/renderMode.d.ts +0 -32
- package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
- package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/constellation/Constellation.vue.d.ts +85 -1
- package/dist/components/custom/constellation/composables/createConstellationField.d.ts +35 -0
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
- package/dist/components/custom/constellation/constants.d.ts +36 -0
- package/dist/components/custom/constellation/constellationDraw.d.ts +18 -0
- package/dist/components/custom/constellation/constellationField.d.ts +174 -63
- package/dist/components/custom/constellation/constellationInteraction.d.ts +102 -0
- package/dist/components/custom/constellation/index.d.ts +4 -2
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +2 -110
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
- package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +131 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
- package/dist/components/custom/dock/constants.d.ts +23 -0
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +6 -0
- package/dist/components/custom/fourier-field/index.d.ts +25 -1
- package/dist/components/custom/fourier-field/math.d.ts +20 -8
- package/dist/components/custom/fourier-field/presets.d.ts +54 -0
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +8 -10
- package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
- package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +16 -21
- package/dist/components/custom/goo-blob/constants.d.ts +52 -0
- package/dist/components/custom/goo-blob/index.d.ts +1 -1
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
- package/dist/components/custom/goo-blob/types.d.ts +59 -25
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
- package/dist/components/custom/tabs/constants.d.ts +12 -0
- package/dist/components/custom/underline/GlassUnderline.vue.d.ts +84 -0
- package/dist/components/custom/underline/index.d.ts +2 -0
- package/dist/components/custom/underline/types.d.ts +56 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
- package/dist/components/ui/slider/index.d.ts +25 -18
- package/dist/components/ui/toast/use-toast.d.ts +2 -2
- package/dist/composables/color/index.d.ts +24 -7
- package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
- package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +1 -6
- package/dist/composables/motion/curves.d.ts +48 -0
- package/dist/composables/motion/index.d.ts +2 -0
- package/dist/composables/motion/springPresets.d.ts +33 -0
- package/dist/composables/motion/suite.d.ts +2 -0
- package/dist/composables/motion/useSpringMount.d.ts +1 -1
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +2 -2
- package/dist/constellation.js +322 -147
- package/dist/controls.js +48 -14
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +340 -327
- package/dist/dockContext-bho8B1A4.js +17 -0
- package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-DVnQcA0E.js} +7 -4
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +1 -1
- package/dist/forms.js +2 -2
- package/dist/fourier-field.js +147 -120
- package/dist/fourier-math.d.ts +1 -0
- package/dist/fourier-math.js +2 -0
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +286 -207
- package/dist/goo-blob.js +368 -322
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +5 -5
- package/dist/math-BUU9hHID.js +43 -0
- package/dist/metric-badge.js +1 -1
- package/dist/metric-stack.js +2 -2
- package/dist/motion-core.js +4 -4
- package/dist/motion-curves.d.ts +1 -0
- package/dist/motion-curves.js +130 -0
- package/dist/motion.js +38 -37
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/progress.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +1 -1
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +6 -6
- package/dist/select.js +1 -1
- package/dist/{sheet-VZEtNFvO.js → sheet-ChSXcJpU.js} +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-DC2mwuoe.js → slider-sfl8gFDD.js} +8 -8
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +2 -2
- package/dist/springPresets-aRSm-4_k.js +40 -0
- package/dist/stacked-icons.js +6 -6
- package/dist/styles/cards.css +2 -2
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock/layer-group.css +38 -4
- package/dist/styles/dock/layers.css +11 -1
- package/dist/styles/dock/morph.css +95 -19
- package/dist/styles/dock/shell.css +12 -0
- package/dist/styles/dock-controls.css +25 -12
- package/dist/styles/drawer.css +14 -4
- package/dist/styles/floating-panel.css +2 -0
- package/dist/styles/glass/a11y-fallback.css +245 -0
- package/dist/styles/glass/ladder.css +304 -0
- package/dist/styles/glass/material.css +238 -0
- package/dist/styles/glass/progress-rail.css +78 -0
- package/dist/styles/glass/squircle.css +66 -0
- package/dist/styles/glass/surfaces.css +306 -0
- package/dist/styles/glass-refract.css +2 -0
- package/dist/styles/glass.css +31 -1052
- package/dist/styles/hover-popover.css +2 -0
- package/dist/styles/index.css +24 -6
- package/dist/styles/instrument-chassis.css +4 -0
- package/dist/styles/theme.css +14 -14
- package/dist/styles/tokens/color-radius.css +250 -0
- package/dist/styles/tokens/dark-arm.css +194 -0
- package/dist/styles/tokens/glass.css +413 -0
- package/dist/styles/tokens/light-dark.css +158 -0
- package/dist/styles/tokens/offsets-sizing.css +406 -0
- package/dist/styles/tokens/property-regs.css +169 -0
- package/dist/styles/tokens/scale-paper.css +361 -0
- package/dist/styles/tokens/scheme-motion.css +334 -0
- package/dist/styles/tokens/shadow.css +132 -0
- package/dist/styles/tokens.css +22 -2269
- package/dist/styles/transitions.css +20 -2
- package/dist/styles/typography.css +18 -6
- package/dist/styles/utilities/a11y-overrides.css +140 -0
- package/dist/styles/utilities/animate.css +26 -0
- package/dist/styles/utilities/base.css +365 -0
- package/dist/styles/utilities/btn.css +399 -0
- package/dist/styles/utilities/components.css +317 -0
- package/dist/styles/utilities.css +19 -1170
- package/dist/switch.js +1 -1
- package/dist/tabs.js +98 -98
- package/dist/timeline.js +2 -2
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/underline.d.ts +1 -0
- package/dist/underline.js +85 -0
- package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-DfVgP4te.js} +1 -1
- package/dist/{useConfiguratorState-DxAqksK6.js → useConfiguratorState-BdQXh9ie.js} +1 -1
- package/dist/useSpecularTracking-DFK_fhpG.js +32 -0
- package/dist/useSpringMount-DXUzxBjV.js +108 -0
- package/dist/watercolor-dot.js +2 -2
- package/package.json +62 -38
- package/src/styles/cards.css +2 -2
- package/src/styles/dock/layer-group.css +38 -4
- package/src/styles/dock/layers.css +11 -1
- package/src/styles/dock/morph.css +95 -19
- package/src/styles/dock/shell.css +12 -0
- package/src/styles/dock-controls.css +25 -12
- package/src/styles/drawer.css +12 -4
- package/src/styles/glass/a11y-fallback.css +245 -0
- package/src/styles/glass/ladder.css +304 -0
- package/src/styles/glass/material.css +238 -0
- package/src/styles/glass/progress-rail.css +78 -0
- package/src/styles/glass/squircle.css +66 -0
- package/src/styles/glass/surfaces.css +306 -0
- package/src/styles/glass.css +31 -1052
- package/src/styles/index.css +24 -6
- package/src/styles/theme.css +14 -14
- package/src/styles/tokens/color-radius.css +250 -0
- package/src/styles/tokens/dark-arm.css +194 -0
- package/src/styles/tokens/glass.css +413 -0
- package/src/styles/tokens/light-dark.css +158 -0
- package/src/styles/tokens/offsets-sizing.css +406 -0
- package/src/styles/tokens/property-regs.css +169 -0
- package/src/styles/tokens/scale-paper.css +361 -0
- package/src/styles/tokens/scheme-motion.css +334 -0
- package/src/styles/tokens/shadow.css +132 -0
- package/src/styles/tokens.css +22 -2269
- package/src/styles/transitions.css +20 -2
- package/src/styles/typography.css +18 -6
- package/src/styles/utilities/a11y-overrides.css +140 -0
- package/src/styles/utilities/animate.css +26 -0
- package/src/styles/utilities/base.css +365 -0
- package/src/styles/utilities/btn.css +399 -0
- package/src/styles/utilities/components.css +317 -0
- package/src/styles/utilities.css +19 -1170
- package/dist/DeckProgress-Dmk4_AKN.js +0 -23
- package/dist/InstrumentRail-CUJ05YVG.js +0 -44
- package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +0 -16
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +0 -7
- package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
- package/dist/components/custom/deck-progress/index.d.ts +0 -2
- package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
- package/dist/components/custom/dialog-native/index.d.ts +0 -1
- package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +0 -41
- package/dist/components/custom/glass-panel/index.d.ts +0 -2
- package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +0 -31
- package/dist/components/custom/header-ribbon/index.d.ts +0 -2
- package/dist/components/custom/header-ribbon/types.d.ts +0 -7
- package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
- package/dist/components/custom/instrument-rail/index.d.ts +0 -2
- package/dist/composables/glass/createGPUCanvas.d.ts +0 -40
- package/dist/deck-progress.d.ts +0 -1
- package/dist/deck-progress.js +0 -2
- package/dist/dockContext-BKeIMmNk.js +0 -9
- package/dist/glass-panel.d.ts +0 -1
- package/dist/glass-panel.js +0 -44
- package/dist/header-ribbon.d.ts +0 -1
- package/dist/header-ribbon.js +0 -63
- package/dist/instrument-rail.d.ts +0 -1
- package/dist/instrument-rail.js +0 -2
- package/dist/useGlassRenderer-5I0YkI4t.js +0 -69
- package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
- package/dist/useSpringMount-BJSHcLl3.js +0 -113
- /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-Drow5WkV.js} +0 -0
- /package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-DufLHi0y.js} +0 -0
- /package/dist/{IconTooltip-yefK7cJc.js → IconTooltip-BrQ5p181.js} +0 -0
- /package/dist/{Input-DWQQIOC4.js → Input-B-F818RU.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-DWghtRt7.js} +0 -0
- /package/dist/{constants-CS75AWHG.js → constants-C8NMonuo.js} +0 -0
- /package/dist/{presets-BKVyQfbt.js → presets-1OhFpaIC.js} +0 -0
- /package/dist/{prng-wHuHlNHE.js → prng-CjVgzjQT.js} +0 -0
- /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CRvVzOvP.js} +0 -0
- /package/dist/{useCanvas2D-ClrQuZtp.js → useCanvas2D-CSeH8h16.js} +0 -0
- /package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-D7R9OypB.js} +0 -0
- /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-DAdVPVp4.js} +0 -0
- /package/dist/{useInterval-Dsmqwi03.js → useInterval-D3USn0yc.js} +0 -0
- /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-i8tHd5WO.js} +0 -0
- /package/dist/{useScrollProgress-CAH8Ofwt.js → useScrollProgress-CcgmgMQt.js} +0 -0
- /package/dist/{useSortable-C8ReQ50P.js → useSortable-DnyGXKKY.js} +0 -0
- /package/dist/{useTextHighlight-DON84L8w.js → useTextHighlight-B3b10W6r.js} +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const BASE_WIDTH = 1280;
|
|
1
|
+
export { BASE_WIDTH } from "./constants";
|
|
3
2
|
export interface ConstellationNode {
|
|
4
3
|
x: number;
|
|
5
4
|
y: number;
|
|
@@ -51,6 +50,89 @@ export interface ConstellationWarp {
|
|
|
51
50
|
/** The chased node's INDEX (live target), or -1 when inactive. */
|
|
52
51
|
targetIdx: number;
|
|
53
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* The auto-DRIFT target-source (AY.W-CON1 — the 2nd half of the AX.W17 "drift +
|
|
55
|
+
* warp are ONE mechanic" thesis). The warp re-points its focal node to a
|
|
56
|
+
* periodically-chosen RANDOM node on a jittered cadence: the SAME warp spring,
|
|
57
|
+
* a different target-PICKER (a click for warp, this cadence for drift). No new
|
|
58
|
+
* rAF, no second mechanic — `stepField` steps this cadence inline, re-pointing
|
|
59
|
+
* `setWarpTarget` to a picked node only when the spring has SETTLED (so a
|
|
60
|
+
* click-warp in flight always pre-empts the cadence). PRM is enforced by the
|
|
61
|
+
* CALLER (the component does not advance the cadence under reduced-motion — the
|
|
62
|
+
* `stepField` call lives inside the `!reducedMotion` block — so the focal mark
|
|
63
|
+
* stays at its seed: the WARP precedent, NOT fire-but-freeze).
|
|
64
|
+
*/
|
|
65
|
+
export interface ConstellationWander {
|
|
66
|
+
/** ms timestamp of the next auto re-target; -1 until armed on the first stepped frame. */
|
|
67
|
+
nextAt: number;
|
|
68
|
+
/** the minimum idle (ms) between auto re-targets. */
|
|
69
|
+
minIdle: number;
|
|
70
|
+
/** the random extra idle (ms) added per cadence (so the rhythm is not metronomic). */
|
|
71
|
+
jitter: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The warp-spring tuning the integrator reads (AY.W-CON2). Tokenised numeric (the
|
|
75
|
+
* `--constellation-warp-*` cohort) so a consumer retunes the warp WITHOUT editing
|
|
76
|
+
* src — read ONCE on mount via `parseFloat`, threaded onto the field.
|
|
77
|
+
*
|
|
78
|
+
* `response` is the keyframes.js `(response, dampingFraction)` model's ANGULAR
|
|
79
|
+
* PERIOD (the SwiftUI `.spring(response:)` axis): `ω₀ = 2π/response`. It is NOT a
|
|
80
|
+
* settle-duration — at ζ=1 the 2%-settle lands at `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`
|
|
81
|
+
* (the `(1 + ω₀t)e^(−ω₀t)` critically-damped envelope). Documented here + in the
|
|
82
|
+
* `--constellation-warp-response` token comment so the token semantics are honest
|
|
83
|
+
* at ANY ζ (the AY.W-CON2 ω-reconcile; the engine keeps the keyframes.js convention,
|
|
84
|
+
* mints NO second ω formula).
|
|
85
|
+
*/
|
|
86
|
+
export interface ConstellationWarpConfig {
|
|
87
|
+
/** keyframes.js angular period (s) — `ω₀ = 2π/response`, NOT a settle-duration. */
|
|
88
|
+
response: number;
|
|
89
|
+
/** damping ratio ζ — 1 critically damped (a focal mark must NOT ring). */
|
|
90
|
+
zeta: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The gravity-well tuning (AY.W-CON2). The held-pointer pull is an inverse-square
|
|
94
|
+
* force composed into `stepField` (no new rAF). Tokenised numeric (the
|
|
95
|
+
* `--constellation-well-*` cohort) so a consumer retunes the well WITHOUT editing
|
|
96
|
+
* src. All distances are base-width px (`k`-scaled at step time).
|
|
97
|
+
*/
|
|
98
|
+
export interface ConstellationWellConfig {
|
|
99
|
+
/** the inverse-square pull gain (the force scale at unit distance). */
|
|
100
|
+
gain: number;
|
|
101
|
+
/** the reach (base-width px) — nodes beyond it are untouched (the O(within-reach) cost floor). */
|
|
102
|
+
reach: number;
|
|
103
|
+
/**
|
|
104
|
+
* the ARM ramp rate (1/s) — `strength` eases toward `target = 1` at this rate
|
|
105
|
+
* while HELD (the gentle bloom the token tunes). The RELEASE is NOT this rate:
|
|
106
|
+
* it is the fixed brisk {@link WELL_RELEASE_RAMP} (the field-cools invariant —
|
|
107
|
+
* not consumer-tunable, F8.2). A consumer slowing this token slows the ARM
|
|
108
|
+
* bloom only; the release stays brisk so the cool gate holds.
|
|
109
|
+
*/
|
|
110
|
+
ramp: number;
|
|
111
|
+
/** the per-node speed cap (base-width px/frame) — the no-slingshot clamp. */
|
|
112
|
+
maxSpeed: number;
|
|
113
|
+
/** the singularity floor (px) — a node AT the cursor gets a bounded pull, never `∞`. */
|
|
114
|
+
soften: number;
|
|
115
|
+
/** ms the pointer is held before the well arms. */
|
|
116
|
+
holdMs: number;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The gravity-well live STATE (AY.W-CON2). `(x, y)` is the held pointer in
|
|
120
|
+
* canvas-local px (`-1` = inactive); `strength` is the eased pull 0→1 (ramps to
|
|
121
|
+
* `target` at `cfg.ramp`/s); `target` is the strength the ramp eases toward (1
|
|
122
|
+
* while held, 0 on release). A transient force — the field renormalises back to
|
|
123
|
+
* `speed` after release (the field-cools invariant).
|
|
124
|
+
*/
|
|
125
|
+
export interface ConstellationWell {
|
|
126
|
+
/** canvas-local px of the held pointer; `-1` = inactive. */
|
|
127
|
+
x: number;
|
|
128
|
+
y: number;
|
|
129
|
+
/** the eased pull strength 0→1 (ramps to `target` at `cfg.ramp`/s). */
|
|
130
|
+
strength: number;
|
|
131
|
+
/** the strength the ramp is easing toward: 1 while held, 0 on release. */
|
|
132
|
+
target: number;
|
|
133
|
+
/** the well tuning (gain/reach/ramp/maxSpeed/soften). */
|
|
134
|
+
cfg: ConstellationWellConfig;
|
|
135
|
+
}
|
|
54
136
|
/**
|
|
55
137
|
* The field state the component exposes to its `drawOverlay` consumer so a
|
|
56
138
|
* skin can pin itself to a real field node. `k` is the `width / BASE_WIDTH`
|
|
@@ -79,6 +161,28 @@ export interface ConstellationField {
|
|
|
79
161
|
focalIndex: number;
|
|
80
162
|
/** The per-axis warp spring the engine steps inside `stepField` (AX.W17). */
|
|
81
163
|
warp: ConstellationWarp;
|
|
164
|
+
/**
|
|
165
|
+
* The warp-spring tuning `warpStep` reads (AY.W-CON2). Optional — absent
|
|
166
|
+
* falls back to the shipped `{ response: 0.55, zeta: 1.0 }` defaults (the
|
|
167
|
+
* byte-identical HEAD spring). A tokenised override (read on mount) reaches
|
|
168
|
+
* the integrator through this member.
|
|
169
|
+
*/
|
|
170
|
+
warpCfg?: ConstellationWarpConfig;
|
|
171
|
+
/**
|
|
172
|
+
* The optional auto-DRIFT cadence (AY.W-CON1). When set, `stepField`
|
|
173
|
+
* periodically re-points the warp to a random node (the wander source on the
|
|
174
|
+
* SAME spring). Absent (`undefined`) leaves the field BYTE-IDENTICAL to the
|
|
175
|
+
* pre-wander HEAD — `stepField` skips the cadence block entirely.
|
|
176
|
+
*/
|
|
177
|
+
wander?: ConstellationWander;
|
|
178
|
+
/**
|
|
179
|
+
* The optional gravity-well (AY.W-CON2). When set, `stepField` composes a
|
|
180
|
+
* held-pointer inverse-square pull force (no new rAF) — `well.target → 1`
|
|
181
|
+
* while held, `→ 0` on release, the field renormalising back to `speed` once
|
|
182
|
+
* the well cools. Absent (`undefined`) leaves the field BYTE-IDENTICAL to the
|
|
183
|
+
* pre-well HEAD — `stepField` skips the force pass entirely.
|
|
184
|
+
*/
|
|
185
|
+
well?: ConstellationWell;
|
|
82
186
|
}
|
|
83
187
|
/**
|
|
84
188
|
* The `<Constellation>` consumer prop surface (the public type a consumer types
|
|
@@ -92,6 +196,15 @@ export interface ConstellationProps {
|
|
|
92
196
|
link?: number;
|
|
93
197
|
/** Drift speed. Default 0.16. */
|
|
94
198
|
speed?: number;
|
|
199
|
+
/**
|
|
200
|
+
* AY.W-COHERE E3 — the per-instance outer-envelope RECESSION knob (the aurora
|
|
201
|
+
* `opacityCeiling` / fourier `intensity` sibling — ONE recession vocabulary
|
|
202
|
+
* across the four live substrates). Scales the painted edge/node/web/ripple
|
|
203
|
+
* alpha OVER the mode-tuned `--constellation-alpha` base so the lattice can
|
|
204
|
+
* RECEDE behind content (0.4–0.6 in a hero). Default `1` is byte-identical to
|
|
205
|
+
* HEAD.
|
|
206
|
+
*/
|
|
207
|
+
opacityCeiling?: number;
|
|
95
208
|
/** Seed for a reproducible field (number or hashed string); omit for `Math.random`. */
|
|
96
209
|
seed?: number | string;
|
|
97
210
|
/** Steer-toward-cursor + tap ripples. Default true; auto-off under reduced-motion. */
|
|
@@ -103,18 +216,50 @@ export interface ConstellationProps {
|
|
|
103
216
|
* reduced-motion (the focal mark stays put — the stated PRM policy).
|
|
104
217
|
*/
|
|
105
218
|
warpOnClick?: boolean;
|
|
219
|
+
/**
|
|
220
|
+
* Auto-DRIFT (AY.W-CON1): a periodic auto-pick re-points the focal node to a
|
|
221
|
+
* random node on a jittered cadence — the wander source on the SAME warp
|
|
222
|
+
* spring (no second mechanic). `true` uses the default cadence (8–16s, the
|
|
223
|
+
* slides rhythm); `{ minIdle, jitter }` tunes it. Default OFF (absent →
|
|
224
|
+
* byte-identical to HEAD). PRM-gated by the WARP precedent (the cadence never
|
|
225
|
+
* advances under reduced-motion — the focal stays at its seed).
|
|
226
|
+
*/
|
|
227
|
+
wander?: boolean | {
|
|
228
|
+
minIdle?: number;
|
|
229
|
+
jitter?: number;
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* Pointer-held GRAVITY-WELL (AY.W-CON2): hold the pointer and the lattice is
|
|
233
|
+
* pulled toward it (an inverse-square force on the same engine, no new rAF);
|
|
234
|
+
* release and the field cools back to `speed`. INDEPENDENT of `warpOnClick`
|
|
235
|
+
* and `pointerReactive` (a consumer can hold-to-pull on a non-ripple,
|
|
236
|
+
* non-warp lattice). `true` uses the tokenised defaults; an object tunes the
|
|
237
|
+
* gains. Default OFF (absent → byte-identical to HEAD). PRM-gated by the WARP
|
|
238
|
+
* precedent (the held-timer is not registered under reduced-motion).
|
|
239
|
+
*/
|
|
240
|
+
gravityWell?: boolean | {
|
|
241
|
+
holdMs?: number;
|
|
242
|
+
gain?: number;
|
|
243
|
+
reach?: number;
|
|
244
|
+
ramp?: number;
|
|
245
|
+
maxSpeed?: number;
|
|
246
|
+
soften?: number;
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* Deterministic-capture freeze (AY.W-CON3): when `true`, lays out ONE
|
|
250
|
+
* reproducible STATIC frame (no `stepField`, no ripple / warp / wander / well
|
|
251
|
+
* advance) and hands `drawOverlay` a FROZEN `now` so a phase-driven skin
|
|
252
|
+
* resolves to a fixed value. Omit to AUTO-DERIVE from `location.search`
|
|
253
|
+
* matching `export | print | freeze` (the deploy-pipeline contract); an
|
|
254
|
+
* explicit `false` forces live even under a capture URL. Set `seed` for a
|
|
255
|
+
* field stable ACROSS runs. Unifies with the reduced-motion one-static-frame
|
|
256
|
+
* path (`freeze || reducedMotion` is the single static-frame predicate).
|
|
257
|
+
*/
|
|
258
|
+
freeze?: boolean;
|
|
106
259
|
class?: string;
|
|
107
260
|
/** The skin seam — paints the consumer's focal mark on the live field. */
|
|
108
261
|
drawOverlay?: (ctx: CanvasRenderingContext2D, field: ConstellationField, now: number) => void;
|
|
109
262
|
}
|
|
110
|
-
export declare const DEFAULT_PALETTE: ConstellationPalette;
|
|
111
|
-
/**
|
|
112
|
-
* Resolve the FULL neutral palette + legibility weights off a canvas's resolved
|
|
113
|
-
* custom properties (AX.W17). The colors AND the alpha multipliers route through
|
|
114
|
-
* the same `getComputedStyle` probe, so a dark-mode flip re-resolves BOTH the
|
|
115
|
-
* `:root`/`.dark` color arms AND the per-mode alpha defaults in one read.
|
|
116
|
-
*/
|
|
117
|
-
export declare function readPalette(canvas: HTMLCanvasElement): ConstellationPalette;
|
|
118
263
|
/**
|
|
119
264
|
* Seed `count` drifting nodes inside `w × h`. `rng` is a `() => number` in
|
|
120
265
|
* `[0, 1)` (the glass-ui `mulberry32`/`Math.random`); a seeded `rng` lays out a
|
|
@@ -124,6 +269,19 @@ export declare function readPalette(canvas: HTMLCanvasElement): ConstellationPal
|
|
|
124
269
|
* adds one, so node count is conserved).
|
|
125
270
|
*/
|
|
126
271
|
export declare function seedField(rng: () => number, count: number, w: number, h: number, speed: number): ConstellationNode[];
|
|
272
|
+
/**
|
|
273
|
+
* Re-fit the existing lattice to a NEW canvas size, proportionally, ON the
|
|
274
|
+
* size-change frame (AY.W-CON1). Without it a field seeded at a transitional
|
|
275
|
+
* size (the canvas measures mid responsive-scale — the deck slide-enter case)
|
|
276
|
+
* keeps its small-canvas positions and DRIFTS out to fill the larger box at
|
|
277
|
+
* `speed` px/frame — the visible "takes a while to expand out" lag the slides
|
|
278
|
+
* bespoke copy fixed. Scales node + warp positions by the per-axis dimension
|
|
279
|
+
* ratio; velocities are UNTOUCHED (they are base-width direction vectors
|
|
280
|
+
* `k`-scaled at step time — scaling them would HEAT the field, breaking the
|
|
281
|
+
* cool-down invariant). No-op on first layout (`prev ≤ 0`; the seed path owns
|
|
282
|
+
* it) or unchanged dims.
|
|
283
|
+
*/
|
|
284
|
+
export declare function refitField(field: ConstellationField, prevW: number, prevH: number): void;
|
|
127
285
|
/**
|
|
128
286
|
* Advance the field one step: drift + wall-bounce every node, then (if the
|
|
129
287
|
* pointer is live) lean nodes within reach toward the cursor WITHOUT changing
|
|
@@ -133,58 +291,11 @@ export declare function seedField(rng: () => number, count: number, w: number, h
|
|
|
133
291
|
* via `warpStep` INSIDE this single per-frame call (AX.W17) — NO second rAF,
|
|
134
292
|
* NO `useSpring`. The warp rides the substrate's ONE parked rAF; a `dt` of `0`
|
|
135
293
|
* (omitted / first frame) leaves the spring untouched.
|
|
136
|
-
*/
|
|
137
|
-
export declare function stepField(field: ConstellationField, k: number, speed: number, pointer: ConstellationPointer | null, dt?: number): void;
|
|
138
|
-
/**
|
|
139
|
-
* The nearest DRIFTING node to `(px, py)` in canvas-local px — a linear O(count)
|
|
140
|
-
* min-d² scan (count 64 default — negligible; matches the O(count²) edge pass).
|
|
141
|
-
* "Lattice point" = the nearest drifting NODE (the constellation has NO fixed
|
|
142
|
-
* lattice). `excludeIdx` drops a node from the candidate set (the focal node
|
|
143
|
-
* excludes ITSELF, so a cursor-on-focal warp no-ops). Returns `-1` if no
|
|
144
|
-
* eligible node exists (empty field, or only the excluded node).
|
|
145
|
-
*/
|
|
146
|
-
export declare function nearestNode(field: ConstellationField, px: number, py: number, excludeIdx?: number): number;
|
|
147
|
-
/**
|
|
148
|
-
* Advance the focal-node warp spring one `dt` (seconds). A per-axis 2nd-order
|
|
149
|
-
* critically-damped integrator over `field.warp.{x,y}` toward the LIVE position
|
|
150
|
-
* of `field.nodes[field.warp.targetIdx]` — re-read EACH frame, so the spring
|
|
151
|
-
* CHASES a drifting target and arrives ON it (the identity-ride). No-ops when no
|
|
152
|
-
* warp is active (`targetIdx < 0`). `dt` is clamped to {@link WARP_DT_CLAMP} so a
|
|
153
|
-
* tab-throttle / offscreen-park-resume gap cannot teleport the mark.
|
|
154
294
|
*
|
|
155
|
-
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*/
|
|
161
|
-
export declare function warpStep(field: ConstellationField, dt: number): void;
|
|
162
|
-
/**
|
|
163
|
-
* Point the warp at a node INDEX (the live target-source seam). The focal node
|
|
164
|
-
* re-points to `idx`; the spring chases `nodes[idx]`'s LIVE position FROM the
|
|
165
|
-
* focal mark's CURRENT position (`warp.{x,y}`) — a continuous spring-eased path,
|
|
166
|
-
* never a snap. The component seeds `warp.{x,y}` at field-center on first layout,
|
|
167
|
-
* so even the first warp springs from a real start point. `idx < 0` clears the
|
|
168
|
-
* warp (the focal mark is removed). Re-pointing does NOT zero the velocity, so a
|
|
169
|
-
* mid-flight re-target curves smoothly toward the new node.
|
|
170
|
-
*/
|
|
171
|
-
export declare function setWarpTarget(field: ConstellationField, idx: number): void;
|
|
172
|
-
/**
|
|
173
|
-
* Warp the focal node to the nearest drifting node to a canvas-LOCAL px point
|
|
174
|
-
* (the `warpTo(point)` primitive). The DEGENERATE case — the click's UNCONSTRAINED
|
|
175
|
-
* nearest node is already the current focal (cursor on/closest to the focal mark)
|
|
176
|
-
* — NO-OPS (returns the current focal; a click on yourself does not re-warp). Any
|
|
177
|
-
* OTHER click re-points to the nearest node, with the focal EXCLUDED from the
|
|
178
|
-
* candidate set (you never re-warp to yourself; the next-nearest wins). Returns
|
|
179
|
-
* the chosen node index, or `-1` when no eligible node exists. The component's
|
|
180
|
-
* `warpTo(clientX, clientY)` sugar maps client→local px via `toLocal` first.
|
|
295
|
+
* `now` (ms; default `0` — every existing caller stays green) + `rng` (default
|
|
296
|
+
* `Math.random`) drive the optional auto-DRIFT cadence (AY.W-CON1): AFTER the
|
|
297
|
+
* warp step, if `field.wander` is set and `now > 0`, the cadence re-points
|
|
298
|
+
* `setWarpTarget` to a random node when it elapses AND the spring has settled
|
|
299
|
+
* (a click-warp in flight pre-empts the cadence — `warpSettled` reports false).
|
|
181
300
|
*/
|
|
182
|
-
export declare function
|
|
183
|
-
/** Pass 1 — hairline edges between any two nodes within `link` px (alpha falls off with distance). */
|
|
184
|
-
export declare function drawEdges(ctx: CanvasRenderingContext2D, field: ConstellationField, link: number, palette: ConstellationPalette): void;
|
|
185
|
-
/** Pass 2 — ambient node dots. */
|
|
186
|
-
export declare function drawNodes(ctx: CanvasRenderingContext2D, field: ConstellationField, palette: ConstellationPalette): void;
|
|
187
|
-
/** Pass 3 — the cursor joins the web: faint links to nodes within reach + a soft cursor node. */
|
|
188
|
-
export declare function drawPointerWeb(ctx: CanvasRenderingContext2D, field: ConstellationField, link: number, palette: ConstellationPalette, pointer: ConstellationPointer | null): void;
|
|
189
|
-
/** Pass 4 — tap ripples: expanding rings that fade over ~0.9s; consumed entries are spliced. */
|
|
190
|
-
export declare function drawRipples(ctx: CanvasRenderingContext2D, field: ConstellationField, now: number, ripples: ConstellationRipple[], palette: ConstellationPalette): void;
|
|
301
|
+
export declare function stepField(field: ConstellationField, k: number, speed: number, pointer: ConstellationPointer | null, dt?: number, now?: number, rng?: () => number): void;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { ConstellationField, ConstellationWarpConfig, ConstellationWellConfig } from "./constellationField";
|
|
2
|
+
import { DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, DEFAULT_WELL_CONFIG, WARP_RESPONSE, WARP_ZETA } from "./constants";
|
|
3
|
+
export { DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, DEFAULT_WELL_CONFIG, WARP_RESPONSE, WARP_ZETA };
|
|
4
|
+
/**
|
|
5
|
+
* Read the NUMERIC interaction-tuning tokens (the warp spring + the gravity-well
|
|
6
|
+
* gains) off a canvas's resolved custom properties — ONCE on mount (AY.W-CON2),
|
|
7
|
+
* via `parseFloat`, NOT per-frame `getComputedStyle` (the hot loop stays clean).
|
|
8
|
+
* Returns `{ warp, well }` configs the field carries; every member falls back to
|
|
9
|
+
* the shipped default when the token is absent (an SSR / no-token mount reads the
|
|
10
|
+
* byte-identical spring). The tokens are PLAIN numbers (`0.55`, `12000`), immune
|
|
11
|
+
* to the W30 `light-dark()`-into-Canvas2D leak (they never reach a `fillStyle`).
|
|
12
|
+
*/
|
|
13
|
+
export declare function readInteractionConfig(canvas: HTMLCanvasElement): {
|
|
14
|
+
warp: ConstellationWarpConfig;
|
|
15
|
+
well: ConstellationWellConfig;
|
|
16
|
+
wander: {
|
|
17
|
+
minIdle: number;
|
|
18
|
+
jitter: number;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Advance the gravity-well one `dt` (AY.W-CON2). A transient held-pointer force
|
|
23
|
+
* composed inside `stepField` (NO new rAF): ease `well.strength` toward
|
|
24
|
+
* `well.target` (1 held / 0 released) at `cfg.ramp`/s; while active, add an
|
|
25
|
+
* inverse-square pull toward the held point onto each node within `cfg.reach`
|
|
26
|
+
* (the `max(d, soften)` no-singularity floor + the `cfg.maxSpeed` no-slingshot
|
|
27
|
+
* clamp); ALWAYS ease every node's |v| back toward `speed` (the field-cools
|
|
28
|
+
* invariant — so a released well re-settles). No-ops (entirely skipped) when
|
|
29
|
+
* `field.well` is undefined → the default render is byte-identical to HEAD.
|
|
30
|
+
*
|
|
31
|
+
* `dt` is clamped to {@link WARP_DT_CLAMP} (the same park-resume guard the warp
|
|
32
|
+
* uses) so a tab-throttle gap cannot slingshot the field in one giant step.
|
|
33
|
+
*/
|
|
34
|
+
export declare function stepWell(field: ConstellationField, k: number, speed: number, dt: number): void;
|
|
35
|
+
/**
|
|
36
|
+
* The nearest DRIFTING node to `(px, py)` in canvas-local px — a linear O(count)
|
|
37
|
+
* min-d² scan (count 64 default — negligible; matches the O(count²) edge pass).
|
|
38
|
+
* "Lattice point" = the nearest drifting NODE (the constellation has NO fixed
|
|
39
|
+
* lattice). `excludeIdx` drops a node from the candidate set (the focal node
|
|
40
|
+
* excludes ITSELF, so a cursor-on-focal warp no-ops). Returns `-1` if no
|
|
41
|
+
* eligible node exists (empty field, or only the excluded node).
|
|
42
|
+
*/
|
|
43
|
+
export declare function nearestNode(field: ConstellationField, px: number, py: number, excludeIdx?: number): number;
|
|
44
|
+
/**
|
|
45
|
+
* Advance the focal-node warp spring one `dt` (seconds). A per-axis 2nd-order
|
|
46
|
+
* critically-damped integrator over `field.warp.{x,y}` toward the LIVE position
|
|
47
|
+
* of `field.nodes[field.warp.targetIdx]` — re-read EACH frame, so the spring
|
|
48
|
+
* CHASES a drifting target and arrives ON it (the identity-ride). No-ops when no
|
|
49
|
+
* warp is active (`targetIdx < 0`). `dt` is clamped to {@link WARP_DT_CLAMP} so a
|
|
50
|
+
* tab-throttle / offscreen-park-resume gap cannot teleport the mark.
|
|
51
|
+
*
|
|
52
|
+
* x += v·dt ; v += (−2ζω·v − ω²·(x − target))·dt
|
|
53
|
+
*
|
|
54
|
+
* Reads `(response, ζ)` from `field.warpCfg` (the tokenised override — AY.W-CON2),
|
|
55
|
+
* falling back to the shipped `WARP_RESPONSE`/`WARP_ZETA` defaults. `ω = 2π/response`
|
|
56
|
+
* is the keyframes.js `(response, dampingFraction)` convention (the SHARED house
|
|
57
|
+
* model — `ω₀` is the angular frequency, `response` its ANGULAR PERIOD, NOT a
|
|
58
|
+
* settle-duration; at ζ=1 the 2%-settle is `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`). NO
|
|
59
|
+
* second ω formula is minted (the ω-reconcile). NOT its rAF — the FORBID-useSpring
|
|
60
|
+
* contract (a second rAF would defeat the parked-substrate one-path freeze).
|
|
61
|
+
*/
|
|
62
|
+
export declare function warpStep(field: ConstellationField, dt: number): void;
|
|
63
|
+
/**
|
|
64
|
+
* Point the warp at a node INDEX (the live target-source seam). The focal node
|
|
65
|
+
* re-points to `idx`; the spring chases `nodes[idx]`'s LIVE position FROM the
|
|
66
|
+
* focal mark's CURRENT position (`warp.{x,y}`) — a continuous spring-eased path,
|
|
67
|
+
* never a snap. The component seeds `warp.{x,y}` at field-center on first layout,
|
|
68
|
+
* so even the first warp springs from a real start point. `idx < 0` clears the
|
|
69
|
+
* warp (the focal mark is removed). Re-pointing does NOT zero the velocity, so a
|
|
70
|
+
* mid-flight re-target curves smoothly toward the new node.
|
|
71
|
+
*/
|
|
72
|
+
export declare function setWarpTarget(field: ConstellationField, idx: number): void;
|
|
73
|
+
/**
|
|
74
|
+
* Warp the focal node to the nearest drifting node to a canvas-LOCAL px point
|
|
75
|
+
* (the `warpTo(point)` primitive). The DEGENERATE case — the click's UNCONSTRAINED
|
|
76
|
+
* nearest node is already the current focal (cursor on/closest to the focal mark)
|
|
77
|
+
* — NO-OPS (returns the current focal; a click on yourself does not re-warp). Any
|
|
78
|
+
* OTHER click re-points to the nearest node, with the focal EXCLUDED from the
|
|
79
|
+
* candidate set (you never re-warp to yourself; the next-nearest wins). Returns
|
|
80
|
+
* the chosen node index, or `-1` when no eligible node exists. The component's
|
|
81
|
+
* `warpTo(clientX, clientY)` sugar maps client→local px via `toLocal` first.
|
|
82
|
+
*/
|
|
83
|
+
export declare function warpTo(field: ConstellationField, px: number, py: number): number;
|
|
84
|
+
/**
|
|
85
|
+
* Is the warp spring ARRIVED on its target (AY.W-CON1)? True when there is no
|
|
86
|
+
* active target (`targetIdx < 0`) OR the focal's gap to its LIVE target node is
|
|
87
|
+
* within {@link WARP_SETTLE_BAND}. A click-warp in flight (hundreds of px out)
|
|
88
|
+
* reports NOT arrived, so a user click always PRE-EMPTS the auto-drift cadence
|
|
89
|
+
* (the wander only re-targets a spring that has reached its current node). The
|
|
90
|
+
* gate is POSITION-only by design — a critically-damped spring tracking a drifting
|
|
91
|
+
* node carries a non-zero steady-state velocity forever, so a velocity term would
|
|
92
|
+
* never clear on a live field.
|
|
93
|
+
*/
|
|
94
|
+
export declare function warpSettled(field: ConstellationField): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Pick a random eligible node index for the auto-drift re-target (AY.W-CON1) —
|
|
97
|
+
* any node EXCEPT the current `focalIndex` (so the focal actually MOVES). `rng`
|
|
98
|
+
* is the seeded `() => number` in `[0, 1)`. A degenerate field (≤1 node, or only
|
|
99
|
+
* the current focal) returns the current focal, which `setWarpTarget` no-ops
|
|
100
|
+
* cleanly (no crash, no jump).
|
|
101
|
+
*/
|
|
102
|
+
export declare function pickWanderTarget(field: ConstellationField, rng: () => number): number;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { default as Constellation } from "./Constellation.vue";
|
|
2
|
-
export { seedField, stepField,
|
|
3
|
-
export
|
|
2
|
+
export { seedField, stepField, refitField, BASE_WIDTH, } from "./constellationField";
|
|
3
|
+
export { stepWell, nearestNode, readInteractionConfig, warpStep, warpTo, setWarpTarget, warpSettled, pickWanderTarget, DEFAULT_WELL_CONFIG, DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, WARP_RESPONSE, WARP_ZETA, } from "./constellationInteraction";
|
|
4
|
+
export { readPalette, drawEdges, drawNodes, drawPointerWeb, drawRipples, DEFAULT_PALETTE, } from "./constellationDraw";
|
|
5
|
+
export type { ConstellationNode, ConstellationRipple, ConstellationPointer, ConstellationPalette, ConstellationField, ConstellationWarp, ConstellationWarpConfig, ConstellationWander, ConstellationWell, ConstellationWellConfig, ConstellationProps, } from "./constellationField";
|
|
@@ -13,11 +13,22 @@ type __VLS_Props = {
|
|
|
13
13
|
* @default false
|
|
14
14
|
*/
|
|
15
15
|
disableTransitions?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Opt-in slow-ECLIPSE register: a LONG-PRESS (vs the normal click) flips
|
|
18
|
+
* the mode through an indulgent, stretched sun↔moon cross-fade — the
|
|
19
|
+
* `--toggle-eclipse-duration` (≈1600ms) over the default 750ms. The bare
|
|
20
|
+
* `@click` flip is UNCHANGED (the default-path canary). Under
|
|
21
|
+
* `prefers-reduced-motion: reduce` the long-press flips INSTANTLY (no
|
|
22
|
+
* eclipse). Default false — the toggle behaves exactly as before.
|
|
23
|
+
* @default false
|
|
24
|
+
*/
|
|
25
|
+
eclipse?: boolean;
|
|
16
26
|
};
|
|
17
27
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
18
28
|
size: DarkModeToggleSize;
|
|
19
29
|
passive: boolean;
|
|
20
30
|
disableTransitions: boolean;
|
|
31
|
+
eclipse: boolean;
|
|
21
32
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
22
33
|
declare const _default: typeof __VLS_export;
|
|
23
34
|
export default _default;
|
|
@@ -1,111 +1,3 @@
|
|
|
1
|
-
type DockDensity = "compact" | "comfortable" | "spacious" | "audacious";
|
|
2
|
-
interface DockCommonProps {
|
|
3
|
-
fitContent?: boolean;
|
|
4
|
-
position?: "fixed" | "inline" | "sticky";
|
|
5
|
-
alwaysExpanded?: boolean;
|
|
6
|
-
/**
|
|
7
|
-
* Corner treatment.
|
|
8
|
-
* `"pill"` — the stadium silhouette (default).
|
|
9
|
-
* `"rounded"` — a finite rounded radius (`--radius-xl`).
|
|
10
|
-
* `"card"` — the AW.W3b big-dock card shell: a finite concentric
|
|
11
|
-
* radius (`--dock-card-radius`, default `--radius-3xl`)
|
|
12
|
-
* ABOVE 2xl, below pill — does NOT collapse to a stadium.
|
|
13
|
-
* Collapsed it returns to a pill; the pill↔card swap
|
|
14
|
-
* morphs on the `--dock-motion-resize` spring. AX.W56's
|
|
15
|
-
* squircle policy applies `corner-shape:
|
|
16
|
-
* var(--corner-shape-bigdock)` here under `@supports
|
|
17
|
-
* (corner-shape: superellipse(2))` — the big-dock is the ONE
|
|
18
|
-
* surface where the superellipse reads (cards/pills stay
|
|
19
|
-
* round); the border-radius arc is the cross-engine contract.
|
|
20
|
-
*
|
|
21
|
-
* `"pill"`/`"rounded"` previously bound ONLY under the vertical rail
|
|
22
|
-
* variant — on a horizontal dock the prop silently no-op'd. AW.W3b adds
|
|
23
|
-
* the horizontal-root shape rules (closing that documented-but-dead prop),
|
|
24
|
-
* so `shape` now paints on a horizontal dock too.
|
|
25
|
-
*/
|
|
26
|
-
shape?: "pill" | "rounded" | "card";
|
|
27
|
-
/**
|
|
28
|
-
* Layout axis of the dock. `"horizontal"` (default) lays items out
|
|
29
|
-
* left-to-right and animates `width`; `"vertical"` lays items out
|
|
30
|
-
* top-to-bottom and animates `height`. IGNORED under `variant="rail"` /
|
|
31
|
-
* `"instrument-strip"` (those force vertical by construction).
|
|
32
|
-
*/
|
|
33
|
-
orientation?: "horizontal" | "vertical";
|
|
34
|
-
/**
|
|
35
|
-
* Density controls dock padding, gaps, layer height, and inherited
|
|
36
|
-
* dock control sizing. Root CSS variables can override each density.
|
|
37
|
-
*/
|
|
38
|
-
density?: DockDensity;
|
|
39
|
-
/**
|
|
40
|
-
* Overflow strategy when the expanded content exceeds the dock's
|
|
41
|
-
* axis cap (`--dock-max-inline-size` horizontally,
|
|
42
|
-
* `--dock-max-block-size` vertically). The ONE knob governing every
|
|
43
|
-
* overflow behaviour (AT.W7-dock-a clean break — collapsed from the
|
|
44
|
-
* prior `wrap` boolean + `overflow` pair + `containerName` clip-lift,
|
|
45
|
-
* which all touched overflow divergently).
|
|
46
|
-
* `"grow"` — content grows to fit then overflows visibly past
|
|
47
|
-
* the cap (the default; nothing clips or scrolls).
|
|
48
|
-
* `"wrap"` — expanded content wraps to multiple rows via CONTENT-DRIVEN
|
|
49
|
-
* intrinsic flex-wrap (the `.dock-overflow-wrap` recipe). The
|
|
50
|
-
* dock shrink-wraps to content and caps that intrinsic width
|
|
51
|
-
* at `max-inline-size: var(--dock-max-inline-size)`, so the row
|
|
52
|
-
* reflows to N rows EXACTLY when its intrinsic width exceeds
|
|
53
|
-
* the cap — at ANY viewport width — and collapses to one row
|
|
54
|
-
* when it fits (no viewport breakpoint). The wrapped multi-row silhouette lifts
|
|
55
|
-
* onto the card/floating shadow tier as the dock expands.
|
|
56
|
-
* HORIZONTAL-ONLY: a vertical rail grows-to-fit + clamps via
|
|
57
|
-
* `--dock-max-block-size` (its own overflow story), so the
|
|
58
|
-
* `.dock-overflow-wrap` class is not emitted for a vertical
|
|
59
|
-
* orientation.
|
|
60
|
-
* `"scroll"` — the dock becomes the scroll port. Horizontal docks
|
|
61
|
-
* scroll the active layer on the inline axis
|
|
62
|
-
* (`.dock-scroll-x`); vertical rails scroll on the
|
|
63
|
-
* block axis (`.dock-scroll-y`), keeping the
|
|
64
|
-
* `max-block-size` cap. The rounded pill masks the
|
|
65
|
-
* scroll edge; the scrollbar is hidden. The axis is
|
|
66
|
-
* chosen automatically from `orientation`.
|
|
67
|
-
*/
|
|
68
|
-
overflow?: "grow" | "wrap" | "scroll";
|
|
69
|
-
/**
|
|
70
|
-
* When set, the dock root establishes an inline-size container query
|
|
71
|
-
* subject (`container-type: inline-size; container-name: <value>`) so
|
|
72
|
-
* descendants can query the named container via `@container <value>
|
|
73
|
-
* (...)` rules. ORTHOGONAL to the `overflow` clip: opting into a
|
|
74
|
-
* container subject does NOT silently change the dock's clip shell
|
|
75
|
-
* (AT.W7-dock-a — the prior clip-lift was folded out; use
|
|
76
|
-
* `overflow="wrap"` to allow multi-line content).
|
|
77
|
-
*
|
|
78
|
-
* T.B audit §1.3 cornerstone: the cluster's container subject must
|
|
79
|
-
* live on the dock primitive, never on a descendant whose intrinsic
|
|
80
|
-
* size the dock relies on.
|
|
81
|
-
*/
|
|
82
|
-
containerName?: string;
|
|
83
|
-
}
|
|
84
|
-
interface DockVariantProps extends DockCommonProps {
|
|
85
|
-
variant?: "dock";
|
|
86
|
-
/** Idle-collapse delay in ms (default 2000). DOCK-ONLY — a rail never collapses. */
|
|
87
|
-
collapseDelay?: number;
|
|
88
|
-
/** Start in the collapsed state (default true). DOCK-ONLY — a rail is always expanded. */
|
|
89
|
-
startCollapsed?: boolean;
|
|
90
|
-
/**
|
|
91
|
-
* In-cap arrangement. `"linear"` (default) lays the active layer out as a
|
|
92
|
-
* linear row/column. `"grid"` makes the active layer a self-wrapping tile
|
|
93
|
-
* grid (Launchpad/Stage-Manager track symmetry — `auto-fill` columns of
|
|
94
|
-
* `--dock-tile-min`). ORTHOGONAL to `overflow` (the OVER-cap strategy):
|
|
95
|
-
* `layout` is the IN-cap arrangement.
|
|
96
|
-
*
|
|
97
|
-
* Hard contract: a `layout="grid"` dock is `alwaysExpanded` (a 2D panel
|
|
98
|
-
* does not read as a collapsible pill, and no width morph means no
|
|
99
|
-
* per-frame grid reflow). The canonical pairing is
|
|
100
|
-
* `shape="card" layout="grid"` (the props stay independent — no
|
|
101
|
-
* auto-implication of `shape`). DOCK-ONLY — the grid is a horizontal big-dock
|
|
102
|
-
* arrangement, never a rail's.
|
|
103
|
-
*/
|
|
104
|
-
layout?: "linear" | "grid";
|
|
105
|
-
}
|
|
106
|
-
interface DockRailProps extends DockCommonProps {
|
|
107
|
-
variant: "rail" | "instrument-strip";
|
|
108
|
-
}
|
|
109
1
|
declare var __VLS_1: {}, __VLS_3: {}, __VLS_5: {}, __VLS_7: {}, __VLS_14: {};
|
|
110
2
|
type __VLS_Slots = {} & {
|
|
111
3
|
persistent?: (props: typeof __VLS_1) => any;
|
|
@@ -118,7 +10,7 @@ type __VLS_Slots = {} & {
|
|
|
118
10
|
} & {
|
|
119
11
|
collapsed?: (props: typeof __VLS_14) => any;
|
|
120
12
|
};
|
|
121
|
-
declare const __VLS_base: import("vue").DefineComponent<DockVariantProps | DockRailProps, {
|
|
13
|
+
declare const __VLS_base: import("vue").DefineComponent<import("./composables/useDockShellProps").DockVariantProps | import("./composables/useDockShellProps").DockRailProps, {
|
|
122
14
|
expanded: import("vue").Ref<boolean, boolean>;
|
|
123
15
|
isPinned: import("vue").Ref<boolean, boolean>;
|
|
124
16
|
isHeld: import("vue").ComputedRef<boolean>;
|
|
@@ -127,7 +19,7 @@ declare const __VLS_base: import("vue").DefineComponent<DockVariantProps | DockR
|
|
|
127
19
|
collapse: () => void;
|
|
128
20
|
keepOpen: () => void;
|
|
129
21
|
release: () => void;
|
|
130
|
-
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DockVariantProps | DockRailProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
22
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("./composables/useDockShellProps").DockVariantProps | import("./composables/useDockShellProps").DockRailProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
131
23
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
132
24
|
declare const _default: typeof __VLS_export;
|
|
133
25
|
export default _default;
|
|
@@ -1,4 +1,40 @@
|
|
|
1
1
|
import type { Ref } from "vue";
|
|
2
|
+
/**
|
|
3
|
+
* AX.W02 — ONE morph orchestrator per dock. The dock is a single morph stack
|
|
4
|
+
* whose active "layer" is `(expandedState × activePane)`: the outer
|
|
5
|
+
* collapse↔expand swap and the inner `<DockLayerGroup>` pane swaps are
|
|
6
|
+
* transitions in the SAME group — ONE spring, ONE scalar (`--dock-morph-t`,
|
|
7
|
+
* established by W01), ONE clock. No second engine.
|
|
8
|
+
*
|
|
9
|
+
* Re-derived from first principles on W01's settled single-scalar substrate:
|
|
10
|
+
* - `--dock-morph-t` is written to the `.glass-dock` root and INHERITS to every
|
|
11
|
+
* descendant (dock.css `@property … inherits:true`), so ONE spring writing
|
|
12
|
+
* that one scalar drives EVERY registered container's size calc at once.
|
|
13
|
+
* - Each morphing container carries its OWN `--dock-morph-from`/`--dock-morph-to`
|
|
14
|
+
* px span (the allowed one-time FLIP measurement) and interpolates it against
|
|
15
|
+
* the shared scalar — `from + (to − from) · t`. So a simultaneous
|
|
16
|
+
* collapse + pane-swap reads as one continuous spring: the box, the nested
|
|
17
|
+
* stack, and every child stagger ramp on the same `t`.
|
|
18
|
+
*
|
|
19
|
+
* The orchestrator OWNS one `SpringProgress`. The OUTER collapse↔expand pair
|
|
20
|
+
* registers as a target; a NESTED `<DockLayerGroup>` registers a SECOND target
|
|
21
|
+
* instead of minting its own `useLayerTransition` engine. A re-toggle mid-flight
|
|
22
|
+
* re-bases the live solver onto the new span from its current velocity (the iOS
|
|
23
|
+
* interruptible-physics contract W01 keeps), so even an interrupted morph stays
|
|
24
|
+
* one continuous trajectory.
|
|
25
|
+
*
|
|
26
|
+
* This is the dock-flavored first instance of the general `MorphGroup` /
|
|
27
|
+
* `GlassEffectContainer` facility (the iOS-26 Liquid-Glass corpus, facet 26 —
|
|
28
|
+
* the `provideMorphGroup` two-part seam: a per-element driver + a provide/inject
|
|
29
|
+
* orchestrator). AX.W42 generalizes it; W02 establishes the seam it builds on.
|
|
30
|
+
*
|
|
31
|
+
* LIGHT-surface only: `SpringProgress` owns its own rAF via `.play(onFrame)` and
|
|
32
|
+
* carries no static value.js edge — never import `AnimationGroup` / `./engine`
|
|
33
|
+
* (that pulls value.js into the dock bundle).
|
|
34
|
+
*
|
|
35
|
+
* The `DOCK_SPRING` tuning this orchestrator drives is the ONE authority shared with
|
|
36
|
+
* `useLayerTransition` — it lives in `../constants` (the feature-dir constants home).
|
|
37
|
+
*/
|
|
2
38
|
export interface DockMorphGroupRegistration {
|
|
3
39
|
/** The container element owning this group's grid-stacked panes. */
|
|
4
40
|
containerEl: Ref<HTMLElement | null>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type Ref } from "vue";
|
|
2
|
+
/** The morph-window handlers the GlassDock SFC wires. */
|
|
3
|
+
export interface DockMorphWindow {
|
|
4
|
+
markTransitioning: () => void;
|
|
5
|
+
onDockTransitionDone: (event: TransitionEvent) => void;
|
|
6
|
+
clearTransitionTimer: () => void;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Own the `isTransitioning` flag's morph-window lifecycle. `markTransitioning`
|
|
10
|
+
* (every `visualExpanded` flip) bumps a private generation so any in-flight
|
|
11
|
+
* morph's pending timer / `transitionend` self-cancels (the A→B→A no-skip /
|
|
12
|
+
* no-queue invariant); `onDockTransitionDone` resolves the flag on a resize-morph
|
|
13
|
+
* property finishing. Clears its timer on unmount.
|
|
14
|
+
*/
|
|
15
|
+
export declare function useDockMorphWindow(dockEl: Ref<HTMLElement | null>, isTransitioning: Ref<boolean>): DockMorphWindow;
|