@mkbabb/glass-ui 3.5.1 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CardAction-D8nSE62a.js +163 -0
- package/dist/CollapsibleContent-D7UNsXQr.js +63 -0
- package/dist/{CommandShortcut-BiVyqipe.js → CommandShortcut-CY0aQTz5.js} +4 -4
- package/dist/{ContextMenuContent-De01_83g.js → ContextMenuContent-DGKZX1Du.js} +1 -1
- package/dist/{ContextMenuSubContent-DrWkXKQP.js → ContextMenuSubContent-BeDz7G6f.js} +4 -4
- package/dist/{DataTable-DyKc_26a.js → DataTable-gtPOLZvl.js} +14 -7
- package/dist/{DialogContent-IQ8_BRrC.js → DialogContent-DG1YMR-P.js} +24 -24
- package/dist/{DialogFooter-Er0wA3K6.js → DialogFooter-BCIaDP15.js} +2 -2
- package/dist/{DiscoGlyph-BaZ8OawK.js → DiscoGlyph-ZoBYpoxI.js} +1 -1
- package/dist/{GlyphFace-B_7vOmYn.js → GlyphFace-Ce_oe3tM.js} +1 -1
- package/dist/{HoverCardContent-ICfIMZX1.js → HoverCardContent-Bn0UBMY9.js} +1 -1
- package/dist/{HoverPopover-DTSYkJtw.js → HoverPopover-DXpOEw1P.js} +1 -1
- package/dist/{IconTooltip-BTyYn4mr.js → IconTooltip-Cu86JR4e.js} +1 -1
- package/dist/{Input-CU9CNKmo.js → Input-DWQQIOC4.js} +4 -1
- package/dist/{Label-CZk-3nTc.js → Label-DBc7bKzZ.js} +1 -1
- package/dist/{MetricBadge-BlrdbOGN.js → MetricBadge-D-bRaQUD.js} +1 -1
- package/dist/{Notification-DP_ApJLo.js → Notification-B5WHP3_1.js} +5 -4
- package/dist/{NumberFieldContent-jO-zGOHf.js → NumberFieldContent-CLNVR1iY.js} +5 -5
- package/dist/{PopoverContent-B8WtJECb.js → PopoverContent-F1bWnYoh.js} +2 -2
- package/dist/{Progress-DjM86vfb.js → Progress-c4vo4ALi.js} +6 -6
- package/dist/{ScrollingText-P9o_DuMn.js → ScrollingText-BEp377U5.js} +2 -2
- package/dist/{SelectScrollDownButton-BGn3rjs9.js → SelectScrollDownButton-DAo5NmY_.js} +8 -7
- package/dist/{Separator-C2XtAXRp.js → Separator-DZyqsCum.js} +1 -1
- package/dist/{Switch-x8n6husW.js → Switch-2rsAtDfA.js} +8 -2
- package/dist/TabsList-COqIdW7i.js +101 -0
- package/dist/{Toaster-DdhMKfus.js → Toaster-BMaeziJJ.js} +54 -60
- package/dist/{ToggleGroupItem-gyXj998A.js → ToggleGroupItem-C-AIkBUw.js} +13 -5
- package/dist/{TooltipProvider-D-JrSqDu.js → TooltipProvider-CD2IXfRv.js} +1 -1
- package/dist/{UnderlineTabs-Cq_AD03t.js → UnderlineTabs-D_c1iYo-.js} +1 -1
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +2 -1
- package/dist/api.js +1 -1
- package/dist/aurora.js +845 -204
- package/dist/{badge-Cl6JZ1B7.js → badge-DHQrc_GQ.js} +13 -9
- package/dist/badge.js +1 -1
- package/dist/{button-i8Ek5vvg.js → button-CAywcrhO.js} +8 -5
- package/dist/button.js +1 -1
- package/dist/card.js +2 -2
- package/dist/carousel.js +5 -5
- package/dist/{check-CdkxGxXJ.js → check-BBKKKSTf.js} +1 -1
- package/dist/{chevron-down-pBY8sYfV.js → chevron-down-BSkTP2aL.js} +1 -1
- package/dist/{chevron-right-BjeKC22V.js → chevron-right-sDM0Yvrf.js} +1 -1
- package/dist/{chevron-up-DBeNHUm1.js → chevron-up-CCOD_FTz.js} +1 -1
- package/dist/collapsible.js +1 -1
- package/dist/color-DjJCAQ6f.js +76 -0
- package/dist/color.js +2 -2
- package/dist/command.js +1 -1
- package/dist/compile-iM4IUB66.js +158 -0
- package/dist/components/custom/aurora/Aurora.vue.d.ts +1 -0
- package/dist/components/custom/aurora/composables/atoms.d.ts +60 -0
- package/dist/components/custom/aurora/composables/color.d.ts +36 -9
- package/dist/components/custom/aurora/composables/cursorModel.d.ts +35 -2
- package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
- package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +16 -0
- package/dist/components/custom/aurora/composables/runtime.d.ts +18 -0
- package/dist/components/custom/aurora/composables/uniformBridge.d.ts +29 -0
- package/dist/components/custom/aurora/composables/useAurora.d.ts +6 -0
- package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +8 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +64 -2
- package/dist/components/custom/aurora/constants/renderMode.d.ts +10 -0
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +7 -0
- package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/composition.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/flow.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/painterly.wgsl.d.ts +7 -0
- package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +4 -0
- package/dist/components/custom/aurora/index.d.ts +5 -3
- package/dist/components/custom/constellation/Constellation.vue.d.ts +45 -0
- package/dist/components/custom/constellation/constellationField.d.ts +85 -0
- package/dist/components/custom/constellation/index.d.ts +3 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +34 -3
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +38 -0
- package/dist/components/custom/fourier-field/index.d.ts +2 -0
- package/dist/components/custom/fourier-field/math.d.ts +57 -0
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +2 -0
- package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +14 -2
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +45 -4
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +1 -1
- package/dist/components/custom/goo-blob/index.d.ts +1 -1
- package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -1
- package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -2
- package/dist/components/custom/goo-blob/types.d.ts +40 -0
- package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +1 -1
- package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
- package/dist/components/ui/_shared/ModalOverlay.vue.d.ts +1 -1
- package/dist/components/ui/alert/index.d.ts +1 -1
- package/dist/components/ui/card/Card.vue.d.ts +10 -3
- package/dist/components/ui/card/CardAction.vue.d.ts +24 -0
- package/dist/components/ui/card/index.d.ts +1 -0
- package/dist/components/ui/collapsible/CollapsibleTrigger.vue.d.ts +5 -1
- package/dist/components/ui/tabs/TabsList.vue.d.ts +13 -3
- package/dist/components/ui/toast/Toast.vue.d.ts +5 -5
- package/dist/components/ui/toast/use-toast.d.ts +1 -1
- package/dist/composables/color/index.d.ts +50 -0
- package/dist/composables/glass/canvas2d/index.d.ts +2 -0
- package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +48 -0
- package/dist/composables/glass/createGPUCanvas.d.ts +40 -0
- package/dist/composables/glass/index.d.ts +2 -0
- package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +45 -0
- package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +3 -0
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +4 -4
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +3 -3
- package/dist/constellation.d.ts +1 -0
- package/dist/constellation.js +182 -0
- package/dist/context-menu.js +2 -2
- package/dist/controls.js +2 -2
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +2 -2
- package/dist/disco-glyph.js +1 -1
- package/dist/dock.js +129 -110
- package/dist/{dockContext-spUj_-E5.js → dockContext-DLgrVWsU.js} +1 -1
- package/dist/dom.js +5 -5
- package/dist/{dropdown-menu-EFjl5iKo.js → dropdown-menu-BWpwutt0.js} +5 -5
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +2 -2
- package/dist/forms.js +10 -7
- package/dist/fourier-field.d.ts +1 -0
- package/dist/fourier-field.js +166 -0
- package/dist/glass-carousel.js +1 -1
- package/dist/glass-panel.js +2 -2
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +207 -191
- package/dist/glyph-face.js +2 -2
- package/dist/goo-blob.js +336 -234
- package/dist/header-ribbon.js +1 -1
- package/dist/hover-card.js +1 -1
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/instrument-chassis.js +1 -1
- package/dist/instrument-rail.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/{keys-BFoma9vm.js → keys-Dyf_uTs5.js} +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +6 -6
- package/dist/metric-badge.js +1 -1
- package/dist/metric-stack.js +1 -1
- package/dist/{minimize-2-BP27-qBY.js → minimize-2-lcXOuc6V.js} +1 -1
- package/dist/motion-core.js +76 -106
- package/dist/motion.js +3 -3
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/paper-backdrop.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 +2 -2
- package/dist/responsive-tabs.js +2 -2
- package/dist/scrolling-text.js +1 -1
- package/dist/{search-DBG8qaRs.js → search-nbkvr2dC.js} +1 -1
- package/dist/search.js +8 -8
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/{sheet-CQYYrkr9.js → sheet-Cv1uO-Gq.js} +4 -4
- package/dist/sheet.js +1 -1
- package/dist/{slider-CgNzRSh6.js → slider-BA9wIs5e.js} +5 -4
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock.css +185 -1
- package/dist/styles/glass-refract.css +60 -0
- package/dist/styles/glass-specular-track.css +43 -130
- package/dist/styles/glass.css +243 -27
- package/dist/styles/index.css +1 -0
- package/dist/styles/theme.css +55 -0
- package/dist/styles/tokens.css +33 -0
- package/dist/styles/typography.css +3 -3
- package/dist/styles/utilities.css +17 -13
- package/dist/supportsCssTimeline-C5oe0lnD.js +12 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +4 -4
- package/dist/timeline.js +2 -2
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{useAnimatedNumber-BF6r64lA.js → useAnimatedNumber-C5I3wWd8.js} +1 -1
- package/dist/useCanvas2D-C31yfUGY.js +95 -0
- package/dist/{useConfiguratorState-DUtC1jxr.js → useConfiguratorState-B24TcgIn.js} +5 -5
- package/dist/useScrollProgress-CAH8Ofwt.js +35 -0
- package/dist/{useTouchGate-CS5Csc2h.js → useTouchGate-YQRwyUGU.js} +1 -1
- package/dist/{vReveal-u2wSG2El.js → vReveal-BE2TsPoR.js} +6 -17
- package/dist/watercolor-dot.js +2 -2
- package/dist/{x-C4pz9nbD.js → x-Dfsegz9Y.js} +1 -1
- package/package.json +49 -1
- package/src/styles/dock.css +185 -1
- package/src/styles/glass-refract.css +60 -0
- package/src/styles/glass-specular-track.css +43 -130
- package/src/styles/glass.css +243 -27
- package/src/styles/index.css +1 -0
- package/src/styles/theme.css +55 -0
- package/src/styles/tokens.css +33 -0
- package/src/styles/typography.css +3 -3
- package/src/styles/utilities.css +17 -13
- package/dist/CardFooter-C390imy7.js +0 -129
- package/dist/CollapsibleContent-cauTbZEM.js +0 -52
- package/dist/TabsIndicator-DA0x9gPr.js +0 -97
- package/dist/color-rkK4RMx2.js +0 -33
- package/dist/compile-DVgAxagk.js +0 -106
- /package/dist/{InstrumentChassis-DaHIZCqy.js → InstrumentChassis-BLJBl1BW.js} +0 -0
- /package/dist/{InstrumentRail-B0qqLFN0.js → InstrumentRail-BElFwKyt.js} +0 -0
- /package/dist/{ModalOverlay-B_CBtqcE.js → ModalOverlay-D1VrWyoi.js} +0 -0
- /package/dist/{PaperBackdrop-D_YZW47j.js → PaperBackdrop-DCGoGatv.js} +0 -0
- /package/dist/{SelectGroup-CMdoCjRE.js → SelectGroup-BcaFjvP4.js} +0 -0
- /package/dist/{SelectSeparator-CaJnPF3_.js → SelectSeparator-COFMJGng.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
- /package/dist/{constants-DsCdlK9I.js → constants-CS75AWHG.js} +0 -0
- /package/dist/{createContext-DBMGRlx4.js → createContext-CvNyBk4o.js} +0 -0
- /package/dist/{createLucideIcon-DuDoe_ra.js → createLucideIcon-B6uNAU9G.js} +0 -0
- /package/dist/{menuItemVariants-C2QlXqT3.js → menuItemVariants-B4eFR5Ix.js} +0 -0
- /package/dist/{presets-1OhFpaIC.js → presets-BKVyQfbt.js} +0 -0
- /package/dist/{prng-Bz_1Tydc.js → prng-wHuHlNHE.js} +0 -0
- /package/dist/{useGlassRenderer-Dn3WpfG-.js → useGlassRenderer-HebgSEgN.js} +0 -0
- /package/dist/{useGlobalDark-CWiaCoEw.js → useGlobalDark-yhL4Wp-s.js} +0 -0
- /package/dist/{useIntersectionPause-DAdVPVp4.js → useIntersectionPause-Cc-H9ees.js} +0 -0
- /package/dist/{useInterval-CHVYFpXV.js → useInterval-D3USn0yc.js} +0 -0
- /package/dist/{useKeyboardShortcuts-BQfnAHHW.js → useKeyboardShortcuts-Be3w_Rwk.js} +0 -0
- /package/dist/{useResizeObserver-DX-STszm.js → useResizeObserver-CSyxGxIX.js} +0 -0
- /package/dist/{useSortable-DnyGXKKY.js → useSortable-C8ReQ50P.js} +0 -0
- /package/dist/{useSpringMount-CnizvZGm.js → useSpringMount-LRZqJTaF.js} +0 -0
- /package/dist/{useTextHighlight-Dmtofpk2.js → useTextHighlight-aMPdEpkq.js} +0 -0
- /package/dist/{useTimer-DGgoxTXL.js → useTimer-DEJonOZa.js} +0 -0
- /package/dist/{useUserInvalidAria-DmvZ_6Dx.js → useUserInvalidAria-CQKjEfwP.js} +0 -0
- /package/dist/{useViewTransition-CJnqg6wl.js → useViewTransition-DaN5Zrox.js} +0 -0
- /package/dist/{useViewportReady-Dcvf0c4p.js → useViewportReady-K96m-Mdv.js} +0 -0
|
@@ -28,8 +28,38 @@ type __VLS_Props = {
|
|
|
28
28
|
* chassis vocabulary. AJ-W1-δ / G-AJ-D7.
|
|
29
29
|
*/
|
|
30
30
|
variant?: "dock" | "rail" | "instrument-strip";
|
|
31
|
-
/**
|
|
32
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Corner treatment.
|
|
33
|
+
* `"pill"` — the stadium silhouette (default).
|
|
34
|
+
* `"rounded"` — a finite rounded radius (`--radius-xl`).
|
|
35
|
+
* `"card"` — the AW.W3b big-dock card shell: a finite concentric
|
|
36
|
+
* radius (`--dock-card-radius`, default `--radius-3xl`)
|
|
37
|
+
* ABOVE 2xl, below pill — does NOT collapse to a stadium.
|
|
38
|
+
* Collapsed it returns to a pill; the pill↔card swap
|
|
39
|
+
* morphs on the `--dock-motion-resize` spring. A `@supports
|
|
40
|
+
* (corner-shape: squircle)` enhancement reads better at the
|
|
41
|
+
* large radius (the border-radius arc is the contract).
|
|
42
|
+
*
|
|
43
|
+
* `"pill"`/`"rounded"` previously bound ONLY under the vertical rail
|
|
44
|
+
* variant — on a horizontal dock the prop silently no-op'd. AW.W3b adds
|
|
45
|
+
* the horizontal-root shape rules (closing that documented-but-dead prop),
|
|
46
|
+
* so `shape` now paints on a horizontal dock too.
|
|
47
|
+
*/
|
|
48
|
+
shape?: "pill" | "rounded" | "card";
|
|
49
|
+
/**
|
|
50
|
+
* In-cap arrangement. `"linear"` (default) lays the active layer out as a
|
|
51
|
+
* linear row/column. `"grid"` makes the active layer a self-wrapping tile
|
|
52
|
+
* grid (Launchpad/Stage-Manager track symmetry — `auto-fill` columns of
|
|
53
|
+
* `--dock-tile-min`). ORTHOGONAL to `overflow` (the OVER-cap strategy):
|
|
54
|
+
* `layout` is the IN-cap arrangement.
|
|
55
|
+
*
|
|
56
|
+
* Hard contract: a `layout="grid"` dock is `alwaysExpanded` (a 2D panel
|
|
57
|
+
* does not read as a collapsible pill, and no width morph means no
|
|
58
|
+
* per-frame grid reflow). The canonical pairing is
|
|
59
|
+
* `shape="card" layout="grid"` (the props stay independent — no
|
|
60
|
+
* auto-implication of `shape`).
|
|
61
|
+
*/
|
|
62
|
+
layout?: "linear" | "grid";
|
|
33
63
|
/**
|
|
34
64
|
* Layout axis of the dock. `"horizontal"` (default) lays items out
|
|
35
65
|
* left-to-right and animates `width`; `"vertical"` lays items out
|
|
@@ -101,7 +131,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
|
101
131
|
orientation: "horizontal" | "vertical";
|
|
102
132
|
variant: "dock" | "rail" | "instrument-strip";
|
|
103
133
|
density: DockDensity;
|
|
104
|
-
shape: "pill" | "rounded";
|
|
134
|
+
shape: "pill" | "rounded" | "card";
|
|
135
|
+
layout: "linear" | "grid";
|
|
105
136
|
collapseDelay: number;
|
|
106
137
|
alwaysExpanded: boolean;
|
|
107
138
|
startCollapsed: boolean;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type ColorResolver } from "../../../composables/color";
|
|
2
|
+
/**
|
|
3
|
+
* FourierField — a Fourier epicycle field on a Canvas2D surface, a sibling
|
|
4
|
+
* primitive to Aurora and GooBlob. A seeded elliptic spectrum reconstructs a
|
|
5
|
+
* slow, never-ending closed curve via the inverse DFT; a fading comet trail
|
|
6
|
+
* chases the curve's head, and (in the `hero` preset) the nested epicycle
|
|
7
|
+
* circles and arms draw underneath in a harmonious second hue. It composes the
|
|
8
|
+
* `useCanvas2D` substrate, so it inherits the offscreen / tab-hidden /
|
|
9
|
+
* reduced-motion freeze for free — no hand-rolled RAF-park.
|
|
10
|
+
*
|
|
11
|
+
* Color resolves through the same INJECTED `colorResolver` seam as GooBlob: the
|
|
12
|
+
* field paints the gamma-sRGB triple it returns. The prop is REQUIRED — pass
|
|
13
|
+
* `defaultBlobColorResolver` from `@mkbabb/glass-ui/color` so a `var()` /
|
|
14
|
+
* `light-dark()` token, an `oklch()` / `hsl()` / hex string all resolve. A
|
|
15
|
+
* `var()` token is first resolved to a concrete `rgb()` against the host's
|
|
16
|
+
* inherited color-scheme, then re-resolved on a color change AND on a dark-mode
|
|
17
|
+
* toggle so the field retints with the theme.
|
|
18
|
+
*
|
|
19
|
+
* `variant` is the configuration BUNDLE, not a recolour of one curve: `hero`
|
|
20
|
+
* draws a few big phasors with the epicycles ON and a warm trail feel; `final`
|
|
21
|
+
* draws a denser elliptic spectrum with the epicycles OFF. One engine, two
|
|
22
|
+
* presets. The hue itself always comes from the consumer's `color`.
|
|
23
|
+
*/
|
|
24
|
+
type __VLS_Props = {
|
|
25
|
+
/** Configuration bundle. `hero` = epicycles on, fewer harmonics; `final` = epicycles off, denser. Default `hero`. */
|
|
26
|
+
variant?: "hero" | "final";
|
|
27
|
+
/** Base CSS color (any form the resolver understands; a `var()`/`light-dark()` token resolves against the host). */
|
|
28
|
+
color: string;
|
|
29
|
+
/** REQUIRED color seam — resolves a concrete color to a gamma-sRGB [r,g,b] triple in [0,1]. */
|
|
30
|
+
colorResolver: ColorResolver;
|
|
31
|
+
/** Extra seed mixed into the spectrum PRNG for a unique-but-reproducible curve. Default "". */
|
|
32
|
+
seed?: string;
|
|
33
|
+
/** When true, paint ONE static deterministic best-frame and never animate (the capture/export lever). Default false. */
|
|
34
|
+
freeze?: boolean;
|
|
35
|
+
};
|
|
36
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
37
|
+
declare const _default: typeof __VLS_export;
|
|
38
|
+
export default _default;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One Fourier phasor. `index` is the integer frequency (a counter-rotating pair
|
|
3
|
+
* is `+1` and `-1`); `coefficient` is the complex coefficient `[re, im]`;
|
|
4
|
+
* `amplitude`/`phase` are its polar form (carried for callers that prefer the
|
|
5
|
+
* polar read — the reconstruction uses the rectangular `coefficient`).
|
|
6
|
+
*/
|
|
7
|
+
export interface BasisComponent {
|
|
8
|
+
index: number;
|
|
9
|
+
coefficient: [number, number];
|
|
10
|
+
amplitude: number;
|
|
11
|
+
phase: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build a {@link BasisComponent} from a frequency index and its rectangular
|
|
15
|
+
* coefficient `(re, im)`, deriving the polar `amplitude`/`phase`.
|
|
16
|
+
*/
|
|
17
|
+
export declare function comp(index: number, re: number, im: number): BasisComponent;
|
|
18
|
+
/**
|
|
19
|
+
* Sum `c_k * exp(2*pi*i*k*t)` — the curve point at parameter `t`. `maxTerms`
|
|
20
|
+
* truncates the series (the partial-sum read). Returns the complex value as
|
|
21
|
+
* `[re, im]` (the curve's `[x, y]` before view-fit).
|
|
22
|
+
*/
|
|
23
|
+
export declare function evalFourier(components: BasisComponent[], t: number, maxTerms?: number): [number, number];
|
|
24
|
+
/**
|
|
25
|
+
* The epicycle chain at parameter `t`: the running tip of each phasor stacked on
|
|
26
|
+
* the last, starting at the origin. `positions[0]` is `[0, 0]`; the final entry
|
|
27
|
+
* is the curve point ({@link evalFourier} at the same `t`). `maxCircles`
|
|
28
|
+
* truncates the chain (draw fewer arms than the spectrum carries).
|
|
29
|
+
*/
|
|
30
|
+
export declare function positionsAt(components: BasisComponent[], t: number, maxCircles?: number): [number, number][];
|
|
31
|
+
/** Tuning for {@link makeEllipticSpectrum}. */
|
|
32
|
+
export interface EllipticSpectrumOptions {
|
|
33
|
+
/**
|
|
34
|
+
* How many smaller higher-order harmonics to layer on top of the dominant
|
|
35
|
+
* counter-rotating pair (the dominant pair is always present). Default 4.
|
|
36
|
+
* The `final` preset passes a larger count for a denser, busier curve.
|
|
37
|
+
*/
|
|
38
|
+
harmonics?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Peak magnitude of the higher-order harmonics relative to the dominant
|
|
41
|
+
* phasor. Smaller keeps the curve a clean, smooth ellipse with a little
|
|
42
|
+
* character; larger crinkles it. Default ~0.22.
|
|
43
|
+
*/
|
|
44
|
+
harmonicScale?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Emit a procedural elliptic spectrum: a DOMINANT counter-rotating pair (index
|
|
48
|
+
* `+1` and `-1`) of UNEQUAL magnitude — the inequality is what draws a tilted
|
|
49
|
+
* ellipse rather than a circle — plus a few smaller higher-order harmonics with
|
|
50
|
+
* random small magnitudes and phases for character. Lower orders carry more
|
|
51
|
+
* weight (a `1 / order` falloff), so the curve stays large, smooth and
|
|
52
|
+
* few-big-phasor; the `harmonics` knob lifts it to the denser `final` look.
|
|
53
|
+
*
|
|
54
|
+
* Deterministic in `rng`: the same seeded `() => number` yields the same
|
|
55
|
+
* spectrum, so a frozen frame reproduces exactly.
|
|
56
|
+
*/
|
|
57
|
+
export declare function makeEllipticSpectrum(rng: () => number, opts?: EllipticSpectrumOptions): BasisComponent[];
|
|
@@ -35,9 +35,11 @@ type __VLS_Props = {
|
|
|
35
35
|
};
|
|
36
36
|
declare function nudge(): void;
|
|
37
37
|
declare function setMood(m: BlobMood): void;
|
|
38
|
+
declare function pulse(): void;
|
|
38
39
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
39
40
|
nudge: typeof nudge;
|
|
40
41
|
setMood: typeof setMood;
|
|
42
|
+
pulse: typeof pulse;
|
|
41
43
|
currentMood: Readonly<import("vue").Ref<BlobMood, BlobMood>>;
|
|
42
44
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
43
45
|
click: () => any;
|
|
@@ -1,14 +1,26 @@
|
|
|
1
1
|
import { type Ref } from "vue";
|
|
2
2
|
import type { BlobMood, MoodParams } from "../types";
|
|
3
|
+
/** The interaction signals `update` reads to drive the auto-mood arc. */
|
|
4
|
+
export interface MoodInteraction {
|
|
5
|
+
/** The pointer is over the blob (drives `curious`). */
|
|
6
|
+
pointerActive: boolean;
|
|
7
|
+
/** A click landed this frame (drives a one-shot `excited`). */
|
|
8
|
+
clicked: boolean;
|
|
9
|
+
/** ms since the last pointer activity (drives `sleepy` past IDLE_SLEEP_MS). */
|
|
10
|
+
idleMs: number;
|
|
11
|
+
}
|
|
3
12
|
/**
|
|
4
13
|
* Animates the blob's mood parameters — a cross-fade between named mood targets
|
|
5
|
-
* driven per frame by `tick(dt)`. `setMood` retargets; `
|
|
6
|
-
*
|
|
14
|
+
* driven per frame by `tick(dt)`. `setMood` retargets; `update(interaction)` wires
|
|
15
|
+
* `setMood` internally from the AW.W10 pointer/idle state (curious on approach,
|
|
16
|
+
* excited on click, sleepy after inactivity); `params` is the eased current value
|
|
17
|
+
* the renderer reads.
|
|
7
18
|
*/
|
|
8
19
|
export declare function useBlobMood(): {
|
|
9
20
|
currentMood: Readonly<Ref<BlobMood>>;
|
|
10
21
|
params: Readonly<Ref<MoodParams>>;
|
|
11
22
|
setMood: (mood: BlobMood) => void;
|
|
23
|
+
update: (interaction: MoodInteraction) => void;
|
|
12
24
|
tick: (dt: number) => void;
|
|
13
25
|
};
|
|
14
26
|
export type BlobMoodSystem = ReturnType<typeof useBlobMood>;
|
|
@@ -1,8 +1,31 @@
|
|
|
1
1
|
import { type Ref } from "vue";
|
|
2
|
+
/** Compile-time trail length — mirrors `TRAIL_N` in metaball.frag.ts. */
|
|
3
|
+
export declare const TRAIL_N = 15;
|
|
4
|
+
/** A single trail sample — a decaying-radius metaball source the shader smin-merges. */
|
|
5
|
+
export interface TrailSample {
|
|
6
|
+
x: number;
|
|
7
|
+
y: number;
|
|
8
|
+
radius: number;
|
|
9
|
+
}
|
|
2
10
|
/**
|
|
3
|
-
* Tracks the pointer over a host
|
|
4
|
-
* element
|
|
5
|
-
*
|
|
11
|
+
* The blob pointer/interaction machine (W10). Tracks the pointer over a host
|
|
12
|
+
* element (normalised to [-1, 1] about the element centre) and resolves it with a
|
|
13
|
+
* FRAME-RATE-INDEPENDENT critically-damped spring fed the renderer's per-frame
|
|
14
|
+
* `dtMs` (NOT a fixed-α lerp — the prior `SMOOTH_FACTOR = 0.12` was framerate
|
|
15
|
+
* dependent). The spring is `@mkbabb/keyframes.js` `SpringProgress` driven through
|
|
16
|
+
* its `tick(dt)` seam by the SUBSTRATE's single rAF — it does NOT call
|
|
17
|
+
* `SpringProgress.play()` (that would start a parallel rAF, the
|
|
18
|
+
* single-substrate-loop violation `proof:blob-interaction-prm` forbids).
|
|
19
|
+
*
|
|
20
|
+
* Exposes the smoothed `pointer` position AND its `velocity` (the spring's own
|
|
21
|
+
* per-frame velocity, units/s in normalized space), plus a decaying-radius `trail`
|
|
22
|
+
* buffer (the elastic pseudopod reaching toward the cursor and snapping back).
|
|
23
|
+
*
|
|
24
|
+
* Under `prefers-reduced-motion` the substrate freezes the rAF, so `tick` is not
|
|
25
|
+
* called and every axis holds its rest value — there is NO parallel matchMedia
|
|
26
|
+
* here (the substrate owns PRM). The deterministic rest pose: the spring at the
|
|
27
|
+
* pointer target (or centre when inactive), zero velocity, the trail collapsed
|
|
28
|
+
* onto the body.
|
|
6
29
|
*/
|
|
7
30
|
export declare function useBlobPointer(el: Ref<HTMLElement | null>): {
|
|
8
31
|
pointer: Readonly<Ref<{
|
|
@@ -12,7 +35,25 @@ export declare function useBlobPointer(el: Ref<HTMLElement | null>): {
|
|
|
12
35
|
readonly x: number;
|
|
13
36
|
readonly y: number;
|
|
14
37
|
}>>;
|
|
38
|
+
velocity: Readonly<Ref<{
|
|
39
|
+
readonly x: number;
|
|
40
|
+
readonly y: number;
|
|
41
|
+
}, {
|
|
42
|
+
readonly x: number;
|
|
43
|
+
readonly y: number;
|
|
44
|
+
}>>;
|
|
15
45
|
active: Readonly<Ref<boolean, boolean>>;
|
|
16
|
-
|
|
46
|
+
/** The live click-impulse pulse value (folds into uPulseAmp). */
|
|
47
|
+
pulse: Readonly<Ref<number, number>>;
|
|
48
|
+
/** ms since the last pointer activity (W11.c mood idle drift). */
|
|
49
|
+
idleMs: () => number;
|
|
50
|
+
tick: (dtMs?: number) => void;
|
|
51
|
+
trailSources: (baseRadius: number) => {
|
|
52
|
+
sources: TrailSample[];
|
|
53
|
+
count: number;
|
|
54
|
+
};
|
|
55
|
+
click: (amp: number) => void;
|
|
56
|
+
consumeClick: () => boolean;
|
|
57
|
+
rest: () => void;
|
|
17
58
|
};
|
|
18
59
|
export type BlobPointer = ReturnType<typeof useBlobPointer>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Ref } from "vue";
|
|
2
2
|
import type { ColorResolver } from "../../../../composables/color";
|
|
3
|
-
import type
|
|
3
|
+
import { type BlobConfig } from "../types";
|
|
4
4
|
import type { BlobMoodSystem } from "./useBlobMood";
|
|
5
5
|
import type { BlobPointer } from "./useBlobPointer";
|
|
6
6
|
import type { BlobSatelliteSystem } from "./useBlobSatellites";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { default as GooBlob } from "./GooBlob.vue";
|
|
2
|
-
export type { BlobMood, MoodParams, MetaballSource, BlobConfig, SatellitePhase, SatelliteInternal, } from "./types";
|
|
2
|
+
export type { BlobMood, BlobMerge, MoodParams, MetaballSource, BlobConfig, SatellitePhase, SatelliteInternal, } from "./types";
|
|
3
3
|
export { BLOB_CONFIG_DEFAULTS, BLOB_CONFIG_KEY } from "./types";
|
|
4
4
|
export { useBlobMood, type BlobMoodSystem } from "./composables/useBlobMood";
|
|
5
5
|
export { useBlobPointer, type BlobPointer } from "./composables/useBlobPointer";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const METABALL_SDF_GLSL = "// --- SDF ---\n\nfloat sdCircle(vec2 p, vec2 center, float radius) {\n return length(p - center) - radius;\n}\n\n//
|
|
1
|
+
export declare const METABALL_SDF_GLSL = "// --- SDF ---\n\nfloat sdCircle(vec2 p, vec2 center, float radius) {\n return length(p - center) - radius;\n}\n\n// IQ 2024 quadratic-polynomial smin, NORMALIZED so k is a blend band in distance\n// units. The k *= 4.0 pre-scale makes the h*h*k*0.25 poly's effective blend width\n// equal to k (the un-normalized form's width was 0.25*k).\nfloat sminQuadratic(float a, float b, float k) {\n k *= 4.0;\n float h = max(k - abs(a - b), 0.0) / k;\n return min(a, b) - h * h * k * 0.25;\n}\n\n// IQ circular smin \u2014 a quarter-circle fillet at the seam (rounder than the\n// quadratic). The k *= 1.0/(1.0-sqrt(0.5)) factor normalizes k to the same\n// blend-band units so the merge axis swaps shape without re-tuning uSmoothK.\nfloat sminCircular(float a, float b, float k) {\n k *= 1.0 / (1.0 - sqrt(0.5));\n float h = max(k - abs(a - b), 0.0) / k;\n return min(a, b) - k * 0.5 * (1.0 + h - sqrt(1.0 - h * (h - 2.0)));\n}\n\n// Config-gated merge dispatch \u2014 uMerge 0 = quadratic, 1 = circular.\nfloat smin(float a, float b, float k) {\n if (uMerge > 0.5) return sminCircular(a, b, k);\n return sminQuadratic(a, b, k);\n}";
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const METABALL_EDGE_NOISE_PRE_GLSL = "// --- Noise ---\n\nfloat hash21(vec2 p) {\n vec3 p3 = fract(vec3(p.xyx) * 0.1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\
|
|
2
|
-
export declare const METABALL_EDGE_NOISE_POST_GLSL = "float fbm(vec2 p, int octaves) {\n float value = 0.0;\n float amp = 0.5;\n float freq = 1.0;\n for (int i = 0; i < 4; i++) {\n if (i >= octaves) break;\n value += amp *
|
|
1
|
+
export declare const METABALL_EDGE_NOISE_PRE_GLSL = "// --- Noise ---\n\nfloat hash21(vec2 p) {\n vec3 p3 = fract(vec3(p.xyx) * 0.1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\n// IQ analytic-derivative gradient noise \u2014 value in .x, ANALYTIC gradient\n// (d/dx, d/dy) in .yz, from one eval. The quintic fade has a continuous 2nd\n// derivative so the gradient is smooth (a cubic smoothstep fade would crease it).\n// (Inigo Quilez, https://iquilezles.org/articles/gradientnoise/.)\nvec3 noised(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n\n // Quintic fade + its derivative.\n vec2 u = f * f * f * (f * (f * 6.0 - 15.0) + 10.0);\n vec2 du = 30.0 * f * f * (f * (f - 2.0) + 1.0);\n\n // Per-corner gradient vectors from the hash (centred to [-1, 1]).\n vec2 ga = -1.0 + 2.0 * vec2(hash21(i + vec2(0.0, 0.0)), hash21(i + vec2(7.3, 0.0)));\n vec2 gb = -1.0 + 2.0 * vec2(hash21(i + vec2(1.0, 0.0)), hash21(i + vec2(8.3, 0.0)));\n vec2 gc = -1.0 + 2.0 * vec2(hash21(i + vec2(0.0, 1.0)), hash21(i + vec2(7.3, 1.0)));\n vec2 gd = -1.0 + 2.0 * vec2(hash21(i + vec2(1.0, 1.0)), hash21(i + vec2(8.3, 1.0)));\n\n float va = dot(ga, f - vec2(0.0, 0.0));\n float vb = dot(gb, f - vec2(1.0, 0.0));\n float vc = dot(gc, f - vec2(0.0, 1.0));\n float vd = dot(gd, f - vec2(1.0, 1.0));\n\n // Value, remapped to [0,1] so it drops in for the prior valueNoise.\n float n = va + u.x * (vb - va) + u.y * (vc - va) + u.x * u.y * (va - vb - vc + vd);\n float value = 0.5 + 0.5 * n;\n\n // Analytic gradient (chain rule through the bilinear blend + the fade).\n vec2 grad =\n ga + u.x * (gb - ga) + u.y * (gc - ga) + u.x * u.y * (ga - gb - gc + gd) +\n du * (vec2(u.y, u.x) * (va - vb - vc + vd) + vec2(vb, vc) - va);\n return vec3(value, 0.5 * grad);\n}\n\n// Rotated-octave FBM over the analytic gradient noise: a fixed ~0.5 rad 2x2\n// rotation between octaves breaks the axis-aligned banding. The rotation CONSTANT\n// is spliced from the shared chunk (AV.W2 \u2014 the one FBM_ROT); the loops below\n// stay blob-local (param octaves + 2.0 lacunarity, per \u00A73a).";
|
|
2
|
+
export declare const METABALL_EDGE_NOISE_POST_GLSL = "float fbm(vec2 p, int octaves) {\n float value = 0.0;\n float amp = 0.5;\n float freq = 1.0;\n for (int i = 0; i < 4; i++) {\n if (i >= octaves) break;\n value += amp * noised(p * freq).x;\n p = FBM_ROT * p;\n freq *= 2.0;\n amp *= 0.5;\n }\n return value;\n}\n\n// One domain-warp pass: offset the sample point by a low-frequency FBM of itself\n// (the IQ fbm(p + W*fbm(p)) marbling). warpAmp (uniform-driven) is the warp\n// strength; warpAmp == 0.0 degrades to plain fbm (the pre-warp look).\nfloat fbmWarped(vec2 p, int octaves, float warpAmp) {\n if (warpAmp <= 0.0) return fbm(p, octaves);\n vec2 q = vec2(fbm(p + vec2(0.0, 0.0), octaves), fbm(p + vec2(5.2, 1.3), octaves));\n return fbm(p + warpAmp * (q - 0.5), octaves);\n}\n";
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { InjectionKey } from "vue";
|
|
2
2
|
export type BlobMood = "idle" | "happy" | "curious" | "sleepy" | "excited";
|
|
3
|
+
/** Smin merge variant — `quadratic` (cheap, creased) | `circular` (rounder menisci). */
|
|
4
|
+
export type BlobMerge = "quadratic" | "circular";
|
|
3
5
|
export interface MoodParams {
|
|
4
6
|
orbitSpeedScale: number;
|
|
5
7
|
wobbleScale: number;
|
|
@@ -12,6 +14,8 @@ export interface MoodParams {
|
|
|
12
14
|
smoothK: number;
|
|
13
15
|
pointerAttraction: number;
|
|
14
16
|
mergeRate: number;
|
|
17
|
+
/** Mood-driven iridescence/SSS intensity multiplier (excited > 1, sleepy < 1). */
|
|
18
|
+
iridScale: number;
|
|
15
19
|
}
|
|
16
20
|
export interface MetaballSource {
|
|
17
21
|
x: number;
|
|
@@ -51,10 +55,18 @@ export interface BlobConfig {
|
|
|
51
55
|
satelliteCount: number;
|
|
52
56
|
satelliteRadius: number;
|
|
53
57
|
orbitRadius: number;
|
|
58
|
+
tempo: number;
|
|
54
59
|
smoothK: number;
|
|
60
|
+
/** Smin merge variant — `quadratic` (default) | `circular` (rounder menisci). */
|
|
61
|
+
merge: BlobMerge;
|
|
55
62
|
noiseAmp: number;
|
|
56
63
|
noiseFreq: number;
|
|
57
64
|
noiseSpeed: number;
|
|
65
|
+
/**
|
|
66
|
+
* Domain-warp strength on the FBM edge displacement (0 = plain fbm, the
|
|
67
|
+
* pre-warp look; ~0.6 = a marbled organic membrane). Taste-first low default.
|
|
68
|
+
*/
|
|
69
|
+
warpAmp: number;
|
|
58
70
|
pulseFreq: number;
|
|
59
71
|
pulseAmp: number;
|
|
60
72
|
hueRange: number;
|
|
@@ -62,8 +74,36 @@ export interface BlobConfig {
|
|
|
62
74
|
brightnessShift: number;
|
|
63
75
|
colorNoiseFreq: number;
|
|
64
76
|
colorNoiseSpeed: number;
|
|
77
|
+
paletteStops: string[];
|
|
78
|
+
/** Warm-pearl rim sheen weight (0 = off). */
|
|
79
|
+
iridescence: number;
|
|
80
|
+
/** Base hue (degrees) the warm-biased cosine palette centres on. */
|
|
81
|
+
iridHue: number;
|
|
82
|
+
/** Animated-thickness scroll speed for the iridescent shimmer. */
|
|
83
|
+
iridSpeed: number;
|
|
84
|
+
/** Fast-SSS back-light weight. */
|
|
85
|
+
sssScale: number;
|
|
86
|
+
/** Fast-SSS exponent. */
|
|
87
|
+
sssPower: number;
|
|
88
|
+
/** Thickness-driven inner-luminosity (core glow) lift. */
|
|
89
|
+
coreGlow: number;
|
|
90
|
+
lit: boolean;
|
|
91
|
+
/** CSS color for the Fresnel rim tint (resolved through the ColorResolver). */
|
|
92
|
+
rimColor: string;
|
|
93
|
+
/** Light direction [x, y, z] (normalized in-shader). */
|
|
94
|
+
lightDir: [number, number, number];
|
|
95
|
+
specStrength: number;
|
|
96
|
+
/** Specular exponent (16-64 — a tight glint). */
|
|
97
|
+
specShininess: number;
|
|
98
|
+
/** Fresnel/Schlick exponent (~2-3). */
|
|
99
|
+
rimPower: number;
|
|
100
|
+
rimStrength: number;
|
|
65
101
|
pointerAttraction: number;
|
|
66
102
|
pointerStrength: number;
|
|
103
|
+
/** Velocity-driven volume-preserving squash-and-stretch magnitude (0 = off). */
|
|
104
|
+
stretch: number;
|
|
105
|
+
/** Click spring-impulse amplitude (a one-shot bouncy pulse on the body radius). */
|
|
106
|
+
clickImpulse: number;
|
|
67
107
|
eccentricity: number;
|
|
68
108
|
orbitSpeedScale: number;
|
|
69
109
|
wobbleScale: number;
|
|
@@ -83,9 +83,9 @@ type __VLS_Slots = {} & {
|
|
|
83
83
|
};
|
|
84
84
|
declare const __VLS_base: import("vue").DefineComponent<MetricCellProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MetricCellProps> & Readonly<{}>, {
|
|
85
85
|
placeholder: string;
|
|
86
|
+
appearance: MetricCellAppearance;
|
|
86
87
|
iconStrokeWidth: number;
|
|
87
88
|
iconSize: number;
|
|
88
|
-
appearance: MetricCellAppearance;
|
|
89
89
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
90
90
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
91
91
|
declare const _default: typeof __VLS_export;
|
|
@@ -78,8 +78,8 @@ type __VLS_Slots = {} & {
|
|
|
78
78
|
};
|
|
79
79
|
declare const __VLS_base: import("vue").DefineComponent<MetricStackProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<MetricStackProps> & Readonly<{}>, {
|
|
80
80
|
as: string | Component;
|
|
81
|
-
rows: number;
|
|
82
81
|
containerName: string;
|
|
82
|
+
rows: number;
|
|
83
83
|
register: "audacious" | "result";
|
|
84
84
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
85
85
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -77,8 +77,8 @@ type __VLS_Slots = {} & {
|
|
|
77
77
|
};
|
|
78
78
|
declare const __VLS_base: import("vue").DefineComponent<ModalOverlayProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ModalOverlayProps> & Readonly<{}>, {
|
|
79
79
|
animate: "fade" | "scale" | "slide" | "none";
|
|
80
|
-
scrim: "glass" | "clear" | "dim";
|
|
81
80
|
layout: "centered" | "edge" | "scroll";
|
|
81
|
+
scrim: "glass" | "clear" | "dim";
|
|
82
82
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
83
83
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
84
84
|
declare const _default: typeof __VLS_export;
|
|
@@ -3,6 +3,6 @@ export { default as Alert } from './Alert.vue';
|
|
|
3
3
|
export { default as AlertDescription } from './AlertDescription.vue';
|
|
4
4
|
export { default as AlertTitle } from './AlertTitle.vue';
|
|
5
5
|
export declare const alertVariants: (props?: ({
|
|
6
|
-
variant?: "default" | "destructive" | null | undefined;
|
|
6
|
+
variant?: "default" | "destructive" | "success" | "warning" | "info" | null | undefined;
|
|
7
7
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
8
|
export type AlertVariants = VariantProps<typeof alertVariants>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type HTMLAttributes } from "vue";
|
|
2
2
|
import { type PrimitiveProps } from "reka-ui";
|
|
3
3
|
/**
|
|
4
4
|
* The five-tier glass surface ladder. Maps 1:1 to `.glass-{tier}` in glass.css
|
|
@@ -33,11 +33,17 @@ interface Props extends PrimitiveProps {
|
|
|
33
33
|
/** `::after` paper-grain overlay. Off for scroll panes (the grain conflicts
|
|
34
34
|
* with overflow:auto repaints). */
|
|
35
35
|
grain?: boolean;
|
|
36
|
+
/** Opt-in interactive register (AW.W24). A glass card with `hover` wakes the
|
|
37
|
+
* dormant pointer-anchored specular catch-light: it tracks the cursor across
|
|
38
|
+
* the surface (the AV.W15 moving-glass illuminate) instead of the centred
|
|
39
|
+
* var() floor. Static cards (default) keep the centred catch-light and never
|
|
40
|
+
* attach the listener. `cartoon` surfaces own their own sticker lift. */
|
|
41
|
+
hover?: boolean;
|
|
36
42
|
class?: HTMLAttributes["class"];
|
|
37
43
|
}
|
|
38
|
-
declare var
|
|
44
|
+
declare var __VLS_10: {};
|
|
39
45
|
type __VLS_Slots = {} & {
|
|
40
|
-
default?: (props: typeof
|
|
46
|
+
default?: (props: typeof __VLS_10) => any;
|
|
41
47
|
};
|
|
42
48
|
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
43
49
|
shadow: boolean;
|
|
@@ -45,6 +51,7 @@ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, i
|
|
|
45
51
|
tier: CardTier;
|
|
46
52
|
surface: CardSurface;
|
|
47
53
|
grain: boolean;
|
|
54
|
+
hover: boolean;
|
|
48
55
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
49
56
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
50
57
|
declare const _default: typeof __VLS_export;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "vue";
|
|
2
|
+
/**
|
|
3
|
+
* <CardAction> — the shadcn-2025 top-right action slot of the Card family.
|
|
4
|
+
* When present inside a <CardHeader>, the header reflows to a two-column grid
|
|
5
|
+
* (title/description column + this action column) via the `@container/card-header`
|
|
6
|
+
* `has-data-[slot=card-action]` query on CardHeader. Self-aligns to the start of
|
|
7
|
+
* the header's first two rows, justified to the end.
|
|
8
|
+
*/
|
|
9
|
+
type __VLS_Props = {
|
|
10
|
+
class?: HTMLAttributes["class"];
|
|
11
|
+
};
|
|
12
|
+
declare var __VLS_1: {};
|
|
13
|
+
type __VLS_Slots = {} & {
|
|
14
|
+
default?: (props: typeof __VLS_1) => any;
|
|
15
|
+
};
|
|
16
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
18
|
+
declare const _default: typeof __VLS_export;
|
|
19
|
+
export default _default;
|
|
20
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
21
|
+
new (): {
|
|
22
|
+
$slots: S;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
@@ -4,3 +4,4 @@ export { default as CardTitle } from "./CardTitle.vue";
|
|
|
4
4
|
export { default as CardDescription } from "./CardDescription.vue";
|
|
5
5
|
export { default as CardContent } from "./CardContent.vue";
|
|
6
6
|
export { default as CardFooter } from "./CardFooter.vue";
|
|
7
|
+
export { default as CardAction } from "./CardAction.vue";
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { type HTMLAttributes } from 'vue';
|
|
1
2
|
import { type CollapsibleTriggerProps } from 'reka-ui';
|
|
3
|
+
type __VLS_Props = CollapsibleTriggerProps & {
|
|
4
|
+
class?: HTMLAttributes['class'];
|
|
5
|
+
};
|
|
2
6
|
declare var __VLS_8: {};
|
|
3
7
|
type __VLS_Slots = {} & {
|
|
4
8
|
default?: (props: typeof __VLS_8) => any;
|
|
5
9
|
};
|
|
6
|
-
declare const __VLS_base: import("vue").DefineComponent<
|
|
10
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
7
11
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
8
12
|
declare const _default: typeof __VLS_export;
|
|
9
13
|
export default _default;
|
|
@@ -2,12 +2,22 @@ import { type HTMLAttributes } from 'vue';
|
|
|
2
2
|
import { type TabsListProps } from 'reka-ui';
|
|
3
3
|
type __VLS_Props = TabsListProps & {
|
|
4
4
|
class?: HTMLAttributes['class'];
|
|
5
|
+
/**
|
|
6
|
+
* AW.W25 — render the spring `TabsIndicator` pill behind the triggers so
|
|
7
|
+
* the base default `<Tabs>` matches its own indicator primitive (the
|
|
8
|
+
* polished pill previously lived only in custom BouncyTabs; the base
|
|
9
|
+
* under-delivered vs its own `TabsIndicator.vue`). Default `true`. Set
|
|
10
|
+
* `:indicator="false"` for a list that drives its own active-state vocab.
|
|
11
|
+
*/
|
|
12
|
+
indicator?: boolean;
|
|
5
13
|
};
|
|
6
|
-
declare var
|
|
14
|
+
declare var __VLS_13: {};
|
|
7
15
|
type __VLS_Slots = {} & {
|
|
8
|
-
default?: (props: typeof
|
|
16
|
+
default?: (props: typeof __VLS_13) => any;
|
|
9
17
|
};
|
|
10
|
-
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
18
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
19
|
+
indicator: boolean;
|
|
20
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
11
21
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
12
22
|
declare const _default: typeof __VLS_export;
|
|
13
23
|
export default _default;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { type HTMLAttributes } from 'vue';
|
|
2
2
|
import { type ToastRootProps } from 'reka-ui';
|
|
3
|
+
import type { ToastVariant } from './use-toast';
|
|
3
4
|
interface ToastProps extends ToastRootProps {
|
|
4
5
|
class?: HTMLAttributes['class'];
|
|
5
|
-
variant?:
|
|
6
|
-
onOpenChange?: ((value: boolean) => void) | undefined;
|
|
6
|
+
variant?: ToastVariant;
|
|
7
7
|
}
|
|
8
|
-
declare var
|
|
8
|
+
declare var __VLS_8: {};
|
|
9
9
|
type __VLS_Slots = {} & {
|
|
10
|
-
default?: (props: typeof
|
|
10
|
+
default?: (props: typeof __VLS_8) => any;
|
|
11
11
|
};
|
|
12
12
|
declare const __VLS_base: import("vue").DefineComponent<ToastProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
13
13
|
"update:open": (value: boolean) => any;
|
|
@@ -92,7 +92,7 @@ declare const __VLS_base: import("vue").DefineComponent<ToastProps, {}, {}, {},
|
|
|
92
92
|
};
|
|
93
93
|
}>, "currentTarget">) => any) | undefined;
|
|
94
94
|
}>, {
|
|
95
|
-
variant:
|
|
95
|
+
variant: ToastVariant;
|
|
96
96
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
97
97
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
98
98
|
declare const _default: typeof __VLS_export;
|
|
@@ -47,3 +47,53 @@ export declare function oklchStopToHex(s: OklchStop): string;
|
|
|
47
47
|
* gray default); value.js supplies its own, the demo story uses this one.
|
|
48
48
|
*/
|
|
49
49
|
export declare const defaultBlobColorResolver: ColorResolver;
|
|
50
|
+
/**
|
|
51
|
+
* Harmony schemes for the OKLCh palette derivers. Each maps the seed hue onto the
|
|
52
|
+
* derived stops differently:
|
|
53
|
+
* - `analogous` — neighbouring hues (seed ± a small spread).
|
|
54
|
+
* - `complementary` — seed → +180° along the LONG arc (stays saturated; the short
|
|
55
|
+
* arc cuts through grey on a warm→cool pair).
|
|
56
|
+
* - `split-complementary` — the two hues flanking the complement (±150/210).
|
|
57
|
+
* - `triad` — seed + its two 120° partners.
|
|
58
|
+
* - `tetradic` — seed + the three 90° partners.
|
|
59
|
+
* - `monochrome` — every stop holds the seed hue; only L and C travel.
|
|
60
|
+
*/
|
|
61
|
+
export type ColorHarmony = "analogous" | "complementary" | "split-complementary" | "triad" | "tetradic" | "monochrome";
|
|
62
|
+
/**
|
|
63
|
+
* Hue per harmony, walked across the ramp parameter `t` (0..1) THROUGH value.js's
|
|
64
|
+
* `interpolateHue` in the NORMALIZED-TURNS domain (`/360` in, `*360` out — value.js
|
|
65
|
+
* takes turns [0,1], NOT degrees; the `.5` short-arc threshold is a half-TURN). The
|
|
66
|
+
* single canonical hue-walk both backdrops consume.
|
|
67
|
+
*/
|
|
68
|
+
export declare function deriveHue(anchorHue: number, harmony: ColorHarmony, hueSpread: number, t: number): number;
|
|
69
|
+
/**
|
|
70
|
+
* Gamut-map one OklchStop through value.js's Ottosson core
|
|
71
|
+
* (`rawOklchToOklab → gamutMapOKLab → rawOklabToOklch`) with a bounded inward-chroma
|
|
72
|
+
* nudge for the over-1 hull-placement escape. Hue is preserved exactly; the result
|
|
73
|
+
* is in-sRGB to the pipeline's tolerance. The single gamut-mapper both backdrops use.
|
|
74
|
+
*/
|
|
75
|
+
export declare function gamutMapStop(stop: OklchStop): OklchStop;
|
|
76
|
+
/** Tuning for {@link deriveBlobPalette}. */
|
|
77
|
+
export interface DeriveBlobPaletteOptions {
|
|
78
|
+
/** Number of stops to produce. Default 3; clamped to [2, 4]. */
|
|
79
|
+
stopCount?: number;
|
|
80
|
+
/** Hue scheme across the stops. Default `analogous`. */
|
|
81
|
+
harmony?: ColorHarmony;
|
|
82
|
+
/** Total L travel across the stops, in OKLCh L units. Default ~0.18. */
|
|
83
|
+
lightnessSpread?: number;
|
|
84
|
+
/** Hue walk in degrees for analogous; ignored by monochrome. Default ~24. */
|
|
85
|
+
hueSpread?: number;
|
|
86
|
+
/** Midpoint chroma-bump (keeps a vivid pair off the grey midpoint). Default ~0.03. */
|
|
87
|
+
chromaBump?: number;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Seed ONE color into a harmonious, gamut-safe 2-4-stop OKLCh palette for the blob
|
|
91
|
+
* — the blob-side twin of `deriveAurora`, consuming the SHARED `ColorHarmony`
|
|
92
|
+
* vocabulary (no forked `deriveHue`). The body takes the deepest/most-saturated
|
|
93
|
+
* stop; satellites take the lighter in-family stops. Every stop is gamut-mapped.
|
|
94
|
+
* Deterministic + DOM-free (SSR-safe; `cssToOklch` parses via value.js).
|
|
95
|
+
*
|
|
96
|
+
* @param seed any CSS color string OR an `OklchStop` anchor.
|
|
97
|
+
* @param options stop count, harmony, spreads.
|
|
98
|
+
*/
|
|
99
|
+
export declare function deriveBlobPalette(seed: string | OklchStop, options?: DeriveBlobPaletteOptions): OklchStop[];
|