@mkbabb/glass-ui 3.12.0 → 4.0.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-XH4YBVEK.js +158 -0
- package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-DdtWXxOK.js} +58 -53
- package/dist/{ContextMenuSubContent-Bhg4f5jX.js → ContextMenuSubContent-B0Vs6atR.js} +4 -4
- package/dist/{DataTable-CUHMukiQ.js → DataTable-C464Zbqd.js} +99 -97
- package/dist/DialogContent-DDE6pQBU.js +103 -0
- package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-8eZbdmPc.js} +2 -2
- package/dist/FadingScroll-DwNnvKMs.js +76 -0
- package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-Dpzwvc4t.js} +1 -1
- package/dist/IconChip-BDw1j5mu.js +54 -0
- package/dist/{IconTooltip-Cus0fvK0.js → IconTooltip-DSjasZIt.js} +1 -1
- package/dist/MetricBadge-BpC0R_Ec.js +79 -0
- package/dist/{Notification-DLMhblXR.js → Notification-DKjKsQq8.js} +10 -10
- package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-1VtwDSgf.js} +3 -3
- package/dist/PopoverContent-BTorlp--.js +127 -0
- package/dist/{Progress-iEuD9pxG.js → Progress-hAT4gqGH.js} +97 -77
- package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-CUVFTWk2.js} +2 -2
- package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-C1jb3b3K.js} +24 -8
- package/dist/{Switch-Ch-k3Rv-.js → Switch-Dr--uLGH.js} +2 -2
- package/dist/{Toaster-1rYWrmAm.js → Toaster-Bm_HQSpc.js} +55 -52
- package/dist/{ToggleGroupItem-COu_4IW4.js → ToggleGroupItem-Dzk9hWsF.js} +18 -22
- package/dist/animated-digit.js +3 -3
- package/dist/api/index.d.ts +10 -4
- package/dist/api.js +1 -1
- package/dist/aurora.js +113 -98
- package/dist/{badge-CaoFJzRb.js → badge-UILT_3pZ.js} +1 -1
- package/dist/badge.js +1 -1
- package/dist/{button-DN39cGqL.js → button-BNDWhAZb.js} +12 -12
- package/dist/button.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.d.ts +1 -1
- package/dist/carousel.js +101 -145
- package/dist/{check-BBKKKSTf.js → check-njhk-vfu.js} +1 -1
- package/dist/{chevron-down-BSkTP2aL.js → chevron-down-DKkxb4VV.js} +1 -1
- package/dist/{chevron-right-sDM0Yvrf.js → chevron-right-CPXbqQQz.js} +1 -1
- package/dist/{chevron-up-CCOD_FTz.js → chevron-up-n_24SqI-.js} +1 -1
- package/dist/coalesceMetric-5qIeZnTx.js +13 -0
- package/dist/collapsible.js +1 -1
- package/dist/{color-C5ls_QF7.js → color-DweYl7pE.js} +9 -7
- 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/components/custom/animated-digit/AnimatedDigit.vue.d.ts +8 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +16 -45
- package/dist/components/custom/aurora/constants/renderMode.d.ts +2 -0
- package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
- package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -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/configurator/Configurator.vue.d.ts +19 -8
- package/dist/components/custom/configurator/ConfiguratorRow.vue.d.ts +16 -0
- package/dist/components/custom/constellation/Constellation.vue.d.ts +23 -143
- package/dist/components/custom/constellation/composables/createConstellationField.d.ts +41 -0
- package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
- package/dist/components/custom/constellation/constants.d.ts +61 -0
- package/dist/components/custom/constellation/constellationDraw.d.ts +30 -0
- package/dist/components/custom/constellation/constellationField.d.ts +3 -403
- package/dist/components/custom/constellation/constellationInteraction.d.ts +132 -0
- package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
- package/dist/components/custom/constellation/index.d.ts +5 -2
- package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
- package/dist/components/custom/dock/DockRail.vue.d.ts +89 -0
- 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 -6
- package/dist/components/custom/dock/GlassDock.vue.d.ts +5 -118
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
- package/dist/components/custom/dock/composables/index.d.ts +1 -0
- package/dist/components/custom/dock/composables/useDockClickIntegrity.d.ts +23 -0
- package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
- package/dist/components/custom/dock/composables/useDockOrientationMorph.d.ts +44 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +165 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
- package/dist/components/custom/dock/constants.d.ts +83 -0
- package/dist/components/custom/dock/index.d.ts +5 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +15 -37
- 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 +7 -0
- package/dist/components/custom/fourier-field/index.d.ts +1 -1
- package/dist/components/custom/fourier-field/math.d.ts +34 -0
- package/dist/components/custom/fourier-field/presets.d.ts +54 -0
- package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +8 -0
- package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
- package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
- package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
- package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +21 -8
- package/dist/components/custom/goo-blob/constants.d.ts +57 -0
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
- package/dist/components/custom/handmark/brush.d.ts +33 -6
- package/dist/components/custom/handmark/{useHandMark.d.ts → composables/useHandMark.d.ts} +6 -4
- package/dist/components/custom/handmark/constants.d.ts +39 -0
- package/dist/components/custom/handmark/geometry.d.ts +14 -12
- package/dist/components/custom/handmark/index.d.ts +8 -2
- package/dist/components/custom/handmark/types.d.ts +9 -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 +72 -0
- package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -4
- package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +37 -0
- package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +6 -0
- package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +6 -0
- package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +6 -0
- package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +11 -18
- package/dist/components/custom/metric-badge/index.d.ts +1 -0
- package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +15 -4
- package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +6 -4
- 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/tabs/SegmentedTabs.vue.d.ts +20 -25
- package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
- package/dist/components/custom/tabs/constants.d.ts +18 -0
- package/dist/components/custom/tabs/index.d.ts +1 -1
- package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +14 -0
- 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/card/Card.vue.d.ts +16 -4
- package/dist/components/ui/carousel/index.d.ts +0 -1
- package/dist/components/ui/command/Command.vue.d.ts +3 -0
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
- package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
- package/dist/components/ui/drawer/DrawerContent.vue.d.ts +5 -0
- package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
- package/dist/components/ui/index.d.ts +0 -1
- package/dist/components/ui/metric-pill/MetricPill.vue.d.ts +6 -3
- package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
- package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
- 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/skeleton/Skeleton.vue.d.ts +3 -0
- package/dist/components/ui/slider/index.d.ts +22 -19
- package/dist/components/ui/tabs/TabsIndicator.vue.d.ts +4 -1
- 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 +1 -7
- package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +1 -3
- package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +0 -13
- package/dist/composables/color/index.d.ts +12 -0
- package/dist/composables/dark/useGlobalDark.d.ts +14 -12
- package/dist/composables/glass/index.d.ts +0 -1
- package/dist/composables/glass/useGlassBackdropLuminance.d.ts +59 -0
- package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
- package/dist/composables/motion/core/index.d.ts +1 -1
- package/dist/composables/motion/curves.d.ts +48 -0
- package/dist/composables/motion/index.d.ts +2 -0
- package/dist/composables/motion/springPresets.d.ts +33 -0
- package/dist/composables/motion/suite.d.ts +2 -0
- package/dist/composables/motion/useLiquidFlex.d.ts +85 -0
- package/dist/composables/motion/useSpringMount.d.ts +1 -1
- package/dist/composables/motion/useViewTransition.d.ts +36 -1
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +3 -3
- package/dist/constellation.js +373 -261
- package/dist/context-menu.js +2 -2
- package/dist/controls.js +48 -14
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +901 -372
- package/dist/dockContext-Bu1Avy-a.js +17 -0
- package/dist/dom.js +5 -5
- package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-BJ7E9js_.js} +11 -8
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +44 -81
- package/dist/fading-scroll.d.ts +1 -0
- package/dist/fading-scroll.js +2 -0
- package/dist/forms.js +5 -5
- package/dist/fourier-field.js +140 -104
- package/dist/fourier-math.js +2 -2
- package/dist/glass-panel.js +90 -21
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +230 -236
- package/dist/goo-blob.js +264 -228
- package/dist/handmark.js +203 -159
- 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 -5
- package/dist/instrument-chassis.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +28 -18
- package/dist/{math-DTpRVC0e.js → math-DeuJwLFx.js} +26 -2
- package/dist/{menuItemVariants-CCoBNkU5.js → menuItemVariants-DWRQXBxJ.js} +10 -4
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +29 -22
- package/dist/metric-stack.js +35 -34
- package/dist/{minimize-2-lcXOuc6V.js → minimize-2-BV31Ob_h.js} +1 -1
- package/dist/motion-core.js +32 -136
- package/dist/motion-curves.d.ts +1 -0
- package/dist/motion-curves.js +130 -0
- package/dist/motion.js +38 -37
- 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/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-nbkvr2dC.js → search-BSGrf2Sk.js} +1 -1
- package/dist/search.js +10 -10
- package/dist/select.js +3 -3
- package/dist/separator.js +1 -1
- package/dist/sheet-CquRYOAw.js +218 -0
- package/dist/sheet.js +1 -1
- package/dist/{slider-ClgpP7EB.js → slider-DQ95MET2.js} +8 -8
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/springPresets-WXaLbu8u.js +40 -0
- package/dist/stacked-icons.js +6 -6
- package/dist/styles/animations.css +25 -125
- package/dist/styles/cards.css +55 -0
- package/dist/styles/components.css +4 -1
- package/dist/styles/configurator.css +77 -0
- package/dist/styles/dock/density.css +19 -0
- package/dist/styles/dock/layer-group.css +83 -25
- package/dist/styles/dock/layers.css +23 -1
- package/dist/styles/dock/morph-bridge.css +123 -0
- package/dist/styles/dock/morph.css +175 -45
- package/dist/styles/dock/overflow.css +66 -1
- package/dist/styles/dock/rail-extend.css +397 -0
- package/dist/styles/dock/section.css +59 -0
- package/dist/styles/dock/shell.css +97 -110
- package/dist/styles/dock-controls/dark-mode-toggle.css +109 -0
- package/dist/styles/dock-controls/icon-button.css +143 -0
- package/dist/styles/dock-controls/tab-button.css +143 -0
- package/dist/styles/dock-controls/touch-floor.css +94 -0
- package/dist/styles/dock-controls/triggers.css +135 -0
- package/dist/styles/dock-controls.css +30 -595
- package/dist/styles/dock.css +8 -3
- package/dist/styles/drawer.css +48 -0
- package/dist/styles/feedback-tone.css +104 -0
- package/dist/styles/floating-panel.css +17 -0
- package/dist/styles/glass/a11y-fallback.css +245 -0
- package/dist/styles/glass/ladder.css +383 -0
- package/dist/styles/glass/material.css +238 -0
- package/dist/styles/glass/progress-rail.css +78 -0
- package/dist/styles/glass/squircle.css +66 -0
- package/dist/styles/glass/surface-axis.css +113 -0
- package/dist/styles/glass/surfaces.css +382 -0
- package/dist/styles/glass-refract.css +2 -0
- package/dist/styles/glass.css +34 -1188
- package/dist/styles/hover-popover.css +2 -0
- package/dist/styles/icon-chip.css +149 -0
- package/dist/styles/index.css +94 -18
- package/dist/styles/instrument-chassis.css +46 -0
- package/dist/styles/menu.css +127 -0
- package/dist/styles/paper.css +2 -68
- package/dist/styles/segmented-tabs.css +346 -0
- package/dist/styles/select.css +50 -0
- package/dist/styles/theme/bridges.css +347 -0
- package/dist/styles/theme/dark.css +7 -0
- package/dist/styles/theme/literals.css +94 -0
- package/dist/styles/theme/radius.css +95 -0
- package/dist/styles/theme.css +26 -529
- package/dist/styles/tokens/color-radius.css +287 -0
- package/dist/styles/tokens/dark-arm.css +308 -0
- package/dist/styles/tokens/glass.css +500 -0
- package/dist/styles/tokens/light-dark.css +187 -0
- package/dist/styles/tokens/offsets-sizing.css +562 -0
- package/dist/styles/tokens/property-regs.css +162 -0
- package/dist/styles/tokens/scale-paper.css +409 -0
- package/dist/styles/tokens/scheme-motion.css +352 -0
- package/dist/styles/tokens/shadow.css +166 -0
- package/dist/styles/tokens.css +22 -2360
- 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 +159 -0
- package/dist/styles/typography.css +23 -453
- package/dist/styles/utilities/a11y-overrides.css +169 -0
- package/dist/styles/utilities/animate.css +26 -0
- package/dist/styles/utilities/base.css +541 -0
- package/dist/styles/utilities/btn.css +218 -0
- package/dist/styles/utilities/components.css +317 -0
- package/dist/styles/utilities.css +19 -1318
- package/dist/styles/view-transition.css +4 -52
- package/dist/switch.js +1 -1
- package/dist/tabs.js +161 -181
- 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-Bcpy5Etf.js → useAnimatedNumber-C_3wZLx4.js} +1 -1
- package/dist/useConfiguratorState-kiIlun8I.js +303 -0
- package/dist/useLiquidFlex-C12hXwOZ.js +30 -0
- package/dist/useRAFLoop-CdwJ7284.js +109 -0
- package/dist/{useScrollProgress-CffFGLa5.js → useScrollProgress-D7bYU2RK.js} +1 -1
- package/dist/useSpecularTracking-Bo5su68i.js +32 -0
- package/dist/useSpringMount-CvopqiFr.js +108 -0
- package/dist/useSurfaceAxis-CMnF2zHb.js +7 -0
- package/dist/{useTouchGate-WFyJYsth.js → useTouchGate-28Tk2-t2.js} +1 -1
- package/dist/useViewTransition-COsPjQVZ.js +47 -0
- package/dist/utils/coalesceMetric.d.ts +29 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/vReveal-D9k0jADx.js +10 -0
- package/dist/watercolor-dot.js +22 -13
- package/dist/{x-Dfsegz9Y.js → x-BUwTKe50.js} +1 -1
- package/package.json +134 -50
- package/src/styles/animations.css +25 -125
- package/src/styles/cards.css +53 -0
- package/src/styles/configurator.css +77 -0
- package/src/styles/dock/density.css +19 -0
- package/src/styles/dock/layer-group.css +83 -25
- package/src/styles/dock/layers.css +23 -1
- package/src/styles/dock/morph-bridge.css +123 -0
- package/src/styles/dock/morph.css +175 -45
- package/src/styles/dock/overflow.css +66 -1
- package/src/styles/dock/rail-extend.css +397 -0
- package/src/styles/dock/section.css +59 -0
- package/src/styles/dock/shell.css +97 -110
- package/src/styles/dock-controls/dark-mode-toggle.css +109 -0
- package/src/styles/dock-controls/icon-button.css +143 -0
- package/src/styles/dock-controls/tab-button.css +143 -0
- package/src/styles/dock-controls/touch-floor.css +94 -0
- package/src/styles/dock-controls/triggers.css +135 -0
- package/src/styles/dock-controls.css +30 -595
- package/src/styles/dock.css +8 -3
- package/src/styles/drawer.css +42 -0
- package/src/styles/feedback-tone.css +104 -0
- package/src/styles/floating-panel.css +15 -0
- package/src/styles/glass/a11y-fallback.css +245 -0
- package/src/styles/glass/ladder.css +383 -0
- package/src/styles/glass/material.css +238 -0
- package/src/styles/glass/progress-rail.css +78 -0
- package/src/styles/glass/squircle.css +66 -0
- package/src/styles/glass/surface-axis.css +113 -0
- package/src/styles/glass/surfaces.css +382 -0
- package/src/styles/glass.css +34 -1188
- package/src/styles/icon-chip.css +149 -0
- package/src/styles/index.css +93 -17
- package/src/styles/instrument-chassis.css +42 -0
- package/src/styles/menu.css +127 -0
- package/src/styles/paper.css +2 -68
- package/src/styles/segmented-tabs.css +340 -0
- package/src/styles/select.css +50 -0
- package/src/styles/theme/bridges.css +347 -0
- package/src/styles/theme/dark.css +7 -0
- package/src/styles/theme/literals.css +94 -0
- package/src/styles/theme/radius.css +95 -0
- package/src/styles/theme.css +26 -529
- package/src/styles/tokens/color-radius.css +287 -0
- package/src/styles/tokens/dark-arm.css +308 -0
- package/src/styles/tokens/glass.css +500 -0
- package/src/styles/tokens/light-dark.css +187 -0
- package/src/styles/tokens/offsets-sizing.css +562 -0
- package/src/styles/tokens/property-regs.css +162 -0
- package/src/styles/tokens/scale-paper.css +409 -0
- package/src/styles/tokens/scheme-motion.css +352 -0
- package/src/styles/tokens/shadow.css +166 -0
- package/src/styles/tokens.css +22 -2360
- 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 +159 -0
- package/src/styles/typography.css +23 -453
- package/src/styles/utilities/a11y-overrides.css +169 -0
- package/src/styles/utilities/animate.css +26 -0
- package/src/styles/utilities/base.css +541 -0
- package/src/styles/utilities/btn.css +218 -0
- package/src/styles/utilities/components.css +317 -0
- package/src/styles/utilities.css +19 -1318
- package/src/styles/view-transition.css +4 -52
- package/dist/CardAction-DuArVky-.js +0 -157
- package/dist/DeckProgress-Dmk4_AKN.js +0 -23
- package/dist/DialogContent-BRkT1cjP.js +0 -100
- package/dist/InstrumentRail-CUJ05YVG.js +0 -44
- package/dist/MetricBadge-BZVWIxNy.js +0 -80
- package/dist/PopoverContent-BId6ggf_.js +0 -121
- package/dist/TabsList-B8CVOQPC.js +0 -101
- package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
- package/dist/components/custom/deck-progress/index.d.ts +0 -2
- package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
- package/dist/components/custom/dialog-native/index.d.ts +0 -1
- package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
- package/dist/components/custom/instrument-rail/index.d.ts +0 -2
- package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
- package/dist/composables/motion/useRouteTransition.d.ts +0 -42
- package/dist/deck-progress.d.ts +0 -1
- package/dist/deck-progress.js +0 -2
- package/dist/dockContext-BKeIMmNk.js +0 -9
- package/dist/instrument-rail.d.ts +0 -1
- package/dist/instrument-rail.js +0 -2
- package/dist/sheet-VZEtNFvO.js +0 -214
- package/dist/styles/instrument-rail.css +0 -127
- package/dist/useConfiguratorState-DxAqksK6.js +0 -287
- package/dist/useGlassRenderer-D7YGOYiM.js +0 -69
- package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
- package/dist/useSpringMount-BJSHcLl3.js +0 -113
- package/dist/useViewTransition-DaN5Zrox.js +0 -21
- package/dist/vReveal-zUIQk-rJ.js +0 -53
- package/src/styles/instrument-rail.css +0 -127
- /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-C_s6fG7r.js} +0 -0
- /package/dist/{ContextMenuContent-DDa0v27s.js → ContextMenuContent-ON3x7cuk.js} +0 -0
- /package/dist/{HoverCardContent-B6CcQ8He.js → HoverCardContent-DkMaQzH5.js} +0 -0
- /package/dist/{Input-xuDwALQR.js → Input-DVG_J0ne.js} +0 -0
- /package/dist/{InstrumentChassis-C2f6cBaQ.js → InstrumentChassis-UUJX0-mW.js} +0 -0
- /package/dist/{Label-zRfbQdCn.js → Label-Ck9SWEKM.js} +0 -0
- /package/dist/{ModalOverlay-B1GkAjNb.js → ModalOverlay-CkPRRgl_.js} +0 -0
- /package/dist/{PaperBackdrop-CqwjnfLv.js → PaperBackdrop-nBKe0vkB.js} +0 -0
- /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-Dcczq44n.js} +0 -0
- /package/dist/{SelectSeparator-C4Ql0gzV.js → SelectSeparator-DK2y1Bun.js} +0 -0
- /package/dist/{Separator-D7sD7RKj.js → Separator-BArl4OaB.js} +0 -0
- /package/dist/{TooltipProvider-CmZzCuaG.js → TooltipProvider-B3MkB_8P.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-CBt_VvXa.js} +0 -0
- /package/dist/{compile-BOXjLUxu.js → compile-EXXzEr1q.js} +0 -0
- /package/dist/{constants-yKeKnE84.js → constants-BPOqYJAm.js} +0 -0
- /package/dist/{createContext-B44Sah_H.js → createContext-B2RaZ-b8.js} +0 -0
- /package/dist/{createLucideIcon-B6uNAU9G.js → createLucideIcon-DydS2qgk.js} +0 -0
- /package/dist/{presets-BP_ALM0m.js → presets-BW2b-fr1.js} +0 -0
- /package/dist/{prng-D27-B3tK.js → prng-Cg22zv8g.js} +0 -0
- /package/dist/{supportsCssTimeline-C5oe0lnD.js → supportsCssTimeline-BWenxvHU.js} +0 -0
- /package/dist/{useGlobalDark-CAhOXNLO.js → useGlobalDark-C28t0VWJ.js} +0 -0
- /package/dist/{useIntersectionPause-Cck5Uxk8.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
- /package/dist/{useInterval-Dsmqwi03.js → useInterval-CNdua40W.js} +0 -0
- /package/dist/{useKeyboardShortcuts-CyIYrndH.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
- /package/dist/{useResizeObserver-CWCbk5Px.js → useResizeObserver-V6nq5gJb.js} +0 -0
- /package/dist/{useResolveTokenColor-r9pnNjqK.js → useResolveTokenColor-NUG2zYAW.js} +0 -0
- /package/dist/{useSortable-C8ReQ50P.js → useSortable-BVqlJRBR.js} +0 -0
- /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-NmBM5V_4.js} +0 -0
- /package/dist/{useTimer-3xqf_54b.js → useTimer-B_PAasDL.js} +0 -0
- /package/dist/{useUserInvalidAria-DoJKMZ3s.js → useUserInvalidAria-CDfJuakL.js} +0 -0
- /package/dist/{useViewportReady-RIr5Wgkh.js → useViewportReady-CvBcCYDf.js} +0 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { ConstellationPalette, ConstellationWellConfig } from "./constellationField";
|
|
2
|
+
/**
|
|
3
|
+
* The reference layout width (px) the field's node geometry is authored against. A
|
|
4
|
+
* live canvas's `k = width / BASE_WIDTH` scales every base-width length (the well
|
|
5
|
+
* reach/speed, the node spacing) so a 600px and a 1280px canvas read the same shape.
|
|
6
|
+
*/
|
|
7
|
+
export declare const BASE_WIDTH = 1280;
|
|
8
|
+
/**
|
|
9
|
+
* The neutral palette FALLBACK the draw passes read when the `--constellation-*`
|
|
10
|
+
* color/alpha tokens are absent (SSR / no-token mount). The fallbacks mirror the §5c
|
|
11
|
+
* light-arm token defaults so a no-token mount still reads recessive-but-legible.
|
|
12
|
+
*
|
|
13
|
+
* `accent`/`edgeFloor`/`edgeAccentAlpha` (AZ.W-CON-GEN G3) are the ACCENT-edge skin
|
|
14
|
+
* weights the optional `drawEdges(…, accentIndex)` pass reads — the flagged-node EDGE
|
|
15
|
+
* tint. `accent` mirrors the `--constellation-accent` neutral library default;
|
|
16
|
+
* `edgeFloor: 0` is the byte-identity (no floor by default — a consumer lifts it so a
|
|
17
|
+
* distance-faded hairline clears the perceptual floor on a bright ground);
|
|
18
|
+
* `edgeAccentAlpha: 0.30` is the accent-incident edge multiplier.
|
|
19
|
+
*/
|
|
20
|
+
export declare const DEFAULT_PALETTE: ConstellationPalette;
|
|
21
|
+
/**
|
|
22
|
+
* Warp spring DEFAULTS — `--constellation-warp-*` tokens override these on mount.
|
|
23
|
+
* `WARP_RESPONSE` is the keyframes.js angular PERIOD (s, NOT a settle-duration);
|
|
24
|
+
* `WARP_ZETA = 1.0` is critically damped so a focal mark never rings/overshoots.
|
|
25
|
+
*/
|
|
26
|
+
export declare const WARP_RESPONSE = 0.55;
|
|
27
|
+
export declare const WARP_ZETA = 1;
|
|
28
|
+
/**
|
|
29
|
+
* Gravity-well tuning DEFAULTS (AY.W-CON2). The `--constellation-well-*` tokens
|
|
30
|
+
* override these on mount via `field.well.cfg`; these stay the fallback. SET by the
|
|
31
|
+
* §6 egg-live π readback (the field-perturbs-then-cools capture is the binding
|
|
32
|
+
* truth) — a moderate gain over a generous reach, a brisk ramp, a tight no-slingshot
|
|
33
|
+
* speed cap, and the singularity-soften floor.
|
|
34
|
+
*/
|
|
35
|
+
export declare const DEFAULT_WELL_CONFIG: ConstellationWellConfig;
|
|
36
|
+
/**
|
|
37
|
+
* Auto-DRIFT cadence DEFAULTS (AY.W-CON1 source; tokenised in AY.W-CON2). The
|
|
38
|
+
* `--constellation-wander-idle`/`-wander-jitter` tokens override these on mount; a
|
|
39
|
+
* prop `{ minIdle, jitter }` still wins over the token. The 8s/8s default rhythm
|
|
40
|
+
* re-targets the focal mark every 8–16s (the slides cadence).
|
|
41
|
+
*/
|
|
42
|
+
export declare const DEFAULT_WANDER_IDLE = 8000;
|
|
43
|
+
export declare const DEFAULT_WANDER_JITTER = 8000;
|
|
44
|
+
/**
|
|
45
|
+
* Autonomous PINNED-ANCHOR drift cadence DEFAULTS (AZ.W-CON-GEN G5). DISTINCT from
|
|
46
|
+
* `wander` (which re-targets the WARP spring among random nodes): this gently eases
|
|
47
|
+
* the PINNED node (`field.pinnedIndex`) around its seeded ANCHOR on a jittered
|
|
48
|
+
* cadence — the flagged point breathes its neighborhood without leaving it. The
|
|
49
|
+
* `--constellation-pinned-drift-*` tokens override these on mount; a prop still wins.
|
|
50
|
+
* `wanderFrac` (±0.14 of the canvas) keeps the pinned node clear of the hero type
|
|
51
|
+
* even as it drifts; `durMs` is the per-leg easeInOutQuad duration; the idle/jitter
|
|
52
|
+
* is the rest between legs (a long, calm rhythm, NOT a metronome).
|
|
53
|
+
*/
|
|
54
|
+
export declare const DEFAULT_PINNED_DRIFT_FRAC = 0.14;
|
|
55
|
+
export declare const DEFAULT_PINNED_DRIFT_DUR = 2600;
|
|
56
|
+
export declare const DEFAULT_PINNED_DRIFT_IDLE = 6000;
|
|
57
|
+
export declare const DEFAULT_PINNED_DRIFT_JITTER = 8000;
|
|
58
|
+
/** R5-8 — the shipped visual-size floor: `kVisOf` === `k` for every canvas
|
|
59
|
+
* ≥ ~0.72·BASE_WIDTH ≈ 922px (incl. the 1280 export frame — byte-identical
|
|
60
|
+
* there by construction); below it the marks stop crushing sub-pixel. */
|
|
61
|
+
export declare const DEFAULT_K_FLOOR = 0.72;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ConstellationField, ConstellationPalette, ConstellationPointer, ConstellationRipple } from "./constellationField";
|
|
2
|
+
import { DEFAULT_PALETTE } from "./constants";
|
|
3
|
+
/** R5-8 — the visual-SIZE draw scale: `max(k, kFloor)`. The four neutral passes
|
|
4
|
+
* size on this; positions/reach stay on TRUE `field.k`. Exported so a
|
|
5
|
+
* `drawOverlay` skin floors its own marks/labels on the same axis. */
|
|
6
|
+
export declare function kVisOf(field: ConstellationField): number;
|
|
7
|
+
export { DEFAULT_PALETTE };
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the FULL neutral palette + legibility weights off a canvas's resolved
|
|
10
|
+
* custom properties (AX.W17). The colors AND the alpha multipliers route through
|
|
11
|
+
* the same `getComputedStyle` probe, so a dark-mode flip re-resolves BOTH the
|
|
12
|
+
* `:root`/`.dark` color arms AND the per-mode alpha defaults in one read.
|
|
13
|
+
*/
|
|
14
|
+
export declare function readPalette(canvas: HTMLCanvasElement): ConstellationPalette;
|
|
15
|
+
/**
|
|
16
|
+
* Pass 1 — hairline edges between any two nodes within `link` px (alpha falls off with
|
|
17
|
+
* distance). The optional `accentIndex` (AZ.W-CON-GEN G2; default `-1` = OFF,
|
|
18
|
+
* byte-identical to the prior single-color pass) is the flagged-node ACCENT-edge skin:
|
|
19
|
+
* an edge incident on that node strokes `palette.accent` at `palette.edgeAccentAlpha`
|
|
20
|
+
* with a slightly heavier line (the flagged-node tether), while every other edge keeps
|
|
21
|
+
* the neutral register. The neutral edges carry a `palette.edgeFloor` minimum so a
|
|
22
|
+
* distance-faded hairline clears the perceptual floor on a bright ground (G3).
|
|
23
|
+
*/
|
|
24
|
+
export declare function drawEdges(ctx: CanvasRenderingContext2D, field: ConstellationField, link: number, palette: ConstellationPalette, opacityCeiling?: number, accentIndex?: number): void;
|
|
25
|
+
/** Pass 2 — ambient node dots. */
|
|
26
|
+
export declare function drawNodes(ctx: CanvasRenderingContext2D, field: ConstellationField, palette: ConstellationPalette, opacityCeiling?: number): void;
|
|
27
|
+
/** Pass 3 — the cursor joins the web: faint links to nodes within reach + a soft cursor node. */
|
|
28
|
+
export declare function drawPointerWeb(ctx: CanvasRenderingContext2D, field: ConstellationField, link: number, palette: ConstellationPalette, pointer: ConstellationPointer | null, opacityCeiling?: number): void;
|
|
29
|
+
/** Pass 4 — tap ripples: expanding rings that fade over ~0.9s; consumed entries are spliced. */
|
|
30
|
+
export declare function drawRipples(ctx: CanvasRenderingContext2D, field: ConstellationField, now: number, ripples: ConstellationRipple[], palette: ConstellationPalette, opacityCeiling?: number): void;
|
|
@@ -1,291 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
|
|
4
|
-
x: number;
|
|
5
|
-
y: number;
|
|
6
|
-
vx: number;
|
|
7
|
-
vy: number;
|
|
8
|
-
r: number;
|
|
9
|
-
dim: boolean;
|
|
10
|
-
}
|
|
11
|
-
export interface ConstellationRipple {
|
|
12
|
-
x: number;
|
|
13
|
-
y: number;
|
|
14
|
-
/** `performance.now()` at first draw; -1 until stamped. */
|
|
15
|
-
start: number;
|
|
16
|
-
}
|
|
17
|
-
/** The pointer position in canvas-local CSS px (`-1` = inactive). */
|
|
18
|
-
export interface ConstellationPointer {
|
|
19
|
-
x: number;
|
|
20
|
-
y: number;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* The neutral palette + legibility weights resolved off the canvas custom
|
|
24
|
-
* properties (the FULL `--constellation-*` set — AX.W17). `node`/`nodeDim`/
|
|
25
|
-
* `line` are the colors; `edgeAlpha`/`edgeFocusAlpha`/`alpha` are the per-mode
|
|
26
|
-
* legibility multipliers (replacing the `0.17`/`0.24` magic literals).
|
|
27
|
-
*/
|
|
28
|
-
export interface ConstellationPalette {
|
|
29
|
-
node: string;
|
|
30
|
-
nodeDim: string;
|
|
31
|
-
line: string;
|
|
32
|
-
/** The hairline-edge alpha multiplier (was the `0.17` literal). */
|
|
33
|
-
edgeAlpha: number;
|
|
34
|
-
/** The focus-proximity edge multiplier (consumer skins may read it). */
|
|
35
|
-
edgeFocusAlpha: number;
|
|
36
|
-
/** The field-yields-to-type translucency knob (the global field dimmer). */
|
|
37
|
-
alpha: number;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* The per-axis critically-damped warp spring on the focal node (AX.W17). The
|
|
41
|
-
* focal mark's position is `(x, y)`; `vx`/`vy` its velocity; `targetIdx` the
|
|
42
|
-
* LIVE node index it chases (re-read each frame so it tracks a DRIFTING target,
|
|
43
|
-
* not a frozen click-time snapshot). `-1` = no active warp (the focal mark
|
|
44
|
-
* rides its node's drift directly — the identity-ride at settle).
|
|
45
|
-
*/
|
|
46
|
-
export interface ConstellationWarp {
|
|
47
|
-
x: number;
|
|
48
|
-
y: number;
|
|
49
|
-
vx: number;
|
|
50
|
-
vy: number;
|
|
51
|
-
/** The chased node's INDEX (live target), or -1 when inactive. */
|
|
52
|
-
targetIdx: number;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* The auto-DRIFT target-source (AY.W-CON1 — the 2nd half of the AX.W17 "drift +
|
|
56
|
-
* warp are ONE mechanic" thesis). The warp re-points its focal node to a
|
|
57
|
-
* periodically-chosen RANDOM node on a jittered cadence: the SAME warp spring,
|
|
58
|
-
* a different target-PICKER (a click for warp, this cadence for drift). No new
|
|
59
|
-
* rAF, no second mechanic — `stepField` steps this cadence inline, re-pointing
|
|
60
|
-
* `setWarpTarget` to a picked node only when the spring has SETTLED (so a
|
|
61
|
-
* click-warp in flight always pre-empts the cadence). PRM is enforced by the
|
|
62
|
-
* CALLER (the component does not advance the cadence under reduced-motion — the
|
|
63
|
-
* `stepField` call lives inside the `!reducedMotion` block — so the focal mark
|
|
64
|
-
* stays at its seed: the WARP precedent, NOT fire-but-freeze).
|
|
65
|
-
*/
|
|
66
|
-
export interface ConstellationWander {
|
|
67
|
-
/** ms timestamp of the next auto re-target; -1 until armed on the first stepped frame. */
|
|
68
|
-
nextAt: number;
|
|
69
|
-
/** the minimum idle (ms) between auto re-targets. */
|
|
70
|
-
minIdle: number;
|
|
71
|
-
/** the random extra idle (ms) added per cadence (so the rhythm is not metronomic). */
|
|
72
|
-
jitter: number;
|
|
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;
|
|
83
|
-
/**
|
|
84
|
-
* The warp-spring tuning the integrator reads (AY.W-CON2). Tokenised numeric (the
|
|
85
|
-
* `--constellation-warp-*` cohort) so a consumer retunes the warp WITHOUT editing
|
|
86
|
-
* src — read ONCE on mount via `parseFloat`, threaded onto the field.
|
|
87
|
-
*
|
|
88
|
-
* `response` is the keyframes.js `(response, dampingFraction)` model's ANGULAR
|
|
89
|
-
* PERIOD (the SwiftUI `.spring(response:)` axis): `ω₀ = 2π/response`. It is NOT a
|
|
90
|
-
* settle-duration — at ζ=1 the 2%-settle lands at `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`
|
|
91
|
-
* (the `(1 + ω₀t)e^(−ω₀t)` critically-damped envelope). Documented here + in the
|
|
92
|
-
* `--constellation-warp-response` token comment so the token semantics are honest
|
|
93
|
-
* at ANY ζ (the AY.W-CON2 ω-reconcile; the engine keeps the keyframes.js convention,
|
|
94
|
-
* mints NO second ω formula).
|
|
95
|
-
*/
|
|
96
|
-
export interface ConstellationWarpConfig {
|
|
97
|
-
/** keyframes.js angular period (s) — `ω₀ = 2π/response`, NOT a settle-duration. */
|
|
98
|
-
response: number;
|
|
99
|
-
/** damping ratio ζ — 1 critically damped (a focal mark must NOT ring). */
|
|
100
|
-
zeta: number;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* The gravity-well tuning (AY.W-CON2). The held-pointer pull is an inverse-square
|
|
104
|
-
* force composed into `stepField` (no new rAF). Tokenised numeric (the
|
|
105
|
-
* `--constellation-well-*` cohort) so a consumer retunes the well WITHOUT editing
|
|
106
|
-
* src. All distances are base-width px (`k`-scaled at step time).
|
|
107
|
-
*/
|
|
108
|
-
export interface ConstellationWellConfig {
|
|
109
|
-
/** the inverse-square pull gain (the force scale at unit distance). */
|
|
110
|
-
gain: number;
|
|
111
|
-
/** the reach (base-width px) — nodes beyond it are untouched (the O(within-reach) cost floor). */
|
|
112
|
-
reach: number;
|
|
113
|
-
/**
|
|
114
|
-
* the ARM ramp rate (1/s) — `strength` eases toward `target = 1` at this rate
|
|
115
|
-
* while HELD (the gentle bloom the token tunes). The RELEASE is NOT this rate:
|
|
116
|
-
* it is the fixed brisk {@link WELL_RELEASE_RAMP} (the field-cools invariant —
|
|
117
|
-
* not consumer-tunable, F8.2). A consumer slowing this token slows the ARM
|
|
118
|
-
* bloom only; the release stays brisk so the cool gate holds.
|
|
119
|
-
*/
|
|
120
|
-
ramp: number;
|
|
121
|
-
/** the per-node speed cap (base-width px/frame) — the no-slingshot clamp. */
|
|
122
|
-
maxSpeed: number;
|
|
123
|
-
/** the singularity floor (px) — a node AT the cursor gets a bounded pull, never `∞`. */
|
|
124
|
-
soften: number;
|
|
125
|
-
/** ms the pointer is held before the well arms. */
|
|
126
|
-
holdMs: number;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* The gravity-well live STATE (AY.W-CON2). `(x, y)` is the held pointer in
|
|
130
|
-
* canvas-local px (`-1` = inactive); `strength` is the eased pull 0→1 (ramps to
|
|
131
|
-
* `target` at `cfg.ramp`/s); `target` is the strength the ramp eases toward (1
|
|
132
|
-
* while held, 0 on release). A transient force — the field renormalises back to
|
|
133
|
-
* `speed` after release (the field-cools invariant).
|
|
134
|
-
*/
|
|
135
|
-
export interface ConstellationWell {
|
|
136
|
-
/** canvas-local px of the held pointer; `-1` = inactive. */
|
|
137
|
-
x: number;
|
|
138
|
-
y: number;
|
|
139
|
-
/** the eased pull strength 0→1 (ramps to `target` at `cfg.ramp`/s). */
|
|
140
|
-
strength: number;
|
|
141
|
-
/** the strength the ramp is easing toward: 1 while held, 0 on release. */
|
|
142
|
-
target: number;
|
|
143
|
-
/** the well tuning (gain/reach/ramp/maxSpeed/soften). */
|
|
144
|
-
cfg: ConstellationWellConfig;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* The field state the component exposes to its `drawOverlay` consumer so a
|
|
148
|
-
* skin can pin itself to a real field node. `k` is the `width / BASE_WIDTH`
|
|
149
|
-
* scale, `dpr` the device-pixel ratio applied by the substrate.
|
|
150
|
-
*
|
|
151
|
-
* The focal node (AX.W17) is a FIRST-CLASS library concept: `focalIndex` names
|
|
152
|
-
* which node is focal (consumer-owned via `warpTo`), and the engine OWNS its
|
|
153
|
-
* position via the `warp` spring stepped inside `stepField`. A `drawOverlay`
|
|
154
|
-
* paints the focal mark at `field.warp.{x,y}` (the spring-eased position) —
|
|
155
|
-
* node-position mutation `drawOverlay` structurally cannot express, resolved by
|
|
156
|
-
* ONE first-class concept (warp + drift unify; no second parallel hook).
|
|
157
|
-
*/
|
|
158
|
-
export interface ConstellationField {
|
|
159
|
-
nodes: ConstellationNode[];
|
|
160
|
-
/** The host canvas — for `getComputedStyle` token reads in an overlay. */
|
|
161
|
-
canvas: HTMLCanvasElement | null;
|
|
162
|
-
w: number;
|
|
163
|
-
h: number;
|
|
164
|
-
k: number;
|
|
165
|
-
dpr: number;
|
|
166
|
-
/**
|
|
167
|
-
* The designated focal node's INDEX, or `-1` when none is pinned. Re-points
|
|
168
|
-
* on each `warpTo`; node count is conserved (it is a designation, not a new
|
|
169
|
-
* node). A `drawOverlay` reads `field.warp.{x,y}` for the spring-eased mark.
|
|
170
|
-
*/
|
|
171
|
-
focalIndex: number;
|
|
172
|
-
/** The per-axis warp spring the engine steps inside `stepField` (AX.W17). */
|
|
173
|
-
warp: ConstellationWarp;
|
|
174
|
-
/**
|
|
175
|
-
* The warp-spring tuning `warpStep` reads (AY.W-CON2). Optional — absent
|
|
176
|
-
* falls back to the shipped `{ response: 0.55, zeta: 1.0 }` defaults (the
|
|
177
|
-
* byte-identical HEAD spring). A tokenised override (read on mount) reaches
|
|
178
|
-
* the integrator through this member.
|
|
179
|
-
*/
|
|
180
|
-
warpCfg?: ConstellationWarpConfig;
|
|
181
|
-
/**
|
|
182
|
-
* The optional auto-DRIFT cadence (AY.W-CON1). When set, `stepField`
|
|
183
|
-
* periodically re-points the warp to a random node (the wander source on the
|
|
184
|
-
* SAME spring). Absent (`undefined`) leaves the field BYTE-IDENTICAL to the
|
|
185
|
-
* pre-wander HEAD — `stepField` skips the cadence block entirely.
|
|
186
|
-
*/
|
|
187
|
-
wander?: ConstellationWander;
|
|
188
|
-
/**
|
|
189
|
-
* The optional gravity-well (AY.W-CON2). When set, `stepField` composes a
|
|
190
|
-
* held-pointer inverse-square pull force (no new rAF) — `well.target → 1`
|
|
191
|
-
* while held, `→ 0` on release, the field renormalising back to `speed` once
|
|
192
|
-
* the well cools. Absent (`undefined`) leaves the field BYTE-IDENTICAL to the
|
|
193
|
-
* pre-well HEAD — `stepField` skips the force pass entirely.
|
|
194
|
-
*/
|
|
195
|
-
well?: ConstellationWell;
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* The `<Constellation>` consumer prop surface (the public type a consumer types
|
|
199
|
-
* a wrapper against). The `drawOverlay` seam is the branded-skin injection — it
|
|
200
|
-
* runs AFTER the neutral passes with the live field.
|
|
201
|
-
*/
|
|
202
|
-
export interface ConstellationProps {
|
|
203
|
-
/** Node count. Default 64. */
|
|
204
|
-
count?: number;
|
|
205
|
-
/** Link distance in px (the falloff reach). Default 132. */
|
|
206
|
-
link?: number;
|
|
207
|
-
/** Drift speed. Default 0.16. */
|
|
208
|
-
speed?: number;
|
|
209
|
-
/** Seed for a reproducible field (number or hashed string); omit for `Math.random`. */
|
|
210
|
-
seed?: number | string;
|
|
211
|
-
/** Steer-toward-cursor + tap ripples. Default true; auto-off under reduced-motion. */
|
|
212
|
-
pointerReactive?: boolean;
|
|
213
|
-
/**
|
|
214
|
-
* Click-to-warp (AX.W17): a click warps the focal node to the nearest
|
|
215
|
-
* drifting node + springs it there. INDEPENDENT of `pointerReactive` (warp
|
|
216
|
-
* works on a non-ripple lattice). Default false; auto-off under
|
|
217
|
-
* reduced-motion (the focal mark stays put — the stated PRM policy).
|
|
218
|
-
*/
|
|
219
|
-
warpOnClick?: boolean;
|
|
220
|
-
/**
|
|
221
|
-
* Auto-DRIFT (AY.W-CON1): a periodic auto-pick re-points the focal node to a
|
|
222
|
-
* random node on a jittered cadence — the wander source on the SAME warp
|
|
223
|
-
* spring (no second mechanic). `true` uses the default cadence (8–16s, the
|
|
224
|
-
* slides rhythm); `{ minIdle, jitter }` tunes it. Default OFF (absent →
|
|
225
|
-
* byte-identical to HEAD). PRM-gated by the WARP precedent (the cadence never
|
|
226
|
-
* advances under reduced-motion — the focal stays at its seed).
|
|
227
|
-
*/
|
|
228
|
-
wander?: boolean | {
|
|
229
|
-
minIdle?: number;
|
|
230
|
-
jitter?: number;
|
|
231
|
-
};
|
|
232
|
-
/**
|
|
233
|
-
* Pointer-held GRAVITY-WELL (AY.W-CON2): hold the pointer and the lattice is
|
|
234
|
-
* pulled toward it (an inverse-square force on the same engine, no new rAF);
|
|
235
|
-
* release and the field cools back to `speed`. INDEPENDENT of `warpOnClick`
|
|
236
|
-
* and `pointerReactive` (a consumer can hold-to-pull on a non-ripple,
|
|
237
|
-
* non-warp lattice). `true` uses the tokenised defaults; an object tunes the
|
|
238
|
-
* gains. Default OFF (absent → byte-identical to HEAD). PRM-gated by the WARP
|
|
239
|
-
* precedent (the held-timer is not registered under reduced-motion).
|
|
240
|
-
*/
|
|
241
|
-
gravityWell?: boolean | {
|
|
242
|
-
holdMs?: number;
|
|
243
|
-
gain?: number;
|
|
244
|
-
reach?: number;
|
|
245
|
-
ramp?: number;
|
|
246
|
-
maxSpeed?: number;
|
|
247
|
-
soften?: number;
|
|
248
|
-
};
|
|
249
|
-
/**
|
|
250
|
-
* Deterministic-capture freeze (AY.W-CON3): when `true`, lays out ONE
|
|
251
|
-
* reproducible STATIC frame (no `stepField`, no ripple / warp / wander / well
|
|
252
|
-
* advance) and hands `drawOverlay` a FROZEN `now` so a phase-driven skin
|
|
253
|
-
* resolves to a fixed value. Omit to AUTO-DERIVE from `location.search`
|
|
254
|
-
* matching `export | print | freeze` (the deploy-pipeline contract); an
|
|
255
|
-
* explicit `false` forces live even under a capture URL. Set `seed` for a
|
|
256
|
-
* field stable ACROSS runs. Unifies with the reduced-motion one-static-frame
|
|
257
|
-
* path (`freeze || reducedMotion` is the single static-frame predicate).
|
|
258
|
-
*/
|
|
259
|
-
freeze?: boolean;
|
|
260
|
-
class?: string;
|
|
261
|
-
/** The skin seam — paints the consumer's focal mark on the live field. */
|
|
262
|
-
drawOverlay?: (ctx: CanvasRenderingContext2D, field: ConstellationField, now: number) => void;
|
|
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
|
-
};
|
|
1
|
+
export { BASE_WIDTH } from "./constants";
|
|
2
|
+
export type * from "./constellationTypes";
|
|
3
|
+
import type { ConstellationNode, ConstellationField, ConstellationPointer } from "./constellationTypes";
|
|
289
4
|
/**
|
|
290
5
|
* Seed `count` drifting nodes inside `w × h`. `rng` is a `() => number` in
|
|
291
6
|
* `[0, 1)` (the glass-ui `mulberry32`/`Math.random`); a seeded `rng` lays out a
|
|
@@ -325,118 +40,3 @@ export declare function refitField(field: ConstellationField, prevW: number, pre
|
|
|
325
40
|
* (a click-warp in flight pre-empts the cadence — `warpSettled` reports false).
|
|
326
41
|
*/
|
|
327
42
|
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;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { ConstellationField, ConstellationPinnedDrift, ConstellationWarpConfig, ConstellationWellConfig } from "./constellationField";
|
|
2
|
+
import { DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, DEFAULT_WELL_CONFIG, WARP_RESPONSE, WARP_ZETA, DEFAULT_PINNED_DRIFT_FRAC, DEFAULT_PINNED_DRIFT_DUR, DEFAULT_PINNED_DRIFT_IDLE, DEFAULT_PINNED_DRIFT_JITTER } from "./constants";
|
|
3
|
+
export { DEFAULT_WANDER_IDLE, DEFAULT_WANDER_JITTER, DEFAULT_WELL_CONFIG, WARP_RESPONSE, WARP_ZETA };
|
|
4
|
+
export { DEFAULT_PINNED_DRIFT_FRAC, DEFAULT_PINNED_DRIFT_DUR, DEFAULT_PINNED_DRIFT_IDLE, DEFAULT_PINNED_DRIFT_JITTER, };
|
|
5
|
+
/**
|
|
6
|
+
* Read the NUMERIC interaction-tuning tokens (the warp spring + the gravity-well
|
|
7
|
+
* gains) off a canvas's resolved custom properties — ONCE on mount (AY.W-CON2),
|
|
8
|
+
* via `parseFloat`, NOT per-frame `getComputedStyle` (the hot loop stays clean).
|
|
9
|
+
* Returns `{ warp, well }` configs the field carries; every member falls back to
|
|
10
|
+
* the shipped default when the token is absent (an SSR / no-token mount reads the
|
|
11
|
+
* byte-identical spring). The tokens are PLAIN numbers (`0.55`, `12000`), immune
|
|
12
|
+
* to the W30 `light-dark()`-into-Canvas2D leak (they never reach a `fillStyle`).
|
|
13
|
+
*/
|
|
14
|
+
export declare function readInteractionConfig(canvas: HTMLCanvasElement): {
|
|
15
|
+
warp: ConstellationWarpConfig;
|
|
16
|
+
well: ConstellationWellConfig;
|
|
17
|
+
wander: {
|
|
18
|
+
minIdle: number;
|
|
19
|
+
jitter: number;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Advance the gravity-well one `dt` (AY.W-CON2). A transient held-pointer force
|
|
24
|
+
* composed inside `stepField` (NO new rAF): ease `well.strength` toward
|
|
25
|
+
* `well.target` (1 held / 0 released) at `cfg.ramp`/s; while active, add an
|
|
26
|
+
* inverse-square pull toward the held point onto each node within `cfg.reach`
|
|
27
|
+
* (the `max(d, soften)` no-singularity floor + the `cfg.maxSpeed` no-slingshot
|
|
28
|
+
* clamp); ALWAYS ease every node's |v| back toward `speed` (the field-cools
|
|
29
|
+
* invariant — so a released well re-settles). No-ops (entirely skipped) when
|
|
30
|
+
* `field.well` is undefined → the default render is byte-identical to HEAD.
|
|
31
|
+
*
|
|
32
|
+
* `dt` is clamped to {@link WARP_DT_CLAMP} (the same park-resume guard the warp
|
|
33
|
+
* uses) so a tab-throttle gap cannot slingshot the field in one giant step.
|
|
34
|
+
*/
|
|
35
|
+
export declare function stepWell(field: ConstellationField, k: number, speed: number, dt: number): void;
|
|
36
|
+
/**
|
|
37
|
+
* The nearest DRIFTING node to `(px, py)` in canvas-local px — a linear O(count)
|
|
38
|
+
* min-d² scan (count 64 default — negligible; matches the O(count²) edge pass).
|
|
39
|
+
* "Lattice point" = the nearest drifting NODE (the constellation has NO fixed
|
|
40
|
+
* lattice). `excludeIdx` drops a node from the candidate set (the focal node
|
|
41
|
+
* excludes ITSELF, so a cursor-on-focal warp no-ops). Returns `-1` if no
|
|
42
|
+
* eligible node exists (empty field, or only the excluded node).
|
|
43
|
+
*/
|
|
44
|
+
export declare function nearestNode(field: ConstellationField, px: number, py: number, excludeIdx?: number): number;
|
|
45
|
+
/**
|
|
46
|
+
* Advance the focal-node warp spring one `dt` (seconds). A per-axis 2nd-order
|
|
47
|
+
* critically-damped integrator over `field.warp.{x,y}` toward the LIVE position
|
|
48
|
+
* of `field.nodes[field.warp.targetIdx]` — re-read EACH frame, so the spring
|
|
49
|
+
* CHASES a drifting target and arrives ON it (the identity-ride). No-ops when no
|
|
50
|
+
* warp is active (`targetIdx < 0`). `dt` is clamped to {@link WARP_DT_CLAMP} so a
|
|
51
|
+
* tab-throttle / offscreen-park-resume gap cannot teleport the mark.
|
|
52
|
+
*
|
|
53
|
+
* x += v·dt ; v += (−2ζω·v − ω²·(x − target))·dt
|
|
54
|
+
*
|
|
55
|
+
* Reads `(response, ζ)` from `field.warpCfg` (the tokenised override — AY.W-CON2),
|
|
56
|
+
* falling back to the shipped `WARP_RESPONSE`/`WARP_ZETA` defaults. `ω = 2π/response`
|
|
57
|
+
* is the keyframes.js `(response, dampingFraction)` convention (the SHARED house
|
|
58
|
+
* model — `ω₀` is the angular frequency, `response` its ANGULAR PERIOD, NOT a
|
|
59
|
+
* settle-duration; at ζ=1 the 2%-settle is `t₂ ≈ 5.83/ω₀ ≈ 0.93·response`). NO
|
|
60
|
+
* second ω formula is minted (the ω-reconcile). NOT its rAF — the FORBID-useSpring
|
|
61
|
+
* contract (a second rAF would defeat the parked-substrate one-path freeze).
|
|
62
|
+
*/
|
|
63
|
+
export declare function warpStep(field: ConstellationField, dt: number): void;
|
|
64
|
+
/**
|
|
65
|
+
* Point the warp at a node INDEX (the live target-source seam). The focal node
|
|
66
|
+
* re-points to `idx`; the spring chases `nodes[idx]`'s LIVE position FROM the
|
|
67
|
+
* focal mark's CURRENT position (`warp.{x,y}`) — a continuous spring-eased path,
|
|
68
|
+
* never a snap. The component seeds `warp.{x,y}` at field-center on first layout,
|
|
69
|
+
* so even the first warp springs from a real start point. `idx < 0` clears the
|
|
70
|
+
* warp (the focal mark is removed). Re-pointing does NOT zero the velocity, so a
|
|
71
|
+
* mid-flight re-target curves smoothly toward the new node.
|
|
72
|
+
*/
|
|
73
|
+
export declare function setWarpTarget(field: ConstellationField, idx: number): void;
|
|
74
|
+
/**
|
|
75
|
+
* Warp the focal node to the nearest drifting node to a canvas-LOCAL px point
|
|
76
|
+
* (the `warpTo(point)` primitive). The DEGENERATE case — the click's UNCONSTRAINED
|
|
77
|
+
* nearest node is already the current focal (cursor on/closest to the focal mark)
|
|
78
|
+
* — NO-OPS (returns the current focal; a click on yourself does not re-warp). Any
|
|
79
|
+
* OTHER click re-points to the nearest node, with the focal EXCLUDED from the
|
|
80
|
+
* candidate set (you never re-warp to yourself; the next-nearest wins). Returns
|
|
81
|
+
* the chosen node index, or `-1` when no eligible node exists. The component's
|
|
82
|
+
* `warpTo(clientX, clientY)` sugar maps client→local px via `toLocal` first.
|
|
83
|
+
*/
|
|
84
|
+
export declare function warpTo(field: ConstellationField, px: number, py: number): number;
|
|
85
|
+
/**
|
|
86
|
+
* Is the warp spring ARRIVED on its target (AY.W-CON1)? True when there is no
|
|
87
|
+
* active target (`targetIdx < 0`) OR the focal's gap to its LIVE target node is
|
|
88
|
+
* within {@link WARP_SETTLE_BAND}. A click-warp in flight (hundreds of px out)
|
|
89
|
+
* reports NOT arrived, so a user click always PRE-EMPTS the auto-drift cadence
|
|
90
|
+
* (the wander only re-targets a spring that has reached its current node). The
|
|
91
|
+
* gate is POSITION-only by design — a critically-damped spring tracking a drifting
|
|
92
|
+
* node carries a non-zero steady-state velocity forever, so a velocity term would
|
|
93
|
+
* never clear on a live field.
|
|
94
|
+
*/
|
|
95
|
+
export declare function warpSettled(field: ConstellationField): boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Pick a random eligible node index for the auto-drift re-target (AY.W-CON1) —
|
|
98
|
+
* any node EXCEPT the current `focalIndex` (so the focal actually MOVES). `rng`
|
|
99
|
+
* is the seeded `() => number` in `[0, 1)`. A degenerate field (≤1 node, or only
|
|
100
|
+
* the current focal) returns the current focal, which `setWarpTarget` no-ops
|
|
101
|
+
* cleanly (no crash, no jump).
|
|
102
|
+
*/
|
|
103
|
+
export declare function pickWanderTarget(field: ConstellationField, rng: () => number): number;
|
|
104
|
+
/**
|
|
105
|
+
* Build the cold `ConstellationPinnedDrift` state (AZ.W-CON-GEN G5) the field carries
|
|
106
|
+
* when `pinnedDrift` is on. The anchor is seeded LATER (on the first sized frame, off
|
|
107
|
+
* the pinned node's layout position) — here it is `(0,0)` until `stepPinnedDrift`
|
|
108
|
+
* stamps it on the first armed leg. The token-read re-points the un-overridden
|
|
109
|
+
* cadence members on mount (the same prop-over-token layering as the well/wander).
|
|
110
|
+
*/
|
|
111
|
+
export declare function makePinnedDrift(override?: {
|
|
112
|
+
wanderFrac?: number;
|
|
113
|
+
durMs?: number;
|
|
114
|
+
minIdle?: number;
|
|
115
|
+
jitter?: number;
|
|
116
|
+
}): ConstellationPinnedDrift;
|
|
117
|
+
/**
|
|
118
|
+
* Advance the autonomous PINNED-ANCHOR drift one frame (AZ.W-CON-GEN G5). DISTINCT
|
|
119
|
+
* from `wander` (warp re-target): this gently eases the PINNED node around its seeded
|
|
120
|
+
* ANCHOR within `wanderFrac` of the canvas, on a jittered cadence, via a closed-form
|
|
121
|
+
* easeInOutQuad over `now` (no integrator, no second rAF — it rides `stepField`'s ONE
|
|
122
|
+
* per-frame call). No-ops (skipped) when there is no `field.pinnedDrift`, no pinned
|
|
123
|
+
* node, or `now <= 0` (the default unit callers stay green) — so an absent
|
|
124
|
+
* `pinnedDrift` is byte-identical to HEAD.
|
|
125
|
+
*
|
|
126
|
+
* The anchor is captured ON the first armed frame off the pinned node's CURRENT
|
|
127
|
+
* position (its seeded rest), so a consumer that re-anchors the pin (a resize re-fit)
|
|
128
|
+
* gets a fresh anchor on the next leg. Each leg eases from the node's current point to
|
|
129
|
+
* a fresh point within `wanderFrac` of the anchor over `durMs`; between legs the node
|
|
130
|
+
* rests at the leg's end, the next leg arming after `minIdle + rng()*jitter`.
|
|
131
|
+
*/
|
|
132
|
+
export declare function stepPinnedDrift(field: ConstellationField, now: number, rng: () => number): void;
|