@mkbabb/glass-ui 4.0.1 → 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-CW7a0m8M.js → CardAction-DlVP2evz.js} +72 -53
- package/dist/{CommandShortcut-DvZNQ_HF.js → CommandShortcut-By-VQcLO.js} +25 -14
- package/dist/{ConfiguratorRow-BR4l-ixA.js → ConfiguratorRow-YMXdINHx.js} +14 -14
- package/dist/ContextMenuContent-CMWn6huB.js +90 -0
- package/dist/{ContextMenuSubContent-xol4sD2q.js → ContextMenuSubContent-DvwWCUc0.js} +16 -16
- package/dist/{DataTable-CuKwF7wr.js → DataTable-C4tG3eIJ.js} +4 -4
- package/dist/DialogContent-D8U9ZfWS.js +121 -0
- package/dist/DialogFooter-DoLy0ewI.js +80 -0
- package/dist/DialogScrollContent-BMekN7gq.js +93 -0
- package/dist/{FadingScroll-DI6hQhT9.js → FadingScroll-P8B30rAD.js} +1 -1
- package/dist/HoverCardContent-DAmGYglo.js +88 -0
- package/dist/{HoverPopover-CbqbNwgU.js → HoverPopover-DYpBOzzF.js} +1 -1
- package/dist/{IconChip-BTD-nay5.js → IconChip-CQa7XZYc.js} +7 -5
- package/dist/{IconTooltip-Bl8gFZ8d.js → IconTooltip-_df8M3xm.js} +1 -1
- package/dist/Input-CyU4_hIC.js +57 -0
- package/dist/{MetricBadge-RHdBP72w.js → MetricBadge-DQt_dGah.js} +1 -1
- package/dist/{Notification-VUwexFUf.js → Notification-BlSPJhtZ.js} +4 -4
- package/dist/NumberFieldContent-Z3VxGu_6.js +140 -0
- 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-DctG61iZ.js → Progress-C9SsdwIZ.js} +1 -1
- package/dist/{ScrollingText-yOpBzFYq.js → ScrollingText-DY3W1Jfh.js} +2 -2
- package/dist/SelectScrollDownButton-3mFHX_R-.js +260 -0
- package/dist/{SelectSeparator-DXswVdRz.js → SelectSeparator-CNRGG7Ew.js} +1 -1
- package/dist/Separator-Cf9-JFgi.js +44 -0
- package/dist/Switch-uf-UKPA2.js +49 -0
- package/dist/{Toaster-Bw4xR8xV.js → Toaster-ozrsR4mP.js} +2 -2
- package/dist/{ToggleGroupItem-pEM9vIhs.js → ToggleGroupItem-BpzaVzNm.js} +6 -6
- package/dist/TooltipProvider-QQVM_80r.js +109 -0
- package/dist/animated-digit.js +2 -2
- package/dist/api/index.d.ts +16 -32
- package/dist/api/types-extra.d.ts +33 -0
- package/dist/api.js +2 -2
- package/dist/aurora.js +629 -269
- package/dist/badge-Bt14yURi.js +72 -0
- package/dist/badge.js +1 -1
- package/dist/border-progress.js +49 -57
- package/dist/button-D1W9PrzI.js +130 -0
- package/dist/button.js +1 -1
- package/dist/canvas.js +2 -3
- package/dist/card.js +1 -1
- package/dist/carousel.js +235 -106
- package/dist/chipVariants-BJQ0I2kB.js +18 -0
- package/dist/collapsible.js +1 -1
- package/dist/color-B9jZdhJX.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/glSetup.d.ts +1 -1
- package/dist/components/custom/aurora/composables/runtime.d.ts +12 -0
- package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +12 -3
- package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +8 -0
- package/dist/components/custom/aurora/constants/presets.d.ts +47 -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/aurora/index.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/Concentric.vue.d.ts +15 -12
- package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +12 -0
- package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
- package/dist/components/custom/concentric/composables/levelField.d.ts +50 -0
- package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +7 -3
- package/dist/components/custom/concentric/composables/useConcentric.d.ts +3 -3
- package/dist/components/custom/concentric/constants.d.ts +69 -24
- 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/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/DockDropdownTrigger.vue.d.ts +4 -3
- package/dist/components/custom/dock/DockIconButton.vue.d.ts +22 -0
- package/dist/components/custom/dock/DockPopoverTrigger.vue.d.ts +19 -0
- package/dist/components/custom/dock/DockStack.vue.d.ts +78 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +21 -3
- package/dist/components/custom/dock/composables/dockMorphContext.d.ts +18 -32
- package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +78 -67
- package/dist/components/custom/dock/composables/index.d.ts +3 -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/useDockSearch.d.ts +85 -0
- package/dist/components/custom/dock/composables/useDockShellProps.d.ts +49 -0
- package/dist/components/custom/dock/constants.d.ts +32 -17
- package/dist/components/custom/dock/index.d.ts +8 -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 +69 -6
- 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 +50 -9
- package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +6 -5
- package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +23 -9
- package/dist/components/custom/dot-flow-field/constants.d.ts +92 -20
- 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 +31 -18
- package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +2 -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 +61 -0
- package/dist/components/custom/dot-matrix/composables/useDotMatrix.d.ts +34 -0
- package/dist/components/custom/dot-matrix/composables/useDotSphere.d.ts +34 -0
- package/dist/components/custom/dot-matrix/constants.d.ts +72 -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 +44 -47
- package/dist/components/custom/fourier-field/composables/fourierFieldGLSetup.d.ts +24 -0
- package/dist/components/custom/fourier-field/composables/fourierFieldWGPUSetup.d.ts +31 -0
- package/dist/components/custom/fourier-field/composables/uniformBridgeWGPU.d.ts +56 -0
- package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +61 -37
- package/dist/components/custom/fourier-field/constants.d.ts +114 -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/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/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 +86 -1
- 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 +79 -0
- package/dist/components/custom/goo-dot-matrix/composables/uniformBridgeWGPU.d.ts +45 -0
- package/dist/components/custom/goo-dot-matrix/composables/useGooDotMatrix.d.ts +31 -0
- package/dist/components/custom/goo-dot-matrix/constants.d.ts +115 -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 +13 -0
- package/dist/components/custom/goo-dot-matrix/shaders/goo-dot.wgsl.d.ts +4 -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/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-backdrop/PaperBackdrop.vue.d.ts +18 -0
- package/dist/components/custom/paper-grid/PaperGrid.vue.d.ts +42 -0
- package/dist/components/custom/paper-grid/composables/paperGrid.d.ts +105 -0
- package/dist/components/custom/paper-grid/composables/paperGridGLSetup.d.ts +18 -0
- package/dist/components/custom/paper-grid/composables/paperGridWGPUSetup.d.ts +21 -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 +95 -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/chipVariants.d.ts +39 -0
- package/dist/components/custom/selectable-chip/index.d.ts +2 -0
- package/dist/components/custom/selectable-chip/selectableChipVariants.d.ts +15 -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 +28 -2
- 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 +32 -17
- 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/_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/button/index.d.ts +1 -1
- package/dist/components/ui/card/Card.vue.d.ts +46 -1
- package/dist/components/ui/card/ScrollCard.vue.d.ts +1 -1
- package/dist/components/ui/card/index.d.ts +1 -1
- package/dist/components/ui/carousel/CarouselContent.vue.d.ts +2 -4
- 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/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/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 +12 -0
- package/dist/components/ui/slider/Slider.vue.d.ts +9 -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/dom/index.d.ts +1 -0
- package/dist/composables/dom/useDragVelocity.d.ts +46 -0
- package/dist/composables/glass/useVizChoreography.d.ts +123 -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 +105 -2
- package/dist/composables/glass/webgl/shaders/flow.wgsl.d.ts +1 -0
- package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +40 -2
- package/dist/composables/glass/webgpu/index.d.ts +2 -1
- package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +65 -7
- package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +50 -2
- package/dist/composables/glass/webgpu/webgpuDevice.d.ts +42 -0
- package/dist/composables/motion/core/index.d.ts +7 -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/scrollReader.d.ts +25 -0
- package/dist/composables/motion/springPresets.d.ts +19 -1
- 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/useCharStagger.d.ts +44 -0
- package/dist/composables/motion/useDockCtaReceive.d.ts +29 -22
- 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/useScrollChrome.d.ts +58 -0
- package/dist/composables/motion/useScrollPin.d.ts +49 -0
- package/dist/composables/motion/useScrollScene.d.ts +67 -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 +552 -309
- 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 +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.d.ts +1 -0
- package/dist/deck.js +105 -0
- package/dist/dialog.js +4 -3
- package/dist/dock.js +1320 -631
- package/dist/dockContext-gFVS2gMg.js +18 -0
- package/dist/dom.js +7 -6
- package/dist/dot-flow-field.js +1268 -387
- package/dist/dot-matrix.d.ts +1 -0
- package/dist/dot-matrix.js +774 -0
- package/dist/dotMatrixField-CRO0ZFk4.js +48 -0
- package/dist/drawer.js +106 -96
- package/dist/{dropdown-menu-CofSZuk8.js → dropdown-menu-CCfcCQ68.js} +83 -79
- package/dist/dropdown-menu.js +1 -1
- package/dist/easing.js +188 -176
- package/dist/expandable-container.js +43 -21
- package/dist/fading-scroll.js +1 -1
- package/dist/flow.glsl-DqEGRpl4.js +4 -0
- package/dist/forms.js +64 -62
- package/dist/fourier-field.js +1069 -178
- 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 +164 -119
- package/dist/goo-blob.js +175 -1230
- package/dist/goo-dot-matrix.d.ts +1 -0
- package/dist/goo-dot-matrix.js +811 -0
- 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 +5 -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 +70 -60
- package/dist/metric-badge.js +1 -1
- package/dist/metric-cell.js +1 -1
- package/dist/metric-stack.js +12 -3
- package/dist/motion-core.js +59 -34
- package/dist/motion-curves.js +30 -14
- package/dist/motion.js +231 -96
- 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 +761 -0
- package/dist/paperGrid-CXCSMbZ1.js +191 -0
- package/dist/popover.js +1 -1
- package/dist/{presets-BW2b-fr1.js → presets-QvYgnFIZ.js} +14 -13
- package/dist/{procedural-color.glsl-CIFsJhwI.js → procedural-color.wgsl-C1Y5PkM6.js} +2 -2
- package/dist/progress.js +1 -1
- package/dist/pulse.js +2 -2
- package/dist/reactive.js +2 -2
- package/dist/{useCanvas2D-B8w_E3Rr.js → resolveCanvasColor-DsSJk06I.js} +16 -6
- package/dist/scrollReader-rc3Ns_NM.js +42 -0
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +162 -306
- package/dist/select.js +3 -3
- package/dist/selectable-chip.d.ts +1 -0
- package/dist/selectable-chip.js +48 -0
- package/dist/separator.js +1 -1
- package/dist/{sheet-tZMg0E0w.js → sheet-DUCIoOe0.js} +4 -4
- package/dist/sheet.js +1 -1
- package/dist/sidebar.js +216 -114
- package/dist/slider-CcICPe3u.js +149 -0
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +3 -3
- package/dist/spectrum-walk-cBNSx_zm.js +33 -0
- package/dist/springPresets-DfoQ6XRY.js +64 -0
- package/dist/stacked-icons.js +54 -39
- package/dist/styles/animations.css +13 -3
- package/dist/styles/cards.css +271 -2
- package/dist/styles/completion-seal.css +131 -0
- package/dist/styles/components.css +1 -4
- package/dist/styles/configurator.css +221 -1
- package/dist/styles/critical-partition.mjs +66 -11
- package/dist/styles/deferred.css +4 -0
- package/dist/styles/dock/adaptive-legibility.css +119 -0
- package/dist/styles/dock/cta-seat.css +87 -0
- package/dist/styles/dock/density.css +167 -6
- package/dist/styles/dock/fission-bridge.css +552 -0
- package/dist/styles/dock/layers.css +90 -78
- package/dist/styles/dock/morph-bridge.css +67 -18
- package/dist/styles/dock/morph.css +57 -118
- package/dist/styles/dock/overflow.css +12 -0
- package/dist/styles/dock/search.css +68 -0
- package/dist/styles/dock/shape.css +250 -0
- package/dist/styles/dock/shell.css +24 -8
- package/dist/styles/dock/stack-rail.css +352 -0
- package/dist/styles/dock-controls/dark-mode-toggle.css +17 -4
- package/dist/styles/dock-controls/icon-button.css +46 -0
- package/dist/styles/dock-controls/triggers.css +23 -1
- package/dist/styles/dock-controls.css +18 -0
- package/dist/styles/dock.css +27 -2
- package/dist/styles/drawer.css +166 -0
- package/dist/styles/glass/accent-tone.css +66 -0
- package/dist/styles/glass/control-surfaces.css +167 -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/ladder.css +67 -17
- 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 +31 -9
- package/dist/styles/glass/surfaces.css +81 -150
- package/dist/styles/glass.css +21 -0
- package/dist/styles/icon-chip.css +45 -0
- package/dist/styles/index.css +26 -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/scroll-chrome.css +123 -0
- package/dist/styles/scroll-driven.css +38 -0
- package/dist/styles/segmented-tabs.css +110 -40
- package/dist/styles/select.css +151 -0
- package/dist/styles/theme/bridges.css +22 -0
- package/dist/styles/theme/radius.css +18 -1
- package/dist/styles/tokens/color-radius.css +14 -4
- package/dist/styles/tokens/dark-arm.css +94 -12
- package/dist/styles/tokens/glass-deep.css +33 -4
- package/dist/styles/tokens/glass-fx.css +122 -1
- package/dist/styles/tokens/glass.css +226 -34
- package/dist/styles/tokens/light-dark.css +3 -3
- package/dist/styles/tokens/offsets.css +27 -0
- package/dist/styles/tokens/property-regs.css +277 -0
- package/dist/styles/tokens/scale-paper.css +86 -30
- package/dist/styles/tokens/scheme-motion.css +106 -133
- 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/sizing-config.css +110 -0
- package/dist/styles/tokens/sizing.css +55 -104
- package/dist/styles/tokens.css +14 -2
- 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 +84 -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 +199 -182
- 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 +2 -2
- package/dist/uniformBridgeWGPU-BCse1SHU.js +1268 -0
- package/dist/{useAnimatedNumber-BfUq2bUM.js → useAnimatedNumber-BntskVdQ.js} +1 -1
- package/dist/{useConfiguratorState-DNlOh6c8.js → useConfiguratorState-22BcULzF.js} +41 -38
- package/dist/useControlSize-DAZ062x7.js +9 -0
- package/dist/useDockCtaReceive-DX7RDb6_.js +88 -0
- package/dist/{useDragMorph-DgxnsVJz.js → useDragMorph-DGLSewwB.js} +4 -4
- package/dist/useDragVelocity-CjcfX3dA.js +57 -0
- package/dist/useFuzzySearch-0fTYOhS4.js +177 -0
- package/dist/useGooMorph-Cs13NgYL.js +104 -0
- package/dist/useGpuSubstrate-Ceet70xq.js +347 -0
- package/dist/useHaptic-CPz5BT9I.js +134 -0
- package/dist/{useLiquidFlex-mZPMiNXh.js → useLiquidFlex-Cc6PjVJD.js} +8 -3
- package/dist/useLiquidPress-CtOQ8Z0_.js +43 -0
- package/dist/useMorphField-ogBM7ubT.js +141 -0
- package/dist/usePointerVelocityField-BrkqZFhj.js +91 -0
- package/dist/useScrollChrome-JuImi1DM.js +258 -0
- package/dist/{useSpringMount-q1amq1SJ.js → useSpringMount-DFxtzmkR.js} +1 -1
- package/dist/useSpringPress-VM9RgVq3.js +36 -0
- package/dist/{useSurfaceAxis-g0NloYEF.js → useSurfaceAxis-Ci7Dnaw2.js} +1 -1
- package/dist/{useTouchGate-CBZTD4SD.js → useTouchGate-B1Lf9XqN.js} +1 -1
- 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 +107 -74
- package/dist/writeVelocityWeight-Bh83xZfs.js +19 -0
- package/package.json +140 -9
- package/src/styles/animations.css +13 -3
- package/src/styles/cards.css +271 -2
- package/src/styles/completion-seal.css +131 -0
- package/src/styles/configurator.css +221 -1
- package/src/styles/critical-partition.mjs +66 -11
- package/src/styles/dock/adaptive-legibility.css +119 -0
- package/src/styles/dock/cta-seat.css +87 -0
- package/src/styles/dock/density.css +167 -6
- package/src/styles/dock/fission-bridge.css +552 -0
- package/src/styles/dock/layers.css +90 -78
- package/src/styles/dock/morph-bridge.css +67 -18
- package/src/styles/dock/morph.css +57 -118
- package/src/styles/dock/overflow.css +12 -0
- package/src/styles/dock/search.css +68 -0
- package/src/styles/dock/shape.css +250 -0
- package/src/styles/dock/shell.css +24 -8
- package/src/styles/dock/stack-rail.css +352 -0
- package/src/styles/dock-controls/dark-mode-toggle.css +17 -4
- package/src/styles/dock-controls/icon-button.css +46 -0
- package/src/styles/dock-controls/triggers.css +23 -1
- package/src/styles/dock-controls.css +18 -0
- package/src/styles/dock.css +27 -2
- package/src/styles/drawer.css +164 -0
- package/src/styles/glass/accent-tone.css +66 -0
- package/src/styles/glass/control-surfaces.css +167 -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/ladder.css +67 -17
- 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 +31 -9
- package/src/styles/glass/surfaces.css +81 -150
- package/src/styles/glass.css +21 -0
- package/src/styles/icon-chip.css +45 -0
- package/src/styles/index.css +26 -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/scroll-chrome.css +123 -0
- package/src/styles/scroll-driven.css +38 -0
- package/src/styles/segmented-tabs.css +110 -36
- package/src/styles/select.css +151 -0
- package/src/styles/theme/bridges.css +22 -0
- package/src/styles/theme/radius.css +18 -1
- package/src/styles/tokens/color-radius.css +14 -4
- package/src/styles/tokens/dark-arm.css +94 -12
- package/src/styles/tokens/glass-deep.css +33 -4
- package/src/styles/tokens/glass-fx.css +122 -1
- package/src/styles/tokens/glass.css +226 -34
- package/src/styles/tokens/light-dark.css +3 -3
- package/src/styles/tokens/offsets.css +27 -0
- package/src/styles/tokens/property-regs.css +277 -0
- package/src/styles/tokens/scale-paper.css +86 -30
- package/src/styles/tokens/scheme-motion.css +106 -133
- 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/sizing-config.css +110 -0
- package/src/styles/tokens/sizing.css +55 -104
- package/src/styles/tokens.css +14 -2
- 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 +84 -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/DialogContent-DcKK8k9i.js +0 -103
- 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/PaperBackdrop-Vf3tlpvd.js +0 -31
- package/dist/SelectScrollDownButton-CrA8F0iV.js +0 -252
- package/dist/Separator-pKF0oA4M.js +0 -37
- package/dist/Switch-CwYNf8bo.js +0 -47
- package/dist/TooltipProvider-rzvnXz60.js +0 -104
- package/dist/badge-D9XWW4GT.js +0 -53
- package/dist/button-DYCUa-tH.js +0 -126
- package/dist/color-DweYl7pE.js +0 -86
- package/dist/components/custom/concentric/composables/ringField.d.ts +0 -44
- 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/dockContext-BNfyPLe9.js +0 -17
- package/dist/procedural-color.wgsl-CToRHugY.js +0 -224
- package/dist/resolveCanvasColor-CUyHr5Uu.js +0 -11
- package/dist/slider-DVb4HXU-.js +0 -142
- package/dist/springPresets-CFQGQfdl.js +0 -40
- package/dist/styles/dock/rail-extend.css +0 -397
- package/dist/useLiquidPress-kfb4KX79.js +0 -39
- 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/{CollapsibleContent-68dEXIAl.js → CollapsibleContent-D7UNsXQr.js} +0 -0
- /package/dist/{InstrumentChassis-Bx0F_q5g.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-DwwjicPY.js → SelectGroup-Dcczq44n.js} +0 -0
- /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
- /package/dist/{compile-CQEFRTmx.js → compile-INR_tPk_.js} +0 -0
- /package/dist/{constants-BPOqYJAm.js → constants-BWj7DkMn.js} +0 -0
- /package/dist/{createContext-CpBNTRMI.js → createContext-Cd23P9j0.js} +0 -0
- /package/dist/{math-BINYmg5z.js → math-5RcIgCB4.js} +0 -0
- /package/dist/{menuItemVariants-D8VNHq22.js → menuItemVariants-DAXquKja.js} +0 -0
- /package/dist/{prng-Za0Rmgag.js → prng-B5tIXTtj.js} +0 -0
- /package/dist/{useGlobalDark-C28t0VWJ.js → useGlobalDark-B4HO9LXG.js} +0 -0
- /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-DO8Vl4gs.js} +0 -0
- /package/dist/{useInterval-CvK1mL92.js → useInterval-BVUI-sez.js} +0 -0
- /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-BEut54Tk.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-D7bYU2RK.js → useScrollProgress-A0M6qRl7.js} +0 -0
- /package/dist/{useSortable-DHjtZSEd.js → useSortable-DQV_UNDw.js} +0 -0
- /package/dist/{useTextHighlight-CWEi25hf.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-Czsb7zQC.js → vReveal-CT1KtwZA.js} +0 -0
- /package/dist/{vSpecular-CQFmLNzA.js → vSpecular-EX7loENl.js} +0 -0
|
@@ -0,0 +1,95 @@
|
|
|
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
|
+
/** Max per-cell twist angle at the crest (rad ≈ 15° — a clear lean, never a tumble; ≤ ~18° floor). */
|
|
21
|
+
twistMax: number;
|
|
22
|
+
/** Max per-cell shear at the crest — a small skew so the box MORPHS, not just rotates. */
|
|
23
|
+
shearMax: number;
|
|
24
|
+
/** The traveling-wave front direction (a gentle diagonal). */
|
|
25
|
+
waveDir: [number, number];
|
|
26
|
+
/** The crest-band spatial frequency (LOW — cells per crest). */
|
|
27
|
+
waveK: number;
|
|
28
|
+
/** The front speed (slow — inertia). */
|
|
29
|
+
waveOmega: number;
|
|
30
|
+
/** The crest-band width (a localized front, not a global pulse). */
|
|
31
|
+
waveSigma: number;
|
|
32
|
+
/** The GLOBAL subtlety knob — 1 demo, ~0.12 suffusion (the site-wide background). */
|
|
33
|
+
fieldAlpha: number;
|
|
34
|
+
/** How far the cursor pushes the grid (the local bulge). */
|
|
35
|
+
bulgeStrength: number;
|
|
36
|
+
/** The Gaussian falloff radius in CELL units. */
|
|
37
|
+
bulgeRadius: number;
|
|
38
|
+
/** Push grid away (repel) or toward (attract) the cursor. */
|
|
39
|
+
bulgeMode: "repel" | "attract";
|
|
40
|
+
/** The line ink (the warm `--foreground` identity by default — NEVER teal-on-navy). */
|
|
41
|
+
lineColor: OklchStop;
|
|
42
|
+
/**
|
|
43
|
+
* The filled-FACE opacity — **default `0`** so the face EVAPORATES → byte-identical to the
|
|
44
|
+
* line-only HEAD render (every `proof:viz-papergrid` cage clause + the warm-identity fence
|
|
45
|
+
* stay GREEN). The demo `PAPER_GRID_PRESET_RIPPLE` lifts it (presets-in-consumers).
|
|
46
|
+
*/
|
|
47
|
+
faceAlpha: number;
|
|
48
|
+
/** The slope-shade gain (the ∇H Lambert relief — higher = steeper crest/trough contrast). */
|
|
49
|
+
faceRelief: number;
|
|
50
|
+
/** The volume-preserving SQUASH: the plateau inset retreats at the crest so the face inflates. */
|
|
51
|
+
squashK: number;
|
|
52
|
+
/** The base inset-square coverage (the soft tile inside the warped cell, 0..0.5 grid units). */
|
|
53
|
+
baseInset: number;
|
|
54
|
+
/**
|
|
55
|
+
* The 3-stop warm-DIVERGENT face ramp (FOLD B — height-keyed, NOT a 2-point mid-park `mix`):
|
|
56
|
+
* trough → mid → crest. ALL hues ∈ [20,90] (rose-umber → ember/amber → warm-wheat) so the
|
|
57
|
+
* teal-navy purge is clear by construction. `proof:viz-papergrid` clause reds a hue ∈ [180,280].
|
|
58
|
+
*/
|
|
59
|
+
faceWarmLo: OklchStop;
|
|
60
|
+
faceWarmMid: OklchStop;
|
|
61
|
+
faceWarmHi: OklchStop;
|
|
62
|
+
/** The fixed cel key-light direction (upper-right) the slope-shade Lamberts against. */
|
|
63
|
+
lightDir: [number, number];
|
|
64
|
+
/** The ground (default transparent so it suffuses over the page). */
|
|
65
|
+
background: OklchStop | "transparent";
|
|
66
|
+
/** Pointer bulge (§4/§8) — on (demo) / off (suffusion). */
|
|
67
|
+
interactive: boolean;
|
|
68
|
+
/** ONE static frame then park under `prefers-reduced-motion: reduce`. */
|
|
69
|
+
respectReducedMotion: boolean;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The warm-cream identity line ink (the library default — NOT a themed hue). A warm-amber
|
|
73
|
+
* ink in the `--foreground` family (OKLab hue ~62, the BA.W-NO-GRAY warm identity) so the
|
|
74
|
+
* grid reads as warm ink over the page; the SFC resolves the live `--foreground` token at
|
|
75
|
+
* mount, this stop is the SSR/no-token fallback identity. A consumer (the demo) themes it
|
|
76
|
+
* through a PRESET, never a token edit. NEVER teal/navy (h in [180,280] reds P5).
|
|
77
|
+
*/
|
|
78
|
+
export declare const WARM_IDENTITY_INK: OklchStop;
|
|
79
|
+
/**
|
|
80
|
+
* The library-default FACE ramp stops — a CALM warm-divergent fold the face would paint IF lit
|
|
81
|
+
* (the `faceAlpha:0` default keeps the face evaporated, so these never paint at HEAD; they are
|
|
82
|
+
* the warm-identity SSR fallback the vivid demo preset overrides). ALL hues ∈ [20,90] — the
|
|
83
|
+
* teal-navy purge clear by construction (`proof:viz-papergrid` reds a hue ∈ [180,280] here).
|
|
84
|
+
* trough → rose-umber, mid → ember-amber, crest → warm-wheat.
|
|
85
|
+
*/
|
|
86
|
+
export declare const FACE_WARM_LO: OklchStop;
|
|
87
|
+
export declare const FACE_WARM_MID: OklchStop;
|
|
88
|
+
export declare const FACE_WARM_HI: OklchStop;
|
|
89
|
+
/**
|
|
90
|
+
* The shipped warm-identity default config — evenly-spaced, LARGE 64px cells, a crisp fine
|
|
91
|
+
* rule with a bolder major rule every 5 cells, on a slowly breathing liquid curl-flow sheet
|
|
92
|
+
* (research/viz/paper-grid.md §6). SUBTLE + LARGE + evenly-spaced — the user's binding
|
|
93
|
+
* aesthetic. `fieldAlpha: 1` is the demo lead; the suffusion preset drops it to ~0.12.
|
|
94
|
+
*/
|
|
95
|
+
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, FACE_WARM_LO, FACE_WARM_MID, FACE_WARM_HI, PAPER_GRID_MAX_MAJOR_EVERY, } from "./constants";
|
|
4
|
+
export { type Vec2, type PaperGridSampleParams, type PaperGridFace, potentialFBM, curlFBM, 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, swirlStrength, swirlRadius)\nuniform float uBulgeMode; // +1 repel / \u22121 attract (signs the swirl)\nuniform float uInteractive; // 1 = cursor swirl on\nuniform vec4 uWave; // (waveDirX, waveDirY, waveK, waveOmega)\nuniform vec4 uWave2; // (waveSigma, twistMax, shearMax, amp)\nuniform vec3 uLineColor; // linear-sRGB ink\nuniform vec3 uBg; // linear-sRGB themed bg\n// \u2500\u2500 The FACE (BD.W-PAPERGRID-FACE) \u2014 the height-lit filled cell interior \u2500\u2500\nuniform vec4 uFace; // (faceAlpha, faceRelief, squashK, baseInset)\nuniform vec2 uLightDir; // the cel key-light direction\nuniform vec3 uFaceLo; // linear-sRGB rose-umber trough (FOLD B, 3-stop)\nuniform vec3 uFaceMid; // linear-sRGB ember-amber mid\nuniform vec3 uFaceHi; // linear-sRGB warm-wheat crest\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 3-stop warm-divergent FACE ramp (FOLD B \u2014 height-keyed, NOT a 2-point mid-park). All stops\n// warm hue \u2208 [20,90]; linear-space (the OETF runs in main, FOLD E).\nvec3 faceRamp(float rampT) {\n float s = clamp(rampT, 0.0, 1.0);\n if (s < 0.5) {\n return mix(uFaceLo, uFaceMid, s * 2.0);\n }\n return mix(uFaceMid, uFaceHi, (s - 0.5) * 2.0);\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// The shared traveling-wave CELL-WARP chunk (waveField.glsl.ts \u2014 cellTwist/cursorSwirl/\n// travelingEnvelope; spliced AFTER valueNoise + potentialFBM bodies + the curlFBM chunk).\n// paper-grid + concentric share this EXACTLY (the C3 cure: the boxes twist about their own\n// center, the lines stay locally straight \u2014 never the retired LINE-warp).\n\n#ifndef WAVE_FIELD_TAU\n#define WAVE_FIELD_TAU 6.283185307179586\n#endif\n\n// The traveling-wave envelope \u2014 a moving Gaussian crest band sweeping along waveDir.\nfloat travelingEnvelope(vec2 pivot, float t, vec2 waveDir, float waveK, float waveOmega, float waveSigma) {\n float coord = dot(pivot, waveDir) * waveK - t * waveOmega;\n float crest = fract(coord / WAVE_FIELD_TAU);\n float z = (crest - 0.5) * 2.0;\n return exp(-(z * z) / max(waveSigma, 1e-3));\n}\n\n// The curl-direction scalar \u2014 the smooth low-freq director the per-cell twist follows.\nfloat curlScalar(vec2 cc, float t) {\n vec2 f = curlFBM(vec2(cc.x * 0.5 + t * 0.08, cc.y * 0.5 - t * 0.06));\n return clamp(f.x, -1.0, 1.0);\n}\n\n// The directed-twist FLOOR (the visibility cure): keep the curl SIGN (adjacent cells lean\n// together) but floor the magnitude so a crest-band cell ALWAYS rotates decisively.\n#ifndef WAVE_FIELD_TWIST_FLOOR\n#define WAVE_FIELD_TWIST_FLOOR 0.62\n#endif\nfloat directedTwist(float s, float floorMag) {\n float mag = max(floorMag, abs(s));\n float sgn = tanh(s * 6.0);\n return sgn * mag;\n}\n\n// \u2500\u2500 The FACE leaf (the structurally-absent RE-INVENT \u2014 height-lit filled cell interior) \u2500\u2500\n// Defined ABOVE cellTwist: cellTwist rides cellHeight via the driver so twist + face read ONE\n// envelope.\n\n// The sheet displacement at a cell center = the EXACT traveling-wave scalar the twist rides.\nfloat cellHeight(vec2 cc, float t, vec2 waveDir, float waveK, float waveOmega, float waveSigma, float amp) {\n return travelingEnvelope(cc, t, waveDir, waveK, waveOmega, waveSigma) * amp;\n}\n\n// The pre-twist driver (FOLD A): the cell pivot cc + the crest envelope env the twist AND the\n// face both ride. The face samples height/relief at THIS pre-twist cc (floor(twisted_g) at the\n// crest lights a NEIGHBOUR cell). cc in .xy, env in .z.\nvec3 cellDriver(vec2 g, float cellSize, float t, vec2 waveDir, float waveK, float waveOmega,\n float waveSigma, float amp) {\n float cs = max(cellSize, 1e-3);\n vec2 cc = (floor(g / cs) + 0.5) * cs;\n float env = cellHeight(cc, t, waveDir, waveK, waveOmega, waveSigma, amp);\n return vec3(cc, env);\n}\n\n// The central-difference slope of cellHeight across a cell (eps = 0.5\u00B7cellSize) \u2014 derivative-\n// FREE (NO dFdx on the height) \u2192 Safari WebGL2-safe. Returns \u2207H.\nvec2 faceRelief(vec2 cc, float cellSize, float t, vec2 waveDir, float waveK, float waveOmega,\n float waveSigma, float amp) {\n float eps = max(cellSize, 1e-3) * 0.5;\n float hxp = cellHeight(cc + vec2(eps, 0.0), t, waveDir, waveK, waveOmega, waveSigma, amp);\n float hxm = cellHeight(cc - vec2(eps, 0.0), t, waveDir, waveK, waveOmega, waveSigma, amp);\n float hyp = cellHeight(cc + vec2(0.0, eps), t, waveDir, waveK, waveOmega, waveSigma, amp);\n float hym = cellHeight(cc - vec2(0.0, eps), t, waveDir, waveK, waveOmega, waveSigma, amp);\n return vec2((hxp - hxm) / (2.0 * eps), (hyp - hym) / (2.0 * eps));\n}\n\n// Soft inset-square coverage inside a (warped) cell \u2014 the filled FACE plateau. d is the distance\n// into the cell from the nearest gutter (the Golus triangle-wave); the inset retreats as it grows\n// (the squash). aa = the shader's fwidth(g) (JS passes a fixed uvDeriv).\nfloat facePlateau(vec2 g, float inset, vec2 uvDeriv) {\n vec2 tri = 1.0 - abs(fract(g) * 2.0 - 1.0);\n float d = min(tri.x, tri.y);\n float aa = max(uvDeriv.x, uvDeriv.y) * 1.5;\n return smoothstep(inset, inset + 2.0 * aa, d);\n}\n\n// The cell-local twist about each cell's own center, gated by the traveling wave + directed\n// by the curl flow. amp is the spring-eased envelope amplitude the JS host drives. FOLD C: the\n// TWIST_FLOOR is crest-gated by env so OFF-crest cells relax to flat calm paper (the traveling\n// read, not static foil).\nvec2 cellTwist(vec2 g, float cellSize, float t, vec2 waveDir, float waveK, float waveOmega,\n float waveSigma, float twistMax, float shearMax, float amp) {\n vec3 drv = cellDriver(g, cellSize, t, waveDir, waveK, waveOmega, waveSigma, amp);\n vec2 cc = drv.xy;\n float env = drv.z;\n float floorMag = WAVE_FIELD_TWIST_FLOOR * env; // FOLD C: crest-gated floor\n float theta = twistMax * env * directedTwist(curlScalar(cc, t), floorMag);\n float shear = shearMax * env * directedTwist(curlScalar(cc + vec2(17.3, 9.1), t), floorMag);\n vec2 local = g - cc;\n float ct = cos(theta);\n float st = sin(theta);\n vec2 rot = vec2(ct * local.x - st * local.y, st * local.x + ct * local.y);\n rot.x += shear * rot.y; // a small skew so the box MORPHS, not just rotates\n return cc + rot;\n}\n\n// The CONTINUOUS traveling-wave FLOW warp \u2014 the SMOOTH twin of cellTwist (no per-cell seam;\n// for the level-set contours that shatter into a mesh under the cell discontinuity).\nvec2 waveFlow(vec2 g, float t, vec2 waveDir, float waveK, float waveOmega, float waveSigma,\n float twistMax, float amp) {\n float env = travelingEnvelope(g, t, waveDir, waveK, waveOmega, waveSigma) * amp;\n vec2 f = curlFBM(vec2(g.x * 0.6 + t * 0.05, g.y * 0.6 - t * 0.04));\n vec2 f2 = curlFBM(vec2(g.x * 1.1 - t * 0.03, g.y * 1.1 + t * 0.035));\n float k = twistMax * env;\n return g + (f + f2 * 0.5) * k;\n}\n\n// The local cursor swirl \u2014 the finger twists the cells around it (re-aimed cursorBulge).\nvec2 cursorSwirl(vec2 g, vec2 cursor, float strength, float radius) {\n vec2 to = g - cursor;\n float d2 = dot(to, to);\n float r = max(radius, 1e-4);\n float theta = strength * exp(-d2 / (2.0 * r * r));\n float ct = cos(theta);\n float st = sin(theta);\n return cursor + vec2(ct * to.x - st * to.y, st * to.x + ct * to.y);\n}\n\n// The LOW-octave value-noise topography \u2014 the scalar field concentric extracts contours of.\nfloat heightField(vec2 p, float octavesF, float seed) {\n float v = 0.0;\n float amp = 0.5;\n float freq = 1.0;\n float px = p.x + seed;\n float py = p.y - seed;\n int n = int(clamp(octavesF, 1.0, 6.0));\n for (int i = 0; i < 6; i++) {\n if (i >= n) break;\n v += amp * valueNoise(px * freq, py * freq);\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// The \u03C9=\u221A(g\u00B7k) breathing swell \u2014 basins inflate/deflate with weight.\nfloat waveSwell(float t, float phase) {\n return sin(t * 0.35 + phase) * 0.5 + sin(t * 0.21 + phase * 1.7) * 0.5;\n}\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: CELL-TWIST + cursor-swirl the grid coordinate, then two-tier Golus.\n // cellTwist rotates each cell about its OWN center (the boxes twist, the lines stay locally\n // straight \u2014 the C3 cure) gated by a traveling Gaussian crest; cursorSwirl twists the cells\n // about the finger. The Golus dv reads the FINAL twisted coord (the crisp-line fence survives).\n vec2 g0 = uv * uGridScale;\n // FOLD A \u2014 the PRE-twist driver: the face samples height/relief at THIS cc (floor(twisted_g)\n // at the crest lights a NEIGHBOUR cell). cellTwist rides the SAME driver, so twist + face fuse.\n vec3 drv = cellDriver(g0, 1.0, uTime, uWave.xy, uWave.z, uWave.w, uWave2.x, uWave2.w);\n vec2 cc = drv.xy;\n vec2 g = cellTwist(g0, 1.0, uTime, uWave.xy, uWave.z, uWave.w, uWave2.x, uWave2.y, uWave2.z, uWave2.w);\n if (uInteractive > 0.5) {\n g = cursorSwirl(g, uCursor.xy, uCursor.z * uBulgeMode, uCursor.w);\n }\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 // \u2500\u2500 The FACE (BD.W-PAPERGRID-FACE) \u2014 height-lit filled cell interior \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Sample height/relief at the pre-twist driver cc (FOLD A); Lambert the \u2207H slope against the\n // fixed cel key-light; squash the inset so the crest face inflates; multi-stop warm-divergent\n // ramp keyed on mix(shade, h) (FOLD B); the ink through the production OETF (FOLD E).\n float h = cellHeight(cc, uTime, uWave.xy, uWave.z, uWave.w, uWave2.x, uWave2.w);\n vec2 grad = faceRelief(cc, 1.0, uTime, uWave.xy, uWave.z, uWave.w, uWave2.x, uWave2.w);\n vec3 n = normalize(vec3(-grad * uFace.y, 1.0));\n float shade = clamp(0.5 + dot(n, normalize(vec3(uLightDir, 1.0))) * 0.5, 0.0, 1.0);\n float inset = uFace.w * (1.0 - uFace.z * h); // squash & stretch\n float face = facePlateau(g, inset, dv);\n float rampT = clamp(shade * 0.5 + h * 0.5, 0.0, 1.0); // FOLD B \u2014 height-keyed crest\n vec3 faceInk = clamp(linearToSrgb(faceRamp(rampT)), vec3(0.0), vec3(1.0));\n float faceA = face * uFace.x * uFieldAlpha; // FOLD D \u2014 one field-blend scalar\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 vec3 base = mix(bg, faceInk, faceA);\n float a = line * uFieldAlpha;\n fragColor = vec4(mix(base, col, a), 1.0);\n return;\n }\n // transparent ground: the FACE composites UNDER the line, the SOURCE-OVER operator in\n // PREMULTIPLIED space. faceAlpha:0 \u2192 faceA=0 \u2192 the face term vanishes \u2192 vec4(col\u00B7line, line) =\n // byte-identical to the HEAD line-only render.\n vec3 linePremult = (col * line) * uFieldAlpha; // line layer (the FieldAlpha subtlety)\n float lineA = line * uFieldAlpha;\n vec3 facePremult = faceInk * faceA; // face layer premultiplied (faceA folds field)\n vec3 outPremult = linePremult + facePremult * (1.0 - lineA);\n float a = lineA + faceA * (1.0 - lineA);\n fragColor = vec4(outPremult, 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 // face: (uFaceAlpha, uFaceRelief, uSquashK, uBaseInset) \u2014 the height-lit FACE (re-points the retired warp lane)\n face: vec4<f32>,\n // warp2: (uAmplitude, uAspect, uLightDirX, uLightDirY) \u2014 aspect + the cel key-light\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, uSwirlStrength, uSwirlRadius)\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 // wave: (waveDirX, waveDirY, waveK, waveOmega) \u2014 the traveling-wave crest\n wave: vec4<f32>,\n // wave2: (waveSigma, twistMax, shearMax, amp) \u2014 the cell-twist envelope (amp: spring-eased)\n wave2: vec4<f32>,\n // faceLo: (rose-umber trough .rgb (linear), _pad) \u2014 the warm-divergent ramp (FOLD B, 3-stop)\n faceLo: vec4<f32>,\n // faceMid: (ember-amber mid .rgb (linear), _pad)\n faceMid: vec4<f32>,\n // faceHi: (warm-wheat crest .rgb (linear), _pad)\n faceHi: 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// The shared traveling-wave CELL-WARP chunk (waveField.wgsl.ts \u2014 cellTwist/cursorSwirl/\n// travelingEnvelope; splices AFTER valueNoise + curlFBM are declared). paper-grid + concentric\n// share this EXACTLY \u2014 the cell-local twist replaces the retired LINE-warp (the C3 cure: the\n// boxes twist about their own center, the lines stay locally straight).\n\nconst WAVE_FIELD_TAU: f32 = 6.283185307179586;\n\n// The traveling-wave envelope \u2014 a moving Gaussian crest band sweeping along waveDir.\nfn travelingEnvelope(pivot: vec2f, t: f32, waveDir: vec2f, waveK: f32, waveOmega: f32, waveSigma: f32) -> f32 {\n let coord = dot(pivot, waveDir) * waveK - t * waveOmega;\n let crest = fract(coord / WAVE_FIELD_TAU);\n let z = (crest - 0.5) * 2.0;\n return exp(-(z * z) / max(waveSigma, 1e-3));\n}\n\n// The curl-direction scalar \u2014 the smooth low-freq director the per-cell twist follows.\nfn curlScalar(cc: vec2f, t: f32) -> f32 {\n let f = curlFBM(vec2f(cc.x * 0.5 + t * 0.08, cc.y * 0.5 - t * 0.06));\n return clamp(f.x, -1.0, 1.0);\n}\n\n// The directed-twist FLOOR (the visibility cure): keep the curl SIGN (adjacent cells lean\n// together) but floor the magnitude so a crest-band cell ALWAYS rotates decisively.\nconst WAVE_FIELD_TWIST_FLOOR: f32 = 0.62;\nfn directedTwist(s: f32, floorMag: f32) -> f32 {\n let mag = max(floorMag, abs(s));\n let sgn = tanh(s * 6.0);\n return sgn * mag;\n}\n\n// \u2500\u2500 The FACE leaf (the structurally-absent RE-INVENT \u2014 height-lit filled cell interior) \u2500\u2500\n// DECLARED ABOVE cellTwist (no WGSL forward declaration): cellTwist rides cellHeight via the\n// driver so twist + face read ONE envelope.\n\n// The sheet displacement at a cell center = the EXACT traveling-wave scalar the twist rides.\nfn cellHeight(cc: vec2f, t: f32, waveDir: vec2f, waveK: f32, waveOmega: f32, waveSigma: f32, amp: f32) -> f32 {\n return travelingEnvelope(cc, t, waveDir, waveK, waveOmega, waveSigma) * amp;\n}\n\n// The pre-twist driver (FOLD A): the cell pivot cc + the crest envelope env the twist AND the\n// face both ride. The face samples height/relief at THIS pre-twist cc (the crest twist crosses\n// the cell boundary \u2192 floor(twisted_g) would light a NEIGHBOUR cell). cc in .xy, env in .z.\nfn cellDriver(g: vec2f, cellSize: f32, t: f32, waveDir: vec2f, waveK: f32, waveOmega: f32,\n waveSigma: f32, amp: f32) -> vec3f {\n let cs = max(cellSize, 1e-3);\n let cc = (floor(g / cs) + 0.5) * cs;\n let env = cellHeight(cc, t, waveDir, waveK, waveOmega, waveSigma, amp);\n return vec3f(cc, env);\n}\n\n// The central-difference slope of cellHeight across a cell (eps = 0.5\u00B7cellSize) \u2014 derivative-\n// FREE (NO dFdx on the height) \u2192 Safari WebGL2-safe. Returns \u2207H.\nfn faceRelief(cc: vec2f, cellSize: f32, t: f32, waveDir: vec2f, waveK: f32, waveOmega: f32,\n waveSigma: f32, amp: f32) -> vec2f {\n let eps = max(cellSize, 1e-3) * 0.5;\n let hxp = cellHeight(cc + vec2f(eps, 0.0), t, waveDir, waveK, waveOmega, waveSigma, amp);\n let hxm = cellHeight(cc - vec2f(eps, 0.0), t, waveDir, waveK, waveOmega, waveSigma, amp);\n let hyp = cellHeight(cc + vec2f(0.0, eps), t, waveDir, waveK, waveOmega, waveSigma, amp);\n let hym = cellHeight(cc - vec2f(0.0, eps), t, waveDir, waveK, waveOmega, waveSigma, amp);\n return vec2f((hxp - hxm) / (2.0 * eps), (hyp - hym) / (2.0 * eps));\n}\n\n// Soft inset-square coverage inside a (warped) cell \u2014 the filled FACE plateau. d is the\n// distance into the cell from the nearest gutter (the Golus triangle-wave); the inset retreats\n// as it grows (the squash). aa = the shader's fwidth(g) (JS passes a fixed uvDeriv).\nfn facePlateau(g: vec2f, inset: f32, uvDeriv: vec2f) -> f32 {\n let tri = 1.0 - abs(fract(g) * 2.0 - 1.0);\n let d = min(tri.x, tri.y);\n let aa = max(uvDeriv.x, uvDeriv.y) * 1.5;\n return smoothstep(inset, inset + 2.0 * aa, d);\n}\n\n// The cell-local twist about each cell's own center, gated by the traveling wave + directed\n// by the curl flow. amp is the spring-eased envelope amplitude the JS host drives. FOLD C: the\n// TWIST_FLOOR is crest-gated by env so OFF-crest cells relax to flat calm paper (the traveling\n// read, not static foil).\nfn cellTwist(g: vec2f, cellSize: f32, t: f32, waveDir: vec2f, waveK: f32, waveOmega: f32,\n waveSigma: f32, twistMax: f32, shearMax: f32, amp: f32) -> vec2f {\n let drv = cellDriver(g, cellSize, t, waveDir, waveK, waveOmega, waveSigma, amp);\n let cc = drv.xy;\n let env = drv.z;\n let floorMag = WAVE_FIELD_TWIST_FLOOR * env; // FOLD C: crest-gated floor\n let theta = twistMax * env * directedTwist(curlScalar(cc, t), floorMag);\n let shear = shearMax * env * directedTwist(curlScalar(cc + vec2f(17.3, 9.1), t), floorMag);\n let local = g - cc;\n let ct = cos(theta);\n let st = sin(theta);\n var rot = vec2f(ct * local.x - st * local.y, st * local.x + ct * local.y);\n rot.x = rot.x + shear * rot.y; // a small skew so the box MORPHS, not just rotates\n return cc + rot;\n}\n\n// The CONTINUOUS traveling-wave FLOW warp \u2014 the SMOOTH twin of cellTwist (no per-cell seam;\n// for the level-set contours that shatter into a mesh under the cell discontinuity).\nfn waveFlow(g: vec2f, t: f32, waveDir: vec2f, waveK: f32, waveOmega: f32, waveSigma: f32,\n twistMax: f32, amp: f32) -> vec2f {\n let env = travelingEnvelope(g, t, waveDir, waveK, waveOmega, waveSigma) * amp;\n let f = curlFBM(vec2f(g.x * 0.6 + t * 0.05, g.y * 0.6 - t * 0.04));\n let f2 = curlFBM(vec2f(g.x * 1.1 - t * 0.03, g.y * 1.1 + t * 0.035));\n let k = twistMax * env;\n return g + (f + f2 * 0.5) * k;\n}\n\n// The local cursor swirl \u2014 the finger twists the cells around it (re-aimed cursorBulge).\nfn cursorSwirl(g: vec2f, cursor: vec2f, strength: f32, radius: f32) -> vec2f {\n let to = g - cursor;\n let d2 = dot(to, to);\n let r = max(radius, 1e-4);\n let theta = strength * exp(-d2 / (2.0 * r * r));\n let ct = cos(theta);\n let st = sin(theta);\n return cursor + vec2f(ct * to.x - st * to.y, st * to.x + ct * to.y);\n}\n\n// The LOW-octave value-noise topography \u2014 the scalar field concentric extracts contours of.\nfn heightField(p: vec2f, octavesF: f32, seed: f32) -> f32 {\n var v = 0.0;\n var amp = 0.5;\n var freq = 1.0;\n var px = p.x + seed;\n var py = p.y - seed;\n let n = i32(clamp(octavesF, 1.0, 6.0));\n for (var i = 0; i < 6; i = i + 1) {\n if (i >= n) { break; }\n v = v + amp * valueNoise(px * freq, py * freq);\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 \u03C9=\u221A(g\u00B7k) breathing swell \u2014 basins inflate/deflate with weight.\nfn waveSwell(t: f32, phase: f32) -> f32 {\n return sin(t * 0.35 + phase) * 0.5 + sin(t * 0.21 + phase * 1.7) * 0.5;\n}\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// \u2500\u2500 The 3-stop warm-divergent FACE ramp (FOLD B \u2014 height-keyed, NOT a 2-point mid-park) \u2500\u2500\n// trough (faceLo) \u2192 mid (faceMid) \u2192 crest (faceHi), keyed on rampT = mix(shade, h). All stops\n// are warm hue \u2208 [20,90] (the teal-navy purge clear by construction). Linear-space stops; the\n// fs_main routes the result through the production OETF (FOLD E).\nfn faceRamp(rampT: f32) -> vec3f {\n let s = clamp(rampT, 0.0, 1.0);\n if (s < 0.5) {\n return mix(u.faceLo.rgb, u.faceMid.rgb, s * 2.0);\n }\n return mix(u.faceMid.rgb, u.faceHi.rgb, (s - 0.5) * 2.0);\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: CELL-TWIST + cursor-swirl the grid coordinate, then two-tier Golus.\n // cellTwist rotates each cell about its OWN center (the boxes twist, the lines stay locally\n // straight \u2014 the C3 cure) gated by a traveling Gaussian crest; cursorSwirl twists the cells\n // about the finger. The Golus dv reads the FINAL twisted coord (the crisp-line fence survives).\n let g0 = uv * gridScale;\n // FOLD A \u2014 the PRE-twist driver: the face samples height/relief at THIS cc (floor(twisted_g)\n // at the crest lights a NEIGHBOUR cell). cellTwist rides the SAME driver, so twist + face fuse.\n let drv = cellDriver(g0, 1.0, t, u.wave.xy, u.wave.z, u.wave.w, u.wave2.x, u.wave2.w);\n let cc = drv.xy;\n var g = cellTwist(g0, 1.0, t, u.wave.xy, u.wave.z, u.wave.w, u.wave2.x, u.wave2.y, u.wave2.z, u.wave2.w);\n if (u.cursor2.y > 0.5) {\n // bulgeMode (cursor2.x: +repel / \u2212attract) signs the swirl direction.\n g = cursorSwirl(g, u.cursor.xy, u.cursor.z * u.cursor2.x, u.cursor.w);\n }\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 // \u2500\u2500 The FACE (BD.W-PAPERGRID-FACE) \u2014 height-lit filled cell interior \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Sample height/relief at the pre-twist driver cc (FOLD A); Lambert the \u2207H slope against the\n // fixed cel key-light; squash the inset so the crest face inflates; multi-stop warm-divergent\n // ramp keyed on mix(shade, h) (FOLD B); the ink through the production OETF (FOLD E).\n let h = cellHeight(cc, t, u.wave.xy, u.wave.z, u.wave.w, u.wave2.x, u.wave2.w);\n let grad = faceRelief(cc, 1.0, t, u.wave.xy, u.wave.z, u.wave.w, u.wave2.x, u.wave2.w);\n let n = normalize(vec3f(-grad * u.face.y, 1.0));\n let shade = clamp(0.5 + dot(n, normalize(vec3f(u.warp2.zw, 1.0))) * 0.5, 0.0, 1.0);\n let inset = u.face.w * (1.0 - u.face.z * h); // squash & stretch\n let face = facePlateau(g, inset, dv);\n let rampT = clamp(shade * 0.5 + h * 0.5, 0.0, 1.0); // FOLD B \u2014 height-keyed crest\n let faceInk = clamp(linearToSrgb(faceRamp(rampT)), vec3f(0.0), vec3f(1.0));\n let faceA = face * u.face.x * u.field.x; // FOLD D \u2014 one field-blend scalar\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: the face fills the cell, the ink over the themed bg, the line on top.\n let bg = clamp(linearToSrgb(u.bg.rgb), vec3f(0.0), vec3f(1.0));\n let base = mix(bg, faceInk, faceA);\n let a = line * u.field.x;\n let outRgb = mix(base, col, a);\n return vec4f(outRgb, 1.0);\n }\n // transparent ground: the FACE composites UNDER the line, the SOURCE-OVER operator in\n // PREMULTIPLIED space (the page reads through the gutters). faceAlpha:0 \u2192 faceA=0 \u2192 the face\n // term vanishes \u2192 vec4f(col\u00B7line, line) = byte-identical to the HEAD line-only render.\n let linePremult = (col * line) * u.field.x; // line layer (the FieldAlpha global subtlety)\n let lineA = line * u.field.x;\n let facePremult = faceInk * faceA; // face layer premultiplied (faceA folds field.x)\n let outPremult = linePremult + facePremult * (1.0 - lineA);\n let a = lineA + faceA * (1.0 - lineA);\n return vec4f(outPremult, 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,39 @@
|
|
|
1
|
+
import { type VariantProps } from "class-variance-authority";
|
|
2
|
+
/**
|
|
3
|
+
* chipVariants — the ONE congruent chip recipe (BD.W-CHIP-CONGRUENT-GLASS).
|
|
4
|
+
*
|
|
5
|
+
* The chip family (ToggleChip · SelectableChip + the toggle-group children)
|
|
6
|
+
* collapses to ONE `chipVariants({ size })`: a stadium-pill warm-glass LENS that
|
|
7
|
+
* PUNCHES when you pick it. Survival of the fittest — `selectableChipVariants`
|
|
8
|
+
* (`sm`/`md`/`lg`) + the `ToggleChip` `chip`/`cell` axis collapse here (clean
|
|
9
|
+
* break, no alias — the no-legacy law). The three SFCs stay DISTINCT (bool toggle
|
|
10
|
+
* vs tonal picker vs glyph tile) but render the SAME register.
|
|
11
|
+
*
|
|
12
|
+
* The recipe is STRUCTURE + the shared-register hooks: it COMPOSES the read-only
|
|
13
|
+
* shared registers, never re-forks a parallel glass/cartoon/motion system —
|
|
14
|
+
* · `.glass-chip` — the chip-family material/motion layer (the warm idle
|
|
15
|
+
* floor + the `--glass-fill-tint` plate tint + the ONE
|
|
16
|
+
* scale write + the `::after` colour-flood punch).
|
|
17
|
+
* · `.glass-capsule` — the warm-transmissive lozenge BODY (fill + rim +
|
|
18
|
+
* shadow + blur, on `--radius-pill` → the stadium
|
|
19
|
+
* end-cap at every rung). Radius is INVARIANT — the
|
|
20
|
+
* capsule re-rounds itself at every height; no
|
|
21
|
+
* `rounded-*` rung (retires the 4/6/10px grab-bag).
|
|
22
|
+
* · `.glass-capsule-hover`— the SHARED specular-lift + press-snap on hover.
|
|
23
|
+
* · `.accent-tone` — the contrast-floored tonal channels (idle fill /
|
|
24
|
+
* active band / active edge / contrast-safe ink).
|
|
25
|
+
*
|
|
26
|
+
* The geometry: radius invariant (the capsule's `--radius-pill`); only padding/
|
|
27
|
+
* text vary, on a √φ ladder (φ≈1.618). The `cell` is the ONE documented exception
|
|
28
|
+
* (`.glass-chip--cell` → `--radius-card`): a 72px icon+label tile is a CARD, not a
|
|
29
|
+
* pill — a DELIBERATE 2-silhouette family, composing the SAME material + motion.
|
|
30
|
+
*
|
|
31
|
+
* NO scale CVA — the ONE `scale` write lives on `.glass-chip` (hover/press/punch
|
|
32
|
+
* folded into a single source of truth; a CVA `hover:scale-*` would collide).
|
|
33
|
+
* The CVA carries no `color-mix(…--primary…)` literal — the tonal COLOUR is the
|
|
34
|
+
* `.accent-tone` register's.
|
|
35
|
+
*/
|
|
36
|
+
export declare const chipVariants: (props?: ({
|
|
37
|
+
size?: "cell" | "sm" | "lg" | "md" | null | undefined;
|
|
38
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
39
|
+
export type ChipVariants = VariantProps<typeof chipVariants>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* selectableChipVariants — the public name for the SelectableChip face of the ONE
|
|
3
|
+
* shared `chipVariants` recipe (BD.W-CHIP-CONGRUENT-GLASS).
|
|
4
|
+
*
|
|
5
|
+
* The chip family collapsed to ONE congruent stadium-pill warm-glass register
|
|
6
|
+
* (`./chipVariants`). SelectableChip reads it through this stable name; the
|
|
7
|
+
* `size` axis (`sm`/`md`/`lg`/`cell`) IS the shared axis. No second recipe, no
|
|
8
|
+
* grab-bag — the tonal channels are the `.accent-tone` register's, the lens is
|
|
9
|
+
* `.glass-chip` over `.glass-capsule`. Clean break: the prior per-state
|
|
10
|
+
* `color-mix(…--primary…)` literals + the `rounded-sm`/`-md`/`-lg` grab-bag are
|
|
11
|
+
* GONE (no alias — the no-legacy law); this file is the public re-point, not a
|
|
12
|
+
* parallel CVA.
|
|
13
|
+
*/
|
|
14
|
+
export { chipVariants as selectableChipVariants } from "./chipVariants";
|
|
15
|
+
export type { ChipVariants as SelectableChipVariants } from "./chipVariants";
|
|
@@ -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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as SplitChars } from "./SplitChars.vue";
|
|
@@ -50,12 +50,14 @@ export interface SegmentedTabsProps {
|
|
|
50
50
|
*/
|
|
51
51
|
responsive?: boolean | SegmentedTabsResponsive;
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
53
|
+
* BC.W-LIQUID-TAB — the LIQUID TAB. The `pill` indicator is a physical lozenge
|
|
54
|
+
* you can GRAB and PULL: it follows the finger ~1:1, squishes on drag velocity,
|
|
55
|
+
* and flings to the nearest tab on release (`useDragMorph`). DEFAULT `true` — the
|
|
56
|
+
* pull is the iOS-27 primary affordance, ADDITIVE OVER the click/keyboard path
|
|
57
|
+
* (which stays byte-identical + fully operable — the drag is a pointer
|
|
58
|
+
* ENHANCEMENT, never the sole selection mechanism, WCAG 2.1.1). A consumer who
|
|
59
|
+
* wants click-only opts out with `:draggable="false"`. No-op on `underline` (the
|
|
60
|
+
* ink hairline has no indicator element to deform — `dragEnabled` gates it).
|
|
59
61
|
*/
|
|
60
62
|
draggable?: boolean;
|
|
61
63
|
class?: HTMLAttributes["class"];
|
|
@@ -1,10 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Fallback for `--tab-indicator-max-stretch` when the cascade leaves it unset — the
|
|
3
|
-
* default ≈+
|
|
3
|
+
* default ≈+15% travel-squish cap. `--stretch = 1 + frac · (cap − 1)`, so a
|
|
4
4
|
* full-width jump reaches the cap and a tiny hop stays near 1. The token is the
|
|
5
5
|
* authority; this is the no-token floor.
|
|
6
|
+
*
|
|
7
|
+
* BD.W-TABS-LIQUID — re-tuned 1.18 → 1.11. The `--tab-blob` area-inflation channel now
|
|
8
|
+
* carries the 5-beat "grow"/overshoot, so the per-axis travel-squish cap drops: the FENCE
|
|
9
|
+
* is the COMPOSED visible bbox area (`blob × stretch`) ≤ ~1.14, NOT the bare per-axis
|
|
10
|
+
* scalar. The cap is shared by the click travel-squish AND the drag pull-morph (the SOLE
|
|
11
|
+
* cap source — the constant + the token in lockstep, never a fork); the volume-preserving
|
|
12
|
+
* reciprocal pairing (`scale: var(--stretch) calc(1/var(--stretch))`) is unchanged.
|
|
6
13
|
*/
|
|
7
|
-
export declare const DEFAULT_INDICATOR_MAX_STRETCH = 1.
|
|
14
|
+
export declare const DEFAULT_INDICATOR_MAX_STRETCH = 1.11;
|
|
15
|
+
/**
|
|
16
|
+
* BD.W-TABS-LIQUID — fallback for `--tab-indicator-blob-max` when the cascade leaves it
|
|
17
|
+
* unset: the 5-beat blob's area-inflation overshoot peak. The 2nd `useLiquidFlex` channel
|
|
18
|
+
* drives `--tab-blob` toward this on the grow-overshoot beat, then de-inflates to 1 at
|
|
19
|
+
* arrival (shrink-to-fit). Kept LOW (~1.045) so the COMPOSED bbox area (`blob × stretch` ≈
|
|
20
|
+
* blob², the squish being volume-preserving) clears the ≤ ~1.14 anti-taffy fence. The
|
|
21
|
+
* token is the authority; this is the no-token floor (the SOLE blob-cap source).
|
|
22
|
+
*/
|
|
23
|
+
export declare const DEFAULT_INDICATOR_BLOB_MAX = 1.045;
|
|
8
24
|
/**
|
|
9
25
|
* The travel-progress fraction at which the squish RELEASES — the Material
|
|
10
26
|
* "grow then shrink" close, keyed to ARRIVAL (BA.W-TABS). The squish opens with
|
|
@@ -14,5 +30,15 @@ export declare const DEFAULT_INDICATOR_MAX_STRETCH = 1.08;
|
|
|
14
30
|
* release schedules off the calibrated clock (`--spring-snappy-duration`) scaled
|
|
15
31
|
* by this fraction, so the stretch peaks during travel and shrinks to fit AT
|
|
16
32
|
* arrival, never before.
|
|
33
|
+
*
|
|
34
|
+
* BC.W-UNDERLINE-TUNE — VERIFIED against the eased `snappy` (response 0.42 / ζ 0.78,
|
|
35
|
+
* the BC.W-SPRING-EASE re-derive). On that curve the position arrives (≥99% travel)
|
|
36
|
+
* at ~74% of the `--spring-snappy-duration` clock and the 90%-travel point lands at
|
|
37
|
+
* ~57% (mid-clock — the front-load gone). 0.82 releases the squish at ~279ms (= 0.82
|
|
38
|
+
* × 340ms), i.e. AT arrival (just past the ~74% arrival), so the stretch peaks DURING
|
|
39
|
+
* travel and shrinks to fit AT arrival — never before (0.82 ≥ the 0.74 arrival point).
|
|
40
|
+
* The position + squish now read ONE matched window: the desync (HEAD position-at-16%
|
|
41
|
+
* vs squish-at-82%) collapsed because the eased curve actually travels across the clock.
|
|
42
|
+
* KEPT at 0.82 — the eased arrival sits inside the release fraction; no nudge needed.
|
|
17
43
|
*/
|
|
18
44
|
export declare const INDICATOR_RELEASE_AT_ARRIVAL = 0.82;
|
|
@@ -7,6 +7,22 @@
|
|
|
7
7
|
*
|
|
8
8
|
* AA.A4 §S-16 — the `aria-valuenow` binding coerces `Number(modelValue ?? 0)`
|
|
9
9
|
* so a numeric attribute always renders (axe `aria-required-attr` regression).
|
|
10
|
+
*
|
|
11
|
+
* BD.W-TIMELINE-RAIL-UNIFY (LEG 2) — the head is RE-INVENTED as a warm-glass
|
|
12
|
+
* liquid lozenge. The four cartoon beats COMPOSE shipped engines only (no new
|
|
13
|
+
* motion engine): travel rides a `useSpring`/SpringProgress position written
|
|
14
|
+
* to `transform: translateX()` (NEVER `style.left` — Safari composites
|
|
15
|
+
* transform, not left); `useLiquidFlex` `"tanh"` velocity-squish multiplies
|
|
16
|
+
* into the SAME matrix (vol-preserving, cap ≤1.12); `useSpringPress` grab
|
|
17
|
+
* anticipation; the velocity term is the head spring's own derivative (the
|
|
18
|
+
* self-extinguishing per-frame velocity SpringProgress already computes — the
|
|
19
|
+
* GOLDEN §0 "drive off the spring derivative" path, no free-running rAF); the
|
|
20
|
+
* fill LAGS the head on a slower spring clock; release settles ζ<1 on the
|
|
21
|
+
* cartoon-punch clock; a one-shot accent-flood ripples on landing. Always
|
|
22
|
+
* visible (the
|
|
23
|
+
* `opacity:0`-until-hover is RETIRED — the affordance must be present during
|
|
24
|
+
* keyboard/touch scrub). The bead seats φ-INSIDE the channel; the 44px touch
|
|
25
|
+
* target is an invisible `::before` halo, decoupled from the visible bead.
|
|
10
26
|
*/
|
|
11
27
|
type __VLS_Props = {
|
|
12
28
|
/** 0..1 scrubber position. */
|
|
@@ -16,14 +16,6 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { type ComputedRef, type Ref } from "vue";
|
|
18
18
|
import type { TimelineSegment } from "./types";
|
|
19
|
-
/**
|
|
20
|
-
* Resolve a segment's gradient declaration to a CSS background expression.
|
|
21
|
-
* - `string` (raw CSS): consumed verbatim — caller controls direction.
|
|
22
|
-
* - `{from, to}` pair: expanded to `linear-gradient(90deg, from, to)`.
|
|
23
|
-
* - undefined: falls through to the `--timeline-segment-default-gradient`
|
|
24
|
-
* token (consumer can override on the primitive or via a section-tone).
|
|
25
|
-
*/
|
|
26
|
-
export declare function gradientFor(seg: TimelineSegment): string;
|
|
27
19
|
/**
|
|
28
20
|
* Fill percentage per state. Explicit `progress` wins; otherwise the
|
|
29
21
|
* canonical mapping (pending=0, active=0.5, completed=1). Clamped to
|
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
import { type VariantProps } from "class-variance-authority";
|
|
2
2
|
export { default as ToggleChip } from "./ToggleChip.vue";
|
|
3
3
|
/**
|
|
4
|
-
* Shared toggleable "chip" / "cell" primitive for selector grids
|
|
4
|
+
* Shared toggleable "chip" / "cell" primitive for selector grids
|
|
5
|
+
* (BD.W-CHIP-CONGRUENT-GLASS).
|
|
5
6
|
*
|
|
6
7
|
* `chip` — inline horizontal token (e.g. tag pickers, tool-filter rows).
|
|
7
8
|
* `cell` — square card that stacks an icon/preview over a label
|
|
8
9
|
* (e.g. pose pickers, palette swatches, emotion pickers).
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Survival of the fittest: the chip family collapsed to ONE congruent recipe
|
|
12
|
+
* (`../selectable-chip/chipVariants`). ToggleChip keeps its `variant` ergonomics
|
|
13
|
+
* (`chip` inline pill / `cell` square card) but RE-POINTS onto the shared
|
|
14
|
+
* `chipVariants` `size` axis — `chip` → the `md` stadium rung, `cell` → the
|
|
15
|
+
* `cell` card exception. Clean break (no alias): the prior 4px `rounded-sm`
|
|
16
|
+
* grab-bag + the `rounded-[0.625rem]→0px` cell + the per-state
|
|
17
|
+
* `color-mix(…--primary…)` literals are GONE; the recipe is now the shared
|
|
18
|
+
* `.glass-chip .glass-capsule .glass-capsule-hover .accent-tone` lens — the SAME
|
|
19
|
+
* register SelectableChip + the toggle-group render. ONE family, no fork.
|
|
20
|
+
*
|
|
21
|
+
* The `data-state="on"` attribute is set by the reka-ui Toggle root when pressed,
|
|
22
|
+
* so the selected colour-flood + the punch hang off the data attribute (in
|
|
23
|
+
* `glass/glass-chip.css`) — no class-binding at the call site.
|
|
13
24
|
*/
|
|
14
25
|
export declare const toggleChipVariants: (props?: ({
|
|
15
26
|
variant?: "cell" | "chip" | null | undefined;
|