@mkbabb/glass-ui 4.1.0 → 4.2.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-8whJrLWt.js → CardAction-DlVP2evz.js} +58 -54
- package/dist/{CommandShortcut-D3yxgHNn.js → CommandShortcut-By-VQcLO.js} +3 -3
- package/dist/{ConfiguratorRow-CaP7U3ZA.js → ConfiguratorRow-YMXdINHx.js} +3 -3
- package/dist/{ContextMenuContent-B3ZsheLV.js → ContextMenuContent-CMWn6huB.js} +1 -1
- package/dist/{ContextMenuSubContent-DDRID3qC.js → ContextMenuSubContent-DvwWCUc0.js} +1 -1
- package/dist/{DataTable-Bc9kUtu_.js → DataTable-C4tG3eIJ.js} +4 -4
- package/dist/DialogContent-D8U9ZfWS.js +121 -0
- package/dist/{DialogScrollContent-TTuovQst.js → DialogScrollContent-BMekN7gq.js} +1 -1
- package/dist/{FadingScroll-DLRbH5Xr.js → FadingScroll-P8B30rAD.js} +1 -1
- package/dist/{HoverCardContent-Bel1gdLZ.js → HoverCardContent-DAmGYglo.js} +1 -1
- package/dist/{HoverPopover-BcIxvyqZ.js → HoverPopover-DYpBOzzF.js} +1 -1
- package/dist/{IconChip-DhbdGdFQ.js → IconChip-CQa7XZYc.js} +7 -5
- package/dist/{IconTooltip-B0zimd2H.js → IconTooltip-_df8M3xm.js} +1 -1
- package/dist/{Input-Cg9DF62r.js → Input-CyU4_hIC.js} +2 -2
- package/dist/{MetricBadge-RHdBP72w.js → MetricBadge-DQt_dGah.js} +1 -1
- package/dist/{Notification-CphK7AAm.js → Notification-BlSPJhtZ.js} +1 -1
- package/dist/{NumberFieldContent-D8cXeyO4.js → NumberFieldContent-Z3VxGu_6.js} +3 -3
- package/dist/PagerDots-CYlqVFd4.js +196 -0
- package/dist/PaperBackdrop-DYWgrnh8.js +42 -0
- package/dist/{PopoverContent-DL7E6vJP.js → PopoverContent-BuKyHZSz.js} +2 -2
- package/dist/{Progress-CnqB7gLm.js → Progress-C9SsdwIZ.js} +1 -1
- package/dist/{ScrollingText-CTZbA_cG.js → ScrollingText-DY3W1Jfh.js} +2 -2
- package/dist/{SelectScrollDownButton-DAKCBEdW.js → SelectScrollDownButton-3mFHX_R-.js} +15 -12
- package/dist/{Switch-B8RscmRu.js → Switch-uf-UKPA2.js} +1 -1
- package/dist/{Toaster-D9qIHjBI.js → Toaster-ozrsR4mP.js} +1 -1
- package/dist/{ToggleGroupItem-BLtr3TJq.js → ToggleGroupItem-BpzaVzNm.js} +4 -4
- package/dist/{TooltipProvider-BJ_Y5EGX.js → TooltipProvider-QQVM_80r.js} +1 -1
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +1 -0
- package/dist/api/types-extra.d.ts +3 -1
- package/dist/api.js +2 -2
- package/dist/aurora.js +163 -131
- package/dist/badge-Bt14yURi.js +72 -0
- package/dist/badge.js +1 -1
- package/dist/border-progress.js +1 -1
- package/dist/button-D1W9PrzI.js +130 -0
- package/dist/button.js +1 -1
- package/dist/canvas.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.js +227 -98
- package/dist/chipVariants-BJQ0I2kB.js +18 -0
- package/dist/collapsible.js +1 -1
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
- package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +1 -1
- package/dist/components/custom/aurora/constants/presets.d.ts +29 -0
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
- package/dist/components/custom/aurora/index.d.ts +1 -1
- package/dist/components/custom/concentric/Concentric.vue.d.ts +15 -12
- package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +8 -3
- package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +8 -4
- package/dist/components/custom/concentric/composables/levelField.d.ts +50 -0
- package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +7 -4
- package/dist/components/custom/concentric/composables/useConcentric.d.ts +3 -3
- package/dist/components/custom/concentric/constants.d.ts +62 -41
- package/dist/components/custom/concentric/index.d.ts +2 -2
- package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +2 -2
- package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -1
- package/dist/components/custom/configurator/Configurator.vue.d.ts +23 -2
- package/dist/components/custom/configurator/index.d.ts +1 -1
- package/dist/components/custom/dock/DockDropdownTrigger.vue.d.ts +4 -3
- package/dist/components/custom/dock/DockIconButton.vue.d.ts +10 -0
- package/dist/components/custom/dock/DockPopoverTrigger.vue.d.ts +19 -0
- package/dist/components/custom/dock/DockStack.vue.d.ts +35 -22
- package/dist/components/custom/dock/GlassDock.vue.d.ts +19 -3
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +18 -32
- package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +76 -145
- package/dist/components/custom/dock/composables/index.d.ts +1 -0
- package/dist/components/custom/dock/composables/railProjection.d.ts +45 -0
- package/dist/components/custom/dock/composables/useDockContextSilhouette.d.ts +192 -0
- package/dist/components/custom/dock/composables/useDockFission.d.ts +158 -0
- package/dist/components/custom/dock/composables/useDockItemDrag.d.ts +18 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +38 -0
- package/dist/components/custom/dock/constants.d.ts +14 -3
- package/dist/components/custom/dock/index.d.ts +3 -0
- package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +21 -0
- package/dist/components/custom/dot-flow-field/composables/flowGLProgram.d.ts +8 -0
- package/dist/components/custom/dot-flow-field/composables/flowSetupGL.d.ts +9 -0
- package/dist/components/custom/dot-flow-field/composables/flowSetupGLFlow.d.ts +12 -0
- package/dist/components/custom/dot-flow-field/composables/flowSetupWGPU.d.ts +7 -0
- package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +28 -2
- package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -17
- package/dist/components/custom/dot-flow-field/constants.d.ts +51 -0
- package/dist/components/custom/dot-flow-field/index.d.ts +1 -1
- package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -1
- package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +29 -0
- package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +2 -1
- package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +10 -1
- package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +7 -0
- package/dist/components/custom/dot-matrix/constants.d.ts +14 -0
- package/dist/components/custom/dot-matrix/index.d.ts +1 -1
- package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +2 -2
- package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -1
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +4 -0
- package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +9 -0
- package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +11 -0
- package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +16 -1
- package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +22 -1
- package/dist/components/custom/fourier-field/constants.d.ts +53 -0
- package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +1 -1
- package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -1
- package/dist/components/custom/goo-blob/composables/easing.d.ts +1 -0
- package/dist/components/custom/goo-blob/composables/useBlobSatellites.d.ts +1 -0
- package/dist/components/custom/goo-blob/constants.d.ts +26 -1
- package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -1
- package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -1
- package/dist/components/custom/goo-blob/types.d.ts +50 -1
- package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +32 -3
- package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +14 -4
- package/dist/components/custom/goo-dot-matrix/constants.d.ts +55 -16
- package/dist/components/custom/goo-dot-matrix/index.d.ts +1 -1
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +2 -0
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +1 -0
- package/dist/components/custom/goo-filter/GooFilter.vue.d.ts +22 -0
- package/dist/components/custom/goo-filter/index.d.ts +1 -0
- package/dist/components/custom/handmark/brush.d.ts +17 -17
- package/dist/components/custom/handmark/constants.d.ts +28 -8
- package/dist/components/custom/handmark/geometry.d.ts +34 -1
- package/dist/components/custom/handmark/index.d.ts +1 -1
- package/dist/components/custom/icon-chip/types.d.ts +10 -0
- package/dist/components/custom/paper-backdrop/PaperBackdrop.vue.d.ts +18 -0
- package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +44 -29
- package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +2 -0
- package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +3 -1
- package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +2 -2
- package/dist/components/custom/paper-grid/constants.d.ts +44 -6
- package/dist/components/custom/paper-grid/index.d.ts +2 -2
- package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +1 -1
- package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -1
- package/dist/components/custom/selectable-chip/chipVariants.d.ts +39 -0
- package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +12 -20
- package/dist/components/custom/tabs/constants.d.ts +16 -8
- package/dist/components/custom/timeline/ScrubberTimeline.vue.d.ts +16 -0
- package/dist/components/custom/timeline/geometry.d.ts +0 -8
- package/dist/components/custom/toggle-chip/index.d.ts +15 -4
- package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +12 -10
- package/dist/components/ui/_shared/useSurfaceAxis.d.ts +17 -3
- package/dist/components/ui/badge/Badge.vue.d.ts +14 -0
- package/dist/components/ui/badge/index.d.ts +1 -0
- package/dist/components/ui/button/Button.vue.d.ts +1 -0
- package/dist/components/ui/card/Card.vue.d.ts +1 -1
- package/dist/components/ui/card/ScrollCard.vue.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselContent.vue.d.ts +2 -4
- package/dist/components/ui/dialog/DialogContent.vue.d.ts +9 -0
- package/dist/components/ui/drawer/Drawer.vue.d.ts +33 -14
- package/dist/components/ui/drawer/constants.d.ts +8 -6
- package/dist/components/ui/drawer/index.d.ts +12 -2
- package/dist/components/ui/select/SelectContent.vue.d.ts +9 -0
- package/dist/components/ui/slider/Slider.vue.d.ts +9 -0
- package/dist/composables/dom/index.d.ts +1 -0
- package/dist/composables/dom/useDragVelocity.d.ts +46 -0
- package/dist/composables/glass/wave/index.d.ts +4 -0
- package/dist/composables/glass/wave/waveField.d.ts +115 -0
- package/dist/composables/glass/wave/waveField.glsl.d.ts +1 -0
- package/dist/composables/glass/wave/waveField.wgsl.d.ts +1 -0
- package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +95 -2
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +40 -2
- package/dist/composables/glass/webgpu/index.d.ts +1 -0
- package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +37 -0
- package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +49 -2
- package/dist/composables/glass/webgpu/webgpuDevice.d.ts +1 -1
- package/dist/composables/motion/core/index.d.ts +4 -0
- package/dist/composables/motion/core/useHaptic.d.ts +48 -0
- package/dist/composables/motion/core/writeVelocityWeight.d.ts +31 -0
- package/dist/composables/motion/index.d.ts +2 -0
- package/dist/composables/motion/springPresets.d.ts +16 -17
- package/dist/composables/motion/suite.d.ts +2 -2
- package/dist/composables/motion/useBloomUp.d.ts +97 -0
- package/dist/composables/motion/useCelebrationBurst.d.ts +50 -0
- package/dist/composables/motion/useDockCtaReceive.d.ts +10 -28
- package/dist/composables/motion/useGooMorph.d.ts +72 -0
- package/dist/composables/motion/useLiquidFlex.d.ts +18 -0
- package/dist/composables/motion/useLiquidMorph.d.ts +108 -0
- package/dist/composables/motion/useLiquidPress.d.ts +12 -0
- package/dist/composables/motion/useLiquidReveal.d.ts +7 -4
- package/dist/composables/motion/useMorphField.d.ts +157 -0
- package/dist/composables/motion/useScrollPin.d.ts +49 -0
- package/dist/composables/motion/useScrollScene.d.ts +67 -0
- package/dist/concentric.js +532 -563
- package/dist/configurator.js +2 -2
- package/dist/confirm-dialog.js +3 -3
- package/dist/constellation.js +4 -4
- package/dist/context-menu.js +2 -2
- package/dist/controls.js +2 -2
- package/dist/createCanvasLifecycle-CuCrGRfq.js +173 -0
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/deck.js +1 -1
- package/dist/dialog.js +3 -3
- package/dist/dock.js +1163 -618
- package/dist/dockContext-gFVS2gMg.js +18 -0
- package/dist/dom.js +7 -6
- package/dist/dot-flow-field.js +1114 -523
- package/dist/dot-matrix.js +348 -204
- package/dist/drawer.js +106 -96
- package/dist/{dropdown-menu-aJmV5SqE.js → dropdown-menu-CCfcCQ68.js} +3 -3
- package/dist/dropdown-menu.js +1 -1
- package/dist/easing.js +3 -3
- package/dist/expandable-container.js +2 -2
- package/dist/fading-scroll.js +1 -1
- package/dist/forms.js +6 -6
- package/dist/fourier-field.js +441 -197
- package/dist/fourier-math.js +1 -1
- package/dist/glass-panel.js +2 -2
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +139 -135
- package/dist/goo-blob.js +11 -9
- package/dist/goo-dot-matrix.js +418 -198
- package/dist/handmark.js +137 -94
- 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.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/instrument-chassis.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +7 -7
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +1 -1
- package/dist/metric-stack.js +1 -1
- package/dist/motion-core.js +42 -39
- package/dist/motion-curves.js +20 -14
- package/dist/motion.js +226 -26
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/pager-dots.js +1 -1
- package/dist/paper-backdrop.js +1 -1
- package/dist/paper-grid.js +315 -342
- package/dist/paperGrid-CXCSMbZ1.js +191 -0
- package/dist/popover.js +1 -1
- package/dist/{presets-CvOUqtdY.js → presets-QvYgnFIZ.js} +13 -12
- package/dist/progress.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +2 -2
- package/dist/{resolveCanvasColor-yPyIpJt9.js → resolveCanvasColor-DsSJk06I.js} +5 -5
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +7 -7
- package/dist/select.js +3 -3
- package/dist/selectable-chip.js +18 -35
- package/dist/separator.js +1 -1
- package/dist/{sheet-B2flBfLH.js → sheet-DUCIoOe0.js} +3 -3
- package/dist/sheet.js +1 -1
- package/dist/sidebar.js +1 -1
- package/dist/slider-CcICPe3u.js +149 -0
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/{spectrum-walk-BVzA7Biz.js → spectrum-walk-cBNSx_zm.js} +1 -1
- package/dist/springPresets-DfoQ6XRY.js +64 -0
- package/dist/stacked-icons.js +54 -39
- package/dist/styles/cards.css +202 -2
- package/dist/styles/components.css +1 -3
- package/dist/styles/configurator.css +172 -7
- package/dist/styles/critical-partition.mjs +35 -2
- package/dist/styles/deferred.css +2 -0
- package/dist/styles/dock/adaptive-legibility.css +119 -0
- package/dist/styles/dock/density.css +18 -10
- package/dist/styles/dock/fission-bridge.css +552 -0
- package/dist/styles/dock/layers.css +88 -124
- package/dist/styles/dock/morph-bridge.css +15 -2
- package/dist/styles/dock/morph.css +45 -114
- package/dist/styles/dock/shape.css +137 -11
- package/dist/styles/dock/shell.css +1 -3
- package/dist/styles/dock/stack-rail.css +95 -7
- package/dist/styles/dock-controls/icon-button.css +34 -2
- package/dist/styles/dock-controls/triggers.css +23 -1
- package/dist/styles/dock-controls.css +18 -0
- package/dist/styles/dock.css +16 -1
- package/dist/styles/drawer.css +166 -0
- package/dist/styles/glass/glass-atom.css +244 -0
- package/dist/styles/glass/glass-capsule.css +143 -0
- package/dist/styles/glass/glass-chip.css +215 -0
- package/dist/styles/glass/liquid-enter.css +252 -0
- package/dist/styles/glass/liquid-morph.css +850 -0
- package/dist/styles/glass/material.css +70 -1
- package/dist/styles/glass/reveal.css +22 -2
- package/dist/styles/glass/rim.css +13 -1
- package/dist/styles/glass/surfaces.css +18 -8
- package/dist/styles/glass.css +11 -0
- package/dist/styles/icon-chip.css +45 -0
- package/dist/styles/index.css +11 -0
- package/dist/styles/jubilance.css +65 -0
- package/dist/styles/motion/morph-field.css +229 -0
- package/dist/styles/paper.css +230 -14
- package/dist/styles/scroll-choreography.css +135 -78
- package/dist/styles/segmented-tabs.css +85 -51
- package/dist/styles/select.css +151 -0
- package/dist/styles/tokens/color-radius.css +1 -1
- package/dist/styles/tokens/dark-arm.css +57 -8
- package/dist/styles/tokens/glass-deep.css +8 -4
- package/dist/styles/tokens/glass-fx.css +80 -2
- package/dist/styles/tokens/glass.css +140 -8
- package/dist/styles/tokens/light-dark.css +2 -2
- package/dist/styles/tokens/property-regs.css +144 -0
- package/dist/styles/tokens/scale-paper.css +20 -8
- package/dist/styles/tokens/scheme-motion.css +92 -157
- package/dist/styles/tokens/scheme-spring.css +239 -0
- package/dist/styles/tokens/scroll-tokens.css +15 -15
- package/dist/styles/tokens/shadow.css +73 -13
- package/dist/styles/tokens.css +9 -2
- package/dist/styles/utilities/btn.css +70 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +198 -181
- package/dist/timeline.js +241 -206
- package/dist/toast.js +1 -1
- package/dist/toggle-chip.js +14 -41
- package/dist/toggle-group.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{uniformBridgeWGPU-CtAKl45L.js → uniformBridgeWGPU-BCse1SHU.js} +191 -127
- package/dist/{useAnimatedNumber-CLrxicG9.js → useAnimatedNumber-BntskVdQ.js} +1 -1
- package/dist/{useConfiguratorState-4xblKfwd.js → useConfiguratorState-22BcULzF.js} +37 -35
- package/dist/useDockCtaReceive-DX7RDb6_.js +88 -0
- package/dist/{useDragMorph-BUgAC-zK.js → useDragMorph-DGLSewwB.js} +2 -2
- package/dist/useDragVelocity-CjcfX3dA.js +57 -0
- package/dist/useGooMorph-Cs13NgYL.js +104 -0
- package/dist/useGpuSubstrate-Ceet70xq.js +347 -0
- package/dist/{useViewTransition-CUI1nAgn.js → useHaptic-CPz5BT9I.js} +40 -1
- package/dist/{useLiquidFlex-UmA6LMZu.js → useLiquidFlex-Cc6PjVJD.js} +8 -3
- package/dist/useLiquidPress-CtOQ8Z0_.js +43 -0
- package/dist/useMorphField-ogBM7ubT.js +141 -0
- package/dist/{useScrollChrome-D66AVP7C.js → useScrollChrome-JuImi1DM.js} +2 -2
- package/dist/{useSpringMount-BWDnKIwh.js → useSpringMount-DFxtzmkR.js} +1 -1
- package/dist/{useSpringPress-B1-Czp-V.js → useSpringPress-VM9RgVq3.js} +1 -1
- package/dist/{useSurfaceAxis-g0NloYEF.js → useSurfaceAxis-Ci7Dnaw2.js} +1 -1
- package/dist/{useTouchGate-CBZTD4SD.js → useTouchGate-B1Lf9XqN.js} +1 -1
- package/dist/virtual.js +1 -1
- package/dist/watercolor-dot.js +16 -26
- package/dist/writeVelocityWeight-Bh83xZfs.js +19 -0
- package/package.json +14 -3
- package/src/styles/cards.css +202 -2
- package/src/styles/configurator.css +172 -7
- package/src/styles/critical-partition.mjs +35 -2
- package/src/styles/dock/adaptive-legibility.css +119 -0
- package/src/styles/dock/density.css +18 -10
- package/src/styles/dock/fission-bridge.css +552 -0
- package/src/styles/dock/layers.css +88 -124
- package/src/styles/dock/morph-bridge.css +15 -2
- package/src/styles/dock/morph.css +45 -114
- package/src/styles/dock/shape.css +137 -11
- package/src/styles/dock/shell.css +1 -3
- package/src/styles/dock/stack-rail.css +95 -7
- package/src/styles/dock-controls/icon-button.css +34 -2
- package/src/styles/dock-controls/triggers.css +23 -1
- package/src/styles/dock-controls.css +18 -0
- package/src/styles/dock.css +16 -1
- package/src/styles/drawer.css +164 -0
- package/src/styles/glass/glass-atom.css +244 -0
- package/src/styles/glass/glass-capsule.css +143 -0
- package/src/styles/glass/glass-chip.css +215 -0
- package/src/styles/glass/liquid-enter.css +252 -0
- package/src/styles/glass/liquid-morph.css +850 -0
- package/src/styles/glass/material.css +70 -1
- package/src/styles/glass/reveal.css +22 -2
- package/src/styles/glass/rim.css +13 -1
- package/src/styles/glass/surfaces.css +18 -8
- package/src/styles/glass.css +11 -0
- package/src/styles/icon-chip.css +45 -0
- package/src/styles/index.css +11 -0
- package/src/styles/jubilance.css +65 -0
- package/src/styles/motion/morph-field.css +229 -0
- package/src/styles/paper.css +230 -14
- package/src/styles/scroll-choreography.css +135 -78
- package/src/styles/segmented-tabs.css +85 -47
- package/src/styles/select.css +151 -0
- package/src/styles/tokens/color-radius.css +1 -1
- package/src/styles/tokens/dark-arm.css +57 -8
- package/src/styles/tokens/glass-deep.css +8 -4
- package/src/styles/tokens/glass-fx.css +80 -2
- package/src/styles/tokens/glass.css +140 -8
- package/src/styles/tokens/light-dark.css +2 -2
- package/src/styles/tokens/property-regs.css +144 -0
- package/src/styles/tokens/scale-paper.css +20 -8
- package/src/styles/tokens/scheme-motion.css +92 -157
- package/src/styles/tokens/scheme-spring.css +239 -0
- package/src/styles/tokens/scroll-tokens.css +15 -15
- package/src/styles/tokens/shadow.css +73 -13
- package/src/styles/tokens.css +9 -2
- package/src/styles/utilities/btn.css +70 -0
- package/dist/DialogContent-6JtTB5x2.js +0 -106
- package/dist/PagerDots-Cjx96la-.js +0 -98
- package/dist/PaperBackdrop-CqwjnfLv.js +0 -31
- package/dist/badge-D9XWW4GT.js +0 -53
- package/dist/button-5dY1Dvhd.js +0 -125
- package/dist/components/custom/concentric/composables/ringField.d.ts +0 -85
- package/dist/createCanvasLifecycle-Gh45Ce-p.js +0 -93
- package/dist/dockContext-BNfyPLe9.js +0 -17
- package/dist/slider-2A0rPn79.js +0 -142
- package/dist/springPresets-Ce7OYCm9.js +0 -46
- package/dist/useDockCtaReceive-DfFkmgL1.js +0 -82
- package/dist/useGpuSubstrate-4pTcp6mX.js +0 -294
- package/dist/useLiquidPress-BooG97RY.js +0 -39
- /package/dist/{CollapsibleContent-68dEXIAl.js → CollapsibleContent-D7UNsXQr.js} +0 -0
- /package/dist/{DialogFooter-9phqcRIS.js → DialogFooter-DoLy0ewI.js} +0 -0
- /package/dist/{InstrumentChassis-CxsHSyMj.js → InstrumentChassis-UUJX0-mW.js} +0 -0
- /package/dist/{Label-C2ejNWeC.js → Label-B_HPqi_q.js} +0 -0
- /package/dist/{ModalOverlay-D1VrWyoi.js → ModalOverlay-DfAf7o15.js} +0 -0
- /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-Dcczq44n.js} +0 -0
- /package/dist/{SelectSeparator-C2UGOkXF.js → SelectSeparator-CNRGG7Ew.js} +0 -0
- /package/dist/{Separator-DQcwC2TR.js → Separator-Cf9-JFgi.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
- /package/dist/{color-Cs0-oxYL.js → color-B9jZdhJX.js} +0 -0
- /package/dist/{compile-nZ1xVYTp.js → compile-INR_tPk_.js} +0 -0
- /package/dist/{constants--C2DkLW8.js → constants-BWj7DkMn.js} +0 -0
- /package/dist/{createContext-CpBNTRMI.js → createContext-Cd23P9j0.js} +0 -0
- /package/dist/{dotMatrixField-D_x9_1qq.js → dotMatrixField-CRO0ZFk4.js} +0 -0
- /package/dist/{flow.glsl-B2P7e0MT.js → flow.glsl-DqEGRpl4.js} +0 -0
- /package/dist/{math-Eb0w3LqU.js → math-5RcIgCB4.js} +0 -0
- /package/dist/{menuItemVariants-D8VNHq22.js → menuItemVariants-DAXquKja.js} +0 -0
- /package/dist/{prng-B-d9eYX8.js → prng-B5tIXTtj.js} +0 -0
- /package/dist/{procedural-color.wgsl-m7Zgv35j.js → procedural-color.wgsl-C1Y5PkM6.js} +0 -0
- /package/dist/{scrollReader-DI1NWxUw.js → scrollReader-rc3Ns_NM.js} +0 -0
- /package/dist/{useControlSize-SH1UmJCi.js → useControlSize-DAZ062x7.js} +0 -0
- /package/dist/{useFuzzySearch-DIhcYtcw.js → useFuzzySearch-0fTYOhS4.js} +0 -0
- /package/dist/{useGlobalDark-CmjB9E32.js → useGlobalDark-B4HO9LXG.js} +0 -0
- /package/dist/{useIntersectionPause-Dbozzjgm.js → useIntersectionPause-DO8Vl4gs.js} +0 -0
- /package/dist/{useInterval-CNdua40W.js → useInterval-BVUI-sez.js} +0 -0
- /package/dist/{useKeyboardShortcuts-BPRp33Im.js → useKeyboardShortcuts-BEut54Tk.js} +0 -0
- /package/dist/{usePointerVelocityField-QLsy3_kv.js → usePointerVelocityField-BrkqZFhj.js} +0 -0
- /package/dist/{useResizeObserver-Bpoi7tRE.js → useResizeObserver-DdEn3v2f.js} +0 -0
- /package/dist/{useResolveTokenColor-vAylyR0x.js → useResolveTokenColor-ChOnCckA.js} +0 -0
- /package/dist/{useScrollProgress-c3yxmH6a.js → useScrollProgress-A0M6qRl7.js} +0 -0
- /package/dist/{useSortable-BVqlJRBR.js → useSortable-DQV_UNDw.js} +0 -0
- /package/dist/{useTextHighlight-NmBM5V_4.js → useTextHighlight-Bma3UlKA.js} +0 -0
- /package/dist/{useTimer-BHJOKr35.js → useTimer-BBLGPXR8.js} +0 -0
- /package/dist/{useUserInvalidAria-y5namzeE.js → useUserInvalidAria-EmmwWPOl.js} +0 -0
- /package/dist/{useViewportReady-anbac3m6.js → useViewportReady-C9pYnn7K.js} +0 -0
- /package/dist/{vReveal-D9k0jADx.js → vReveal-CT1KtwZA.js} +0 -0
|
@@ -1,155 +1,86 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Ref } from "vue";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* `dockMorphContext.ts` to hold the no-god-module bound (the aurora→useAurora /
|
|
5
|
-
* goo-blob→useMetaballRenderer / fourier-field→useFourierField colocation pattern).
|
|
6
|
-
* The orchestrator stays the morph DRIVER (it owns the `SpringProgress`, the targets
|
|
7
|
-
* Set, the per-frame `--dock-morph-t` write); these are the PURE geometry + the
|
|
8
|
-
* reserved-footprint measure + the SYNCHRONOUS PRM seat it composes. `DOCK_SPRING` is
|
|
9
|
-
* byte-fenced — it lives in `../constants`, never touched here.
|
|
3
|
+
* BD.W-DOCK-CORE (the width-seizure cure) — the dock morph SIZE measure.
|
|
10
4
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
5
|
+
* THE BUG THIS RETIRES (the year-old seizure): the prior pipeline measured a
|
|
6
|
+
* per-swap `from/to` FLIP ratio and drove the visible size by
|
|
7
|
+
* `--dock-root-scale = max(ratio + (1−ratio)·t, 0.06)` — a FLOOR with NO CEILING.
|
|
8
|
+
* When the morph target measured small (a degenerate `to` racing the content
|
|
9
|
+
* layout), `ratio = from/max(to,1px)` ran to ~56 → `scaleX(56)` = a ~2451px
|
|
10
|
+
* detonation on collapse / an inversion at the spring overshoot peak. The
|
|
11
|
+
* `transform-origin: center` kept the centroid clean (`cxRange 0`), which is
|
|
12
|
+
* exactly why every prior judge measuring the centroid PASSED while the WIDTH
|
|
13
|
+
* detonated. The whole measure-and-arm FLIP machinery
|
|
14
|
+
* (`measureAndArmMorph`/`seatTargetSync`/`rebaseSiblingSpans`/
|
|
15
|
+
* `forceNestedMaxContent`/`nestedTargetsWithin`/`measureTo`/`armRootMorphSpan`/
|
|
16
|
+
* `clearRootMorphSpan`/`morphMinFloorPx`/the per-target generation gating) is
|
|
17
|
+
* DELETED — clean break, no legacy, no floor that masks a bad measurement.
|
|
18
|
+
*
|
|
19
|
+
* THE CURE — a ratio-FREE measure-ONCE convex blend. The dock measures its two
|
|
20
|
+
* KNOWN footprints ONCE per content change (a `ResizeObserver`, NOT a per-swap
|
|
21
|
+
* rAF race): `--dock-expanded-px` (the expanded content width, read behind the
|
|
22
|
+
* clip aperture) and `--dock-collapsed-px` (the collapsed summary box). The
|
|
23
|
+
* visible size is the convex blend `--dock-live = collapsed + (expanded −
|
|
24
|
+
* collapsed)·--dock-morph-t` and `--dock-size-scale = --dock-live / expanded`
|
|
25
|
+
* (layers.css). A convex blend of two POSITIVE endpoints can NEVER exceed the
|
|
26
|
+
* larger nor invert below the smaller — BOUNDED by construction, no ratio, no
|
|
27
|
+
* `scaleX` explosion, regardless of spring overshoot (the `clamp(0,t,1)` caps the
|
|
28
|
+
* size term; the >1 excursion routes to the orthogonal punch channel).
|
|
29
|
+
*
|
|
30
|
+
* THE FRESHNESS GUARD (challenge 3·R2): a measure-ONCE endpoint can still be read
|
|
31
|
+
* stale — before `fonts.ready`, before async icon SVGs lay out, on a
|
|
32
|
+
* `display:none`→0 route swap, or on a `content-visibility:auto` parent (the RO
|
|
33
|
+
* fires 0). A 0 expanded would give `collapsed/0 = ∞`. So FLOOR `--dock-expanded-px`
|
|
34
|
+
* at `max(measured, --dock-collapsed-px)` and re-measure on `fonts.ready` + the
|
|
35
|
+
* FIRST non-zero RO callback + visibility-enter. This is NOT the deleted magic
|
|
36
|
+
* floor (which masked a per-frame measurement); it is a one-shot endpoint
|
|
37
|
+
* sanity bound on a value that is otherwise stable across the whole morph.
|
|
38
|
+
*
|
|
39
|
+
* `DOCK_SPRING` is byte-fenced — it lives in `../constants`, never touched here.
|
|
14
40
|
*/
|
|
15
|
-
/** The minimal morph-target shape the measure/seat helpers read (the orchestrator's
|
|
16
|
-
* full `MorphTarget` structurally satisfies it). */
|
|
17
|
-
export interface MorphMeasureTarget {
|
|
18
|
-
containerEl: Ref<HTMLElement | null>;
|
|
19
|
-
axis: Ref<"horizontal" | "vertical">;
|
|
20
|
-
/** PER-TARGET swap generation — the seat gates its pipeline on its own id. */
|
|
21
|
-
txId: number;
|
|
22
|
-
}
|
|
23
41
|
export declare function dimOf(axis: "horizontal" | "vertical"): "width" | "height";
|
|
24
|
-
export declare function morphAxisProp(axis: "horizontal" | "vertical"): "inline-size" | "block-size";
|
|
25
42
|
export declare function getSize(el: HTMLElement, axis: "horizontal" | "vertical"): number;
|
|
26
|
-
export
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
* BA-VJS-1 — force ONE nested target to its own-axis `max-content` (clearing its
|
|
48
|
-
* reserved `--dock-morph-to` footprint so it sizes to content), and return a closure
|
|
49
|
-
* that RESTORES its exact prior inline state. The restore re-writes the precise
|
|
50
|
-
* prior `inline-size`/`block-size` inline value (or removes it if there was none),
|
|
51
|
-
* so the inner's in-flight pin is byte-identical after the outer's measurement —
|
|
52
|
-
* the inner target's own spring/pin pipeline is never disturbed.
|
|
53
|
-
*/
|
|
54
|
-
export declare function forceNestedMaxContent(n: MorphMeasureTarget): () => void;
|
|
55
|
-
/**
|
|
56
|
-
* BB.W-DOCK-MORPH-FAMILY (c) — measure the true `to` for ONE target with the
|
|
57
|
-
* morph axis forced to `max-content` (the same circular-measure escape the rAF
|
|
58
|
-
* path uses), composing the BA-VJS-1 nested-descendant `max-content` ordering so
|
|
59
|
-
* a nested group reads its TRUE intrinsic span (never `to:0`). The element is at
|
|
60
|
-
* the live painted geometry on entry; this forces+reads+restores the axis. PURE
|
|
61
|
-
* measure — no spring, no pin write.
|
|
62
|
-
*/
|
|
63
|
-
export declare function measureTo(t: MorphMeasureTarget, el: HTMLElement, targets: Iterable<MorphMeasureTarget>): number;
|
|
64
|
-
/** The orchestrator settle callbacks the synchronous seat composes (it clears the
|
|
65
|
-
* morph vars + nulls the leaving layer, then parks the root/spring once no target
|
|
66
|
-
* is morphing). */
|
|
67
|
-
export interface MorphSeatCallbacks {
|
|
68
|
-
/** Settle ONE target (clear its morph vars + null its leavingLayer). */
|
|
69
|
-
settleTarget(t: MorphMeasureTarget): void;
|
|
70
|
-
/** Park the shared scalar + spring once NO target is morphing. */
|
|
71
|
-
maybeSettleRoot(): void;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* BB.W-DOCK-MORPH-FAMILY (c) — the SYNCHRONOUS PRM seat. Under
|
|
75
|
-
* `prefers-reduced-motion: reduce` there is NO morph to play, so the geometry +
|
|
76
|
-
* the scalar seat at the target in ONE step (the `useDockOrientationMorph.pin()`
|
|
77
|
-
* precedent transplanted onto the collapse/expand path): measure the true `to`
|
|
78
|
-
* (composing the BA-VJS-1 nested ordering), write the box at `to` (the
|
|
79
|
-
* reserved-footprint reads at scale 1), and set `--dock-morph-t` to the endpoint
|
|
80
|
-
* for THIS swap — then clear the morph state immediately (no rAF measure-defer,
|
|
81
|
-
* no spring, no morph window). The box NEVER paints the collapsed `from` sliver
|
|
82
|
-
* with the scalar at 1 (the P0 terminal failure). Endpoint is the per-swap
|
|
83
|
-
* incoming-ness `1` (the new pane is fully in; the directional `--dock-expand-t`
|
|
84
|
-
* resolves to the class endpoint with `[data-morphing]` cleared).
|
|
85
|
-
*/
|
|
86
|
-
export declare function seatTargetSync(t: MorphMeasureTarget, id: number, root: HTMLElement | null, targets: Iterable<MorphMeasureTarget>, cb: MorphSeatCallbacks): void;
|
|
87
|
-
/**
|
|
88
|
-
* The swap-while-morphing sibling re-base. The shared scalar resets to 0 for the
|
|
89
|
-
* new span; if SIBLING targets are mid-morph, re-base their `from` to their CURRENT
|
|
90
|
-
* painted px first, so resetting the scalar keeps them visually continuous (they
|
|
91
|
-
* interpolate fresh from where they are, toward their unchanged `to`) rather than
|
|
92
|
-
* snapping back to their old `from`. PURE over the swapping target + the target set.
|
|
93
|
-
*/
|
|
94
|
-
export declare function rebaseSiblingSpans(swapping: MorphMeasureTarget, targets: Iterable<MorphMeasureTarget>): void;
|
|
95
|
-
/**
|
|
96
|
-
* BC.W-DOCK-ROOT-MORPH — clear the ROOT box's own morph span (the `inline-size` =
|
|
97
|
-
* f(scalar) recipe in layers.css reads `--dock-root-morph-from/to`; clearing them
|
|
98
|
-
* hands the box back to the at-rest shrink-wrap once the morph settles). PURE on
|
|
99
|
-
* the root element — no orchestrator closure.
|
|
100
|
-
*/
|
|
101
|
-
export declare function clearRootMorphSpan(root: HTMLElement | null): void;
|
|
102
|
-
/**
|
|
103
|
-
* BC.W-DOCK-ROOT-MORPH — pin the ROOT box's own from→to span on the dock root.
|
|
104
|
-
*
|
|
105
|
-
* THE SNAP ROOT CAUSE: the inner `.dock-layers` reserves its SETTLED `to`
|
|
106
|
-
* footprint (`inline-size: var(--dock-morph-to)`, layers.css — the E4-frozen
|
|
107
|
-
* CDP-Layout-flat mechanism) and morphs VISUALLY via `transform: scaleX()`. A
|
|
108
|
-
* `transform` is paint-only — a parent does NOT shrink-wrap to a scaled child —
|
|
109
|
-
* so the root `.glass-dock` (display:inline-flex) shrink-wraps to the inner's
|
|
110
|
-
* RESERVED full `to` width and SNAPS to full on frame 0, while the inner's scaled
|
|
111
|
-
* box rides the spring smoothly. The gate (and the page) measure the ROOT box, so
|
|
112
|
-
* the root must ALSO ramp. The layers.css recipe reads
|
|
113
|
-
* `inline-size: calc(from + (to−from)·--dock-morph-t)` (the SAME scalar the spring
|
|
114
|
-
* glides, NO CSS transition — proof:no-layout-animation stays GREEN; a `calc()`
|
|
115
|
-
* over the registered `--dock-morph-t` is not a transition). PURE on the root.
|
|
116
|
-
*/
|
|
117
|
-
export declare function armRootMorphSpan(root: HTMLElement | null, rootFrom: number, rootTo: number): void;
|
|
118
|
-
/** The orchestrator callbacks the rAF measure-and-arm window composes — the arm
|
|
119
|
-
* step re-pins the per-target + root spans on the shared scalar. */
|
|
120
|
-
export interface MorphMeasureArmCallbacks {
|
|
121
|
-
/** Arm the per-target `--dock-morph-from/to` span + ensure the shared spring. */
|
|
122
|
-
armTarget(t: MorphMeasureTarget, id: number, fromSize: number, toSize: number): void;
|
|
43
|
+
export interface UseDockExpandedSizeOptions {
|
|
44
|
+
/** The `.glass-dock` root the `--dock-expanded-px`/`--dock-collapsed-px` write to. */
|
|
45
|
+
rootEl: Ref<HTMLElement | null>;
|
|
46
|
+
/**
|
|
47
|
+
* The content element whose intrinsic morph-axis span is observed for size
|
|
48
|
+
* changes (the active full-pane container — `.dock-layers`). Its resizes are the
|
|
49
|
+
* RO trigger; the ENDPOINTS are read off the ROOT box (content + chrome), keyed
|
|
50
|
+
* by the dock's at-rest expanded/collapsed state.
|
|
51
|
+
*/
|
|
52
|
+
contentEl: Ref<HTMLElement | null>;
|
|
53
|
+
/**
|
|
54
|
+
* The morph axis (a horizontal dock blends width; a vertical dock blends height).
|
|
55
|
+
*/
|
|
56
|
+
axis: Ref<"horizontal" | "vertical">;
|
|
57
|
+
/**
|
|
58
|
+
* Whether the dock is currently in its EXPANDED visual state (a `Ref<boolean>`).
|
|
59
|
+
* The endpoint captured at rest is keyed off this: at rest expanded → the root
|
|
60
|
+
* box is the `--dock-expanded-px` endpoint; at rest collapsed → the
|
|
61
|
+
* `--dock-collapsed-px` endpoint. (A reactive read, so a state flip re-captures.)
|
|
62
|
+
*/
|
|
63
|
+
expanded: Ref<boolean>;
|
|
123
64
|
}
|
|
124
65
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
* measurement of the now-correct shrink-wrapped to-size, then re-pin + start the
|
|
128
|
-
* spring IN THE SAME FRAME. The measurement + arm are gated on THIS target's own
|
|
129
|
-
* `txId`, so a sibling target swapping in the same tick does NOT clobber it.
|
|
130
|
-
*
|
|
131
|
-
* BA-VJS-1 — the nested-`DockLayerGroup` measure-ORDERING fix: force every OTHER
|
|
132
|
-
* registered target whose container is a DOM descendant of this outer's container
|
|
133
|
-
* to its own-axis `max-content` (clearing its pinned calc span) for the single
|
|
134
|
-
* synchronous measurement, then RESTORE its exact prior inline state, so the outer
|
|
135
|
-
* shrink-wraps around the inner's TRUE intrinsic content, not its pinned collapse.
|
|
136
|
-
*
|
|
137
|
-
* BC.W-DOCK-ROOT-MORPH — for the OUTER target, LIFT the root's own pinned span for
|
|
138
|
-
* the duration of this synchronous measure (clearing `--dock-root-morph-from/to`,
|
|
139
|
-
* which the layers.css recipe constrains the root by) so the root shrink-wraps to
|
|
140
|
-
* its TRUE expanded width, read it DIRECTLY (sidestepping the chrome-offset
|
|
141
|
-
* arithmetic + the empty-summary `inner-to:0` trap), then RESTORE the pin and
|
|
142
|
-
* arm the root from→to span so its `inline-size` ramps on the SAME scalar.
|
|
66
|
+
* BD.W-DOCK-CORE — capture the two convex-blend endpoints ONCE PER STATE off the
|
|
67
|
+
* ROOT box.
|
|
143
68
|
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
*
|
|
148
|
-
*
|
|
149
|
-
*
|
|
69
|
+
* The visible morph scales the ROOT (chrome + content), so the two blend endpoints
|
|
70
|
+
* must be the ROOT's OWN expanded/collapsed footprints — NOT the bare content span
|
|
71
|
+
* (which omits the padding/min-width chrome). The endpoints are captured at REST
|
|
72
|
+
* (when `[data-morphing]` is OFF): the dock's settled root box in its current
|
|
73
|
+
* expanded/collapsed state IS that state's endpoint. A `ResizeObserver` on the
|
|
74
|
+
* content re-captures the CURRENT state's endpoint whenever the content reflows
|
|
75
|
+
* (more controls, a font swap), so the blend stays fresh — but it never reads the
|
|
76
|
+
* box MID-MORPH (the scaled box would feed back a degenerate endpoint, the seizure's
|
|
77
|
+
* cousin). The expanded endpoint is FLOORED at `max(captured, collapsed)` — the
|
|
78
|
+
* freshness guard against a 0/degenerate read giving `collapsed/0 = ∞`.
|
|
150
79
|
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
*
|
|
80
|
+
* The collapsed endpoint starts at the resolved `--dock-morph-min` icon-square floor
|
|
81
|
+
* and is refined to the real collapsed root box the first time the dock rests
|
|
82
|
+
* collapsed; the expanded endpoint is captured the first (and every) time it rests
|
|
83
|
+
* expanded. So the FIRST morph from a freshly-mounted expanded dock already has a
|
|
84
|
+
* real expanded endpoint + a sane collapsed floor — bounded by construction.
|
|
154
85
|
*/
|
|
155
|
-
export declare function
|
|
86
|
+
export declare function useDockExpandedSize(options: UseDockExpandedSizeOptions): void;
|
|
@@ -11,3 +11,4 @@ export { provideDockContext, useDockContext, useOptionalDockContext, DOCK_CONTEX
|
|
|
11
11
|
export { provideDockLayerGroupContext, useDockLayerGroupContext, useOptionalDockLayerGroupContext, DOCK_LAYER_GROUP_KEY, type DockLayerDescriptor, type DockLayerGroupContext, } from "./dockLayerContext";
|
|
12
12
|
export { useDockMorphOrchestrator, provideDockMorphContext, useOptionalDockMorphContext, DOCK_MORPH_KEY, type DockMorphContext, type DockMorphGroupRegistration, type DockMorphGroupHandle, type UseDockMorphOrchestratorOptions, type UseDockMorphOrchestratorReturn, } from "./dockMorphContext";
|
|
13
13
|
export { useDockOrientationMorph, type DockMorphOrientation, type UseDockOrientationMorphOptions, type UseDockOrientationMorphReturn, } from "./useDockOrientationMorph";
|
|
14
|
+
export { useDockFission, DOCK_SPLIT_SIGNATURES, type DockSplitContext, type DockSplitVector, type DockSplitSquishPeak, type DockSplitSignature, type DockFissionPieceRegistration, type DockFissionPieceHandle, type UseDockFissionOptions, type UseDockFissionReturn, } from "./useDockFission";
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** The signed shortest-arc offset on a wrap ring (the "negative-infinity modulus" — a
|
|
2
|
+
* naive `raw % N` breaks the backward wrap). Wraps to `[-N/2, N/2)`. */
|
|
3
|
+
export declare function ringOffset(raw: number, n: number): number;
|
|
4
|
+
/** The φ-tiered slot SPAN to a given absolute slot-distance — the chosen→neighbour gap
|
|
5
|
+
* is wider than the neighbour→far gap (the recession compresses as items recede, the
|
|
6
|
+
* depth read). The tier ratio is EXPRESSED in the accumulation, never a flat resolved
|
|
7
|
+
* rebake (the W-CARD-PAD φ-ladder fence). */
|
|
8
|
+
export declare function tieredSpan(adist: number, base: number, ratio: number): number;
|
|
9
|
+
/** The geometry knobs for the facet carousel — the φ-tier spacing + the fade model. */
|
|
10
|
+
export interface RailProjectionGeometry {
|
|
11
|
+
/** The active→neighbour base slot gap, in px (the tier-0 spacing). Default 44. */
|
|
12
|
+
slotSpacing?: number;
|
|
13
|
+
/** The φ tier ratio — each receding tier compresses by this. Default 1.618. */
|
|
14
|
+
tierRatio?: number;
|
|
15
|
+
/** The slot-distance at which the fade begins (active + immediate neighbour stay
|
|
16
|
+
* full). Default 0.5. */
|
|
17
|
+
fadeStart?: number;
|
|
18
|
+
/** The slot-span the fade runs over. Default 2.5. */
|
|
19
|
+
fadeRange?: number;
|
|
20
|
+
/** The far floor alpha. Default 0. */
|
|
21
|
+
fadeMinAlpha?: number;
|
|
22
|
+
/** The per-slot scale recession (the depth read). Default 0.06. */
|
|
23
|
+
scaleStep?: number;
|
|
24
|
+
/** The max slots the scale recession clamps at. Default 4. */
|
|
25
|
+
scaleClampSlots?: number;
|
|
26
|
+
}
|
|
27
|
+
/** One projected facet — the compositor-only transform tier for the ring item. */
|
|
28
|
+
export interface RailFacetProjection {
|
|
29
|
+
/** The stable ring index `0..count-1` (the `v-for` key). */
|
|
30
|
+
index: number;
|
|
31
|
+
/** The signed shortest-arc slot offset from the active facet. */
|
|
32
|
+
offset: number;
|
|
33
|
+
/** The px translate along the rail's main axis. */
|
|
34
|
+
translate: number;
|
|
35
|
+
/** The faded alpha (0..1). */
|
|
36
|
+
opacity: number;
|
|
37
|
+
/** The recession scale (≤1). */
|
|
38
|
+
scale: number;
|
|
39
|
+
/** Whether this is the active facet (offset 0). */
|
|
40
|
+
active: boolean;
|
|
41
|
+
}
|
|
42
|
+
/** Project the facet ring around the `active` index, fanned by `expand` (0 collapsed → 1
|
|
43
|
+
* fully fanned). Returns the virtualized WINDOW of `±ceil(fadeRange+1)` items, each with
|
|
44
|
+
* its compositor-only `{ translate, opacity, scale }`. PURE — no state, no measure. */
|
|
45
|
+
export declare function projectFacets(count: number, active: number, expand: number, geometry?: RailProjectionGeometry): RailFacetProjection[];
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { type MorphRect } from "@mkbabb/keyframes.js";
|
|
2
|
+
import { type Ref } from "vue";
|
|
3
|
+
import { type SpringPresetName } from "../../../../composables/motion/springPresets";
|
|
4
|
+
/** The dock orientation axis (the `dim`-idiom source — slot geometry derives from it). */
|
|
5
|
+
export type SilhouetteOrientation = "horizontal" | "vertical";
|
|
6
|
+
/** The four named silhouette kinds (the descriptor map's contract). */
|
|
7
|
+
export type DockSilhouetteKind = "bar" | "bar+pill" | "split" | "search";
|
|
8
|
+
/**
|
|
9
|
+
* The silhouette spring register — a subset of the named `SPRING_PRESETS` rows matching
|
|
10
|
+
* the `useDockCtaReceive`/`useLiquidReveal` register so every dock morph reads as ONE
|
|
11
|
+
* spring family. `dock` is the default (the dock's own settle clock).
|
|
12
|
+
*/
|
|
13
|
+
export type SilhouettePreset = Extract<SpringPresetName, "dock" | "snappy" | "bouncy">;
|
|
14
|
+
/**
|
|
15
|
+
* One named SLOT inside a silhouette — a position keyed by `controlId`. The geometry is
|
|
16
|
+
* ORIENTATION-DERIVED: `main` is the offset along the dock's main axis (the row position
|
|
17
|
+
* horizontal / the column position vertical), `cross` the cross-axis offset, `size` the
|
|
18
|
+
* control's extent. The orchestrator resolves these into a concrete `MorphRect` off the
|
|
19
|
+
* orientation + the dock's measured origin (the `dim`-idiom — never a hardcoded
|
|
20
|
+
* `inline-size`/`block-size` literal, so vertical is the SAME data with `orientation`
|
|
21
|
+
* flipped).
|
|
22
|
+
*/
|
|
23
|
+
export interface SilhouetteSlot {
|
|
24
|
+
/** The control this slot positions (the diff key — present-in-both → FLIP). */
|
|
25
|
+
controlId: string;
|
|
26
|
+
/** Offset along the dock's MAIN axis (px from the dock origin). */
|
|
27
|
+
main: number;
|
|
28
|
+
/** Offset along the CROSS axis (px from the dock origin). */
|
|
29
|
+
cross: number;
|
|
30
|
+
/** The control's main-axis extent (px). */
|
|
31
|
+
size: number;
|
|
32
|
+
/** The control's cross-axis extent (px; defaults to `size` for a square control). */
|
|
33
|
+
thickness?: number;
|
|
34
|
+
/**
|
|
35
|
+
* FUSION marker (the `bar+pill` headline): when true, this slot's `to`-rect is the
|
|
36
|
+
* bar's TOP CROWN and the orchestrator drives `--silhouette-fuse-t` so the slotted
|
|
37
|
+
* control (the now-playing pill) DOCKS DOWN and MELDS into the bar as ONE plate. A
|
|
38
|
+
* `bar+pill` descriptor with NO `fuse: true` slot is a pill-ABOVE-bar literal (the
|
|
39
|
+
* C3 anti-evasion — the gate reds it).
|
|
40
|
+
*/
|
|
41
|
+
fuse?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* One declarative silhouette descriptor — a context's whole geometry as DATA (the
|
|
45
|
+
* `DockSectionDescriptor` precedent: data, not code paths). The orchestrator reads the
|
|
46
|
+
* MAP; there is NO per-context hardcoded silhouette literal (the gate's C1 anti-evasion
|
|
47
|
+
* floor).
|
|
48
|
+
*/
|
|
49
|
+
export interface DockSilhouetteDescriptor {
|
|
50
|
+
/** Stable identifier — the `setSilhouette` argument + the active-silhouette id. */
|
|
51
|
+
id: string;
|
|
52
|
+
/** Which of the four named kinds this context renders. */
|
|
53
|
+
kind: DockSilhouetteKind;
|
|
54
|
+
/** The named slots (control positions) this silhouette places. */
|
|
55
|
+
slots: readonly SilhouetteSlot[];
|
|
56
|
+
/** This silhouette's spring register (DATA, not an SFC ternary). Default `dock`. */
|
|
57
|
+
preset?: SilhouettePreset;
|
|
58
|
+
/**
|
|
59
|
+
* The neck-hold for any DETACH this transition drives (DATA — fed to `useDockFission`
|
|
60
|
+
* when a control is present-in-from-only). 0 = no hold (immediate release), 1 = full
|
|
61
|
+
* hold (the goo necks late then snaps).
|
|
62
|
+
*/
|
|
63
|
+
neckHold?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The DETACH hand-off API the orchestrator drives (BE.W-DOCK-FISSION owns the engine).
|
|
67
|
+
* A control PRESENT-only-in-FROM detaches — the orchestrator registers it as a fission
|
|
68
|
+
* PIECE via `registerPiece` and the fission orchestrator buds it off the body. Defined
|
|
69
|
+
* here per the fission spec (`useDockFission` `registerPiece`); the sibling agent builds
|
|
70
|
+
* it, the orchestrator reconciles the import. The orchestrator never re-implements the
|
|
71
|
+
* detach physics — it CALLS this.
|
|
72
|
+
*/
|
|
73
|
+
export interface FissionPieceHandle {
|
|
74
|
+
/** Release the piece (drive its `--dock-split-t` 0→1 detach). */
|
|
75
|
+
detach: () => void;
|
|
76
|
+
/** Re-merge the piece (the bidirectional 1→0). */
|
|
77
|
+
remerge: () => void;
|
|
78
|
+
/** Unregister the piece (cleanup). */
|
|
79
|
+
release: () => void;
|
|
80
|
+
}
|
|
81
|
+
/** The fission registrar the orchestrator composes (BE.W-DOCK-FISSION's `registerPiece`). */
|
|
82
|
+
export type RegisterFissionPiece = (el: HTMLElement, spec: {
|
|
83
|
+
vector: {
|
|
84
|
+
dx: number;
|
|
85
|
+
dy: number;
|
|
86
|
+
};
|
|
87
|
+
rank: number;
|
|
88
|
+
neckHold: number;
|
|
89
|
+
}) => FissionPieceHandle;
|
|
90
|
+
/**
|
|
91
|
+
* The BLOOM-IN hand-off API the orchestrator drives (BE.W-BLOOM-UP owns the engine). A
|
|
92
|
+
* control PRESENT-only-in-TO blooms in — the inverse FLIP. Defined here per the bloom-up
|
|
93
|
+
* spec (`useBloomUp(sourceRef, destRef)`); the orchestrator CALLS it, never re-implements
|
|
94
|
+
* the bloom.
|
|
95
|
+
*/
|
|
96
|
+
export type BloomInPiece = (el: HTMLElement, fromRect: MorphRect, toRect: MorphRect) => void;
|
|
97
|
+
export interface UseDockContextSilhouetteOptions {
|
|
98
|
+
/** The declarative silhouette descriptor MAP (the four kinds; net-new DATA). */
|
|
99
|
+
silhouettes: readonly DockSilhouetteDescriptor[];
|
|
100
|
+
/** The id of the silhouette to seat at construction (defaults to the first). */
|
|
101
|
+
initial?: string;
|
|
102
|
+
/** The dock orientation (the `dim`-idiom source). Default `horizontal`. */
|
|
103
|
+
orientation?: SilhouetteOrientation | Ref<SilhouetteOrientation>;
|
|
104
|
+
/**
|
|
105
|
+
* Resolve a control's live element by `controlId` (the orchestrator measures its
|
|
106
|
+
* current rect for the FLIP). The consumer wires this off its slot refs.
|
|
107
|
+
*/
|
|
108
|
+
resolveControl: (controlId: string) => HTMLElement | null;
|
|
109
|
+
/**
|
|
110
|
+
* The dock ROOT element — the orchestrator measures its origin (to resolve a slot's
|
|
111
|
+
* orientation-derived `main`/`cross` into a viewport `MorphRect`) AND writes
|
|
112
|
+
* `--silhouette-fuse-t` onto it for the fusion meld. The fused glass plate is the
|
|
113
|
+
* dock body itself (C5 — the detach pieces paint in the non-clipping frame; the fused
|
|
114
|
+
* plate is the dock root).
|
|
115
|
+
*/
|
|
116
|
+
dockRoot: Ref<HTMLElement | null>;
|
|
117
|
+
/**
|
|
118
|
+
* The DETACH registrar (BE.W-DOCK-FISSION's `registerPiece`). When absent, a
|
|
119
|
+
* present-in-from-only control is simply removed from the FLIP set (no detach
|
|
120
|
+
* choreography — graceful until fission wires in).
|
|
121
|
+
*/
|
|
122
|
+
registerFissionPiece?: RegisterFissionPiece;
|
|
123
|
+
/**
|
|
124
|
+
* The BLOOM-IN driver (BE.W-BLOOM-UP). When absent, a present-in-to-only control
|
|
125
|
+
* snaps in (no bloom choreography — graceful until bloom-up wires in).
|
|
126
|
+
*/
|
|
127
|
+
bloomInPiece?: BloomInPiece;
|
|
128
|
+
/** Honor `prefers-reduced-motion: reduce` (seat synchronously). Default true. */
|
|
129
|
+
respectReducedMotion?: boolean;
|
|
130
|
+
/** Fired once when a silhouette transition has settled (the consumer hand-off). */
|
|
131
|
+
onSettled?: (toId: string) => void;
|
|
132
|
+
}
|
|
133
|
+
export interface UseDockContextSilhouetteReturn {
|
|
134
|
+
/** The active silhouette id (reactive — the consumer reads the SHAPE). */
|
|
135
|
+
active: Readonly<Ref<string>>;
|
|
136
|
+
/** The active descriptor (reactive). */
|
|
137
|
+
activeDescriptor: Readonly<Ref<DockSilhouetteDescriptor | null>>;
|
|
138
|
+
/** Whether a transition is in flight (the consumer guards re-entrancy / `[data-morphing]`). */
|
|
139
|
+
transitioning: Readonly<Ref<boolean>>;
|
|
140
|
+
/**
|
|
141
|
+
* Transition to the silhouette `toId` — DIFFs the slots by `controlId`, FLIPs the
|
|
142
|
+
* survivors, detaches the from-only, blooms in the to-only, and drives the fusion
|
|
143
|
+
* meld for a `bar+pill` target. A no-op if `toId` is unknown or already active.
|
|
144
|
+
*/
|
|
145
|
+
setSilhouette: (toId: string) => void;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The declarative context→silhouette state machine. Reads a `DockSilhouetteDescriptor[]`
|
|
149
|
+
* MAP; on `setSilhouette` it DIFFs the slots by `controlId` and FLIPs/detaches/blooms via
|
|
150
|
+
* the SHIPPED `ElementMorph` + `springTimingFunction` substrate, ONE `DOCK_SPRING`. The
|
|
151
|
+
* `bar+pill` fusion docks the pill into the bar via `--silhouette-fuse-t`. Compositor-only
|
|
152
|
+
* + PRM-seats. See the module header for the REUSE + the orientation-derived slots + the
|
|
153
|
+
* fusion mechanism.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* const sil = useDockContextSilhouette({
|
|
158
|
+
* silhouettes: [
|
|
159
|
+
* { id: "nav", kind: "bar", slots: [...] },
|
|
160
|
+
* { id: "media", kind: "bar+pill", slots: [{ controlId: "pill", main: 0, cross: -56, size: 240, fuse: true }, ...] },
|
|
161
|
+
* ],
|
|
162
|
+
* orientation,
|
|
163
|
+
* dockRoot,
|
|
164
|
+
* resolveControl: (id) => slotRefs.value[id] ?? null,
|
|
165
|
+
* })
|
|
166
|
+
* sil.setSilhouette("media") // the pill DOCKS DOWN + MELDS into the bar
|
|
167
|
+
* ```
|
|
168
|
+
*/
|
|
169
|
+
export declare function useDockContextSilhouette(options: UseDockContextSilhouetteOptions): UseDockContextSilhouetteReturn;
|
|
170
|
+
/**
|
|
171
|
+
* Compute a detached control's DIRECTION-VECTOR off its slot + the orientation (the
|
|
172
|
+
* fission `vector` — the `dim`-idiom). A control peels along the CROSS axis (the
|
|
173
|
+
* `stack-rail.css` gutter direction the fission media=lateral signature reuses): the sign
|
|
174
|
+
* of `cross` chooses the side, the orientation chooses the axis. This is PURE (exported
|
|
175
|
+
* for the unit test — the slot-diff vector logic is testable without a DOM).
|
|
176
|
+
*/
|
|
177
|
+
export declare function detachVector(slot: SilhouetteSlot, orientation: SilhouetteOrientation): {
|
|
178
|
+
dx: number;
|
|
179
|
+
dy: number;
|
|
180
|
+
};
|
|
181
|
+
/**
|
|
182
|
+
* PURE slot-diff — exported for the unit test (the diff logic is testable without a DOM).
|
|
183
|
+
* Classifies each controlId across the from/to slot sets: `survivors` (present-in-both →
|
|
184
|
+
* FLIP), `bloomIns` (to-only → BLOOM), `detaches` (from-only → DETACH). This is the
|
|
185
|
+
* load-bearing classification `setSilhouette` runs; testing it directly proves the
|
|
186
|
+
* descriptor-driven state machine is correct without a browser.
|
|
187
|
+
*/
|
|
188
|
+
export declare function diffSilhouetteSlots(from: readonly SilhouetteSlot[], to: readonly SilhouetteSlot[]): {
|
|
189
|
+
survivors: string[];
|
|
190
|
+
bloomIns: string[];
|
|
191
|
+
detaches: string[];
|
|
192
|
+
};
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { type Ref } from "vue";
|
|
2
|
+
/** The three named fission CONTEXTS — each maps to a goo signature (F3). */
|
|
3
|
+
export type DockSplitContext = "search" | "media" | "nav";
|
|
4
|
+
/** The detach vector family a context selects. */
|
|
5
|
+
export type DockSplitVector = "radial" | "lateral" | "inward-merge";
|
|
6
|
+
/**
|
|
7
|
+
* BD.W-DOCK-CORE (II.2 — F-1 the headline fix). The placement axis the detached
|
|
8
|
+
* pieces TRAVEL ALONG to form the sibling island dock. The prior build let each
|
|
9
|
+
* piece scatter on its own radial center → it read as inline jitter inside the one
|
|
10
|
+
* pill, NOT a detach. A single COHERENT placement vector flies the whole piece
|
|
11
|
+
* cluster off the source plate so a second dock visibly materializes beside/above/
|
|
12
|
+
* below (the iOS-27 split read).
|
|
13
|
+
*/
|
|
14
|
+
export type DockSplitPlacement = "beside" | "above" | "below";
|
|
15
|
+
/** The unit placement vector each `splitPlacement` flies the cluster along. */
|
|
16
|
+
export declare const PLACEMENT_VECTOR: Readonly<Record<DockSplitPlacement, {
|
|
17
|
+
dx: number;
|
|
18
|
+
dy: number;
|
|
19
|
+
}>>;
|
|
20
|
+
/** The squish-peak register — WHEN the `useLiquidFlex` swell peaks in the travel. */
|
|
21
|
+
export type DockSplitSquishPeak = "late" | "long" | "coalesce";
|
|
22
|
+
/**
|
|
23
|
+
* The per-context goo-SIGNATURE descriptor (F3 — the FLOOR, DATA not three code paths).
|
|
24
|
+
* The orchestrator reads this to compute each piece's vector + stagger + neck phase; the
|
|
25
|
+
* ONE `fission-bridge.css` recipe paints whatever the pieces carry.
|
|
26
|
+
*/
|
|
27
|
+
export interface DockSplitSignature {
|
|
28
|
+
/** The context this signature serves. */
|
|
29
|
+
context: DockSplitContext;
|
|
30
|
+
/** The detach-vector family. */
|
|
31
|
+
vector: DockSplitVector;
|
|
32
|
+
/**
|
|
33
|
+
* How long the goo neck HOLDS before it snaps (0..1 of `--split-t`). High = the
|
|
34
|
+
* tense radial pop (neck holds to ~0.55 then snaps); the neck-break offset.
|
|
35
|
+
*/
|
|
36
|
+
neckHold: number;
|
|
37
|
+
/**
|
|
38
|
+
* The per-piece stagger-rank resolver — returns piece `i`'s ordinal in the break
|
|
39
|
+
* SEQUENCE (innermost-first for radial, outside-in for lateral). The orchestrator
|
|
40
|
+
* phase-shifts each piece's `--neck-t` by `staggerStep * rank` so the N necks break
|
|
41
|
+
* in sequence, never simultaneously (the `--split-stagger * rank(i)` idiom).
|
|
42
|
+
*/
|
|
43
|
+
staggerRank: (i: number, count: number) => number;
|
|
44
|
+
/** WHEN the `useLiquidFlex` squish swell peaks across the travel. */
|
|
45
|
+
squishPeak: DockSplitSquishPeak;
|
|
46
|
+
}
|
|
47
|
+
/** The canonical per-context signature MAP (F3 — search/media/nav, descriptor-driven). */
|
|
48
|
+
export declare const DOCK_SPLIT_SIGNATURES: Readonly<Record<DockSplitContext, DockSplitSignature>>;
|
|
49
|
+
/** The per-piece DIRECTION-VECTOR + rank a control registers (the MorphTarget twin). */
|
|
50
|
+
export interface DockFissionPieceRegistration {
|
|
51
|
+
/** The detaching control element (its `--split-*`/`--neck-t` vars are written here). */
|
|
52
|
+
el: Ref<HTMLElement | null>;
|
|
53
|
+
/**
|
|
54
|
+
* The detach DIRECTION as a unit-ish vector in dock-local space (the bloom/peel
|
|
55
|
+
* direction). `radial` blooms `(cx_i − cx_dock)`-ward; `lateral` peels cross-axis;
|
|
56
|
+
* `inward-merge` is the negative radial. May be a getter so a live re-measure
|
|
57
|
+
* (the FLIP-measured center) re-resolves per read.
|
|
58
|
+
*/
|
|
59
|
+
vector: {
|
|
60
|
+
dx: number;
|
|
61
|
+
dy: number;
|
|
62
|
+
} | (() => {
|
|
63
|
+
dx: number;
|
|
64
|
+
dy: number;
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* The piece's ordinal in the registration order (the `--i` the bridge reads + the
|
|
68
|
+
* input to the signature's `staggerRank`). Stable per piece.
|
|
69
|
+
*/
|
|
70
|
+
rank: number;
|
|
71
|
+
}
|
|
72
|
+
/** The handle a registered piece holds (detach on unmount). */
|
|
73
|
+
export interface DockFissionPieceHandle {
|
|
74
|
+
/** Detach this piece from the orchestrator (on the control's unmount). */
|
|
75
|
+
release(): void;
|
|
76
|
+
}
|
|
77
|
+
export interface UseDockFissionOptions {
|
|
78
|
+
/** The `.glass-dock` root (or the fission scope) the shared `--dock-split-t` writes to. */
|
|
79
|
+
rootEl: Ref<HTMLElement | null>;
|
|
80
|
+
/**
|
|
81
|
+
* The active signature (the context the dock is fissioning under). A `Ref` so a
|
|
82
|
+
* consumer can swap contexts; the orchestrator reads `.value` at split time.
|
|
83
|
+
*/
|
|
84
|
+
signature: Ref<DockSplitSignature>;
|
|
85
|
+
/**
|
|
86
|
+
* BD.W-DOCK-CORE (II.2 — F-1). The placement the detached pieces fly to form the
|
|
87
|
+
* sibling island. A `Ref` so a consumer can swap placement. The orchestrator writes
|
|
88
|
+
* the per-piece travel along this ONE coherent vector (not per-piece radial scatter)
|
|
89
|
+
* so the cluster reads as a real detach into a second dock beside/above/below.
|
|
90
|
+
* Defaults to `"beside"`.
|
|
91
|
+
*/
|
|
92
|
+
placement?: Ref<DockSplitPlacement>;
|
|
93
|
+
/**
|
|
94
|
+
* The LOW squish cap the `useLiquidFlex` recoil saturates at (≤1.08 — the anti-taffy
|
|
95
|
+
* fence). May be a getter so a live `--*-max-stretch` cascade override re-resolves.
|
|
96
|
+
* Defaults to 1.08 (the `useLiquidFlex` register).
|
|
97
|
+
*/
|
|
98
|
+
maxStretch?: number | (() => number);
|
|
99
|
+
/**
|
|
100
|
+
* The seam-tension cap (F4 — kept LOW ≈0.12, the `useLiquidFlex` maxStretch
|
|
101
|
+
* register). A fast pull THINS the neck via the existing `clip-path` channel up to
|
|
102
|
+
* this cap, saturating — never a taffy-pull.
|
|
103
|
+
*/
|
|
104
|
+
seamTensionCap?: number;
|
|
105
|
+
/**
|
|
106
|
+
* The seam-tension velocity gain `k` — `--seam-tension = clamp(0, speed·k, cap)`.
|
|
107
|
+
* Defaults to 0.6 (a calm gain over the normalized-host velocity).
|
|
108
|
+
*/
|
|
109
|
+
seamTensionGain?: number;
|
|
110
|
+
/**
|
|
111
|
+
* The per-rank stagger STEP — the `--neck-t` phase shift per stagger-rank so the N
|
|
112
|
+
* necks break in sequence (the `--split-stagger * rank` idiom). Defaults to 0.08.
|
|
113
|
+
*/
|
|
114
|
+
staggerStep?: number;
|
|
115
|
+
/** Honor `prefers-reduced-motion: reduce` → instant sync-seat (F5). Default true. */
|
|
116
|
+
respectReducedMotion?: boolean;
|
|
117
|
+
}
|
|
118
|
+
export interface UseDockFissionReturn {
|
|
119
|
+
/** The live split scalar (0 rest → 1 fissioned), the last value the spring wrote. */
|
|
120
|
+
readonly t: Readonly<Ref<number>>;
|
|
121
|
+
/** True while the dock is fissioned (or mid-fission past the threshold). */
|
|
122
|
+
readonly fissioned: Readonly<Ref<boolean>>;
|
|
123
|
+
/**
|
|
124
|
+
* Register a surviving control as a fission PIECE (the `Set<MorphTarget>` pattern).
|
|
125
|
+
* The piece carries its DIRECTION-VECTOR + rank; the orchestrator writes its
|
|
126
|
+
* `--split-dx`/`--split-dy`/`--i`/`--neck-t` off the active signature.
|
|
127
|
+
*/
|
|
128
|
+
registerPiece(reg: DockFissionPieceRegistration): DockFissionPieceHandle;
|
|
129
|
+
/** SPLIT — run the scalar 0→1 (carve the pill into the N pieces). */
|
|
130
|
+
split(): void;
|
|
131
|
+
/** RE-MERGE — run the scalar 1→0 (the SAME loop, target flipped — F2 bidirectional). */
|
|
132
|
+
merge(): void;
|
|
133
|
+
/** Toggle split↔merge from the current state. */
|
|
134
|
+
toggle(): void;
|
|
135
|
+
/**
|
|
136
|
+
* The `@pointermove` handler the consumer binds on the dock host — feeds the raw
|
|
137
|
+
* pointer to the velocity field (the field is ticked from INSIDE the driver loop).
|
|
138
|
+
* PRM-gated by the field itself.
|
|
139
|
+
*/
|
|
140
|
+
onPointerMove(event: PointerEvent): void;
|
|
141
|
+
/** Tear down the spring + the field listener (auto-run on scope dispose). */
|
|
142
|
+
dispose(): void;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The n-ary detach orchestrator. ONE `SpringProgress` on `DOCK_SPRING` writing
|
|
146
|
+
* `--dock-split-t` + per-piece `--split-dx`/`--split-dy`/`--i`/`--neck-t` off the active
|
|
147
|
+
* `DockSplitSignature`, the snap-recoil on `useLiquidFlex`, the seam-tension on
|
|
148
|
+
* `usePointerVelocityField` (fed from inside the ONE loop), PRM sync-seated. See the
|
|
149
|
+
* module header for the load-bearing-reuse + box-inviolate rationale.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```ts
|
|
153
|
+
* const fission = useDockFission({ rootEl, signature })
|
|
154
|
+
* const h = fission.registerPiece({ el: searchIconRef, vector: { dx: -1, dy: 0 }, rank: 0 })
|
|
155
|
+
* fission.split() // the pill carves into the pieces along the signature
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
export declare function useDockFission(options: UseDockFissionOptions): UseDockFissionReturn;
|