@mkbabb/glass-ui 3.6.0 → 3.8.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-q2qHCJFG.js +157 -0
- package/dist/CollapsibleContent-CP9qF1v4.js +63 -0
- package/dist/{CommandShortcut-BiVyqipe.js → CommandShortcut-SzWRhROC.js} +4 -4
- package/dist/{ContextMenuContent-De01_83g.js → ContextMenuContent-DDa0v27s.js} +1 -1
- package/dist/{ContextMenuSubContent-DrWkXKQP.js → ContextMenuSubContent-Do977Cbf.js} +4 -4
- package/dist/{DataTable-BGVXx0Ww.js → DataTable-CvlWXz65.js} +14 -7
- package/dist/DeckProgress-AVgbIULY.js +23 -0
- package/dist/{DialogContent-IQ8_BRrC.js → DialogContent-DjZWT3lK.js} +24 -24
- package/dist/{DialogFooter-Er0wA3K6.js → DialogFooter-Gprw8H_A.js} +2 -2
- package/dist/{DiscoGlyph-BaZ8OawK.js → DiscoGlyph-CG0F410s.js} +1 -1
- package/dist/{GlyphFace-B_7vOmYn.js → GlyphFace-DRjDkB0s.js} +1 -1
- package/dist/{HoverCardContent-ICfIMZX1.js → HoverCardContent-B6CcQ8He.js} +1 -1
- package/dist/{HoverPopover-DTSYkJtw.js → HoverPopover-D56O6Ylp.js} +1 -1
- package/dist/{IconTooltip-DZlCkU-0.js → IconTooltip-D2T5nYOM.js} +1 -1
- package/dist/{Input-CRJ2owjN.js → Input-DVG_J0ne.js} +4 -1
- package/dist/{Label-CZk-3nTc.js → Label-zRfbQdCn.js} +1 -1
- package/dist/{MetricBadge-BlrdbOGN.js → MetricBadge-lTc002u2.js} +1 -1
- package/dist/{Notification-DP_ApJLo.js → Notification-BxK8LZMw.js} +5 -4
- package/dist/{NumberFieldContent-Bhhmk95p.js → NumberFieldContent-CLNVR1iY.js} +5 -5
- package/dist/{PopoverContent-B8WtJECb.js → PopoverContent-BId6ggf_.js} +2 -2
- package/dist/{Progress-DjM86vfb.js → Progress-iEuD9pxG.js} +7 -7
- package/dist/{ScrollingText-P9o_DuMn.js → ScrollingText-CVyqxvfv.js} +2 -2
- package/dist/{SelectScrollDownButton-BGn3rjs9.js → SelectScrollDownButton-C7TRe-ep.js} +8 -7
- package/dist/{Separator-C2XtAXRp.js → Separator-D7sD7RKj.js} +1 -1
- package/dist/{Switch-x8n6husW.js → Switch-LDKLmmgx.js} +8 -2
- package/dist/TabsList-qyHZ2lKY.js +101 -0
- package/dist/{Toaster-DdhMKfus.js → Toaster-CabYEEF_.js} +54 -60
- package/dist/{ToggleGroupItem-gyXj998A.js → ToggleGroupItem-CkXUcBlt.js} +13 -5
- package/dist/{TooltipProvider-D-JrSqDu.js → TooltipProvider-CmZzCuaG.js} +1 -1
- package/dist/{UnderlineTabs-CuIK16JI.js → UnderlineTabs-Uxn-R3MT.js} +2 -2
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +4 -2
- package/dist/api.js +1 -1
- package/dist/aurora.js +753 -359
- package/dist/{badge-Cl6JZ1B7.js → badge-DHQrc_GQ.js} +13 -9
- package/dist/badge.js +1 -1
- package/dist/{button-BcMzVrqs.js → button-CAywcrhO.js} +6 -3
- package/dist/button.js +1 -1
- package/dist/canvas.d.ts +1 -0
- package/dist/canvas.js +3 -0
- package/dist/card.js +2 -2
- package/dist/carousel.js +110 -109
- 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-DMLTunJK.js +84 -0
- package/dist/color.js +2 -2
- package/dist/command.js +1 -1
- package/dist/compile-BBTRjvQS.js +158 -0
- package/dist/components/custom/aurora/Aurora.vue.d.ts +1 -0
- package/dist/components/custom/aurora/composables/atoms.d.ts +125 -0
- package/dist/components/custom/aurora/composables/color.d.ts +7 -25
- 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 +46 -12
- 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 +60 -4
- package/dist/components/custom/aurora/constants/renderMode.d.ts +32 -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 +4 -3
- package/dist/components/custom/constellation/Constellation.vue.d.ts +40 -5
- package/dist/components/custom/constellation/constellationField.d.ts +110 -5
- package/dist/components/custom/constellation/index.d.ts +2 -2
- package/dist/components/custom/dock/GlassDock.vue.d.ts +12 -4
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +57 -0
- package/dist/components/custom/dock/composables/index.d.ts +3 -0
- package/dist/components/custom/dock/composables/useDockHold.d.ts +61 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -59
- package/dist/components/custom/dock/index.d.ts +2 -0
- 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 +15 -0
- package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +18 -2
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +47 -4
- package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +2 -0
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +19 -4
- 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 +48 -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 +26 -3
- package/dist/components/ui/card/CardAction.vue.d.ts +24 -0
- package/dist/components/ui/card/index.d.ts +2 -1
- package/dist/components/ui/collapsible/CollapsibleTrigger.vue.d.ts +5 -1
- package/dist/components/ui/progress/ProgressDefault.vue.d.ts +14 -4
- package/dist/components/ui/slider/Slider.vue.d.ts +3 -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 +69 -0
- package/dist/composables/dom/index.d.ts +1 -1
- package/dist/composables/dom/useResolveTokenColor.d.ts +27 -0
- package/dist/composables/glass/canvas2d/index.d.ts +2 -1
- package/dist/composables/glass/canvas2d/resolveCanvasColor.d.ts +20 -0
- package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +15 -1
- package/dist/composables/glass/createGPUCanvas.d.ts +40 -0
- package/dist/composables/glass/index.d.ts +3 -1
- package/dist/composables/glass/useSpecularTracking.d.ts +33 -0
- package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +45 -0
- package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +7 -0
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +5 -5
- package/dist/composables/motion/core/index.d.ts +1 -0
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +3 -3
- package/dist/constellation.js +144 -75
- 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/deck-progress.d.ts +1 -0
- package/dist/deck-progress.js +2 -0
- package/dist/dialog.js +2 -2
- package/dist/disco-glyph.js +1 -1
- package/dist/dock.js +388 -287
- package/dist/{dockContext-spUj_-E5.js → dockContext-BKeIMmNk.js} +1 -1
- package/dist/dom.js +6 -6
- package/dist/{dropdown-menu-EFjl5iKo.js → dropdown-menu-B_4bWyyG.js} +5 -5
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +2 -2
- package/dist/fonts/README.md +26 -18
- 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 +12 -7
- package/dist/glass-panel.js +7 -7
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +209 -206
- package/dist/glyph-face.js +2 -2
- package/dist/goo-blob.js +485 -300
- 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/index.d.ts +1 -0
- 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-BsYjEFOW.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 +68 -98
- 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/resolveCanvasColor-BBiYfp8g.js +11 -0
- 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 +12 -12
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/{sheet-CQYYrkr9.js → sheet-VZEtNFvO.js} +4 -4
- package/dist/sheet.js +1 -1
- package/dist/slider-D9puf-Ko.js +142 -0
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock-controls.css +21 -18
- package/dist/styles/dock.css +415 -224
- package/dist/styles/fonts.css +0 -25
- package/dist/styles/glass.css +100 -41
- package/dist/styles/theme.css +58 -2
- package/dist/styles/tokens.css +139 -32
- package/dist/styles/typography.css +55 -72
- package/dist/styles/utilities.css +19 -14
- package/dist/styles/view-transition.css +12 -40
- package/dist/supportsCssTimeline-C5oe0lnD.js +12 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +5 -5
- package/dist/timeline.js +3 -3
- 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-DfVgP4te.js → useAnimatedNumber-C_3wZLx4.js} +1 -1
- package/dist/{useCanvas2D-BeNJqqIS.js → useCanvas2D-ClrQuZtp.js} +2 -1
- package/dist/{useConfiguratorState-DUtC1jxr.js → useConfiguratorState-CMff4GzH.js} +5 -5
- package/dist/useResolveTokenColor-r9pnNjqK.js +24 -0
- package/dist/useScrollProgress-C9ysDic5.js +35 -0
- package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
- package/dist/{useTextHighlight-Dmtofpk2.js → useTextHighlight-9nMW23Qb.js} +1 -1
- package/dist/{useTouchGate-CS5Csc2h.js → useTouchGate-WFyJYsth.js} +1 -1
- package/dist/vReveal-CqaCz_mC.js +44 -0
- package/dist/watercolor-dot.js +2 -2
- package/dist/{x-C4pz9nbD.js → x-Dfsegz9Y.js} +1 -1
- package/package.json +64 -4
- package/src/fonts/README.md +26 -18
- package/src/styles/dock-controls.css +21 -18
- package/src/styles/dock.css +415 -224
- package/src/styles/fonts.css +0 -25
- package/src/styles/glass.css +100 -41
- package/src/styles/theme.css +58 -2
- package/src/styles/tokens.css +139 -32
- package/src/styles/typography.css +55 -72
- package/src/styles/utilities.css +19 -14
- package/src/styles/view-transition.css +12 -40
- package/dist/CardFooter-C390imy7.js +0 -129
- package/dist/CollapsibleContent-cauTbZEM.js +0 -52
- package/dist/TabsIndicator-DA0x9gPr.js +0 -97
- package/dist/color-DS-iLRVM.js +0 -33
- package/dist/compile-C62K_FpC.js +0 -106
- package/dist/fonts/fraunces/fraunces-latin.woff2 +0 -0
- package/dist/slider-CgNzRSh6.js +0 -129
- package/dist/useViewTransition-DI0Rs2rV.js +0 -21
- package/dist/vReveal-u2wSG2El.js +0 -35
- package/src/fonts/fraunces/fraunces-latin.woff2 +0 -0
- /package/dist/{InstrumentChassis-DaHIZCqy.js → InstrumentChassis-C2f6cBaQ.js} +0 -0
- /package/dist/{InstrumentRail-B0qqLFN0.js → InstrumentRail-CUJ05YVG.js} +0 -0
- /package/dist/{ModalOverlay-B_CBtqcE.js → ModalOverlay-B1GkAjNb.js} +0 -0
- /package/dist/{PaperBackdrop-D_YZW47j.js → PaperBackdrop-CqwjnfLv.js} +0 -0
- /package/dist/{SelectGroup-CMdoCjRE.js → SelectGroup-BFiod7X2.js} +0 -0
- /package/dist/{SelectSeparator-CaJnPF3_.js → SelectSeparator-L8pPEn4L.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
- /package/dist/composables/{dom → motion}/useTextHighlight.d.ts +0 -0
- /package/dist/{constants-C8NMonuo.js → constants-BPOqYJAm.js} +0 -0
- /package/dist/{createContext-DBMGRlx4.js → createContext-B44Sah_H.js} +0 -0
- /package/dist/{createLucideIcon-DuDoe_ra.js → createLucideIcon-B6uNAU9G.js} +0 -0
- /package/dist/{menuItemVariants-C2QlXqT3.js → menuItemVariants-DKM85SNE.js} +0 -0
- /package/dist/{presets-Dyv9Zl7W.js → presets-D1XPuTj-.js} +0 -0
- /package/dist/{prng-CjVgzjQT.js → prng-COGhh02-.js} +0 -0
- /package/dist/{useGlassRenderer-Dn3WpfG-.js → useGlassRenderer-5I0YkI4t.js} +0 -0
- /package/dist/{useGlobalDark-D7R9OypB.js → useGlobalDark-D3EBWzXK.js} +0 -0
- /package/dist/{useIntersectionPause-DsQYGc8V.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
- /package/dist/{useInterval-CHVYFpXV.js → useInterval-CcLfq2WU.js} +0 -0
- /package/dist/{useKeyboardShortcuts-i8tHd5WO.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
- /package/dist/{useResizeObserver-DX-STszm.js → useResizeObserver-CWCbk5Px.js} +0 -0
- /package/dist/{useSortable-muI29agz.js → useSortable-MGAbCGVJ.js} +0 -0
- /package/dist/{useSpringMount-CnizvZGm.js → useSpringMount-BJSHcLl3.js} +0 -0
- /package/dist/{useTimer-DGgoxTXL.js → useTimer-3xqf_54b.js} +0 -0
- /package/dist/{useUserInvalidAria-DmvZ_6Dx.js → useUserInvalidAria-DoJKMZ3s.js} +0 -0
- /package/dist/{useViewportReady-Dcvf0c4p.js → useViewportReady-RIr5Wgkh.js} +0 -0
|
@@ -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,27 @@ 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;
|
|
58
|
+
/** AX.W16 — the quiescence at-rest predicate the renderer's demand gate reads. */
|
|
59
|
+
isAtRest: () => boolean;
|
|
17
60
|
};
|
|
18
61
|
export type BlobPointer = ReturnType<typeof useBlobPointer>;
|
|
@@ -9,5 +9,7 @@ export declare function useBlobSatellites(config: BlobConfig, initialColor: stri
|
|
|
9
9
|
tick: (now: number, mood: MoodParams) => void;
|
|
10
10
|
nudge: () => void;
|
|
11
11
|
reseed: (color: string) => void;
|
|
12
|
+
isQuiescent: () => boolean;
|
|
13
|
+
nextEventMs: (now: number) => number;
|
|
12
14
|
};
|
|
13
15
|
export type BlobSatelliteSystem = ReturnType<typeof useBlobSatellites>;
|
|
@@ -6,17 +6,32 @@ import type { BlobPointer } from "./useBlobPointer";
|
|
|
6
6
|
import type { BlobSatelliteSystem } from "./useBlobSatellites";
|
|
7
7
|
export interface UseMetaballRendererOptions {
|
|
8
8
|
canvasRef: Ref<HTMLCanvasElement | null>;
|
|
9
|
+
/** The base color, ALREADY un-wrapped to a CONCRETE string by the SFC (DOM-free). */
|
|
9
10
|
color: Ref<string>;
|
|
11
|
+
/**
|
|
12
|
+
* The Fresnel rim color, ALREADY un-wrapped to a CONCRETE string by the SFC
|
|
13
|
+
* (AX.W16 — the renderer no longer reaches the DOM for the `var()`-cascade read;
|
|
14
|
+
* the SFC's `resolveTokenColor` leaf does ALL un-wrapping before the renderer sees
|
|
15
|
+
* it). A `var(--token)` rim arrives here already resolved to `rgb(...)`.
|
|
16
|
+
*/
|
|
17
|
+
rimColor: Ref<string>;
|
|
18
|
+
/**
|
|
19
|
+
* The multi-stop palette, ALREADY un-wrapped to CONCRETE strings by the SFC
|
|
20
|
+
* (AX.W16). EMPTY falls back to the base color (uStopCount <= 1).
|
|
21
|
+
*/
|
|
22
|
+
paletteStops: Ref<string[]>;
|
|
10
23
|
mood: BlobMoodSystem;
|
|
11
24
|
pointer: BlobPointer;
|
|
12
25
|
satellites: BlobSatelliteSystem;
|
|
13
26
|
config: BlobConfig;
|
|
14
27
|
/**
|
|
15
|
-
* The injected color seam (DEC-AT-2). Resolves a CSS color string to a
|
|
16
|
-
* sRGB triple in [0,1] fed straight into the shader's base-color uniform —
|
|
17
|
-
* faithful AU.W7 lift paints gamma. REQUIRED: a no-resolver mount throws (the
|
|
28
|
+
* The injected color seam (DEC-AT-2). Resolves a CONCRETE CSS color string to a
|
|
29
|
+
* GAMMA-sRGB triple in [0,1] fed straight into the shader's base-color uniform —
|
|
30
|
+
* the faithful AU.W7 lift paints gamma. REQUIRED: a no-resolver mount throws (the
|
|
18
31
|
* loud failure, not a silent gray) instructing the consumer to pass
|
|
19
|
-
* `defaultBlobColorResolver` from `@mkbabb/glass-ui/color` (or their own).
|
|
32
|
+
* `defaultBlobColorResolver` from `@mkbabb/glass-ui/color` (or their own). The
|
|
33
|
+
* renderer is DOM-FREE: it never un-wraps a `var(--token)` — the SFC's
|
|
34
|
+
* `resolveTokenColor` leaf does that BEFORE handing strings here (inv-K-3 seam).
|
|
20
35
|
*/
|
|
21
36
|
colorResolver: ColorResolver;
|
|
22
37
|
}
|
|
@@ -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, BlobQuality, 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// AX.W15 \u2014 the VALUE+GRADIENT circle: returns vec3(d, dd/dx, dd/dy). The circle\n// gradient is the UNIT radial direction (p - center)/length(p - center) (the\n// eikonal property holds EXACTLY for a circle), guarded at the degenerate centre.\n// This is the keystone of the analytic-gradient smin: carrying the gradient\n// through the scene field DELETES the per-pixel 4-tap normal (4 full sceneDist\n// evals, each running 3-octave FBM + the sat/trail loops).\nvec3 sdgCircle(vec2 p, vec2 center, float radius) {\n vec2 d = p - center;\n float len = length(d);\n vec2 grad = len > 1e-6 ? d / len : vec2(0.0, 1.0);\n return vec3(len - radius, grad);\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}\n\n// AX.W15 \u2014 the VALUE+GRADIENT smin. a/b are vec3(dist, grad.xy); the blended\n// gradient is mix(a.yz, b.yz, w) with the interpolation weight w the distance\n// blend uses (IQ's vec2-smin insight). This propagates the analytic gradient\n// through the merge so the surface normal reads the field gradient DIRECTLY \u2014 no\n// finite-difference tap. The blend weight matches each variant.\nvec3 sminQuadraticG(vec3 a, vec3 b, float k) {\n k *= 4.0;\n float h = max(k - abs(a.x - b.x), 0.0) / k;\n float m = h * h * k * 0.25;\n // h-weight that selects which surface dominates (0 \u2192 a, 1 \u2192 b).\n float w = (a.x < b.x) ? 0.5 * h * h : 1.0 - 0.5 * h * h;\n float dist = min(a.x, b.x) - m;\n vec2 grad = mix(a.yz, b.yz, w);\n return vec3(dist, grad);\n}\n\nvec3 sminCircularG(vec3 a, vec3 b, float k) {\n k *= 1.0 / (1.0 - sqrt(0.5));\n float h = max(k - abs(a.x - b.x), 0.0) / k;\n float m = k * 0.5 * (1.0 + h - sqrt(1.0 - h * (h - 2.0)));\n float w = (a.x < b.x) ? 0.5 * h : 1.0 - 0.5 * h;\n float dist = min(a.x, b.x) - m;\n vec2 grad = mix(a.yz, b.yz, w);\n return vec3(dist, grad);\n}\n\nvec3 sminG(vec3 a, vec3 b, float k) {\n if (uMerge > 0.5) return sminCircularG(a, b, k);\n return sminQuadraticG(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
|
|
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 + the LIQUID lacunarity/persistence, per \u00A73a).";
|
|
2
|
+
export declare const METABALL_EDGE_NOISE_POST_GLSL: string;
|
|
@@ -1,5 +1,14 @@
|
|
|
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";
|
|
5
|
+
/**
|
|
6
|
+
* Render-quality axis (AX.W16) — `full` (default) renders the metaball pass at the
|
|
7
|
+
* clamped DPR; `half` renders the backing store at HALF resolution and lets the
|
|
8
|
+
* browser bilinear-upsample on composite (~4× fragment savings for weak GPUs — the
|
|
9
|
+
* blob is the ideal candidate: the soft FBM/AA edge hides the interpolation).
|
|
10
|
+
*/
|
|
11
|
+
export type BlobQuality = "full" | "half";
|
|
3
12
|
export interface MoodParams {
|
|
4
13
|
orbitSpeedScale: number;
|
|
5
14
|
wobbleScale: number;
|
|
@@ -12,6 +21,8 @@ export interface MoodParams {
|
|
|
12
21
|
smoothK: number;
|
|
13
22
|
pointerAttraction: number;
|
|
14
23
|
mergeRate: number;
|
|
24
|
+
/** Mood-driven iridescence/SSS intensity multiplier (excited > 1, sleepy < 1). */
|
|
25
|
+
iridScale: number;
|
|
15
26
|
}
|
|
16
27
|
export interface MetaballSource {
|
|
17
28
|
x: number;
|
|
@@ -51,10 +62,19 @@ export interface BlobConfig {
|
|
|
51
62
|
satelliteCount: number;
|
|
52
63
|
satelliteRadius: number;
|
|
53
64
|
orbitRadius: number;
|
|
65
|
+
quality: BlobQuality;
|
|
66
|
+
tempo: number;
|
|
54
67
|
smoothK: number;
|
|
68
|
+
/** Smin merge variant — `quadratic` (default) | `circular` (rounder menisci). */
|
|
69
|
+
merge: BlobMerge;
|
|
55
70
|
noiseAmp: number;
|
|
56
71
|
noiseFreq: number;
|
|
57
72
|
noiseSpeed: number;
|
|
73
|
+
/**
|
|
74
|
+
* Domain-warp strength on the FBM edge displacement (0 = plain fbm, the
|
|
75
|
+
* pre-warp look; ~0.6 = a marbled organic membrane). Taste-first low default.
|
|
76
|
+
*/
|
|
77
|
+
warpAmp: number;
|
|
58
78
|
pulseFreq: number;
|
|
59
79
|
pulseAmp: number;
|
|
60
80
|
hueRange: number;
|
|
@@ -62,8 +82,36 @@ export interface BlobConfig {
|
|
|
62
82
|
brightnessShift: number;
|
|
63
83
|
colorNoiseFreq: number;
|
|
64
84
|
colorNoiseSpeed: number;
|
|
85
|
+
paletteStops: string[];
|
|
86
|
+
/** Warm-pearl rim sheen weight (0 = off). */
|
|
87
|
+
iridescence: number;
|
|
88
|
+
/** Base hue (degrees) the warm-biased cosine palette centres on. */
|
|
89
|
+
iridHue: number;
|
|
90
|
+
/** Animated-thickness scroll speed for the iridescent shimmer. */
|
|
91
|
+
iridSpeed: number;
|
|
92
|
+
/** Fast-SSS back-light weight. */
|
|
93
|
+
sssScale: number;
|
|
94
|
+
/** Fast-SSS exponent. */
|
|
95
|
+
sssPower: number;
|
|
96
|
+
/** Thickness-driven inner-luminosity (core glow) lift. */
|
|
97
|
+
coreGlow: number;
|
|
98
|
+
lit: boolean;
|
|
99
|
+
/** CSS color for the Fresnel rim tint (resolved through the ColorResolver). */
|
|
100
|
+
rimColor: string;
|
|
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;
|
|
65
109
|
pointerAttraction: number;
|
|
66
110
|
pointerStrength: number;
|
|
111
|
+
/** Velocity-driven volume-preserving squash-and-stretch magnitude (0 = off). */
|
|
112
|
+
stretch: number;
|
|
113
|
+
/** Click spring-impulse amplitude (a one-shot bouncy pulse on the body radius). */
|
|
114
|
+
clickImpulse: number;
|
|
67
115
|
eccentricity: number;
|
|
68
116
|
orbitSpeedScale: number;
|
|
69
117
|
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
|
|
@@ -20,6 +20,21 @@ export type CardTier = "wash" | "quiet" | "resting" | "floating" | "overlay";
|
|
|
20
20
|
* ANY tier; the retired `<CartoonCard>` was `tier="quiet" surface="cartoon"`.
|
|
21
21
|
*/
|
|
22
22
|
export type CardSurface = "glass" | "cartoon";
|
|
23
|
+
/**
|
|
24
|
+
* Specular catch-light register (AX.W09) — the pointer-anchored moving lens on a
|
|
25
|
+
* glass card.
|
|
26
|
+
*
|
|
27
|
+
* off — NO catch-light (default). The clean resting panel: a data/content
|
|
28
|
+
* `surface="glass"` card over any backplate reads flat — no centred
|
|
29
|
+
* white bloom, no pointer wiring. The §24 three-consumer-confirmed
|
|
30
|
+
* default for the common content-card case.
|
|
31
|
+
* subtle — the token-ladder lens: the pointer-anchored catch-light wakes on
|
|
32
|
+
* hover/active at the SUBTLE `--glass-specular-intensity-*` magnitudes.
|
|
33
|
+
* The explicit opt-in for a hero/chrome surface.
|
|
34
|
+
* full — the brighter pre-tune rung set, for the busy-backdrop case the recipe
|
|
35
|
+
* was originally authored over (a local intensity-token override).
|
|
36
|
+
*/
|
|
37
|
+
export type CardSpecular = "off" | "subtle" | "full";
|
|
23
38
|
interface Props extends PrimitiveProps {
|
|
24
39
|
/** Surface tier; selects one rung of the glass ladder. Default `resting`. */
|
|
25
40
|
tier?: CardTier;
|
|
@@ -33,11 +48,18 @@ interface Props extends PrimitiveProps {
|
|
|
33
48
|
/** `::after` paper-grain overlay. Off for scroll panes (the grain conflicts
|
|
34
49
|
* with overflow:auto repaints). */
|
|
35
50
|
grain?: boolean;
|
|
51
|
+
/** Specular catch-light register (AX.W09). `off` (default) keeps the card
|
|
52
|
+
* CLEAN — no pointer-anchored lens, clean over any backplate (the §24
|
|
53
|
+
* three-consumer-confirmed default for a data/content card). `subtle` wakes
|
|
54
|
+
* the pointer-anchored moving catch-light at the token-ladder magnitudes (a
|
|
55
|
+
* hero/chrome opt-in); `full` runs the brighter pre-tune rung set for a busy
|
|
56
|
+
* backdrop. Only `glass` surfaces wire it; `cartoon` owns its own sticker lift. */
|
|
57
|
+
specular?: CardSpecular;
|
|
36
58
|
class?: HTMLAttributes["class"];
|
|
37
59
|
}
|
|
38
|
-
declare var
|
|
60
|
+
declare var __VLS_10: {};
|
|
39
61
|
type __VLS_Slots = {} & {
|
|
40
|
-
default?: (props: typeof
|
|
62
|
+
default?: (props: typeof __VLS_10) => any;
|
|
41
63
|
};
|
|
42
64
|
declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
43
65
|
shadow: boolean;
|
|
@@ -45,6 +67,7 @@ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, i
|
|
|
45
67
|
tier: CardTier;
|
|
46
68
|
surface: CardSurface;
|
|
47
69
|
grain: boolean;
|
|
70
|
+
specular: CardSpecular;
|
|
48
71
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
49
72
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
50
73
|
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
|
+
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { default as Card, type CardTier, type CardSurface } from "./Card.vue";
|
|
1
|
+
export { default as Card, type CardTier, type CardSurface, type CardSpecular, } from "./Card.vue";
|
|
2
2
|
export { default as CardHeader } from "./CardHeader.vue";
|
|
3
3
|
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;
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
import { type HTMLAttributes } from "vue";
|
|
2
2
|
import { type ProgressRootProps } from "reka-ui";
|
|
3
3
|
/**
|
|
4
|
-
* Default progress variant —
|
|
5
|
-
* `translateX(-%)` intake-pulse. The plainest rung; no lifecycle
|
|
6
|
-
* (that lives on the gradient variant). The thin `Progress`
|
|
7
|
-
* here for `variant="default"`.
|
|
4
|
+
* Default progress variant — a `--progress-track` rail + a `--progress-fill`
|
|
5
|
+
* indicator with a `translateX(-%)` intake-pulse. The plainest rung; no lifecycle
|
|
6
|
+
* motion grammar (that lives on the gradient variant). The thin `Progress`
|
|
7
|
+
* dispatcher routes here for `variant="default"`.
|
|
8
|
+
*
|
|
9
|
+
* Token-read parity with the `gradient` variant (AX.W24 F1): the rail/indicator
|
|
10
|
+
* colour read `--progress-track`/`--progress-fill` (fallbacks `var(--secondary)`/
|
|
11
|
+
* `var(--primary)`) as Tailwind arbitrary properties — `bg-[var(--token,…)]` /
|
|
12
|
+
* `[background:var(--token,…)]` — NOT the `bg-secondary`/`bg-primary` utility
|
|
13
|
+
* classes. A `bg-primary` utility lives in `@layer utilities`, which ALWAYS
|
|
14
|
+
* outranks the `@layer components` `.glass-progress-rail` recipe regardless of
|
|
15
|
+
* source order, so a `:root { --progress-fill }` (or `.glass-progress-rail`'s
|
|
16
|
+
* token-set) override was a silent no-op on the default variant. Reading the token
|
|
17
|
+
* at source makes the `default` variant token-retintable for EVERY consumer.
|
|
8
18
|
*/
|
|
9
19
|
type __VLS_Props = ProgressRootProps & {
|
|
10
20
|
class?: HTMLAttributes["class"];
|
|
@@ -21,6 +21,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
|
|
|
21
21
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
22
22
|
"onUpdate:modelValue"?: ((payload: number[] | undefined) => any) | undefined;
|
|
23
23
|
onValueCommit?: ((payload: number[]) => any) | undefined;
|
|
24
|
-
}>, {
|
|
24
|
+
}>, {
|
|
25
|
+
keepDockOpen: boolean;
|
|
26
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
25
27
|
declare const _default: typeof __VLS_export;
|
|
26
28
|
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;
|
|
@@ -20,6 +20,25 @@ export type ColorResolver = (css: string) => [number, number, number];
|
|
|
20
20
|
* keeps them off the GPU). The equivalence canary asserts the COMPOSED path.
|
|
21
21
|
*/
|
|
22
22
|
export declare function oklchToLinear(stop: OklchStop): [number, number, number];
|
|
23
|
+
/**
|
|
24
|
+
* Warm-white catch-light → LINEAR-sRGB triple (AX.W11). The OKLCh-principled light
|
|
25
|
+
* tint the painterly relight (aurora's impasto sheen, the blob's `warmCream`) adds
|
|
26
|
+
* in LINEAR light — one shared OKLCh derivation both surfaces' light models route
|
|
27
|
+
* through instead of an eyeballed sRGB-ish literal. Just `oklchToLinear({L,C,h})`
|
|
28
|
+
* with a self-documenting name (the warm-light/cool-shadow temperature-coupling rule
|
|
29
|
+
* the literature prescribes is "the catch-light is a warm, near-white OKLCh anchor").
|
|
30
|
+
*
|
|
31
|
+
* Aurora's default anchor is `(0.985, 0.0125, 77.5°)` — the OKLCh anchor that
|
|
32
|
+
* reproduces the prior eyeballed `[1.0, 0.95, 0.88]` warm-white to <1e-3 linear (so
|
|
33
|
+
* the live relight reads identically; the seam fix is invisible to the eye). The
|
|
34
|
+
* blob's `warmCream` anchor is `(0.97, 0.03, 85°)` — a deeper, more-saturated cream;
|
|
35
|
+
* W15 re-routes the blob default through THIS helper at that anchor (the cross-surface
|
|
36
|
+
* unification: ONE OKLCh derive, each surface its own principled anchor).
|
|
37
|
+
*
|
|
38
|
+
* An invalid (non-finite) anchor THROWS — a library-internal contract violation, not
|
|
39
|
+
* a silent grey return (the fail-explicit precept; a stale anchor must surface loud).
|
|
40
|
+
*/
|
|
41
|
+
export declare function warmCatchLight(L: number, C: number, hDeg: number): [number, number, number];
|
|
23
42
|
/**
|
|
24
43
|
* OKLCh stop → GAMMA-sRGB in [0,1] — the blob's faithful-lift exit (DEC-AT-7's W7
|
|
25
44
|
* GAMMA space). value.js's `oklabToRgb255` returns gamma-encoded 0..255 (HSV/sRGB,
|
|
@@ -47,3 +66,53 @@ export declare function oklchStopToHex(s: OklchStop): string;
|
|
|
47
66
|
* gray default); value.js supplies its own, the demo story uses this one.
|
|
48
67
|
*/
|
|
49
68
|
export declare const defaultBlobColorResolver: ColorResolver;
|
|
69
|
+
/**
|
|
70
|
+
* Harmony schemes for the OKLCh palette derivers. Each maps the seed hue onto the
|
|
71
|
+
* derived stops differently:
|
|
72
|
+
* - `analogous` — neighbouring hues (seed ± a small spread).
|
|
73
|
+
* - `complementary` — seed → +180° along the LONG arc (stays saturated; the short
|
|
74
|
+
* arc cuts through grey on a warm→cool pair).
|
|
75
|
+
* - `split-complementary` — the two hues flanking the complement (±150/210).
|
|
76
|
+
* - `triad` — seed + its two 120° partners.
|
|
77
|
+
* - `tetradic` — seed + the three 90° partners.
|
|
78
|
+
* - `monochrome` — every stop holds the seed hue; only L and C travel.
|
|
79
|
+
*/
|
|
80
|
+
export type ColorHarmony = "analogous" | "complementary" | "split-complementary" | "triad" | "tetradic" | "monochrome";
|
|
81
|
+
/**
|
|
82
|
+
* Hue per harmony, walked across the ramp parameter `t` (0..1) THROUGH value.js's
|
|
83
|
+
* `interpolateHue` in the NORMALIZED-TURNS domain (`/360` in, `*360` out — value.js
|
|
84
|
+
* takes turns [0,1], NOT degrees; the `.5` short-arc threshold is a half-TURN). The
|
|
85
|
+
* single canonical hue-walk both backdrops consume.
|
|
86
|
+
*/
|
|
87
|
+
export declare function deriveHue(anchorHue: number, harmony: ColorHarmony, hueSpread: number, t: number): number;
|
|
88
|
+
/**
|
|
89
|
+
* Gamut-map one OklchStop through value.js's Ottosson core
|
|
90
|
+
* (`rawOklchToOklab → gamutMapOKLab → rawOklabToOklch`) with a bounded inward-chroma
|
|
91
|
+
* nudge for the over-1 hull-placement escape. Hue is preserved exactly; the result
|
|
92
|
+
* is in-sRGB to the pipeline's tolerance. The single gamut-mapper both backdrops use.
|
|
93
|
+
*/
|
|
94
|
+
export declare function gamutMapStop(stop: OklchStop): OklchStop;
|
|
95
|
+
/** Tuning for {@link deriveBlobPalette}. */
|
|
96
|
+
export interface DeriveBlobPaletteOptions {
|
|
97
|
+
/** Number of stops to produce. Default 3; clamped to [2, 4]. */
|
|
98
|
+
stopCount?: number;
|
|
99
|
+
/** Hue scheme across the stops. Default `analogous`. */
|
|
100
|
+
harmony?: ColorHarmony;
|
|
101
|
+
/** Total L travel across the stops, in OKLCh L units. Default ~0.18. */
|
|
102
|
+
lightnessSpread?: number;
|
|
103
|
+
/** Hue walk in degrees for analogous; ignored by monochrome. Default ~24. */
|
|
104
|
+
hueSpread?: number;
|
|
105
|
+
/** Midpoint chroma-bump (keeps a vivid pair off the grey midpoint). Default ~0.03. */
|
|
106
|
+
chromaBump?: number;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Seed ONE color into a harmonious, gamut-safe 2-4-stop OKLCh palette for the blob
|
|
110
|
+
* — the blob-side twin of `deriveAurora`, consuming the SHARED `ColorHarmony`
|
|
111
|
+
* vocabulary (no forked `deriveHue`). The body takes the deepest/most-saturated
|
|
112
|
+
* stop; satellites take the lighter in-family stops. Every stop is gamut-mapped.
|
|
113
|
+
* Deterministic + DOM-free (SSR-safe; `cssToOklch` parses via value.js).
|
|
114
|
+
*
|
|
115
|
+
* @param seed any CSS color string OR an `OklchStop` anchor.
|
|
116
|
+
* @param options stop count, harmony, spreads.
|
|
117
|
+
*/
|
|
118
|
+
export declare function deriveBlobPalette(seed: string | OklchStop, options?: DeriveBlobPaletteOptions): OklchStop[];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export * from "./useResizeObserver";
|
|
2
2
|
export * from "./useTouchGate";
|
|
3
3
|
export * from "./useTokenColor";
|
|
4
|
+
export * from "./useResolveTokenColor";
|
|
4
5
|
export * from "./useClipboard";
|
|
5
6
|
export * from "./useUserInvalidAria";
|
|
6
|
-
export * from "./useTextHighlight";
|
|
7
7
|
export * from "./useBreakpoint";
|
|
8
8
|
export * from "./useIdleReady";
|
|
9
9
|
export * from "./useViewportReady";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** A bounded LRU-ish cache for the un-wrap (clears wholesale past the cap). */
|
|
2
|
+
export interface ResolveTokenColorCache {
|
|
3
|
+
resolve: (css: string, el: HTMLElement | null) => string;
|
|
4
|
+
/** Drop every cached entry — call on a cascade change (dark-mode flip) so a token re-resolves. */
|
|
5
|
+
invalidate: () => void;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Un-wrap a `var(--token)` color to a concrete `rgb(...)` via a single cached cascade
|
|
9
|
+
* read; a literal (no `var()`) passes straight through. Paints `css` onto the element's
|
|
10
|
+
* `color` property — a `var(--token)` painted on a real CSS property resolves through
|
|
11
|
+
* the cascade, so `getComputedStyle(el).color` returns the concrete `rgb(...)` — then
|
|
12
|
+
* restores the prior value. SSR-safe (returns `css` unchanged when `window`/`el` are
|
|
13
|
+
* absent).
|
|
14
|
+
*
|
|
15
|
+
* @param css the color string (a `var(--token)` wrapper or a literal)
|
|
16
|
+
* @param el the element to resolve the cascade against (the host wrapper)
|
|
17
|
+
* @returns the concrete color string the `ColorResolver` can parse
|
|
18
|
+
*/
|
|
19
|
+
export declare function resolveTokenColor(css: string, el: HTMLElement | null): string;
|
|
20
|
+
/**
|
|
21
|
+
* Build a bounded cache around `resolveTokenColor` — the un-wrap (a forced sync
|
|
22
|
+
* reflow) runs once per unique color string. `invalidate()` drops every entry so a
|
|
23
|
+
* token re-resolves on a dark-mode flip (the SFC observes `<html>.class` and calls it).
|
|
24
|
+
*
|
|
25
|
+
* @param maxEntries the cache cap before a wholesale clear (default 256)
|
|
26
|
+
*/
|
|
27
|
+
export declare function createTokenColorCache(maxEntries?: number): ResolveTokenColorCache;
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export { useCanvas2D, useCanvasLifecycle } from "./useCanvas2D";
|
|
2
2
|
export type { Canvas2DFrame, Canvas2DHandle, Canvas2DOptions, Canvas2DSuspendReason, } from "./useCanvas2D";
|
|
3
|
+
export { resolveCanvasColor } from "./resolveCanvasColor";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a CSS custom property or color value to a Canvas2D-VALID
|
|
3
|
+
* `rgb()`/`rgba()` string.
|
|
4
|
+
*
|
|
5
|
+
* @param cssVar a `--custom-property` NAME (resolved as `var(<name>)`) OR a full
|
|
6
|
+
* CSS color value (`light-dark(...)`, `color-mix(...)`, `var(...)`, `oklch()`,
|
|
7
|
+
* `hsl()`, hex, a named color). A bare `--token` is wrapped as `var(--token)`.
|
|
8
|
+
* @param el an element ON the cascade — the canvas host or any descendant. The
|
|
9
|
+
* probe is appended here so it inherits `el`'s `color-scheme` + `--token`
|
|
10
|
+
* cascade; the resolved color reflects the live theme at `el`.
|
|
11
|
+
* @returns the browser-resolved `rgb()`/`rgba()` string, ready to hand straight
|
|
12
|
+
* to `ctx.strokeStyle`/`ctx.fillStyle`. On SSR / no-DOM, returns the input
|
|
13
|
+
* `cssVar` unchanged (the befitting-silent fallback).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* // A `light-dark()` `--foreground` token that Canvas2D would reject raw:
|
|
17
|
+
* ctx.strokeStyle = resolveCanvasColor("--foreground", canvas);
|
|
18
|
+
* // → "rgb(28, 25, 23)" in light, "rgb(250, 250, 249)" in dark — NOT black.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveCanvasColor(cssVar: string, el: HTMLElement): string;
|