@mkbabb/glass-ui 4.0.1 → 4.1.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-CW7a0m8M.js → CardAction-8whJrLWt.js} +23 -8
- package/dist/{CommandShortcut-DvZNQ_HF.js → CommandShortcut-D3yxgHNn.js} +23 -12
- package/dist/{ConfiguratorRow-BR4l-ixA.js → ConfiguratorRow-CaP7U3ZA.js} +11 -11
- package/dist/ContextMenuContent-B3ZsheLV.js +90 -0
- package/dist/{ContextMenuSubContent-xol4sD2q.js → ContextMenuSubContent-DDRID3qC.js} +15 -15
- package/dist/{DataTable-CuKwF7wr.js → DataTable-Bc9kUtu_.js} +2 -2
- package/dist/{DialogContent-DcKK8k9i.js → DialogContent-6JtTB5x2.js} +8 -5
- package/dist/DialogFooter-9phqcRIS.js +80 -0
- package/dist/DialogScrollContent-TTuovQst.js +93 -0
- package/dist/HoverCardContent-Bel1gdLZ.js +88 -0
- package/dist/{IconChip-BTD-nay5.js → IconChip-DhbdGdFQ.js} +1 -1
- package/dist/{IconTooltip-Bl8gFZ8d.js → IconTooltip-B0zimd2H.js} +1 -1
- package/dist/Input-Cg9DF62r.js +57 -0
- package/dist/{Notification-VUwexFUf.js → Notification-CphK7AAm.js} +3 -3
- package/dist/NumberFieldContent-D8cXeyO4.js +140 -0
- package/dist/PagerDots-Cjx96la-.js +98 -0
- package/dist/{SelectScrollDownButton-CrA8F0iV.js → SelectScrollDownButton-DAKCBEdW.js} +62 -57
- package/dist/{SelectSeparator-DXswVdRz.js → SelectSeparator-C2UGOkXF.js} +1 -1
- package/dist/Separator-DQcwC2TR.js +44 -0
- package/dist/Switch-B8RscmRu.js +49 -0
- package/dist/{Toaster-Bw4xR8xV.js → Toaster-D9qIHjBI.js} +1 -1
- package/dist/{ToggleGroupItem-pEM9vIhs.js → ToggleGroupItem-BLtr3TJq.js} +2 -2
- package/dist/TooltipProvider-BJ_Y5EGX.js +109 -0
- package/dist/animated-digit.js +1 -1
- package/dist/api/index.d.ts +15 -32
- package/dist/api/types-extra.d.ts +31 -0
- package/dist/api.js +1 -1
- package/dist/aurora.js +579 -251
- package/dist/border-progress.js +49 -57
- package/dist/{button-DYCUa-tH.js → button-5dY1Dvhd.js} +13 -14
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -3
- package/dist/card.js +1 -1
- package/dist/carousel.js +20 -20
- package/dist/color-Cs0-oxYL.js +116 -0
- package/dist/color.js +2 -2
- package/dist/command.js +1 -1
- package/dist/completion-seal.d.ts +1 -0
- package/dist/completion-seal.js +89 -0
- package/dist/components/custom/aurora/Aurora.vue.d.ts +10 -5
- package/dist/components/custom/aurora/composables/color.d.ts +13 -0
- package/dist/components/custom/aurora/composables/frameLoop.d.ts +9 -0
- package/dist/components/custom/aurora/composables/runtime.d.ts +12 -0
- package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +11 -2
- package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +8 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +18 -0
- package/dist/components/custom/aurora/constants/renderMode.d.ts +16 -8
- package/dist/components/custom/aurora/constants/shaders/aurora-mediums.wgsl.d.ts +1 -0
- package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -1
- package/dist/components/custom/border-progress/composables/spectrum-walk.d.ts +25 -0
- package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +14 -18
- package/dist/components/custom/border-progress/index.d.ts +1 -1
- package/dist/components/custom/completion-seal/CompletionSeal.vue.d.ts +21 -0
- package/dist/components/custom/completion-seal/composables/useCompletionSeal.d.ts +37 -0
- package/dist/components/custom/completion-seal/constants.d.ts +46 -0
- package/dist/components/custom/completion-seal/index.d.ts +4 -0
- package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +7 -0
- package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +9 -0
- package/dist/components/custom/concentric/composables/ringField.d.ts +57 -16
- package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +2 -1
- package/dist/components/custom/concentric/composables/useConcentric.d.ts +4 -4
- package/dist/components/custom/concentric/constants.d.ts +30 -6
- 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/confirm-dialog/ConfirmDialog.vue.d.ts +3 -3
- package/dist/components/custom/constellation/Constellation.vue.d.ts +5 -4
- package/dist/components/custom/constellation/composables/constellationGLSetup.d.ts +10 -0
- package/dist/components/custom/constellation/composables/constellationWGPUSetup.d.ts +19 -0
- package/dist/components/custom/constellation/composables/uniformBridgeWGPU.d.ts +66 -0
- package/dist/components/custom/constellation/composables/useConstellation.d.ts +3 -10
- package/dist/components/custom/constellation/constants.d.ts +33 -0
- package/dist/components/custom/constellation/constellationField.d.ts +31 -1
- package/dist/components/custom/constellation/constellationInteraction.d.ts +23 -14
- package/dist/components/custom/constellation/constellationRender.d.ts +25 -0
- package/dist/components/custom/constellation/constellationTypes.d.ts +38 -0
- package/dist/components/custom/constellation/constellationWell.d.ts +15 -0
- package/dist/components/custom/constellation/index.d.ts +5 -5
- package/dist/components/custom/constellation/shaders/constellation-lines.glsl.d.ts +2 -0
- package/dist/components/custom/constellation/shaders/constellation-lines.wgsl.d.ts +1 -0
- package/dist/components/custom/constellation/shaders/constellation-points.glsl.d.ts +2 -0
- package/dist/components/custom/constellation/shaders/constellation-points.wgsl.d.ts +1 -0
- package/dist/components/custom/deck/DeckPager.vue.d.ts +29 -0
- package/dist/components/custom/deck/composables/useDeck.d.ts +27 -0
- package/dist/components/custom/deck/composables/useDeckKeyboard.d.ts +25 -0
- package/dist/components/custom/deck/composables/useDeckSpring.d.ts +22 -0
- package/dist/components/custom/deck/constants.d.ts +14 -0
- package/dist/components/custom/deck/index.d.ts +8 -0
- package/dist/components/custom/dock/DockIconButton.vue.d.ts +12 -0
- package/dist/components/custom/dock/DockStack.vue.d.ts +65 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +4 -2
- package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +80 -0
- package/dist/components/custom/dock/composables/index.d.ts +2 -0
- package/dist/components/custom/dock/composables/useDockSearch.d.ts +85 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +11 -0
- package/dist/components/custom/dock/constants.d.ts +18 -14
- package/dist/components/custom/dock/index.d.ts +5 -2
- package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +15 -11
- package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +48 -6
- package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +23 -8
- package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +6 -5
- package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -5
- package/dist/components/custom/dot-flow-field/constants.d.ts +42 -21
- package/dist/components/custom/dot-flow-field/index.d.ts +2 -2
- 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 +4 -20
- package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -1
- package/dist/components/custom/dot-matrix/DotMatrix.vue.d.ts +43 -0
- package/dist/components/custom/dot-matrix/composables/dotMatrixField.d.ts +89 -0
- package/dist/components/custom/dot-matrix/composables/uniformBridgeWGPU.d.ts +52 -0
- package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
- package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +27 -0
- package/dist/components/custom/dot-matrix/constants.d.ts +58 -0
- package/dist/components/custom/dot-matrix/index.d.ts +5 -0
- package/dist/components/custom/dot-matrix/shaders/dot-matrix.glsl.d.ts +4 -0
- package/dist/components/custom/dot-matrix/shaders/dot-matrix.wgsl.d.ts +1 -0
- package/dist/components/custom/easing/EasingPicker.vue.d.ts +2 -2
- package/dist/components/custom/easing/composables/useEasingPicker.d.ts +5 -0
- package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +11 -0
- package/dist/components/custom/fourier-field/FourierField.vue.d.ts +40 -47
- package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +15 -0
- package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +20 -0
- package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +41 -0
- package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +40 -37
- package/dist/components/custom/fourier-field/constants.d.ts +61 -4
- package/dist/components/custom/fourier-field/index.d.ts +23 -18
- package/dist/components/custom/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +1 -0
- package/dist/components/custom/fourier-field/shaders/fourier-field.glsl.d.ts +4 -0
- package/dist/components/custom/fourier-field/shaders/fourier-field.render.wgsl.d.ts +1 -0
- package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +9 -1
- package/dist/components/custom/goo-blob/constants.d.ts +1 -1
- package/dist/components/custom/goo-blob/index.d.ts +1 -1
- package/dist/components/custom/goo-blob/shaders/metaball-noise.wgsl.d.ts +1 -0
- package/dist/components/custom/goo-blob/shaders/metaball-palette.wgsl.d.ts +1 -0
- 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 +36 -0
- package/dist/components/custom/goo-dot-matrix/GooDotMatrix.vue.d.ts +49 -0
- package/dist/components/custom/goo-dot-matrix/composables/gooDotLattice.d.ts +24 -0
- package/dist/components/custom/goo-dot-matrix/composables/gooDotSetup.d.ts +50 -0
- package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +35 -0
- package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
- package/dist/components/custom/goo-dot-matrix/constants.d.ts +76 -0
- package/dist/components/custom/goo-dot-matrix/index.d.ts +5 -0
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.frag.d.ts +11 -0
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +3 -0
- package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +21 -2
- package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +15 -0
- package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +9 -0
- package/dist/components/custom/pager-dots/index.d.ts +2 -0
- package/dist/components/custom/pager-dots/pagerWindow.d.ts +9 -0
- package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
- package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +90 -0
- package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +16 -0
- package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +19 -0
- package/dist/components/custom/paper-grid/composables/uniformBridgeWGPU.d.ts +16 -0
- package/dist/components/custom/paper-grid/composables/usePaperGrid.d.ts +31 -0
- package/dist/components/custom/paper-grid/constants.d.ts +57 -0
- package/dist/components/custom/paper-grid/index.d.ts +5 -0
- package/dist/components/custom/paper-grid/shaders/paper-grid.glsl.d.ts +4 -0
- package/dist/components/custom/paper-grid/shaders/paper-grid.wgsl.d.ts +1 -0
- package/dist/components/custom/search/FuzzySearch.vue.d.ts +8 -2
- package/dist/components/custom/search/SearchBar.vue.d.ts +8 -0
- package/dist/components/custom/search/index.d.ts +2 -0
- package/dist/components/custom/search/searchVariants.d.ts +19 -0
- package/dist/components/custom/selectable-chip/SelectableChip.vue.d.ts +50 -0
- package/dist/components/custom/selectable-chip/index.d.ts +2 -0
- package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +23 -0
- package/dist/components/custom/split-chars/SplitChars.vue.d.ts +39 -0
- package/dist/components/custom/split-chars/index.d.ts +1 -0
- package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +8 -6
- package/dist/components/custom/tabs/constants.d.ts +20 -2
- package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +29 -16
- package/dist/components/custom/watercolor-dot/useWatercolorBlob.d.ts +10 -5
- package/dist/components/ui/_shared/index.d.ts +2 -0
- package/dist/components/ui/_shared/useControlSize.d.ts +46 -0
- package/dist/components/ui/button/index.d.ts +1 -1
- package/dist/components/ui/card/Card.vue.d.ts +45 -0
- package/dist/components/ui/card/index.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
- package/dist/components/ui/command/CommandDialog.vue.d.ts +9 -3
- package/dist/components/ui/command/CommandList.vue.d.ts +3 -0
- package/dist/components/ui/context-menu/ContextMenuContent.vue.d.ts +5 -1
- package/dist/components/ui/dropdown-menu/DropdownMenuContent.vue.d.ts +4 -0
- package/dist/components/ui/hover-card/HoverCardContent.vue.d.ts +3 -0
- package/dist/components/ui/input/Input.vue.d.ts +3 -0
- package/dist/components/ui/number-field/NumberFieldInput.vue.d.ts +6 -1
- package/dist/components/ui/select/SelectContent.vue.d.ts +3 -0
- package/dist/components/ui/switch/Switch.vue.d.ts +2 -0
- package/dist/components/ui/textarea/Textarea.vue.d.ts +3 -0
- package/dist/components/ui/tooltip/TooltipContent.vue.d.ts +3 -0
- package/dist/composables/color/index.d.ts +2 -0
- package/dist/composables/color/useAccentTone.d.ts +34 -0
- package/dist/composables/glass/useVizChoreography.d.ts +123 -0
- package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +10 -0
- package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
- package/dist/composables/glass/webgpu/index.d.ts +1 -1
- package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +28 -7
- package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +1 -0
- package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
- package/dist/composables/motion/core/index.d.ts +3 -0
- package/dist/composables/motion/scrollReader.d.ts +25 -0
- package/dist/composables/motion/springPresets.d.ts +20 -1
- package/dist/composables/motion/useCharStagger.d.ts +44 -0
- package/dist/composables/motion/useDockCtaReceive.d.ts +31 -6
- package/dist/composables/motion/useScrollChrome.d.ts +58 -0
- package/dist/composables/motion/useScrollTrigger.d.ts +67 -0
- package/dist/composables/motion/useSpringPress.d.ts +5 -5
- package/dist/composables/motion/useStaggerReveal.d.ts +24 -0
- package/dist/composables/sidebar/index.d.ts +4 -1
- package/dist/composables/sidebar/types.d.ts +68 -3
- package/dist/composables/sidebar/useClickDelegate.d.ts +4 -0
- package/dist/composables/sidebar/useLazyLoader.d.ts +5 -0
- package/dist/composables/sidebar/useScrollTo.d.ts +5 -0
- package/dist/composables/virtual/index.d.ts +4 -0
- package/dist/composables/virtual/useVirtualSectionWindow.d.ts +72 -0
- package/dist/composables/virtual/useWindowedStore.d.ts +43 -0
- package/dist/composables/virtual/virtualSectionLayout.d.ts +103 -0
- package/dist/concentric.js +495 -221
- package/dist/configurator.js +2 -2
- package/dist/confirm-dialog.js +62 -47
- package/dist/constellation.js +635 -235
- package/dist/context-menu.js +2 -2
- package/dist/controls.js +1 -1
- package/dist/createCanvasLifecycle-Gh45Ce-p.js +93 -0
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/deck.d.ts +1 -0
- package/dist/deck.js +105 -0
- package/dist/dialog.js +4 -3
- package/dist/dock.js +602 -458
- package/dist/dot-flow-field.js +580 -290
- package/dist/dot-matrix.d.ts +1 -0
- package/dist/dot-matrix.js +630 -0
- package/dist/dotMatrixField-D_x9_1qq.js +48 -0
- package/dist/{dropdown-menu-CofSZuk8.js → dropdown-menu-aJmV5SqE.js} +83 -79
- package/dist/dropdown-menu.js +1 -1
- package/dist/easing.js +188 -176
- package/dist/expandable-container.js +42 -20
- package/dist/fading-scroll.js +1 -1
- package/dist/flow.glsl-B2P7e0MT.js +4 -0
- package/dist/forms.js +62 -60
- package/dist/fourier-field.js +825 -178
- package/dist/fourier-math.js +1 -1
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +145 -104
- package/dist/goo-blob.js +171 -1228
- package/dist/goo-dot-matrix.d.ts +1 -0
- package/dist/goo-dot-matrix.js +591 -0
- package/dist/handmark.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 +2 -0
- package/dist/instrument-chassis.js +1 -1
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +70 -60
- package/dist/metric-cell.js +1 -1
- package/dist/metric-stack.js +11 -2
- package/dist/motion-core.js +54 -32
- package/dist/motion-curves.js +11 -1
- package/dist/motion.js +46 -111
- package/dist/notification.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/pager-dots.js +2 -91
- package/dist/paper-backdrop.js +1 -1
- package/dist/paper-grid.d.ts +1 -0
- package/dist/paper-grid.js +788 -0
- package/dist/{presets-BW2b-fr1.js → presets-CvOUqtdY.js} +3 -3
- package/dist/{procedural-color.glsl-CIFsJhwI.js → procedural-color.wgsl-m7Zgv35j.js} +2 -2
- package/dist/progress.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +1 -1
- package/dist/{useCanvas2D-B8w_E3Rr.js → resolveCanvasColor-yPyIpJt9.js} +12 -2
- package/dist/scrollReader-DI1NWxUw.js +42 -0
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +160 -304
- package/dist/select.js +3 -3
- package/dist/selectable-chip.d.ts +1 -0
- package/dist/selectable-chip.js +65 -0
- package/dist/separator.js +1 -1
- package/dist/{sheet-tZMg0E0w.js → sheet-B2flBfLH.js} +2 -2
- package/dist/sheet.js +1 -1
- package/dist/sidebar.js +216 -114
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +1 -1
- package/dist/spectrum-walk-BVzA7Biz.js +33 -0
- package/dist/{springPresets-CFQGQfdl.js → springPresets-Ce7OYCm9.js} +12 -6
- package/dist/styles/animations.css +13 -3
- package/dist/styles/cards.css +69 -0
- package/dist/styles/completion-seal.css +131 -0
- package/dist/styles/components.css +2 -3
- package/dist/styles/configurator.css +55 -0
- package/dist/styles/critical-partition.mjs +33 -11
- package/dist/styles/deferred.css +2 -0
- package/dist/styles/dock/cta-seat.css +87 -0
- package/dist/styles/dock/density.css +153 -0
- package/dist/styles/dock/layers.css +55 -7
- package/dist/styles/dock/morph-bridge.css +54 -18
- package/dist/styles/dock/morph.css +41 -33
- package/dist/styles/dock/overflow.css +12 -0
- package/dist/styles/dock/search.css +68 -0
- package/dist/styles/dock/shape.css +124 -0
- package/dist/styles/dock/shell.css +23 -5
- package/dist/styles/dock/stack-rail.css +264 -0
- package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
- package/dist/styles/dock-controls/icon-button.css +14 -0
- package/dist/styles/dock.css +11 -1
- package/dist/styles/glass/accent-tone.css +66 -0
- package/dist/styles/glass/control-surfaces.css +167 -0
- package/dist/styles/glass/ladder.css +67 -17
- package/dist/styles/glass/rim.css +19 -9
- package/dist/styles/glass/surfaces.css +69 -148
- package/dist/styles/glass.css +10 -0
- package/dist/styles/index.css +15 -0
- package/dist/styles/scroll-chrome.css +123 -0
- package/dist/styles/scroll-driven.css +38 -0
- package/dist/styles/segmented-tabs.css +50 -14
- package/dist/styles/theme/bridges.css +22 -0
- package/dist/styles/theme/radius.css +18 -1
- package/dist/styles/tokens/color-radius.css +13 -3
- package/dist/styles/tokens/dark-arm.css +39 -6
- package/dist/styles/tokens/glass-deep.css +28 -3
- package/dist/styles/tokens/glass-fx.css +44 -1
- package/dist/styles/tokens/glass.css +91 -31
- package/dist/styles/tokens/light-dark.css +1 -1
- package/dist/styles/tokens/offsets.css +27 -0
- package/dist/styles/tokens/property-regs.css +133 -0
- package/dist/styles/tokens/scale-paper.css +73 -29
- package/dist/styles/tokens/scheme-motion.css +44 -6
- package/dist/styles/tokens/sizing-config.css +110 -0
- package/dist/styles/tokens/sizing.css +55 -104
- package/dist/styles/tokens.css +5 -0
- package/dist/styles/typography/semantic.css +18 -5
- package/dist/styles/utilities/a11y-overrides.css +20 -5
- package/dist/styles/utilities/base-misc.css +52 -0
- package/dist/styles/utilities/btn.css +14 -3
- package/dist/styles/utilities/components.css +31 -6
- package/dist/styles/utilities/metal.css +26 -0
- package/dist/switch.js +1 -1
- package/dist/tabs.js +8 -8
- package/dist/timeline.js +1 -1
- package/dist/toast.js +1 -1
- package/dist/toggle-chip.js +10 -10
- package/dist/toggle-group.js +1 -1
- package/dist/tooltip.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/uniformBridgeWGPU-CtAKl45L.js +1204 -0
- package/dist/{useAnimatedNumber-BfUq2bUM.js → useAnimatedNumber-CLrxicG9.js} +1 -1
- package/dist/{useConfiguratorState-DNlOh6c8.js → useConfiguratorState-4xblKfwd.js} +25 -24
- package/dist/useControlSize-SH1UmJCi.js +9 -0
- package/dist/useDockCtaReceive-DfFkmgL1.js +82 -0
- package/dist/{useDragMorph-DgxnsVJz.js → useDragMorph-BUgAC-zK.js} +4 -4
- package/dist/useFuzzySearch-DIhcYtcw.js +177 -0
- package/dist/useGpuSubstrate-4pTcp6mX.js +294 -0
- package/dist/{useLiquidPress-kfb4KX79.js → useLiquidPress-BooG97RY.js} +2 -2
- package/dist/usePointerVelocityField-QLsy3_kv.js +91 -0
- package/dist/useScrollChrome-D66AVP7C.js +258 -0
- package/dist/{useSpringMount-q1amq1SJ.js → useSpringMount-BWDnKIwh.js} +1 -1
- package/dist/useSpringPress-B1-Czp-V.js +36 -0
- package/dist/useViewTransition-CUI1nAgn.js +95 -0
- package/dist/{vendor-CKmzio-i.js → vendor-B2qOlYY3.js} +24 -11
- package/dist/virtual.d.ts +1 -0
- package/dist/virtual.js +225 -0
- package/dist/watercolor-dot.js +116 -73
- package/package.json +127 -7
- package/src/styles/animations.css +13 -3
- package/src/styles/cards.css +69 -0
- package/src/styles/completion-seal.css +131 -0
- package/src/styles/configurator.css +55 -0
- package/src/styles/critical-partition.mjs +33 -11
- package/src/styles/dock/cta-seat.css +87 -0
- package/src/styles/dock/density.css +153 -0
- package/src/styles/dock/layers.css +55 -7
- package/src/styles/dock/morph-bridge.css +54 -18
- package/src/styles/dock/morph.css +41 -33
- package/src/styles/dock/overflow.css +12 -0
- package/src/styles/dock/search.css +68 -0
- package/src/styles/dock/shape.css +124 -0
- package/src/styles/dock/shell.css +23 -5
- package/src/styles/dock/stack-rail.css +264 -0
- package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
- package/src/styles/dock-controls/icon-button.css +14 -0
- package/src/styles/dock.css +11 -1
- package/src/styles/glass/accent-tone.css +66 -0
- package/src/styles/glass/control-surfaces.css +167 -0
- package/src/styles/glass/ladder.css +67 -17
- package/src/styles/glass/rim.css +19 -9
- package/src/styles/glass/surfaces.css +69 -148
- package/src/styles/glass.css +10 -0
- package/src/styles/index.css +15 -0
- package/src/styles/scroll-chrome.css +123 -0
- package/src/styles/scroll-driven.css +38 -0
- package/src/styles/segmented-tabs.css +50 -14
- package/src/styles/theme/bridges.css +22 -0
- package/src/styles/theme/radius.css +18 -1
- package/src/styles/tokens/color-radius.css +13 -3
- package/src/styles/tokens/dark-arm.css +39 -6
- package/src/styles/tokens/glass-deep.css +28 -3
- package/src/styles/tokens/glass-fx.css +44 -1
- package/src/styles/tokens/glass.css +91 -31
- package/src/styles/tokens/light-dark.css +1 -1
- package/src/styles/tokens/offsets.css +27 -0
- package/src/styles/tokens/property-regs.css +133 -0
- package/src/styles/tokens/scale-paper.css +73 -29
- package/src/styles/tokens/scheme-motion.css +44 -6
- package/src/styles/tokens/sizing-config.css +110 -0
- package/src/styles/tokens/sizing.css +55 -104
- package/src/styles/tokens.css +5 -0
- package/src/styles/typography/semantic.css +18 -5
- package/src/styles/utilities/a11y-overrides.css +20 -5
- package/src/styles/utilities/base-misc.css +52 -0
- package/src/styles/utilities/btn.css +14 -3
- package/src/styles/utilities/components.css +31 -6
- package/src/styles/utilities/metal.css +26 -0
- package/dist/ContextMenuContent-uWnVxDab.js +0 -85
- package/dist/DialogFooter-BZNX5aVr.js +0 -165
- package/dist/HoverCardContent-b2uaAMRR.js +0 -83
- package/dist/Input-h9v5LeXf.js +0 -55
- package/dist/NumberFieldContent-Cq7EzX-U.js +0 -138
- package/dist/Separator-pKF0oA4M.js +0 -37
- package/dist/Switch-CwYNf8bo.js +0 -47
- package/dist/TooltipProvider-rzvnXz60.js +0 -104
- package/dist/color-DweYl7pE.js +0 -86
- package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +0 -35
- package/dist/components/custom/constellation/constellationDraw.d.ts +0 -30
- package/dist/components/custom/dock/DockRail.vue.d.ts +0 -89
- package/dist/createCanvasLifecycle-CHD5XrDW.js +0 -82
- package/dist/procedural-color.wgsl-CToRHugY.js +0 -224
- package/dist/resolveCanvasColor-CUyHr5Uu.js +0 -11
- package/dist/styles/dock/rail-extend.css +0 -397
- package/dist/usePointerVelocityField-JbRd5CrM.js +0 -137
- package/dist/useRAFLoop-UYa4zoiN.js +0 -109
- package/dist/useSpringPress-BsqPr7FJ.js +0 -34
- package/src/styles/dock/rail-extend.css +0 -397
- /package/dist/{FadingScroll-DI6hQhT9.js → FadingScroll-DLRbH5Xr.js} +0 -0
- /package/dist/{HoverPopover-CbqbNwgU.js → HoverPopover-BcIxvyqZ.js} +0 -0
- /package/dist/{InstrumentChassis-Bx0F_q5g.js → InstrumentChassis-CxsHSyMj.js} +0 -0
- /package/dist/{PaperBackdrop-Vf3tlpvd.js → PaperBackdrop-CqwjnfLv.js} +0 -0
- /package/dist/{Progress-DctG61iZ.js → Progress-CnqB7gLm.js} +0 -0
- /package/dist/{ScrollingText-yOpBzFYq.js → ScrollingText-CTZbA_cG.js} +0 -0
- /package/dist/{SelectGroup-DwwjicPY.js → SelectGroup-BFiod7X2.js} +0 -0
- /package/dist/{compile-CQEFRTmx.js → compile-nZ1xVYTp.js} +0 -0
- /package/dist/{constants-BPOqYJAm.js → constants--C2DkLW8.js} +0 -0
- /package/dist/{math-BINYmg5z.js → math-Eb0w3LqU.js} +0 -0
- /package/dist/{prng-Za0Rmgag.js → prng-B-d9eYX8.js} +0 -0
- /package/dist/{slider-DVb4HXU-.js → slider-2A0rPn79.js} +0 -0
- /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-CmjB9E32.js} +0 -0
- /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Dbozzjgm.js} +0 -0
- /package/dist/{useInterval-CvK1mL92.js → useInterval-CNdua40W.js} +0 -0
- /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BPRp33Im.js} +0 -0
- /package/dist/{useLiquidFlex-mZPMiNXh.js → useLiquidFlex-UmA6LMZu.js} +0 -0
- /package/dist/{useScrollProgress-D7bYU2RK.js → useScrollProgress-c3yxmH6a.js} +0 -0
- /package/dist/{useSortable-DHjtZSEd.js → useSortable-BVqlJRBR.js} +0 -0
- /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-NmBM5V_4.js} +0 -0
- /package/dist/{vReveal-Czsb7zQC.js → vReveal-D9k0jADx.js} +0 -0
- /package/dist/{vSpecular-CQFmLNzA.js → vSpecular-EX7loENl.js} +0 -0
|
@@ -67,16 +67,35 @@ type __VLS_Props = {
|
|
|
67
67
|
* (often raw-config-key) label. Default `false` (standalone behavior).
|
|
68
68
|
*/
|
|
69
69
|
hideLabel?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* BC.W-CONTROL-SMOOTH move C (kf-G3) — lay the field on the HORIZONTAL axis
|
|
72
|
+
* (label beside control, not above) for dense inline forms. ADDITIVE +
|
|
73
|
+
* default `false`: a bare `<LabeledField>` is byte-identical to HEAD (the
|
|
74
|
+
* stacked label-over-control layout). Pairs with the `#action` slot — a
|
|
75
|
+
* horizontal labeled control carrying a trailing action affordance is the
|
|
76
|
+
* REQ-sec20 horizontal-action case the kf-G3 row booked.
|
|
77
|
+
*/
|
|
78
|
+
horizontal?: boolean;
|
|
70
79
|
};
|
|
71
80
|
declare var __VLS_7: {
|
|
72
81
|
errorId: string;
|
|
73
82
|
controlId: string;
|
|
74
83
|
labelledBy: string;
|
|
75
|
-
}, __VLS_9: {
|
|
84
|
+
}, __VLS_9: {
|
|
85
|
+
controlId: string;
|
|
86
|
+
}, __VLS_11: {
|
|
87
|
+
errorId: string;
|
|
88
|
+
controlId: string;
|
|
89
|
+
labelledBy: string;
|
|
90
|
+
}, __VLS_13: {};
|
|
76
91
|
type __VLS_Slots = {} & {
|
|
77
92
|
default?: (props: typeof __VLS_7) => any;
|
|
78
93
|
} & {
|
|
79
|
-
|
|
94
|
+
action?: (props: typeof __VLS_9) => any;
|
|
95
|
+
} & {
|
|
96
|
+
default?: (props: typeof __VLS_11) => any;
|
|
97
|
+
} & {
|
|
98
|
+
error?: (props: typeof __VLS_13) => any;
|
|
80
99
|
};
|
|
81
100
|
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
82
101
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
@@ -72,6 +72,20 @@ export interface MetricRowProps {
|
|
|
72
72
|
* this to their active-row gating (e.g. the metric being sampled).
|
|
73
73
|
*/
|
|
74
74
|
active?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* BC.W-CONTROL-CUSTOM (CP1, the speedtest-AX `data-protagonist` fold) —
|
|
77
|
+
* marks this row as the ONE focal/protagonist metric per surface. When
|
|
78
|
+
* `true`, the value lifts to the emphasis register (the heavier
|
|
79
|
+
* `--metric-row-value-weight-emphasis` rung) and a `data-protagonist`
|
|
80
|
+
* attribute lands on the row so a consumer can re-tint the focal metric.
|
|
81
|
+
*
|
|
82
|
+
* This is the ONE focal emphasis event per surface (the W-SUFFUSE
|
|
83
|
+
* one-color-event proportion) — exactly one row per <MetricStack> should
|
|
84
|
+
* be the protagonist. The magnitude stays a `--metric-row-*` token read
|
|
85
|
+
* with a fallback, so a `:root`/per-row override of the emphasis weight
|
|
86
|
+
* cascades. A bare (`protagonist`-unset) row is byte-identical.
|
|
87
|
+
*/
|
|
88
|
+
protagonist?: boolean;
|
|
75
89
|
class?: HTMLAttributes["class"];
|
|
76
90
|
}
|
|
77
91
|
declare var __VLS_1: {}, __VLS_8: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {}, __VLS_16: {};
|
|
@@ -94,6 +108,7 @@ declare const __VLS_base: import("vue").DefineComponent<MetricRowProps, {}, {},
|
|
|
94
108
|
iconSize: number;
|
|
95
109
|
digitCount: number;
|
|
96
110
|
colorTinted: boolean;
|
|
111
|
+
protagonist: boolean;
|
|
97
112
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
98
113
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
99
114
|
declare const _default: typeof __VLS_export;
|
|
@@ -12,6 +12,14 @@ export interface PagerDotsProps {
|
|
|
12
12
|
windowFit?: number;
|
|
13
13
|
/** Encapsulate the rail in the glass pager pill chassis. Default true. */
|
|
14
14
|
ring?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* The ARIA register. `"tabs"` (default, byte-identical) is the carousel
|
|
17
|
+
* panel-nav register (`role="tablist"`/`role="tab"` + `aria-selected`);
|
|
18
|
+
* `"group"` is the full-viewport deck PRESENTATION register
|
|
19
|
+
* (`role="group"`/`aria-current`) the `<DeckPager>` selects. ONE windowing
|
|
20
|
+
* oracle, two aria registers — the `pagerWindow` math is NEVER re-forked.
|
|
21
|
+
*/
|
|
22
|
+
pattern?: "tabs" | "group";
|
|
15
23
|
/** Accessible name for the rail group. */
|
|
16
24
|
ariaLabel?: string;
|
|
17
25
|
/** Additional classes for the rail root. */
|
|
@@ -32,6 +40,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
|
|
|
32
40
|
"onUpdate:active"?: ((value: number) => any) | undefined;
|
|
33
41
|
}>, {
|
|
34
42
|
orientation: "horizontal" | "vertical";
|
|
43
|
+
pattern: "tabs" | "group";
|
|
35
44
|
ariaLabel: string;
|
|
36
45
|
ring: boolean;
|
|
37
46
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface PagerWindow {
|
|
2
|
+
/** The 0-based slide indices to render as dots. */
|
|
3
|
+
shown: number[];
|
|
4
|
+
/** The window is clipped at the start (a dimmed leading edge dot). */
|
|
5
|
+
clippedStart: boolean;
|
|
6
|
+
/** The window is clipped at the end (a dimmed trailing edge dot). */
|
|
7
|
+
clippedEnd: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function pagerWindow(total: number, activeIndex: number, fit: number): PagerWindow;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { PaperGridConfig } from "./constants";
|
|
2
|
+
/**
|
|
3
|
+
* PaperGrid — a liquid AA-grid: evenly-spaced LARGER lines on a slowly breathing
|
|
4
|
+
* curl-flow sheet.
|
|
5
|
+
*
|
|
6
|
+
* A calm engineering-graph-paper grid (evenly-spaced, LARGE cells, a crisp fine rule with
|
|
7
|
+
* a bolder major rule every 5 cells) drawn on a slowly breathing liquid sheet — adjacent
|
|
8
|
+
* lines bow and flow TOGETHER as if the grid is ruled on a gently rippling pond, never a
|
|
9
|
+
* per-line jitter. WebGPU-FIRST: a pure fullscreen fragment pass (the aurora/concentric
|
|
10
|
+
* shape-class) computes the grid at a curl-warped coordinate per pixel via the Ben Golus
|
|
11
|
+
* derivative-AA distance function (constant device-pixel-crisp lines, the CSS-blur kill),
|
|
12
|
+
* the Iñigo Quílez domain warp (the "liquid"), and the Bridson divergence-free curl flow
|
|
13
|
+
* (WHY it's liquid not noise). It composes `usePaperGrid` → the `createGpuSubstrate` picker
|
|
14
|
+
* over the ONE canvas lifecycle leaf (offscreen-pause, live-PRM freeze, consumer-owned DPR)
|
|
15
|
+
* — it never bootstraps its own context.
|
|
16
|
+
*
|
|
17
|
+
* The DEFAULT line ink is the warm-cream `--foreground` library identity (resolved live at
|
|
18
|
+
* mount); the demo themes it through a PRESET (presets-in-consumers — never a library
|
|
19
|
+
* token). The grid suffuses over the page (transparent ground) — teal-on-navy is gone.
|
|
20
|
+
*/
|
|
21
|
+
type __VLS_Props = {
|
|
22
|
+
/** The full author schema (the studio's `useConfiguratorState` model). */
|
|
23
|
+
config?: PaperGridConfig;
|
|
24
|
+
/**
|
|
25
|
+
* The declarative WCAG-2.2.2 pause seam. `v-model:paused` parks the render loop
|
|
26
|
+
* (the substrate's `manual` suspend) when `true`. Wire `<DockBackgroundToggle>`'s
|
|
27
|
+
* `@update:paused` to this `v-model`.
|
|
28
|
+
*/
|
|
29
|
+
paused?: boolean;
|
|
30
|
+
};
|
|
31
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
32
|
+
pause: () => void;
|
|
33
|
+
resume: () => void;
|
|
34
|
+
wake: () => void;
|
|
35
|
+
renderAt: (timeSec: number) => void;
|
|
36
|
+
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
37
|
+
"update:paused": (value: boolean) => any;
|
|
38
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
39
|
+
"onUpdate:paused"?: ((value: boolean) => any) | undefined;
|
|
40
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
41
|
+
declare const _default: typeof __VLS_export;
|
|
42
|
+
export default _default;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/** A 2-vector. */
|
|
2
|
+
export interface Vec2 {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
}
|
|
6
|
+
/** The curl central-difference epsilon (matches `flow.glsl.ts` / `flow.wgsl.ts`). */
|
|
7
|
+
export declare const CURL_EPS = 0.012;
|
|
8
|
+
/** A 3-octave scalar fbm potential (the host noise basis the curl operator wraps). */
|
|
9
|
+
export declare function potentialFBM(p: Vec2): number;
|
|
10
|
+
/** The 2D curl of the scalar fbm potential (the JS twin of `curlFBM`). */
|
|
11
|
+
export declare function curlFBM(p: Vec2): Vec2;
|
|
12
|
+
/**
|
|
13
|
+
* The IQ domain warp displacement at `g` (in grid space) at time `t`. TWO counter-flowing
|
|
14
|
+
* curl terms at different scales/speeds (Alex Harri counter-flow — never visibly loops):
|
|
15
|
+
*
|
|
16
|
+
* g += curlFBM(g·warpScale + t·warpSpeed ) · amplitude
|
|
17
|
+
* g += curlFBM(g·warpScale2 − t·warpSpeed2) · (amplitude·0.5)
|
|
18
|
+
*
|
|
19
|
+
* Returns the warp DISPLACEMENT (the caller adds it onto `g`). A SHALLOW warp (one level,
|
|
20
|
+
* LOW amplitude, LOW spatial frequency) keeps the lines a clearly-readable grid — the
|
|
21
|
+
* inverse-coherence target (LARGE structures from LOW spatial frequency).
|
|
22
|
+
*/
|
|
23
|
+
export declare function curlWarp(g: Vec2, t: number, warpScale: number, warpSpeed: number, warpScale2: number, warpSpeed2: number, amplitude: number): Vec2;
|
|
24
|
+
/**
|
|
25
|
+
* The LOCAL cursor-bulge displacement at `g` (grid space). A Gaussian falloff about
|
|
26
|
+
* `cursor` presses the grid AWAY from (repel, strength > 0) or TOWARD (attract, strength
|
|
27
|
+
* < 0) the cursor inside `radius`, coherent everywhere else (the iOS-control-centre feel):
|
|
28
|
+
*
|
|
29
|
+
* bulge = strength · exp(−d²/(2·radius²)); g += normalize(g−cursor) · bulge
|
|
30
|
+
*
|
|
31
|
+
* Returns the bulge DISPLACEMENT (the caller adds it onto `g`). The sign of `strength`
|
|
32
|
+
* picks repel (+) vs attract (−).
|
|
33
|
+
*/
|
|
34
|
+
export declare function cursorBulge(g: Vec2, cursor: Vec2, strength: number, radius: number): Vec2;
|
|
35
|
+
/**
|
|
36
|
+
* The Ben Golus derivative-AA grid line coverage at `g` (grid space). `targetWidth` is the
|
|
37
|
+
* desired line half-width in GRID UNITS (the caller passes `lineWidthPx / minorPitchPx` so
|
|
38
|
+
* the line is N device-pixels wide); `uvDeriv` is the per-axis screen-space derivative of
|
|
39
|
+
* `g` (in the shaders `length(vec2(dFdx(g), dFdy(g)))`; in JS the caller passes it
|
|
40
|
+
* analytically so the path is reproducible). Returns line coverage [0..1].
|
|
41
|
+
*
|
|
42
|
+
* The Golus pipeline (transcribed by the WGSL/GLSL EXACTLY):
|
|
43
|
+
* gridUV = 1 − |fract(g)·2 − 1| (triangle wave: 0 at line, 1 at center)
|
|
44
|
+
* drawW = clamp(targetWidth, uvDeriv, 0.5)
|
|
45
|
+
* lineAA = uvDeriv·1.5
|
|
46
|
+
* grid2 = smoothstep(drawW+lineAA, drawW−lineAA, gridUV)
|
|
47
|
+
* grid2 *= clamp(targetWidth/drawW, 0, 1) (preserve thin-line intensity)
|
|
48
|
+
* grid2 = mix(grid2, targetWidth, clamp(uvDeriv·2−1, 0, 1)) (Moiré suppression)
|
|
49
|
+
* line = max(grid2.x, grid2.y)
|
|
50
|
+
*/
|
|
51
|
+
export declare function gridCoverage(g: Vec2, targetWidth: number, uvDeriv: Vec2): number;
|
|
52
|
+
/**
|
|
53
|
+
* The complete paper-grid sample at a domain `uv` (the round-trip anchor). Composes the
|
|
54
|
+
* warp + the bulge + the two-tier Golus coverage EXACTLY as the WGSL/GLSL `fs_main` does,
|
|
55
|
+
* returning the premultiplied-alpha (the page reads through the troughs). `uvDeriv` is the
|
|
56
|
+
* FIXED analytic per-axis derivative (JS has no fragment derivatives); the shaders compute
|
|
57
|
+
* it from `dpdx`/`dpdy`. Returns `{ line, alpha }` — the line coverage + the global alpha.
|
|
58
|
+
*/
|
|
59
|
+
export interface PaperGridSampleParams {
|
|
60
|
+
/** The grid scale (view / minorPitch → LARGER cells = smaller scale). */
|
|
61
|
+
gridScale: number;
|
|
62
|
+
warpScale: number;
|
|
63
|
+
warpSpeed: number;
|
|
64
|
+
warpScale2: number;
|
|
65
|
+
warpSpeed2: number;
|
|
66
|
+
amplitude: number;
|
|
67
|
+
/** The cursor in GRID space. */
|
|
68
|
+
cursor: Vec2;
|
|
69
|
+
bulgeStrength: number;
|
|
70
|
+
bulgeRadius: number;
|
|
71
|
+
/** +1 repel, −1 attract. */
|
|
72
|
+
bulgeMode: number;
|
|
73
|
+
/** Golus target half-widths in grid units (minor + major). */
|
|
74
|
+
targetWidth: number;
|
|
75
|
+
targetWidthMajor: number;
|
|
76
|
+
/** How many minor cells per major rule. */
|
|
77
|
+
majorEvery: number;
|
|
78
|
+
minorAlpha: number;
|
|
79
|
+
majorAlpha: number;
|
|
80
|
+
/** The GLOBAL subtlety knob (suffusion → tiny). */
|
|
81
|
+
fieldAlpha: number;
|
|
82
|
+
/** The FIXED per-axis derivative (the JS round-trip; shaders use dpdx/dpdy). */
|
|
83
|
+
uvDeriv: Vec2;
|
|
84
|
+
}
|
|
85
|
+
export declare function samplePaperGrid(uv: Vec2, t: number, p: PaperGridSampleParams): {
|
|
86
|
+
line: number;
|
|
87
|
+
alpha: number;
|
|
88
|
+
};
|
|
89
|
+
/** The grid scale from the view + minor pitch (LARGER cells = smaller scale). */
|
|
90
|
+
export declare function gridScaleFor(viewExtentPx: number, minorPitchPx: number): number;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { WebGLCanvasFrame } from "../../../../composables/glass/webgl/useWebGLCanvas";
|
|
2
|
+
import type { PaperGridConfig } from "../constants";
|
|
3
|
+
import { type Vec2 } from "./paperGrid";
|
|
4
|
+
export interface PaperGridGLSetupDeps {
|
|
5
|
+
canvas: HTMLCanvasElement;
|
|
6
|
+
config: PaperGridConfig;
|
|
7
|
+
getCursor: () => Vec2;
|
|
8
|
+
shouldContinue: () => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* The per-frame pointer hook — usePaperGrid advances the shared pointer field + derives
|
|
11
|
+
* the transient cursor here (the no-own-rAF discipline). ZERO own rAF.
|
|
12
|
+
*/
|
|
13
|
+
onFrame?: (timeSec: number) => void;
|
|
14
|
+
}
|
|
15
|
+
/** Build the `setupGL(gl)` callback the `createGpuSubstrate` WebGL2 path invokes. */
|
|
16
|
+
export declare function createPaperGridGLSetup(deps: PaperGridGLSetupDeps): (gl: WebGL2RenderingContext) => WebGLCanvasFrame;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { WebGPUCanvasFrame } from "../../../../composables/glass/webgpu/useWebGPUCanvas";
|
|
2
|
+
import type { PaperGridConfig } from "../constants";
|
|
3
|
+
import type { Vec2 } from "./paperGrid";
|
|
4
|
+
export interface PaperGridWGPUSetupDeps {
|
|
5
|
+
canvas: HTMLCanvasElement;
|
|
6
|
+
config: PaperGridConfig;
|
|
7
|
+
/** The transient pointer cursor in GRID space — re-read each frame (the pointer bulge). */
|
|
8
|
+
getCursor: () => Vec2;
|
|
9
|
+
/** Demand-gate (the renderer's quiescence layer — substrate-agnostic). */
|
|
10
|
+
shouldContinue: () => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* The per-frame pointer hook — usePaperGrid advances the shared `usePointerVelocityField`
|
|
13
|
+
* here (the no-own-rAF discipline: the renderer's frame loop FEEDS `tick(delta)`) and
|
|
14
|
+
* derives the transient cursor. ZERO own rAF.
|
|
15
|
+
*/
|
|
16
|
+
onFrame?: (timeSec: number) => void;
|
|
17
|
+
}
|
|
18
|
+
/** Build the paper-grid `setupWGPU(device, context, format)` callback. */
|
|
19
|
+
export declare function createPaperGridWGPUSetup(deps: PaperGridWGPUSetupDeps): (device: GPUDevice, context: GPUCanvasContext, format: GPUTextureFormat) => WebGPUCanvasFrame;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PaperGridConfig } from "../constants";
|
|
2
|
+
import type { Vec2 } from "./paperGrid";
|
|
3
|
+
export declare const PAPER_GRID_UNIFORM_BYTES = 144;
|
|
4
|
+
export interface PaperGridUniformScratch {
|
|
5
|
+
buffer: ArrayBuffer;
|
|
6
|
+
f32: Float32Array;
|
|
7
|
+
}
|
|
8
|
+
export declare function createPaperGridScratch(): PaperGridUniformScratch;
|
|
9
|
+
/**
|
|
10
|
+
* Pack the paper-grid uniforms in place. `viewExtentPx` is the canvas backing-store extent
|
|
11
|
+
* the grid scale derives from (so the cell pitch is honest in device px); `cursor` is the
|
|
12
|
+
* transient pointer in GRID space (the renderer derives it from `usePointerVelocityField`);
|
|
13
|
+
* `aspect` corrects the domain x. The line ink resolves the warm `--foreground` identity
|
|
14
|
+
* (the demo themes it via a preset, never a token edit).
|
|
15
|
+
*/
|
|
16
|
+
export declare function packPaperGridUniforms(scratch: PaperGridUniformScratch, config: PaperGridConfig, timeSec: number, aspect: number, viewExtentPx: number, cursor: Vec2): PaperGridUniformScratch;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type Ref } from "vue";
|
|
2
|
+
import { type GpuBackend } from "../../../../composables/glass/webgpu/useGpuSubstrate";
|
|
3
|
+
import type { PaperGridConfig } from "../constants";
|
|
4
|
+
export interface UsePaperGridOptions {
|
|
5
|
+
config: PaperGridConfig;
|
|
6
|
+
/** `"capture"` → renderAt-only (the deterministic π capture path). Default `"live"`. */
|
|
7
|
+
mode?: "live" | "capture";
|
|
8
|
+
}
|
|
9
|
+
/** The uniform handle a consumer wires its lifecycle against (backend-agnostic). */
|
|
10
|
+
export interface PaperGridHandle {
|
|
11
|
+
/** The resolved backend (`"webgpu"` where supported, else the WebGL2 GLSL fallback). */
|
|
12
|
+
readonly backend: GpuBackend;
|
|
13
|
+
/** Park the loop (the WCAG-2.2.2 pause seam — `DockBackgroundToggle` wires this). */
|
|
14
|
+
pause: () => void;
|
|
15
|
+
/** Re-arm the loop. */
|
|
16
|
+
resume: () => void;
|
|
17
|
+
/** Re-arm a parked loop on demand (a pointer that re-introduced motion). */
|
|
18
|
+
wake: () => void;
|
|
19
|
+
/** Draw one frame out-of-loop (capture / thumbnail). */
|
|
20
|
+
renderAt: (timeSec: number) => void;
|
|
21
|
+
/** The live `prefers-reduced-motion: reduce` state. */
|
|
22
|
+
readonly reducedMotion: boolean;
|
|
23
|
+
/** Tear down the renderer + release GPU/GL resources. */
|
|
24
|
+
dispose: () => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Mount the paper-grid renderer on `canvasRef`. The WebGPU primary + the WebGL2 fallback are
|
|
28
|
+
* BOTH pure fullscreen fragment passes evaluating the SAME liquid grid (the ONE math source
|
|
29
|
+
* `paperGrid.ts`), so the picker is the only seam. Returns the uniform lifecycle handle.
|
|
30
|
+
*/
|
|
31
|
+
export declare function usePaperGrid(canvasRef: Ref<HTMLCanvasElement | null>, options: UsePaperGridOptions): PaperGridHandle;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { OklchStop } from "../../../composables/color";
|
|
2
|
+
/** The WGSL `#define` cap mirror (the grid is a fullscreen fragment — no array caps needed). */
|
|
3
|
+
export declare const PAPER_GRID_MAX_MAJOR_EVERY = 16;
|
|
4
|
+
/**
|
|
5
|
+
* The full author schema — the studio's `useConfiguratorState` model (commit-on-write — a
|
|
6
|
+
* single surface). Every field is a tunable the demo configurator drives; the SFC resolves
|
|
7
|
+
* it into the uniform table.
|
|
8
|
+
*/
|
|
9
|
+
export interface PaperGridConfig {
|
|
10
|
+
/** The grid cell pitch in CSS px — LARGER = bigger cells (the user's "LARGER"). */
|
|
11
|
+
cellSize: number;
|
|
12
|
+
/** How many minor cells per major rule (the kf `--graph-major` 5rem/1rem ratio). */
|
|
13
|
+
majorEvery: number;
|
|
14
|
+
/** Minor line alpha — the calm hairline (≈ kf 3%). */
|
|
15
|
+
minorAlpha: number;
|
|
16
|
+
/** Major rule alpha — the bolder tier (kf 11%, above the 10% floor). */
|
|
17
|
+
majorAlpha: number;
|
|
18
|
+
/** Line width in device-px — one crisp pixel via Golus AA. */
|
|
19
|
+
lineWidth: number;
|
|
20
|
+
/** Wave amplitude in CELL units — how far the lines bow (the liquid; subtle = "felt, not loud"). */
|
|
21
|
+
waveAmplitude: number;
|
|
22
|
+
/** Wave spatial frequency (λ multiple) — LOW = the whole sheet bows together (coherent, not noise). */
|
|
23
|
+
waveScale: number;
|
|
24
|
+
/** The slow warp drift (ω-scale). */
|
|
25
|
+
waveSpeed: number;
|
|
26
|
+
/** The GLOBAL subtlety knob — 1 demo, ~0.12 suffusion (the site-wide background). */
|
|
27
|
+
fieldAlpha: number;
|
|
28
|
+
/** How far the cursor pushes the grid (the local bulge). */
|
|
29
|
+
bulgeStrength: number;
|
|
30
|
+
/** The Gaussian falloff radius in CELL units. */
|
|
31
|
+
bulgeRadius: number;
|
|
32
|
+
/** Push grid away (repel) or toward (attract) the cursor. */
|
|
33
|
+
bulgeMode: "repel" | "attract";
|
|
34
|
+
/** The line ink (the warm `--foreground` identity by default — NEVER teal-on-navy). */
|
|
35
|
+
lineColor: OklchStop;
|
|
36
|
+
/** The ground (default transparent so it suffuses over the page). */
|
|
37
|
+
background: OklchStop | "transparent";
|
|
38
|
+
/** Pointer bulge (§4/§8) — on (demo) / off (suffusion). */
|
|
39
|
+
interactive: boolean;
|
|
40
|
+
/** ONE static frame then park under `prefers-reduced-motion: reduce`. */
|
|
41
|
+
respectReducedMotion: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The warm-cream identity line ink (the library default — NOT a themed hue). A warm-amber
|
|
45
|
+
* ink in the `--foreground` family (OKLab hue ~62, the BA.W-NO-GRAY warm identity) so the
|
|
46
|
+
* grid reads as warm ink over the page; the SFC resolves the live `--foreground` token at
|
|
47
|
+
* mount, this stop is the SSR/no-token fallback identity. A consumer (the demo) themes it
|
|
48
|
+
* through a PRESET, never a token edit. NEVER teal/navy (h in [180,280] reds P5).
|
|
49
|
+
*/
|
|
50
|
+
export declare const WARM_IDENTITY_INK: OklchStop;
|
|
51
|
+
/**
|
|
52
|
+
* The shipped warm-identity default config — evenly-spaced, LARGE 64px cells, a crisp fine
|
|
53
|
+
* rule with a bolder major rule every 5 cells, on a slowly breathing liquid curl-flow sheet
|
|
54
|
+
* (research/viz/paper-grid.md §6). SUBTLE + LARGE + evenly-spaced — the user's binding
|
|
55
|
+
* aesthetic. `fieldAlpha: 1` is the demo lead; the suffusion preset drops it to ~0.12.
|
|
56
|
+
*/
|
|
57
|
+
export declare const DEFAULT_PAPER_GRID_CONFIG: PaperGridConfig;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as PaperGrid } from "./PaperGrid.vue";
|
|
2
|
+
export { usePaperGrid, type PaperGridHandle, type UsePaperGridOptions, } from "./composables/usePaperGrid";
|
|
3
|
+
export { type PaperGridConfig, DEFAULT_PAPER_GRID_CONFIG, WARM_IDENTITY_INK, PAPER_GRID_MAX_MAJOR_EVERY, } from "./constants";
|
|
4
|
+
export { type Vec2, type PaperGridSampleParams, potentialFBM, curlFBM, curlWarp, cursorBulge, gridCoverage, samplePaperGrid, gridScaleFor, CURL_EPS, } from "./composables/paperGrid";
|
|
5
|
+
export type { OklchStop } from "../../../composables/color";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** The full-screen-triangle vertex shader (the substrate's standard fullscreen pass). */
|
|
2
|
+
export declare const PAPER_GRID_VERT_GLSL = "#version 300 es\nprecision highp float;\nin vec2 aPosition;\nout vec2 vUv;\nvoid main() {\n vUv = aPosition; // [-1,1]\u00B2 domain\n gl_Position = vec4(aPosition, 0.0, 1.0);\n}";
|
|
3
|
+
/** The paper-grid fragment source — the liquid AA-grid (the same field as the WGSL primary). */
|
|
4
|
+
export declare const PAPER_GRID_FRAG_GLSL = "#version 300 es\nprecision highp float;\n\n#define TAU 6.283185307179586\n\nin vec2 vUv;\nout vec4 fragColor;\n\nuniform float uTime;\nuniform float uGridScale;\nuniform float uMajorEvery;\nuniform float uAspect;\nuniform vec4 uWarp; // (warpScale, warpSpeed, warpScale2, warpSpeed2)\nuniform float uAmplitude;\nuniform vec4 uGrid; // (targetWidth, targetWidthMajor, minorAlpha, majorAlpha)\nuniform float uFieldAlpha;\nuniform float uHasBackground;\nuniform vec4 uCursor; // (cursorX, cursorY, bulgeStrength, bulgeRadius)\nuniform float uBulgeMode; // +1 repel / \u22121 attract\nuniform vec3 uLineColor; // linear-sRGB ink\nuniform vec3 uBg; // linear-sRGB themed bg\n\n\nfloat srgbToLinearCh(float c) {\n return c <= 0.04045 ? c / 12.92 : pow((c + 0.055) / 1.055, 2.4);\n}\nvec3 srgbToLinear(vec3 c) {\n return vec3(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfloat linearToSrgbCh(float c) {\n return c <= 0.0031308 ? c * 12.92 : 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nvec3 linearToSrgb(vec3 c) {\n return vec3(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}\n\n// The shared divergence-free 2D-curl operator (flow.glsl.ts) \u2014 the prototype declares\n// potentialFBM; the host defines its BODY below the splice (GLSL forward-declaration).\n\nconst float CURL_EPS = 0.012;\n\n// Scalar fbm potential psi \u2014 the host's noise basis, wrapped so the curl operator is\n// basis-agnostic. A host carrying its own fbm defines this as: return fbm(p);\nfloat potentialFBM(vec2 p);\n\n// \u2207\u00D7\u03C8 in 2D \u2014 the divergence-free flow direction. Central finite differences of the\n// scalar potential give the partials; the cross-pairing (\u2202y, \u2212\u2202x) is the 2D curl.\nvec2 curlFBM(vec2 p) {\n float dx = potentialFBM(p + vec2(CURL_EPS, 0.0)) - potentialFBM(p - vec2(CURL_EPS, 0.0));\n float dy = potentialFBM(p + vec2(0.0, CURL_EPS)) - potentialFBM(p - vec2(0.0, CURL_EPS));\n // \u03C8-gradient is (dx, dy)/(2\u00B7eps); the curl rotates it 90\u00B0: (\u2202\u03C8/\u2202y, \u2212\u2202\u03C8/\u2202x).\n vec2 g = vec2(dx, dy) / (2.0 * CURL_EPS);\n return vec2(g.y, -g.x);\n}\n\n\n// \u2500\u2500 The host noise basis (transcribes paperGrid.ts hash21/valueNoise/potentialFBM) \u2500\u2500\nfloat hash21(float x, float y) {\n float px = fract(x * 0.1031);\n float py = fract(y * 0.1031);\n float pz = fract(x * 0.1031);\n float d = px * (py + 33.33) + py * (pz + 33.33) + pz * (px + 33.33);\n px += d;\n py += d;\n pz += d;\n return fract((px + py) * pz);\n}\n\nfloat valueNoise(float x, float y) {\n float ix = floor(x);\n float iy = floor(y);\n float fx = x - ix;\n float fy = y - iy;\n float ux = fx * fx * fx * (fx * (fx * 6.0 - 15.0) + 10.0);\n float uy = fy * fy * fy * (fy * (fy * 6.0 - 15.0) + 10.0);\n float a = hash21(ix, iy);\n float b = hash21(ix + 1.0, iy);\n float c = hash21(ix, iy + 1.0);\n float d2 = hash21(ix + 1.0, iy + 1.0);\n return mix(mix(a, b, ux), mix(c, d2, ux), uy);\n}\n\n// The 3-octave scalar fbm potential \u2014 the curl chunk's forward-declared potentialFBM body.\nfloat potentialFBM(vec2 p) {\n float v = 0.0;\n float amp = 0.5;\n float freq = 1.0;\n float px = p.x;\n float py = p.y;\n for (int i = 0; i < 3; i++) {\n v += amp * valueNoise(px * freq, py * freq);\n // FBM_ROT mat2(0.8, 0.6, -0.6, 0.8) \u2014 same rotation as the shared chunk.\n float rx = 0.8 * px - 0.6 * py;\n float ry = 0.6 * px + 0.8 * py;\n px = rx;\n py = ry;\n freq *= 2.0;\n amp *= 0.5;\n }\n return v;\n}\n\n// \u2500\u2500 \u00A73 The global curl-flow domain warp (transcribes paperGrid.ts curlWarp) \u2500\u2500\nvec2 curlWarp(vec2 g, float t) {\n float warpScale = uWarp.x;\n float warpSpeed = uWarp.y;\n float warpScale2 = uWarp.z;\n float warpSpeed2 = uWarp.w;\n vec2 a = curlFBM(vec2(g.x * warpScale + t * warpSpeed, g.y * warpScale + t * warpSpeed));\n vec2 b = curlFBM(vec2(g.x * warpScale2 - t * warpSpeed2, g.y * warpScale2 - t * warpSpeed2));\n return vec2(a.x * uAmplitude + b.x * uAmplitude * 0.5, a.y * uAmplitude + b.y * uAmplitude * 0.5);\n}\n\n// \u2500\u2500 \u00A74 The local pointer bulge (transcribes paperGrid.ts cursorBulge) \u2500\u2500\nvec2 cursorBulge(vec2 g) {\n vec2 cursor = uCursor.xy;\n float strength = uCursor.z * uBulgeMode; // bulgeStrength \u00D7 bulgeMode (+repel / \u2212attract)\n float radius = max(uCursor.w, 1e-4);\n vec2 toC = g - cursor;\n float d = length(toC);\n float bulge = strength * exp(-(d * d) / (2.0 * radius * radius));\n if (d < 1e-5) return vec2(0.0);\n return (toC / d) * bulge;\n}\n\n// \u2500\u2500 \u00A71 The Ben Golus derivative-AA grid coverage (transcribes paperGrid.ts gridCoverage) \u2500\u2500\nfloat gridCoverage(vec2 g, float targetWidth, vec2 uvDeriv) {\n vec2 gridUV = 1.0 - abs(fract(g) * 2.0 - 1.0);\n vec2 drawWidth = clamp(vec2(targetWidth), uvDeriv, vec2(0.5));\n vec2 lineAA = uvDeriv * 1.5;\n vec2 grid2 = smoothstep(drawWidth + lineAA, drawWidth - lineAA, gridUV);\n grid2 *= clamp(vec2(targetWidth) / max(drawWidth, vec2(1e-6)), vec2(0.0), vec2(1.0));\n grid2 = mix(grid2, vec2(targetWidth), clamp(uvDeriv * 2.0 - 1.0, vec2(0.0), vec2(1.0)));\n return max(grid2.x, grid2.y);\n}\n\nvoid main() {\n float aspect = max(uAspect, 1e-4);\n vec2 uv = vec2(vUv.x * aspect, vUv.y);\n\n // \u00A75 the per-pixel kernel: warp + bulge the grid coordinate, then two-tier Golus.\n vec2 g = uv * uGridScale;\n g += curlWarp(g, uTime);\n g += cursorBulge(g);\n\n // The screen-space derivative of g (Golus): length(vec2(dFdx, dFdy)) per axis (the actual\n // backing-store pixel \u2014 NOT a CSS sub-pixel, the blur-kill).\n vec2 dv = vec2(\n length(vec2(dFdx(g.x), dFdy(g.x))),\n length(vec2(dFdx(g.y), dFdy(g.y)))\n );\n\n float minor = gridCoverage(g, uGrid.x, dv);\n float me = max(uMajorEvery, 1.0);\n float major = gridCoverage(g / me, uGrid.y, dv / me);\n float line = max(minor * uGrid.z, major * uGrid.w);\n\n vec3 col = clamp(linearToSrgb(uLineColor), vec3(0.0), vec3(1.0));\n if (uHasBackground > 0.5) {\n vec3 bg = clamp(linearToSrgb(uBg), vec3(0.0), vec3(1.0));\n float a = line * uFieldAlpha;\n fragColor = vec4(mix(bg, col, a), 1.0);\n return;\n }\n float a = line * uFieldAlpha;\n fragColor = vec4(col * a, a); // premultiplied over transparent\n}";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PAPER_GRID_WGSL = "\nconst TAU: f32 = 6.283185307179586;\n\n// \u2500\u2500 Paper-grid uniforms (the typed-struct source-of-truth \u2014 see uniformBridgeWGPU.ts) \u2500\u2500\nstruct PaperGridUniforms {\n // u0: (uTime, uGridScale, uMinorPitch, uMajorEvery)\n u0: vec4<f32>,\n // warp: (uWarpScale, uWarpSpeed, uWarpScale2, uWarpSpeed2)\n warp: vec4<f32>,\n // warp2: (uAmplitude, uAspect, _pad, _pad)\n warp2: vec4<f32>,\n // grid: (uTargetWidth, uTargetWidthMajor, uMinorAlpha, uMajorAlpha)\n grid: vec4<f32>,\n // field: (uFieldAlpha, uHasBackground, _pad, _pad)\n field: vec4<f32>,\n // cursor: (uCursorX, uCursorY, uBulgeStrength, uBulgeRadius)\n cursor: vec4<f32>,\n // cursor2: (uBulgeMode, uInteractive, _pad, _pad)\n cursor2: vec4<f32>,\n // line: (uLineColor.rgb (linear), _pad)\n line: vec4<f32>,\n // bg: (uBg.rgb (linear), _pad)\n bg: vec4<f32>,\n};\n\n@group(0) @binding(0) var<uniform> u: PaperGridUniforms;\n\n\nfn srgbToLinearCh(c: f32) -> f32 {\n if (c <= 0.04045) { return c / 12.92; }\n return pow((c + 0.055) / 1.055, 2.4);\n}\nfn srgbToLinear(c: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfn linearToSrgbCh(c: f32) -> f32 {\n if (c <= 0.0031308) { return c * 12.92; }\n return 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nfn linearToSrgb(c: vec3<f32>) -> vec3<f32> {\n return vec3<f32>(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}\n\n// \u2500\u2500 The host noise basis (transcribes paperGrid.ts hash21/valueNoise/potentialFBM) \u2500\u2500\n// A quintic-faded 2D value-noise fbm potential \u2014 the SAME basis the dot-flow-field carries\n// (so the suite speaks ONE noise basis). DECLARED ABOVE the curl splice (WGSL has no forward\n// declaration \u2014 a function may only call one declared earlier).\nfn hash21(x: f32, y: f32) -> f32 {\n var px = fract(x * 0.1031);\n var py = fract(y * 0.1031);\n var pz = fract(x * 0.1031);\n let d = px * (py + 33.33) + py * (pz + 33.33) + pz * (px + 33.33);\n px = px + d;\n py = py + d;\n pz = pz + d;\n return fract((px + py) * pz);\n}\n\nfn valueNoise(x: f32, y: f32) -> f32 {\n let ix = floor(x);\n let iy = floor(y);\n let fx = x - ix;\n let fy = y - iy;\n let ux = fx * fx * fx * (fx * (fx * 6.0 - 15.0) + 10.0);\n let uy = fy * fy * fy * (fy * (fy * 6.0 - 15.0) + 10.0);\n let a = hash21(ix, iy);\n let b = hash21(ix + 1.0, iy);\n let c = hash21(ix, iy + 1.0);\n let d2 = hash21(ix + 1.0, iy + 1.0);\n return mix(mix(a, b, ux), mix(c, d2, ux), uy);\n}\n\n// The 3-octave scalar fbm potential \u2014 the host noise basis the curl operator wraps.\nfn potentialFBM(p: vec2f) -> f32 {\n var v = 0.0;\n var amp = 0.5;\n var freq = 1.0;\n var px = p.x;\n var py = p.y;\n for (var i = 0; i < 3; i = i + 1) {\n v = v + amp * valueNoise(px * freq, py * freq);\n // FBM_ROT mat2(0.8, 0.6, -0.6, 0.8) \u2014 same rotation as the shared chunk.\n let rx = 0.8 * px - 0.6 * py;\n let ry = 0.6 * px + 0.8 * py;\n px = rx;\n py = ry;\n freq = freq * 2.0;\n amp = amp * 0.5;\n }\n return v;\n}\n\n// The shared divergence-free 2D-curl operator (flow.wgsl.ts \u2014 the FIRST WGSL curl consumer).\n\nconst CURL_EPS: f32 = 0.012;\n\n// \u2207\u00D7\u03C8 in 2D \u2014 the divergence-free flow direction. Central finite differences of the\n// scalar potential give the partials; the cross-pairing (\u2202y, \u2212\u2202x) is the 2D curl.\nfn curlFBM(p: vec2f) -> vec2f {\n let dx = potentialFBM(p + vec2f(CURL_EPS, 0.0)) - potentialFBM(p - vec2f(CURL_EPS, 0.0));\n let dy = potentialFBM(p + vec2f(0.0, CURL_EPS)) - potentialFBM(p - vec2f(0.0, CURL_EPS));\n // \u03C8-gradient is (dx, dy)/(2\u00B7eps); the curl rotates it 90\u00B0: (\u2202\u03C8/\u2202y, \u2212\u2202\u03C8/\u2202x).\n let g = vec2f(dx, dy) / (2.0 * CURL_EPS);\n return vec2f(g.y, -g.x);\n}\n\n\n// \u2500\u2500 \u00A73 The \"liquid\": the global curl-flow domain warp (transcribes paperGrid.ts curlWarp) \u2500\u2500\n// TWO counter-flowing curl terms at different scales/speeds (Alex Harri counter-flow \u2014 never\n// visibly loops). A SHALLOW, LOW-frequency warp keeps the lines a clearly-readable grid.\nfn curlWarp(g: vec2f, t: f32) -> vec2f {\n let warpScale = u.warp.x;\n let warpSpeed = u.warp.y;\n let warpScale2 = u.warp.z;\n let warpSpeed2 = u.warp.w;\n let amp = u.warp2.x;\n let a = curlFBM(vec2f(g.x * warpScale + t * warpSpeed, g.y * warpScale + t * warpSpeed));\n let b = curlFBM(vec2f(g.x * warpScale2 - t * warpSpeed2, g.y * warpScale2 - t * warpSpeed2));\n return vec2f(a.x * amp + b.x * amp * 0.5, a.y * amp + b.y * amp * 0.5);\n}\n\n// \u2500\u2500 \u00A74 The pointer bulge: a LOCAL Gaussian warp (transcribes paperGrid.ts cursorBulge) \u2500\u2500\nfn cursorBulge(g: vec2f) -> vec2f {\n let cursor = u.cursor.xy;\n let strength = u.cursor.z * u.cursor2.x; // bulgeStrength \u00D7 bulgeMode (+repel / \u2212attract)\n let radius = max(u.cursor.w, 1e-4);\n let toC = g - cursor;\n let d = length(toC);\n let bulge = strength * exp(-(d * d) / (2.0 * radius * radius));\n if (d < 1e-5) { return vec2f(0.0); }\n return (toC / d) * bulge;\n}\n\n// \u2500\u2500 \u00A71 The crisp line: Ben Golus derivative-AA grid coverage (transcribes gridCoverage) \u2500\u2500\n// targetWidth is the line half-width in GRID UNITS (lineWidthPx / minorPitchPx); uvDeriv is\n// the per-axis screen-space derivative of g (length(vec2(dpdx, dpdy)) per axis). Returns\n// line coverage [0..1] \u2014 exactly N device-pixels wide at ANY DPR/zoom (the blur-kill).\nfn gridCoverage(g: vec2f, targetWidth: f32, uvDeriv: vec2f) -> f32 {\n // triangle wave per axis: 0 at a line, 1 at the cell center.\n let gridUV = 1.0 - abs(fract(g) * 2.0 - 1.0);\n let drawWidth = clamp(vec2f(targetWidth), uvDeriv, vec2f(0.5));\n let lineAA = uvDeriv * 1.5;\n // smoothstep with edge0 > edge1 (Golus) \u2192 a falling edge.\n var grid2 = smoothstep(drawWidth + lineAA, drawWidth - lineAA, gridUV);\n // preserve thin-line intensity where the line is sub-drawWidth.\n grid2 = grid2 * clamp(vec2f(targetWidth) / max(drawWidth, vec2f(1e-6)), vec2f(0.0), vec2f(1.0));\n // Moir\u00E9 suppression: fade toward the average where the cell packs tighter than a pixel.\n grid2 = mix(grid2, vec2f(targetWidth), clamp(uvDeriv * 2.0 - 1.0, vec2f(0.0), vec2f(1.0)));\n return max(grid2.x, grid2.y);\n}\n\n// Full-screen-triangle (the pilot idiom): NDC corners (-1,-1),(3,-1),(-1,3) cover the\n// viewport from a single 3-vertex draw \u2014 no vertex buffer.\nstruct VSOut {\n @builtin(position) pos: vec4f,\n @location(0) uv: vec2f, // domain [-1,1]\u00B2, aspect-corrected x\n};\n\n@vertex\nfn vs_main(@builtin(vertex_index) vi: u32) -> VSOut {\n var corners = array<vec2f, 3>(\n vec2f(-1.0, -1.0), vec2f(3.0, -1.0), vec2f(-1.0, 3.0),\n );\n let c = corners[vi];\n var out: VSOut;\n out.pos = vec4f(c, 0.0, 1.0);\n out.uv = vec2f(c.x, c.y);\n return out;\n}\n\n@fragment\nfn fs_main(in: VSOut) -> @location(0) vec4f {\n let aspect = max(u.warp2.y, 1e-4);\n // aspect-correct the domain x so the cells read square.\n let uv = vec2f(in.uv.x * aspect, in.uv.y);\n let t = u.u0.x;\n let gridScale = u.u0.y;\n\n // \u00A75 the per-pixel kernel: warp + bulge the grid coordinate, then two-tier Golus.\n var g = uv * gridScale;\n g = g + curlWarp(g, t);\n g = g + cursorBulge(g);\n\n // The screen-space derivative of g (Golus): length(vec2(dpdx, dpdy)) per axis. fwidth-class\n // derivative reads the ACTUAL backing-store pixel (NOT fwidthFine \u2014 Compatibility-Mode safe).\n let dv = vec2f(\n length(vec2f(dpdx(g.x), dpdy(g.x))),\n length(vec2f(dpdx(g.y), dpdy(g.y))),\n );\n\n let minor = gridCoverage(g, u.grid.x, dv);\n // The major tier evals at g / majorEvery with its own derivative scaling.\n let me = max(u.u0.w, 1.0);\n let major = gridCoverage(g / me, u.grid.y, dv / me);\n let line = max(minor * u.grid.z, major * u.grid.w);\n\n let col = clamp(linearToSrgb(u.line.rgb), vec3f(0.0), vec3f(1.0));\n let hasBg = u.field.y;\n if (hasBg > 0.5) {\n // opaque ground: composite the ink over the themed bg.\n let bg = clamp(linearToSrgb(u.bg.rgb), vec3f(0.0), vec3f(1.0));\n let a = line * u.field.x;\n let outRgb = mix(bg, col, a);\n return vec4f(outRgb, 1.0);\n }\n // transparent ground: the LINE carries the alpha \u2014 the page reads through the cells.\n let a = line * u.field.x;\n return vec4f(col * a, a); // premultiplied over transparent\n}\n";
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import type { Surface } from "../../ui/_shared/useSurfaceAxis";
|
|
2
|
+
import { type ControlSize, type SearchVariant } from "./searchVariants";
|
|
1
3
|
import type { FuzzySearchState, SearchableItem } from "./composables/types";
|
|
2
4
|
type __VLS_Props = {
|
|
3
5
|
state: FuzzySearchState;
|
|
4
|
-
variant?:
|
|
6
|
+
variant?: SearchVariant;
|
|
7
|
+
size?: ControlSize;
|
|
8
|
+
surface?: Surface;
|
|
5
9
|
placeholder?: string;
|
|
6
10
|
typeLabel?: (item: SearchableItem) => string;
|
|
7
11
|
};
|
|
@@ -9,7 +13,9 @@ declare function focus(): void;
|
|
|
9
13
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
10
14
|
focus: typeof focus;
|
|
11
15
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
12
|
-
|
|
16
|
+
size: ControlSize;
|
|
17
|
+
variant: SearchVariant;
|
|
18
|
+
surface: Surface;
|
|
13
19
|
placeholder: string;
|
|
14
20
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
15
21
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { type Component } from "vue";
|
|
2
|
+
import type { Surface } from "../../ui/_shared/useSurfaceAxis";
|
|
3
|
+
import { type ControlSize, type SearchVariant } from "./searchVariants";
|
|
2
4
|
type __VLS_Props = {
|
|
3
5
|
modelValue?: string;
|
|
4
6
|
placeholder?: string;
|
|
5
7
|
icon?: Component;
|
|
6
8
|
tag?: string;
|
|
9
|
+
size?: ControlSize;
|
|
10
|
+
surface?: Surface;
|
|
11
|
+
variant?: SearchVariant;
|
|
7
12
|
};
|
|
8
13
|
declare var __VLS_13: {};
|
|
9
14
|
type __VLS_Slots = {} & {
|
|
@@ -16,6 +21,9 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
|
16
21
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
17
22
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
18
23
|
}>, {
|
|
24
|
+
size: ControlSize;
|
|
25
|
+
variant: SearchVariant;
|
|
26
|
+
surface: Surface;
|
|
19
27
|
modelValue: string;
|
|
20
28
|
placeholder: string;
|
|
21
29
|
tag: string;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { default as FuzzySearch } from "./FuzzySearch.vue";
|
|
2
2
|
export { default as SearchBar } from "./SearchBar.vue";
|
|
3
|
+
export { searchFieldVariants } from "./searchVariants";
|
|
4
|
+
export type { SearchVariant, SearchVariants } from "./searchVariants";
|
|
3
5
|
export { useFuzzySearch } from "./composables/useFuzzySearch";
|
|
4
6
|
export type { UseFuzzySearchOptions } from "./composables/useFuzzySearch";
|
|
5
7
|
export { buildIndex, searchIndex, fuzzyMatch, clearSearchCache } from "./composables/fuzzySearchIndex";
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
import { type ControlSize, controlSizeClass } from "../../ui/_shared/useControlSize";
|
|
3
|
+
/**
|
|
4
|
+
* The search field-CHROME variant. `inline` is the boxed glass pill (identity over
|
|
5
|
+
* the `.input-bar` recipe); `bare`/`floating` strip the box to a chromeless field —
|
|
6
|
+
* the real CVA rung the `!important` cluster was fighting (clean break, no `!`).
|
|
7
|
+
*
|
|
8
|
+
* searchFieldVariants() → "" (the boxed pill)
|
|
9
|
+
* searchFieldVariants({ variant: "bare" }) → "border-none bg-transparent p-0 rounded-none"
|
|
10
|
+
*/
|
|
11
|
+
export declare const searchFieldVariants: (props?: ({
|
|
12
|
+
variant?: "floating" | "inline" | "bare" | null | undefined;
|
|
13
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
14
|
+
export type SearchVariant = NonNullable<VariantProps<typeof searchFieldVariants>["variant"]>;
|
|
15
|
+
/** The CVA's variant-prop shape — the `/api` discovery surface (the SFCs cannot
|
|
16
|
+
* re-export a type, so this CVA home is the type source). */
|
|
17
|
+
export type SearchVariants = VariantProps<typeof searchFieldVariants>;
|
|
18
|
+
export { controlSizeClass };
|
|
19
|
+
export type { ControlSize };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SelectableChip — the public face of the BC.W-ACCENT-TONE tonal-accent register.
|
|
3
|
+
* A reka-`Toggle` selectable chip whose COLOUR identity comes from ONE `:tone` (a
|
|
4
|
+
* complete `<color>`): the chip reads the `.accent-tone` register — a faint idle
|
|
5
|
+
* FILL floored ≥3:1 (legible at rest, the load-bearing fourier ask), a bolder active
|
|
6
|
+
* BAND + EDGE rim, and a contrast-safe INK label (auto-darkened/lightened by value.js
|
|
7
|
+
* `safeAccentColor` so the text never drops below AA over the resolved band).
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* <SelectableChip v-model="on" :tone="'var(--section-color-7)'">React</SelectableChip>
|
|
11
|
+
*
|
|
12
|
+
* The toggle state is the reka-ui Toggle `modelValue` contract — bind via `v-model`
|
|
13
|
+
* (or `:model-value` / `@update:model-value`). For an exclusive picker, wire the chips
|
|
14
|
+
* via direct refs (deliberately unopinionated about ToggleGroup — the ToggleChip
|
|
15
|
+
* precedent).
|
|
16
|
+
*
|
|
17
|
+
* VALUE.JS-BEARING: this SFC STATICALLY imports `useAccentTone` (the contrast-safe-ink
|
|
18
|
+
* composable, which reaches value.js `safeAccentColor`/`computeSafeAccent`), so the
|
|
19
|
+
* chip chunk transitively reaches value.js — it ships on `/selectable-chip` ONLY, OFF
|
|
20
|
+
* the value.js-free root barrel (the BorderProgress/EasingPicker SCC-trap precedent).
|
|
21
|
+
*/
|
|
22
|
+
import type { HTMLAttributes } from "vue";
|
|
23
|
+
import { type ToggleProps } from "reka-ui";
|
|
24
|
+
import { type SelectableChipVariants } from "./selectableChipVariants";
|
|
25
|
+
type __VLS_Props = ToggleProps & {
|
|
26
|
+
/** The accent COLOUR identity — a complete `<color>` (e.g. `var(--section-color-7)`
|
|
27
|
+
* or a concrete `oklch(…)`). Defaults to `var(--primary)` via the register. The
|
|
28
|
+
* SEMANTIC choice is a prop; the strength MAGNITUDES are tokens (no over-prop). */
|
|
29
|
+
tone?: string;
|
|
30
|
+
/** The structural size rung. Default `md`. */
|
|
31
|
+
size?: SelectableChipVariants["size"];
|
|
32
|
+
class?: HTMLAttributes["class"];
|
|
33
|
+
};
|
|
34
|
+
declare var __VLS_8: {};
|
|
35
|
+
type __VLS_Slots = {} & {
|
|
36
|
+
default?: (props: typeof __VLS_8) => any;
|
|
37
|
+
};
|
|
38
|
+
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
39
|
+
"update:modelValue": (value: boolean) => any;
|
|
40
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
41
|
+
"onUpdate:modelValue"?: ((value: boolean) => any) | undefined;
|
|
42
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
43
|
+
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
44
|
+
declare const _default: typeof __VLS_export;
|
|
45
|
+
export default _default;
|
|
46
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
47
|
+
new (): {
|
|
48
|
+
$slots: S;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
/**
|
|
3
|
+
* SelectableChip — the public face of the BC.W-ACCENT-TONE tonal register: a
|
|
4
|
+
* reka-`Toggle` selectable chip that READS `.accent-tone` (idle `--accent-fill`
|
|
5
|
+
* floored ≥3:1, active `--accent-band` + `--accent-edge` rim + the contrast-safe
|
|
6
|
+
* `--accent-ink` label). A tag/filter/tool picker is ONE element, golden-by-
|
|
7
|
+
* construction — the tonal channels are owned by the register, not hand-rolled
|
|
8
|
+
* per-state `color-mix(…)`.
|
|
9
|
+
*
|
|
10
|
+
* The recipe is STRUCTURE + the register hook: it applies `.accent-tone` (the
|
|
11
|
+
* channel mint), the idle/active PAINT (off the register channels), and the size
|
|
12
|
+
* axis (the padding/radius/text-size). The tonal COLOUR is the register; this CVA
|
|
13
|
+
* carries no `color-mix(…--primary…)` literal (the N-paste the register collapses).
|
|
14
|
+
*
|
|
15
|
+
* The motion register matches the §6 interactive family (the ToggleChip precedent):
|
|
16
|
+
* the SURFACE legs (bg/border/color) ride `--duration-fast`/`--ease-standard`; the
|
|
17
|
+
* `scale` TRANSFORM leg rides `--spring-smooth`, so the chip lifts on hover + settles
|
|
18
|
+
* on press like every sibling control.
|
|
19
|
+
*/
|
|
20
|
+
export declare const selectableChipVariants: (props?: ({
|
|
21
|
+
size?: "sm" | "lg" | "md" | null | undefined;
|
|
22
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
23
|
+
export type SelectableChipVariants = VariantProps<typeof selectableChipVariants>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SplitChars — the component face of the per-glyph split. It renders the `text`
|
|
3
|
+
* prop into per-glyph `.char` spans (each carrying `--char-index`), wraps them in
|
|
4
|
+
* the shipped `.char-stagger` host (so the library CSS staggers them into a
|
|
5
|
+
* kinetic entrance on the per-spring `--spring-smooth` clock), and — by
|
|
6
|
+
* construction — keeps the word as ONE accessible name: the wrapper carries
|
|
7
|
+
* `aria-label="{text}"`, every glyph span is `aria-hidden`. AT hears "Fourier",
|
|
8
|
+
* never the spell-out.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* <SplitChars text="Fourier" />
|
|
12
|
+
* <SplitChars text="Hello World" by="word" as="h1" />
|
|
13
|
+
*
|
|
14
|
+
* The `text` PROP is the single source for BOTH the split AND the label — there
|
|
15
|
+
* is NO default slot (a slot would split arbitrary markup, so the accessible name
|
|
16
|
+
* would be ambiguous). The split re-runs on a `text` change (the watcher →
|
|
17
|
+
* `split()`). Engine-free: it composes `useCharStagger` (vue-only) + the shipped
|
|
18
|
+
* CSS; it adds NO animation engine and NO PRM logic (it inherits the recipe's
|
|
19
|
+
* carve — the split is structural, only the CSS `fade-in` is PRM-gated).
|
|
20
|
+
*/
|
|
21
|
+
import { type Component, type HTMLAttributes } from "vue";
|
|
22
|
+
import { type UseCharStaggerOptions } from "../../../composables/motion/useCharStagger";
|
|
23
|
+
type __VLS_Props = {
|
|
24
|
+
/** The word to split — REQUIRED. It is the single source for both the
|
|
25
|
+
* per-glyph split AND the accessible label (the load-bearing a11y fact). */
|
|
26
|
+
text: string;
|
|
27
|
+
/** The split unit. Default `"char"`. */
|
|
28
|
+
by?: UseCharStaggerOptions["by"];
|
|
29
|
+
/** Host tag/component (reka-ui Primitive `as`; default `"span"`) — set
|
|
30
|
+
* `as="h1"` to render the kinetic word as a heading. */
|
|
31
|
+
as?: string | Component;
|
|
32
|
+
class?: HTMLAttributes["class"];
|
|
33
|
+
};
|
|
34
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
35
|
+
as: string | Component;
|
|
36
|
+
by: "char" | "word" | "grapheme";
|
|
37
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
38
|
+
declare const _default: typeof __VLS_export;
|
|
39
|
+
export default _default;
|