@mkbabb/glass-ui 3.7.0 → 3.9.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/README.md +1 -6
- package/dist/CardAction-DuArVky-.js +157 -0
- package/dist/{CommandShortcut-CY0aQTz5.js → CommandShortcut-CefCj5mt.js} +7 -7
- package/dist/{ContextMenuSubContent-BeDz7G6f.js → ContextMenuSubContent-Bhg4f5jX.js} +3 -3
- package/dist/{DataTable-gtPOLZvl.js → DataTable-CUHMukiQ.js} +4 -4
- package/dist/DeckProgress-Dmk4_AKN.js +23 -0
- package/dist/{DialogContent-DG1YMR-P.js → DialogContent-BRkT1cjP.js} +3 -3
- package/dist/{DialogFooter-BCIaDP15.js → DialogFooter-Gprw8H_A.js} +1 -1
- package/dist/{HoverPopover-DXpOEw1P.js → HoverPopover-2LOIW34a.js} +1 -1
- package/dist/{IconTooltip-Cu86JR4e.js → IconTooltip-yefK7cJc.js} +1 -1
- package/dist/{MetricBadge-D-bRaQUD.js → MetricBadge-lTc002u2.js} +1 -1
- package/dist/{Notification-B5WHP3_1.js → Notification-BxK8LZMw.js} +1 -1
- package/dist/{NumberFieldContent-CLNVR1iY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
- package/dist/{PopoverContent-F1bWnYoh.js → PopoverContent-BId6ggf_.js} +1 -1
- package/dist/{Progress-c4vo4ALi.js → Progress-iEuD9pxG.js} +4 -4
- package/dist/{ScrollingText-BEp377U5.js → ScrollingText-BPP84wKo.js} +2 -2
- package/dist/{SelectScrollDownButton-DAo5NmY_.js → SelectScrollDownButton-T32cVFeM.js} +4 -4
- package/dist/{SelectSeparator-COFMJGng.js → SelectSeparator-C4Ql0gzV.js} +1 -1
- package/dist/{TabsList-COqIdW7i.js → TabsList-B8CVOQPC.js} +2 -2
- package/dist/{Toaster-BMaeziJJ.js → Toaster-1rYWrmAm.js} +1 -1
- package/dist/{ToggleGroupItem-C-AIkBUw.js → ToggleGroupItem-Cev4pOVK.js} +5 -5
- package/dist/animated-digit.js +1 -1
- package/dist/api/index.d.ts +5 -3
- package/dist/aurora.js +339 -408
- package/dist/{badge-DHQrc_GQ.js → badge-BvwvT50i.js} +4 -4
- package/dist/badge.js +1 -1
- package/dist/{button-CAywcrhO.js → button-DN39cGqL.js} +13 -12
- package/dist/button.js +1 -1
- package/dist/canvas.d.ts +1 -0
- package/dist/canvas.js +3 -0
- package/dist/card.js +1 -1
- package/dist/carousel.js +106 -105
- package/dist/collapsible.js +1 -1
- package/dist/{color-DjJCAQ6f.js → color-8jBjWiJ6.js} +22 -14
- package/dist/color.js +2 -2
- package/dist/command.js +1 -1
- package/dist/compile-DAjIoEy2.js +158 -0
- package/dist/components/custom/aurora/composables/atoms.d.ts +90 -25
- package/dist/components/custom/aurora/composables/color.d.ts +0 -12
- package/dist/components/custom/aurora/composables/uniformBridge.d.ts +34 -23
- package/dist/components/custom/aurora/constants/presets.d.ts +10 -7
- package/dist/components/custom/aurora/constants/renderMode.d.ts +22 -0
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
- 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/mediums.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/index.d.ts +3 -3
- package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +1 -1
- 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/DockSeparator.vue.d.ts +3 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +57 -67
- package/dist/components/custom/dock/composables/dockContext.d.ts +7 -0
- 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 +4 -1
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +13 -0
- package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +23 -5
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +2 -0
- package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +2 -0
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +20 -5
- 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 +8 -0
- package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +92 -0
- package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +49 -0
- package/dist/components/custom/tabs/index.d.ts +2 -5
- package/dist/components/ui/button/index.d.ts +1 -1
- package/dist/components/ui/card/Card.vue.d.ts +28 -10
- package/dist/components/ui/card/index.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
- package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +3 -4
- 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/slider/index.d.ts +14 -7
- package/dist/components/ui/tabs/TabsList.vue.d.ts +1 -1
- package/dist/composables/color/index.d.ts +19 -0
- package/dist/composables/context/createContext.d.ts +1 -1
- 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/index.d.ts +3 -1
- package/dist/composables/glass/useSpecularTracking.d.ts +33 -0
- package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +1 -1
- package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +4 -0
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +1 -1
- package/dist/composables/motion/core/index.d.ts +1 -0
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +2 -2
- package/dist/constellation.js +143 -74
- package/dist/context-menu.js +2 -2
- package/dist/controls.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/dock.js +468 -354
- package/dist/{dockContext-DLgrVWsU.js → dockContext-BKeIMmNk.js} +1 -1
- package/dist/dom.js +6 -6
- package/dist/{dropdown-menu-BWpwutt0.js → dropdown-menu-D77jX6Df.js} +4 -4
- package/dist/dropdown-menu.js +1 -1
- package/dist/fonts/README.md +26 -18
- package/dist/forms.js +5 -5
- package/dist/fourier-field.js +35 -35
- package/dist/glass-panel.js +7 -7
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +154 -169
- package/dist/goo-blob.js +361 -274
- 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 -2
- package/dist/instrument-chassis.js +1 -1
- package/dist/instrument-rail.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +5 -5
- package/dist/{menuItemVariants-B4eFR5Ix.js → menuItemVariants-CCoBNkU5.js} +1 -1
- package/dist/metric-badge.js +1 -1
- package/dist/metric-stack.js +1 -1
- package/dist/motion-core.js +65 -65
- package/dist/motion.js +1 -1
- 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 +2 -2
- package/dist/reactive.js +2 -2
- package/dist/resolveCanvasColor-BBiYfp8g.js +11 -0
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +9 -9
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/{sheet-Cv1uO-Gq.js → sheet-VZEtNFvO.js} +2 -2
- package/dist/sheet.js +1 -1
- package/dist/slider-DC2mwuoe.js +142 -0
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +2 -2
- package/dist/status-dot.js +17 -16
- package/dist/styles/animations.css +6 -2
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock/density.css +230 -0
- package/dist/styles/dock/layer-group.css +263 -0
- package/dist/styles/dock/layers.css +355 -0
- package/dist/styles/dock/morph.css +244 -0
- package/dist/styles/dock/overflow.css +201 -0
- package/dist/styles/dock/shell.css +457 -0
- package/dist/styles/dock-controls.css +187 -50
- package/dist/styles/dock.css +65 -1181
- package/dist/styles/fonts.css +0 -25
- package/dist/styles/glass.css +482 -102
- package/dist/styles/index.css +12 -11
- package/dist/styles/theme.css +60 -2
- package/dist/styles/tokens.css +625 -72
- package/dist/styles/typography.css +52 -69
- package/dist/styles/utilities.css +91 -40
- package/dist/styles/view-transition.css +12 -40
- package/dist/switch.js +1 -1
- package/dist/tabs.js +183 -152
- 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/{useCanvas2D-C31yfUGY.js → useCanvas2D-ClrQuZtp.js} +2 -1
- package/dist/{useConfiguratorState-B24TcgIn.js → useConfiguratorState-DxAqksK6.js} +24 -13
- package/dist/useResolveTokenColor-r9pnNjqK.js +24 -0
- package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
- package/dist/{useTextHighlight-aMPdEpkq.js → useTextHighlight-DON84L8w.js} +1 -1
- package/dist/{useTouchGate-YQRwyUGU.js → useTouchGate-WFyJYsth.js} +1 -1
- package/dist/vReveal-CqaCz_mC.js +44 -0
- package/dist/watercolor-dot.js +1 -1
- package/package.json +67 -36
- package/src/fonts/README.md +26 -18
- package/src/styles/animations.css +6 -2
- package/src/styles/dock/density.css +230 -0
- package/src/styles/dock/layer-group.css +263 -0
- package/src/styles/dock/layers.css +355 -0
- package/src/styles/dock/morph.css +244 -0
- package/src/styles/dock/overflow.css +201 -0
- package/src/styles/dock/shell.css +457 -0
- package/src/styles/dock-controls.css +187 -50
- package/src/styles/dock.css +65 -1181
- package/src/styles/fonts.css +0 -25
- package/src/styles/glass.css +482 -102
- package/src/styles/index.css +12 -11
- package/src/styles/theme.css +60 -2
- package/src/styles/tokens.css +625 -72
- package/src/styles/typography.css +52 -69
- package/src/styles/utilities.css +91 -40
- package/src/styles/view-transition.css +12 -40
- package/dist/CardAction-D8nSE62a.js +0 -163
- package/dist/DiscoGlyph-ZoBYpoxI.js +0 -132
- package/dist/GlyphFace-Ce_oe3tM.js +0 -51
- package/dist/UnderlineTabs-D_c1iYo-.js +0 -39
- package/dist/compile-iM4IUB66.js +0 -158
- package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +0 -7
- package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +0 -4
- package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +0 -58
- package/dist/components/custom/disco-glyph/index.d.ts +0 -1
- package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +0 -36
- package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +0 -28
- package/dist/components/custom/glass-carousel/index.d.ts +0 -4
- package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +0 -30
- package/dist/components/custom/glyph-face/GlyphFace.vue.d.ts +0 -64
- package/dist/components/custom/glyph-face/index.d.ts +0 -2
- package/dist/components/custom/glyph-face/keys.d.ts +0 -9
- package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +0 -73
- package/dist/components/custom/responsive-tabs/index.d.ts +0 -2
- package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +0 -27
- package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +0 -60
- package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +0 -20
- package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +0 -39
- package/dist/disco-glyph.d.ts +0 -1
- package/dist/disco-glyph.js +0 -2
- package/dist/fonts/fraunces/fraunces-latin.woff2 +0 -0
- package/dist/glass-carousel.d.ts +0 -1
- package/dist/glass-carousel.js +0 -214
- package/dist/glyph-face.d.ts +0 -1
- package/dist/glyph-face.js +0 -3
- package/dist/keys-Dyf_uTs5.js +0 -9
- package/dist/responsive-tabs.d.ts +0 -1
- package/dist/responsive-tabs.js +0 -95
- package/dist/slider-BA9wIs5e.js +0 -130
- package/dist/styles/disco-glyph.css +0 -26
- package/dist/styles/glyph-face.css +0 -92
- package/dist/useViewTransition-DaN5Zrox.js +0 -21
- package/dist/vReveal-BE2TsPoR.js +0 -24
- package/src/fonts/fraunces/fraunces-latin.woff2 +0 -0
- package/src/styles/disco-glyph.css +0 -26
- package/src/styles/glyph-face.css +0 -92
- /package/dist/{CollapsibleContent-D7UNsXQr.js → CollapsibleContent-CP9qF1v4.js} +0 -0
- /package/dist/{ContextMenuContent-DGKZX1Du.js → ContextMenuContent-DDa0v27s.js} +0 -0
- /package/dist/{HoverCardContent-Bn0UBMY9.js → HoverCardContent-B6CcQ8He.js} +0 -0
- /package/dist/{InstrumentChassis-BLJBl1BW.js → InstrumentChassis-C2f6cBaQ.js} +0 -0
- /package/dist/{InstrumentRail-BElFwKyt.js → InstrumentRail-CUJ05YVG.js} +0 -0
- /package/dist/{Label-DBc7bKzZ.js → Label-zRfbQdCn.js} +0 -0
- /package/dist/{ModalOverlay-D1VrWyoi.js → ModalOverlay-B1GkAjNb.js} +0 -0
- /package/dist/{PaperBackdrop-DCGoGatv.js → PaperBackdrop-CqwjnfLv.js} +0 -0
- /package/dist/{SelectGroup-BcaFjvP4.js → SelectGroup-BFiod7X2.js} +0 -0
- /package/dist/{Separator-DZyqsCum.js → Separator-D7sD7RKj.js} +0 -0
- /package/dist/{Switch-2rsAtDfA.js → Switch-LDKLmmgx.js} +0 -0
- /package/dist/{TooltipProvider-CD2IXfRv.js → TooltipProvider-CmZzCuaG.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-gLzyemvl.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
- /package/dist/composables/{dom → motion}/useTextHighlight.d.ts +0 -0
- /package/dist/{createContext-CvNyBk4o.js → createContext-B44Sah_H.js} +0 -0
- /package/dist/{useGlassRenderer-HebgSEgN.js → useGlassRenderer-5I0YkI4t.js} +0 -0
- /package/dist/{useInterval-D3USn0yc.js → useInterval-Dsmqwi03.js} +0 -0
- /package/dist/{useResizeObserver-CSyxGxIX.js → useResizeObserver-CWCbk5Px.js} +0 -0
- /package/dist/{useSpringMount-LRZqJTaF.js → useSpringMount-BJSHcLl3.js} +0 -0
- /package/dist/{useTimer-DEJonOZa.js → useTimer-3xqf_54b.js} +0 -0
- /package/dist/{useUserInvalidAria-CQKjEfwP.js → useUserInvalidAria-DoJKMZ3s.js} +0 -0
- /package/dist/{useViewportReady-K96m-Mdv.js → useViewportReady-RIr5Wgkh.js} +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type HTMLAttributes } from "vue";
|
|
2
|
+
/** The canonical tab/option shape — one descriptor across all three variants. */
|
|
3
|
+
export interface SegmentedTabOption {
|
|
4
|
+
label: string;
|
|
5
|
+
value: string;
|
|
6
|
+
icon?: string;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
tooltip?: string;
|
|
9
|
+
}
|
|
10
|
+
/** The three indicator chromes. `segmented` (default) = the muted pill-slider;
|
|
11
|
+
* `pill` = the solid `--foreground` pill; `underline` = the hairline rule. */
|
|
12
|
+
export type SegmentedTabsVariant = "segmented" | "pill" | "underline";
|
|
13
|
+
export interface SegmentedTabsResponsive {
|
|
14
|
+
/**
|
|
15
|
+
* CSS length consumed inside `(min-width: <breakpoint>)`. BELOW it the
|
|
16
|
+
* strip collapses to a `<Select>`; at/above it renders the tab strip.
|
|
17
|
+
* Defaults to `"640px"` (Tailwind `sm:`).
|
|
18
|
+
*/
|
|
19
|
+
breakpoint?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Optional subset shown in the desktop strip (the mobile Select keeps the
|
|
22
|
+
* full option list). Falls back to `options`.
|
|
23
|
+
*/
|
|
24
|
+
desktopOptions?: SegmentedTabOption[] | null;
|
|
25
|
+
/** Accessible name for the mobile `<SelectTrigger>`. */
|
|
26
|
+
ariaLabel?: string;
|
|
27
|
+
/** Class merged onto the mobile `<SelectTrigger>` only. */
|
|
28
|
+
triggerClass?: HTMLAttributes["class"];
|
|
29
|
+
}
|
|
30
|
+
export interface SegmentedTabsProps {
|
|
31
|
+
options: SegmentedTabOption[];
|
|
32
|
+
/**
|
|
33
|
+
* Indicator chrome — `segmented` (DEFAULT, the pill-slider over a muted
|
|
34
|
+
* track), `pill` (solid foreground pill), `underline` (the hairline rule).
|
|
35
|
+
*/
|
|
36
|
+
variant?: SegmentedTabsVariant;
|
|
37
|
+
/**
|
|
38
|
+
* Multi-select — when true the surface mutates as a ToggleGroup (N
|
|
39
|
+
* simultaneous pressed buttons, `role="group"`). Only valid on the
|
|
40
|
+
* `segmented`/`pill` variants; `underline` is panel-nav (single-select).
|
|
41
|
+
*/
|
|
42
|
+
multiSelect?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Tab-row overflow handling.
|
|
45
|
+
* - `"none"` (default) — inline-grid; tabs share width and clip.
|
|
46
|
+
* - `"scroll"` — flex row with intrinsic widths + edge fades; never clips.
|
|
47
|
+
* - `"auto"` — flex row with intrinsic widths + plain horizontal scroll.
|
|
48
|
+
*/
|
|
49
|
+
overflow?: "none" | "scroll" | "auto";
|
|
50
|
+
/**
|
|
51
|
+
* Responsive collapse — below the breakpoint the strip becomes a `<Select>`
|
|
52
|
+
* (subsumes the former standalone ResponsiveTabs). `true` uses defaults;
|
|
53
|
+
* an object tunes the breakpoint / desktop subset / accessible name.
|
|
54
|
+
*/
|
|
55
|
+
responsive?: boolean | SegmentedTabsResponsive;
|
|
56
|
+
class?: HTMLAttributes["class"];
|
|
57
|
+
}
|
|
58
|
+
type __VLS_Props = SegmentedTabsProps;
|
|
59
|
+
type __VLS_ModelProps = {
|
|
60
|
+
modelValue: string | string[];
|
|
61
|
+
};
|
|
62
|
+
type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
|
|
63
|
+
declare var __VLS_50: {
|
|
64
|
+
option: SegmentedTabOption;
|
|
65
|
+
active: boolean;
|
|
66
|
+
}, __VLS_58: {
|
|
67
|
+
option: SegmentedTabOption;
|
|
68
|
+
active: boolean;
|
|
69
|
+
};
|
|
70
|
+
type __VLS_Slots = {} & {
|
|
71
|
+
option?: (props: typeof __VLS_50) => any;
|
|
72
|
+
} & {
|
|
73
|
+
option?: (props: typeof __VLS_58) => any;
|
|
74
|
+
};
|
|
75
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
76
|
+
"update:modelValue": (value: string | string[]) => any;
|
|
77
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
78
|
+
"onUpdate:modelValue"?: ((value: string | string[]) => any) | undefined;
|
|
79
|
+
}>, {
|
|
80
|
+
overflow: "none" | "scroll" | "auto";
|
|
81
|
+
variant: SegmentedTabsVariant;
|
|
82
|
+
responsive: boolean | SegmentedTabsResponsive;
|
|
83
|
+
multiSelect: boolean;
|
|
84
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
85
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
86
|
+
declare const _default: typeof __VLS_export;
|
|
87
|
+
export default _default;
|
|
88
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
89
|
+
new (): {
|
|
90
|
+
$slots: S;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type Ref, type ComputedRef } from "vue";
|
|
2
|
+
import type { SegmentedTabOption } from "../SegmentedTabs.vue";
|
|
3
|
+
/**
|
|
4
|
+
* Package-private composable for `SegmentedTabs.vue` — owns the JS-measured
|
|
5
|
+
* indicator path: the single- and multi-select slider styles, the offset
|
|
6
|
+
* measure, the model/options re-measure watchers, and the ResizeObserver
|
|
7
|
+
* lifecycle. It ALSO owns the AX.W53 travel-squish: a velocity-driven,
|
|
8
|
+
* volume-preserving `--stretch` scalar the active indicator reads so it
|
|
9
|
+
* STRETCHES along its travel axis as it glides between tabs and settles to fit
|
|
10
|
+
* (the Material 3 ELASTIC / Apple Liquid-Glass register, capped LOW).
|
|
11
|
+
*
|
|
12
|
+
* The composable is the SOLE writer of the JS slider styles. The measure path
|
|
13
|
+
* runs only on the multi-select OR `@supports not (anchor)` branch — on an
|
|
14
|
+
* anchor-supporting single-select engine the CSS `anchor-name` owns the slider
|
|
15
|
+
* position and that path stays dormant (no RO is constructed, no measure runs).
|
|
16
|
+
* The squish is independent of the position path: it is a transient `--stretch`
|
|
17
|
+
* write driven on EVERY selection (anchor or JS engine) and reads from
|
|
18
|
+
* `--tab-indicator-max-stretch`, so the elastic warp lands on all three
|
|
19
|
+
* variants. Honors `prefers-reduced-motion` (no squish under reduce).
|
|
20
|
+
*/
|
|
21
|
+
export interface UseTabIndicatorParams {
|
|
22
|
+
/** The container scroller root (observed by the ResizeObserver). */
|
|
23
|
+
containerRef: Ref<HTMLElement | null>;
|
|
24
|
+
/** The active indicator element (the squish `--stretch` write target). */
|
|
25
|
+
indicatorRef: Ref<HTMLElement | null>;
|
|
26
|
+
/** Per-option button refs, index-aligned to `options`. */
|
|
27
|
+
buttonRefs: Ref<HTMLElement[]>;
|
|
28
|
+
/** The tab options (re-measure on change). */
|
|
29
|
+
options: ComputedRef<SegmentedTabOption[]>;
|
|
30
|
+
/** The defineModel value (re-measure on change). */
|
|
31
|
+
model: Ref<string | string[] | undefined>;
|
|
32
|
+
/** True for the multi-select path. */
|
|
33
|
+
multiSelect: ComputedRef<boolean>;
|
|
34
|
+
/** Whether the browser supports CSS anchor positioning. */
|
|
35
|
+
anchorSupported: boolean;
|
|
36
|
+
/** True when ANY JS slider writer is live (gates RO/watcher attach). */
|
|
37
|
+
jsSliderActive: ComputedRef<boolean>;
|
|
38
|
+
/** The active option values (used by the multi-slider measure). */
|
|
39
|
+
activeValues: ComputedRef<string[]>;
|
|
40
|
+
}
|
|
41
|
+
export interface UseTabIndicatorReturn {
|
|
42
|
+
/** Inline style for the single-select JS slider. */
|
|
43
|
+
singleSliderStyle: Ref<Record<string, string>>;
|
|
44
|
+
/** Inline styles for each active multi-select slider, keyed by value. */
|
|
45
|
+
multiSliderStyles: Ref<Record<string, Record<string, string>>>;
|
|
46
|
+
/** Imperatively kick the travel-squish on a selection at `idx`. */
|
|
47
|
+
squishOnTravel: (toIdx: number) => void;
|
|
48
|
+
}
|
|
49
|
+
export declare function useTabIndicator(params: UseTabIndicatorParams): UseTabIndicatorReturn;
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
export { default as
|
|
2
|
-
export {
|
|
3
|
-
export { default as BouncyToggle } from "./BouncyToggle.vue";
|
|
4
|
-
export type { TabOption } from "./UnderlineTabs.vue";
|
|
5
|
-
export type { ToggleOption, BouncyToggleProps } from "./BouncyToggle.vue";
|
|
1
|
+
export { default as SegmentedTabs } from "./SegmentedTabs.vue";
|
|
2
|
+
export type { SegmentedTabOption, SegmentedTabsVariant, SegmentedTabsProps, SegmentedTabsResponsive, } from "./SegmentedTabs.vue";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type VariantProps } from 'class-variance-authority';
|
|
2
2
|
export { default as Button } from './Button.vue';
|
|
3
3
|
export declare const buttonVariants: (props?: ({
|
|
4
|
-
variant?: "link" | "default" | "primary-audacious" | "gold-audacious" | "destructive" | "outline" | "secondary" | "accent" | "ghost" | "glass" | "glass-wash" | "ai" | null | undefined;
|
|
4
|
+
variant?: "link" | "default" | "solid" | "primary-audacious" | "gold-audacious" | "destructive" | "outline" | "secondary" | "accent" | "ghost" | "glass" | "glass-wash" | "ai" | null | undefined;
|
|
5
5
|
size?: "default" | "xs" | "sm" | "lg" | "icon" | "icon-sm" | null | undefined;
|
|
6
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
export type ButtonVariants = VariantProps<typeof buttonVariants>;
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { type HTMLAttributes } from "vue";
|
|
2
2
|
import { type PrimitiveProps } from "reka-ui";
|
|
3
3
|
/**
|
|
4
|
-
* The
|
|
5
|
-
*
|
|
4
|
+
* The glass surface ladder. Maps 1:1 to `.glass-{tier}` in glass.css after the
|
|
5
|
+
* v0.8.0 R3-spec rename:
|
|
6
6
|
*
|
|
7
7
|
* wash — lightest (~0.30α) : inline workspace chrome, scroll-pane host
|
|
8
8
|
* quiet — light (~0.50α) : ambient panels, secondary surfaces
|
|
9
9
|
* resting — canonical (~0.65α) : the protagonist plate (default)
|
|
10
10
|
* floating — heavy (~0.80α) : popover-class, login surfaces
|
|
11
11
|
* overlay — heaviest (~0.95α + blur) : modal-on-modal, dialog over content
|
|
12
|
+
* opaque — `--glass-level:0` escape : the solid-card opt-out (AX.W54), maps to
|
|
13
|
+
* `.glass-opaque` through the same `glass-${tier}` rung as the rest
|
|
12
14
|
*/
|
|
13
|
-
export type CardTier = "wash" | "quiet" | "resting" | "floating" | "overlay";
|
|
15
|
+
export type CardTier = "wash" | "quiet" | "resting" | "floating" | "overlay" | "opaque";
|
|
14
16
|
/**
|
|
15
17
|
* Surface decoration register — orthogonal to `tier`/`shadow`/`grain`.
|
|
16
18
|
*
|
|
@@ -20,6 +22,21 @@ export type CardTier = "wash" | "quiet" | "resting" | "floating" | "overlay";
|
|
|
20
22
|
* ANY tier; the retired `<CartoonCard>` was `tier="quiet" surface="cartoon"`.
|
|
21
23
|
*/
|
|
22
24
|
export type CardSurface = "glass" | "cartoon";
|
|
25
|
+
/**
|
|
26
|
+
* Specular catch-light register (AX.W09) — the pointer-anchored moving lens on a
|
|
27
|
+
* glass card.
|
|
28
|
+
*
|
|
29
|
+
* off — NO catch-light (default). The clean resting panel: a data/content
|
|
30
|
+
* `surface="glass"` card over any backplate reads flat — no centred
|
|
31
|
+
* white bloom, no pointer wiring. The §24 three-consumer-confirmed
|
|
32
|
+
* default for the common content-card case.
|
|
33
|
+
* subtle — the token-ladder lens: the pointer-anchored catch-light wakes on
|
|
34
|
+
* hover/active at the SUBTLE `--glass-specular-intensity-*` magnitudes.
|
|
35
|
+
* The explicit opt-in for a hero/chrome surface.
|
|
36
|
+
* full — the brighter pre-tune rung set, for the busy-backdrop case the recipe
|
|
37
|
+
* was originally authored over (a local intensity-token override).
|
|
38
|
+
*/
|
|
39
|
+
export type CardSpecular = "off" | "subtle" | "full";
|
|
23
40
|
interface Props extends PrimitiveProps {
|
|
24
41
|
/** Surface tier; selects one rung of the glass ladder. Default `resting`. */
|
|
25
42
|
tier?: CardTier;
|
|
@@ -33,12 +50,13 @@ interface Props extends PrimitiveProps {
|
|
|
33
50
|
/** `::after` paper-grain overlay. Off for scroll panes (the grain conflicts
|
|
34
51
|
* with overflow:auto repaints). */
|
|
35
52
|
grain?: boolean;
|
|
36
|
-
/**
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
|
|
53
|
+
/** Specular catch-light register (AX.W09). `off` (default) keeps the card
|
|
54
|
+
* CLEAN — no pointer-anchored lens, clean over any backplate (the §24
|
|
55
|
+
* three-consumer-confirmed default for a data/content card). `subtle` wakes
|
|
56
|
+
* the pointer-anchored moving catch-light at the token-ladder magnitudes (a
|
|
57
|
+
* hero/chrome opt-in); `full` runs the brighter pre-tune rung set for a busy
|
|
58
|
+
* backdrop. Only `glass` surfaces wire it; `cartoon` owns its own sticker lift. */
|
|
59
|
+
specular?: CardSpecular;
|
|
42
60
|
class?: HTMLAttributes["class"];
|
|
43
61
|
}
|
|
44
62
|
declare var __VLS_10: {};
|
|
@@ -51,7 +69,7 @@ declare const __VLS_base: import("vue").DefineComponent<Props, {}, {}, {}, {}, i
|
|
|
51
69
|
tier: CardTier;
|
|
52
70
|
surface: CardSurface;
|
|
53
71
|
grain: boolean;
|
|
54
|
-
|
|
72
|
+
specular: CardSpecular;
|
|
55
73
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
56
74
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
57
75
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,4 +1,4 @@
|
|
|
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";
|
|
@@ -10,7 +10,7 @@ type __VLS_Slots = {} & {
|
|
|
10
10
|
};
|
|
11
11
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
12
12
|
size: "default" | "xs" | "sm" | "lg" | "icon" | "icon-sm" | null;
|
|
13
|
-
variant: "link" | "default" | "primary-audacious" | "gold-audacious" | "destructive" | "outline" | "secondary" | "accent" | "ghost" | "glass" | "glass-wash" | "ai" | null;
|
|
13
|
+
variant: "link" | "default" | "solid" | "primary-audacious" | "gold-audacious" | "destructive" | "outline" | "secondary" | "accent" | "ghost" | "glass" | "glass-wash" | "ai" | null;
|
|
14
14
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
15
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
16
16
|
declare const _default: typeof __VLS_export;
|
|
@@ -10,7 +10,7 @@ type __VLS_Slots = {} & {
|
|
|
10
10
|
};
|
|
11
11
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
12
12
|
size: "default" | "xs" | "sm" | "lg" | "icon" | "icon-sm" | null;
|
|
13
|
-
variant: "link" | "default" | "primary-audacious" | "gold-audacious" | "destructive" | "outline" | "secondary" | "accent" | "ghost" | "glass" | "glass-wash" | "ai" | null;
|
|
13
|
+
variant: "link" | "default" | "solid" | "primary-audacious" | "gold-audacious" | "destructive" | "outline" | "secondary" | "accent" | "ghost" | "glass" | "glass-wash" | "ai" | null;
|
|
14
14
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
15
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
16
16
|
declare const _default: typeof __VLS_export;
|
|
@@ -2,14 +2,13 @@ import type { HTMLAttributes } from "vue";
|
|
|
2
2
|
/**
|
|
3
3
|
* GlassCarouselPager — audacious carousel pager substrate.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
* row from `containers/glass-carousel.vue:127-157` into a canonical primitive.
|
|
5
|
+
* A canonical chevron-prev + counter-pill + chevron-next + state-toggle row.
|
|
7
6
|
* Composes `<Button variant="outline" size="icon">` chevrons with a glass-card
|
|
8
7
|
* counter pill and an optional toggle slot for collapse/expand affordances.
|
|
9
8
|
*
|
|
10
9
|
* Standalone: accepts `:index` / `:total` props and emits `@prev` / `@next` /
|
|
11
|
-
* `@select(i)`, so it composes
|
|
12
|
-
*
|
|
10
|
+
* `@select(i)`, so it composes with `<Carousel>` (embla — wire via
|
|
11
|
+
* `useCarousel`) or any manual-state host.
|
|
13
12
|
*/
|
|
14
13
|
type __VLS_Props = {
|
|
15
14
|
/** Current zero-based slide index. */
|
|
@@ -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;
|
|
@@ -9,15 +9,22 @@ export { default as Slider } from './Slider.vue';
|
|
|
9
9
|
* `.slider-thumb` paint. The size axis lifts pure geometry via CSS vars
|
|
10
10
|
* (`--slider-track-height`, `--slider-thumb-size`) the SFC defaults read.
|
|
11
11
|
*
|
|
12
|
-
* Exactly two canonical recipes ship:
|
|
13
|
-
* standard — the
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* the
|
|
17
|
-
*
|
|
12
|
+
* Exactly two canonical recipes ship (AX.W59 redesign):
|
|
13
|
+
* standard — the INTEGRATED-CYLINDER glass slider: the fill is ONE
|
|
14
|
+
* continuous glass rounded-pill (W52 backdrop + edge rim, tinted
|
|
15
|
+
* to `--primary`) pulled left/right; its rounded LEADING edge IS
|
|
16
|
+
* the grab. There is NO visible demarcation between thumb and
|
|
17
|
+
* fill — the reka SliderThumb stays mounted (a11y/keyboard/focus)
|
|
18
|
+
* but is styled as the cylinder's slim leading CAP (a faint
|
|
19
|
+
* specular grip, not a detached circle). Halo-on-state + the iOS
|
|
20
|
+
* press spring. This is the general-purpose glass scrubber and
|
|
21
|
+
* the default.
|
|
22
|
+
* spectrum — the value.js gradient-track color slider: a tall capsule whose
|
|
18
23
|
* background is a consumer-supplied `--slider-track-bg`
|
|
19
24
|
* linear-gradient (the LCH/hue ramp), a transparent range, and a
|
|
20
|
-
*
|
|
25
|
+
* SQUIRCLE thumb the HEIGHT of the track (the iOS color-picker
|
|
26
|
+
* idiom — `corner-shape: superellipse()` via `--corner-shape-thumb`,
|
|
27
|
+
* @supports-gated over a `--radius-lg` round fallback). This is the
|
|
21
28
|
* aurora/blob color-picking surface.
|
|
22
29
|
*
|
|
23
30
|
* Sizes:
|
|
@@ -5,7 +5,7 @@ type __VLS_Props = TabsListProps & {
|
|
|
5
5
|
/**
|
|
6
6
|
* AW.W25 — render the spring `TabsIndicator` pill behind the triggers so
|
|
7
7
|
* the base default `<Tabs>` matches its own indicator primitive (the
|
|
8
|
-
* polished pill previously lived only in custom
|
|
8
|
+
* polished pill previously lived only in the custom SegmentedTabs; the base
|
|
9
9
|
* under-delivered vs its own `TabsIndicator.vue`). Default `true`. Set
|
|
10
10
|
* `:indicator="false"` for a list that drives its own active-state vocab.
|
|
11
11
|
*/
|
|
@@ -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,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type InjectionKey } from "vue";
|
|
2
2
|
/**
|
|
3
3
|
* Domain-neutral provide/inject DI factory pair — the single source the dock,
|
|
4
|
-
* dock-layer-group, toggle-group, sortable-list,
|
|
4
|
+
* dock-layer-group, toggle-group, sortable-list, and configurator
|
|
5
5
|
* contexts collapse onto (AV.W14). Generalizes the four hand-rolled
|
|
6
6
|
* provide/inject/throw triplets into ONE typed factory so a `*_KEY:
|
|
7
7
|
* InjectionKey<T>` declaration + its `provide`/`use`/throw boilerplate is never
|
|
@@ -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;
|
|
@@ -45,4 +45,18 @@ export interface Canvas2DHandle {
|
|
|
45
45
|
/** The live `prefers-reduced-motion: reduce` state (consumers read it to skip stepping). */
|
|
46
46
|
readonly reducedMotion: boolean;
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
/**
|
|
49
|
+
* The Canvas2D lifecycle substrate — the park/freeze/dispose twin of
|
|
50
|
+
* `useWebGLCanvas`. Returns an imperative {@link Canvas2DHandle} (the same
|
|
51
|
+
* handle idiom the WebGL twin uses — an imperative canvas seam is NOT a
|
|
52
|
+
* ref-bundle). `useCanvasLifecycle` is the alias-of-record for the
|
|
53
|
+
* lifecycle-only framing; both name the same factory.
|
|
54
|
+
*/
|
|
55
|
+
export declare function useCanvas2D(options: Canvas2DOptions): Canvas2DHandle;
|
|
56
|
+
/**
|
|
57
|
+
* Alias-of-record for {@link useCanvas2D} — the lifecycle-only framing (the
|
|
58
|
+
* park/freeze/dispose machinery, paralleling the WebGL substrate's
|
|
59
|
+
* `createCanvasLifecycle`). Same factory, same handle; reach for this name when
|
|
60
|
+
* the lifecycle (not the 2D drawing) is the consumer's emphasis.
|
|
61
|
+
*/
|
|
62
|
+
export declare const useCanvasLifecycle: typeof useCanvas2D;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { useGlassRenderer, createGlassFilter, destroyGlassFilter, type GlassTier, type GlassFilterState, type UseGlassRendererReturn, } from "./useGlassRenderer";
|
|
2
|
-
export {
|
|
2
|
+
export { useSpecularTracking } from "./useSpecularTracking";
|
|
3
|
+
export type { UseSpecularTracking } from "./useSpecularTracking";
|
|
4
|
+
export { useCanvas2D, useCanvasLifecycle, resolveCanvasColor } from "./canvas2d";
|
|
3
5
|
export type { Canvas2DFrame, Canvas2DHandle, Canvas2DOptions, Canvas2DSuspendReason, } from "./canvas2d";
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ref, type CSSProperties } from "vue";
|
|
2
|
+
/**
|
|
3
|
+
* `useSpecularTracking` — the pointer-anchored moving-specular write seam
|
|
4
|
+
* (AX.W09). The single DRY home for the catch-light position write that was
|
|
5
|
+
* hand-copied VERBATIM in `Card.vue` and `DockIconButton.vue`.
|
|
6
|
+
*
|
|
7
|
+
* On pointer-move it writes the cursor position (`--mouse-x`/`--mouse-y`, as
|
|
8
|
+
* percentages of the host box) onto the host's inline style; the unified
|
|
9
|
+
* `.glass-material::before` recipe (`glass.css`) MAPS that host write onto its
|
|
10
|
+
* typed `--specular-x`/`--specular-y` channel and paints the travelling glow.
|
|
11
|
+
*
|
|
12
|
+
* VOCAB (HARDENING §G #28): `--mouse-x`/`--mouse-y` is the HOST WRITE this seam
|
|
13
|
+
* owns; `--specular-x`/`--specular-y` is the CSS-internal MAPPED channel the
|
|
14
|
+
* recipe reads. The host writes `--mouse-x/y`; the recipe maps it.
|
|
15
|
+
*
|
|
16
|
+
* The catch-light MAGNITUDE rides the `--glass-specular-intensity-{rest,hover,
|
|
17
|
+
* active}` token cohort (tokens.css) the recipe reads — this seam only feeds the
|
|
18
|
+
* position. The recipe's rest rung is `0` (dormant) so an UNWIRED surface is
|
|
19
|
+
* clean; calling this seam is the wire-or-omit opt-in that wakes the lens on
|
|
20
|
+
* hover/active.
|
|
21
|
+
*
|
|
22
|
+
* PRM-aware: under `prefers-reduced-motion: reduce` the seam DOES NOT write the
|
|
23
|
+
* position (the CSS half pins the catch-light static at the centred `50%`
|
|
24
|
+
* fallback). The write is style-only — no reflow, no re-render — and inert until
|
|
25
|
+
* the user actually moves the pointer over a wired host.
|
|
26
|
+
*/
|
|
27
|
+
export interface UseSpecularTracking {
|
|
28
|
+
/** Bind to the host element's `:style`. Carries the `--mouse-x/--mouse-y` write. */
|
|
29
|
+
specularStyle: ReturnType<typeof ref<CSSProperties>>;
|
|
30
|
+
/** Bind to the host's `@pointermove`. Writes the cursor position (PRM-gated). */
|
|
31
|
+
onPointerMove: (event: PointerEvent) => void;
|
|
32
|
+
}
|
|
33
|
+
export declare function useSpecularTracking(): UseSpecularTracking;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type CanvasSuspendReason = "tab-hidden" | "off-screen" | "manual";
|
|
1
|
+
export type CanvasSuspendReason = "tab-hidden" | "off-screen" | "off-screen-io" | "manual";
|
|
2
2
|
/** The per-frame hooks a backend's `buildContext` returns to the lifecycle core. */
|
|
3
3
|
export interface CanvasFrameHooks {
|
|
4
4
|
/** Draw one frame at `timeSec`. */
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
export declare const OETF_GLSL = "\nfloat srgbToLinearCh(float c) {\n return c <= 0.04045 ? c / 12.92 : pow((c + 0.055) / 1.055, 2.4);\n}\nvec3 srgbToLinear(vec3 c) {\n return vec3(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfloat linearToSrgbCh(float c) {\n return c <= 0.0031308 ? c * 12.92 : 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nvec3 linearToSrgb(vec3 c) {\n return vec3(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}";
|
|
2
2
|
export declare const FBM_ROT_GLSL = "const mat2 FBM_ROT = mat2(0.8, 0.6, -0.6, 0.8);";
|
|
3
3
|
export declare const OKLCH_MATRICES_GLSL = "\n// value.js LINEAR_SRGB_TO_LMS (constants.ts), row-major; written here as GLSL\n// columns (= the transpose) so mat3 * vec3 evaluates the row-major M\u00B7v.\nconst mat3 LINEAR_SRGB_TO_LMS = mat3(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\n\n// value.js srgbToOKLab's INLINE LMS\u2192OKLab coefficients (gamut.ts lines 295-297 \u2014\n// these differ at the ~1e-9 digit from LMS_TO_OKLAB_MATRIX; use the inline ones to\n// mirror the exact value.js path), row-major \u2192 GLSL columns.\nconst mat3 LMS_TO_OKLAB = mat3(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\n\n// value.js OKLAB_TO_LMS_COEFF (constants.ts), row-major \u2192 GLSL columns. Rows:\n// l = [1, 0.3963377774, 0.2158037573], m = [1, -0.1055613458, -0.0638541728],\n// s = [1, -0.0894841775, -1.2914855480].\nconst mat3 OKLAB_TO_LMS = mat3(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\n\n// value.js LMS_TO_LINEAR_SRGB (constants.ts), row-major \u2192 GLSL columns.\nconst mat3 LMS_TO_LINEAR_SRGB = mat3(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\n// Gamma sRGB \u2192 raw OKLab (L, a, b). Mirrors value.js srgbToOKLab.\nvec3 srgbToOklab(vec3 c) {\n vec3 lin = srgbToLinear(c);\n vec3 lms = LINEAR_SRGB_TO_LMS * lin;\n vec3 lmsCbrt = sign(lms) * pow(abs(lms), vec3(1.0 / 3.0));\n return LMS_TO_OKLAB * lmsCbrt;\n}\n\n// Raw OKLab (L, a, b) \u2192 linear sRGB. Mirrors value.js oklabToLinearSRGB.\nvec3 oklabToLinearSrgb(vec3 lab) {\n vec3 lms_ = OKLAB_TO_LMS * lab;\n vec3 lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\n\n// OKLab \u2192 OKLCh: H in RADIANS. Mirrors value.js rawOklabToOklch (which returns\n// degrees; we stay in radians and only fold to [0, 2pi)).\nvec3 oklabToOklch(vec3 lab) {\n float C = length(lab.yz);\n float H = atan(lab.z, lab.y);\n if (H < 0.0) H += 2.0 * PI;\n return vec3(lab.x, C, H);\n}\n\n// OKLCh (H radians) \u2192 OKLab. Mirrors value.js rawOklchToOklab.\nvec3 oklchToOklab(vec3 lch) {\n return vec3(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}";
|
|
4
|
+
export declare const PALETTE_RAMP_GLSL = "\n// value.js interpolateHue in the NORMALIZED-TURNS domain (h_rad/TAU \u2192 turns, the\n// exact .5/+1.0 branch per method, fract() wrap, *TAU back). A radians-native port\n// (PI thresholds / +TAU wrap) diverges 180\u00B0 at the antipode. methods: 0 shorter,\n// 1 longer, 2 increasing, 3 decreasing.\nfloat interpolateHueTurns(float h0, float h1, float t, int method) {\n float TAU = 2.0 * PI;\n float a = h0 / TAU;\n float b = h1 / TAU;\n float i = b - a;\n if (method == 0) { // shorter\n if (i > 0.5) a += 1.0; else if (i < -0.5) b += 1.0;\n } else if (method == 1) { // longer\n if (i > 0.0 && i < 0.5) a += 1.0; else if (i > -0.5 && i <= 0.0) b += 1.0;\n } else if (method == 2) { // increasing\n if (i < 0.0) b += 1.0;\n } else { // decreasing\n if (i > 0.0) a += 1.0;\n }\n float r = a + t * (b - a);\n r = fract(r); // (r % 1 + 1) % 1 \u2014 fract is non-negative in GLSL\n return r * TAU; // back to radians\n}\n\n// Linear-sRGB endpoint pair \u2192 OKLab-rectangular interpolation \u2192 linear sRGB. Holds\n// chroma across the ramp (no grey midpoint). The default/shorter ramp path.\nvec3 mixPaletteOklab(vec3 linA, vec3 linB, float t) {\n vec3 labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3(1.0 / 3.0)));\n vec3 labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3(1.0 / 3.0)));\n vec3 lab = mix(labA, labB, t);\n return oklabToLinearSrgb(lab);\n}\n\n// Linear-sRGB endpoint pair \u2192 OKLCh interpolation along the huePath arc \u2192 linear\n// sRGB. L and C lerp; H walks the chosen arc. The deliberate-rainbow path.\nvec3 mixPaletteOklchArc(vec3 linA, vec3 linB, float t, int method) {\n vec3 labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3(1.0 / 3.0)));\n vec3 labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3(1.0 / 3.0)));\n vec3 lchA = oklabToOklch(labA);\n vec3 lchB = oklabToOklch(labB);\n float L = mix(lchA.x, lchB.x, t);\n float C = mix(lchA.y, lchB.y, t);\n float H = interpolateHueTurns(lchA.z, lchB.z, t, method);\n return oklabToLinearSrgb(oklchToOklab(vec3(L, C, H)));\n}\n\n// The ramp dispatcher both samplePalette ports splice. tRaw is the raw inter-stop\n// parameter [0,1]; the smoothstep ease + the huePath branch live HERE so the GLSL\n// and WGSL ramps are character-for-character one source. increasing(2)/decreasing(3)\n// take the OKLCh hue-arc (rainbow sweep); every other method takes the OKLab-\n// rectangular straight line (no hue detour).\nvec3 samplePaletteRamp(vec3 a, vec3 b, float tRaw, int huePath) {\n float t = smoothstep(0.0, 1.0, tRaw);\n if (huePath == 2 || huePath == 3) {\n return mixPaletteOklchArc(a, b, t, huePath);\n }\n return mixPaletteOklab(a, b, t);\n}";
|
|
5
|
+
export declare const PCG_HASH_GLSL = "\n// Jarzynski PCG2D \u2014 uvec2 \u2192 uvec2 permuted-congruential hash (JCGT 2020).\nuvec2 pcg2d(uvec2 v) {\n v = v * 1664525u + 1013904223u;\n v.x += v.y * 1664525u;\n v.y += v.x * 1664525u;\n v = v ^ (v >> 16u);\n v.x += v.y * 1664525u;\n v.y += v.x * 1664525u;\n v = v ^ (v >> 16u);\n return v;\n}\n\n// Float\u2192[0,1) scalar hash: bit-reinterpret the lattice coordinate, pcg2d it, take the\n// high word back to [0,1). Integer-bit \u2014 no sin() periodicity, no float-fract lattice.\nfloat pcgHash2(vec2 p) {\n uvec2 u = floatBitsToUint(p);\n return float(pcg2d(u).x) * (1.0 / 4294967296.0);\n}\n\n// Integer-lattice gradient: pcg2d the integer cell, fold the hash to an angle, return\n// the unit gradient vector. The gradient basis (not a scalar value) is what makes the\n// noise zero at the nodes (no value-noise plateaus).\nvec2 pcgGrad2(ivec2 cell) {\n uvec2 h = pcg2d(uvec2(cell));\n float ang = float(h.x) * (1.0 / 4294967296.0) * 6.28318530717958647692;\n return vec2(cos(ang), sin(ang));\n}\n\n// 2D SIMPLEX gradient noise (Gustavson skew). The skew transform F2/G2 maps the square\n// lattice onto a simplex (triangular) grid \u2014 no axis-aligned directional bias. Each of\n// the three simplex corners contributes grad\u00B7offset shaped by a radial (0.5 - r\u00B2)\u2074\n// falloff. Output is ~[-1, 1]; callers remap to [0,1] via 0.5 + 0.5*gnoise.\nfloat gnoise(vec2 p) {\n const float F2 = 0.36602540378443864676; // (sqrt(3) - 1) / 2\n const float G2 = 0.21132486540518711775; // (3 - sqrt(3)) / 6\n float s = (p.x + p.y) * F2;\n vec2 i = floor(p + s);\n float tt = (i.x + i.y) * G2;\n vec2 x0 = p - (i - tt); // offset from the simplex origin corner\n ivec2 i1 = (x0.x > x0.y) ? ivec2(1, 0) : ivec2(0, 1);\n vec2 x1 = x0 - vec2(i1) + G2;\n vec2 x2 = x0 - 1.0 + 2.0 * G2;\n ivec2 ii = ivec2(i);\n float n = 0.0;\n float t0 = 0.5 - dot(x0, x0);\n if (t0 > 0.0) { t0 *= t0; n += t0 * t0 * dot(pcgGrad2(ii), x0); }\n float t1 = 0.5 - dot(x1, x1);\n if (t1 > 0.0) { t1 *= t1; n += t1 * t1 * dot(pcgGrad2(ii + i1), x1); }\n float t2 = 0.5 - dot(x2, x2);\n if (t2 > 0.0) { t2 *= t2; n += t2 * t2 * dot(pcgGrad2(ii + ivec2(1, 1)), x2); }\n return 70.0 * n; // normalize to ~[-1, 1]\n}";
|
|
4
6
|
export declare const OETF_WGSL = "\nfn srgbToLinearCh(c: f32) -> f32 {\n return select(pow((c + 0.055) / 1.055, 2.4), c / 12.92, c <= 0.04045);\n}\nfn srgbToLinear(c: vec3f) -> vec3f {\n return vec3f(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\nfn linearToSrgbCh(c: f32) -> f32 {\n return select(1.055 * pow(c, 1.0 / 2.4) - 0.055, c * 12.92, c <= 0.0031308);\n}\nfn linearToSrgb(c: vec3f) -> vec3f {\n return vec3f(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}";
|
|
5
7
|
export declare const FBM_ROT_WGSL = "const FBM_ROT: mat2x2f = mat2x2f(0.8, 0.6, -0.6, 0.8);";
|
|
6
8
|
export declare const OKLCH_MATRICES_WGSL = "\nconst LINEAR_SRGB_TO_LMS: mat3x3f = mat3x3f(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\nconst LMS_TO_OKLAB: mat3x3f = mat3x3f(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\nconst OKLAB_TO_LMS: mat3x3f = mat3x3f(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\nconst LMS_TO_LINEAR_SRGB: mat3x3f = mat3x3f(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\nfn srgbToOklab(c: vec3f) -> vec3f {\n let lin = srgbToLinear(c);\n let lms = LINEAR_SRGB_TO_LMS * lin;\n let lmsCbrt = sign(lms) * pow(abs(lms), vec3f(1.0 / 3.0));\n return LMS_TO_OKLAB * lmsCbrt;\n}\nfn oklabToLinearSrgb(lab: vec3f) -> vec3f {\n let lms_ = OKLAB_TO_LMS * lab;\n let lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\nfn oklabToOklch(lab: vec3f) -> vec3f {\n let C = length(lab.yz);\n var H = atan2(lab.z, lab.y);\n if (H < 0.0) { H = H + 2.0 * PI; }\n return vec3f(lab.x, C, H);\n}\nfn oklchToOklab(lch: vec3f) -> vec3f {\n return vec3f(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}";
|
|
9
|
+
export declare const PALETTE_RAMP_WGSL = "\nfn interpolateHueTurns(h0: f32, h1: f32, t: f32, method: i32) -> f32 {\n let TAU = 2.0 * PI;\n var a = h0 / TAU;\n var b = h1 / TAU;\n let i = b - a;\n if (method == 0) { // shorter\n if (i > 0.5) { a = a + 1.0; } else if (i < -0.5) { b = b + 1.0; }\n } else if (method == 1) { // longer\n if (i > 0.0 && i < 0.5) { a = a + 1.0; } else if (i > -0.5 && i <= 0.0) { b = b + 1.0; }\n } else if (method == 2) { // increasing\n if (i < 0.0) { b = b + 1.0; }\n } else { // decreasing\n if (i > 0.0) { a = a + 1.0; }\n }\n let r = fract(a + t * (b - a));\n return r * TAU;\n}\n\nfn mixPaletteOklab(linA: vec3f, linB: vec3f, t: f32) -> vec3f {\n let labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3f(1.0 / 3.0)));\n let labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3f(1.0 / 3.0)));\n let lab = mix(labA, labB, vec3f(t));\n return oklabToLinearSrgb(lab);\n}\n\nfn mixPaletteOklchArc(linA: vec3f, linB: vec3f, t: f32, method: i32) -> vec3f {\n let labA = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linA) * pow(abs(LINEAR_SRGB_TO_LMS * linA), vec3f(1.0 / 3.0)));\n let labB = LMS_TO_OKLAB * (sign(LINEAR_SRGB_TO_LMS * linB) * pow(abs(LINEAR_SRGB_TO_LMS * linB), vec3f(1.0 / 3.0)));\n let lchA = oklabToOklch(labA);\n let lchB = oklabToOklch(labB);\n let L = mix(lchA.x, lchB.x, t);\n let C = mix(lchA.y, lchB.y, t);\n let H = interpolateHueTurns(lchA.z, lchB.z, t, method);\n return oklabToLinearSrgb(oklchToOklab(vec3f(L, C, H)));\n}\n\nfn samplePaletteRamp(a: vec3f, b: vec3f, tRaw: f32, huePath: i32) -> vec3f {\n let t = smoothstep(0.0, 1.0, tRaw);\n if (huePath == 2 || huePath == 3) {\n return mixPaletteOklchArc(a, b, t, huePath);\n }\n return mixPaletteOklab(a, b, t);\n}";
|
|
10
|
+
export declare const PCG_HASH_WGSL = "\nfn pcg2d(v0: vec2u) -> vec2u {\n var v = v0 * 1664525u + vec2u(1013904223u);\n v.x = v.x + v.y * 1664525u;\n v.y = v.y + v.x * 1664525u;\n v = v ^ (v >> vec2u(16u));\n v.x = v.x + v.y * 1664525u;\n v.y = v.y + v.x * 1664525u;\n v = v ^ (v >> vec2u(16u));\n return v;\n}\n\nfn pcgHash2(p: vec2f) -> f32 {\n let u = bitcast<vec2u>(p);\n return f32(pcg2d(u).x) * (1.0 / 4294967296.0);\n}\n\nfn pcgGrad2(cell: vec2i) -> vec2f {\n let h = pcg2d(bitcast<vec2u>(cell));\n let ang = f32(h.x) * (1.0 / 4294967296.0) * 6.28318530717958647692;\n return vec2f(cos(ang), sin(ang));\n}\n\nfn gnoise(p: vec2f) -> f32 {\n let F2 = 0.36602540378443864676;\n let G2 = 0.21132486540518711775;\n let s = (p.x + p.y) * F2;\n let i = floor(p + vec2f(s));\n let tt = (i.x + i.y) * G2;\n let x0 = p - (i - vec2f(tt));\n var i1 = vec2i(0, 1);\n if (x0.x > x0.y) { i1 = vec2i(1, 0); }\n let x1 = x0 - vec2f(i1) + vec2f(G2);\n let x2 = x0 - vec2f(1.0) + vec2f(2.0 * G2);\n let ii = vec2i(i);\n var n = 0.0;\n var t0 = 0.5 - dot(x0, x0);\n if (t0 > 0.0) { t0 = t0 * t0; n = n + t0 * t0 * dot(pcgGrad2(ii), x0); }\n var t1 = 0.5 - dot(x1, x1);\n if (t1 > 0.0) { t1 = t1 * t1; n = n + t1 * t1 * dot(pcgGrad2(ii + i1), x1); }\n var t2 = 0.5 - dot(x2, x2);\n if (t2 > 0.0) { t2 = t2 * t2; n = n + t2 * t2 * dot(pcgGrad2(ii + vec2i(1, 1)), x2); }\n return 70.0 * n;\n}";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type WebGLSuspendReason = "tab-hidden" | "off-screen" | "manual";
|
|
1
|
+
export type WebGLSuspendReason = "tab-hidden" | "off-screen" | "off-screen-io" | "manual";
|
|
2
2
|
/** The per-frame hooks a consumer's `setup(gl)` returns. */
|
|
3
3
|
export interface WebGLCanvasFrame {
|
|
4
4
|
/** Draw one frame at `timeSec`. The consumer uploads its uniforms + draws. */
|
package/dist/configurator.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./useConfiguratorState-
|
|
1
|
+
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./useConfiguratorState-DxAqksK6.js";
|
|
2
2
|
export { e as CONFIGURATOR_DENSITY_KEY, t as Configurator, i as ConfiguratorLayer, n as ConfiguratorRow, r as provideConfiguratorDensity, o as useConfiguratorState, a as useOptionalConfiguratorDensity };
|
package/dist/confirm-dialog.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as e } from "./createLucideIcon-B6uNAU9G.js";
|
|
2
|
-
import { n as t } from "./button-
|
|
3
|
-
import { t as n } from "./_plugin-vue_export-helper-
|
|
2
|
+
import { n as t } from "./button-DN39cGqL.js";
|
|
3
|
+
import { t as n } from "./_plugin-vue_export-helper-ok8pgSl5.js";
|
|
4
4
|
import { Transition as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, createVNode as l, defineComponent as u, mergeModels as d, openBlock as f, renderSlot as p, toDisplayString as m, unref as h, useModel as g, withCtx as _, withKeys as v, withModifiers as y } from "vue";
|
|
5
5
|
var b = e("loader-circle", [["path", {
|
|
6
6
|
d: "M21 12a9 9 0 1 1-6.219-8.56",
|