@mkbabb/glass-ui 3.10.1 → 3.11.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-DrAcAV4d.js → CardAction-DuArVky-.js} +2 -2
- package/dist/{CommandShortcut-mV2e1aG6.js → CommandShortcut-CefCj5mt.js} +2 -2
- package/dist/{DataTable-C3E6jZ5B.js → DataTable-CUHMukiQ.js} +2 -2
- package/dist/DeckProgress-Dmk4_AKN.js +23 -0
- package/dist/{DialogContent-BxaaafFi.js → DialogContent-BRkT1cjP.js} +1 -1
- package/dist/{HoverPopover-CDA_SaCe.js → HoverPopover-2LOIW34a.js} +1 -1
- package/dist/InstrumentRail-CUJ05YVG.js +44 -0
- package/dist/{MetricBadge-idgrkqoP.js → MetricBadge-BZVWIxNy.js} +7 -5
- package/dist/{Notification-Cu0nN17_.js → Notification-DLMhblXR.js} +1 -1
- package/dist/{NumberFieldContent-CHEWghnY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
- package/dist/{PopoverContent-DpUvdYY-.js → PopoverContent-BId6ggf_.js} +1 -1
- package/dist/{Progress-BW-StFw2.js → Progress-iEuD9pxG.js} +1 -1
- package/dist/{ScrollingText-DruYCni_.js → ScrollingText-BPP84wKo.js} +1 -1
- package/dist/{SelectScrollDownButton-pirzjm--.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
- package/dist/{Switch-DeAqg6pi.js → Switch-Ch-k3Rv-.js} +1 -1
- package/dist/{TabsList-BAVzOZpg.js → TabsList-B8CVOQPC.js} +2 -2
- package/dist/{Toaster-CvuuW_y9.js → Toaster-1rYWrmAm.js} +46 -49
- package/dist/{ToggleGroupItem-DtD37b4G.js → ToggleGroupItem-COu_4IW4.js} +21 -17
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +5 -4
- package/dist/api.js +2 -2
- package/dist/aurora.js +70 -70
- package/dist/{badge-NdCQMvvB.js → badge-CaoFJzRb.js} +1 -1
- package/dist/badge.js +1 -1
- package/dist/{button-DyiWFAOE.js → button-DN39cGqL.js} +12 -12
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -2
- package/dist/card.js +1 -1
- package/dist/carousel.js +5 -5
- package/dist/collapsible.js +1 -1
- package/dist/{color-B65wWyQz.js → color-C5ls_QF7.js} +7 -9
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/components/custom/aurora/constants/presets.d.ts +62 -5
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/constellation/Constellation.vue.d.ts +0 -12
- package/dist/components/custom/constellation/constellationField.d.ts +151 -10
- package/dist/components/custom/constellation/index.d.ts +1 -3
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +0 -11
- package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +27 -0
- package/dist/components/custom/deck-progress/index.d.ts +2 -0
- package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +57 -0
- package/dist/components/custom/dialog-native/index.d.ts +1 -0
- package/dist/components/custom/dock/DockTabButton.vue.d.ts +4 -3
- package/dist/components/custom/dock/GlassDock.vue.d.ts +115 -3
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +0 -36
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +0 -44
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +37 -5
- package/dist/components/custom/fourier-field/index.d.ts +1 -1
- package/dist/components/custom/fourier-field/math.d.ts +0 -17
- package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +41 -0
- package/dist/components/custom/glass-panel/index.d.ts +2 -0
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +3 -4
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +8 -11
- package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
- package/dist/components/custom/handmark/brush.d.ts +242 -0
- package/dist/components/custom/handmark/freehand.d.ts +69 -0
- package/dist/components/custom/handmark/geometry.d.ts +50 -0
- package/dist/components/custom/handmark/index.d.ts +21 -0
- package/dist/components/custom/handmark/ink.d.ts +11 -0
- package/dist/components/custom/handmark/texture.d.ts +39 -0
- package/dist/components/custom/handmark/types.d.ts +53 -0
- package/dist/components/custom/handmark/useHandMark.d.ts +87 -0
- package/dist/components/custom/header-ribbon/HeaderRibbon.vue.d.ts +31 -0
- package/dist/components/custom/header-ribbon/index.d.ts +2 -0
- package/dist/components/custom/header-ribbon/types.d.ts +7 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +2 -2
- package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +91 -0
- package/dist/components/custom/instrument-rail/index.d.ts +2 -0
- package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +8 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +0 -1
- package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
- package/dist/components/ui/slider/index.d.ts +19 -22
- package/dist/components/ui/toast/use-toast.d.ts +2 -2
- package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
- package/dist/components/ui/toggle/index.d.ts +1 -1
- package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +7 -1
- package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +3 -1
- package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +13 -0
- package/dist/composables/color/index.d.ts +0 -12
- package/dist/composables/dark/index.d.ts +1 -1
- package/dist/composables/dark/useGlobalDark.d.ts +21 -1
- package/dist/composables/glass/useSpecularTracking.d.ts +3 -12
- package/dist/composables/motion/core/index.d.ts +1 -0
- package/dist/composables/motion/index.d.ts +0 -2
- package/dist/composables/motion/useRouteTransition.d.ts +42 -0
- package/dist/composables/motion/useSpringMount.d.ts +1 -1
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +2 -2
- package/dist/constellation.js +225 -260
- package/dist/controls.js +14 -48
- package/dist/dark.d.ts +1 -1
- 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/dock.js +345 -340
- package/dist/dockContext-BKeIMmNk.js +9 -0
- package/dist/{dropdown-menu-DVnQcA0E.js → dropdown-menu-D77jX6Df.js} +4 -7
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +79 -38
- package/dist/forms.js +2 -2
- package/dist/fourier-field.js +102 -137
- package/dist/fourier-math.js +2 -2
- package/dist/glass-panel.d.ts +1 -0
- package/dist/glass-panel.js +44 -0
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +209 -287
- package/dist/goo-blob.js +212 -243
- package/dist/handmark.d.ts +1 -0
- package/dist/handmark.js +662 -0
- package/dist/header-ribbon.d.ts +1 -0
- package/dist/header-ribbon.js +63 -0
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/instrument-rail.d.ts +1 -0
- package/dist/instrument-rail.js +2 -0
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +5 -5
- package/dist/{math-BUU9hHID.js → math-DTpRVC0e.js} +2 -18
- package/dist/metric-badge.js +1 -1
- package/dist/metric-stack.js +1 -1
- package/dist/motion-core.js +70 -69
- package/dist/motion.js +37 -38
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/{presets-1OhFpaIC.js → presets-BP_ALM0m.js} +14 -1
- package/dist/progress.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +1 -1
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +6 -6
- package/dist/select.js +1 -1
- package/dist/{sheet-ChSXcJpU.js → sheet-VZEtNFvO.js} +1 -1
- package/dist/sheet.js +1 -1
- package/dist/{slider-sfl8gFDD.js → slider-ClgpP7EB.js} +4 -4
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +2 -2
- package/dist/stacked-icons.js +6 -6
- package/dist/styles/animations.css +111 -15
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock/layer-group.css +0 -22
- package/dist/styles/dock/layers.css +1 -11
- package/dist/styles/dock/morph.css +19 -95
- package/dist/styles/dock/shell.css +0 -12
- package/dist/styles/dock-controls.css +31 -28
- package/dist/styles/drawer.css +0 -2
- package/dist/styles/floating-panel.css +0 -2
- package/dist/styles/glass-refract.css +0 -2
- package/dist/styles/glass.css +1188 -31
- package/dist/styles/hover-popover.css +0 -2
- package/dist/styles/index.css +6 -24
- package/dist/styles/instrument-chassis.css +0 -4
- package/dist/styles/paper.css +68 -2
- package/dist/styles/theme.css +20 -13
- package/dist/styles/tokens.css +2360 -22
- package/dist/styles/typography.css +6 -18
- package/dist/styles/utilities.css +1291 -19
- package/dist/styles/view-transition.css +51 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +98 -98
- package/dist/timeline.js +2 -2
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{useAnimatedNumber-DfVgP4te.js → useAnimatedNumber-Bcpy5Etf.js} +1 -1
- package/dist/{useConfiguratorState-BdQXh9ie.js → useConfiguratorState-DxAqksK6.js} +1 -1
- package/dist/useGlassRenderer-D7YGOYiM.js +69 -0
- package/dist/{useGlobalDark-D7R9OypB.js → useGlobalDark-D1wgEqfW.js} +21 -2
- package/dist/useSpecularTracking-BVRZsRHA.js +26 -0
- package/dist/useSpringMount-BJSHcLl3.js +113 -0
- package/dist/useViewTransition-DaN5Zrox.js +21 -0
- package/dist/vReveal-zUIQk-rJ.js +53 -0
- package/dist/watercolor-dot.js +2 -2
- package/package.json +57 -33
- package/src/styles/animations.css +111 -15
- package/src/styles/dock/layer-group.css +0 -22
- package/src/styles/dock/layers.css +1 -11
- package/src/styles/dock/morph.css +19 -95
- package/src/styles/dock/shell.css +0 -12
- package/src/styles/dock-controls.css +31 -28
- package/src/styles/glass.css +1188 -31
- package/src/styles/index.css +6 -24
- package/src/styles/paper.css +68 -2
- package/src/styles/theme.css +20 -13
- package/src/styles/tokens.css +2360 -22
- package/src/styles/typography.css +6 -18
- package/src/styles/utilities.css +1291 -19
- package/src/styles/view-transition.css +51 -0
- package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +0 -1
- package/dist/components/custom/constellation/composables/createConstellationField.d.ts +0 -35
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
- package/dist/components/custom/constellation/constants.d.ts +0 -36
- package/dist/components/custom/constellation/constellationDraw.d.ts +0 -18
- package/dist/components/custom/constellation/constellationInteraction.d.ts +0 -102
- package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +0 -15
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +0 -131
- package/dist/components/custom/dock/constants.d.ts +0 -23
- package/dist/components/custom/fourier-field/presets.d.ts +0 -54
- package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +0 -18
- package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +0 -41
- package/dist/components/custom/goo-blob/constants.d.ts +0 -52
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +0 -1
- package/dist/components/custom/tabs/constants.d.ts +0 -12
- package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
- package/dist/components/custom/underline/index.d.ts +0 -2
- package/dist/components/custom/underline/types.d.ts +0 -56
- package/dist/composables/motion/curves.d.ts +0 -48
- package/dist/composables/motion/springPresets.d.ts +0 -33
- package/dist/composables/motion/suite.d.ts +0 -2
- package/dist/dockContext-bho8B1A4.js +0 -17
- package/dist/motion-curves.d.ts +0 -1
- package/dist/motion-curves.js +0 -130
- package/dist/springPresets-aRSm-4_k.js +0 -40
- package/dist/styles/glass/a11y-fallback.css +0 -245
- package/dist/styles/glass/ladder.css +0 -304
- package/dist/styles/glass/material.css +0 -238
- package/dist/styles/glass/progress-rail.css +0 -78
- package/dist/styles/glass/squircle.css +0 -66
- package/dist/styles/glass/surfaces.css +0 -306
- package/dist/styles/tokens/color-radius.css +0 -250
- package/dist/styles/tokens/dark-arm.css +0 -194
- package/dist/styles/tokens/glass.css +0 -413
- package/dist/styles/tokens/light-dark.css +0 -158
- package/dist/styles/tokens/offsets-sizing.css +0 -406
- package/dist/styles/tokens/property-regs.css +0 -169
- package/dist/styles/tokens/scale-paper.css +0 -361
- package/dist/styles/tokens/scheme-motion.css +0 -334
- package/dist/styles/tokens/shadow.css +0 -132
- package/dist/styles/utilities/a11y-overrides.css +0 -140
- package/dist/styles/utilities/animate.css +0 -26
- package/dist/styles/utilities/base.css +0 -365
- package/dist/styles/utilities/btn.css +0 -399
- package/dist/styles/utilities/components.css +0 -317
- package/dist/underline.d.ts +0 -1
- package/dist/underline.js +0 -85
- package/dist/useSpecularTracking-DFK_fhpG.js +0 -32
- package/dist/useSpringMount-DXUzxBjV.js +0 -108
- package/dist/vReveal-CqaCz_mC.js +0 -44
- package/src/styles/glass/a11y-fallback.css +0 -245
- package/src/styles/glass/ladder.css +0 -304
- package/src/styles/glass/material.css +0 -238
- package/src/styles/glass/progress-rail.css +0 -78
- package/src/styles/glass/squircle.css +0 -66
- package/src/styles/glass/surfaces.css +0 -306
- package/src/styles/tokens/color-radius.css +0 -250
- package/src/styles/tokens/dark-arm.css +0 -194
- package/src/styles/tokens/glass.css +0 -413
- package/src/styles/tokens/light-dark.css +0 -158
- package/src/styles/tokens/offsets-sizing.css +0 -406
- package/src/styles/tokens/property-regs.css +0 -169
- package/src/styles/tokens/scale-paper.css +0 -361
- package/src/styles/tokens/scheme-motion.css +0 -334
- package/src/styles/tokens/shadow.css +0 -132
- package/src/styles/utilities/a11y-overrides.css +0 -140
- package/src/styles/utilities/animate.css +0 -26
- package/src/styles/utilities/base.css +0 -365
- package/src/styles/utilities/btn.css +0 -399
- package/src/styles/utilities/components.css +0 -317
- /package/dist/{CollapsibleContent-Drow5WkV.js → CollapsibleContent-CP9qF1v4.js} +0 -0
- /package/dist/{DialogFooter-DufLHi0y.js → DialogFooter-Gprw8H_A.js} +0 -0
- /package/dist/{IconTooltip-BrQ5p181.js → IconTooltip-Cus0fvK0.js} +0 -0
- /package/dist/{Input-B-F818RU.js → Input-xuDwALQR.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-DWghtRt7.js → _plugin-vue_export-helper-ok8pgSl5.js} +0 -0
- /package/dist/{compile-Ce_V55zi.js → compile-BOXjLUxu.js} +0 -0
- /package/dist/{constants-C8NMonuo.js → constants-yKeKnE84.js} +0 -0
- /package/dist/{prng-CjVgzjQT.js → prng-D27-B3tK.js} +0 -0
- /package/dist/{resolveCanvasColor-CRvVzOvP.js → resolveCanvasColor-BBiYfp8g.js} +0 -0
- /package/dist/{useCanvas2D-CSeH8h16.js → useCanvas2D-ClrQuZtp.js} +0 -0
- /package/dist/{useIntersectionPause-DAdVPVp4.js → useIntersectionPause-Cck5Uxk8.js} +0 -0
- /package/dist/{useInterval-D3USn0yc.js → useInterval-Dsmqwi03.js} +0 -0
- /package/dist/{useKeyboardShortcuts-i8tHd5WO.js → useKeyboardShortcuts-CyIYrndH.js} +0 -0
- /package/dist/{useScrollProgress-CcgmgMQt.js → useScrollProgress-CffFGLa5.js} +0 -0
- /package/dist/{useSortable-DnyGXKKY.js → useSortable-C8ReQ50P.js} +0 -0
- /package/dist/{useTextHighlight-B3b10W6r.js → useTextHighlight-CWEi25hf.js} +0 -0
|
@@ -27,7 +27,7 @@ var c = ["data-variant", "data-size"], l = /* @__PURE__ */ n({
|
|
|
27
27
|
}), s.class))
|
|
28
28
|
}, [a(l.$slots, "default")], 10, c));
|
|
29
29
|
}
|
|
30
|
-
}), u = s("focus-ring inline-flex items-center gap-1.5 rounded-badge border font-semibold transition-control wrap-anywhere [&_svg:not([class*=size-])]:size-(--ui-glyph-sm) [&_svg]:shrink-0 [&_svg]:pointer-events-none", {
|
|
30
|
+
}), u = s("focus-ring inline-flex items-center gap-1.5 rounded-badge border font-semibold transition-control wrap-anywhere [&_svg:not([class*=size-])]:size-[var(--ui-glyph-sm)] [&_svg]:shrink-0 [&_svg]:pointer-events-none", {
|
|
31
31
|
variants: {
|
|
32
32
|
variant: {
|
|
33
33
|
default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
|
package/dist/badge.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./badge-
|
|
1
|
+
import { n as e, t } from "./badge-CaoFJzRb.js";
|
|
2
2
|
export { e as Badge, t as badgeVariants };
|
|
@@ -46,30 +46,30 @@ var d = /* @__PURE__ */ r({
|
|
|
46
46
|
"class"
|
|
47
47
|
]));
|
|
48
48
|
}
|
|
49
|
-
}), f = u("btn-pill tap-squish focus-ring whitespace-nowrap text-[length:var(--control-text)] font-medium cursor-pointer active:scale-(--scale-press-btn) disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-disabled [&_svg:not([class*=size-])]:size-(--ui-glyph) [&_svg]:shrink-0 [&_svg]:pointer-events-none", {
|
|
49
|
+
}), f = u("btn-pill tap-squish focus-ring whitespace-nowrap text-[length:var(--control-text)] font-medium cursor-pointer active:scale-[var(--scale-press-btn)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-disabled [&_svg:not([class*=size-])]:size-[var(--ui-glyph)] [&_svg]:shrink-0 [&_svg]:pointer-events-none", {
|
|
50
50
|
variants: {
|
|
51
51
|
variant: {
|
|
52
|
-
default: "glass-wash btn-glass text-foreground hover:bg-(--glass-bg-resting) hover:border-(--glass-border-resting) active:bg-(--glass-bg-floating) active:border-(--glass-border-floating) aria-pressed:bg-[color-mix(in_srgb,var(--foreground)_10%,var(--glass-bg-resting))]",
|
|
52
|
+
default: "glass-wash btn-glass text-foreground hover:bg-[var(--glass-bg-resting)] hover:border-[var(--glass-border-resting)] active:bg-[var(--glass-bg-floating)] active:border-[var(--glass-border-floating)] aria-pressed:bg-[color-mix(in_srgb,var(--foreground)_10%,var(--glass-bg-resting))]",
|
|
53
53
|
solid: "bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 aria-pressed:bg-primary/85",
|
|
54
|
-
"primary-audacious": "btn-audacious bg-primary text-primary-foreground hover:scale-(--scale-hover-btn) aria-pressed:scale-(--scale-press-btn)",
|
|
55
|
-
"gold-audacious": "btn-audacious btn-audacious-gold text-foreground hover:text-white active:text-white aria-pressed:text-white hover:scale-(--scale-hover-btn) aria-pressed:scale-(--scale-press-btn)",
|
|
54
|
+
"primary-audacious": "btn-audacious bg-primary text-primary-foreground hover:scale-[var(--scale-hover-btn)] aria-pressed:scale-[var(--scale-press-btn)]",
|
|
55
|
+
"gold-audacious": "btn-audacious btn-audacious-gold text-foreground hover:text-white active:text-white aria-pressed:text-white hover:scale-[var(--scale-hover-btn)] aria-pressed:scale-[var(--scale-press-btn)]",
|
|
56
56
|
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/80 aria-pressed:bg-destructive/85",
|
|
57
57
|
outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground active:bg-accent/80 aria-pressed:bg-accent aria-pressed:text-accent-foreground",
|
|
58
58
|
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70 aria-pressed:bg-secondary/60",
|
|
59
59
|
accent: "bg-accent text-accent-foreground border border-border/40 hover:bg-accent/80 active:bg-accent/70 aria-pressed:bg-accent/60",
|
|
60
60
|
ghost: "bg-transparent text-foreground/70 hover:bg-foreground/8 hover:text-foreground active:bg-foreground/12 aria-pressed:bg-foreground/10 aria-pressed:text-foreground",
|
|
61
|
-
glass: "glass-wash btn-glass text-foreground hover:bg-(--glass-bg-resting) hover:border-(--glass-border-resting) active:bg-(--glass-bg-floating) active:border-(--glass-border-floating) aria-pressed:bg-[color-mix(in_srgb,var(--foreground)_10%,var(--glass-bg-resting))]",
|
|
62
|
-
"glass-wash": "glass-wash btn-glass text-foreground/70 hover:bg-foreground/[0.04] hover:border-(--surface-tint-22) hover:text-foreground active:bg-foreground/[0.08] aria-pressed:bg-foreground/[0.1] aria-pressed:text-foreground",
|
|
61
|
+
glass: "glass-wash btn-glass text-foreground hover:bg-[var(--glass-bg-resting)] hover:border-[var(--glass-border-resting)] active:bg-[var(--glass-bg-floating)] active:border-[var(--glass-border-floating)] aria-pressed:bg-[color-mix(in_srgb,var(--foreground)_10%,var(--glass-bg-resting))]",
|
|
62
|
+
"glass-wash": "glass-wash btn-glass text-foreground/70 hover:bg-foreground/[0.04] hover:border-[var(--surface-tint-22)] hover:text-foreground active:bg-foreground/[0.08] aria-pressed:bg-foreground/[0.1] aria-pressed:text-foreground",
|
|
63
63
|
ai: "bg-amber-500/15 text-amber-700 hover:bg-amber-500/25 active:bg-amber-500/35 dark:text-amber-400 aria-pressed:bg-amber-500/30",
|
|
64
64
|
link: "text-primary underline-offset-4 hover:underline active:opacity-80 active:scale-100"
|
|
65
65
|
},
|
|
66
66
|
size: {
|
|
67
|
-
default: "h-(--control-h-md) px-4 py-2 has-[>svg]:px-3",
|
|
68
|
-
xs: "h-(--control-h-xs) rounded-pill px-2 text-[length:var(--control-text-sm)]",
|
|
69
|
-
sm: "h-(--control-h-sm) rounded-pill px-3",
|
|
70
|
-
lg: "h-(--control-h-lg) rounded-pill px-8 has-[>svg]:px-5",
|
|
71
|
-
icon: "h-(--control-h-md) w-(--control-h-md) p-0",
|
|
72
|
-
"icon-sm": "h-(--control-h-xs) w-(--control-h-xs) p-0"
|
|
67
|
+
default: "h-[var(--control-h-md)] px-4 py-2 has-[>svg]:px-3",
|
|
68
|
+
xs: "h-[var(--control-h-xs)] rounded-pill px-2 text-[length:var(--control-text-sm)]",
|
|
69
|
+
sm: "h-[var(--control-h-sm)] rounded-pill px-3",
|
|
70
|
+
lg: "h-[var(--control-h-lg)] rounded-pill px-8 has-[>svg]:px-5",
|
|
71
|
+
icon: "h-[var(--control-h-md)] w-[var(--control-h-md)] p-0",
|
|
72
|
+
"icon-sm": "h-[var(--control-h-xs)] w-[var(--control-h-xs)] p-0"
|
|
73
73
|
}
|
|
74
74
|
},
|
|
75
75
|
defaultVariants: {
|
package/dist/button.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, t } from "./button-
|
|
1
|
+
import { n as e, t } from "./button-DN39cGqL.js";
|
|
2
2
|
export { e as Button, t as buttonVariants };
|
package/dist/canvas.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as e, t } from "./useCanvas2D-
|
|
2
|
-
import { t as n } from "./resolveCanvasColor-
|
|
1
|
+
import { n as e, t } from "./useCanvas2D-ClrQuZtp.js";
|
|
2
|
+
import { t as n } from "./resolveCanvasColor-BBiYfp8g.js";
|
|
3
3
|
export { n as resolveCanvasColor, t as useCanvas2D, e as useCanvasLifecycle };
|
package/dist/card.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 "./CardAction-
|
|
1
|
+
import { a as e, i as t, n, o as r, r as i, s as a, t as o } from "./CardAction-DuArVky-.js";
|
|
2
2
|
export { a as Card, o as CardAction, i as CardContent, t as CardDescription, n as CardFooter, r as CardHeader, e as CardTitle };
|
package/dist/carousel.js
CHANGED
|
@@ -3,8 +3,8 @@ import { t } from "./createLucideIcon-B6uNAU9G.js";
|
|
|
3
3
|
import { t as n } from "./chevron-down-BSkTP2aL.js";
|
|
4
4
|
import { t as r } from "./chevron-right-sDM0Yvrf.js";
|
|
5
5
|
import { t as i } from "./chevron-up-CCOD_FTz.js";
|
|
6
|
-
import { n as a } from "./button-
|
|
7
|
-
import { t as o } from "./_plugin-vue_export-helper-
|
|
6
|
+
import { n as a } from "./button-DN39cGqL.js";
|
|
7
|
+
import { t as o } from "./_plugin-vue_export-helper-ok8pgSl5.js";
|
|
8
8
|
import { Fragment as s, computed as c, createBlock as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createVNode as p, defineComponent as m, mergeProps as h, normalizeClass as g, onMounted as _, openBlock as v, ref as y, renderList as b, renderSlot as x, resolveDynamicComponent as S, toDisplayString as C, unref as w, watch as T, withCtx as E } from "vue";
|
|
9
9
|
import { createInjectionState as D } from "@vueuse/core";
|
|
10
10
|
import O from "embla-carousel-vue";
|
|
@@ -170,7 +170,7 @@ var F = /* @__PURE__ */ m({
|
|
|
170
170
|
onClick: (t) => l(e - 1)
|
|
171
171
|
}, null, 8, R))), 128))], 10, L)) : u("", !0);
|
|
172
172
|
}
|
|
173
|
-
}), [["__scopeId", "data-v-
|
|
173
|
+
}), [["__scopeId", "data-v-18c34cd8"]]), B = /* @__PURE__ */ m({
|
|
174
174
|
__name: "CarouselItem",
|
|
175
175
|
props: { class: { type: [
|
|
176
176
|
Boolean,
|
|
@@ -206,7 +206,7 @@ var F = /* @__PURE__ */ m({
|
|
|
206
206
|
return (s, c) => (v(), l(w(a), {
|
|
207
207
|
"data-slot": "carousel-next",
|
|
208
208
|
disabled: !w(i),
|
|
209
|
-
class: g(w(e)("absolute h-(--carousel-nav-size) w-(--carousel-nav-size) rounded-pill", w(r) === "horizontal" ? "top-1/2 -translate-y-1/2 right-[calc(-1*var(--carousel-nav-offset))]" : "left-1/2 -translate-x-1/2 rotate-90 bottom-[calc(-1*var(--carousel-nav-offset))]", n.class)),
|
|
209
|
+
class: g(w(e)("absolute h-[var(--carousel-nav-size)] w-[var(--carousel-nav-size)] rounded-pill", w(r) === "horizontal" ? "top-1/2 -translate-y-1/2 right-[calc(-1*var(--carousel-nav-offset))]" : "left-1/2 -translate-x-1/2 rotate-90 bottom-[calc(-1*var(--carousel-nav-offset))]", n.class)),
|
|
210
210
|
variant: t.variant,
|
|
211
211
|
size: t.size,
|
|
212
212
|
onClick: w(o)
|
|
@@ -305,7 +305,7 @@ var F = /* @__PURE__ */ m({
|
|
|
305
305
|
return (s, c) => (v(), l(w(a), {
|
|
306
306
|
"data-slot": "carousel-previous",
|
|
307
307
|
disabled: !w(i),
|
|
308
|
-
class: g(w(e)("absolute h-(--carousel-nav-size) w-(--carousel-nav-size) rounded-pill", w(r) === "horizontal" ? "top-1/2 -translate-y-1/2 left-[calc(-1*var(--carousel-nav-offset))]" : "left-1/2 -translate-x-1/2 rotate-90 top-[calc(-1*var(--carousel-nav-offset))]", n.class)),
|
|
308
|
+
class: g(w(e)("absolute h-[var(--carousel-nav-size)] w-[var(--carousel-nav-size)] rounded-pill", w(r) === "horizontal" ? "top-1/2 -translate-y-1/2 left-[calc(-1*var(--carousel-nav-offset))]" : "left-1/2 -translate-x-1/2 rotate-90 top-[calc(-1*var(--carousel-nav-offset))]", n.class)),
|
|
309
309
|
variant: t.variant,
|
|
310
310
|
size: t.size,
|
|
311
311
|
onClick: w(o)
|
package/dist/collapsible.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as e, r as t, t as n } from "./CollapsibleContent-
|
|
1
|
+
import { n as e, r as t, t as n } from "./CollapsibleContent-CP9qF1v4.js";
|
|
2
2
|
export { t as Collapsible, n as CollapsibleContent, e as CollapsibleTrigger };
|
|
@@ -69,18 +69,16 @@ function y(e) {
|
|
|
69
69
|
};
|
|
70
70
|
}
|
|
71
71
|
function b(e, t = {}) {
|
|
72
|
-
let n = typeof e == "string" ? p(e) : e, { stopCount: r = 3, harmony: i = "analogous", lightnessSpread: a = .18, hueSpread: o = 24, chromaBump: s = .03
|
|
73
|
-
for (let e = 0; e <
|
|
74
|
-
let t =
|
|
75
|
-
|
|
76
|
-
let f = v(n.h, i, o, t);
|
|
77
|
-
u.push(y({
|
|
72
|
+
let n = typeof e == "string" ? p(e) : e, { stopCount: r = 3, harmony: i = "analogous", lightnessSpread: a = .18, hueSpread: o = 24, chromaBump: s = .03 } = t, c = Math.max(2, Math.min(4, Math.round(r))), l = [];
|
|
73
|
+
for (let e = 0; e < c; e++) {
|
|
74
|
+
let t = c === 1 ? 0 : e / (c - 1), r = n.L - a / 2 + a * t, u = Math.max(0, n.C + s * Math.sin(Math.PI * t)), d = v(n.h, i, o, t);
|
|
75
|
+
l.push(y({
|
|
78
76
|
L: Math.min(.98, Math.max(.05, r)),
|
|
79
|
-
C:
|
|
80
|
-
h:
|
|
77
|
+
C: u,
|
|
78
|
+
h: d
|
|
81
79
|
}));
|
|
82
80
|
}
|
|
83
|
-
return
|
|
81
|
+
return l;
|
|
84
82
|
}
|
|
85
83
|
//#endregion
|
|
86
84
|
export { y as a, u as c, v as i, d as l, h as n, m as o, b as r, f as s, p as t };
|
package/dist/color.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./color-
|
|
1
|
+
import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./color-C5ls_QF7.js";
|
|
2
2
|
export { c as cssToOklch, i as defaultBlobColorResolver, o as deriveBlobPalette, n as deriveHue, e as gamutMapStop, a as oklchStopToHex, s as oklchToGammaRgb, t as oklchToLinear, r as warmCatchLight };
|
package/dist/command.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./CommandShortcut-
|
|
1
|
+
import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "./CommandShortcut-CefCj5mt.js";
|
|
2
2
|
export { r as Command, t as CommandDialog, s as CommandEmpty, a as CommandGroup, e as CommandInput, n as CommandItem, o as CommandList, i as CommandSeparator, c as CommandShortcut };
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Aurora v4.1 — library config shape.
|
|
3
3
|
*
|
|
4
|
-
* Authored presets (Sky, Dawn, Meadow, Deliberative, Day9, Oil Impasto,
|
|
4
|
+
* Authored THEMED presets (Sky, Dawn, Meadow, Deliberative, Day9, Oil Impasto,
|
|
5
5
|
* Oil Gestural, Oil Van Gogh, Crayon Sunset, Crayon Rainbow, Crayon Ocean)
|
|
6
6
|
* live in the consumer — see demo/stories/aurora/presets.ts.
|
|
7
7
|
*
|
|
8
|
-
* Per memory rule "Presets in consumers": named
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* Per memory rule "Presets in consumers": named THEMED presets belong in each
|
|
9
|
+
* consumer project, not in the library. The library exports only the shape, a
|
|
10
|
+
* minimum-viable DEFAULT_AURORA_CONFIG, and — the one deliberate exception
|
|
11
|
+
* (E22 / d-paper-aurora M4) — the `PAPER_WASH_GROUND` CALIBRATION partial: a
|
|
12
|
+
* recessive-ground crayon TUNING (not a themed palette) whose deft tooth dials
|
|
13
|
+
* are LIBRARY CANON so a data-ground aurora reads as paper-on-tooth without each
|
|
14
|
+
* consumer dial-tuning the same recessive calibration by hand (the
|
|
15
|
+
* `proof:aurora-paper-ground` gate locks it). It carries NO palette/nuclei — the
|
|
16
|
+
* consumer spreads it over its own pole-derived pigment (page-glow IS data-glow).
|
|
12
17
|
*/
|
|
13
18
|
import type { OklchStop } from "../../../../composables/color";
|
|
14
19
|
export type { OklchStop };
|
|
@@ -114,6 +119,14 @@ export interface AuroraConfig {
|
|
|
114
119
|
granulation: number;
|
|
115
120
|
impasto: number;
|
|
116
121
|
brokenColor: number;
|
|
122
|
+
/**
|
|
123
|
+
* The medium's own paper-tooth multiplier (`uCanvasGrain` — `mediums.glsl.ts`
|
|
124
|
+
* `result *= 1 + tooth*toothAmp*uCanvasGrain`). The themed mediums ride the
|
|
125
|
+
* sub-0.1 band; the RECESSIVE-ground `crayon` preset (PAPER_WASH_GROUND) rides
|
|
126
|
+
* a higher tooth multiplier (~0.5) so the dry tooth is FELT at the clamped
|
|
127
|
+
* ground ceiling where a hue-tint dies — texture is cheap to the eye, flat hue
|
|
128
|
+
* is expensive (the d-paper-aurora load-bearing physics).
|
|
129
|
+
*/
|
|
117
130
|
canvasGrain: number;
|
|
118
131
|
/**
|
|
119
132
|
* AW.W4.2 — the impasto relight direction (the movable directional source the
|
|
@@ -181,3 +194,47 @@ export declare const MAX_STOPS = 8;
|
|
|
181
194
|
* Not a themed preset — the demo's 11 authored presets override every field.
|
|
182
195
|
*/
|
|
183
196
|
export declare const DEFAULT_AURORA_CONFIG: AuroraConfig;
|
|
197
|
+
/**
|
|
198
|
+
* `PAPER_WASH_GROUND` — the library-canon recessive-ground crayon calibration.
|
|
199
|
+
*
|
|
200
|
+
* The deft tooth dials the paper-aurora hybrid needs, pinned ONCE at the library
|
|
201
|
+
* level so a data-ground aurora reads as pigment-on-paper-tooth — NOT a dead hue
|
|
202
|
+
* tint, NOT a screen-like gradient — without each consumer hand-tuning the same
|
|
203
|
+
* recessive calibration (the root-repo law: the calibration lives in the library;
|
|
204
|
+
* the consumer never dial-tunes it). It is a PARTIAL: it carries NO palette /
|
|
205
|
+
* nuclei / motion — the consumer SPREADS it over its own pole-derived pigment so
|
|
206
|
+
* the page-glow stays the data-glow (the keystone the smooth-medium swap preserves
|
|
207
|
+
* verbatim; only the DEPOSITION changes from a gradient to a dry-tooth multiply).
|
|
208
|
+
*
|
|
209
|
+
* The pinned dials (the named stopping rules, d-paper-aurora M1):
|
|
210
|
+
* - `medium: "crayon"` — the DRY tooth-multiply (a TEXTURE, not strokes;
|
|
211
|
+
* admissible behind data where the four
|
|
212
|
+
* stroke-deposition mediums are forbidden).
|
|
213
|
+
* - `granulation: 0.30` — pigment settles in the paper tooth (felt-at-rest).
|
|
214
|
+
* - `canvasGrain: 0.5` — the medium's tooth multiplier, lifted so the dry
|
|
215
|
+
* tooth survives the clamped ground ceiling.
|
|
216
|
+
* - `strokeAmount: 0.35` — the crayon PRESSURE (how hard the tooth bites);
|
|
217
|
+
* LOW (recessive — the tooth is felt, never a slab).
|
|
218
|
+
* - `strokeAnisotropy: 0.5` — moderate directional squash; never high enough to
|
|
219
|
+
* read as STROKES (crumb-texture, not brushwork).
|
|
220
|
+
* Plus the recessive guards: `saturation < 1` (the ground spends NO chroma budget —
|
|
221
|
+
* the pops live in the icons), no impasto/sheen (`impasto: 0`, single layer), and a
|
|
222
|
+
* felt `paperGrain` floor.
|
|
223
|
+
*
|
|
224
|
+
* Spread it: `const cfg = { ...consumerBase, ...PAPER_WASH_GROUND }` — the
|
|
225
|
+
* calibration wins the deposition dials, the consumer keeps the pigment + nuclei.
|
|
226
|
+
*/
|
|
227
|
+
export declare const PAPER_WASH_GROUND: {
|
|
228
|
+
readonly medium: "crayon";
|
|
229
|
+
readonly strokeOrient: "tensor";
|
|
230
|
+
readonly granulation: 0.3;
|
|
231
|
+
readonly canvasGrain: 0.5;
|
|
232
|
+
readonly strokeAmount: 0.35;
|
|
233
|
+
readonly strokeAnisotropy: 0.5;
|
|
234
|
+
readonly strokeLayers: 1;
|
|
235
|
+
readonly impasto: 0;
|
|
236
|
+
readonly brokenColor: 0;
|
|
237
|
+
readonly wetEdge: 0;
|
|
238
|
+
readonly saturation: 0.92;
|
|
239
|
+
readonly paperGrain: 0.008;
|
|
240
|
+
};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const AURORA_MEDIUMS_PRE_BRUSH_GLSL = "// \u2500\u2500 Medium overlays \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n// A quick re-computation of base color for edge-mask sampling\nvec3 sampleBase(vec2 p, float t) {\n vec2 pw = domainWarp(p, t);\n float id; float vm;\n nucleiField(pw, t, id, vm);\n vec3 c = samplePalette(id);\n c *= 1.0 + uValueVariance * vm;\n return c;\n}\n\n// \u2500\u2500 Structure-tensor / edge-tangent-flow (AW.W4.1) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// The keystone of the painterly engine: derive stroke orientation from the COLOR\n// FIELD's OWN structure, not a hand-authored flow pattern. A 3x3 Sobel over\n// luma(sampleBase) yields the gradient (Gx,Gy); the 2x2 structure tensor\n// J = [[Gx\u00B2, GxGy],[GxGy, Gy\u00B2]] eigen-decomposes closed-form into the MINOR\n// eigenvector (the edge-TANGENT \u2014 least color change, the stroke direction; the\n// MAJOR eigenvector is the gradient/edge-NORMAL and would make strokes cross the\n// bands) and the coherence A = (\u03BB1-\u03BB2)/(\u03BB1+\u03BB2). Low-coherence (flat) zones relax\n// toward the smooth fallbackDir by (1-A) so tensor noise never reads as jitter.\n// Single-pass small-tap WebGL2 form; the Gaussian-smoothed multi-tap + LIC smear\n// is the AW.W7 WebGPU multi-pass fold. Returns vec3(tangent.x, tangent.y, A).\nvec3 structureTensorField(vec2 p, float t, vec2 fallbackDir) {\n float e = 0.0035; // small-tap neighborhood (edge-mask scale)\n // 3x3 luma samples.\n float l00 = dot(sampleBase(p + vec2(-e, -e), t), W_LUMA);\n float l10 = dot(sampleBase(p + vec2( 0.0, -e), t), W_LUMA);\n float l20 = dot(sampleBase(p + vec2( e, -e), t), W_LUMA);\n float l01 = dot(sampleBase(p + vec2(-e, 0.0), t), W_LUMA);\n float l21 = dot(sampleBase(p + vec2( e, 0.0), t), W_LUMA);\n float l02 = dot(sampleBase(p + vec2(-e, e), t), W_LUMA);\n float l12 = dot(sampleBase(p + vec2( 0.0, e), t), W_LUMA);\n float l22 = dot(sampleBase(p + vec2( e, e), t), W_LUMA);\n // Sobel derivatives.\n float Gx = (l20 + 2.0 * l21 + l22) - (l00 + 2.0 * l01 + l02);\n float Gy = (l02 + 2.0 * l12 + l22) - (l00 + 2.0 * l10 + l20);\n // Structure tensor components.\n float Jxx = Gx * Gx;\n float Jyy = Gy * Gy;\n float Jxy = Gx * Gy;\n // Closed-form 2x2 eigenvalues: \u03BB = 0.5(tr \u00B1 sqrt((Jxx-Jyy)\u00B2 + 4Jxy\u00B2)).\n float tr = Jxx + Jyy;\n float disc = sqrt(max((Jxx - Jyy) * (Jxx - Jyy) + 4.0 * Jxy * Jxy, 0.0));\n float lambdaMaj = 0.5 * (tr + disc);\n float lambdaMin = 0.5 * (tr - disc);\n // The MAJOR eigenvector points along the gradient (the edge NORMAL); the MINOR\n // is its perpendicular \u2014 the edge TANGENT (the stroke direction). The principal\n // angle is \u03B8 = 0.5\u00B7atan2(2\u00B7Jxy, Jxx-Jyy); this form is robust at Jxy\u22480 (where the\n // (\u03BB-Jyy, Jxy) eigenvector formula collapses to a zero vector). The tangent is at\n // \u03B8 + 90\u00B0. Guard the fully-isotropic (no-gradient) degenerate case \u2192 fallback dir.\n vec2 tangent;\n if (disc < 1e-7) {\n tangent = fallbackDir;\n } else {\n float theta = 0.5 * atan(2.0 * Jxy, Jxx - Jyy); // major (gradient) angle\n tangent = vec2(-sin(theta), cos(theta)); // perpendicular = tangent\n }\n // Coherence A in [0,1] \u2014 high where one eigenvalue dominates (a strong edge),\n // ~0 in flat zones. Relax toward the smooth fallback by (1 - A).\n float A = (lambdaMaj - lambdaMin) / (lambdaMaj + lambdaMin + 1e-6);\n A = clamp(A, 0.0, 1.0);\n // Coherence-weighted blend: full tensor in coherent zones, smooth in flat ones.\n // Resolve the 180\u00B0 sign ambiguity toward the fallback so the blend is continuous.\n if (dot(tangent, fallbackDir) < 0.0) tangent = -tangent;\n // The blend weight is a low-power curve (A^0.35) so even MODERATE-coherence zones queue\n // strongly along the tangent (a flowing van-Gogh band reads coherent the way the\n // structure-tensor metric measures it; a linear A under-orients the mid-band and the\n // rendered field reads too isotropic \u2014 the \u00A74.2 anisotropy lift). The flat-zone (A\u22480)\n // relax to the fallback survives (0^0.35=0), so tensor noise never reads as jitter.\n float blendW = pow(A, 0.28);\n vec2 dir = normalize(mix(fallbackDir, tangent, blendW) + 1e-6);\n return vec3(dir, A);\n}\n\nvec3 mediumWatercolor(vec3 col, vec2 p, float t) {\n // Wet-edge cauliflowers via luma-gradient magnitude\n float eps = 0.004;\n vec3 cx1 = sampleBase(p + vec2(eps, 0.0), t);\n vec3 cx2 = sampleBase(p - vec2(eps, 0.0), t);\n vec3 cy1 = sampleBase(p + vec2(0.0, eps), t);\n vec3 cy2 = sampleBase(p - vec2(0.0, eps), t);\n float gx = dot(cx1 - cx2, W_LUMA);\n float gy = dot(cy1 - cy2, W_LUMA);\n float edge = sqrt(gx * gx + gy * gy) / (2.0 * eps);\n float mask = smoothstep(0.0, 2.5, edge);\n col *= mix(1.0, 0.78, mask * uWetEdge);\n\n // Granulation \u2014 pigment settles in paper tooth\n float paper = 0.5 * vnoise(p * 160.0) + 0.5 * vnoise(p * 360.0);\n float pigLoad = 1.0 - dot(col, W_LUMA);\n col *= 1.0 - uGranulation * pigLoad * (paper - 0.5);\n\n // Wash banding \u2014 faint horizontal wet gradient\n float band = fbm(vec2(p.x * 1.5, p.y * 0.4));\n col *= 1.0 + 0.04 * (band - 0.5);\n return col;\n}\n\nvec3 mediumPastel(vec3 col, vec2 p, float t) {\n vec2 flow = flowField(p, t);\n vec2 perp = vec2(-flow.y, flow.x);\n float along = dot(p, flow) * uStrokeScale;\n float across = dot(p, perp) * uStrokeScale;\n across += 0.03 * (vnoise(p * 260.0) - 0.5);\n\n float aniso = mix(1.0, 0.18, uStrokeAnisotropy);\n float stroke = fbm(vec2(along * aniso, across));\n col *= mix(1.0, 0.82 + 0.32 * stroke, uStrokeAmount);\n\n // Pastel tooth \u2014 tiny high-frequency grain\n float tooth = vnoise(p * 800.0);\n col *= 1.0 - 0.08 * uStrokeAmount * (tooth - 0.5);\n return col;\n}\n";
|
|
2
|
-
export declare const AURORA_MEDIUMS_POST_BRUSH_GLSL: string;
|
|
2
|
+
export declare const AURORA_MEDIUMS_POST_BRUSH_GLSL = "// \u2500\u2500 Medium id constants (mirror uniformBridge.ts MEDIUM_ID \u2014 the uMedium ladder) \u2500\u2500\n// The StrokeProfile selector (AX.W12 + AX.W13) dispatches on the medium id: oil,\n// van-Gogh, and oil-pastel each AUTHOR a first-class profile in profileFor.\n#define MEDIUM_OIL 3\n#define MEDIUM_CRAYON 4\n#define MEDIUM_VANGOGH 5\n#define MEDIUM_OILPASTEL 6\n\n// \u2500\u2500 Crayon \u2014 DRY wax pigment on paper tooth (first-class medium, uMedium==4) \u2500\u2500\n// Crayon is not strokes. It's dry pigment crumbs dragged across paper tooth \u2014 the\n// DRY tooth-multiply model: anisotropic tooth noise multiplied into the base, a hard\n// SCUMBLE that lets the lower color show through the broken upper layer, and stable\n// OKLCh broken-color pigment patches. NO sheen, NO burnish film \u2014 that waxy gloss is\n// the OIL-PASTEL deposition's signature (mediumOilPastel), distinct from dry crayon\n// (AX.W13 slice 8 F1 \u2014 the split). Crayon shares the SUBSTRATE (the structure-tensor\n// orientation, the tooth noise, OKLCh brokenColorJitter), not the dispatch body.\nvec3 mediumCrayon(vec3 col, vec2 p, float t) {\n // Orient the deposition along the structure-tensor edge-tangent (the bridge forces\n // tensor for crayon, so read the tensor field directly).\n vec2 flow = structureTensorField(p, t, flowField(p, t)).xy;\n float ang = atan(flow.y, flow.x);\n float ca = cos(-ang), sa = sin(-ang);\n vec2 pr = vec2(p.x * ca - p.y * sa, p.x * sa + p.y * ca);\n\n float aniso = mix(0.45, 0.95, uStrokeAnisotropy);\n float scale = max(uStrokeScale * 1.6, 180.0);\n\n // \u2500\u2500 Paper TOOTH height field \u2014 the relief the dry pigment rides. Anisotropic\n // (squished along flow, coarse cross-flow). Peaks = ridges, valleys = paper pits.\n float t1 = vnoise(vec2(pr.x * scale * aniso, pr.y * scale));\n float t2 = vnoise(vec2(pr.x * scale * aniso * 0.4, pr.y * scale * 0.4) + 11.0);\n float t3 = vnoise(vec2(pr.x * scale * aniso * 2.1, pr.y * scale * 2.1) + 23.0);\n float tooth = 0.55 * t1 + 0.30 * t2 + 0.15 * t3;\n\n // \u2500\u2500 DRY TOOTH-MULTIPLY \u2014 the crayon multiplies the tooth relief into the base\n // color (dark in the pits, bright on the ridges). The pressure (uStrokeAmount) sets\n // how hard the multiply bites. This is the DRY model \u2014 no pigment build-up, no sheen.\n float pressure = clamp(uStrokeAmount, 0.0, 1.0);\n float bite = mix(0.18, 0.46, pressure); // multiply strength\n vec3 result = col * (1.0 - bite * (0.5 - tooth));\n\n // \u2500\u2500 HARD SCUMBLE \u2014 a broken upper layer that lets the lower color show through the\n // gaps. A coarse mask gates a HARD (high-contrast) dragged pass so the dry crayon\n // reads as broken pigment crumbs, not a smooth wash. Drag follows the tensor flow.\n float scumbleMask = smoothstep(0.42, 0.78, vnoise(vec2(pr.x * scale * 0.55, pr.y * scale * 0.22) + 7.0));\n float scumbleCoverage = scumbleMask * pressure * 0.7; // hard broken upper layer\n vec3 paper = col * mix(0.80, 0.94, pressure); // the paper showing through\n result = mix(paper, result, scumbleCoverage);\n\n // \u2500\u2500 Broken-color pigment: stable wax/pigment patches in OKLCh (W5), not flicker.\n vec2 pigmentCell = floor(pr * max(scale * 0.18, 32.0));\n float pigmentMask = smoothstep(0.28, 0.82, vnoise(pr * scale * 0.21 + 19.0));\n result = brokenColorJitter(\n result,\n hash21(pigmentCell + 17.0),\n hash21(pigmentCell * 2.1 + 31.0),\n 0.45 + 0.55 * pigmentMask\n );\n\n // Crayon is saturation-amplified (the wax chroma punch \u2014 but DRY, no sheen).\n result = saturate3(result, 1.08);\n\n return result;\n}\n\n// \u2500\u2500 StrokeProfile \u2014 the oil-stroke parameter vector (AX.W12, slice 8 F6) \u2500\u2500\u2500\u2500\u2500\u2500\n// The SBR \"stroke = parameter vector\" canon (facet 11): the per-mode if-ladder knobs\n// become struct FIELDS \u2014 logic-as-DATA, not an imperative branch. profileFor(medium,\n// mode) populates the profile for a (medium, mode) pair; paintStrokeLayers(profile) runs\n// the four-layer bestOil/paintOver cascade off it. A new medium (the W13 van-Gogh /\n// oil-pastel profiles) AUTHORS a profile entry \u2014 it never edits a monolith.\nstruct StrokeProfile {\n int shapeType; // 0 tapered, 1 load-drag, 2 dab, 3 even, 4 comma/crescent\n float bristleAmp; // edge raggedness 0..0.5\n float streakFreq; // internal-streak spatial frequency\n float streakAmp; // internal-streak amplitude\n float impastoAmp; // paint-thickness contribution (the relight reads the height)\n float hardness; // edge-compositing crispness 0..1\n float toothScale; // canvas-tooth (linen weave) spatial frequency\n float toothAmp; // canvas-tooth amplitude\n float pigmentSat; // pigment saturation boost (OKLCh chroma scale)\n float densityBig; // layer-1 (big gestural) placement density gate\n float densityMed; // layer-2 (medium body) placement density gate\n float densitySml; // layer-3 (small dabs) placement density gate\n float energyGrade; // AX.W13 \u2014 SBR energy-grade magnitude (0 off; 1 the van-Gogh\n // Starry-Night length cascade). The energy grade is a PROFILE\n // field, NOT a buried uMedium==5 bestOil branch (slice 8 F0).\n float impastoFloor;// AX.W13 \u2014 the per-stroke height-crown floor (0.4 oil falloff;\n // 1.0 van-Gogh FULL-height crown so each dab catches its glint).\n float densityFill; // AX.W13 \u2014 layer-4 fill-dab density. Oil/oil-pastel fill the\n // bald spots (0.95, full coverage); van-Gogh sets it LOW so the\n // sparse atomic dabs keep their visible inter-stroke ground gaps\n // (the atomicity read \u2014 a 0.95 fill would close every gap to a smear).\n float groundFloor; // AX.W13 \u2014 the bare-ground darken floor. The gaps between strokes\n // (low accumulated height) multiply toward this floor, so van-Gogh's\n // sparse atomic dabs read over a visibly darker underpainting (the\n // Starry-Night visible ground). Oil/oil-pastel keep 1.0 (no darken).\n};\n\n// The (medium, mode) -> StrokeProfile selector. The if-ladder's knobs are the profile's\n// fields; a new medium adds a CASE here (never an edit to a dispatch body). mode is the\n// uStrokeMode oil-stroke sub-mode (0 oil, 1 palette-knife, 3 brushwork). crayon\n// (uMedium==4) is a PEER tooth-multiply medium that never reaches the stroke cascade.\n// The painterly STROKE mediums are oil (MEDIUM_OIL), van-Gogh (MEDIUM_VANGOGH) and\n// oil-pastel (MEDIUM_OILPASTEL) \u2014 each AUTHORS its own profile entry below.\nStrokeProfile profileFor(int medium, int mode) {\n // The oil baseline (mode 0) \u2014 balanced modern-abstract/palette-knife hybrid.\n StrokeProfile prof = StrokeProfile(\n 0, // shapeType \u2014 tapered\n 0.25, // bristleAmp\n 9.0, // streakFreq\n 0.09, // streakAmp\n 0.9, // impastoAmp\n 0.80, // hardness\n 240.0, // toothScale\n 0.09, // toothAmp\n 1.03, // pigmentSat\n 0.65, // densityBig\n 0.78, // densityMed\n 0.90, // densitySml\n 0.0, // energyGrade \u2014 oil is uniform-length (no Starry-Night cascade)\n 0.4, // impastoFloor \u2014 oil's 0.4+0.6\u00B7edgeN crown falloff\n 0.92, // densityFill \u2014 oil fills DENSELY with the directional low-relief fill so the\n // flat-colour regions between the macro strokes are TEXTURED with\n // flow-aligned fine strokes (the \u00A74.2 anisotropy needs every pixel\n // to carry directional gradient; a flat untextured region reads as\n // an isotropic/degenerate tensor and drags mean A down). The fill\n // is now directional + low-streak, so dense coverage textures\n // WITHOUT the prior round-dab speckle.\n 1.0 // groundFloor \u2014 oil keeps the full base (no ground darken; fills everywhere)\n );\n\n // \u2500\u2500 Van-Gogh \u2014 first-class atomic comma/crescent dabs (slice 8 F0). NOT a length\n // modulation of oil: sparse high-contrast SEPARABLE marks with their own asymmetric\n // shape, the full Starry-Night energy cascade (energyGrade=1), and full-height\n // impasto crowns so each dab catches its own glint. The mode sub-modes don't apply\n // (van-Gogh has its own grammar), so this returns early.\n if (medium == MEDIUM_VANGOGH) {\n prof.shapeType = 4; // comma / crescent \u2014 the divisionist atomic dab\n prof.bristleAmp = 0.22; // a touch of raggedness on the loaded head\n prof.streakFreq = 16.0; // within-stroke streaks (the loaded comma) \u2014 kept in the\n // FFT inertial band (a too-fine streak falls past the \u00A74.3\n // resolved-band edge and reads as steeper, not shallower)\n prof.streakAmp = 0.22;\n prof.impastoAmp = 1.1; // paint per atomic dab \u2014 eased off 1.5 so the impasto crown\n // does not push the dab past the PBR-Neutral 0.8 highlight\n // knee (where it compresses + loses the directional contrast\n // the \u00A74.2 anisotropy reads)\n prof.hardness = 0.92; // crisp separable edges (visible inter-stroke gaps)\n prof.toothScale = 220.0;\n prof.toothAmp = 0.06;\n prof.pigmentSat = 0.60; // the van-Gogh chroma \u2014 pulled DOWN off the hand-set 1.12\n // so the rendered colorfulness lands inside [55.67, 95.67]\n // (the hand-set punch + the saturated indigo/cobalt/yellow\n // ramp pushed C past the garish ceiling \u2014 \u00A74.1 bidirectional)\n // SPARSE-BUT-FLOWING placement \u2014 visible inter-stroke canvas gaps (the atomicity read)\n // yet enough directional coverage that the swirl-rows read as coherent flowing bands\n // (the \u00A74.2 anisotropy needs the strokes to dominate the gradient field; too-sparse\n // gates left large flat-ground regions that read isotropic and dragged mean A down).\n prof.densityBig = 0.58;\n prof.densityMed = 0.68;\n prof.densitySml = 0.74;\n prof.energyGrade = 1.0; // the full Starry-Night length cascade (the profile field)\n prof.impastoFloor = 1.0; // FULL-height crowns \u2014 every atomic dab catches its glint\n prof.densityFill = 0.30; // a LIGHT directional fill \u2014 textures the dark ground with\n // flow-aligned fine strokes so the gaps carry directional\n // gradient (the \u00A74.2 A lift: an untextured dark ground reads\n // isotropic) WHILE staying open enough that the bright atomic\n // dabs still read separable over it (the gap-fraction floor\n // stays satisfied \u2014 the fill is fine + dark, not a smear).\n prof.groundFloor = 0.31; // darken the bare-ground gaps to the visible Starry-Night\n // underpainting so the bright impasto dabs read separable \u2014\n // the dab\u2194ground contrast injects MID-scale energy (the \u00A74.3\n // \u03B2-flatten: the PBR-Neutral highlight compression concentrated\n // energy at low-k and steepened \u03B2). 0.31 is the balance point:\n // deep enough to hold \u03B2 in-band, light enough that the textured\n // ground keeps the \u00A74.2 coherence the too-dark 0.26 floor cost.\n return prof;\n }\n\n // \u2500\u2500 Oil-pastel \u2014 broad smeared directional strokes deposited via the brush engine\n // (slice 8 F1). Creamy soft edges (low hardness), heavy build-up, and a chroma punch.\n // Distinct from the dry-crayon tooth-multiply (mediumCrayon): oil-pastel LAYS strokes.\n if (medium == MEDIUM_OILPASTEL) {\n prof.shapeType = 0; // tapered directional smear \u2014 a round dab reads locally\n // isotropic (steep \u03B2 / low A); the creamy oil-pastel mark\n // is a broad DIRECTIONAL smear, which carries the \u00A74.2\n // coherence + adds the directional mid-band the \u00A74.3 slope\n // needs (the round-dab profile rolled \u03B2 off to \u22122.8)\n prof.bristleAmp = 0.10; // smooth creamy edges (waxy pastel, not bristle)\n prof.streakFreq = 18.0; // finer internal smear \u2014 adds the mid/high-band the smooth\n // round-dab profile lacked (the \u03B2-too-steep fix); the\n // directional along-spine streak flattens the \u00A74.3 slope\n // without crossing the strokes\n prof.streakAmp = 0.20;\n prof.impastoAmp = 0.7; // build-up, but flatter than oil impasto\n prof.hardness = 0.42; // CREAMY \u2014 soft compositing, strokes blend on overlap\n prof.toothScale = 280.0;\n prof.toothAmp = 0.12; // the pastel tooth reads stronger\n prof.pigmentSat = 0.80; // the waxy chroma \u2014 eased off 1.16 so the rendered C clears\n // the \u00A74.1 band ceiling with margin while the K-M subtractive\n // overlap path (paintOverOklab) keeps the chroma OFF the grey floor\n prof.hardness = 0.58; // creamy but the strokes still REGISTER \u2014 a too-soft blend\n // (0.42) smeared the marks into the smooth colour zones and\n // the field rolled off too steep (\u03B2\u2248\u22122.9, a near-gradient);\n // a crisper deposit keeps the mid/high-band the \u22125/3 slope needs\n prof.densityBig = 0.62; // broad directional coverage \u2014 but NOT over-dense: too many\n // overlapping creamy strokes point in slightly-varied\n // directions and the local \u00A74.2 coherence DROPS (over-dense\n // measured A=0.57 < the 0.62-density A=0.63). The mid-density\n // flow-aligned deposit is the coherence sweet spot.\n prof.densityMed = 0.78;\n prof.densitySml = 0.90;\n prof.energyGrade = 0.80; // a strong Starry-Night length cascade \u2014 varies stroke length\n // by luma/coherence so the dab-size energy spreads across\n // scales (the \u22125/3 cascade the uniform-length 0.0 grade lacked,\n // the \u00A74.3 \u03B2-too-steep fix). Not the full van-Gogh 1.0 (oil-\n // pastel keeps its creamy broad character).\n prof.impastoFloor = 0.55; // a softer crown than van-Gogh's full-height glint\n return prof;\n }\n\n // \u2500\u2500 Oil sub-modes (mode dispatch on the oil medium).\n if (mode == 1) { // palette knife \u2014 razor edges, heavy impasto\n prof.shapeType = 3; // flat, even\n prof.bristleAmp = 0.12;\n prof.streakFreq = 4.0; prof.streakAmp = 0.05;\n prof.impastoAmp = 1.6;\n prof.hardness = 0.95;\n prof.toothAmp = 0.04;\n prof.densityBig = 0.80; prof.densityMed = 0.88; prof.densitySml = 0.70;\n } else if (mode == 3) { // thick brushwork \u2014 heavy bristle brush\n prof.shapeType = 0; // tapered\n prof.bristleAmp = 0.32;\n prof.streakFreq = 14.0; prof.streakAmp = 0.14;\n prof.impastoAmp = 1.2;\n prof.hardness = 0.85;\n prof.toothAmp = 0.07;\n }\n return prof;\n}\n\n// The single parameterized four-layer stroke cascade (AX.W12). The four hand-unrolled\n// bestOil/paintOver invocations collapse into ONE body driven by the profile + the\n// uniform-derived per-layer scale/anisotropy multipliers (which are mode-INVARIANT \u2014 the\n// per-layer offsets, seeds, and len/wid muls are fixed across modes, so they stay here as\n// the cascade's structure; only the profile's knobs differentiate the medium). The\n// mode passes through for the two mode-special-cased shapes (knife layer-3 dabs +\n// layer-4 fill shape), which are placement details of the cascade, not profile knobs.\nvoid paintStrokeLayers(inout vec3 col, inout float height, StrokeProfile prof,\n int mode, vec2 p, float t) {\n // Scales & multipliers from uniforms (mode-invariant cascade structure).\n float baseScale = max(uStrokeScale * 0.006, 0.008);\n // Three primary layers: big gestural, medium body, small dabs.\n // W-AUR-STUDIO D5 \u2014 the \u22125/3 radii respacing was MEASURED + REVERTED (recorded, not\n // silently struck). The \u03C6-adjacent geometric candidate (2.4 / 1.45 / 0.87, a fixed\n // \u22481.66\u00D7 step) moved oil-pastel \u03B2 \u22122.534 \u2192 \u22122.413 \u2014 TOWARD the \u22125/3 band but NOT into\n // it (floor \u22121.85), so the keep-iff-into-band gate failed. The single-pass WebGL2 path\n // is the true limiter (HC-aurora \u00A75): the oil-pastel \u03B2 + the oil/oil-pastel anisotropy\n // residual is the named AY.W-AUR-T5 multi-pass anisotropic-Kuwahara candidate. The\n // hand-set 2.4 / 1.1 / 0.45 stays \u2014 it is van-Gogh's landed-band spacing.\n float sBig = baseScale * 2.4;\n float sMed = baseScale * 1.1;\n float sSml = baseScale * 0.45;\n\n // Strokes are elongated HARD (long\u00B7thin) so the rendered field reads strongly\n // directional \u2014 the \u00A74.2 structure-tensor anisotropy lift. A short fat dab is locally\n // isotropic and drags the measured A down; a long thin stroke that hugs the tensor\n // tangent is what gives Starry Night its A\u22480.83. The width muls are pulled tighter to\n // keep the long\u00B7thin aspect.\n float lenMulBig = mix(3.0, 5.2, uStrokeAnisotropy);\n float widMulBig = mix(0.42, 0.22, uStrokeAnisotropy);\n float lenMulMed = mix(2.8, 4.8, uStrokeAnisotropy);\n float widMulMed = mix(0.40, 0.21, uStrokeAnisotropy);\n float lenMulSml = mix(2.2, 3.6, uStrokeAnisotropy);\n float widMulSml = mix(0.36, 0.23, uStrokeAnisotropy);\n\n float jitterAmt = 0.75; // large jitter \u2014 no grid\n vec2 flow = flowField(p, t);\n\n // Layer 1 \u2014 big gestural strokes (sparse, shaping)\n StrokeHit hBig = bestOil(p, sBig, lenMulBig, widMulBig, jitterAmt * 0.55,\n prof.densityBig, prof.shapeType, prof.bristleAmp, flow, t, 1.3,\n prof.energyGrade);\n paintOver(col, height, hBig, prof.streakFreq * 0.7, prof.streakAmp,\n uImpasto * prof.impastoAmp * uStrokeAmount, prof.hardness, 1.3, prof.impastoFloor);\n\n // Layer 2 \u2014 medium body strokes\n StrokeHit hMed = bestOil(p + vec2(11.3, 3.7), sMed, lenMulMed, widMulMed,\n jitterAmt, prof.densityMed, prof.shapeType, prof.bristleAmp, flow, t, 2.7,\n prof.energyGrade);\n paintOver(col, height, hMed, prof.streakFreq, prof.streakAmp,\n uImpasto * prof.impastoAmp * uStrokeAmount, prof.hardness, 2.7, prof.impastoFloor);\n\n // Layer 3 \u2014 small strokes (more frequent, smaller). Even the knife layer-3 stays the\n // medium's DIRECTIONAL shape, not a round dab \u2014 the round-dab sparkle was a fine-scale\n // isotropic speckle that dragged the \u00A74.2 anisotropy down + rolled the \u00A74.3 slope shallow.\n int smlShape = prof.shapeType;\n StrokeHit hSml = bestOil(p + vec2(-5.1, 8.4), sSml, lenMulSml, widMulSml,\n jitterAmt * 0.9, prof.densitySml, smlShape,\n prof.bristleAmp * 0.85, flow, t, 4.1, prof.energyGrade);\n paintOver(col, height, hSml, prof.streakFreq * 1.4, prof.streakAmp * 0.6,\n uImpasto * prof.impastoAmp * 0.45 * uStrokeAmount, prof.hardness, 4.1, prof.impastoFloor);\n\n // Layer 4 \u2014 fill strokes (dense, fine) \u2014 cover bald spots. The density is\n // PROFILE-driven (prof.densityFill): oil/oil-pastel fill to full coverage; van-Gogh\n // keeps it sparse so the bare-ground gaps between its atomic dabs survive. The fill is\n // ELONGATED + flow-oriented (NOT a round dab) \u2014 a dense round-dab fill is locally\n // isotropic and was the dominant \u00A74.2 anisotropy sink; an oriented fine stroke keeps the\n // fill directional so the whole field reads coherent.\n float sFill = baseScale * 0.22;\n float lenMulFill = mix(2.0, 3.2, uStrokeAnisotropy);\n float widMulFill = mix(0.34, 0.24, uStrokeAnisotropy);\n int fillShape = (mode == 1) ? 3 : prof.shapeType; // knife=even; others inherit the medium's directional shape\n StrokeHit hFill = bestOil(p + vec2(3.9, -6.2), sFill, lenMulFill, widMulFill,\n jitterAmt * 0.8, prof.densityFill, fillShape,\n prof.bristleAmp * 0.6, flow, t, 8.9, prof.energyGrade);\n // The fill is a low-relief, low-streak base coat \u2014 it covers bald spots WITHOUT adding\n // fine bright speckle (a high-impasto/high-streak fill caught a per-dab glint that read\n // as isotropic noise over the directional macro strokes \u2014 the \u00A74.2/\u00A74.3 sink). Its\n // positional jitter is tamed too so the fill strokes stay flow-aligned, not scattered.\n paintOver(col, height, hFill, prof.streakFreq * 1.2, prof.streakAmp * 0.35,\n uImpasto * prof.impastoAmp * 0.18 * uStrokeAmount, prof.hardness * 0.9, 8.9, prof.impastoFloor);\n\n // Optional crosshatch layer\n if (uStrokeLayers == 2) {\n vec2 flow2 = vec2(-flow.y, flow.x);\n StrokeHit hX = bestOil(p + vec2(7.3, -2.1), sMed, lenMulMed * 0.9, widMulMed,\n jitterAmt, prof.densityMed * 0.7, prof.shapeType, prof.bristleAmp, flow2, t, 6.5,\n prof.energyGrade);\n paintOver(col, height, hX, prof.streakFreq, prof.streakAmp * 0.85,\n uImpasto * prof.impastoAmp * 0.55 * uStrokeAmount, prof.hardness, 6.5, prof.impastoFloor);\n }\n}\n\n// The shared stroke-medium SUBSTRATE finish (AX.W12 + AX.W13): paint the four-layer\n// cascade off the profile, then canvas-tooth + relight + saturation. The three painterly\n// STROKE mediums (oil / van-Gogh / oil-pastel) each AUTHOR their own profile and call\n// this \u2014 the substrate is shared, the PROFILE (not a dispatch-body fork) differentiates\n// the medium (slice 8 F6). mode passes through for the cascade's mode-special-cased shapes.\nvec3 paintStrokeMedium(vec3 col, vec2 p, float t, StrokeProfile prof, int mode) {\n vec3 result = col;\n // AW.W4.2 \u2014 accumulated paint HEIGHT across the stroke layers. The relight reads\n // its gradient for the normal; the canvas tooth seeds the base relief.\n float height = 0.0;\n paintStrokeLayers(result, height, prof, mode, p, t);\n\n // Canvas tooth \u2014 linen weave\n float tooth1 = vnoise(p * prof.toothScale);\n float tooth2 = vnoise(p * prof.toothScale * vec2(0.6, 2.4) + 37.0);\n float tooth = (0.6 * tooth1 + 0.4 * tooth2) - 0.5;\n result *= 1.0 + tooth * prof.toothAmp * uCanvasGrain;\n\n // AW.W4.2 \u2014 relight the accumulated paint height with the movable uLightDir\n // source (diffuse + Blinn specular, in LINEAR before aces()). The canvas tooth\n // is the base relief term so the weave also catches the raking light.\n float canvasBase = tooth * prof.toothAmp * 0.5;\n result = relightImpasto(result, height, canvasBase);\n\n // AX.W13 \u2014 the visible ground. The bare-ground gaps (low accumulated stroke height)\n // multiply toward prof.groundFloor, so van-Gogh's sparse atomic dabs read as separable\n // marks over a darker underpainting (oil/oil-pastel keep groundFloor=1.0 \u2192 no-op). The\n // smoothstep keeps the impasto dabs (high height) at full value; only the open ground\n // between them darkens.\n result *= mix(prof.groundFloor, 1.0, smoothstep(0.0, 0.38, height));\n\n // Pigment saturation boost\n result = saturate3(result, prof.pigmentSat);\n\n return result;\n}\n\nvec3 mediumOil(vec3 col, vec2 p, float t) {\n // The oil medium is a thin body: fetch the oil profile (mode-dispatched), paint via\n // the shared stroke substrate. uStrokeMode: 0 oil (gestural), 1 knife, 3 brushwork.\n int mode = uStrokeMode;\n StrokeProfile prof = profileFor(MEDIUM_OIL, mode);\n return paintStrokeMedium(col, p, t, prof, mode);\n}\n\n// AX.W13 \u2014 the van-Gogh atomic-stroke medium is now a FIRST-CLASS body, NOT a\n// mediumOil passthrough (slice 8 F0). It composes its OWN vangogh StrokeProfile (the\n// comma/crescent shapeType, sparse high-contrast atomic placement with visible\n// inter-stroke gaps, the full Starry-Night energy-grade cascade as a PROFILE field,\n// and full-height impasto crowns) through the shared stroke substrate. The bridge forces\n// the ETF (tensor) orientation so the swirl-rows queue along the color field's tangent;\n// the within-stroke OKLCh broken color (paintOver) + the OKLab stroke OVER-composite\n// give pigment-true atom-level shimmer. No subject matter \u2014 the \"source image\" is the\n// generated nuclei field, so dabs trace its iso-bands (the Starry-Night swirl-rows).\nvec3 mediumVangogh(vec3 col, vec2 p, float t) {\n StrokeProfile prof = profileFor(MEDIUM_VANGOGH, 0);\n return paintStrokeMedium(col, p, t, prof, 0);\n}\n\n// AX.W13 \u2014 the oil-pastel medium (uMedium==6) is a DISTINCT stroke-deposition body,\n// split out of the dry-crayon tooth-multiply (mediumCrayon) (slice 8 F1). It DEPOSITS\n// broad smeared directional strokes via the same brush engine with a creamy soft\n// hardness, heavy pigment build-up where strokes overlap, and a chroma punch \u2014 the\n// stroke-deposition model that gives oil-pastel its depth and less-uniform read.\n// Shares the SUBSTRATE (the stroke cascade + tooth + relight) with oil/van-Gogh, NOT\n// the dispatch body of dry crayon. The bridge forces tensor orientation.\nvec3 mediumOilPastel(vec3 col, vec2 p, float t) {\n StrokeProfile prof = profileFor(MEDIUM_OILPASTEL, 0);\n return paintStrokeMedium(col, p, t, prof, 0);\n}";
|
|
@@ -5,7 +5,7 @@ export type { UseAuroraReturn } from "./composables/useAurora";
|
|
|
5
5
|
export { useCursorInteraction } from "./composables/useCursorInteraction";
|
|
6
6
|
export { createAurora } from "./composables/runtime";
|
|
7
7
|
export type { AuroraRuntimeMode, AuroraRuntimeOptions } from "./composables/runtime";
|
|
8
|
-
export { DEFAULT_AURORA_CONFIG, MAX_NUCLEI, MAX_STOPS, type AuroraConfig, type AuroraCursorApi, type AuroraFlow, type AuroraInstance, type AuroraInteractivity, type AuroraMedium, type AuroraNucleus, type FlowPattern, type OklchStop, type StrokeMode, type StrokeOrient, type WarpMode, } from "./constants/presets";
|
|
8
|
+
export { DEFAULT_AURORA_CONFIG, PAPER_WASH_GROUND, MAX_NUCLEI, MAX_STOPS, type AuroraConfig, type AuroraCursorApi, type AuroraFlow, type AuroraInstance, type AuroraInteractivity, type AuroraMedium, type AuroraNucleus, type FlowPattern, type OklchStop, type StrokeMode, type StrokeOrient, type WarpMode, } from "./constants/presets";
|
|
9
9
|
export { resolveAtoms, configToAtoms, nucleiPrior, DEFAULT_ATOMS, type AuroraAtoms, type AuroraMotionAtom, type AuroraZones, type AuroraZoneArrangement, type AuroraMediumAtom, type AuroraInteractivityAtom, } from "./composables/atoms";
|
|
10
10
|
export { cssToOklch, deriveAurora, flattenPalette, hexToOklchStop, oklchStopToHex, oklchToLinear, paletteToCssGradient, } from "./composables/color";
|
|
11
11
|
export type { AuroraHarmony, DeriveAuroraOptions, DeriveEasing, } from "./composables/color";
|
|
@@ -30,18 +30,6 @@ type __VLS_Props = {
|
|
|
30
30
|
link?: number;
|
|
31
31
|
/** Drift speed. Default 0.16. */
|
|
32
32
|
speed?: number;
|
|
33
|
-
/**
|
|
34
|
-
* AY.W-COHERE E3 — the per-instance outer-envelope RECESSION knob (the
|
|
35
|
-
* aurora `opacityCeiling` / fourier `intensity` sibling — the SAME prop NAME
|
|
36
|
-
* the other live substrates carry, so the four-substrate recession contract is
|
|
37
|
-
* ONE vocabulary). The painted edge/node/web/ripple alpha scales by this value
|
|
38
|
-
* OVER the mode-tuned `--constellation-alpha` base, so a constellation hero can
|
|
39
|
-
* RECEDE behind content (StoryHero sets 0.4–0.6) exactly as its aurora + fourier
|
|
40
|
-
* siblings do. Default `1` is byte-identical to HEAD (the draw-alpha trace is
|
|
41
|
-
* unchanged — the default-OFF canary). NOT a second token: `--constellation-alpha`
|
|
42
|
-
* stays the mode recession base, this is the per-instance loudness envelope.
|
|
43
|
-
*/
|
|
44
|
-
opacityCeiling?: number;
|
|
45
33
|
/**
|
|
46
34
|
* Seed for a REPRODUCIBLE field. A `number` or `string` (hashed) seeds the
|
|
47
35
|
* shared `mulberry32`; omit for a fresh `Math.random` field each mount.
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
/** Reference width the `k` scale factor is keyed to (CSS px). */
|
|
2
|
+
export declare const BASE_WIDTH = 1280;
|
|
2
3
|
export interface ConstellationNode {
|
|
3
4
|
x: number;
|
|
4
5
|
y: number;
|
|
@@ -70,6 +71,15 @@ export interface ConstellationWander {
|
|
|
70
71
|
/** the random extra idle (ms) added per cadence (so the rhythm is not metronomic). */
|
|
71
72
|
jitter: number;
|
|
72
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Auto-DRIFT cadence DEFAULTS (AY.W-CON1 source; tokenised in AY.W-CON2). The
|
|
76
|
+
* `--constellation-wander-idle`/`-wander-jitter` tokens override these on mount via
|
|
77
|
+
* `readInteractionConfig` (the SAME numeric `--constellation-*` cohort as the warp
|
|
78
|
+
* spring + the well gains); a prop `{ minIdle, jitter }` still wins over the token.
|
|
79
|
+
* The 8s/8s default rhythm re-targets the focal mark every 8–16s (the slides cadence).
|
|
80
|
+
*/
|
|
81
|
+
export declare const DEFAULT_WANDER_IDLE = 8000;
|
|
82
|
+
export declare const DEFAULT_WANDER_JITTER = 8000;
|
|
73
83
|
/**
|
|
74
84
|
* The warp-spring tuning the integrator reads (AY.W-CON2). Tokenised numeric (the
|
|
75
85
|
* `--constellation-warp-*` cohort) so a consumer retunes the warp WITHOUT editing
|
|
@@ -196,15 +206,6 @@ export interface ConstellationProps {
|
|
|
196
206
|
link?: number;
|
|
197
207
|
/** Drift speed. Default 0.16. */
|
|
198
208
|
speed?: number;
|
|
199
|
-
/**
|
|
200
|
-
* AY.W-COHERE E3 — the per-instance outer-envelope RECESSION knob (the aurora
|
|
201
|
-
* `opacityCeiling` / fourier `intensity` sibling — ONE recession vocabulary
|
|
202
|
-
* across the four live substrates). Scales the painted edge/node/web/ripple
|
|
203
|
-
* alpha OVER the mode-tuned `--constellation-alpha` base so the lattice can
|
|
204
|
-
* RECEDE behind content (0.4–0.6 in a hero). Default `1` is byte-identical to
|
|
205
|
-
* HEAD.
|
|
206
|
-
*/
|
|
207
|
-
opacityCeiling?: number;
|
|
208
209
|
/** Seed for a reproducible field (number or hashed string); omit for `Math.random`. */
|
|
209
210
|
seed?: number | string;
|
|
210
211
|
/** Steer-toward-cursor + tap ripples. Default true; auto-off under reduced-motion. */
|
|
@@ -260,6 +261,31 @@ export interface ConstellationProps {
|
|
|
260
261
|
/** The skin seam — paints the consumer's focal mark on the live field. */
|
|
261
262
|
drawOverlay?: (ctx: CanvasRenderingContext2D, field: ConstellationField, now: number) => void;
|
|
262
263
|
}
|
|
264
|
+
export declare const DEFAULT_PALETTE: ConstellationPalette;
|
|
265
|
+
/**
|
|
266
|
+
* Resolve the FULL neutral palette + legibility weights off a canvas's resolved
|
|
267
|
+
* custom properties (AX.W17). The colors AND the alpha multipliers route through
|
|
268
|
+
* the same `getComputedStyle` probe, so a dark-mode flip re-resolves BOTH the
|
|
269
|
+
* `:root`/`.dark` color arms AND the per-mode alpha defaults in one read.
|
|
270
|
+
*/
|
|
271
|
+
export declare function readPalette(canvas: HTMLCanvasElement): ConstellationPalette;
|
|
272
|
+
/**
|
|
273
|
+
* Read the NUMERIC interaction-tuning tokens (the warp spring + the gravity-well
|
|
274
|
+
* gains) off a canvas's resolved custom properties — ONCE on mount (AY.W-CON2),
|
|
275
|
+
* via `parseFloat`, NOT per-frame `getComputedStyle` (the hot loop stays clean).
|
|
276
|
+
* Returns `{ warp, well }` configs the field carries; every member falls back to
|
|
277
|
+
* the shipped default when the token is absent (an SSR / no-token mount reads the
|
|
278
|
+
* byte-identical spring). The tokens are PLAIN numbers (`0.55`, `12000`), immune
|
|
279
|
+
* to the W30 `light-dark()`-into-Canvas2D leak (they never reach a `fillStyle`).
|
|
280
|
+
*/
|
|
281
|
+
export declare function readInteractionConfig(canvas: HTMLCanvasElement): {
|
|
282
|
+
warp: ConstellationWarpConfig;
|
|
283
|
+
well: ConstellationWellConfig;
|
|
284
|
+
wander: {
|
|
285
|
+
minIdle: number;
|
|
286
|
+
jitter: number;
|
|
287
|
+
};
|
|
288
|
+
};
|
|
263
289
|
/**
|
|
264
290
|
* Seed `count` drifting nodes inside `w × h`. `rng` is a `() => number` in
|
|
265
291
|
* `[0, 1)` (the glass-ui `mulberry32`/`Math.random`); a seeded `rng` lays out a
|
|
@@ -299,3 +325,118 @@ export declare function refitField(field: ConstellationField, prevW: number, pre
|
|
|
299
325
|
* (a click-warp in flight pre-empts the cadence — `warpSettled` reports false).
|
|
300
326
|
*/
|
|
301
327
|
export declare function stepField(field: ConstellationField, k: number, speed: number, pointer: ConstellationPointer | null, dt?: number, now?: number, rng?: () => number): void;
|
|
328
|
+
/**
|
|
329
|
+
* Advance the gravity-well one `dt` (AY.W-CON2). A transient held-pointer force
|
|
330
|
+
* composed inside `stepField` (NO new rAF): ease `well.strength` toward
|
|
331
|
+
* `well.target` (1 held / 0 released) at `cfg.ramp`/s; while active, add an
|
|
332
|
+
* inverse-square pull toward the held point onto each node within `cfg.reach`
|
|
333
|
+
* (the `max(d, soften)` no-singularity floor + the `cfg.maxSpeed` no-slingshot
|
|
334
|
+
* clamp); ALWAYS ease every node's |v| back toward `speed` (the field-cools
|
|
335
|
+
* invariant — so a released well re-settles). No-ops (entirely skipped) when
|
|
336
|
+
* `field.well` is undefined → the default render is byte-identical to HEAD.
|
|
337
|
+
*
|
|
338
|
+
* `dt` is clamped to {@link WARP_DT_CLAMP} (the same park-resume guard the warp
|
|
339
|
+
* uses) so a tab-throttle gap cannot slingshot the field in one giant step.
|
|
340
|
+
*/
|
|
341
|
+
export declare function stepWell(field: ConstellationField, k: number, speed: number, dt: number): void;
|
|
342
|
+
/**
|
|
343
|
+
* Warp spring tuning DEFAULTS — gentle critically-damped (no overshoot on a focal
|
|
344
|
+
* mark). The `--constellation-warp-response`/`-zeta` tokens override these on mount
|
|
345
|
+
* via `field.warpCfg` (AY.W-CON2); these stay the byte-identical fallback.
|
|
346
|
+
*
|
|
347
|
+
* `WARP_RESPONSE` is the keyframes.js `(response, dampingFraction)` model's ANGULAR
|
|
348
|
+
* PERIOD (the SwiftUI `.spring(response:)` axis), `ω₀ = 2π/response` — NOT a
|
|
349
|
+
* settle-duration. At ζ=1 the 2%-settle lands at `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`
|
|
350
|
+
* (the `(1 + ω₀t)e^(−ω₀t)` critically-damped envelope); the shipped 0.55 settles
|
|
351
|
+
* at ≈0.51s. This is the AY.W-CON2 ω-reconcile: the engine keeps the keyframes.js
|
|
352
|
+
* `ω₀ = 2π/response` convention (the shared house model — `regen-spring-tokens.mjs`,
|
|
353
|
+
* `keyframes.d.ts:860-882`) and mints NO second ω formula; the SEMANTIC honesty
|
|
354
|
+
* (period, not settle) lives in this doc + the token comment + the settle-time unit
|
|
355
|
+
* assertion, so a consumer setting the token gets the documented behaviour at ANY ζ.
|
|
356
|
+
*/
|
|
357
|
+
export declare const WARP_RESPONSE = 0.55;
|
|
358
|
+
export declare const WARP_ZETA = 1;
|
|
359
|
+
/**
|
|
360
|
+
* Gravity-well tuning DEFAULTS (AY.W-CON2). The `--constellation-well-*` tokens
|
|
361
|
+
* override these on mount via `field.well.cfg`; these stay the fallback. SET by the
|
|
362
|
+
* §6 egg-live π readback (the field-perturbs-then-cools capture is the binding
|
|
363
|
+
* truth) — a moderate gain over a generous reach, a brisk ramp, a tight no-slingshot
|
|
364
|
+
* speed cap, and the singularity-soften floor.
|
|
365
|
+
*/
|
|
366
|
+
export declare const DEFAULT_WELL_CONFIG: ConstellationWellConfig;
|
|
367
|
+
/**
|
|
368
|
+
* The nearest DRIFTING node to `(px, py)` in canvas-local px — a linear O(count)
|
|
369
|
+
* min-d² scan (count 64 default — negligible; matches the O(count²) edge pass).
|
|
370
|
+
* "Lattice point" = the nearest drifting NODE (the constellation has NO fixed
|
|
371
|
+
* lattice). `excludeIdx` drops a node from the candidate set (the focal node
|
|
372
|
+
* excludes ITSELF, so a cursor-on-focal warp no-ops). Returns `-1` if no
|
|
373
|
+
* eligible node exists (empty field, or only the excluded node).
|
|
374
|
+
*/
|
|
375
|
+
export declare function nearestNode(field: ConstellationField, px: number, py: number, excludeIdx?: number): number;
|
|
376
|
+
/**
|
|
377
|
+
* Advance the focal-node warp spring one `dt` (seconds). A per-axis 2nd-order
|
|
378
|
+
* critically-damped integrator over `field.warp.{x,y}` toward the LIVE position
|
|
379
|
+
* of `field.nodes[field.warp.targetIdx]` — re-read EACH frame, so the spring
|
|
380
|
+
* CHASES a drifting target and arrives ON it (the identity-ride). No-ops when no
|
|
381
|
+
* warp is active (`targetIdx < 0`). `dt` is clamped to {@link WARP_DT_CLAMP} so a
|
|
382
|
+
* tab-throttle / offscreen-park-resume gap cannot teleport the mark.
|
|
383
|
+
*
|
|
384
|
+
* x += v·dt ; v += (−2ζω·v − ω²·(x − target))·dt
|
|
385
|
+
*
|
|
386
|
+
* Reads `(response, ζ)` from `field.warpCfg` (the tokenised override — AY.W-CON2),
|
|
387
|
+
* falling back to the shipped `WARP_RESPONSE`/`WARP_ZETA` defaults. `ω = 2π/response`
|
|
388
|
+
* is the keyframes.js `(response, dampingFraction)` convention (the SHARED house
|
|
389
|
+
* model — `ω₀` is the angular frequency, `response` its ANGULAR PERIOD, NOT a
|
|
390
|
+
* settle-duration; at ζ=1 the 2%-settle is `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`). NO
|
|
391
|
+
* second ω formula is minted (the ω-reconcile). NOT its rAF — the FORBID-useSpring
|
|
392
|
+
* contract (a second rAF would defeat the parked-substrate one-path freeze).
|
|
393
|
+
*/
|
|
394
|
+
export declare function warpStep(field: ConstellationField, dt: number): void;
|
|
395
|
+
/**
|
|
396
|
+
* Point the warp at a node INDEX (the live target-source seam). The focal node
|
|
397
|
+
* re-points to `idx`; the spring chases `nodes[idx]`'s LIVE position FROM the
|
|
398
|
+
* focal mark's CURRENT position (`warp.{x,y}`) — a continuous spring-eased path,
|
|
399
|
+
* never a snap. The component seeds `warp.{x,y}` at field-center on first layout,
|
|
400
|
+
* so even the first warp springs from a real start point. `idx < 0` clears the
|
|
401
|
+
* warp (the focal mark is removed). Re-pointing does NOT zero the velocity, so a
|
|
402
|
+
* mid-flight re-target curves smoothly toward the new node.
|
|
403
|
+
*/
|
|
404
|
+
export declare function setWarpTarget(field: ConstellationField, idx: number): void;
|
|
405
|
+
/**
|
|
406
|
+
* Warp the focal node to the nearest drifting node to a canvas-LOCAL px point
|
|
407
|
+
* (the `warpTo(point)` primitive). The DEGENERATE case — the click's UNCONSTRAINED
|
|
408
|
+
* nearest node is already the current focal (cursor on/closest to the focal mark)
|
|
409
|
+
* — NO-OPS (returns the current focal; a click on yourself does not re-warp). Any
|
|
410
|
+
* OTHER click re-points to the nearest node, with the focal EXCLUDED from the
|
|
411
|
+
* candidate set (you never re-warp to yourself; the next-nearest wins). Returns
|
|
412
|
+
* the chosen node index, or `-1` when no eligible node exists. The component's
|
|
413
|
+
* `warpTo(clientX, clientY)` sugar maps client→local px via `toLocal` first.
|
|
414
|
+
*/
|
|
415
|
+
export declare function warpTo(field: ConstellationField, px: number, py: number): number;
|
|
416
|
+
/**
|
|
417
|
+
* Is the warp spring ARRIVED on its target (AY.W-CON1)? True when there is no
|
|
418
|
+
* active target (`targetIdx < 0`) OR the focal's gap to its LIVE target node is
|
|
419
|
+
* within {@link WARP_SETTLE_BAND}. A click-warp in flight (hundreds of px out)
|
|
420
|
+
* reports NOT arrived, so a user click always PRE-EMPTS the auto-drift cadence
|
|
421
|
+
* (the wander only re-targets a spring that has reached its current node). The
|
|
422
|
+
* gate is POSITION-only by design — a critically-damped spring tracking a drifting
|
|
423
|
+
* node carries a non-zero steady-state velocity forever, so a velocity term would
|
|
424
|
+
* never clear on a live field.
|
|
425
|
+
*/
|
|
426
|
+
export declare function warpSettled(field: ConstellationField): boolean;
|
|
427
|
+
/**
|
|
428
|
+
* Pick a random eligible node index for the auto-drift re-target (AY.W-CON1) —
|
|
429
|
+
* any node EXCEPT the current `focalIndex` (so the focal actually MOVES). `rng`
|
|
430
|
+
* is the seeded `() => number` in `[0, 1)`. A degenerate field (≤1 node, or only
|
|
431
|
+
* the current focal) returns the current focal, which `setWarpTarget` no-ops
|
|
432
|
+
* cleanly (no crash, no jump).
|
|
433
|
+
*/
|
|
434
|
+
export declare function pickWanderTarget(field: ConstellationField, rng: () => number): number;
|
|
435
|
+
/** Pass 1 — hairline edges between any two nodes within `link` px (alpha falls off with distance). */
|
|
436
|
+
export declare function drawEdges(ctx: CanvasRenderingContext2D, field: ConstellationField, link: number, palette: ConstellationPalette): void;
|
|
437
|
+
/** Pass 2 — ambient node dots. */
|
|
438
|
+
export declare function drawNodes(ctx: CanvasRenderingContext2D, field: ConstellationField, palette: ConstellationPalette): void;
|
|
439
|
+
/** Pass 3 — the cursor joins the web: faint links to nodes within reach + a soft cursor node. */
|
|
440
|
+
export declare function drawPointerWeb(ctx: CanvasRenderingContext2D, field: ConstellationField, link: number, palette: ConstellationPalette, pointer: ConstellationPointer | null): void;
|
|
441
|
+
/** Pass 4 — tap ripples: expanding rings that fade over ~0.9s; consumed entries are spliced. */
|
|
442
|
+
export declare function drawRipples(ctx: CanvasRenderingContext2D, field: ConstellationField, now: number, ripples: ConstellationRipple[], palette: ConstellationPalette): void;
|
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
export { default as Constellation } from "./Constellation.vue";
|
|
2
|
-
export { seedField, stepField, refitField, BASE_WIDTH, } from "./constellationField";
|
|
3
|
-
export { stepWell, nearestNode, readInteractionConfig, warpStep, warpTo, setWarpTarget, warpSettled, pickWanderTarget, DEFAULT_WELL_CONFIG, DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, WARP_RESPONSE, WARP_ZETA, } from "./constellationInteraction";
|
|
4
|
-
export { readPalette, drawEdges, drawNodes, drawPointerWeb, drawRipples, DEFAULT_PALETTE, } from "./constellationDraw";
|
|
2
|
+
export { seedField, stepField, stepWell, refitField, readPalette, drawEdges, drawNodes, drawPointerWeb, drawRipples, nearestNode, readInteractionConfig, warpStep, warpTo, setWarpTarget, warpSettled, pickWanderTarget, BASE_WIDTH, DEFAULT_PALETTE, DEFAULT_WELL_CONFIG, DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, WARP_RESPONSE, WARP_ZETA, } from "./constellationField";
|
|
5
3
|
export type { ConstellationNode, ConstellationRipple, ConstellationPointer, ConstellationPalette, ConstellationField, ConstellationWarp, ConstellationWarpConfig, ConstellationWander, ConstellationWell, ConstellationWellConfig, ConstellationProps, } from "./constellationField";
|
|
@@ -13,22 +13,11 @@ type __VLS_Props = {
|
|
|
13
13
|
* @default false
|
|
14
14
|
*/
|
|
15
15
|
disableTransitions?: boolean;
|
|
16
|
-
/**
|
|
17
|
-
* Opt-in slow-ECLIPSE register: a LONG-PRESS (vs the normal click) flips
|
|
18
|
-
* the mode through an indulgent, stretched sun↔moon cross-fade — the
|
|
19
|
-
* `--toggle-eclipse-duration` (≈1600ms) over the default 750ms. The bare
|
|
20
|
-
* `@click` flip is UNCHANGED (the default-path canary). Under
|
|
21
|
-
* `prefers-reduced-motion: reduce` the long-press flips INSTANTLY (no
|
|
22
|
-
* eclipse). Default false — the toggle behaves exactly as before.
|
|
23
|
-
* @default false
|
|
24
|
-
*/
|
|
25
|
-
eclipse?: boolean;
|
|
26
16
|
};
|
|
27
17
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
28
18
|
size: DarkModeToggleSize;
|
|
29
19
|
passive: boolean;
|
|
30
20
|
disableTransitions: boolean;
|
|
31
|
-
eclipse: boolean;
|
|
32
21
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
33
22
|
declare const _default: typeof __VLS_export;
|
|
34
23
|
export default _default;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeckProgress — a thin `:value`-only wrapper that renders the shipped
|
|
3
|
+
* `<Progress variant="default">` styled as the `.glass-progress-rail`
|
|
4
|
+
* deck-position rail (AW.W16).
|
|
5
|
+
*
|
|
6
|
+
* It owns the rail LOOK and NOTHING ELSE. The CONSUMER owns:
|
|
7
|
+
* - the position math — `value` is a pre-computed 0..100 percentage
|
|
8
|
+
* (`100·(k+1)/N` is a one-liner every consumer already keeps);
|
|
9
|
+
* - the viewport-pinned chrome — `position: fixed`,
|
|
10
|
+
* `bottom: env(safe-area-inset-bottom)`, the z-index — supplied via the
|
|
11
|
+
* forwarded `class` (a consumer pins it; this wrapper declares no
|
|
12
|
+
* positioning).
|
|
13
|
+
*
|
|
14
|
+
* NO `:index`/`:total` convenience path, NO `deckProgress()` math import, NO
|
|
15
|
+
* `/deck` subpath (the `/deck` name is reserved for the slides deck-engine
|
|
16
|
+
* lift). The wrapper ships on the root barrel like the other cherry-picked
|
|
17
|
+
* custom composites.
|
|
18
|
+
*/
|
|
19
|
+
export interface DeckProgressProps {
|
|
20
|
+
/** Pre-computed deck-position percentage (0..100) the consumer supplies. */
|
|
21
|
+
value: number;
|
|
22
|
+
/** Forwarded class — the consumer pins the rail's viewport chrome here. */
|
|
23
|
+
class?: string;
|
|
24
|
+
}
|
|
25
|
+
declare const __VLS_export: import("vue").DefineComponent<DeckProgressProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DeckProgressProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
26
|
+
declare const _default: typeof __VLS_export;
|
|
27
|
+
export default _default;
|