@mkbabb/glass-ui 3.13.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/CardAction-CW7a0m8M.js +253 -0
- package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DvZNQ_HF.js} +58 -53
- package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
- package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-uWnVxDab.js} +1 -1
- package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
- package/dist/{DataTable-BCddn3T3.js → DataTable-CuKwF7wr.js} +99 -97
- package/dist/DialogContent-DcKK8k9i.js +103 -0
- package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-BZNX5aVr.js} +3 -3
- package/dist/FadingScroll-DI6hQhT9.js +76 -0
- package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-b2uaAMRR.js} +1 -1
- package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-CbqbNwgU.js} +2 -2
- package/dist/IconChip-BTD-nay5.js +55 -0
- package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-Bl8gFZ8d.js} +1 -1
- package/dist/{Input-DWQQIOC4.js → Input-h9v5LeXf.js} +1 -1
- package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-RHdBP72w.js} +1 -1
- package/dist/Notification-VUwexFUf.js +43 -0
- package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
- package/dist/PopoverContent-DL7E6vJP.js +127 -0
- package/dist/{Progress-DwlUKGbr.js → Progress-DctG61iZ.js} +98 -78
- package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-yOpBzFYq.js} +2 -2
- package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-CrA8F0iV.js} +35 -20
- package/dist/{Switch-CsIuYP_e.js → Switch-CwYNf8bo.js} +1 -1
- package/dist/Toaster-Bw4xR8xV.js +274 -0
- package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
- package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +16 -8
- package/dist/api/types-extra.d.ts +6 -0
- package/dist/api.js +2 -2
- package/dist/aurora.js +888 -230
- package/dist/badge.js +1 -1
- package/dist/border-progress.d.ts +1 -0
- package/dist/border-progress.js +106 -0
- package/dist/button-DYCUa-tH.js +126 -0
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -2
- package/dist/card.js +2 -2
- package/dist/carousel.d.ts +1 -1
- package/dist/carousel.js +90 -151
- package/dist/collapsible.js +1 -1
- package/dist/color-swatch.d.ts +1 -0
- package/dist/color-swatch.js +47 -0
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/compile-CQEFRTmx.js +19 -0
- package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
- package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
- package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
- package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
- package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
- package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
- package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +30 -2
- package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -10
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
- package/dist/components/custom/aurora/index.d.ts +3 -2
- package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
- package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
- package/dist/components/custom/border-progress/constants.d.ts +59 -0
- package/dist/components/custom/border-progress/index.d.ts +4 -0
- package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
- package/dist/components/custom/color-swatch/index.d.ts +1 -0
- package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
- package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
- package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
- package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
- package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
- package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
- package/dist/components/custom/concentric/constants.d.ts +43 -0
- package/dist/components/custom/concentric/index.d.ts +5 -0
- package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
- package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
- package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
- package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
- package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
- package/dist/components/custom/constellation/constellationField.d.ts +2 -369
- package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
- package/dist/components/custom/constellation/index.d.ts +1 -1
- package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
- package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
- package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
- package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
- package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
- package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
- package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
- package/dist/components/custom/dock/constants.d.ts +35 -0
- package/dist/components/custom/dock/index.d.ts +2 -0
- package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
- package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
- package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
- package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
- package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
- package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
- package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
- package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
- package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
- package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
- package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
- package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
- package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
- package/dist/components/custom/easing/constants.d.ts +28 -0
- package/dist/components/custom/easing/index.d.ts +3 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
- package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
- package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
- package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
- package/dist/components/custom/fading-scroll/index.d.ts +2 -0
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +19 -2
- package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
- package/dist/components/custom/fourier-field/constants.d.ts +7 -0
- package/dist/components/custom/fourier-field/index.d.ts +1 -1
- package/dist/components/custom/fourier-field/math.d.ts +17 -0
- package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +9 -1
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
- package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +29 -12
- package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
- package/dist/components/custom/goo-blob/constants.d.ts +6 -1
- package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
- package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
- package/dist/components/custom/handmark/brush.d.ts +269 -0
- package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
- package/dist/components/custom/handmark/constants.d.ts +39 -0
- package/dist/components/custom/handmark/freehand.d.ts +69 -0
- package/dist/components/custom/handmark/geometry.d.ts +52 -0
- package/dist/components/custom/handmark/index.d.ts +27 -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 +62 -0
- package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
- package/dist/components/custom/icon-chip/index.d.ts +2 -0
- package/dist/components/custom/icon-chip/types.d.ts +82 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -2
- package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
- package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
- package/dist/components/custom/pager-dots/index.d.ts +2 -0
- package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
- package/dist/components/custom/spa-view/index.d.ts +2 -0
- package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +29 -24
- package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
- package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
- package/dist/components/custom/tabs/constants.d.ts +9 -3
- package/dist/components/custom/tabs/index.d.ts +1 -1
- package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +15 -1
- package/dist/components/ui/_shared/index.d.ts +2 -0
- package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
- package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
- package/dist/components/ui/badge/index.d.ts +1 -1
- package/dist/components/ui/button/Button.vue.d.ts +5 -2
- package/dist/components/ui/button/index.d.ts +2 -2
- package/dist/components/ui/card/Card.vue.d.ts +34 -4
- package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
- package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
- package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
- package/dist/components/ui/card/index.d.ts +2 -0
- package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
- package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
- package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
- package/dist/components/ui/carousel/index.d.ts +0 -1
- package/dist/components/ui/command/Command.vue.d.ts +4 -1
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
- package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +12 -8
- package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
- package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
- package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
- package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
- package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
- package/dist/components/ui/drawer/constants.d.ts +45 -0
- package/dist/components/ui/drawer/index.d.ts +23 -15
- package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
- package/dist/components/ui/focus-scope/index.d.ts +2 -0
- package/dist/components/ui/index.d.ts +1 -1
- package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
- package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
- package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
- package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
- package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
- package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
- package/dist/components/ui/sheet/index.d.ts +1 -1
- package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
- package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
- package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
- package/dist/components/ui/toast/use-toast.d.ts +14 -0
- package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
- package/dist/composables/dark/index.d.ts +1 -1
- package/dist/composables/dark/useGlobalDark.d.ts +23 -1
- package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
- package/dist/composables/glass/index.d.ts +5 -2
- package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
- package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
- package/dist/composables/glass/vSpecular.d.ts +2 -0
- package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
- package/dist/composables/glass/webgpu/index.d.ts +2 -0
- package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
- package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
- package/dist/composables/motion/core/index.d.ts +1 -0
- package/dist/composables/motion/index.d.ts +4 -0
- package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
- package/dist/composables/motion/useDragMorph.d.ts +77 -0
- package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
- package/dist/composables/motion/useLiquidPress.d.ts +71 -0
- package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
- package/dist/composables/motion/useNumericTransition.d.ts +3 -3
- package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
- package/dist/composables/motion/useViewTransition.d.ts +36 -1
- package/dist/concentric.d.ts +1 -0
- package/dist/concentric.js +562 -0
- package/dist/configurator.js +3 -2
- package/dist/confirm-dialog.js +22 -24
- package/dist/constellation.js +93 -95
- package/dist/context-menu.js +3 -3
- package/dist/controls.js +10 -4
- package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
- package/dist/dark.d.ts +1 -1
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +738 -442
- package/dist/{dockContext-BegmJVmx.js → dockContext-BNfyPLe9.js} +1 -1
- package/dist/dom.js +5 -5
- package/dist/dot-flow-field.d.ts +1 -0
- package/dist/dot-flow-field.js +604 -0
- package/dist/drawer.d.ts +1 -0
- package/dist/drawer.js +380 -0
- package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-CofSZuk8.js} +14 -15
- package/dist/dropdown-menu.js +1 -1
- package/dist/easing.d.ts +1 -0
- package/dist/easing.js +463 -0
- package/dist/expandable-container.js +45 -38
- package/dist/fading-scroll.d.ts +1 -0
- package/dist/fading-scroll.js +2 -0
- package/dist/focus-scope.d.ts +1 -0
- package/dist/focus-scope.js +23 -0
- package/dist/forms.js +7 -7
- package/dist/fourier-field.js +135 -122
- package/dist/fourier-math.js +2 -2
- package/dist/glass-panel.js +39 -36
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +154 -362
- package/dist/goo-blob.js +838 -227
- package/dist/handmark.d.ts +1 -0
- package/dist/handmark.js +707 -0
- package/dist/header-ribbon.js +1 -1
- package/dist/hover-card.js +1 -1
- package/dist/hover-popover.js +1 -1
- package/dist/icon-chip.d.ts +1 -0
- package/dist/icon-chip.js +2 -0
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/instrument-chassis.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +6 -6
- package/dist/{math-U6-RrLmV.js → math-BINYmg5z.js} +11 -3
- package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-D8VNHq22.js} +10 -4
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +25 -22
- package/dist/metric-stack.js +4 -8
- package/dist/motion-core.js +36 -35
- package/dist/motion-curves.js +1 -1
- package/dist/motion.js +157 -55
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/pager-dots.d.ts +1 -0
- package/dist/pager-dots.js +91 -0
- package/dist/paper-backdrop.js +1 -1
- package/dist/popover.js +1 -1
- package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
- package/dist/{compile-B7NGOBcP.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
- package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
- package/dist/progress.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +2 -2
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +10 -12
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/sheet-tZMg0E0w.js +218 -0
- package/dist/sheet.js +1 -1
- package/dist/{slider-B-JP2JlI.js → slider-DVb4HXU-.js} +7 -7
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/spa-view.d.ts +1 -0
- package/dist/spa-view.js +46 -0
- package/dist/styles/animations.css +40 -31
- package/dist/styles/border-progress.css +109 -0
- package/dist/styles/cards.css +76 -0
- package/dist/styles/components.css +1 -1
- package/dist/styles/configurator.css +35 -0
- package/dist/styles/critical-partition.mjs +140 -0
- package/dist/styles/critical.css +12 -0
- package/dist/styles/deferred.css +31 -0
- package/dist/styles/dock/density.css +64 -0
- package/dist/styles/dock/layers.css +54 -30
- package/dist/styles/dock/morph.css +124 -7
- package/dist/styles/dock/overflow.css +31 -2
- package/dist/styles/dock/rail-extend.css +168 -71
- package/dist/styles/dock/section.css +59 -0
- package/dist/styles/dock/shell.css +83 -16
- package/dist/styles/dock-controls/icon-button.css +11 -1
- package/dist/styles/dock-controls/tab-button.css +24 -83
- package/dist/styles/dock-controls/triggers.css +7 -0
- package/dist/styles/dock.css +38 -3
- package/dist/styles/drawer.css +127 -35
- package/dist/styles/feedback-tone.css +104 -0
- package/dist/styles/glass/deep.css +44 -0
- package/dist/styles/glass/ladder.css +154 -52
- package/dist/styles/glass/material.css +78 -15
- package/dist/styles/glass/reveal.css +136 -0
- package/dist/styles/glass/rim.css +100 -0
- package/dist/styles/glass/surface-axis.css +113 -0
- package/dist/styles/glass/surfaces.css +189 -15
- package/dist/styles/glass-refract.css +96 -44
- package/dist/styles/glass-specular-track.css +7 -0
- package/dist/styles/glass.css +8 -2
- package/dist/styles/hover-popover.css +7 -6
- package/dist/styles/icon-chip.css +211 -0
- package/dist/styles/index.css +78 -4
- package/dist/styles/instrument-chassis.css +107 -2
- package/dist/styles/menu.css +127 -0
- package/dist/styles/scroll-choreography.css +300 -0
- package/dist/styles/segmented-tabs.css +188 -86
- package/dist/styles/select.css +50 -0
- package/dist/styles/theme/bridges.css +22 -1
- package/dist/styles/theme/literals.css +11 -2
- package/dist/styles/theme/radius.css +6 -1
- package/dist/styles/tokens/color-radius.css +40 -13
- package/dist/styles/tokens/dark-arm.css +200 -20
- package/dist/styles/tokens/glass-deep.css +75 -0
- package/dist/styles/tokens/glass-fx.css +333 -0
- package/dist/styles/tokens/glass.css +95 -315
- package/dist/styles/tokens/light-dark.css +64 -22
- package/dist/styles/tokens/offsets.css +116 -0
- package/dist/styles/tokens/on-glass-fg.css +39 -0
- package/dist/styles/tokens/property-regs.css +130 -10
- package/dist/styles/tokens/scale-paper.css +155 -84
- package/dist/styles/tokens/scheme-motion.css +102 -46
- package/dist/styles/tokens/scroll-tokens.css +123 -0
- package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
- package/dist/styles/tokens.css +9 -3
- package/dist/styles/transitions.css +7 -7
- package/dist/styles/typography/scale.css +153 -0
- package/dist/styles/typography/semantic.css +220 -0
- package/dist/styles/typography/utilities.css +174 -0
- package/dist/styles/typography.css +23 -507
- package/dist/styles/utilities/a11y-overrides.css +33 -4
- package/dist/styles/utilities/animate.css +27 -24
- package/dist/styles/utilities/base-misc.css +255 -0
- package/dist/styles/utilities/base.css +100 -138
- package/dist/styles/utilities/btn.css +21 -202
- package/dist/styles/utilities/metal.css +189 -0
- package/dist/styles/utilities.css +14 -7
- package/dist/styles/view-transition.css +4 -1
- package/dist/switch.js +1 -1
- package/dist/tabs.js +275 -191
- package/dist/timeline.js +2 -2
- package/dist/toast.js +1 -1
- package/dist/toggle-chip.js +3 -1
- package/dist/toggle-group.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-BfUq2bUM.js} +1 -1
- package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
- package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
- package/dist/useDragMorph-DgxnsVJz.js +102 -0
- package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
- package/dist/useLiquidPress-kfb4KX79.js +39 -0
- package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
- package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-UYa4zoiN.js} +1 -1
- package/dist/useSpring-C0jyvEJB.js +40 -0
- package/dist/useSpringMount-q1amq1SJ.js +71 -0
- package/dist/useSpringPress-BsqPr7FJ.js +34 -0
- package/dist/useSurfaceAxis-g0NloYEF.js +7 -0
- package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-CBZTD4SD.js} +1 -1
- package/dist/vReveal-Czsb7zQC.js +10 -0
- package/dist/vSpecular-CQFmLNzA.js +68 -0
- package/dist/vendor-CKmzio-i.js +226 -0
- package/dist/watercolor-dot.js +12 -5
- package/package.json +193 -25
- package/src/styles/animations.css +40 -31
- package/src/styles/border-progress.css +109 -0
- package/src/styles/cards.css +76 -0
- package/src/styles/configurator.css +35 -0
- package/src/styles/critical-partition.mjs +140 -0
- package/src/styles/dock/density.css +64 -0
- package/src/styles/dock/layers.css +54 -30
- package/src/styles/dock/morph.css +124 -7
- package/src/styles/dock/overflow.css +31 -2
- package/src/styles/dock/rail-extend.css +168 -71
- package/src/styles/dock/section.css +59 -0
- package/src/styles/dock/shell.css +83 -16
- package/src/styles/dock-controls/icon-button.css +11 -1
- package/src/styles/dock-controls/tab-button.css +24 -83
- package/src/styles/dock-controls/triggers.css +7 -0
- package/src/styles/dock.css +38 -3
- package/src/styles/drawer.css +123 -35
- package/src/styles/feedback-tone.css +104 -0
- package/src/styles/glass/deep.css +44 -0
- package/src/styles/glass/ladder.css +154 -52
- package/src/styles/glass/material.css +78 -15
- package/src/styles/glass/reveal.css +136 -0
- package/src/styles/glass/rim.css +100 -0
- package/src/styles/glass/surface-axis.css +113 -0
- package/src/styles/glass/surfaces.css +189 -15
- package/src/styles/glass-refract.css +96 -44
- package/src/styles/glass-specular-track.css +7 -0
- package/src/styles/glass.css +8 -2
- package/src/styles/hover-popover.css +7 -6
- package/src/styles/icon-chip.css +211 -0
- package/src/styles/index.css +78 -4
- package/src/styles/instrument-chassis.css +107 -2
- package/src/styles/menu.css +127 -0
- package/src/styles/scroll-choreography.css +300 -0
- package/src/styles/segmented-tabs.css +184 -84
- package/src/styles/select.css +50 -0
- package/src/styles/theme/bridges.css +22 -1
- package/src/styles/theme/literals.css +11 -2
- package/src/styles/theme/radius.css +6 -1
- package/src/styles/tokens/color-radius.css +40 -13
- package/src/styles/tokens/dark-arm.css +200 -20
- package/src/styles/tokens/glass-deep.css +75 -0
- package/src/styles/tokens/glass-fx.css +333 -0
- package/src/styles/tokens/glass.css +95 -315
- package/src/styles/tokens/light-dark.css +64 -22
- package/src/styles/tokens/offsets.css +116 -0
- package/src/styles/tokens/on-glass-fg.css +39 -0
- package/src/styles/tokens/property-regs.css +130 -10
- package/src/styles/tokens/scale-paper.css +155 -84
- package/src/styles/tokens/scheme-motion.css +102 -46
- package/src/styles/tokens/scroll-tokens.css +123 -0
- package/src/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
- package/src/styles/tokens.css +9 -3
- package/src/styles/transitions.css +7 -7
- package/src/styles/typography/scale.css +153 -0
- package/src/styles/typography/semantic.css +220 -0
- package/src/styles/typography/utilities.css +174 -0
- package/src/styles/typography.css +23 -507
- package/src/styles/utilities/a11y-overrides.css +33 -4
- package/src/styles/utilities/animate.css +27 -24
- package/src/styles/utilities/base-misc.css +255 -0
- package/src/styles/utilities/base.css +100 -138
- package/src/styles/utilities/btn.css +21 -202
- package/src/styles/utilities/metal.css +189 -0
- package/src/styles/utilities.css +14 -7
- package/src/styles/view-transition.css +4 -1
- package/dist/CardAction-Cj2eycQ2.js +0 -157
- package/dist/DialogContent-Dl9WkAoS.js +0 -100
- package/dist/Notification-DdwNxIrI.js +0 -100
- package/dist/NumberFieldContent-CqaN-SvN.js +0 -145
- package/dist/PopoverContent-BYwt2-4x.js +0 -121
- package/dist/TabsList-Dttss653.js +0 -105
- package/dist/Toaster-D6q4HtXu.js +0 -263
- package/dist/button-ChXMfsud.js +0 -81
- package/dist/check-njhk-vfu.js +0 -7
- package/dist/chevron-down-DKkxb4VV.js +0 -7
- package/dist/chevron-right-CPXbqQQz.js +0 -7
- package/dist/chevron-up-n_24SqI-.js +0 -7
- 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/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
- package/dist/createLucideIcon-DydS2qgk.js +0 -43
- package/dist/minimize-2-BV31Ob_h.js +0 -38
- package/dist/search-BSGrf2Sk.js +0 -12
- package/dist/sheet-1fChZjtw.js +0 -214
- package/dist/underline.d.ts +0 -1
- package/dist/underline.js +0 -85
- package/dist/useCanvas2D-ClrQuZtp.js +0 -96
- package/dist/useConfiguratorState-DAoeHVue.js +0 -287
- package/dist/useSpecularTracking-Bo5su68i.js +0 -32
- package/dist/useSpringMount-CI2jOstM.js +0 -108
- package/dist/vReveal-CqaCz_mC.js +0 -44
- package/dist/x-BUwTKe50.js +0 -10
- /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-68dEXIAl.js} +0 -0
- /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
- /package/dist/{Label-r3WzWrsj.js → Label-C2ejNWeC.js} +0 -0
- /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-D1VrWyoi.js} +0 -0
- /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
- /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-DwwjicPY.js} +0 -0
- /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DXswVdRz.js} +0 -0
- /package/dist/{Separator-0JE6LtNu.js → Separator-pKF0oA4M.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
- /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
- /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
- /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
- /package/dist/{createContext-BM46COQ-.js → createContext-CpBNTRMI.js} +0 -0
- /package/dist/{prng-D27-B3tK.js → prng-Za0Rmgag.js} +0 -0
- /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
- /package/dist/{springPresets--YdWTHtm.js → springPresets-CFQGQfdl.js} +0 -0
- /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
- /package/dist/{useInterval-iHludrxk.js → useInterval-CvK1mL92.js} +0 -0
- /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
- /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-mZPMiNXh.js} +0 -0
- /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-Bpoi7tRE.js} +0 -0
- /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
- /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
- /package/dist/{useSortable-muI29agz.js → useSortable-DHjtZSEd.js} +0 -0
- /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-CWEi25hf.js} +0 -0
- /package/dist/{useTimer-Dzarvzuk.js → useTimer-BHJOKr35.js} +0 -0
- /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-y5namzeE.js} +0 -0
- /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-anbac3m6.js} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { WebGPUCanvasFrame } from "../../../../composables/glass/webgpu/useWebGPUCanvas";
|
|
2
|
+
import type { OklchStop } from "../../../../composables/color";
|
|
3
|
+
import type { ConcentricConfig } from "../constants";
|
|
4
|
+
export interface ConcentricWGPUSetupDeps {
|
|
5
|
+
canvas: HTMLCanvasElement;
|
|
6
|
+
config: ConcentricConfig;
|
|
7
|
+
/** The resolved (ColorResolver) palette stops as OKLCh — re-read each frame so a live edit reaches the buffer. */
|
|
8
|
+
getPalette: () => OklchStop[];
|
|
9
|
+
/** Demand-gate (the renderer's quiescence layer — substrate-agnostic). */
|
|
10
|
+
shouldContinue: () => boolean;
|
|
11
|
+
}
|
|
12
|
+
/** Build the concentric `setupWGPU(device, context, format)` callback. */
|
|
13
|
+
export declare function createConcentricWGPUSetup(deps: ConcentricWGPUSetupDeps): (device: GPUDevice, context: GPUCanvasContext, format: GPUTextureFormat) => WebGPUCanvasFrame;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** A 2-vector. */
|
|
2
|
+
export interface Vec2 {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* One radial ring component. `amplitude` A_i, `wavelength` λ_i (so k_i = 2π/λ_i), `phase`
|
|
8
|
+
* φ_i. `ω_i = √(g·k_i)` is derived from the dispersion relation, not stored (the SAME
|
|
9
|
+
* dispersion the flow field's Gerstner sum uses — the ONE suite dispersion law).
|
|
10
|
+
*/
|
|
11
|
+
export interface RingComponent {
|
|
12
|
+
amplitude: number;
|
|
13
|
+
wavelength: number;
|
|
14
|
+
phase: number;
|
|
15
|
+
}
|
|
16
|
+
/** A ring origin in domain space [-1,1]² (multi-center → interference). */
|
|
17
|
+
export interface RingCenter {
|
|
18
|
+
x: number;
|
|
19
|
+
y: number;
|
|
20
|
+
/** Per-center weight (a far center contributes a fainter ring family). */
|
|
21
|
+
weight: number;
|
|
22
|
+
}
|
|
23
|
+
/** Deep-water gravity constant (normalized; scales the dispersion ω — shared with the flow field). */
|
|
24
|
+
export declare const RING_GRAVITY = 9.81;
|
|
25
|
+
/**
|
|
26
|
+
* The ellipsoidal radial distance ‖p − c‖_e = sqrt((dx/a)² + (dy/b)²). The axis ratio
|
|
27
|
+
* (a,b) tilts the rings into ellipses (the 3D-tilt depth implication). The single radial
|
|
28
|
+
* metric the WGSL shader transcribes.
|
|
29
|
+
*/
|
|
30
|
+
export declare function ellipsoidalRadius(p: Vec2, center: RingCenter, axisA: number, axisB: number): number;
|
|
31
|
+
/**
|
|
32
|
+
* The radial-Fourier ring-interference value f(p,t) ∈ ℝ — the multi-center sum of radial
|
|
33
|
+
* sinusoids. The SINGLE math source the WGSL `fs_main` + the GLSL fallback transcribe.
|
|
34
|
+
* `speed` scales the dispersion ω (the ring-travel speed). Returns the un-normalized
|
|
35
|
+
* field value (the shader maps it through the palette).
|
|
36
|
+
*/
|
|
37
|
+
export declare function sampleRingField(p: Vec2, timeSec: number, centers: readonly RingCenter[], rings: readonly RingComponent[], axisA: number, axisB: number, speed: number): number;
|
|
38
|
+
/**
|
|
39
|
+
* Build the default 5-octave Phillips-spectrum radial ring ladder. Amplitudes follow
|
|
40
|
+
* `A_i ∝ exp(−1/(k_i·L)²) / k_i²` (Tessendorf §4, the SAME falloff the flow field uses),
|
|
41
|
+
* so the rings are energy-realistic. The decreasing wavelength gives the multi-scale
|
|
42
|
+
* concentric structure (broad outer rings + fine inner interference).
|
|
43
|
+
*/
|
|
44
|
+
export declare function buildRingLadder(octaves?: number): RingComponent[];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { OklchStop } from "../../../../composables/color";
|
|
2
|
+
import { type ConcentricConfig } from "../constants";
|
|
3
|
+
export declare const CONCENTRIC_UNIFORM_BYTES: number;
|
|
4
|
+
/** The field-amplitude normalization scale (field → [0,1] for the palette ramp). */
|
|
5
|
+
export declare const CONCENTRIC_FIELD_NORM = 0.55;
|
|
6
|
+
export interface ConcentricUniformScratch {
|
|
7
|
+
buffer: ArrayBuffer;
|
|
8
|
+
f32: Float32Array;
|
|
9
|
+
i32: Int32Array;
|
|
10
|
+
}
|
|
11
|
+
export declare function createConcentricScratch(): ConcentricUniformScratch;
|
|
12
|
+
/** Pack the concentric uniforms in place. */
|
|
13
|
+
export declare function packConcentricUniforms(scratch: ConcentricUniformScratch, config: ConcentricConfig, timeSec: number, aspect: number, palette: OklchStop[]): ConcentricUniformScratch;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type Ref } from "vue";
|
|
2
|
+
import { type GpuBackend } from "../../../../composables/glass/webgpu/useGpuSubstrate";
|
|
3
|
+
import type { OklchStop } from "../../../../composables/color";
|
|
4
|
+
import type { ConcentricConfig } from "../constants";
|
|
5
|
+
export interface UseConcentricOptions {
|
|
6
|
+
config: ConcentricConfig;
|
|
7
|
+
/** Resolve the field-value palette as OKLCh (the demo themes it; default warm-identity). */
|
|
8
|
+
getPalette: () => OklchStop[];
|
|
9
|
+
/** `"capture"` → renderAt-only (the deterministic π capture path). Default `"live"`. */
|
|
10
|
+
mode?: "live" | "capture";
|
|
11
|
+
}
|
|
12
|
+
/** The uniform handle a consumer wires its lifecycle against (backend-agnostic). */
|
|
13
|
+
export interface ConcentricHandle {
|
|
14
|
+
/** The resolved backend (`"webgpu"` where supported, else the WebGL2 GLSL fallback). */
|
|
15
|
+
readonly backend: GpuBackend;
|
|
16
|
+
/** Park the loop (the WCAG-2.2.2 pause seam — `DockBackgroundToggle` wires this). */
|
|
17
|
+
pause: () => void;
|
|
18
|
+
/** Re-arm the loop. */
|
|
19
|
+
resume: () => void;
|
|
20
|
+
/** Re-arm a parked loop on demand. */
|
|
21
|
+
wake: () => void;
|
|
22
|
+
/** Draw one frame out-of-loop (capture / thumbnail). */
|
|
23
|
+
renderAt: (timeSec: number) => void;
|
|
24
|
+
/** The live `prefers-reduced-motion: reduce` state. */
|
|
25
|
+
readonly reducedMotion: boolean;
|
|
26
|
+
/** Tear down the renderer + release GPU/GL resources. */
|
|
27
|
+
dispose: () => void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Mount the concentric renderer on `canvasRef`. The WebGPU primary + the WebGL2 fallback
|
|
31
|
+
* are BOTH pure fullscreen fragment passes evaluating the SAME radial-Fourier field (the
|
|
32
|
+
* ONE math source `ringField.ts`), so the picker is the only seam. Returns the uniform
|
|
33
|
+
* lifecycle handle.
|
|
34
|
+
*/
|
|
35
|
+
export declare function useConcentric(canvasRef: Ref<HTMLCanvasElement | null>, options: UseConcentricOptions): ConcentricHandle;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { RingComponent, RingCenter } from "./composables/ringField";
|
|
2
|
+
import type { OklchStop } from "../../../composables/color";
|
|
3
|
+
/** Compile-time ring-component cap — mirrors the WGSL `MAX_RINGS` #define. */
|
|
4
|
+
export declare const MAX_RINGS = 8;
|
|
5
|
+
/** Compile-time center cap — mirrors the WGSL `MAX_CENTERS` #define. */
|
|
6
|
+
export declare const MAX_CENTERS = 4;
|
|
7
|
+
/** Compile-time palette cap — mirrors the WGSL `MAX_RING_STOPS` #define. */
|
|
8
|
+
export declare const MAX_RING_STOPS = 4;
|
|
9
|
+
/**
|
|
10
|
+
* The full author schema — the studio's `useConfiguratorState` model. Every field is a
|
|
11
|
+
* tunable the demo configurator drives; the SFC resolves it into the uniform table.
|
|
12
|
+
*/
|
|
13
|
+
export interface ConcentricConfig {
|
|
14
|
+
/** The ring origins (1..MAX_CENTERS) — a multi-center sum produces ring interference. */
|
|
15
|
+
centers: RingCenter[];
|
|
16
|
+
/** The radial sum-of-sines table (1..MAX_RINGS). */
|
|
17
|
+
ringComponents: RingComponent[];
|
|
18
|
+
/** The ellipsoidal-norm axis ratio (a, b) — the 3D-tilt depth implication. */
|
|
19
|
+
axisRatio: [number, number];
|
|
20
|
+
/** The ring-travel speed (scales ω). */
|
|
21
|
+
speed: number;
|
|
22
|
+
/** The field-value color ramp (the demo themes it); resolved via the ColorResolver. */
|
|
23
|
+
palette: OklchStop[];
|
|
24
|
+
/** The ground color (default transparent so it reads over the page; demo sets it). */
|
|
25
|
+
background: OklchStop | "transparent";
|
|
26
|
+
/** Pointer adds a transient ring center (a local perturbation about the cursor). */
|
|
27
|
+
interactive: boolean;
|
|
28
|
+
/** ONE static frame then park under `prefers-reduced-motion: reduce`. */
|
|
29
|
+
respectReducedMotion: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The warm-cream identity palette (the library default — NOT a themed hue). A three-stop
|
|
33
|
+
* warm ramp over the warm-cream foreground family, resolved via the ColorResolver: a soft
|
|
34
|
+
* cream trough, a warm amber mid, a deeper ember crest — so the ring field reads as warm
|
|
35
|
+
* light interference. A consumer (the demo) themes it through a PRESET, never a token edit.
|
|
36
|
+
*/
|
|
37
|
+
export declare const WARM_IDENTITY_PALETTE: OklchStop[];
|
|
38
|
+
/** The default 5-octave Phillips radial ring ladder. */
|
|
39
|
+
export declare const DEFAULT_RING_COMPONENTS: RingComponent[];
|
|
40
|
+
/** Two ring families offset on the diagonal — the default interference (a moiré beat). */
|
|
41
|
+
export declare const DEFAULT_CENTERS: RingCenter[];
|
|
42
|
+
/** The shipped warm-identity default config. */
|
|
43
|
+
export declare const DEFAULT_CONCENTRIC_CONFIG: ConcentricConfig;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as Concentric } from "./Concentric.vue";
|
|
2
|
+
export { useConcentric, type ConcentricHandle, type UseConcentricOptions, } from "./composables/useConcentric";
|
|
3
|
+
export { type ConcentricConfig, DEFAULT_CONCENTRIC_CONFIG, DEFAULT_RING_COMPONENTS, DEFAULT_CENTERS, WARM_IDENTITY_PALETTE, MAX_RINGS, MAX_CENTERS, MAX_RING_STOPS, } from "./constants";
|
|
4
|
+
export { type RingComponent, type RingCenter, type Vec2, sampleRingField, ellipsoidalRadius, buildRingLadder, RING_GRAVITY, } from "./composables/ringField";
|
|
5
|
+
export type { OklchStop } from "../../../composables/color";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The full-screen-triangle vertex shader (the substrate's standard fullscreen pass). */
|
|
2
|
+
export declare const CONCENTRIC_VERT_GLSL = "#version 300 es\nprecision highp float;\nin vec2 aPosition;\nout vec2 vUv;\nvoid main() {\n vUv = aPosition; // [-1,1]\u00B2 domain\n gl_Position = vec4(aPosition, 0.0, 1.0);\n}";
|
|
3
|
+
/** The concentric fragment source — the aurora-class radial-Fourier field. */
|
|
4
|
+
export declare const CONCENTRIC_FRAG_GLSL = "#version 300 es\nprecision highp float;\n\n#define PI 3.141592653589793\n#define TAU 6.283185307179586\n#define RING_GRAVITY 9.81\n#define MAX_RINGS 8\n#define MAX_CENTERS 4\n#define MAX_RING_STOPS 4\n\nin vec2 vUv;\nout vec4 fragColor;\n\nuniform float uTime;\nuniform float uSpeed;\nuniform vec2 uAxis; // (a, b) ellipsoidal-norm axis ratio\nuniform float uFieldNorm; // field \u2192 [0,1] amplitude scale\nuniform float uAspect;\nuniform int uCenterCount;\nuniform int uRingCount;\nuniform int uStopCount;\nuniform float uHasBackground;\nuniform vec3 uRings[MAX_RINGS]; // (amplitude, wavelength, phase)\nuniform vec3 uCenters[MAX_CENTERS]; // (x, y, weight)\nuniform vec3 uPalette[MAX_RING_STOPS]; // linear-sRGB stops\n\n\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}\n\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}\n\n// \u2016p \u2212 c\u2016_e = sqrt((dx/a)\u00B2 + (dy/b)\u00B2) \u2014 transcribes ringField.ts ellipsoidalRadius.\nfloat ellipsoidalRadius(vec2 p, vec2 center, float axisA, float axisB) {\n float dx = (p.x - center.x) / max(axisA, 1e-4);\n float dy = (p.y - center.y) / max(axisB, 1e-4);\n return sqrt(dx * dx + dy * dy);\n}\n\n// f(p,t) \u2014 the multi-center weighted radial sum (transcribes ringField.ts sampleRingField).\nfloat sampleRingField(vec2 p, float t) {\n float acc = 0.0;\n for (int j = 0; j < MAX_CENTERS; j++) {\n if (j >= uCenterCount) break;\n vec3 cj = uCenters[j];\n float radius = ellipsoidalRadius(p, cj.xy, uAxis.x, uAxis.y);\n float centerSum = 0.0;\n for (int i = 0; i < MAX_RINGS; i++) {\n if (i >= uRingCount) break;\n vec3 r = uRings[i];\n float k = TAU / max(r.y, 1e-4);\n float omega = sqrt(RING_GRAVITY * k) * uSpeed;\n float theta = k * radius - omega * t + r.z;\n centerSum += r.x * sin(theta);\n }\n acc += centerSum * cj.z;\n }\n return acc;\n}\n\n// Sample the multi-stop palette (linear-sRGB stops, OKLab mix). t in [0,1].\nvec3 samplePaletteLin(float t) {\n if (uStopCount <= 1) return uPalette[0];\n float n = float(uStopCount);\n float ft = clamp(t, 0.0, 1.0) * (n - 1.0);\n int i0 = int(floor(ft));\n int i1 = min(i0 + 1, uStopCount - 1);\n float f = ft - float(i0);\n // cube-root LMS (the GLSL chunk inlines cbrt as sign(x)\u00B7pow(|x|,1/3) \u2014 no cbrt3 fn).\n vec3 lmsA = LINEAR_SRGB_TO_LMS * uPalette[i0];\n vec3 lmsB = LINEAR_SRGB_TO_LMS * uPalette[i1];\n vec3 labA = LMS_TO_OKLAB * (sign(lmsA) * pow(abs(lmsA), vec3(1.0 / 3.0)));\n vec3 labB = LMS_TO_OKLAB * (sign(lmsB) * pow(abs(lmsB), vec3(1.0 / 3.0)));\n return oklabToLinearSrgb(mix(labA, labB, f));\n}\n\nvoid main() {\n float aspect = max(uAspect, 1e-4);\n vec2 p = vec2(vUv.x * aspect, vUv.y);\n float raw = sampleRingField(p, uTime);\n float v = clamp(0.5 + raw * uFieldNorm, 0.0, 1.0);\n vec3 lin = samplePaletteLin(v);\n vec3 rgb = clamp(linearToSrgb(lin), vec3(0.0), vec3(1.0));\n if (uHasBackground > 0.5) {\n fragColor = vec4(rgb, 1.0);\n return;\n }\n float alpha = clamp(v * 0.92 + 0.08, 0.0, 1.0);\n fragColor = vec4(rgb * alpha, alpha);\n}";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const CONCENTRIC_WGSL = "\nconst PI: f32 = 3.141592653589793;\nconst TAU: f32 = 6.283185307179586;\nconst RING_GRAVITY: f32 = 9.81;\nconst MAX_RINGS: i32 = 8;\nconst MAX_CENTERS: i32 = 4;\nconst MAX_RING_STOPS: i32 = 4;\n\n// \u2500\u2500 Concentric uniforms (the typed-struct source-of-truth \u2014 see uniformBridgeWGPU.ts) \u2500\u2500\nstruct ConcentricUniforms {\n // u0: (uTime, uSpeed, uAxisA, uAxisB)\n u0: vec4<f32>,\n // ints: (uCenterCount, uRingCount, uStopCount, _pad)\n ints: vec4<i32>,\n // bg: (background.rgb (linear), hasBackground)\n bg: vec4<f32>,\n // norm: (uFieldNorm, uAspect, _pad, _pad) \u2014 field \u2192 [0,1] scale\n norm: vec4<f32>,\n // each ring row: (amplitude, wavelength, phase, _pad)\n rings: array<vec4<f32>, 8>,\n // each center row: (x, y, weight, _pad)\n centers: array<vec4<f32>, 4>,\n // each palette stop: linear-sRGB rgb + _pad\n palette: array<vec4<f32>, 4>,\n};\n\n@group(0) @binding(0) var<uniform> u: ConcentricUniforms;\n\n\nfn srgbToLinearCh(c: f32) -> f32 {\n if (c <= 0.04045) { return c / 12.92; }\n return pow((c + 0.055) / 1.055, 2.4);\n}\nfn srgbToLinear(c: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfn linearToSrgbCh(c: f32) -> f32 {\n if (c <= 0.0031308) { return c * 12.92; }\n return 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nfn linearToSrgb(c: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}\n\n// value.js LINEAR_SRGB_TO_LMS, row-major \u2192 WGSL columns (= the transpose).\nconst LINEAR_SRGB_TO_LMS: mat3x3<f32> = mat3x3<f32>(\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, row-major \u2192 WGSL columns.\nconst LMS_TO_OKLAB: mat3x3<f32> = mat3x3<f32>(\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, row-major \u2192 WGSL columns.\nconst OKLAB_TO_LMS: mat3x3<f32> = mat3x3<f32>(\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, row-major \u2192 WGSL columns.\nconst LMS_TO_LINEAR_SRGB: mat3x3<f32> = mat3x3<f32>(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\nfn cbrt3(v: vec3<f32>) -> vec3<f32> {\n return sign(v) * pow(abs(v), vec3<f32>(1.0 / 3.0));\n}\n\n// Gamma sRGB \u2192 raw OKLab (L, a, b). Mirrors value.js srgbToOKLab.\nfn srgbToOklab(c: vec3<f32>) -> vec3<f32> {\n let lin = srgbToLinear(c);\n let lms = LINEAR_SRGB_TO_LMS * lin;\n return LMS_TO_OKLAB * cbrt3(lms);\n}\n\n// Raw OKLab (L, a, b) \u2192 linear sRGB. Mirrors value.js oklabToLinearSRGB.\nfn oklabToLinearSrgb(lab: vec3<f32>) -> vec3<f32> {\n let lms_ = OKLAB_TO_LMS * lab;\n let lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\n\n// OKLab \u2192 OKLCh: H in RADIANS, folded to [0, 2pi). Mirrors value.js rawOklabToOklch.\nfn oklabToOklch(lab: vec3<f32>) -> vec3<f32> {\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 vec3<f32>(lab.x, C, H);\n}\n\n// OKLCh (H radians) \u2192 OKLab. Mirrors value.js rawOklchToOklab.\nfn oklchToOklab(lch: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}\n\n// Full-screen-triangle (the pilot idiom): NDC corners (-1,-1),(3,-1),(-1,3) cover the\n// viewport from a single 3-vertex draw \u2014 no vertex buffer.\nstruct VSOut {\n @builtin(position) pos: vec4<f32>,\n @location(0) uv: vec2<f32>, // domain [-1,1]\u00B2, aspect-corrected x\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vi: u32) -> VSOut {\n var corners = array<vec2<f32>, 3>(\n vec2<f32>(-1.0, -1.0), vec2<f32>(3.0, -1.0), vec2<f32>(-1.0, 3.0),\n );\n let c = corners[vi];\n var out: VSOut;\n out.pos = vec4<f32>(c, 0.0, 1.0);\n // aspect-correct so the rings stay circular under the ellipsoidal norm (NOT squashed\n // by the canvas aspect): widen the domain x by the aspect ratio.\n out.uv = vec2<f32>(c.x, c.y);\n return out;\n}\n\n// The ellipsoidal radial distance \u2016p \u2212 c\u2016_e = sqrt((dx/a)\u00B2 + (dy/b)\u00B2). The single radial\n// metric (transcribes ringField.ts ellipsoidalRadius).\nfn ellipsoidalRadius(p: vec2<f32>, center: vec2<f32>, axisA: f32, axisB: f32) -> f32 {\n let dx = (p.x - center.x) / max(axisA, 1e-4);\n let dy = (p.y - center.y) / max(axisB, 1e-4);\n return sqrt(dx * dx + dy * dy);\n}\n\n// The radial-Fourier ring-interference value f(p,t) \u2014 the multi-center weighted sum of\n// radial sinusoids (transcribes ringField.ts sampleRingField line-for-line).\nfn sampleRingField(p: vec2<f32>, t: f32) -> f32 {\n var acc = 0.0;\n let speed = u.u0.y;\n let axisA = u.u0.z;\n let axisB = u.u0.w;\n let centerCount = u.ints.x;\n let ringCount = u.ints.y;\n for (var j = 0; j < MAX_CENTERS; j = j + 1) {\n if (j >= centerCount) { break; }\n let cj = u.centers[j];\n let radius = ellipsoidalRadius(p, cj.xy, axisA, axisB);\n var centerSum = 0.0;\n for (var i = 0; i < MAX_RINGS; i = i + 1) {\n if (i >= ringCount) { break; }\n let r = u.rings[i];\n let k = TAU / max(r.y, 1e-4);\n // \u03C9 = \u221A(g\u00B7k); speed scales the travel (the shared dispersion law).\n let omega = sqrt(RING_GRAVITY * k) * speed;\n let theta = k * radius - omega * t + r.z;\n centerSum = centerSum + r.x * sin(theta);\n }\n acc = acc + centerSum * cj.z;\n }\n return acc;\n}\n\n// Sample the multi-stop palette (linear-sRGB stops, OKLab mix). t in [0,1].\nfn samplePaletteLin(t: f32) -> vec3<f32> {\n let stopCount = u.ints.z;\n if (stopCount <= 1) { return u.palette[0].rgb; }\n let n = f32(stopCount);\n let ft = clamp(t, 0.0, 1.0) * (n - 1.0);\n let i0 = i32(floor(ft));\n let i1 = min(i0 + 1, stopCount - 1);\n let f = ft - f32(i0);\n let labA = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * u.palette[i0].rgb);\n let labB = LMS_TO_OKLAB * cbrt3(LINEAR_SRGB_TO_LMS * u.palette[i1].rgb);\n return oklabToLinearSrgb(mix(labA, labB, f));\n}\n\n@fragment\nfn fs_main(in: VSOut) -> @location(0) vec4<f32> {\n // aspect-correct the domain x so the rings read circular under the ellipsoidal norm.\n let aspect = max(u.norm.y, 1e-4);\n let p = vec2<f32>(in.uv.x * aspect, in.uv.y);\n let t = u.u0.x;\n\n let raw = sampleRingField(p, t);\n // Normalize the field \u2192 [0,1] for the palette ramp (uFieldNorm is the amplitude scale).\n let v = clamp(0.5 + raw * u.norm.x, 0.0, 1.0);\n\n let lin = samplePaletteLin(v);\n let rgb = clamp(linearToSrgb(lin), vec3<f32>(0.0), vec3<f32>(1.0));\n\n // Premultiplied-alpha output over the (transparent / themed) ground.\n let hasBg = u.bg.w;\n if (hasBg > 0.5) {\n // opaque themed ground: the field paints fully opaque.\n return vec4<f32>(rgb, 1.0);\n }\n // transparent ground: the field's alpha rides its own brightness so the page reads\n // through the troughs (the ring crests carry the ink; the calm field is faint).\n let alpha = clamp(v * 0.92 + 0.08, 0.0, 1.0);\n return vec4<f32>(rgb * alpha, alpha);\n}\n";
|
|
@@ -3,14 +3,14 @@ import { type ConfiguratorDensity } from "./density";
|
|
|
3
3
|
/**
|
|
4
4
|
* Scroll behavior for the controls column.
|
|
5
5
|
*
|
|
6
|
-
* - `auto` —
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* regardless of content.
|
|
11
|
-
* - `never` — controls do not scroll; host grows to content height.
|
|
12
|
-
* for popover/sheet hosts that
|
|
13
|
-
* overflow.
|
|
6
|
+
* - `auto` — the controls column renders a <FadingScroll axis="y"> scroll-port
|
|
7
|
+
* (sharp at rest, feathered while overflowing); controls scroll when
|
|
8
|
+
* their intrinsic height exceeds the host. Default.
|
|
9
|
+
* - `always` — same <FadingScroll> scroll-port + thin scrollbar. Use when
|
|
10
|
+
* authors want a fixed-height studio regardless of content.
|
|
11
|
+
* - `never` — controls do not scroll; host grows to content height. Renders a
|
|
12
|
+
* plain div (no FadingScroll). Use for popover/sheet hosts that
|
|
13
|
+
* already manage their own overflow.
|
|
14
14
|
*/
|
|
15
15
|
export type ConfiguratorScrollMode = "auto" | "always" | "never";
|
|
16
16
|
/**
|
|
@@ -106,6 +106,17 @@ declare const __VLS_export: <T>(__VLS_props: NonNullable<Awaited<typeof __VLS_se
|
|
|
106
106
|
}) => any;
|
|
107
107
|
} & {
|
|
108
108
|
default?: (props: {}) => any;
|
|
109
|
+
} & {
|
|
110
|
+
controls?: (props: {
|
|
111
|
+
layers: readonly {
|
|
112
|
+
id: string;
|
|
113
|
+
label: string;
|
|
114
|
+
}[] | undefined;
|
|
115
|
+
activeLayer: string | undefined;
|
|
116
|
+
selectLayer: (id: string) => void;
|
|
117
|
+
}) => any;
|
|
118
|
+
} & {
|
|
119
|
+
default?: (props: {}) => any;
|
|
109
120
|
} & {
|
|
110
121
|
footer?: (props: {
|
|
111
122
|
reset: () => void;
|
|
@@ -1,90 +1,12 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* The lattice ships NEUTRAL. A branded skin (a focal ring, a callout label) is
|
|
11
|
-
* the consumer's `drawOverlay(ctx, field, now)` pass — it runs AFTER the four
|
|
12
|
-
* neutral passes and receives the live field so it can pin itself to a real
|
|
13
|
-
* node. Zero deck-domain content lives in the component.
|
|
14
|
-
*
|
|
15
|
-
* Palette reads the FULL `--constellation-*` legibility set off the canvas (the
|
|
16
|
-
* node/node-dim/line colors + the edge-alpha multipliers + the field-yields-to-
|
|
17
|
-
* type `--constellation-alpha` knob; neutral fallbacks), so a consumer override
|
|
18
|
-
* or a dark-mode flip re-tints AND re-weights the lattice (AX.W17).
|
|
19
|
-
*
|
|
20
|
-
* The focal node + click-to-warp (AX.W17) is a first-class engine concept: with
|
|
21
|
-
* `warpOnClick`, a click warps the focal node to the nearest drifting node via a
|
|
22
|
-
* critically-damped spring stepped INSIDE the substrate's single rAF (no
|
|
23
|
-
* `useSpring`, no second rAF). The consumer paints the focal mark at
|
|
24
|
-
* `field.warp.{x,y}` in its `drawOverlay`.
|
|
25
|
-
*/
|
|
26
|
-
type __VLS_Props = {
|
|
27
|
-
/** Node count. Default 64. */
|
|
28
|
-
count?: number;
|
|
29
|
-
/** Link distance in px (the falloff reach). Default 132. */
|
|
30
|
-
link?: number;
|
|
31
|
-
/** Drift speed. Default 0.16. */
|
|
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
|
-
/**
|
|
46
|
-
* Seed for a REPRODUCIBLE field. A `number` or `string` (hashed) seeds the
|
|
47
|
-
* shared `mulberry32`; omit for a fresh `Math.random` field each mount.
|
|
48
|
-
*/
|
|
49
|
-
seed?: number | string;
|
|
50
|
-
/** Steer-toward-cursor + tap ripples. Default true; auto-off under reduced-motion. */
|
|
51
|
-
pointerReactive?: boolean;
|
|
52
|
-
/**
|
|
53
|
-
* Click-to-warp (AX.W17). A click warps the focal node to the nearest
|
|
54
|
-
* drifting node and SPRINGS it there (critically damped, chasing the LIVE
|
|
55
|
-
* target). INDEPENDENT of `pointerReactive`. Default false; auto-off under
|
|
56
|
-
* reduced-motion (the focal mark stays put). Sugars the exposed `warpTo(...)`.
|
|
57
|
-
*/
|
|
58
|
-
warpOnClick?: boolean;
|
|
59
|
-
/**
|
|
60
|
-
* Auto-DRIFT (AY.W-CON1). A periodic auto-pick re-points the focal node to a
|
|
61
|
-
* RANDOM node on a jittered cadence — the wander source on the SAME warp
|
|
62
|
-
* spring (the 2nd half of the AX.W17 "drift + warp are ONE mechanic" thesis;
|
|
63
|
-
* no second rAF, no second mechanic). `true` uses the default cadence
|
|
64
|
-
* (8–16s, the slides rhythm); `{ minIdle?, jitter? }` tunes it (ms). Default
|
|
65
|
-
* OFF — `wander` absent leaves `field.wander` undefined, byte-identical to
|
|
66
|
-
* HEAD. PRM-gated by the WARP precedent: the cadence lives inside the
|
|
67
|
-
* `!reducedMotion` step block, so under reduced-motion it never advances and
|
|
68
|
-
* the focal mark stays at its seed (NOT fire-but-freeze).
|
|
69
|
-
*/
|
|
70
|
-
wander?: boolean | {
|
|
71
|
-
minIdle?: number;
|
|
72
|
-
jitter?: number;
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* Pointer-held GRAVITY-WELL (AY.W-CON2). Hold the pointer over the lattice and
|
|
76
|
-
* the nodes within reach are PULLED toward it (an inverse-square force on the
|
|
77
|
-
* SAME engine, no second rAF); release and the field cools back to `speed`.
|
|
78
|
-
* INDEPENDENT of `warpOnClick` and `pointerReactive` (a consumer can
|
|
79
|
-
* hold-to-pull on a non-ripple, non-warp lattice). `true` uses the tokenised
|
|
80
|
-
* `--constellation-well-*` defaults; an object overrides the gains. Default
|
|
81
|
-
* OFF — `gravityWell` absent leaves `field.well` undefined (byte-identical to
|
|
82
|
-
* HEAD; `stepField` skips the force pass). PRM-gated by the WARP precedent: the
|
|
83
|
-
* held-timer block lives inside `!reducedMotion`, so under reduced-motion the
|
|
84
|
-
* well never arms; AND the well STATE resets to neutral on the PRM-true edge
|
|
85
|
-
* (no half-ramped force frozen on).
|
|
86
|
-
*/
|
|
87
|
-
gravityWell?: boolean | {
|
|
1
|
+
import { type ConstellationProps } from "./constellationField";
|
|
2
|
+
declare const __VLS_export: import("vue").DefineComponent<ConstellationProps, import("./composables/useConstellation").ConstellationExpose, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<ConstellationProps> & Readonly<{}>, {
|
|
3
|
+
link: number;
|
|
4
|
+
speed: number;
|
|
5
|
+
count: number;
|
|
6
|
+
opacityCeiling: number;
|
|
7
|
+
pointerReactive: boolean;
|
|
8
|
+
warpOnClick: boolean;
|
|
9
|
+
gravityWell: boolean | {
|
|
88
10
|
holdMs?: number;
|
|
89
11
|
gain?: number;
|
|
90
12
|
reach?: number;
|
|
@@ -92,129 +14,19 @@ type __VLS_Props = {
|
|
|
92
14
|
maxSpeed?: number;
|
|
93
15
|
soften?: number;
|
|
94
16
|
};
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
* wanders it around its anchor. The `pinNode(idx)` expose re-points it imperatively.
|
|
103
|
-
*/
|
|
104
|
-
pinned?: boolean | number;
|
|
105
|
-
/**
|
|
106
|
-
* ACCENT-edge skin (AZ.W-CON-GEN G2). When `true`, edges incident on the PINNED
|
|
107
|
-
* (else the FOCAL) node stroke the `--constellation-accent` tint at the
|
|
108
|
-
* `--constellation-edge-accent-alpha` weight — the flagged-node tether — while
|
|
109
|
-
* every other edge keeps the neutral register. Default OFF (the single-color
|
|
110
|
-
* neutral pass, byte-identical to HEAD). Reads the accent off the resolved palette.
|
|
111
|
-
*/
|
|
112
|
-
accentEdges?: boolean;
|
|
113
|
-
/**
|
|
114
|
-
* Autonomous PINNED-ANCHOR drift (AZ.W-CON-GEN G5). When set AND a node is pinned,
|
|
115
|
-
* the pinned node gently eases around its seeded anchor within `wanderFrac`
|
|
116
|
-
* (default ±0.14 of the canvas) on a jittered cadence (a closed-form easeInOutQuad
|
|
117
|
-
* stepped inside the substrate's single rAF — no second rAF). DISTINCT from
|
|
118
|
-
* `wander` (which re-targets the warp among random nodes): this breathes the ONE
|
|
119
|
-
* pinned node around its rest. `true` uses the default cadence; an object tunes it.
|
|
120
|
-
* Default OFF — the pinned node holds dead-still (byte-identical). PRM-gated by the
|
|
121
|
-
* WARP precedent (the drift lives inside `!isStatic`; under reduce the pin holds).
|
|
122
|
-
*/
|
|
123
|
-
pinnedDrift?: boolean | {
|
|
17
|
+
wander: boolean | {
|
|
18
|
+
minIdle?: number;
|
|
19
|
+
jitter?: number;
|
|
20
|
+
};
|
|
21
|
+
pinned: boolean | number;
|
|
22
|
+
accentEdges: boolean;
|
|
23
|
+
pinnedDrift: boolean | {
|
|
124
24
|
wanderFrac?: number;
|
|
125
25
|
durMs?: number;
|
|
126
26
|
minIdle?: number;
|
|
127
27
|
jitter?: number;
|
|
128
28
|
};
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
* target clears its `targetIdx` — the focal node releases the spring and rides its
|
|
132
|
-
* node's RAW drift (the identity-ride), freeing the spring for the next warp.
|
|
133
|
-
* Default `false` keeps the held-target behaviour (the warp chases its node
|
|
134
|
-
* forever — byte-identical to HEAD). Read the settled signal via the
|
|
135
|
-
* `warpSettled()` expose.
|
|
136
|
-
*/
|
|
137
|
-
warpAutoRelease?: boolean;
|
|
138
|
-
/**
|
|
139
|
-
* Deterministic-capture freeze (AY.W-CON3). When `true`, the lattice lays
|
|
140
|
-
* out ONE reproducible STATIC frame and does NOT advance — seeded layout
|
|
141
|
-
* (set `seed` for a stable field ACROSS runs; an unseeded freeze still
|
|
142
|
-
* freezes but lays out a one-shot `Math.random` frame), no `stepField`, no
|
|
143
|
-
* ripple / warp / wander / well advance, and a FROZEN `now` handed to
|
|
144
|
-
* `drawOverlay` so a phase-driven skin (`(now % T) / T`) resolves to a fixed
|
|
145
|
-
* value (the pulse-ring radius is identical frame-over-frame). Omit to
|
|
146
|
-
* AUTO-DERIVE from `location.search` matching `export | print | freeze` (the
|
|
147
|
-
* deploy-pipeline contract — a consumer's pptx / print / screenshot capture
|
|
148
|
-
* gets a stable frame with zero per-consumer wiring). An explicit
|
|
149
|
-
* `:freeze="false"` forces live even under a capture URL. Unifies with the
|
|
150
|
-
* reduced-motion one-static-frame path — `freeze || reducedMotion` is the
|
|
151
|
-
* single static-frame predicate; the capture takes no input (the pointer /
|
|
152
|
-
* warp / well listeners are NOT registered under freeze).
|
|
153
|
-
*/
|
|
154
|
-
freeze?: boolean;
|
|
155
|
-
class?: HTMLAttributes["class"];
|
|
156
|
-
/**
|
|
157
|
-
* The skin seam. Runs after the neutral passes with the live field, so a
|
|
158
|
-
* consumer paints its own focal mark pinned to a real node — read
|
|
159
|
-
* `field.warp.{x,y}` for the spring-eased focal position when `warpOnClick`
|
|
160
|
-
* is on. The branded content (a domain accent, a callout label) lives HERE,
|
|
161
|
-
* in the consumer. Under `freeze` it receives a FROZEN `now`, so a phase-
|
|
162
|
-
* driven mark resolves to a fixed value.
|
|
163
|
-
*/
|
|
164
|
-
drawOverlay?: (ctx: CanvasRenderingContext2D, field: ConstellationField, now: number) => void;
|
|
165
|
-
};
|
|
166
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
167
|
-
/** The live field (the low-level imperative seam — for a custom overlay). */
|
|
168
|
-
field: ConstellationField;
|
|
169
|
-
/**
|
|
170
|
-
* The resolved deterministic-capture predicate (AY.W-CON3) — `true` when the
|
|
171
|
-
* lattice is laying out a frozen static frame (`freeze` prop OR a
|
|
172
|
-
* `?export|print|freeze` URL OR reduced-motion via the substrate). A read-only
|
|
173
|
-
* test/debug seam (the π freeze-live spec reads it to confirm the auto-derive
|
|
174
|
-
* fired without inferring from drift).
|
|
175
|
-
*/
|
|
176
|
-
isFrozen: import("vue").ComputedRef<boolean>;
|
|
177
|
-
/**
|
|
178
|
-
* Imperative warp (AX.W17). Two call shapes:
|
|
179
|
-
* `warpTo(localPoint)` — `{x, y}` already in canvas-local px
|
|
180
|
-
* (the lower primitive).
|
|
181
|
-
* `warpTo(clientX, clientY)` — client coords, mapped via the
|
|
182
|
-
* deck-scale `toLocal` (the sugar
|
|
183
|
-
* `warpOnClick` calls internally).
|
|
184
|
-
* The focal node re-points to the nearest drifting node + springs there.
|
|
185
|
-
* Returns the chosen node index, or -1 on a degenerate no-op. No-op under
|
|
186
|
-
* reduced-motion (the spring does not advance while the substrate is frozen).
|
|
187
|
-
*/
|
|
188
|
-
warpTo(a: {
|
|
189
|
-
x: number;
|
|
190
|
-
y: number;
|
|
191
|
-
} | number, b?: number): number;
|
|
192
|
-
/**
|
|
193
|
-
* Imperatively ARM the gravity-well at a canvas-LOCAL point (AY.W-CON2) — the
|
|
194
|
-
* π-lane test seam that drives the well WITHOUT racing a real held-pointer
|
|
195
|
-
* gesture + the held-timer. Sets the well position + `target = 1` directly (the
|
|
196
|
-
* timer is bypassed; the ramp still eases `strength` over the next frames). No-op
|
|
197
|
-
* when `gravityWell` is off (no `field.well`). Returns true when the well armed.
|
|
198
|
-
*/
|
|
199
|
-
holdWellAt(x: number, y: number): boolean;
|
|
200
|
-
/** Imperatively RELEASE the well (AY.W-CON2) — `target → 0`, the field cools. */
|
|
201
|
-
releaseWell(): void;
|
|
202
|
-
/**
|
|
203
|
-
* The warp settled signal (AZ.W-CON-GEN G6) — `true` when the warp spring has
|
|
204
|
-
* ARRIVED on its target (no active warp, OR the focal's gap to its live target is
|
|
205
|
-
* within the settle band). A consumer polls this to know if a click-warp / wander
|
|
206
|
-
* re-target is still in flight (the `isSettled` read). A read-only seam over the
|
|
207
|
-
* engine `warpSettled`.
|
|
208
|
-
*/
|
|
209
|
-
warpSettled(): boolean;
|
|
210
|
-
/**
|
|
211
|
-
* Imperatively PIN a node (AZ.W-CON-GEN G1) — re-points `field.pinnedIndex` to
|
|
212
|
-
* `idx` so that node is HELD by every step pass (it stops drifting and holds its
|
|
213
|
-
* current position). `idx < 0` clears the pin (every node drifts again). The
|
|
214
|
-
* pinned node's incident edges tint accent under `accentEdges`; it wanders its
|
|
215
|
-
* anchor under `pinnedDrift` (the cadence re-anchors on its next armed leg).
|
|
216
|
-
*/
|
|
217
|
-
pinNode(idx: number): void;
|
|
218
|
-
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
29
|
+
warpAutoRelease: boolean;
|
|
30
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
219
31
|
declare const _default: typeof __VLS_export;
|
|
220
32
|
export default _default;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Ref } from "vue";
|
|
2
|
+
import { type ConstellationField, type ConstellationProps } from "../constellationField";
|
|
3
|
+
/** The imperative seam the SFC re-exposes via `defineExpose`. */
|
|
4
|
+
export interface ConstellationExpose {
|
|
5
|
+
field: ConstellationField;
|
|
6
|
+
isFrozen: Ref<boolean>;
|
|
7
|
+
warpTo(a: {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
} | number, b?: number): number;
|
|
11
|
+
holdWellAt(x: number, y: number): boolean;
|
|
12
|
+
releaseWell(): void;
|
|
13
|
+
warpSettled(): boolean;
|
|
14
|
+
pinNode(idx: number): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Drive a `<Constellation>` instance. `props` is the REACTIVE (defaulted) prop
|
|
18
|
+
* surface — the per-frame live-read props (`pointerReactive`/`opacityCeiling`/
|
|
19
|
+
* `accentEdges`/`drawOverlay`) are read off `props.x` INSIDE the render loop so a
|
|
20
|
+
* bound `:opacity-ceiling` updates without a remount (the Vue 3.5 reactive-prop
|
|
21
|
+
* read; the SFC `defineProps` destructure transform does not reach a composable
|
|
22
|
+
* argument, so the live reads stay on `props`). `hostRef`/`canvasRef` are the SFC
|
|
23
|
+
* template refs. Returns the imperative expose object the SFC spreads into
|
|
24
|
+
* `defineExpose`.
|
|
25
|
+
*/
|
|
26
|
+
export declare function useConstellation(props: ConstellationProps, hostRef: Ref<HTMLElement | null>, canvasRef: Ref<HTMLCanvasElement | null>): ConstellationExpose;
|