@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
package/src/styles/drawer.css
CHANGED
|
@@ -26,6 +26,46 @@
|
|
|
26
26
|
initial-value: 1;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
+
/* BD.W-OVERLAY-STAGE-COUPLE — `--stage-t`, the ONE registered STAGING scalar (0 =
|
|
30
|
+
* closed/un-staged → 1 = fully staged). The whole modal band rides this ONE knob:
|
|
31
|
+
* the drawer's surface FREEZE (A), the scrim DEEPEN (B), the page RECEDE+SCALE (C),
|
|
32
|
+
* the opt-in blur ENGAGE (D) are all pure `calc()` reads OF it. `inherits: true` so
|
|
33
|
+
* a single writer at `:root` reaches the portaled scrim AND the page-wrapper sibling
|
|
34
|
+
* AND the sheet descendants from ONE write (the scrim is NOT a descendant of the
|
|
35
|
+
* content, so a content-local mirror could never reach it — the `:root` write is the
|
|
36
|
+
* cross-subtree path).
|
|
37
|
+
*
|
|
38
|
+
* THE SINGLE WRITER (fold C1·R2 — no dual scalar desync). `useDrawerSnap.writeScalar`
|
|
39
|
+
* writes BOTH `--glass-drawer-t` (the sheet's per-element translate) AND `--stage-t`
|
|
40
|
+
* (the scene scalar at `:root`) in the SAME call — atomically, never separately, so
|
|
41
|
+
* the two can never desync on a drag-cancel / fling-overshoot / interrupted snap. A
|
|
42
|
+
* plain modal (Dialog/Command) flips `--stage-t` 0→1 on `--spring-snappy` at open;
|
|
43
|
+
* the close-write removes the inline value so the registered property reverts to its
|
|
44
|
+
* `initial-value: 0` (the stale-latch fix). `initial-value: 0` so an un-staged page never
|
|
45
|
+
* recedes. EVERY consumer `clamp(0, …, 1)`-bounds it (a `--ease-cartoon-punch` fling
|
|
46
|
+
* can overshoot >1 — the page-scale / radius / scrim must not run past their
|
|
47
|
+
* endpoints). */
|
|
48
|
+
@property --stage-t {
|
|
49
|
+
syntax: "<number>";
|
|
50
|
+
inherits: true;
|
|
51
|
+
initial-value: 0;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* The stage-t transition + close-write reset (the registered-property stale-latch
|
|
55
|
+
* fix, fold C3·R7).
|
|
56
|
+
*
|
|
57
|
+
* The drawer's single writer (useDrawerSnap) drives `--stage-t` per frame and
|
|
58
|
+
* REMOVES the inline value on close → the registered property reverts to its
|
|
59
|
+
* `initial-value: 0`. The centered modal (DialogContent) flips it 0→1 on open via the
|
|
60
|
+
* `data-stage-flip` marker on `:root`; this rule owns the FLIP TRANSITION (a snappy
|
|
61
|
+
* spring) so the dialog's `:root --stage-t` value glides 0→1 rather than snapping — a
|
|
62
|
+
* CSS-owned transition, NOT an inline `transition` shorthand on `:root` (which would
|
|
63
|
+
* clobber unrelated root transitions). On close the marker is dropped and the inline
|
|
64
|
+
* value removed → the property reverts to 0 (no stale full-staged latch on re-open). */
|
|
65
|
+
:root[data-stage-flip] {
|
|
66
|
+
transition: --stage-t var(--spring-snappy-duration, 0.4s) var(--spring-snappy, ease);
|
|
67
|
+
}
|
|
68
|
+
|
|
29
69
|
:root {
|
|
30
70
|
/* Detent grammar knobs — overridable per-consumer */
|
|
31
71
|
--drawer-handle-w: 2.25rem;
|
|
@@ -131,6 +171,80 @@
|
|
|
131
171
|
margin-top: 0;
|
|
132
172
|
}
|
|
133
173
|
|
|
174
|
+
/*
|
|
175
|
+
* BD.W-OVERLAY-STAGE-COUPLE — coupling (A): the surface FREEZE, composed AT THE
|
|
176
|
+
* ELEMENT. A detented sheet is SEE-THROUGH at peek/half (the page bleeds) and
|
|
177
|
+
* SOLIDIFIES toward a warm-tinted card at full (page does not bleed, blur → 0). This
|
|
178
|
+
* is the iOS-27 bottom-sheet crown the live α-0.95-at-every-detent flattened.
|
|
179
|
+
*
|
|
180
|
+
* A TWO-SEGMENT lerp on the ONE `--stage-t` knob (the self-standing crown — the wave
|
|
181
|
+
* owns BOTH endpoints so it does not block on BE.W-SHEET-TRANSLUCENT, fold C3·R1):
|
|
182
|
+
* • DESCENT t ∈ [0, 0.85] — the transmissive crown sinks `--glass-bg-overlay` α
|
|
183
|
+
* toward the shipped see-through `--glass-bg-sheet` floor (`--glass-opacity-sheet:
|
|
184
|
+
* 0.74`). At peek/half the page bleeds through.
|
|
185
|
+
* • SOLIDIFY t ∈ [0.85, 1] — `--sheet-freeze` lerps the descended plate toward a
|
|
186
|
+
* WARM-TINTED card-mix (NOT bare `--card` — the gray-at-full carve hole, fold
|
|
187
|
+
* C1·R4); `backdrop-filter` blur decays to 0 (a solid plate has no backdrop to
|
|
188
|
+
* bend — a Safari win, no wasted sample behind an opaque plate).
|
|
189
|
+
*
|
|
190
|
+
* Composed AT THE ELEMENT (the `[data-surface=opaque]` substitution-safe path) via
|
|
191
|
+
* element-level `color-mix` — NEVER an ancestor `filter` (which would clobber the
|
|
192
|
+
* sheet's own backdrop-filter, the dock-hub goo-tear lesson, §7). `--stage-t` reads
|
|
193
|
+
* the `:root` scalar the single writer drives (mirrored from `--glass-drawer-t`).
|
|
194
|
+
*/
|
|
195
|
+
.glass-drawer[data-glass-drawer-snap-points="true"] {
|
|
196
|
+
/* the DESCENT fraction — 0 at closed → 1 at the commit floor (t=0.85). */
|
|
197
|
+
--sheet-descent: clamp(0, calc(var(--stage-t) / 0.85), 1);
|
|
198
|
+
/* the SOLIDIFY fraction — 0 below the commit floor → 1 at full (t=1). */
|
|
199
|
+
--sheet-freeze: clamp(0, calc((var(--stage-t) - 0.85) / 0.15), 1);
|
|
200
|
+
/* the transmissive crown plate: the warm overlay fill sunk toward the shipped
|
|
201
|
+
see-through `--glass-bg-sheet` floor across the descent. */
|
|
202
|
+
--sheet-crown: color-mix(
|
|
203
|
+
in oklab,
|
|
204
|
+
color-mix(
|
|
205
|
+
in oklab,
|
|
206
|
+
var(--glass-bg-overlay),
|
|
207
|
+
var(--glass-tint-source) var(--glass-tint-strength)
|
|
208
|
+
),
|
|
209
|
+
var(--glass-bg-sheet) calc(var(--sheet-descent) * 100%)
|
|
210
|
+
);
|
|
211
|
+
/* the warm-tinted SOLID escape (fold C1·R4 — a warm card-mix toward the EXPLICIT
|
|
212
|
+
warm `--glass-capsule-warm` amber, NEVER bare `--card` and NEVER the
|
|
213
|
+
`--glass-tint-source` alias which resolves back to `--card` and would be a
|
|
214
|
+
no-op warm; build-trap-(d) safe — a warm oklch color, never bare `transparent`).
|
|
215
|
+
At the shared 16% warm floor a dark full sheet stays C ≥ 0.02 warm — no
|
|
216
|
+
charcoal holiday at full. */
|
|
217
|
+
--sheet-solid: color-mix(
|
|
218
|
+
in oklab,
|
|
219
|
+
var(--card),
|
|
220
|
+
var(--glass-capsule-warm) var(--glass-capsule-warm-floor, 16%)
|
|
221
|
+
);
|
|
222
|
+
background: color-mix(
|
|
223
|
+
in oklab,
|
|
224
|
+
var(--sheet-crown),
|
|
225
|
+
var(--sheet-solid) calc(var(--sheet-freeze) * 100%)
|
|
226
|
+
);
|
|
227
|
+
backdrop-filter: blur(
|
|
228
|
+
calc(var(--glass-blur-overlay-radius, 20px) * (1 - var(--sheet-freeze)))
|
|
229
|
+
)
|
|
230
|
+
saturate(1.6);
|
|
231
|
+
-webkit-backdrop-filter: blur(
|
|
232
|
+
calc(var(--glass-blur-overlay-radius, 20px) * (1 - var(--sheet-freeze)))
|
|
233
|
+
)
|
|
234
|
+
saturate(1.6);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* The `surface=opaque` explicit escape still wins (it sets the solid plate
|
|
238
|
+
unconditionally regardless of detent) — the freeze is the DEFAULT glass crown; the
|
|
239
|
+
opt-out plate is the consumer's hard override. Source order keeps the opaque rule
|
|
240
|
+
(declared above) — re-assert it here so it beats the snap-points freeze at equal
|
|
241
|
+
specificity for a detented opaque sheet. */
|
|
242
|
+
.glass-drawer[data-glass-drawer-snap-points="true"][data-surface="opaque"] {
|
|
243
|
+
background: color-mix(in srgb, var(--card), transparent 0%);
|
|
244
|
+
backdrop-filter: none;
|
|
245
|
+
-webkit-backdrop-filter: none;
|
|
246
|
+
}
|
|
247
|
+
|
|
134
248
|
/* Direction variants — the content root tags itself with the drag axis
|
|
135
249
|
(`data-glass-drawer-direction`). Bottom is the default; the others ride the same
|
|
136
250
|
surface so a top/side sheet inherits the grammar. The side-lens (left/right) is
|
|
@@ -222,6 +336,56 @@
|
|
|
222
336
|
background-color: var(--drawer-snap-rule-color);
|
|
223
337
|
}
|
|
224
338
|
|
|
339
|
+
/*
|
|
340
|
+
* BD.W-OVERLAY-STAGE-COUPLE — coupling (B): the scrim DEEPEN. The scrim α tracks
|
|
341
|
+
* `--stage-t` so a peek drawer barely dims and a full drawer commits hard (the live
|
|
342
|
+
* fixed-α-0.8 at every detent is the born-RED). Reuses the SHIPPED warm
|
|
343
|
+
* `--overlay-scrim-ink` (the F7 warm near-black, never flat black), now t-coupled.
|
|
344
|
+
* `clamp(0,…,1)` bounds the fling overshoot. The scrim element gains
|
|
345
|
+
* `[data-stage-scrim]` (DrawerOverlay.vue) and reads the inherited `:root` scalar.
|
|
346
|
+
*/
|
|
347
|
+
[data-stage-scrim] {
|
|
348
|
+
background: color-mix(
|
|
349
|
+
in srgb,
|
|
350
|
+
var(--overlay-scrim-ink)
|
|
351
|
+
calc((0.28 + clamp(0, var(--stage-t), 1) * 0.44) * 100%),
|
|
352
|
+
transparent
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/*
|
|
357
|
+
* BD.W-OVERLAY-STAGE-COUPLE — coupling (C): the page RECEDE + SCALE. The page wrapper
|
|
358
|
+
* scales `1 → 0.95` + corner-radius blooms as `--stage-t → 1` (the iOS "card recedes"
|
|
359
|
+
* depth cue), retiring the dead `shouldScaleBackground` boolean. `scale` +
|
|
360
|
+
* `border-radius` ONLY — NO `filter` (the ancestor-filter trap: `filter` on the app
|
|
361
|
+
* root establishes a containing block for `position:fixed` and force-rasterizes the
|
|
362
|
+
* page subtree every frame — fold C2·R1; §7). The wrapper is the consumer's app-root
|
|
363
|
+
* marker (`demo/App.vue` mounts `[data-stage-wrapper]`); when the honest
|
|
364
|
+
* `stage="none|dim"` enum is set the marker carries no `--stage-t` drive (or the
|
|
365
|
+
* `data-stage-scale` gate is absent) so (C) is a real no-op, never a lie. Under PRM
|
|
366
|
+
* `stage="scale"` degrades to `dim` at the SFC (no `data-stage-scale` attr) so the
|
|
367
|
+
* page never transforms (fold C1·R6) — this rule only fires when the scale gate is on.
|
|
368
|
+
*/
|
|
369
|
+
[data-stage-wrapper][data-stage-scale] {
|
|
370
|
+
scale: calc(1 - 0.05 * clamp(0, var(--stage-t), 1));
|
|
371
|
+
border-radius: calc(var(--radius-panel) * clamp(0, var(--stage-t), 1));
|
|
372
|
+
transform-origin: 50% 0; /* recede toward the top, iOS */
|
|
373
|
+
overflow: clip;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/*
|
|
377
|
+
* BD.W-OVERLAY-STAGE-COUPLE — coupling (D): the blur ENGAGE (opt-in `immersive`, the
|
|
378
|
+
* Command spotlight). The scrim's `backdrop-filter` radius ramps `0 → deep` on
|
|
379
|
+
* `--stage-t`. ONE-SHOT over the open window (gated to the modal-flip 0→1 via
|
|
380
|
+
* `[data-stage-immersive]`, NEVER the drawer's per-frame scalar — the §L7 Safari
|
|
381
|
+
* fence: a per-frame full-viewport re-blur is the cardinal sin, fold C2·R). WebKit
|
|
382
|
+
* pays the sample once as the flip lands. Default OFF.
|
|
383
|
+
*/
|
|
384
|
+
[data-stage-scrim][data-stage-immersive] {
|
|
385
|
+
backdrop-filter: blur(calc(clamp(0, var(--stage-t), 1) * 16px));
|
|
386
|
+
-webkit-backdrop-filter: blur(calc(clamp(0, var(--stage-t), 1) * 16px));
|
|
387
|
+
}
|
|
388
|
+
|
|
225
389
|
/* Reduced-motion — the house `SpringProgress` snaps the detent deterministically
|
|
226
390
|
under `prefers-reduced-motion: reduce` (its `respectReducedMotion` jumps the
|
|
227
391
|
`--glass-drawer-t` scalar to target in one frame, zero motion frames); here we
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* glass/accent-tone.css
|
|
2
|
+
BC.W-ACCENT-TONE — the contrast-floored 3-channel tonal-accent register.
|
|
3
|
+
|
|
4
|
+
ONE `--tone` (a complete `<color>`, default `var(--primary)`) → a coherent,
|
|
5
|
+
contrast-SAFE four-channel tonal set:
|
|
6
|
+
|
|
7
|
+
--accent-fill idle FILL — faint but FLOORED (≥3:1 at rest, the load-bearing
|
|
8
|
+
new behavior fourier named: "not just hover/active").
|
|
9
|
+
--accent-band active BAND — the bolder selected fill.
|
|
10
|
+
--accent-edge active EDGE — the active rim hairline.
|
|
11
|
+
--accent-ink label INK — the contrast-SAFE label colour ON the band, written
|
|
12
|
+
by useAccentTone (the JS half) via value.js
|
|
13
|
+
safeAccentColor; the CSS fallback is the warm ink.
|
|
14
|
+
|
|
15
|
+
The mix space is `in oklab` (the perceptual glass-tint family, W55/W-NO-GRAY) —
|
|
16
|
+
NOT `in srgb` (the `--surface-tint-*` brand-overlay fence, AW.W26). This is the
|
|
17
|
+
CONTROL tonal-FILL register (the plate background + the contrast-safe ink), a
|
|
18
|
+
DISTINCT seam from the BB `--glass-accent` glass-RIM axis (decoration on a glass
|
|
19
|
+
plate) — the two COMPOSE on a chip that is both a glass surface and a tonal
|
|
20
|
+
control (the rim from `--glass-accent`, the fill from `--accent-tone`); they
|
|
21
|
+
never fork, never write each other's channels.
|
|
22
|
+
|
|
23
|
+
The strength MAGNITUDES are TOKENS a `:root`/scope override retunes (NOT props —
|
|
24
|
+
the no-over-prop fence, component-customizability §5): `--accent-fill-strength`
|
|
25
|
+
(idle, the ~6-8% fourier names) / `--accent-band-strength` (active) /
|
|
26
|
+
`--accent-edge-strength` (rim). The idle floor is the strength default — the
|
|
27
|
+
8% over the warm-cream `--card` clears ≥3:1; proof:accent-tone A4 measures the
|
|
28
|
+
resolved idle fill against the surface (a strength that drops it below 3:1 reds).
|
|
29
|
+
|
|
30
|
+
@import-ed by glass.css in cascade order IMMEDIATELY AFTER ladder.css (the same
|
|
31
|
+
@layer components; this is the SOLE writer of the `--accent-*` channels, read at
|
|
32
|
+
use-time on the chip elements, so the placement is cascade-order-invariant). */
|
|
33
|
+
@layer components {
|
|
34
|
+
.accent-tone {
|
|
35
|
+
/* `--surface` is an OPTIONAL consumer-retarget hook (NOT a declared HEAD
|
|
36
|
+
token) — a consumer sets it on the scope to point the accent at a
|
|
37
|
+
non-`--card` surface; it defaults to the declared `--card` so the recipe
|
|
38
|
+
resolves at HEAD with zero consumer wiring. */
|
|
39
|
+
--accent-fill-strength: 8%;
|
|
40
|
+
--accent-band-strength: 18%;
|
|
41
|
+
--accent-edge-strength: 55%;
|
|
42
|
+
|
|
43
|
+
/* idle: faint but FLOORED — the resting tint stays ≥3:1 by the strength
|
|
44
|
+
floor + the perceptual `in oklab` mix (the glass-tint family). */
|
|
45
|
+
--accent-fill: color-mix(
|
|
46
|
+
in oklab,
|
|
47
|
+
var(--surface, var(--card)),
|
|
48
|
+
var(--tone, var(--primary)) var(--accent-fill-strength)
|
|
49
|
+
);
|
|
50
|
+
--accent-band: color-mix(
|
|
51
|
+
in oklab,
|
|
52
|
+
var(--surface, var(--card)),
|
|
53
|
+
var(--tone, var(--primary)) var(--accent-band-strength)
|
|
54
|
+
);
|
|
55
|
+
--accent-edge: color-mix(
|
|
56
|
+
in oklab,
|
|
57
|
+
transparent,
|
|
58
|
+
var(--tone, var(--primary)) var(--accent-edge-strength)
|
|
59
|
+
);
|
|
60
|
+
/* ink is the contrast-SAFE label colour ON the active band — written by
|
|
61
|
+
useAccentTone (the JS half) via safeAccentColor onto
|
|
62
|
+
`--accent-ink-resolved`; the CSS fallback is the warm ink (CSS cannot
|
|
63
|
+
call value.js at the token tier). */
|
|
64
|
+
--accent-ink: var(--accent-ink-resolved, var(--foreground));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/* glass/control-surfaces.css
|
|
2
|
+
The form-control REST register carved from glass/surfaces.css — the
|
|
3
|
+
`.input-pill` family (Input/Textarea/NumberField), the shared `.control-surface`
|
|
4
|
+
class (Select default + TagsInput), the validity vocabulary, and the Select
|
|
5
|
+
trigger resting-border lift. A cohesive sub-concern of surfaces.css (the
|
|
6
|
+
no-god-module re-drain), @import-ed by glass.css in cascade order IMMEDIATELY
|
|
7
|
+
AFTER surfaces.css and BEFORE surface-axis.css — same `@layer components`, same
|
|
8
|
+
source order, so the carve is byte-isomorphic.
|
|
9
|
+
See docs/precepts/design-idioms.md §cohesion-aware partials. */
|
|
10
|
+
@layer components {
|
|
11
|
+
/* ── Pill input ───────────────────────────────── */
|
|
12
|
+
.input-pill {
|
|
13
|
+
@apply flex w-full;
|
|
14
|
+
|
|
15
|
+
/* AX.W51 D18 — the input pill rides the ONE `--ui-scale` comfort axis: the
|
|
16
|
+
height reads the `--control-h-md` cohort (`max(calc(2.5rem * --ui-scale),
|
|
17
|
+
--control-floor)`, the h-10 register with the WCAG-44px coarse clamp), the
|
|
18
|
+
font reads `--control-text`, the inline padding scales — so ONE override
|
|
19
|
+
grows the field's height + padding + font in lockstep. Desktop default is
|
|
20
|
+
the identity. */
|
|
21
|
+
/* BC.W-CONTROL-CUSTOM — the height reads the `--control-pill-h` element-
|
|
22
|
+
override seam, DEFAULTING to the cohort `--control-h-md` so a bare
|
|
23
|
+
control is byte-identical to HEAD. The shared `controlSizeClass(size)`
|
|
24
|
+
(_shared/useControlSize.ts) re-points the seam per rung
|
|
25
|
+
(sm→`--control-h-sm`, lg→`--control-h-lg`), so the `size` prop retunes
|
|
26
|
+
the field height WITHOUT a recipe fork — ONE substitution rung, the
|
|
27
|
+
cohort is still the source. */
|
|
28
|
+
height: var(--control-pill-h, var(--control-h-md));
|
|
29
|
+
border-radius: var(--radius-pill);
|
|
30
|
+
/* AW.W13 — the resting field edge reads as an enclosed control at rest
|
|
31
|
+
(~15%α — ~2× the prior 8% glass-wash floor that vanished on cream). The
|
|
32
|
+
`:focus-visible` accent ring + the `:user-invalid`/`[aria-invalid]`
|
|
33
|
+
destructive ring below still win by order + specificity.
|
|
34
|
+
AX.W54 — moved off the srgb `--surface-tint-15` fork onto the glass
|
|
35
|
+
border seam so the pill is ONE glass model with the rest of the ladder.
|
|
36
|
+
BA.W-SURFACE-AXIS scope 7 — re-pointed onto the SHARED `--control-surface-*`
|
|
37
|
+
REST register so Input/Textarea/NumberField/Select/Combobox/TagsInput are
|
|
38
|
+
ONE material at rest (the input rung was the warmer of the two; Select rode
|
|
39
|
+
the `glass-wash` gray — the no-gray control-family seam). The register reads
|
|
40
|
+
the same `--glass-*` ladder, so `--glass-level`/the W55 bright bucket retune
|
|
41
|
+
the whole form family in lockstep (--control-surface-border defaults to the
|
|
42
|
+
`--glass-border-floating` 15%α rung, --control-surface-bg to `--glass-bg-quiet`,
|
|
43
|
+
--control-surface-blur to `--glass-blur-quiet`). */
|
|
44
|
+
border: 1.5px solid var(--control-surface-border);
|
|
45
|
+
background: var(--control-surface-bg);
|
|
46
|
+
/* The control's REAL glass blur — the shared register's quiet-tier radius
|
|
47
|
+
(the same `--control-surface-blur` pairs with `--control-surface-bg`); the
|
|
48
|
+
`--glass-level` knob clarifies it in lockstep with every surface. */
|
|
49
|
+
backdrop-filter: var(--control-surface-blur);
|
|
50
|
+
padding: 0 calc(1rem * var(--ui-scale));
|
|
51
|
+
/* BC.W-CONTROL-CUSTOM — the font reads the `--control-pill-text` seam,
|
|
52
|
+
DEFAULTING to `--control-text` (byte-identical at unset). The `sm` rung
|
|
53
|
+
re-points it to `--control-text-sm` (the quieter register); `default`/`lg`
|
|
54
|
+
keep `--control-text`. This is the C1 close — the input register reads
|
|
55
|
+
`--control-text` via the recipe, NOT a bare `text-sm` literal. */
|
|
56
|
+
font-size: var(--control-pill-text, var(--control-text));
|
|
57
|
+
color: var(--foreground);
|
|
58
|
+
transition:
|
|
59
|
+
background-color var(--duration-fast) var(--ease-standard),
|
|
60
|
+
border-color var(--duration-fast) var(--ease-standard),
|
|
61
|
+
box-shadow var(--duration-fast) var(--ease-standard),
|
|
62
|
+
color var(--duration-fast) var(--ease-standard),
|
|
63
|
+
opacity var(--duration-fast) var(--ease-standard);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.input-pill::placeholder {
|
|
67
|
+
color: var(--surface-tint-35);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* BA.W-SURFACE-AXIS scope 7 — the shared control REST surface class. The
|
|
71
|
+
NON-pill control families (the Select trigger, the TagsInput root) that do
|
|
72
|
+
NOT compose `.input-pill` but want the SAME resting material read this — so
|
|
73
|
+
the whole form band is ONE register at rest (the Select default rode the
|
|
74
|
+
lighter `glass-wash` gray before; this is the no-gray control-family seam).
|
|
75
|
+
It carries the bg/border/blur ONLY (each control owns its own height/radius/
|
|
76
|
+
padding/font), so a non-pill control composes `.control-surface` + its own
|
|
77
|
+
geometry. The hover lift brightens the fill one step toward the resting rung. */
|
|
78
|
+
.control-surface {
|
|
79
|
+
background: var(--control-surface-bg);
|
|
80
|
+
border: 1px solid var(--control-surface-border);
|
|
81
|
+
backdrop-filter: var(--control-surface-blur);
|
|
82
|
+
-webkit-backdrop-filter: var(--control-surface-blur);
|
|
83
|
+
}
|
|
84
|
+
.control-surface:hover:not(:disabled, [data-disabled]) {
|
|
85
|
+
background: var(--control-surface-bg-hover);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* AQ.W4 §W4.6 — keyboard-focus ring only. Was bare `:focus` (showed the
|
|
89
|
+
accent ring on a mouse click); `:focus-visible` matches the
|
|
90
|
+
`.focus-ring` / `.glass-btn` / dock-control discipline. Ordered BEFORE
|
|
91
|
+
the `:user-invalid` rungs so an invalid focused field shows destructive,
|
|
92
|
+
not accent (the `:user-invalid:focus-visible` rule below wins by order +
|
|
93
|
+
specificity). `:focus-visible` Baseline Widely — no fallback. */
|
|
94
|
+
.input-pill:focus-visible {
|
|
95
|
+
outline: none;
|
|
96
|
+
border-color: var(--color-accent-opaque, var(--ring));
|
|
97
|
+
box-shadow: 0 0 0 2px var(--color-accent, color-mix(in srgb, var(--ring) 30%, transparent));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* AQ.W4 §W4.1 — validity vocabulary on `.input-pill` (Input + Textarea).
|
|
101
|
+
The forgiving `:where(:user-invalid, .user-invalid-fallback,
|
|
102
|
+
[aria-invalid="true"])` group is ONE rule covering THREE trigger surfaces:
|
|
103
|
+
native constraint-validation (`:user-invalid`), the `useUserInvalidAria`
|
|
104
|
+
fallback class for engines without `:user-invalid` (css §3.2; NOT a
|
|
105
|
+
live+dead alias — the class is the SOLE fallback), AND (AW.W18) the
|
|
106
|
+
imperative `[aria-invalid="true"]` attribute. The `[aria-invalid]` arm
|
|
107
|
+
serves APP-DRIVEN validity — a custom key match, an async server check —
|
|
108
|
+
where there is no native constraint to trip `:user-invalid`, so the app
|
|
109
|
+
sets the ARIA attribute and the library's own ring paints with no
|
|
110
|
+
`:deep()` re-paint at the consumer. The destructive/success tints reuse
|
|
111
|
+
the semantic tokens via `color-mix` per the house pattern (W2). Non-color
|
|
112
|
+
reinforcement is the error TEXT (W4.5 `error` slot) + the `required`
|
|
113
|
+
asterisk — the border/bg shift is the supplementary cue, never the sole
|
|
114
|
+
one. `:user-valid` is intentionally subtle (border only, no bg fill) so
|
|
115
|
+
a long valid form is not a wall of green. */
|
|
116
|
+
.input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]) {
|
|
117
|
+
border-color: var(--destructive);
|
|
118
|
+
background: color-mix(in srgb, var(--destructive) 8%, var(--glass-bg-quiet));
|
|
119
|
+
}
|
|
120
|
+
.input-pill:where(:user-valid, .user-valid-fallback) {
|
|
121
|
+
border-color: var(--success);
|
|
122
|
+
}
|
|
123
|
+
/* Invalid + keyboard-focused → destructive ring (overrides the accent
|
|
124
|
+
`:focus-visible` ring above by order + the extra invalid compound). The
|
|
125
|
+
`[aria-invalid]` arm rides the same widened group so an app-driven
|
|
126
|
+
invalid field shows the destructive ring on focus too. */
|
|
127
|
+
.input-pill:where(:user-invalid, .user-invalid-fallback, [aria-invalid="true"]):focus-visible {
|
|
128
|
+
border-color: var(--destructive);
|
|
129
|
+
/* BB.W-INVALID-RING — the shared destructive ring register (the
|
|
130
|
+
--focus-ring-shadow sibling). The byte-identical recipe is now ONE
|
|
131
|
+
token; the `8%` at-rest bg arm above stays `.input-pill`-local (a
|
|
132
|
+
glass-tint substrate the bare-ring surfaces do not carry). */
|
|
133
|
+
box-shadow: var(--invalid-ring);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* AQ.W4 §W4.3 — `field-sizing: content` autosize (opt-in via the Textarea
|
|
137
|
+
`autosize` prop → `[data-autosize]`). The textarea grows vertically with
|
|
138
|
+
content between a 3-line floor and a token-driven ceiling, then scrolls.
|
|
139
|
+
`field-sizing` Baseline Newly (Chromium 2024) — on a non-supporting
|
|
140
|
+
engine the declaration is ignored and the element keeps the
|
|
141
|
+
`min/max-block-size` bounds + standard scroll (no JS, no `@supports`,
|
|
142
|
+
no grid-mirror polyfill). The fixed-size path (default, `min-h-20`) is
|
|
143
|
+
the unchanged no-op fallback. */
|
|
144
|
+
.input-pill[data-autosize] {
|
|
145
|
+
field-sizing: content;
|
|
146
|
+
width: 100%;
|
|
147
|
+
min-block-size: 3lh;
|
|
148
|
+
max-block-size: var(--textarea-autosize-max, 12lh);
|
|
149
|
+
resize: vertical;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.input-pill:disabled {
|
|
153
|
+
opacity: 0.5;
|
|
154
|
+
cursor: not-allowed;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* AW.W13 — the Select trigger mirrors the input pill's resting border lift.
|
|
158
|
+
The reka-ui SelectTrigger renders `role="combobox"` over the `.glass-wash`
|
|
159
|
+
surface; its 8%α `--glass-border-wash` field edge vanished on cream just
|
|
160
|
+
like the input pill, so the same `--surface-tint-15` lift makes the
|
|
161
|
+
trigger read as an enclosed control at rest. Scoped to the combobox role
|
|
162
|
+
so the lift reaches ONLY the Select trigger, not every `.glass-wash`
|
|
163
|
+
surface. */
|
|
164
|
+
.glass-wash[role="combobox"] {
|
|
165
|
+
border-color: var(--surface-tint-15);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/* ════════════════════════════════════════════════════════════════════════
|
|
2
|
+
.glass-atom — BD.W-GLASS-ATOM-REGISTER: the ONE shared warm-glass register
|
|
3
|
+
the four small atoms (Badge-glass · metric-badge · slider fill · the `+N`
|
|
4
|
+
chip) consume in two registers (loud opaque identity vs quiet transmissive
|
|
5
|
+
glass).
|
|
6
|
+
|
|
7
|
+
CONSUME-ONLY — declares ZERO own glass tokens (the no-fork fence, Fence 1).
|
|
8
|
+
It COMPOSES:
|
|
9
|
+
· `.glass-capsule` — the warm-transmissive lozenge BODY (warm floor +
|
|
10
|
+
rim + lift). `.glass-atom` is a PEER of any
|
|
11
|
+
sized chip, NEVER `.glass-chip` itself (Fence 2):
|
|
12
|
+
both compose `.glass-capsule`. A consumer applies
|
|
13
|
+
BOTH classes (`class="glass-capsule glass-atom"`)
|
|
14
|
+
or composes the capsule body via the glass tier
|
|
15
|
+
the host already wears.
|
|
16
|
+
· `--glass-fill-tint` / `--glass-fill-strength` (BE.W-TINTED-CHIP, glass.css)
|
|
17
|
+
— the per-instance plate-fill data hue. The atom
|
|
18
|
+
is its ≥Nth consumer; it APPLIES the axis on the
|
|
19
|
+
quiet register, never re-mints a tint.
|
|
20
|
+
· `--glass-material-rim` — the keyed directional rim (the defined edge), the
|
|
21
|
+
SHIPPED two-stop rim re-pointed by `--glass-key`.
|
|
22
|
+
· the inert `.cartoon-cast` child + `--cartoon-ink` / `--shadow-cartoon-*`
|
|
23
|
+
(BD.W-CARTOON-CASTER / -CEL-INK) — the warm cel
|
|
24
|
+
stamp; the loud register intensifies on `data-cast`.
|
|
25
|
+
· `--motion-weight` × `--ease-cartoon-punch` (BD.W-MOTION-WEIGHT /
|
|
26
|
+
-CARTOON-PUNCH) — the non-uniform press squash +
|
|
27
|
+
the weight-coupled smear/settle.
|
|
28
|
+
|
|
29
|
+
@layer components, @import-ed by icon-chip.css (in-lane) AFTER glass.css (so
|
|
30
|
+
`.glass-capsule` + the `--glass-*` axes resolve) and BEFORE the consuming
|
|
31
|
+
recipes. Every channel is compositor-only + Safari-native (no
|
|
32
|
+
`backdrop-filter: url()`, no goo — Fence 8). The warm 0-alpha sources are
|
|
33
|
+
explicit `oklch(L C H / 0)` (NEVER bare `transparent` — the WebKit
|
|
34
|
+
black-premultiply hole, build-trap-(d)).
|
|
35
|
+
════════════════════════════════════════════════════════════════════════ */
|
|
36
|
+
|
|
37
|
+
@layer components {
|
|
38
|
+
/* ── The warm idle floor (the #2 dormant-tint cure) ──
|
|
39
|
+
The atom carries chroma BEFORE any field paints + on a dead ground. The
|
|
40
|
+
floor is NON-self-referential (build-trap-(b): a property reading ITSELF in
|
|
41
|
+
its own `max()` resolves to guaranteed-invalid and the term drops). A
|
|
42
|
+
SEPARATE input var is the source: a consumer (the accent ramp) writes
|
|
43
|
+
`--accent-fill-strength-in`, and the resolved fill strength floors at
|
|
44
|
+
`--atom-tint-floor` — PLAIN per-mode (12% light / 15% dark), NEVER
|
|
45
|
+
`light-dark()` (the inset-shadow trap). */
|
|
46
|
+
.glass-atom {
|
|
47
|
+
--atom-tint-floor: 12%;
|
|
48
|
+
--accent-fill-strength: max(
|
|
49
|
+
var(--accent-fill-strength-in, 0%),
|
|
50
|
+
var(--atom-tint-floor)
|
|
51
|
+
);
|
|
52
|
+
/* The quiet register's tint application — the plate body mixes toward the
|
|
53
|
+
per-instance data hue ON TOP of the capsule's warm composite. At the
|
|
54
|
+
`@property` defaults (`--glass-fill-tint: transparent` / strength 0%)
|
|
55
|
+
this is the byte-identical no-op floor; the warm floor above keeps the
|
|
56
|
+
idle body warm even at a transparent tint. The mix is `in oklab` (the
|
|
57
|
+
perceptual glass-tint family — NOT the in-srgb brand fence). */
|
|
58
|
+
--glass-atom-tinted: color-mix(
|
|
59
|
+
in oklab,
|
|
60
|
+
var(--glass-capsule-warm) calc(var(--atom-tint-floor) + var(--glass-fill-strength)),
|
|
61
|
+
oklch(0.9 0.05 75 / 0)
|
|
62
|
+
);
|
|
63
|
+
/* The motion register — the press/hover deform rides
|
|
64
|
+
`--motion-weight × --ease-cartoon-punch`. The atom inherits the rest
|
|
65
|
+
`--motion-weight: 0.618`; the loud register (`data-cast`, below) pushes
|
|
66
|
+
it to 1 so the punch is never muted (the loud-register coupling). The
|
|
67
|
+
SPATIAL legs (scale/translate) settle on the punch clock; the EFFECTS
|
|
68
|
+
legs (background/box-shadow) stay on the bezier (motion-canon P1). */
|
|
69
|
+
transition:
|
|
70
|
+
background var(--duration-fast) var(--ease-standard),
|
|
71
|
+
box-shadow var(--duration-fast) var(--ease-standard),
|
|
72
|
+
scale var(--duration-normal) var(--ease-cartoon-punch),
|
|
73
|
+
translate var(--duration-normal) var(--ease-cartoon-punch);
|
|
74
|
+
}
|
|
75
|
+
.dark .glass-atom {
|
|
76
|
+
--atom-tint-floor: 15%;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* ── The non-uniform PRESS squash (the punch, NOT a shrink) ──
|
|
80
|
+
Widen X, compress Y (`scale: 1.04 0.94`) — real squash & stretch. The
|
|
81
|
+
`:active` is the no-JS floor; a consumer's `useLiquidPress` may drive a
|
|
82
|
+
continuous ramp via `--cartoon-press-t` (the caster reads it). The
|
|
83
|
+
`border-radius` is the pill, so under non-uniform scale the end-caps track
|
|
84
|
+
the scaled box (challenge #2 R4 — the capsule radius stays circle-tolerant). */
|
|
85
|
+
.glass-atom:active:not([data-disabled]):not(:disabled) {
|
|
86
|
+
scale: 1.04 0.94;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/* ── The cel cast — UNIVERSAL-but-GRADED (challenge #1 R5 / #3 R5) ──
|
|
90
|
+
Every atom carries a hairline warm rim-cast at rest (the family floor); the
|
|
91
|
+
loud flagships (`data-cast`) INTENSIFY to the loud layered-offset stamp.
|
|
92
|
+
The cast rides the inert `.cartoon-cast` child (BD.W-CARTOON-CASTER) — the
|
|
93
|
+
child carries `--shadow-cartoon-md` at rest and moves on `translate`/`scale`
|
|
94
|
+
only; here the atom only RE-POINTS the loud register's resting/hover rung
|
|
95
|
+
(it does not re-author the caster). The loud register pushes
|
|
96
|
+
`--motion-weight: 1` so the punch reads at full amplitude. */
|
|
97
|
+
.glass-atom[data-cast] {
|
|
98
|
+
--motion-weight: 1;
|
|
99
|
+
}
|
|
100
|
+
.glass-atom[data-cast] .cartoon-cast {
|
|
101
|
+
box-shadow: var(--shadow-cartoon-sm);
|
|
102
|
+
}
|
|
103
|
+
@media (hover: hover) {
|
|
104
|
+
.glass-atom[data-cast]:hover:not(:active) .cartoon-cast {
|
|
105
|
+
box-shadow: var(--shadow-cartoon-md);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* ── The QUIET register (`[data-surface="glass"]`) — the transmissive tint ──
|
|
110
|
+
The quiet capsule applies the per-instance fill tint over the warm floor.
|
|
111
|
+
This is where the warm-not-gray read is won (badge-glass, the `+N` chip).
|
|
112
|
+
The body composes `.glass-capsule` (the consumer applies both classes); the
|
|
113
|
+
atom only LAYERS the tinted fill on top of the capsule's warm composite via
|
|
114
|
+
`background-image` (a later layer over the capsule's `background:` shorthand
|
|
115
|
+
— the proven `.paper-grid` coexistence seam, paints OVER the translucent
|
|
116
|
+
fill, UNDER content). The 0-alpha stop is warm `oklch(… / 0)`, never bare
|
|
117
|
+
`transparent` (challenge #1 R4 / #2 R4 — the WebKit desaturation fix). */
|
|
118
|
+
.glass-atom[data-surface="glass"] {
|
|
119
|
+
background-image: linear-gradient(
|
|
120
|
+
var(--glass-atom-tinted),
|
|
121
|
+
var(--glass-atom-tinted)
|
|
122
|
+
);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* ── PRM/PRT carve ──
|
|
126
|
+
Under reduced-motion `--motion-weight: 0` zeroes the squash + the cast
|
|
127
|
+
travel/lag in ONE assignment (every `calc(… * --motion-weight)` in the
|
|
128
|
+
caster collapses to rest); the press scale collapses to 1. The warm tint +
|
|
129
|
+
the rim + the STATIC cel STAMP persist (a still frame, never a frozen
|
|
130
|
+
mid-animation — the legibility floor). */
|
|
131
|
+
@media (prefers-reduced-motion: reduce) {
|
|
132
|
+
.glass-atom {
|
|
133
|
+
--motion-weight: 0;
|
|
134
|
+
}
|
|
135
|
+
.glass-atom:active:not([data-disabled]):not(:disabled) {
|
|
136
|
+
scale: 1;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/* ── prefers-contrast: more — the rim α floors UP (WCAG 1.4.11 non-text) ──
|
|
141
|
+
The keyed rim is the legibility CONTRACT (the cast is a supplement,
|
|
142
|
+
challenge #2 R6). Under more-contrast the atom floors its border ink so the
|
|
143
|
+
lit edge clears ≥3:1 vs the OPAQUE body, not only the glass body. */
|
|
144
|
+
@media (prefers-contrast: more) {
|
|
145
|
+
.glass-atom {
|
|
146
|
+
border-color: color-mix(in srgb, var(--foreground) 24%, transparent);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* ════════════════════════════════════════════════════════════════════════
|
|
151
|
+
.badge-atom — the Badge consumer of the register (loud + quiet).
|
|
152
|
+
|
|
153
|
+
The LOUD register (the default opaque identity pill): the family signature
|
|
154
|
+
WITHOUT the glass body — the keyed warm rim (the defined edge, the
|
|
155
|
+
`border-transparent` melt fix), the non-uniform press-squish, the
|
|
156
|
+
universal-but-graded cel. The badge applies `.badge-atom` on EVERY variant
|
|
157
|
+
(the CVA base); `surface="glass"` ALSO applies `.glass-capsule .glass-atom`
|
|
158
|
+
for the quiet transmissive body.
|
|
159
|
+
════════════════════════════════════════════════════════════════════════ */
|
|
160
|
+
.badge-atom {
|
|
161
|
+
position: relative;
|
|
162
|
+
/* AQ.W3 identity base — `scale`/`translate` longhands mint the stacking
|
|
163
|
+
context once so the press squash + the cast child compose cleanly. */
|
|
164
|
+
scale: 1;
|
|
165
|
+
translate: 0;
|
|
166
|
+
/* The DEFINED EDGE — the SHIPPED keyed two-stop rim (re-pointed by
|
|
167
|
+
`--glass-key`) as the pill's silhouette, so a sand `secondary` no longer
|
|
168
|
+
melts into a cream panel (the live `border-transparent` melt). It is a
|
|
169
|
+
box-shadow rim, NOT a `border` (the base CVA retired the `border`
|
|
170
|
+
keyword), so it adds zero layout box + reads warm. The press/lift scale
|
|
171
|
+
rides the punch register `× --motion-weight`. */
|
|
172
|
+
box-shadow: var(--glass-material-rim);
|
|
173
|
+
transition:
|
|
174
|
+
background var(--duration-fast) var(--ease-standard),
|
|
175
|
+
box-shadow var(--duration-fast) var(--ease-standard),
|
|
176
|
+
scale var(--duration-normal) var(--ease-cartoon-punch),
|
|
177
|
+
translate var(--duration-normal) var(--ease-cartoon-punch);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/* The non-uniform PRESS squash (widen X, compress Y — NOT a uniform shrink). */
|
|
181
|
+
.badge-atom:active:not([data-disabled]):not([aria-disabled='true']) {
|
|
182
|
+
scale: 1.04 0.94;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* `outline` variant — the rim reads a louder warm-ink edge (it IS the edge). */
|
|
186
|
+
.badge-atom--outline {
|
|
187
|
+
box-shadow: var(--glass-material-rim);
|
|
188
|
+
border: 1px solid color-mix(in srgb, var(--foreground) 14%, transparent);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* The LOUD cel stamp (opt-in, `data-cast`) — pushes the weight to 1 so the
|
|
192
|
+
punch reads at full amplitude + intensifies the inert child's cast. The
|
|
193
|
+
hairline rim-cast family floor is the rim above; this is the LOUD layered
|
|
194
|
+
offset (the flagship sticker stamp). */
|
|
195
|
+
.badge-atom[data-cast] {
|
|
196
|
+
--motion-weight: 1;
|
|
197
|
+
}
|
|
198
|
+
.badge-atom[data-cast] .cartoon-cast {
|
|
199
|
+
box-shadow: var(--shadow-cartoon-sm);
|
|
200
|
+
}
|
|
201
|
+
@media (hover: hover) {
|
|
202
|
+
.badge-atom[data-cast]:hover:not(:active) .cartoon-cast {
|
|
203
|
+
box-shadow: var(--shadow-cartoon-md);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/* The QUIET glass register — retire the opaque `bg-*` plate so the warm-glass
|
|
208
|
+
`.glass-capsule` body + the `.glass-atom` tinted `background-image` paint the
|
|
209
|
+
surface (no double-fill). The variant `bg-*` utility sets `background-color`;
|
|
210
|
+
this resets it to transparent so the capsule fill + the data-hue tint win.
|
|
211
|
+
The text color (the variant's `text-*`) is kept — the label still reads. */
|
|
212
|
+
.badge-atom--glass {
|
|
213
|
+
background-color: transparent !important;
|
|
214
|
+
/* The quiet capsule tints toward the variant's SEMANTIC hue via the shared
|
|
215
|
+
`--glass-fill-tint` axis (BE.W-TINTED-CHIP) — colored glass, never a
|
|
216
|
+
forked tint. The strength is a calm stop (the body ink stays legible).
|
|
217
|
+
A consumer overrides `--glass-fill-tint` per-instance for a bespoke hue. */
|
|
218
|
+
--glass-fill-strength: var(--badge-glass-strength, 16%);
|
|
219
|
+
}
|
|
220
|
+
/* Per-variant glass tint — the data hue the quiet body mixes toward. The
|
|
221
|
+
semantic plate token becomes the tint source (the loud fill demoted to a
|
|
222
|
+
transmissive hue). `secondary`/`outline` are the calm/neutral routes. */
|
|
223
|
+
.badge-atom--glass[data-variant='default'] { --glass-fill-tint: var(--primary); }
|
|
224
|
+
.badge-atom--glass[data-variant='secondary'] { --glass-fill-tint: var(--glass-capsule-warm); }
|
|
225
|
+
.badge-atom--glass[data-variant='outline'] { --glass-fill-tint: var(--glass-capsule-warm); }
|
|
226
|
+
.badge-atom--glass[data-variant='destructive'] { --glass-fill-tint: var(--destructive); }
|
|
227
|
+
.badge-atom--glass[data-variant='success'] { --glass-fill-tint: var(--success); }
|
|
228
|
+
.badge-atom--glass[data-variant='warning'] { --glass-fill-tint: var(--warning); }
|
|
229
|
+
.badge-atom--glass[data-variant='info'] { --glass-fill-tint: var(--info); }
|
|
230
|
+
|
|
231
|
+
@media (prefers-reduced-motion: reduce) {
|
|
232
|
+
.badge-atom {
|
|
233
|
+
--motion-weight: 0;
|
|
234
|
+
}
|
|
235
|
+
.badge-atom:active:not([data-disabled]) {
|
|
236
|
+
scale: 1;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
@media (prefers-contrast: more) {
|
|
240
|
+
.badge-atom {
|
|
241
|
+
border: 1px solid color-mix(in srgb, var(--foreground) 28%, transparent);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|