@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
|
@@ -55,15 +55,24 @@ export interface SatelliteInternal {
|
|
|
55
55
|
endX: number;
|
|
56
56
|
endY: number;
|
|
57
57
|
}
|
|
58
|
-
/**
|
|
59
|
-
export interface
|
|
58
|
+
/** Body / orbit / satellite geometry — the contained-droplet length cohort (W15). */
|
|
59
|
+
export interface BlobGeometry {
|
|
60
60
|
canvasSize: number;
|
|
61
61
|
bodyRadius: number;
|
|
62
62
|
satelliteCount: number;
|
|
63
63
|
satelliteRadius: number;
|
|
64
64
|
orbitRadius: number;
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
eccentricity: number;
|
|
66
|
+
}
|
|
67
|
+
/** Satellite merge/absorb/emerge/orbit lifecycle DURATIONS (ms). */
|
|
68
|
+
export interface BlobSatelliteTiming {
|
|
69
|
+
mergeDuration: number;
|
|
70
|
+
absorbedDuration: [number, number];
|
|
71
|
+
emergeDuration: number;
|
|
72
|
+
orbitDuration: [number, number];
|
|
73
|
+
}
|
|
74
|
+
/** The living membrane — smin merge + surface noise/warp + pulsation. */
|
|
75
|
+
export interface BlobMembrane {
|
|
67
76
|
smoothK: number;
|
|
68
77
|
/** Smin merge variant — `quadratic` (default) | `circular` (rounder menisci). */
|
|
69
78
|
merge: BlobMerge;
|
|
@@ -77,12 +86,29 @@ export interface BlobConfig {
|
|
|
77
86
|
warpAmp: number;
|
|
78
87
|
pulseFreq: number;
|
|
79
88
|
pulseAmp: number;
|
|
89
|
+
}
|
|
90
|
+
/** Palette + OKLCh color-perturbation atom. */
|
|
91
|
+
export interface BlobColor {
|
|
92
|
+
paletteStops: string[];
|
|
80
93
|
hueRange: number;
|
|
81
94
|
satShift: number;
|
|
82
95
|
brightnessShift: number;
|
|
83
96
|
colorNoiseFreq: number;
|
|
84
97
|
colorNoiseSpeed: number;
|
|
85
|
-
|
|
98
|
+
}
|
|
99
|
+
/** The lit-glass surface — Blinn-Phong glint + Fresnel rim + iridescence/SSS/core-glow. */
|
|
100
|
+
export interface BlobSurface {
|
|
101
|
+
lit: boolean;
|
|
102
|
+
/** CSS color for the Fresnel rim tint (resolved through the `/color` leaf). */
|
|
103
|
+
rimColor: string;
|
|
104
|
+
/** Light direction [x, y, z] (normalized in-shader). */
|
|
105
|
+
lightDir: [number, number, number];
|
|
106
|
+
specStrength: number;
|
|
107
|
+
/** Specular exponent (16-64 — a tight glint). */
|
|
108
|
+
specShininess: number;
|
|
109
|
+
/** Fresnel/Schlick exponent (~2-3). */
|
|
110
|
+
rimPower: number;
|
|
111
|
+
rimStrength: number;
|
|
86
112
|
/** Warm-pearl rim sheen weight (0 = off). */
|
|
87
113
|
iridescence: number;
|
|
88
114
|
/** Base hue (degrees) the warm-biased cosine palette centres on. */
|
|
@@ -95,31 +121,39 @@ export interface BlobConfig {
|
|
|
95
121
|
sssPower: number;
|
|
96
122
|
/** Thickness-driven inner-luminosity (core glow) lift. */
|
|
97
123
|
coreGlow: number;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
/** Light direction [x, y, z] (normalized in-shader). */
|
|
102
|
-
lightDir: [number, number, number];
|
|
103
|
-
specStrength: number;
|
|
104
|
-
/** Specular exponent (16-64 — a tight glint). */
|
|
105
|
-
specShininess: number;
|
|
106
|
-
/** Fresnel/Schlick exponent (~2-3). */
|
|
107
|
-
rimPower: number;
|
|
108
|
-
rimStrength: number;
|
|
124
|
+
}
|
|
125
|
+
/** Pointer interaction — lean / squash-stretch / click-impulse. */
|
|
126
|
+
export interface BlobInteraction {
|
|
109
127
|
pointerAttraction: number;
|
|
110
128
|
pointerStrength: number;
|
|
111
|
-
/**
|
|
129
|
+
/**
|
|
130
|
+
* Velocity-driven volume-preserving squash-and-stretch magnitude (0 = off).
|
|
131
|
+
*
|
|
132
|
+
* AY.W-BLOB-CONFIG D3 — a SWAMPED fine-detail axis. The squash rides the smoothed
|
|
133
|
+
* spring velocity (`useBlobPointer`'s critically-damped `response: 0.18` follow),
|
|
134
|
+
* which is heavily damped and down-scaled into body space — so the tanh-saturated
|
|
135
|
+
* elongation reads at the noise floor (a live readback measured 0% body-aspect change
|
|
136
|
+
* between `stretch=0` and `stretch=1.5`). It is NOT a primary axis: it adds a subtle
|
|
137
|
+
* elongation on a FAST flick over the much louder lean/follow/pseudopod channel that
|
|
138
|
+
* dominates the deformation. Kept (the volume-preserving map is correct and lands a
|
|
139
|
+
* whisper on the fastest flicks) but DEMOTED — the demo no longer surfaces it as a
|
|
140
|
+
* top-level slider (the flick blurb is honest-down to match). A consumer that wants a
|
|
141
|
+
* pronounced taffy-pull raises this AND uncouples the velocity from the spring smooth.
|
|
142
|
+
*/
|
|
112
143
|
stretch: number;
|
|
113
144
|
/** Click spring-impulse amplitude (a one-shot bouncy pulse on the body radius). */
|
|
114
145
|
clickImpulse: number;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
146
|
+
}
|
|
147
|
+
/** Externally tunable blob configuration — EIGHT cohesive atoms, defaults via `BLOB_CONFIG_DEFAULTS`. */
|
|
148
|
+
export interface BlobConfig {
|
|
149
|
+
geometry: BlobGeometry;
|
|
150
|
+
satellites: BlobSatelliteTiming;
|
|
151
|
+
membrane: BlobMembrane;
|
|
152
|
+
color: BlobColor;
|
|
153
|
+
surface: BlobSurface;
|
|
154
|
+
interaction: BlobInteraction;
|
|
155
|
+
quality: BlobQuality;
|
|
156
|
+
tempo: number;
|
|
123
157
|
}
|
|
124
158
|
export declare const BLOB_CONFIG_DEFAULTS: BlobConfig;
|
|
125
159
|
export declare const BLOB_CONFIG_KEY: InjectionKey<BlobConfig>;
|
|
@@ -28,8 +28,8 @@ export type InstrumentChassisVariant = "glass" | "spine";
|
|
|
28
28
|
* the `<ChassisDivider>` adjacent to each — emit markup only when bound.
|
|
29
29
|
* I gate `<header>`, `<footer>`, and the two dividers on `$slots.strip` /
|
|
30
30
|
* `$slots.control` presence, so empty-slot consumers don't have to suppress
|
|
31
|
-
* the markup with `display: none` overrides
|
|
32
|
-
* idiom
|
|
31
|
+
* the markup with `display: none` overrides — the `v-if="$slots.status"`
|
|
32
|
+
* slot-gating idiom.
|
|
33
33
|
*
|
|
34
34
|
* The chassis owns the `--phase-color` cascade via `data-phase`; phase label,
|
|
35
35
|
* hero number, and phase progress fill all read it through one CSS custom
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fallback for `--tab-indicator-max-stretch` when the cascade leaves it unset — the
|
|
3
|
+
* default ≈+8% travel-squish cap (AX.W53). `--stretch = 1 + frac · (cap − 1)`, so a
|
|
4
|
+
* full-width jump reaches the cap and a tiny hop stays near 1. The token is the
|
|
5
|
+
* authority; this is the no-token floor.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_INDICATOR_MAX_STRETCH = 1.08;
|
|
8
|
+
/**
|
|
9
|
+
* ms after the stretch opens before it releases back to fit (`--stretch → 1`) — the
|
|
10
|
+
* Material "grow then shrink" close. Rides the same snappy glide clock as the travel.
|
|
11
|
+
*/
|
|
12
|
+
export declare const INDICATOR_RELEASE_MS = 60;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { TimingFunction } from "@mkbabb/keyframes.js";
|
|
2
|
+
import type { GlassUnderlinePaths } from "./types";
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
/**
|
|
5
|
+
* Which clock drives the draw. `load` (default) — the draw is a
|
|
6
|
+
* `NumericAnimation` the parent's load `Sequence` fires once via `play()`.
|
|
7
|
+
* `scroll` — native `view()` keyframes, bidirectional, no JS. `static` —
|
|
8
|
+
* set drawn, no clock.
|
|
9
|
+
*/
|
|
10
|
+
clock?: "load" | "scroll" | "static";
|
|
11
|
+
/**
|
|
12
|
+
* The render variant. `pen` is the only PROVEN, filter-free render.
|
|
13
|
+
* pencil | crayon | boil are UNPROVEN headroom — the API seam for a future
|
|
14
|
+
* wave, NOT shipped here (they render pen today).
|
|
15
|
+
*/
|
|
16
|
+
variant?: "pen" | "pencil" | "crayon" | "boil";
|
|
17
|
+
/** The stroke colour. Defaults to `var(--primary)` (re-resolves under .dark). */
|
|
18
|
+
color?: string;
|
|
19
|
+
/** The load-clock draw duration (ms). Default 700. */
|
|
20
|
+
drawMs?: number;
|
|
21
|
+
/**
|
|
22
|
+
* The load-clock easing. Default `easeOutCubic` — doctrine-compliant (DEC-6):
|
|
23
|
+
* ink is an irreversible additive reveal, so an overshooting spring would lay
|
|
24
|
+
* ink past the end then retract it (the "never overshoot past gone" logic).
|
|
25
|
+
* The value.js `TimingFunction` type (already a peer) serves a consumer's own
|
|
26
|
+
* decelerating register (e.g. an expo).
|
|
27
|
+
*/
|
|
28
|
+
easing?: TimingFunction;
|
|
29
|
+
/**
|
|
30
|
+
* The scroll-clock timeline name (DEC-5). Default the element's own `view()`.
|
|
31
|
+
* Bound as `--gu-timeline`; the CSS reads `animation-timeline:
|
|
32
|
+
* var(--gu-timeline, view())`. A consumer (`--beat-tl`, a named scroll
|
|
33
|
+
* timeline) passes its own.
|
|
34
|
+
*/
|
|
35
|
+
timeline?: string;
|
|
36
|
+
/**
|
|
37
|
+
* The declarative third clock (DEC-2). A thin overlay ON the load clock:
|
|
38
|
+
* `undefined` (default) = source parity (seeds undrawn, parent fires
|
|
39
|
+
* `play()`); bound: rising edge → play() (under PRM → snap()), falling edge
|
|
40
|
+
* → reset to undrawn so re-activation REPLAYS, mount with `true` → plays.
|
|
41
|
+
* Only meaningful with `clock="load"` (the other clocks rest drawn).
|
|
42
|
+
*/
|
|
43
|
+
active?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* The geometry escape (DEC-7). The FULL geometry tuple
|
|
46
|
+
* `{ stroke, ghost?, viewBox?, len? }` — a bare `d`-string escape silently
|
|
47
|
+
* breaks the dash model when the consumer geometry's viewBox/length differ.
|
|
48
|
+
* Defaults to the canonical pen + ghost.
|
|
49
|
+
*/
|
|
50
|
+
paths?: GlassUnderlinePaths;
|
|
51
|
+
};
|
|
52
|
+
/**
|
|
53
|
+
* CLOCK A — draw the underline ONCE. The awaitable a parent's load `Sequence` fires
|
|
54
|
+
* as a causal link. Resolves a Promise so the Sequence can `await` it; under PRM it
|
|
55
|
+
* snaps to drawn in one paint and resolves immediately. A no-op for scroll/static.
|
|
56
|
+
*/
|
|
57
|
+
declare function play(): Promise<void>;
|
|
58
|
+
/** Snap to terminal (drawn) — the PRM / interrupt path. */
|
|
59
|
+
declare function snap(): void;
|
|
60
|
+
declare var __VLS_1: {};
|
|
61
|
+
type __VLS_Slots = {} & {
|
|
62
|
+
default?: (props: typeof __VLS_1) => any;
|
|
63
|
+
};
|
|
64
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
65
|
+
play: typeof play;
|
|
66
|
+
snap: typeof snap;
|
|
67
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
68
|
+
active: boolean;
|
|
69
|
+
variant: "pen" | "pencil" | "crayon" | "boil";
|
|
70
|
+
color: string;
|
|
71
|
+
clock: "load" | "scroll" | "static";
|
|
72
|
+
drawMs: number;
|
|
73
|
+
easing: TimingFunction;
|
|
74
|
+
timeline: string;
|
|
75
|
+
paths: GlassUnderlinePaths;
|
|
76
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
77
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
78
|
+
declare const _default: typeof __VLS_export;
|
|
79
|
+
export default _default;
|
|
80
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
81
|
+
new (): {
|
|
82
|
+
$slots: S;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { TimingFunction } from "@mkbabb/keyframes.js";
|
|
2
|
+
/** Which clock drives the draw. */
|
|
3
|
+
export type GlassUnderlineClock = "load" | "scroll" | "static";
|
|
4
|
+
/**
|
|
5
|
+
* The render variant. `pen` is the only PROVEN, filter-free render (the masthead
|
|
6
|
+
* invariant). pencil | crayon | boil are UNPROVEN headroom — the API seam for a
|
|
7
|
+
* future wave, NOT shipped (they render pen today).
|
|
8
|
+
*/
|
|
9
|
+
export type GlassUnderlineVariant = "pen" | "pencil" | "crayon" | "boil";
|
|
10
|
+
/**
|
|
11
|
+
* The geometry escape tuple (DEC-7). Carries the FULL geometry so an escaped path
|
|
12
|
+
* stays dash-coherent — a bare `d`-string escape silently breaks the dash model when
|
|
13
|
+
* the consumer geometry's viewBox/length differ from the canonical
|
|
14
|
+
* (`0 0 100 10` + `len` 120).
|
|
15
|
+
*/
|
|
16
|
+
export interface GlassUnderlinePaths {
|
|
17
|
+
/** The primary pen stroke `d`. */
|
|
18
|
+
readonly stroke: string;
|
|
19
|
+
/** The faint ghost overdraw `d`. Omit for a single-path (no overdraw) render. */
|
|
20
|
+
readonly ghost?: string;
|
|
21
|
+
/** The SVG viewBox. Default `0 0 100 10`. */
|
|
22
|
+
readonly viewBox?: string;
|
|
23
|
+
/** The dasharray length (the over-long fixed dash). Default `120`. */
|
|
24
|
+
readonly len?: number;
|
|
25
|
+
}
|
|
26
|
+
/** GlassUnderline props (the public prop surface). */
|
|
27
|
+
export interface GlassUnderlineProps {
|
|
28
|
+
/** Which clock drives the draw. Default `load`. */
|
|
29
|
+
clock?: GlassUnderlineClock;
|
|
30
|
+
/** The render variant. Default `pen` (the only proven render). */
|
|
31
|
+
variant?: GlassUnderlineVariant;
|
|
32
|
+
/** The stroke colour. Default `var(--primary)` (re-resolves under `.dark`). */
|
|
33
|
+
color?: string;
|
|
34
|
+
/** The load-clock draw duration (ms). Default `700`. */
|
|
35
|
+
drawMs?: number;
|
|
36
|
+
/** The load-clock easing (value.js `TimingFunction`). Default `easeOutCubic`. */
|
|
37
|
+
easing?: TimingFunction;
|
|
38
|
+
/** The scroll-clock timeline name. Default the element's own `view()`. */
|
|
39
|
+
timeline?: string;
|
|
40
|
+
/**
|
|
41
|
+
* The declarative third clock — a thin overlay ON the load clock. `undefined`
|
|
42
|
+
* (default) = source parity (parent fires `play()`); rising edge → play, falling
|
|
43
|
+
* edge → reset-to-undrawn (re-rise REPLAYS), mount-`true` → plays. Only
|
|
44
|
+
* meaningful with `clock="load"`.
|
|
45
|
+
*/
|
|
46
|
+
active?: boolean;
|
|
47
|
+
/** The geometry escape tuple. Defaults to the canonical pen + ghost. */
|
|
48
|
+
paths?: GlassUnderlinePaths;
|
|
49
|
+
}
|
|
50
|
+
/** The imperative handle exposed via `defineExpose` / a template ref. */
|
|
51
|
+
export interface GlassUnderlineExpose {
|
|
52
|
+
/** Draw the load-clock underline once (the awaitable a Sequence chains). */
|
|
53
|
+
play: () => Promise<void>;
|
|
54
|
+
/** Snap to terminal (drawn) — the PRM / interrupt path. */
|
|
55
|
+
snap: () => void;
|
|
56
|
+
}
|
|
@@ -39,6 +39,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {},
|
|
|
39
39
|
"onUpdate:activeSnapPoint"?: ((val: string | number) => any) | undefined;
|
|
40
40
|
}>, {
|
|
41
41
|
mode: DrawerMode;
|
|
42
|
+
open: boolean;
|
|
42
43
|
modal: boolean;
|
|
43
44
|
shouldScaleBackground: boolean;
|
|
44
45
|
snapPoints: (number | string)[];
|
|
@@ -3,9 +3,9 @@ import { type DropdownMenuSubContentProps } from 'reka-ui';
|
|
|
3
3
|
type __VLS_Props = DropdownMenuSubContentProps & {
|
|
4
4
|
class?: HTMLAttributes['class'];
|
|
5
5
|
};
|
|
6
|
-
declare var
|
|
6
|
+
declare var __VLS_14: {};
|
|
7
7
|
type __VLS_Slots = {} & {
|
|
8
|
-
default?: (props: typeof
|
|
8
|
+
default?: (props: typeof __VLS_14) => any;
|
|
9
9
|
};
|
|
10
10
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
11
11
|
escapeKeyDown: (event: KeyboardEvent) => any;
|
|
@@ -9,28 +9,35 @@ export { default as Slider } from './Slider.vue';
|
|
|
9
9
|
* `.slider-thumb` paint. The size axis lifts pure geometry via CSS vars
|
|
10
10
|
* (`--slider-track-height`, `--slider-thumb-size`) the SFC defaults read.
|
|
11
11
|
*
|
|
12
|
-
* Exactly two canonical recipes ship
|
|
13
|
-
* standard — the
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* the
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* the
|
|
12
|
+
* Exactly two canonical recipes ship:
|
|
13
|
+
* standard — the CONTINUOUS GLASS CYLINDER with NO VISIBLE THUMB AT ALL (the
|
|
14
|
+
* user's binding bar, USER-AUDIT-2026-06-10 §B3): you pull the TRACK
|
|
15
|
+
* itself. A THICK glass capsule track; the filled `.slider-range`
|
|
16
|
+
* glass cylinder (the W52 liquid-glass material — backdrop + edge rim,
|
|
17
|
+
* tinted to `--primary`) is pulled along it, and its leading EDGE IS
|
|
18
|
+
* the handle — the only affordance is the fill edge + the cursor/touch
|
|
19
|
+
* response. The reka `<SliderThumb>` STAYS MOUNTED (a11y/keyboard/drag/
|
|
20
|
+
* value-follow native on it) but paints INVISIBLE: width 0, opacity 0,
|
|
21
|
+
* transparent — no distinct disc/cap/ring over the continuous
|
|
22
|
+
* cylinder. Keyboard focus rings the TRACK (the W-PRIM-POLISH focus
|
|
23
|
+
* register), not the invisible thumb; hover/held lift the track FILL's
|
|
24
|
+
* edge rim; the iOS press spring gives the whole fill a felt squish.
|
|
25
|
+
* This is the general-purpose glass scrubber and the default.
|
|
22
26
|
* spectrum — the value.js gradient-track color slider: a tall capsule whose
|
|
23
27
|
* background is a consumer-supplied `--slider-track-bg`
|
|
24
28
|
* linear-gradient (the LCH/hue ramp), a transparent range, and a
|
|
25
|
-
*
|
|
26
|
-
* idiom — `
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
+
* THIN VISIBLE squircle thumb the HEIGHT of the track (the iOS/value.js
|
|
30
|
+
* color-picker idiom — a slim vertical bar, `w-3`-thin per the value.js
|
|
31
|
+
* reference; `corner-shape: superellipse()` via `--corner-shape-thumb`,
|
|
32
|
+
* @supports-gated over a generous proportional round fallback that
|
|
33
|
+
* reads squircle-adjacent cross-engine). This is the aurora/blob
|
|
34
|
+
* color-picking surface — its thumb IS visible (it is the handle).
|
|
29
35
|
*
|
|
30
|
-
* Sizes
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
36
|
+
* Sizes — the standard cylinder is the thick glass capsule (the invisible thumb's
|
|
37
|
+
* value-follow inset still rides the size token for the 44px coarse hit-halo):
|
|
38
|
+
* sm — 12px track
|
|
39
|
+
* md — 20px track (default)
|
|
40
|
+
* lg — 28px track
|
|
34
41
|
*/
|
|
35
42
|
export declare const sliderVariants: (props?: ({
|
|
36
43
|
variant?: "standard" | "spectrum" | null | undefined;
|
|
@@ -19,7 +19,7 @@ type ToasterToast = Toast & {
|
|
|
19
19
|
description?: string;
|
|
20
20
|
action?: Component | VNode;
|
|
21
21
|
open?: boolean;
|
|
22
|
-
|
|
22
|
+
'onUpdate:open'?: (open: boolean) => void;
|
|
23
23
|
};
|
|
24
24
|
type ToastOptions = Omit<ToasterToast, 'id'>;
|
|
25
25
|
declare function toast(props: ToastOptions): {
|
|
@@ -160,7 +160,7 @@ declare function useToast(): {
|
|
|
160
160
|
| undefined;
|
|
161
161
|
duration?: number | undefined;
|
|
162
162
|
open?: boolean | undefined;
|
|
163
|
-
|
|
163
|
+
'onUpdate:open'?: ((open: boolean) => void) | undefined;
|
|
164
164
|
}[]>;
|
|
165
165
|
toast: typeof toast;
|
|
166
166
|
dismiss: (toastId?: string) => void;
|
|
@@ -5,9 +5,13 @@ export interface OklchStop {
|
|
|
5
5
|
h: number;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* A color seam: resolves a CSS color string to a GAMMA-sRGB triple in [0,1].
|
|
9
|
+
* `defaultBlobColorResolver` is the shipped default. A general-purpose injection
|
|
10
|
+
* type — the `<FourierField>` background takes it as a REQUIRED `colorResolver`
|
|
11
|
+
* prop (the SVG-field surface owns its own color pipeline). The goo-blob no longer
|
|
12
|
+
* injects it: it resolves color internally through `cssToOklch → oklchToGammaRgb`
|
|
13
|
+
* (W-BLOB3 STRIPPED the speculative DI built for an absent value.js consumer that
|
|
14
|
+
* never repatriated; see `docs/consumer-evidence/goo-blob.md`).
|
|
11
15
|
*/
|
|
12
16
|
export type ColorResolver = (css: string) => [number, number, number];
|
|
13
17
|
/**
|
|
@@ -60,10 +64,11 @@ export declare function cssToOklch(css: string): OklchStop;
|
|
|
60
64
|
/** OKLCh stop → `#rrggbb` gamma hex (value.js `oklabToRgb255`). */
|
|
61
65
|
export declare function oklchStopToHex(s: OklchStop): string;
|
|
62
66
|
/**
|
|
63
|
-
* The
|
|
64
|
-
* `cssToOklch → oklchToGammaRgb
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
+
* The shipped default `ColorResolver` — `(css) => gamma [r,g,b]` via
|
|
68
|
+
* `cssToOklch → oklchToGammaRgb` (the GAMMA exit; `proof:blob-space-gamma` witnesses
|
|
69
|
+
* the `oklchToGammaRgb` resolve). The `<FourierField>` background passes THIS as its
|
|
70
|
+
* `colorResolver` prop. The goo-blob inlines this exact body internally (W-BLOB3 —
|
|
71
|
+
* no DI seam).
|
|
67
72
|
*/
|
|
68
73
|
export declare const defaultBlobColorResolver: ColorResolver;
|
|
69
74
|
/**
|
|
@@ -104,6 +109,18 @@ export interface DeriveBlobPaletteOptions {
|
|
|
104
109
|
hueSpread?: number;
|
|
105
110
|
/** Midpoint chroma-bump (keeps a vivid pair off the grey midpoint). Default ~0.03. */
|
|
106
111
|
chromaBump?: number;
|
|
112
|
+
/**
|
|
113
|
+
* AY.W-COHERE E1 — the OKLCh-chroma CEILING on every derived stop (OKLCh C
|
|
114
|
+
* units). When set, each stop's chroma is clamped to AT MOST this value AFTER
|
|
115
|
+
* the midpoint bump and BEFORE the gamut-map — so the seed→palette derivation
|
|
116
|
+
* can never amplify a vivid seed into the neon register the shader's
|
|
117
|
+
* SSS/iridescence then over-drives. This is a CHROMA CAP, not a hue re-map: a
|
|
118
|
+
* blue seed stays blue, just bounded to the non-neon chroma. `undefined` (the
|
|
119
|
+
* default) leaves the derivation byte-identical to HEAD. The blob substrate
|
|
120
|
+
* caps the MOOD/seed path into the warm-register band the FourierField comet +
|
|
121
|
+
* the constellation focal share (the set-cohesion accent identity).
|
|
122
|
+
*/
|
|
123
|
+
chromaCeiling?: number;
|
|
107
124
|
}
|
|
108
125
|
/**
|
|
109
126
|
* Seed ONE color into a harmonious, gamut-safe 2-4-stop OKLCh palette for the blob
|
|
@@ -21,13 +21,22 @@ import { ref, type CSSProperties } from "vue";
|
|
|
21
21
|
*
|
|
22
22
|
* PRM-aware: under `prefers-reduced-motion: reduce` the seam DOES NOT write the
|
|
23
23
|
* position (the CSS half pins the catch-light static at the centred `50%`
|
|
24
|
-
* fallback). The
|
|
25
|
-
*
|
|
24
|
+
* fallback). The PRM signal is read from a SINGLE cached `matchMedia` listener
|
|
25
|
+
* minted once at composable setup (NOT a fresh `matchMedia` per pointer event) —
|
|
26
|
+
* the AV.W7 `useWebGLCanvas` substrate pattern.
|
|
27
|
+
*
|
|
28
|
+
* AY.W-A11Y-PERF O-3 — the pointer write is rAF-COALESCED: `onPointerMove` only
|
|
29
|
+
* stashes the raw event + schedules ONE `requestAnimationFrame`; the rAF callback
|
|
30
|
+
* does the single `getBoundingClientRect()` + style write, so a 120–1000 Hz pointer
|
|
31
|
+
* collapses to ONE batched layout read + ONE style write per animation frame (under
|
|
32
|
+
* W54 maximal-glass every blurred-surface repaint is amortized to the frame, not the
|
|
33
|
+
* event). The composable cancels the pending rAF + removes the matchMedia listener on
|
|
34
|
+
* scope dispose (cleanup discipline).
|
|
26
35
|
*/
|
|
27
36
|
export interface UseSpecularTracking {
|
|
28
37
|
/** Bind to the host element's `:style`. Carries the `--mouse-x/--mouse-y` write. */
|
|
29
38
|
specularStyle: ReturnType<typeof ref<CSSProperties>>;
|
|
30
|
-
/** Bind to the host's `@pointermove`.
|
|
39
|
+
/** Bind to the host's `@pointermove`. Schedules the rAF-coalesced position write (PRM-gated). */
|
|
31
40
|
onPointerMove: (event: PointerEvent) => void;
|
|
32
41
|
}
|
|
33
42
|
export declare function useSpecularTracking(): UseSpecularTracking;
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
export declare const OETF_GLSL = "\nfloat srgbToLinearCh(float c) {\n return c <= 0.04045 ? c / 12.92 : pow((c + 0.055) / 1.055, 2.4);\n}\nvec3 srgbToLinear(vec3 c) {\n return vec3(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfloat linearToSrgbCh(float c) {\n return c <= 0.0031308 ? c * 12.92 : 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nvec3 linearToSrgb(vec3 c) {\n return vec3(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}";
|
|
2
2
|
export declare const FBM_ROT_GLSL = "const mat2 FBM_ROT = mat2(0.8, 0.6, -0.6, 0.8);";
|
|
3
3
|
export declare const OKLCH_MATRICES_GLSL = "\n// value.js LINEAR_SRGB_TO_LMS (constants.ts), row-major; written here as GLSL\n// columns (= the transpose) so mat3 * vec3 evaluates the row-major M\u00B7v.\nconst mat3 LINEAR_SRGB_TO_LMS = mat3(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\n\n// value.js srgbToOKLab's INLINE LMS\u2192OKLab coefficients (gamut.ts lines 295-297 \u2014\n// these differ at the ~1e-9 digit from LMS_TO_OKLAB_MATRIX; use the inline ones to\n// mirror the exact value.js path), row-major \u2192 GLSL columns.\nconst mat3 LMS_TO_OKLAB = mat3(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\n\n// value.js OKLAB_TO_LMS_COEFF (constants.ts), row-major \u2192 GLSL columns. Rows:\n// l = [1, 0.3963377774, 0.2158037573], m = [1, -0.1055613458, -0.0638541728],\n// s = [1, -0.0894841775, -1.2914855480].\nconst mat3 OKLAB_TO_LMS = mat3(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\n\n// value.js LMS_TO_LINEAR_SRGB (constants.ts), row-major \u2192 GLSL columns.\nconst mat3 LMS_TO_LINEAR_SRGB = mat3(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\n// Gamma sRGB \u2192 raw OKLab (L, a, b). Mirrors value.js srgbToOKLab.\nvec3 srgbToOklab(vec3 c) {\n vec3 lin = srgbToLinear(c);\n vec3 lms = LINEAR_SRGB_TO_LMS * lin;\n vec3 lmsCbrt = sign(lms) * pow(abs(lms), vec3(1.0 / 3.0));\n return LMS_TO_OKLAB * lmsCbrt;\n}\n\n// Raw OKLab (L, a, b) \u2192 linear sRGB. Mirrors value.js oklabToLinearSRGB.\nvec3 oklabToLinearSrgb(vec3 lab) {\n vec3 lms_ = OKLAB_TO_LMS * lab;\n vec3 lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\n\n// OKLab \u2192 OKLCh: H in RADIANS. Mirrors value.js rawOklabToOklch (which returns\n// degrees; we stay in radians and only fold to [0, 2pi)).\nvec3 oklabToOklch(vec3 lab) {\n float C = length(lab.yz);\n float H = atan(lab.z, lab.y);\n if (H < 0.0) H += 2.0 * PI;\n return vec3(lab.x, C, H);\n}\n\n// OKLCh (H radians) \u2192 OKLab. Mirrors value.js rawOklchToOklab.\nvec3 oklchToOklab(vec3 lch) {\n return vec3(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}";
|
|
4
|
-
export declare const PALETTE_RAMP_GLSL = "\n// value.js interpolateHue in the NORMALIZED-TURNS domain (h_rad/TAU \u2192 turns, the\n// exact .5/+1.0 branch per method, fract() wrap, *TAU back). A radians-native port\n// (PI thresholds / +TAU wrap) diverges 180\u00B0 at the antipode. methods: 0 shorter,\n// 1 longer, 2 increasing, 3 decreasing.\nfloat interpolateHueTurns(float h0, float h1, float t, int method) {\n float TAU = 2.0 * PI;\n float a = h0 / TAU;\n float b = h1 / TAU;\n float i = b - a;\n if (method == 0) { // shorter\n if (i > 0.5) a += 1.0; else if (i < -0.5) b += 1.0;\n } else if (method == 1) { // longer\n if (i > 0.0 && i < 0.5) a += 1.0; else if (i > -0.5 && i <= 0.0) b += 1.0;\n } else if (method == 2) { // increasing\n if (i < 0.0) b += 1.0;\n } else { // decreasing\n if (i > 0.0) a += 1.0;\n }\n float r = a + t * (b - a);\n r = fract(r); // (r % 1 + 1) % 1 \u2014 fract is non-negative in GLSL\n return r * TAU; // back to radians\n}\n\n// Linear-sRGB endpoint pair \u2192 OKLab-rectangular interpolation \u2192 linear sRGB. Holds\n// chroma across the ramp (no grey midpoint). The default/shorter ramp path.\nvec3 mixPaletteOklab(vec3 linA, vec3 linB, float t) {\n vec3 labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3(1.0 / 3.0)));\n vec3 labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3(1.0 / 3.0)));\n vec3 lab = mix(labA, labB, t);\n return oklabToLinearSrgb(lab);\n}\n\n// Linear-sRGB endpoint pair \u2192 OKLCh interpolation along the huePath arc \u2192 linear\n// sRGB. L and C lerp; H walks the chosen arc. The deliberate-rainbow path.\nvec3 mixPaletteOklchArc(vec3 linA, vec3 linB, float t, int method) {\n vec3 labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3(1.0 / 3.0)));\n vec3 labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3(1.0 / 3.0)));\n vec3 lchA = oklabToOklch(labA);\n vec3 lchB = oklabToOklch(labB);\n float L = mix(lchA.x, lchB.x, t);\n float C = mix(lchA.y, lchB.y, t);\n float H = interpolateHueTurns(lchA.z, lchB.z, t, method);\n return oklabToLinearSrgb(oklchToOklab(vec3(L, C, H)));\n}\n\n// The ramp dispatcher
|
|
4
|
+
export declare const PALETTE_RAMP_GLSL = "\n// value.js interpolateHue in the NORMALIZED-TURNS domain (h_rad/TAU \u2192 turns, the\n// exact .5/+1.0 branch per method, fract() wrap, *TAU back). A radians-native port\n// (PI thresholds / +TAU wrap) diverges 180\u00B0 at the antipode. methods: 0 shorter,\n// 1 longer, 2 increasing, 3 decreasing.\nfloat interpolateHueTurns(float h0, float h1, float t, int method) {\n float TAU = 2.0 * PI;\n float a = h0 / TAU;\n float b = h1 / TAU;\n float i = b - a;\n if (method == 0) { // shorter\n if (i > 0.5) a += 1.0; else if (i < -0.5) b += 1.0;\n } else if (method == 1) { // longer\n if (i > 0.0 && i < 0.5) a += 1.0; else if (i > -0.5 && i <= 0.0) b += 1.0;\n } else if (method == 2) { // increasing\n if (i < 0.0) b += 1.0;\n } else { // decreasing\n if (i > 0.0) a += 1.0;\n }\n float r = a + t * (b - a);\n r = fract(r); // (r % 1 + 1) % 1 \u2014 fract is non-negative in GLSL\n return r * TAU; // back to radians\n}\n\n// Linear-sRGB endpoint pair \u2192 OKLab-rectangular interpolation \u2192 linear sRGB. Holds\n// chroma across the ramp (no grey midpoint). The default/shorter ramp path.\nvec3 mixPaletteOklab(vec3 linA, vec3 linB, float t) {\n vec3 labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3(1.0 / 3.0)));\n vec3 labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3(1.0 / 3.0)));\n vec3 lab = mix(labA, labB, t);\n return oklabToLinearSrgb(lab);\n}\n\n// Linear-sRGB endpoint pair \u2192 OKLCh interpolation along the huePath arc \u2192 linear\n// sRGB. L and C lerp; H walks the chosen arc. The deliberate-rainbow path.\nvec3 mixPaletteOklchArc(vec3 linA, vec3 linB, float t, int method) {\n vec3 labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3(1.0 / 3.0)));\n vec3 labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3(1.0 / 3.0)));\n vec3 lchA = oklabToOklch(labA);\n vec3 lchB = oklabToOklch(labB);\n float L = mix(lchA.x, lchB.x, t);\n float C = mix(lchA.y, lchB.y, t);\n float H = interpolateHueTurns(lchA.z, lchB.z, t, method);\n return oklabToLinearSrgb(oklchToOklab(vec3(L, C, H)));\n}\n\n// The ramp dispatcher aurora's samplePalette splices. tRaw is the raw inter-stop\n// parameter [0,1]; the smoothstep ease + the huePath branch live HERE so the ramp is\n// one source. increasing(2)/decreasing(3) take the OKLCh hue-arc (rainbow sweep);\n// every other method takes the OKLab-rectangular straight line (no hue detour).\nvec3 samplePaletteRamp(vec3 a, vec3 b, float tRaw, int huePath) {\n float t = smoothstep(0.0, 1.0, tRaw);\n if (huePath == 2 || huePath == 3) {\n return mixPaletteOklchArc(a, b, t, huePath);\n }\n return mixPaletteOklab(a, b, t);\n}";
|
|
5
5
|
export declare const PCG_HASH_GLSL = "\n// Jarzynski PCG2D \u2014 uvec2 \u2192 uvec2 permuted-congruential hash (JCGT 2020).\nuvec2 pcg2d(uvec2 v) {\n v = v * 1664525u + 1013904223u;\n v.x += v.y * 1664525u;\n v.y += v.x * 1664525u;\n v = v ^ (v >> 16u);\n v.x += v.y * 1664525u;\n v.y += v.x * 1664525u;\n v = v ^ (v >> 16u);\n return v;\n}\n\n// Float\u2192[0,1) scalar hash: bit-reinterpret the lattice coordinate, pcg2d it, take the\n// high word back to [0,1). Integer-bit \u2014 no sin() periodicity, no float-fract lattice.\nfloat pcgHash2(vec2 p) {\n uvec2 u = floatBitsToUint(p);\n return float(pcg2d(u).x) * (1.0 / 4294967296.0);\n}\n\n// Integer-lattice gradient: pcg2d the integer cell, fold the hash to an angle, return\n// the unit gradient vector. The gradient basis (not a scalar value) is what makes the\n// noise zero at the nodes (no value-noise plateaus).\nvec2 pcgGrad2(ivec2 cell) {\n uvec2 h = pcg2d(uvec2(cell));\n float ang = float(h.x) * (1.0 / 4294967296.0) * 6.28318530717958647692;\n return vec2(cos(ang), sin(ang));\n}\n\n// 2D SIMPLEX gradient noise (Gustavson skew). The skew transform F2/G2 maps the square\n// lattice onto a simplex (triangular) grid \u2014 no axis-aligned directional bias. Each of\n// the three simplex corners contributes grad\u00B7offset shaped by a radial (0.5 - r\u00B2)\u2074\n// falloff. Output is ~[-1, 1]; callers remap to [0,1] via 0.5 + 0.5*gnoise.\nfloat gnoise(vec2 p) {\n const float F2 = 0.36602540378443864676; // (sqrt(3) - 1) / 2\n const float G2 = 0.21132486540518711775; // (3 - sqrt(3)) / 6\n float s = (p.x + p.y) * F2;\n vec2 i = floor(p + s);\n float tt = (i.x + i.y) * G2;\n vec2 x0 = p - (i - tt); // offset from the simplex origin corner\n ivec2 i1 = (x0.x > x0.y) ? ivec2(1, 0) : ivec2(0, 1);\n vec2 x1 = x0 - vec2(i1) + G2;\n vec2 x2 = x0 - 1.0 + 2.0 * G2;\n ivec2 ii = ivec2(i);\n float n = 0.0;\n float t0 = 0.5 - dot(x0, x0);\n if (t0 > 0.0) { t0 *= t0; n += t0 * t0 * dot(pcgGrad2(ii), x0); }\n float t1 = 0.5 - dot(x1, x1);\n if (t1 > 0.0) { t1 *= t1; n += t1 * t1 * dot(pcgGrad2(ii + i1), x1); }\n float t2 = 0.5 - dot(x2, x2);\n if (t2 > 0.0) { t2 *= t2; n += t2 * t2 * dot(pcgGrad2(ii + ivec2(1, 1)), x2); }\n return 70.0 * n; // normalize to ~[-1, 1]\n}";
|
|
6
|
-
export declare const OETF_WGSL = "\nfn srgbToLinearCh(c: f32) -> f32 {\n return select(pow((c + 0.055) / 1.055, 2.4), c / 12.92, c <= 0.04045);\n}\nfn srgbToLinear(c: vec3f) -> vec3f {\n return vec3f(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\nfn linearToSrgbCh(c: f32) -> f32 {\n return select(1.055 * pow(c, 1.0 / 2.4) - 0.055, c * 12.92, c <= 0.0031308);\n}\nfn linearToSrgb(c: vec3f) -> vec3f {\n return vec3f(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}";
|
|
7
|
-
export declare const FBM_ROT_WGSL = "const FBM_ROT: mat2x2f = mat2x2f(0.8, 0.6, -0.6, 0.8);";
|
|
8
|
-
export declare const OKLCH_MATRICES_WGSL = "\nconst LINEAR_SRGB_TO_LMS: mat3x3f = mat3x3f(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\nconst LMS_TO_OKLAB: mat3x3f = mat3x3f(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\nconst OKLAB_TO_LMS: mat3x3f = mat3x3f(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\nconst LMS_TO_LINEAR_SRGB: mat3x3f = mat3x3f(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\nfn srgbToOklab(c: vec3f) -> vec3f {\n let lin = srgbToLinear(c);\n let lms = LINEAR_SRGB_TO_LMS * lin;\n let lmsCbrt = sign(lms) * pow(abs(lms), vec3f(1.0 / 3.0));\n return LMS_TO_OKLAB * lmsCbrt;\n}\nfn oklabToLinearSrgb(lab: vec3f) -> vec3f {\n let lms_ = OKLAB_TO_LMS * lab;\n let lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\nfn oklabToOklch(lab: vec3f) -> vec3f {\n let C = length(lab.yz);\n var H = atan2(lab.z, lab.y);\n if (H < 0.0) { H = H + 2.0 * PI; }\n return vec3f(lab.x, C, H);\n}\nfn oklchToOklab(lch: vec3f) -> vec3f {\n return vec3f(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}";
|
|
9
|
-
export declare const PALETTE_RAMP_WGSL = "\nfn interpolateHueTurns(h0: f32, h1: f32, t: f32, method: i32) -> f32 {\n let TAU = 2.0 * PI;\n var a = h0 / TAU;\n var b = h1 / TAU;\n let i = b - a;\n if (method == 0) { // shorter\n if (i > 0.5) { a = a + 1.0; } else if (i < -0.5) { b = b + 1.0; }\n } else if (method == 1) { // longer\n if (i > 0.0 && i < 0.5) { a = a + 1.0; } else if (i > -0.5 && i <= 0.0) { b = b + 1.0; }\n } else if (method == 2) { // increasing\n if (i < 0.0) { b = b + 1.0; }\n } else { // decreasing\n if (i > 0.0) { a = a + 1.0; }\n }\n let r = fract(a + t * (b - a));\n return r * TAU;\n}\n\nfn mixPaletteOklab(linA: vec3f, linB: vec3f, t: f32) -> vec3f {\n let labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3f(1.0 / 3.0)));\n let labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3f(1.0 / 3.0)));\n let lab = mix(labA, labB, vec3f(t));\n return oklabToLinearSrgb(lab);\n}\n\nfn mixPaletteOklchArc(linA: vec3f, linB: vec3f, t: f32, method: i32) -> vec3f {\n let labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3f(1.0 / 3.0)));\n let labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3f(1.0 / 3.0)));\n let lchA = oklabToOklch(labA);\n let lchB = oklabToOklch(labB);\n let L = mix(lchA.x, lchB.x, t);\n let C = mix(lchA.y, lchB.y, t);\n let H = interpolateHueTurns(lchA.z, lchB.z, t, method);\n return oklabToLinearSrgb(oklchToOklab(vec3f(L, C, H)));\n}\n\nfn samplePaletteRamp(a: vec3f, b: vec3f, tRaw: f32, huePath: i32) -> vec3f {\n let t = smoothstep(0.0, 1.0, tRaw);\n if (huePath == 2 || huePath == 3) {\n return mixPaletteOklchArc(a, b, t, huePath);\n }\n return mixPaletteOklab(a, b, t);\n}";
|
|
10
|
-
export declare const PCG_HASH_WGSL = "\nfn pcg2d(v0: vec2u) -> vec2u {\n var v = v0 * 1664525u + vec2u(1013904223u);\n v.x = v.x + v.y * 1664525u;\n v.y = v.y + v.x * 1664525u;\n v = v ^ (v >> vec2u(16u));\n v.x = v.x + v.y * 1664525u;\n v.y = v.y + v.x * 1664525u;\n v = v ^ (v >> vec2u(16u));\n return v;\n}\n\nfn pcgHash2(p: vec2f) -> f32 {\n let u = bitcast<vec2u>(p);\n return f32(pcg2d(u).x) * (1.0 / 4294967296.0);\n}\n\nfn pcgGrad2(cell: vec2i) -> vec2f {\n let h = pcg2d(bitcast<vec2u>(cell));\n let ang = f32(h.x) * (1.0 / 4294967296.0) * 6.28318530717958647692;\n return vec2f(cos(ang), sin(ang));\n}\n\nfn gnoise(p: vec2f) -> f32 {\n let F2 = 0.36602540378443864676;\n let G2 = 0.21132486540518711775;\n let s = (p.x + p.y) * F2;\n let i = floor(p + vec2f(s));\n let tt = (i.x + i.y) * G2;\n let x0 = p - (i - vec2f(tt));\n var i1 = vec2i(0, 1);\n if (x0.x > x0.y) { i1 = vec2i(1, 0); }\n let x1 = x0 - vec2f(i1) + vec2f(G2);\n let x2 = x0 - vec2f(1.0) + vec2f(2.0 * G2);\n let ii = vec2i(i);\n var n = 0.0;\n var t0 = 0.5 - dot(x0, x0);\n if (t0 > 0.0) { t0 = t0 * t0; n = n + t0 * t0 * dot(pcgGrad2(ii), x0); }\n var t1 = 0.5 - dot(x1, x1);\n if (t1 > 0.0) { t1 = t1 * t1; n = n + t1 * t1 * dot(pcgGrad2(ii + i1), x1); }\n var t2 = 0.5 - dot(x2, x2);\n if (t2 > 0.0) { t2 = t2 * t2; n = n + t2 * t2 * dot(pcgGrad2(ii + vec2i(1, 1)), x2); }\n return 70.0 * n;\n}";
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type easeInQuad } from "@mkbabb/value.js";
|
|
2
|
+
import { type Easing, type TimingFunction } from "@mkbabb/keyframes.js";
|
|
3
|
+
/** A value.js easing callable `(t: number) => number` (the family's shape). */
|
|
4
|
+
export type CurveFn = typeof easeInQuad;
|
|
5
|
+
/** The kind of a `MOTION_CURVES` row — a spring `linear()` or a cubic-bezier. */
|
|
6
|
+
export type MotionCurveKind = "spring" | "bezier";
|
|
7
|
+
/**
|
|
8
|
+
* One row of the CSS↔JS curve table. CANONICAL rows carry their own JS twin;
|
|
9
|
+
* ALIAS rows resolve through a `canonical` target (no duplicated twin).
|
|
10
|
+
*/
|
|
11
|
+
export interface MotionCurve {
|
|
12
|
+
/** The CSS token name, including the leading `--`. */
|
|
13
|
+
readonly token: `--${string}`;
|
|
14
|
+
/** `spring` (a solved `linear()` token) or `bezier` (a cubic-bezier token). */
|
|
15
|
+
readonly kind: MotionCurveKind;
|
|
16
|
+
/**
|
|
17
|
+
* The JS twin — a callable `Easing` (springs, via `springTimingFunction`) or a
|
|
18
|
+
* `TimingFunction` (`(t) => number`, beziers via `CSSCubicBezier`). For ALIAS
|
|
19
|
+
* rows this is the canonical row's twin (resolve-through, not a copy).
|
|
20
|
+
*/
|
|
21
|
+
readonly js: Easing | TimingFunction;
|
|
22
|
+
/**
|
|
23
|
+
* For an ALIAS row: the canonical `--token` this resolves through. `undefined`
|
|
24
|
+
* on a canonical row.
|
|
25
|
+
*/
|
|
26
|
+
readonly canonical?: `--${string}`;
|
|
27
|
+
/** The register doc (springs lift it from the shared preset table). */
|
|
28
|
+
readonly note: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The CSS↔JS curve table, keyed by CSS token name. Covers EVERY `--ease-*` /
|
|
32
|
+
* `--spring-*` token declared in `tokens.css §2` + `theme.css` (CURVE-TABLE-BOUND
|
|
33
|
+
* gate §3.2). Spring rows carry a keyframes.js `Easing`; bezier rows a value.js
|
|
34
|
+
* `TimingFunction`; alias rows resolve through their `canonical` target.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* import { MOTION_CURVES } from "@mkbabb/glass-ui/motion";
|
|
38
|
+
* const easing = MOTION_CURVES["--spring-snappy"].js; // the iOS-control twin
|
|
39
|
+
* new NumericAnimation(frames, { timingFunction: easing });
|
|
40
|
+
*/
|
|
41
|
+
export declare const MOTION_CURVES: Readonly<Record<string, MotionCurve>>;
|
|
42
|
+
/** The canonical (non-alias) curve rows, in declaration order. */
|
|
43
|
+
export declare const MOTION_CURVES_CANONICAL: readonly MotionCurve[];
|
|
44
|
+
/** Look up a curve's JS twin by CSS token name (throws on an unknown token). */
|
|
45
|
+
export declare function motionCurve(token: string): MotionCurve;
|
|
46
|
+
export { linear, easeInQuad, easeOutQuad, easeInOutQuad, easeInCubic, easeOutCubic, easeInOutCubic, easeInSine, easeOutSine, easeInOutSine, easeInCirc, easeOutCirc, easeInOutCirc, easeInExpo, easeOutExpo, easeInOutExpo, easeInBounce, CSSCubicBezier, } from "@mkbabb/value.js";
|
|
47
|
+
export { SPRING_PRESETS, springPreset } from "./springPresets";
|
|
48
|
+
export type { SpringPresetRow, SpringPresetName } from "./springPresets";
|
|
@@ -6,3 +6,5 @@ export * from "./useNumericTransition";
|
|
|
6
6
|
export * from "./useAnimatedNumber";
|
|
7
7
|
export * from "./useAnimatedNumberMap";
|
|
8
8
|
export * from "./useCountup";
|
|
9
|
+
export * from "./suite";
|
|
10
|
+
export { SPRING_PRESETS, springPreset, type SpringPresetRow, type SpringPresetName, } from "./springPresets";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** A glass-ui named-spring preset name. */
|
|
2
|
+
export type SpringPresetName = "smooth" | "snappy" | "bouncy" | "gentle" | "dock";
|
|
3
|
+
/** One named-spring row: the analytic (response, dampingFraction) pair + its register doc. */
|
|
4
|
+
export interface SpringPresetRow {
|
|
5
|
+
/** The token suffix — `--spring-<name>` (CSS) and the `MOTION_CURVES` key. */
|
|
6
|
+
readonly name: SpringPresetName;
|
|
7
|
+
/** Response time in seconds (the spring's `response` solver input). */
|
|
8
|
+
readonly response: number;
|
|
9
|
+
/** Damping fraction ζ (1 = critical; <1 overshoots). */
|
|
10
|
+
readonly dampingFraction: number;
|
|
11
|
+
/** The register this curve serves (the doc-table derives from this one string). */
|
|
12
|
+
readonly comment: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* iOS-canonical (response, dampingFraction) pairs per AL-X4 §3. The names match
|
|
16
|
+
* the `--spring-*` CSS tokens AND the speedtest CSS consumers that read
|
|
17
|
+
* `var(--spring-smooth)` etc. directly, so they MUST stay stable across retunes —
|
|
18
|
+
* only the `(response, ζ)` pair and the emitted curves change.
|
|
19
|
+
*
|
|
20
|
+
* GOVERNED iOS-SPRING VOCABULARY (AX.W05) — the SINGLE source of the register
|
|
21
|
+
* vocabulary. Each row's `comment` names the surface-class that rides it:
|
|
22
|
+
*
|
|
23
|
+
* SETTLE → smooth — patient entrances, fades, scale-ins (no overshoot read).
|
|
24
|
+
* CONTROL → snappy — crisp position morphs: tab underline glide, progress fill,
|
|
25
|
+
* the continuous-marker pop, the generic crisp settle.
|
|
26
|
+
* PLAYFUL → bouncy — deliberate emphatic one-shots ONLY: the bouncy toggle press,
|
|
27
|
+
* dialog/success entrances, the VT default. Largest overshoot.
|
|
28
|
+
* GENTLE → gentle — critically-damped slow settles (the patient end of the ladder).
|
|
29
|
+
* DOCK → dock — the dock expand/collapse morph AND everything inside it.
|
|
30
|
+
*/
|
|
31
|
+
export declare const SPRING_PRESETS: readonly SpringPresetRow[];
|
|
32
|
+
/** Lookup one preset row by name (used by `MOTION_CURVES` spring rows). */
|
|
33
|
+
export declare function springPreset(name: SpringPresetName): SpringPresetRow;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { NumericAnimation, SpringProgress, SmoothProgress, Sequence, Timeline, ManualTimeline, RAFPlayback, ScrollTimeline, createNativeTimeline, flip, flipShared, ElementMorph, drag, Draggable, decay, decayRest, stagger, springTimingFunction, springLinearStops, toEasing, resolveEasing, AnimationOptionError, UnknownEasingError, loadAnimationEngine, } from "@mkbabb/keyframes.js";
|
|
2
|
+
export type { Easing, TimingFunction, TimingFunctionNames, SpringProgressOptions, SpringFrameCallback, SpringSubscriber, SpringLinearStopsOptions, SpringTimingFunctionOptions, SmoothProgressOptions, NumericAnimationOptions, NumericFrameCallback, SequenceEntry, SequenceOptions, SequencePosition, TimelineOptions, NativeTimelineSpec, RAFPlaybackOptions, Tickable, FlipOptions, ElementMorphOptions, MorphRect, DragOptions, DragAxis, DragSubscriber, DecayOptions, DecaySample, StaggerFn, StaggerOptions, StaggerOrigin, AnimationEngine, AnimationOptions, AnimationFrame, AnimateOptions, InputAnimationOptions, ResolvedKeyframes, Vars, } from "@mkbabb/keyframes.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Ref } from "vue";
|
|
2
2
|
import { type SpringRef } from "./useSpring";
|
|
3
|
-
/** Named iOS spring presets (
|
|
3
|
+
/** Named iOS spring presets the mount register exposes (the dock register is not a mount enter). */
|
|
4
4
|
export type SpringPreset = "smooth" | "snappy" | "bouncy" | "gentle";
|
|
5
5
|
export interface UseSpringMountOptions {
|
|
6
6
|
/**
|
package/dist/configurator.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./useConfiguratorState-
|
|
1
|
+
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./useConfiguratorState-BdQXh9ie.js";
|
|
2
2
|
export { e as CONFIGURATOR_DENSITY_KEY, t as Configurator, i as ConfiguratorLayer, n as ConfiguratorRow, r as provideConfiguratorDensity, o as useConfiguratorState, a as useOptionalConfiguratorDensity };
|