@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,850 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* liquid-morph.css — the LIQUID DOCK surfaces (BE.W-LIQUID-MORPH, WF-2 integration).
|
|
3
|
+
*
|
|
4
|
+
* RE-ARCHITECTED onto the SHIPPED BE library primitives. The throwaway box-scale /
|
|
5
|
+
* goo-blob / data-mode spike is GONE (no dual path):
|
|
6
|
+
*
|
|
7
|
+
* • EXPAND / PLAYER — the dock is a small PILL (.liquid-pill) that STAYS PILL-SIZED.
|
|
8
|
+
* The Places sheet (.liquid-sheet) / player card (.liquid-player) is a SEPARATE
|
|
9
|
+
* overlay laid out at its FULL settled rect; `useBloomUp` FLIPs it FROM the pill's
|
|
10
|
+
* rect (writing transform/opacity/filter INLINE — never a box-scale that crushes
|
|
11
|
+
* content, never a layout-property animation). This CSS supplies only the STATIC
|
|
12
|
+
* resting plates + content layout; the motion is the JS leaf's compositor transform.
|
|
13
|
+
* • ISLAND — ONE crisp .glass-floating pill (.liquid-island-host, the
|
|
14
|
+
* `.dock-fission-bridge` host) that FISSIONS. The two halves are `.dock-fission-piece`
|
|
15
|
+
* pieces; the library `fission-bridge.css` owns the translate/squish/neck (the goo
|
|
16
|
+
* stretch-thin-snap, the specular sweep, the goo-OR-glass swap). This CSS supplies
|
|
17
|
+
* only each half's resting glass plate + content. NO blob layer, NO data-mode switch.
|
|
18
|
+
*
|
|
19
|
+
* COMPOSITOR-ONLY (proof:no-layout-animation). This sheet animates ZERO layout property
|
|
20
|
+
* — the bloom transform is written inline by `useBloomUp`; the fission translate/scale
|
|
21
|
+
* lives in `fission-bridge.css`; the only @keyframes here is the eq bars (compositor
|
|
22
|
+
* `scaleY`). The plates read warm-cream glass (the --glass-* ladder, both modes).
|
|
23
|
+
*/
|
|
24
|
+
@layer components {
|
|
25
|
+
/* ── The stage IS the [data-glass-field] the bloom's 4th color channel warms.
|
|
26
|
+
`useBloomUp` writes `--glass-ambient-hue` + ramps `--glass-ambient-strength` HERE;
|
|
27
|
+
this rule re-points the EXISTING `--glass-tint-source`/`--glass-tint-strength`
|
|
28
|
+
self-engage seam toward the ambient hue so every glass plate inside the stage
|
|
29
|
+
(the bloomed sheet/player) WARMS toward the source's color as it blooms — the iOS
|
|
30
|
+
"the whole world takes on the album's color." Neutral by default (transparent hue,
|
|
31
|
+
0% strength = the no-op floor; the warm-cream identity holds). The bias is keyed
|
|
32
|
+
off the registered @property customs (so the strength ramp INTERPOLATES). ── */
|
|
33
|
+
.liquid-stage {
|
|
34
|
+
--glass-tint-source: var(--glass-ambient-hue, transparent);
|
|
35
|
+
--glass-tint-strength: var(--glass-ambient-strength, 0%);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* ── BD.W-AMBIENT-TINT (AUGMENT 2 — widen the bias past the dock) ───────────────
|
|
39
|
+
The ambient-hue bias is GENERALIZED from the dock-only `.liquid-stage` seam to
|
|
40
|
+
EVERY glass tier rendered OVER the warm field: any `[data-paper-field]` host
|
|
41
|
+
re-points the SAME EXISTING `--glass-tint-source`/`--glass-tint-strength`
|
|
42
|
+
self-engage seam toward the sampled `--glass-ambient-hue`, so a plate over the
|
|
43
|
+
warm field WARMS toward the field/section-accent hue (the transmissive read —
|
|
44
|
+
the Maps-card transmission becomes real, not latent). This is a RE-POINT of the
|
|
45
|
+
extant seam onto a `[data-paper-field]` scope, NOT a new tint mechanism (the
|
|
46
|
+
`useGlassBackdropLuminance` histogram is already general).
|
|
47
|
+
|
|
48
|
+
The strength is BOUNDED ≤ 8% (the `--glass-ambient-strength` cascade bound,
|
|
49
|
+
sub-perceptual under the W55 `--glass-tint-strength-aa` ceiling); the field
|
|
50
|
+
itself is built in the NEXT stage — here we WIRE the bias to read
|
|
51
|
+
`[data-paper-field]` so the seam is live the instant the field mounts.
|
|
52
|
+
|
|
53
|
+
THE COMBINED-HUE CLAMP (C #1 R4): the field warmth is counted into the plate up
|
|
54
|
+
to three times (intrinsic warm fill + field-through-blur + ambient-of-that-field).
|
|
55
|
+
To keep the combined plate-over-field-plus-ambient hue inside the warm band
|
|
56
|
+
[45,88] for ALL section-accents (a violet/teal accent + warm ambient must not
|
|
57
|
+
over-rotate past WARM_HUE_HI), the ambient strength is GATED: it engages only
|
|
58
|
+
while the host has NOT already cleared the warm bar — a host that resolves a
|
|
59
|
+
warm-enough field sets `--paper-field-warm: 1` to SKIP the ambient mix (the
|
|
60
|
+
no-double-count guard). `--glass-ambient-strength-field` is the bounded ceiling
|
|
61
|
+
(≤8%); `--paper-field-warm` (default 0 = engage) is the skip flag the field
|
|
62
|
+
writes when it already clears the bar. */
|
|
63
|
+
[data-paper-field] {
|
|
64
|
+
--glass-ambient-strength-field: min(var(--glass-ambient-strength, 8%), 8%);
|
|
65
|
+
--glass-tint-source: var(--glass-ambient-hue, transparent);
|
|
66
|
+
/* engage the bounded bias UNLESS the field already clears the warm bar
|
|
67
|
+
(`--paper-field-warm: 1` → 0% = skip the ambient mix, no over-rotation). */
|
|
68
|
+
--glass-tint-strength: calc(
|
|
69
|
+
var(--glass-ambient-strength-field) * (1 - var(--paper-field-warm, 0))
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* ── The bloom SOURCE — a small glass pill. STAYS PILL-SIZED in every state (the
|
|
74
|
+
bloom FLIPs the SHEET, not the pill). At rest it shows the search field / the
|
|
75
|
+
now-playing row; while the sheet is open it fades out (the sheet IS its bloomed
|
|
76
|
+
self — they share the visual identity). ── */
|
|
77
|
+
.liquid-pill {
|
|
78
|
+
/* the de-shadcn'd real <button> — reset the UA chrome (border/appearance/font)
|
|
79
|
+
so the glass plate is the only surface; the layout/plate below is unchanged. */
|
|
80
|
+
appearance: none;
|
|
81
|
+
border: none;
|
|
82
|
+
font: inherit;
|
|
83
|
+
text-align: start;
|
|
84
|
+
position: relative;
|
|
85
|
+
z-index: 2;
|
|
86
|
+
box-sizing: border-box;
|
|
87
|
+
display: flex;
|
|
88
|
+
align-items: center;
|
|
89
|
+
gap: 0.625rem;
|
|
90
|
+
block-size: 4rem;
|
|
91
|
+
min-inline-size: 18rem;
|
|
92
|
+
padding-inline: 1.25rem;
|
|
93
|
+
padding-block: 0;
|
|
94
|
+
border-radius: 2rem;
|
|
95
|
+
cursor: pointer;
|
|
96
|
+
color: var(--foreground);
|
|
97
|
+
/* the glass plate — the warm-cream floating tier (real backdrop-filter + rim).
|
|
98
|
+
BOTH legs route through `--glass-level`: the fill reads the COMPOSED
|
|
99
|
+
`--glass-bg-floating` (the `1 - (1-α)*--glass-level` recipe) and the blur reads
|
|
100
|
+
the COMPOSED `--glass-blur-floating` (`blur(radius * --glass-level) saturate()`),
|
|
101
|
+
so `prefers-reduced-transparency: reduce` (`--glass-level: 0` → solid `--card` +
|
|
102
|
+
`blur(0)`) and `prefers-contrast: more` (`0.3`) reach the plate for FREE — no
|
|
103
|
+
hardcoded `blur(...px)` that bypasses the a11y bracket. */
|
|
104
|
+
background: var(--glass-bg-floating);
|
|
105
|
+
-webkit-backdrop-filter: var(--glass-blur-floating);
|
|
106
|
+
backdrop-filter: var(--glass-blur-floating);
|
|
107
|
+
box-shadow:
|
|
108
|
+
inset 0 0 0 0.5px var(--glass-edge-light),
|
|
109
|
+
var(--shadow-floating);
|
|
110
|
+
/* the resting transition is the surface cross-fade only (color/bg/box-shadow —
|
|
111
|
+
NOT a layout property; compositor-safe). */
|
|
112
|
+
transition:
|
|
113
|
+
opacity var(--duration-fast, 150ms) var(--ease-out),
|
|
114
|
+
background var(--duration-fast, 150ms) var(--ease-out);
|
|
115
|
+
}
|
|
116
|
+
/* the focus ring is the token-first `.focus-ring` utility (composed in the SFC on the
|
|
117
|
+
un-filtered host layer — box-shadow survives the rounded clip); this rule only
|
|
118
|
+
PRESERVES the resting rim/shadow beneath the utility ring so the plate edge stays
|
|
119
|
+
lit while focused (the utility's box-shadow would otherwise replace it). */
|
|
120
|
+
.liquid-pill.focus-ring:focus-visible {
|
|
121
|
+
box-shadow:
|
|
122
|
+
var(--focus-ring-shadow),
|
|
123
|
+
inset 0 0 0 0.5px var(--glass-edge-light),
|
|
124
|
+
var(--shadow-floating);
|
|
125
|
+
}
|
|
126
|
+
/* while the sheet/player is open, the pill is the bloom ORIGIN — hide it (the bloomed
|
|
127
|
+
sheet carries the identity forward; restoring it would double the surface). */
|
|
128
|
+
.liquid-pill--hidden {
|
|
129
|
+
opacity: 0;
|
|
130
|
+
pointer-events: none;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/* ── BE.W-ALIVE-IDLE — the sub-perceptual REST breath. A barely-there scale(1↔1.012)
|
|
134
|
+
breath so the resting pill reads ALIVE (the §6 calm register — tasteful, sub-
|
|
135
|
+
perceptual, NEVER disco). Compositor-only (transform: scale), STATIC under reduce
|
|
136
|
+
(the @keyframes only attaches inside the no-preference bracket; at rest the pill
|
|
137
|
+
paints its identity scale). The breath is OFF while the bloom origin is hidden
|
|
138
|
+
(an invisible pill should not animate) — and the island variant is gated to the
|
|
139
|
+
MERGED (non-fissioning) state below so it never fights the carve transforms. ── */
|
|
140
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
141
|
+
.liquid-pill:not(.liquid-pill--hidden) {
|
|
142
|
+
animation: liquid-idle-breath var(--liquid-idle-breath-duration, 6s)
|
|
143
|
+
ease-in-out infinite;
|
|
144
|
+
}
|
|
145
|
+
/* the island's crisp resting pill breathes ONLY while merged (goo OFF). The breath
|
|
146
|
+
rides the resting ::before PLATE (the crisp pill at rest), NOT the host element
|
|
147
|
+
— so it NEVER competes with the carve translate/squish the host's blob+content
|
|
148
|
+
layers carry, and it cross-fades out cleanly as the plate dissolves at t>0.
|
|
149
|
+
Gated to :not([data-fissioning]) so a split removes it at the merged endpoint
|
|
150
|
+
(the plate is already fading; the breath resumes from scale(1) on full merge). */
|
|
151
|
+
.liquid-island-host:not([data-fissioning])::before {
|
|
152
|
+
animation: liquid-idle-breath var(--liquid-idle-breath-duration, 6s)
|
|
153
|
+
ease-in-out infinite;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
@keyframes liquid-idle-breath {
|
|
157
|
+
0%,
|
|
158
|
+
100% {
|
|
159
|
+
transform: scale(1);
|
|
160
|
+
}
|
|
161
|
+
50% {
|
|
162
|
+
transform: scale(1.012);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
.liquid-pill-icon {
|
|
166
|
+
inline-size: 1.2rem;
|
|
167
|
+
block-size: 1.2rem;
|
|
168
|
+
flex: 0 0 auto;
|
|
169
|
+
color: var(--foreground);
|
|
170
|
+
}
|
|
171
|
+
.liquid-pill-hint {
|
|
172
|
+
flex: 1 1 auto;
|
|
173
|
+
font-size: var(--type-body, 1rem);
|
|
174
|
+
color: var(--muted-foreground);
|
|
175
|
+
white-space: nowrap;
|
|
176
|
+
}
|
|
177
|
+
.liquid-pill-trail {
|
|
178
|
+
inline-size: 1.15rem;
|
|
179
|
+
block-size: 1.15rem;
|
|
180
|
+
flex: 0 0 auto;
|
|
181
|
+
color: var(--muted-foreground);
|
|
182
|
+
}
|
|
183
|
+
/* the player pill's album thumb + meta + play */
|
|
184
|
+
.liquid-pill-album {
|
|
185
|
+
flex: 0 0 auto;
|
|
186
|
+
inline-size: 3rem;
|
|
187
|
+
block-size: 3rem;
|
|
188
|
+
border-radius: 0.5rem;
|
|
189
|
+
background: linear-gradient(
|
|
190
|
+
135deg,
|
|
191
|
+
var(--section-color-8),
|
|
192
|
+
var(--section-color-7) 55%,
|
|
193
|
+
var(--section-color-10)
|
|
194
|
+
);
|
|
195
|
+
box-shadow: 0 2px 8px -2px color-mix(in srgb, var(--foreground) 40%, transparent);
|
|
196
|
+
}
|
|
197
|
+
.liquid-pill-meta {
|
|
198
|
+
display: flex;
|
|
199
|
+
flex: 1 1 auto;
|
|
200
|
+
flex-direction: column;
|
|
201
|
+
line-height: 1.2;
|
|
202
|
+
min-inline-size: 0;
|
|
203
|
+
}
|
|
204
|
+
.liquid-pill-title {
|
|
205
|
+
font-size: var(--type-small, 0.875rem);
|
|
206
|
+
color: var(--foreground);
|
|
207
|
+
white-space: nowrap;
|
|
208
|
+
overflow: hidden;
|
|
209
|
+
text-overflow: ellipsis;
|
|
210
|
+
}
|
|
211
|
+
.liquid-pill-artist {
|
|
212
|
+
font-size: var(--type-caption, 0.75rem);
|
|
213
|
+
color: var(--muted-foreground);
|
|
214
|
+
white-space: nowrap;
|
|
215
|
+
}
|
|
216
|
+
.liquid-pill-play {
|
|
217
|
+
display: grid;
|
|
218
|
+
place-items: center;
|
|
219
|
+
inline-size: 2.25rem;
|
|
220
|
+
block-size: 2.25rem;
|
|
221
|
+
border-radius: 999px;
|
|
222
|
+
background: var(--glass-bg-resting);
|
|
223
|
+
color: var(--foreground);
|
|
224
|
+
flex: 0 0 auto;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/* ── VERTICAL pill — a CONTENT REFLOW (a column), NOT a display:none amputation.
|
|
228
|
+
album/icon → title → trailing control stack down the column. ── */
|
|
229
|
+
.liquid-pill[data-orientation="vertical"] {
|
|
230
|
+
flex-direction: column;
|
|
231
|
+
align-items: center;
|
|
232
|
+
justify-content: center;
|
|
233
|
+
gap: 0.5rem;
|
|
234
|
+
block-size: auto;
|
|
235
|
+
min-inline-size: 0;
|
|
236
|
+
inline-size: 5rem;
|
|
237
|
+
min-block-size: 14rem;
|
|
238
|
+
padding-block: 1.25rem;
|
|
239
|
+
padding-inline: 0.5rem;
|
|
240
|
+
}
|
|
241
|
+
.liquid-pill[data-orientation="vertical"] .liquid-pill-hint,
|
|
242
|
+
.liquid-pill[data-orientation="vertical"] .liquid-pill-artist {
|
|
243
|
+
font-size: var(--type-caption, 0.75rem);
|
|
244
|
+
text-align: center;
|
|
245
|
+
white-space: normal;
|
|
246
|
+
}
|
|
247
|
+
.liquid-pill[data-orientation="vertical"] .liquid-pill-meta {
|
|
248
|
+
align-items: center;
|
|
249
|
+
flex: 0 0 auto;
|
|
250
|
+
text-align: center;
|
|
251
|
+
}
|
|
252
|
+
.liquid-pill[data-orientation="vertical"] .liquid-pill-title {
|
|
253
|
+
white-space: normal;
|
|
254
|
+
text-align: center;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/* ════════════════════════════════════════════════════════════════════════════
|
|
258
|
+
THE BLOOM DESTINATIONS — the sheet + the player. Laid out at their FULL settled
|
|
259
|
+
rect (one layout solve). `useBloomUp` FLIPs them FROM the pill's rect inline
|
|
260
|
+
(transform/opacity/filter) — this CSS never animates a layout property. They are
|
|
261
|
+
absolutely-positioned over the stage, anchored to the bottom (the iOS sheet-from-
|
|
262
|
+
dock origin). The content lays out ONCE at the full size and the bloom composites.
|
|
263
|
+
════════════════════════════════════════════════════════════════════════════ */
|
|
264
|
+
.liquid-sheet,
|
|
265
|
+
.liquid-player {
|
|
266
|
+
position: absolute;
|
|
267
|
+
inset-block-end: 2rem;
|
|
268
|
+
inset-inline: 50%;
|
|
269
|
+
translate: -50% 0;
|
|
270
|
+
z-index: 3;
|
|
271
|
+
box-sizing: border-box;
|
|
272
|
+
inline-size: 22rem;
|
|
273
|
+
max-inline-size: 88vw;
|
|
274
|
+
border-radius: var(--radius-card, 1.5rem);
|
|
275
|
+
/* the glass plate — the floating sheet tier (real backdrop-filter + rim). The fill
|
|
276
|
+
COMPOSES the element-level oklab tint (the ladder.css seam) so the stage's
|
|
277
|
+
ambient-hue bias reaches it (the substitution-vs-inheritance fix — a raw
|
|
278
|
+
`var(--glass-bg-floating)` reads the pre-substituted :root value and would NOT
|
|
279
|
+
warm; composing the tint AT the element is the documented retune path). At the
|
|
280
|
+
0%/transparent default this is byte-identical to the raw rung. */
|
|
281
|
+
background: color-mix(
|
|
282
|
+
in oklab,
|
|
283
|
+
var(--glass-bg-floating),
|
|
284
|
+
var(--glass-tint-source, transparent) var(--glass-tint-strength, 0%)
|
|
285
|
+
);
|
|
286
|
+
/* the blur routes through the COMPOSED `--glass-blur-floating` (radius *
|
|
287
|
+
--glass-level), so the a11y brackets (`prefers-reduced-transparency` → blur(0))
|
|
288
|
+
reach the bloomed sheet/player plate (no hardcoded blur bypass). */
|
|
289
|
+
-webkit-backdrop-filter: var(--glass-blur-floating);
|
|
290
|
+
backdrop-filter: var(--glass-blur-floating);
|
|
291
|
+
box-shadow:
|
|
292
|
+
inset 0 0 0 0.5px var(--glass-edge-light),
|
|
293
|
+
var(--shadow-floating);
|
|
294
|
+
overflow: hidden;
|
|
295
|
+
/* the base origin so the inline FLIP scales FROM the pill (the JS overrides
|
|
296
|
+
transform-origin per-bloom; this is the resting fallback). */
|
|
297
|
+
transform-origin: bottom center;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/* the iOS sheet GRABBER */
|
|
301
|
+
.liquid-sheet-grabber {
|
|
302
|
+
position: absolute;
|
|
303
|
+
inset-block-start: 0.6rem;
|
|
304
|
+
inset-inline-start: 50%;
|
|
305
|
+
translate: -50% 0;
|
|
306
|
+
inline-size: 2.25rem;
|
|
307
|
+
block-size: 0.3125rem;
|
|
308
|
+
border-radius: 999px;
|
|
309
|
+
background: color-mix(in oklab, var(--foreground) 20%, transparent);
|
|
310
|
+
z-index: 3;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/* ── the Places sheet body ── */
|
|
314
|
+
.liquid-sheet {
|
|
315
|
+
display: flex;
|
|
316
|
+
flex-direction: column;
|
|
317
|
+
block-size: 23rem;
|
|
318
|
+
}
|
|
319
|
+
.liquid-sheet-body {
|
|
320
|
+
flex: 1 1 auto;
|
|
321
|
+
display: flex;
|
|
322
|
+
flex-direction: column;
|
|
323
|
+
gap: 1rem;
|
|
324
|
+
padding: 1.75rem 1.5rem 1rem;
|
|
325
|
+
overflow: hidden;
|
|
326
|
+
}
|
|
327
|
+
.liquid-sheet-places {
|
|
328
|
+
display: flex;
|
|
329
|
+
gap: 0.5rem;
|
|
330
|
+
justify-content: space-between;
|
|
331
|
+
}
|
|
332
|
+
.liquid-sheet-place {
|
|
333
|
+
display: flex;
|
|
334
|
+
flex-direction: column;
|
|
335
|
+
align-items: center;
|
|
336
|
+
gap: 0.375rem;
|
|
337
|
+
flex: 1 1 0;
|
|
338
|
+
}
|
|
339
|
+
.liquid-sheet-place-label {
|
|
340
|
+
font-size: var(--type-caption, 0.75rem);
|
|
341
|
+
color: var(--foreground);
|
|
342
|
+
white-space: nowrap;
|
|
343
|
+
}
|
|
344
|
+
.liquid-sheet-recents {
|
|
345
|
+
display: flex;
|
|
346
|
+
flex-direction: column;
|
|
347
|
+
gap: 0.5rem;
|
|
348
|
+
margin-block-start: 0.25rem;
|
|
349
|
+
}
|
|
350
|
+
.liquid-sheet-recents-label {
|
|
351
|
+
font-family: var(--font-mono);
|
|
352
|
+
font-size: var(--type-caption, 0.75rem);
|
|
353
|
+
text-transform: uppercase;
|
|
354
|
+
letter-spacing: 0.1em;
|
|
355
|
+
color: var(--muted-foreground);
|
|
356
|
+
}
|
|
357
|
+
.liquid-sheet-recent {
|
|
358
|
+
display: flex;
|
|
359
|
+
align-items: center;
|
|
360
|
+
gap: 0.625rem;
|
|
361
|
+
text-align: start;
|
|
362
|
+
background: none;
|
|
363
|
+
border: none;
|
|
364
|
+
padding: 0;
|
|
365
|
+
cursor: pointer;
|
|
366
|
+
color: inherit;
|
|
367
|
+
font: inherit;
|
|
368
|
+
}
|
|
369
|
+
.liquid-sheet-recent-icon {
|
|
370
|
+
display: grid;
|
|
371
|
+
place-items: center;
|
|
372
|
+
inline-size: 2rem;
|
|
373
|
+
block-size: 2rem;
|
|
374
|
+
border-radius: 999px;
|
|
375
|
+
background: var(--glass-bg-resting);
|
|
376
|
+
color: var(--muted-foreground);
|
|
377
|
+
flex: 0 0 auto;
|
|
378
|
+
}
|
|
379
|
+
.liquid-sheet-recent-text {
|
|
380
|
+
display: flex;
|
|
381
|
+
flex-direction: column;
|
|
382
|
+
line-height: 1.2;
|
|
383
|
+
min-inline-size: 0;
|
|
384
|
+
}
|
|
385
|
+
.liquid-sheet-recent-name {
|
|
386
|
+
font-size: var(--type-small, 0.875rem);
|
|
387
|
+
color: var(--foreground);
|
|
388
|
+
}
|
|
389
|
+
.liquid-sheet-recent-sub {
|
|
390
|
+
font-size: var(--type-caption, 0.75rem);
|
|
391
|
+
color: var(--muted-foreground);
|
|
392
|
+
white-space: nowrap;
|
|
393
|
+
overflow: hidden;
|
|
394
|
+
text-overflow: ellipsis;
|
|
395
|
+
}
|
|
396
|
+
/* the persistent search field at the sheet bottom — the pill's magnifier FLIPs
|
|
397
|
+
into THIS (one coherent search element, the orphan-magnifier fix). */
|
|
398
|
+
.liquid-sheet-search {
|
|
399
|
+
flex: 0 0 auto;
|
|
400
|
+
display: flex;
|
|
401
|
+
align-items: center;
|
|
402
|
+
gap: 0.625rem;
|
|
403
|
+
block-size: 4rem;
|
|
404
|
+
padding-inline: 1.25rem;
|
|
405
|
+
border-block-start: 1px solid color-mix(in oklab, var(--foreground) 9%, transparent);
|
|
406
|
+
background: color-mix(in oklab, var(--card), transparent 35%);
|
|
407
|
+
cursor: pointer;
|
|
408
|
+
color: inherit;
|
|
409
|
+
font: inherit;
|
|
410
|
+
text-align: start;
|
|
411
|
+
}
|
|
412
|
+
/* VERTICAL sheet — a narrower, taller column (the content already reflows: the
|
|
413
|
+
Places row + Recents stack down the column naturally). */
|
|
414
|
+
.liquid-sheet[data-orientation="vertical"] {
|
|
415
|
+
inline-size: 17rem;
|
|
416
|
+
block-size: 25rem;
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/* ── the player card — the full Apple Music player ── */
|
|
420
|
+
.liquid-player {
|
|
421
|
+
display: flex;
|
|
422
|
+
flex-direction: column;
|
|
423
|
+
align-items: center;
|
|
424
|
+
justify-content: center;
|
|
425
|
+
gap: 0.625rem;
|
|
426
|
+
padding: 2rem 1.5rem 1.75rem;
|
|
427
|
+
block-size: 24rem;
|
|
428
|
+
}
|
|
429
|
+
/* the Apple Music AMBIENT background — the album's own colours, blurred (the iconic
|
|
430
|
+
now-playing ambience). The FIELD ambient-hue warm (the bloom 4th channel) sits on
|
|
431
|
+
the STAGE; this is the card's own bloom-art. */
|
|
432
|
+
.liquid-player::before {
|
|
433
|
+
content: "";
|
|
434
|
+
position: absolute;
|
|
435
|
+
inset: -20%;
|
|
436
|
+
z-index: -1;
|
|
437
|
+
background:
|
|
438
|
+
radial-gradient(
|
|
439
|
+
ellipse 70% 60% at 28% 22%,
|
|
440
|
+
color-mix(in oklab, var(--section-color-8), transparent 50%),
|
|
441
|
+
transparent 72%
|
|
442
|
+
),
|
|
443
|
+
radial-gradient(
|
|
444
|
+
ellipse 65% 55% at 78% 82%,
|
|
445
|
+
color-mix(in oklab, var(--section-color-10), transparent 55%),
|
|
446
|
+
transparent 68%
|
|
447
|
+
),
|
|
448
|
+
radial-gradient(
|
|
449
|
+
ellipse 60% 70% at 60% 55%,
|
|
450
|
+
color-mix(in oklab, var(--section-color-7), transparent 60%),
|
|
451
|
+
transparent 64%
|
|
452
|
+
);
|
|
453
|
+
filter: blur(14px);
|
|
454
|
+
opacity: 0.55;
|
|
455
|
+
pointer-events: none;
|
|
456
|
+
}
|
|
457
|
+
.liquid-player-album {
|
|
458
|
+
flex: 0 0 auto;
|
|
459
|
+
inline-size: 8.5rem;
|
|
460
|
+
block-size: 8.5rem;
|
|
461
|
+
border-radius: 1rem;
|
|
462
|
+
background: linear-gradient(
|
|
463
|
+
135deg,
|
|
464
|
+
var(--section-color-8),
|
|
465
|
+
var(--section-color-7) 55%,
|
|
466
|
+
var(--section-color-10)
|
|
467
|
+
);
|
|
468
|
+
box-shadow: 0 12px 32px -8px color-mix(in srgb, var(--foreground) 50%, transparent);
|
|
469
|
+
}
|
|
470
|
+
.liquid-player-title {
|
|
471
|
+
font-size: var(--type-subheading);
|
|
472
|
+
font-weight: 600;
|
|
473
|
+
color: var(--foreground);
|
|
474
|
+
text-align: center;
|
|
475
|
+
}
|
|
476
|
+
.liquid-player-artist {
|
|
477
|
+
font-size: var(--type-small, 0.875rem);
|
|
478
|
+
color: var(--muted-foreground);
|
|
479
|
+
margin-block-start: -0.375rem;
|
|
480
|
+
}
|
|
481
|
+
.liquid-player-scrubber {
|
|
482
|
+
inline-size: 100%;
|
|
483
|
+
block-size: 4px;
|
|
484
|
+
border-radius: 999px;
|
|
485
|
+
background: var(--glass-bg-resting);
|
|
486
|
+
overflow: hidden;
|
|
487
|
+
margin-block-start: 0.25rem;
|
|
488
|
+
}
|
|
489
|
+
.liquid-player-scrubber-fill {
|
|
490
|
+
display: block;
|
|
491
|
+
inline-size: 38%;
|
|
492
|
+
block-size: 100%;
|
|
493
|
+
border-radius: 999px;
|
|
494
|
+
background: var(--foreground);
|
|
495
|
+
}
|
|
496
|
+
.liquid-player-times {
|
|
497
|
+
display: flex;
|
|
498
|
+
justify-content: space-between;
|
|
499
|
+
inline-size: 100%;
|
|
500
|
+
margin-block-start: 0.3rem;
|
|
501
|
+
font-size: 0.6875rem;
|
|
502
|
+
font-variant-numeric: tabular-nums;
|
|
503
|
+
color: var(--muted-foreground);
|
|
504
|
+
}
|
|
505
|
+
.liquid-player-transport {
|
|
506
|
+
display: flex;
|
|
507
|
+
align-items: center;
|
|
508
|
+
gap: 1.5rem;
|
|
509
|
+
color: var(--foreground);
|
|
510
|
+
margin-block-start: 0.25rem;
|
|
511
|
+
}
|
|
512
|
+
.liquid-player-transport button {
|
|
513
|
+
background: none;
|
|
514
|
+
border: none;
|
|
515
|
+
padding: 0;
|
|
516
|
+
cursor: pointer;
|
|
517
|
+
color: inherit;
|
|
518
|
+
display: grid;
|
|
519
|
+
place-items: center;
|
|
520
|
+
}
|
|
521
|
+
.liquid-player-transport-play {
|
|
522
|
+
inline-size: 3rem;
|
|
523
|
+
block-size: 3rem;
|
|
524
|
+
border-radius: 999px;
|
|
525
|
+
background: var(--glass-bg-floating) !important;
|
|
526
|
+
}
|
|
527
|
+
/* VERTICAL player — the column is the player's natural layout (album → title →
|
|
528
|
+
transport already stack); just narrow it for the vertical stage. */
|
|
529
|
+
.liquid-player[data-orientation="vertical"] {
|
|
530
|
+
inline-size: 17rem;
|
|
531
|
+
block-size: 25rem;
|
|
532
|
+
}
|
|
533
|
+
|
|
534
|
+
/* ════════════════════════════════════════════════════════════════════════════
|
|
535
|
+
THE ISLAND — ONE crisp glass pill that FISSIONS. The host IS the
|
|
536
|
+
`.dock-fission-bridge` (the library recipe owns the goo-OR-glass swap + the
|
|
537
|
+
--dock-split-t/--neck-t scalars). The two halves are `.dock-fission-piece`s (the
|
|
538
|
+
library owns their translate/squish/neck). This CSS supplies ONLY:
|
|
539
|
+
• the host's resting ONE-pill glass plate (the crisp pill at rest), and
|
|
540
|
+
• each half's content layout + a resting glass face.
|
|
541
|
+
NO blob layer, NO data-mode CSS switch, NO box-scale.
|
|
542
|
+
════════════════════════════════════════════════════════════════════════════ */
|
|
543
|
+
.liquid-island-host {
|
|
544
|
+
/* the de-shadcn'd real <button> — reset the UA chrome (the host has no plate of
|
|
545
|
+
its own; the ::before is the resting glass, the bridge holds the goo). */
|
|
546
|
+
appearance: none;
|
|
547
|
+
border: none;
|
|
548
|
+
padding: 0;
|
|
549
|
+
font: inherit;
|
|
550
|
+
text-align: start;
|
|
551
|
+
background: none;
|
|
552
|
+
color: var(--foreground);
|
|
553
|
+
position: relative;
|
|
554
|
+
z-index: 2;
|
|
555
|
+
box-sizing: border-box;
|
|
556
|
+
inline-size: 19rem;
|
|
557
|
+
block-size: 3.75rem;
|
|
558
|
+
cursor: pointer;
|
|
559
|
+
border-radius: 1.875rem;
|
|
560
|
+
}
|
|
561
|
+
/* the ONE crisp glass pill at REST is the host's ::before PLATE (NOT the host's own
|
|
562
|
+
opacity — fading the host element would hide its children: the blob + content
|
|
563
|
+
layers). Real backdrop-filter + rim. The plate DISSOLVES as the split rises (the
|
|
564
|
+
goo-OR-glass swap — the solid blob layer fades IN over the bridge goo while THIS
|
|
565
|
+
plate fades out). Compositor-safe: an opacity cross-fade on the ::before keyed off
|
|
566
|
+
the inheriting --dock-split-t (gone by t≈0.3), never a layout animation. */
|
|
567
|
+
.liquid-island-host::before {
|
|
568
|
+
content: "";
|
|
569
|
+
position: absolute;
|
|
570
|
+
inset: 0;
|
|
571
|
+
z-index: 0;
|
|
572
|
+
border-radius: inherit;
|
|
573
|
+
background: var(--glass-bg-floating);
|
|
574
|
+
/* the blur routes through the COMPOSED `--glass-blur-floating` (radius *
|
|
575
|
+
--glass-level), so the a11y brackets reach the island plate too. */
|
|
576
|
+
-webkit-backdrop-filter: var(--glass-blur-floating);
|
|
577
|
+
backdrop-filter: var(--glass-blur-floating);
|
|
578
|
+
box-shadow:
|
|
579
|
+
inset 0 0 0 0.5px var(--glass-edge-light),
|
|
580
|
+
var(--shadow-floating);
|
|
581
|
+
opacity: clamp(0, calc(1 - var(--dock-split-t, 0) * 3.2), 1);
|
|
582
|
+
pointer-events: none;
|
|
583
|
+
}
|
|
584
|
+
/* the focus ring is the token-first `.focus-ring` utility (composed in the SFC on the
|
|
585
|
+
host button — the un-filtered layer). The host has NO overflow:clip, so the
|
|
586
|
+
utility's box-shadow ring is fully visible; the goo filter lives on the descendant
|
|
587
|
+
`.liquid-island-bridge`, never on the host, so the ring is never swallowed. We do
|
|
588
|
+
NOT re-author a ::after ring here (ONE token-first ring, the no-fork discipline). */
|
|
589
|
+
|
|
590
|
+
/* WIRE the library goo mount into the bridge's `var(--dock-fission-goo-filter)`
|
|
591
|
+
swap. The .dock-fission-bridge base recipe is `position:absolute; inset:0;
|
|
592
|
+
pointer-events:none`. Here it is the FLEX layer holding the two pieces (the demo
|
|
593
|
+
lays them out; the library owns the goo + the neck + the translate/squish). The
|
|
594
|
+
goo `filter: url()` engages ONLY while the host carries [data-fissioning] (the
|
|
595
|
+
descendant `[data-fissioning] .dock-fission-bridge` rule), fusing the two piece
|
|
596
|
+
faces + their necks into ONE metaball body that carves apart. */
|
|
597
|
+
/* the goo BLOB layer — the `.dock-fission-bridge` flex host. The two SOLID blob
|
|
598
|
+
plates (the registered fission pieces) fuse + neck under the library goo. It holds
|
|
599
|
+
NO text (the goo feColorMatrix threshold would mangle it) — the content rides the
|
|
600
|
+
un-filtered .liquid-island-content layer. The base .dock-fission-bridge is
|
|
601
|
+
`inset:0` so it fills the host. */
|
|
602
|
+
.liquid-island-bridge {
|
|
603
|
+
--dock-fission-goo-filter: url(#dock-fission-goo);
|
|
604
|
+
display: flex;
|
|
605
|
+
align-items: stretch;
|
|
606
|
+
justify-content: center;
|
|
607
|
+
z-index: 1;
|
|
608
|
+
}
|
|
609
|
+
/* each blob — a SOLID metaball plate (the registered `.dock-fission-piece`, which
|
|
610
|
+
owns the translate/squish/neck). SOLID warm fill so the goo threshold passes (a
|
|
611
|
+
translucent fill gets thresholded away). At rest the two abut to form ONE pill mass
|
|
612
|
+
(the goo at rest is OFF — the crisp host plate IS the pill); fissioning, they neck
|
|
613
|
+
apart. The fill matches the warm-cream glass register at full opacity (the goo
|
|
614
|
+
needs solid alpha; the host backdrop-filter at rest carries the real translucency). */
|
|
615
|
+
.liquid-island-blob {
|
|
616
|
+
flex: 1 1 0;
|
|
617
|
+
border-radius: 1.875rem;
|
|
618
|
+
background: color-mix(in oklab, var(--card), oklch(0.75 0.066 64) 16%);
|
|
619
|
+
/* the blob layer fades IN as the carve rises (so at rest the crisp host plate is
|
|
620
|
+
the one pill; from t>0 the solid blobs are the carved + necked mass). An
|
|
621
|
+
opacity cross-fade keyed off the inheriting --dock-split-t (compositor-safe). */
|
|
622
|
+
opacity: clamp(0, calc(var(--dock-split-t, 0) * 4), 1);
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
/* the crisp CONTENT layer — un-filtered, ON TOP of the blob layer. It overlays the
|
|
626
|
+
host (inset:0) and tracks the blobs via the SAME inheriting --dock-split-t scalar +
|
|
627
|
+
per-half vectors. Compositor-only (translate, never a layout property). */
|
|
628
|
+
.liquid-island-content {
|
|
629
|
+
position: absolute;
|
|
630
|
+
inset: 0;
|
|
631
|
+
z-index: 2;
|
|
632
|
+
display: flex;
|
|
633
|
+
align-items: stretch;
|
|
634
|
+
justify-content: center;
|
|
635
|
+
pointer-events: none;
|
|
636
|
+
/* the resist-aware progress mirroring the library piece (the spring scalar pulled
|
|
637
|
+
back by the pointer --seam-tension so the content tracks the blob exactly). */
|
|
638
|
+
--piece-progress: clamp(
|
|
639
|
+
0,
|
|
640
|
+
calc(var(--dock-split-t, 0) - var(--seam-tension, 0)),
|
|
641
|
+
1
|
|
642
|
+
);
|
|
643
|
+
--piece-reach: var(--dock-fission-reach, 4.5rem);
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
/* each half — a content island. A half fills its share of the content layer (flex 1)
|
|
647
|
+
and TRANSLATES by the same (vector · reach · progress) the library blob piece uses,
|
|
648
|
+
so the crisp content tracks the goo blob exactly. NO own plate (the blob below is
|
|
649
|
+
the surface); just the readable content + a faint top rim catch-light. */
|
|
650
|
+
.liquid-island {
|
|
651
|
+
flex: 1 1 0;
|
|
652
|
+
display: flex;
|
|
653
|
+
align-items: center;
|
|
654
|
+
gap: 0.5rem;
|
|
655
|
+
/* the OUTER inline edge clears the pill's 1.875rem rounded corner so the ring/eq
|
|
656
|
+
content sits WITHIN the goo-blob pill at rest (no overhang past the rounded
|
|
657
|
+
edge) — the rounded end needs more clearance than the straight middle. The INNER
|
|
658
|
+
(seam) edge stays tight so the two halves read as ONE pill. The per-half rules
|
|
659
|
+
below set the inner edge to the tight 0.85rem; this is the outer default. */
|
|
660
|
+
padding-inline: 1.15rem;
|
|
661
|
+
color: var(--foreground);
|
|
662
|
+
border-radius: 1.875rem;
|
|
663
|
+
}
|
|
664
|
+
.liquid-island-content .liquid-island {
|
|
665
|
+
translate:
|
|
666
|
+
calc(var(--half-dx, 0) * var(--piece-reach) * var(--piece-progress))
|
|
667
|
+
calc(var(--half-dy, 0) * var(--piece-reach) * var(--piece-progress));
|
|
668
|
+
will-change: transform;
|
|
669
|
+
}
|
|
670
|
+
.liquid-island--timer {
|
|
671
|
+
justify-content: flex-end;
|
|
672
|
+
text-align: end;
|
|
673
|
+
/* the seam (inner) edge is the RIGHT edge — keep it tight so the two halves abut
|
|
674
|
+
as ONE pill; the LEFT (outer, rounded) edge keeps the 1.15rem clearance. */
|
|
675
|
+
padding-inline-end: 0.7rem;
|
|
676
|
+
--half-dx: -1; /* peel LEFT (matches the timer blob's --split-dx) */
|
|
677
|
+
--half-dy: 0;
|
|
678
|
+
}
|
|
679
|
+
.liquid-island--music {
|
|
680
|
+
justify-content: flex-start;
|
|
681
|
+
/* the seam (inner) edge is the LEFT edge — keep it tight. */
|
|
682
|
+
padding-inline-start: 0.7rem;
|
|
683
|
+
--half-dx: 1; /* peel RIGHT (matches the music blob's --split-dx) */
|
|
684
|
+
--half-dy: 0;
|
|
685
|
+
}
|
|
686
|
+
.liquid-island-meta {
|
|
687
|
+
display: flex;
|
|
688
|
+
flex: 1 1 auto;
|
|
689
|
+
min-inline-size: 0;
|
|
690
|
+
flex-direction: column;
|
|
691
|
+
justify-content: center;
|
|
692
|
+
gap: 0.05rem;
|
|
693
|
+
overflow: hidden;
|
|
694
|
+
white-space: nowrap;
|
|
695
|
+
}
|
|
696
|
+
.liquid-island--timer .liquid-island-meta {
|
|
697
|
+
align-items: flex-end;
|
|
698
|
+
text-align: right;
|
|
699
|
+
}
|
|
700
|
+
.liquid-island-title {
|
|
701
|
+
max-inline-size: 100%;
|
|
702
|
+
overflow: hidden;
|
|
703
|
+
font-size: 0.76rem;
|
|
704
|
+
font-weight: 650;
|
|
705
|
+
line-height: 1.15;
|
|
706
|
+
text-overflow: ellipsis;
|
|
707
|
+
}
|
|
708
|
+
.liquid-island-sub {
|
|
709
|
+
max-inline-size: 100%;
|
|
710
|
+
overflow: hidden;
|
|
711
|
+
color: var(--muted-foreground);
|
|
712
|
+
font-size: 0.64rem;
|
|
713
|
+
line-height: 1.1;
|
|
714
|
+
text-overflow: ellipsis;
|
|
715
|
+
}
|
|
716
|
+
/* the timer glyph chip */
|
|
717
|
+
.liquid-island-ring {
|
|
718
|
+
flex: 0 0 auto;
|
|
719
|
+
display: grid;
|
|
720
|
+
place-items: center;
|
|
721
|
+
inline-size: 2.35rem;
|
|
722
|
+
block-size: 2.35rem;
|
|
723
|
+
border-radius: 999px;
|
|
724
|
+
color: var(--section-color-8);
|
|
725
|
+
background: color-mix(in oklab, var(--section-color-8), transparent 82%);
|
|
726
|
+
}
|
|
727
|
+
/* the album thumbnail */
|
|
728
|
+
.liquid-island-album {
|
|
729
|
+
flex: 0 0 auto;
|
|
730
|
+
inline-size: 2.35rem;
|
|
731
|
+
block-size: 2.35rem;
|
|
732
|
+
border-radius: 0.5rem;
|
|
733
|
+
background: linear-gradient(
|
|
734
|
+
135deg,
|
|
735
|
+
var(--section-color-2),
|
|
736
|
+
var(--section-color-7) 72%
|
|
737
|
+
);
|
|
738
|
+
box-shadow: inset 0 0 0 0.5px color-mix(in oklab, white, transparent 60%);
|
|
739
|
+
}
|
|
740
|
+
/* the equalizer — compositor-safe scaleY bars (PRM gates the motion) */
|
|
741
|
+
.liquid-island-eq {
|
|
742
|
+
display: flex;
|
|
743
|
+
flex: 0 0 auto;
|
|
744
|
+
align-items: flex-end;
|
|
745
|
+
gap: 0.13rem;
|
|
746
|
+
block-size: 1.15rem;
|
|
747
|
+
}
|
|
748
|
+
.liquid-island-eq i {
|
|
749
|
+
inline-size: 0.17rem;
|
|
750
|
+
block-size: 1.15rem;
|
|
751
|
+
border-radius: 1px;
|
|
752
|
+
background: var(--section-color-7);
|
|
753
|
+
transform: scaleY(0.4);
|
|
754
|
+
transform-origin: bottom;
|
|
755
|
+
}
|
|
756
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
757
|
+
.liquid-island-eq i {
|
|
758
|
+
animation: liquid-island-eq 0.9s ease-in-out infinite;
|
|
759
|
+
}
|
|
760
|
+
.liquid-island-eq i:nth-child(2) {
|
|
761
|
+
animation-delay: 0.2s;
|
|
762
|
+
}
|
|
763
|
+
.liquid-island-eq i:nth-child(3) {
|
|
764
|
+
animation-delay: 0.38s;
|
|
765
|
+
}
|
|
766
|
+
.liquid-island-eq i:nth-child(4) {
|
|
767
|
+
animation-delay: 0.1s;
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
@keyframes liquid-island-eq {
|
|
771
|
+
0%,
|
|
772
|
+
100% {
|
|
773
|
+
transform: scaleY(0.32);
|
|
774
|
+
}
|
|
775
|
+
50% {
|
|
776
|
+
transform: scaleY(1);
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
/* ── VERTICAL island — a CONTENT REFLOW (a column of two stacked halves), NOT a
|
|
781
|
+
display:none. Both the blob layer + the content layer stack vertically; each half
|
|
782
|
+
reflows to a column (glyph → meta) so nothing clips. The carve runs along the
|
|
783
|
+
COLUMN axis — the blob fission vectors are re-pointed to dy in the SFC, and the
|
|
784
|
+
content half-vectors are re-pointed here. ── */
|
|
785
|
+
.liquid-island-host[data-orientation="vertical"] {
|
|
786
|
+
block-size: auto;
|
|
787
|
+
inline-size: 9rem;
|
|
788
|
+
min-block-size: 12rem;
|
|
789
|
+
}
|
|
790
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island-bridge,
|
|
791
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island-content {
|
|
792
|
+
flex-direction: column;
|
|
793
|
+
}
|
|
794
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island {
|
|
795
|
+
flex-direction: column;
|
|
796
|
+
justify-content: center;
|
|
797
|
+
text-align: center;
|
|
798
|
+
gap: 0.35rem;
|
|
799
|
+
/* the vertical content is CENTRED inline (the inline edges are not the carve axis),
|
|
800
|
+
so reset to a symmetric inline padding that sits within the narrow pill; the
|
|
801
|
+
block (carve) axis carries the outer/seam clearance below. */
|
|
802
|
+
padding-inline: 0.6rem;
|
|
803
|
+
padding-block: 1rem;
|
|
804
|
+
}
|
|
805
|
+
/* the carve axis swaps to the column (dy) so the content tracks the column-peeling
|
|
806
|
+
blobs (the SFC re-points the blob fission vectors to dy in lockstep). The OUTER
|
|
807
|
+
block edge clears the rounded pill end; the SEAM (inner) block edge stays tight. */
|
|
808
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island--timer {
|
|
809
|
+
justify-content: center;
|
|
810
|
+
padding-inline-end: 0.6rem; /* reset the horizontal seam override */
|
|
811
|
+
padding-block-end: 0.6rem; /* the seam is the BOTTOM edge — tight */
|
|
812
|
+
--half-dx: 0;
|
|
813
|
+
--half-dy: -1; /* peel UP */
|
|
814
|
+
}
|
|
815
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island--music {
|
|
816
|
+
justify-content: center;
|
|
817
|
+
padding-inline-start: 0.6rem; /* reset the horizontal seam override */
|
|
818
|
+
padding-block-start: 0.6rem; /* the seam is the TOP edge — tight */
|
|
819
|
+
--half-dx: 0;
|
|
820
|
+
--half-dy: 1; /* peel DOWN */
|
|
821
|
+
}
|
|
822
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island-meta,
|
|
823
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island--timer .liquid-island-meta {
|
|
824
|
+
align-items: center;
|
|
825
|
+
text-align: center;
|
|
826
|
+
}
|
|
827
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island-title,
|
|
828
|
+
.liquid-island-host[data-orientation="vertical"] .liquid-island-sub {
|
|
829
|
+
white-space: normal;
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
@media (prefers-reduced-motion: reduce) {
|
|
833
|
+
.liquid-pill,
|
|
834
|
+
.liquid-sheet,
|
|
835
|
+
.liquid-player {
|
|
836
|
+
transition: none !important;
|
|
837
|
+
}
|
|
838
|
+
/* the library fission-bridge PRM block zeroes `--dock-bridge-opacity` to hide the
|
|
839
|
+
goo NECK layer — but in this composition the bridge HOLDS the island pieces, so
|
|
840
|
+
keep the bridge (and thus the seated-apart pieces) visible. The library still
|
|
841
|
+
drops the neck/specular ::before/::after (display:none) under PRM; the pieces
|
|
842
|
+
are sync-seated at their endpoint by the orchestrator (an instant cut). */
|
|
843
|
+
.liquid-island-bridge {
|
|
844
|
+
--dock-bridge-opacity: 1;
|
|
845
|
+
}
|
|
846
|
+
/* the resting host plate stays at its split-keyed opacity (the orchestrator seats
|
|
847
|
+
--dock-split-t at the endpoint, so a seated-split host plate is correctly faded
|
|
848
|
+
and a merged one is the crisp pill — no animation, the seat is instant). */
|
|
849
|
+
}
|
|
850
|
+
}
|