@mkbabb/glass-ui 8.0.0 → 10.0.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/MIGRATION.md +4768 -0
- package/README.md +57 -13
- package/dist/DialogContent-CwIBvou_.js +157 -0
- package/dist/{DropdownMenuTrigger-8UZsBtZ8.js → DropdownMenuTrigger-CKRnhDSQ.js} +1 -1
- package/dist/{Surface-i1tWC-Ga.js → Surface-1nPoabc3.js} +1 -1
- package/dist/{accent-tone-solve-Cw7WkRD9.js → accent-tone-solve-5H6FY2QO.js} +1 -1
- package/dist/aurora.js +386 -355
- package/dist/{badge-owUOaaba.js → badge-BO6BC4G5.js} +1 -1
- package/dist/badge.js +1 -1
- package/dist/blob.js +44 -44
- package/dist/{button-yvGPb0Bx.js → button-BOFTUPyU.js} +1 -1
- package/dist/button.js +1 -1
- package/dist/{card-3HFFpC7_.js → card-ByyqRBvK.js} +2 -2
- package/dist/card.js +1 -1
- package/dist/carousel.js +3 -3
- package/dist/{checkbox-BnXuGgJ3.js → checkbox-B1qn65se.js} +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/chip.js +8 -3
- package/dist/{class-names-q-UGOkHH.js → class-names-FlXcvRRT.js} +65 -18
- package/dist/{collapsible-B7O6m-Ch.js → collapsible-DFzK29Oh.js} +5 -2
- package/dist/collapsible.js +1 -1
- package/dist/color.glsl-DTJhdekG.js +34 -0
- package/dist/color.js +11 -11
- package/dist/color.wgsl-BTszLY39.js +398 -0
- package/dist/{command-BuBnYpxF.js → command-C-5xSEJ2.js} +8 -8
- package/dist/command.js +1 -1
- package/dist/component-styles.css +1 -0
- package/dist/components/_shared/class-names.d.ts +10 -1
- package/dist/components/_shared/control.d.ts +0 -1
- package/dist/components/_shared/index.d.ts +0 -1
- package/dist/components/_shared/menu/menu.css +1 -1
- package/dist/components/_shared/overlay/index.d.ts +1 -0
- package/dist/components/_shared/overlay/shortcuts.d.ts +12 -0
- package/dist/components/aurora/Aurora.vue.d.ts +1 -0
- package/dist/components/aurora/composables/atoms.d.ts +22 -6
- package/dist/components/aurora/composables/frameLoop.d.ts +6 -5
- package/dist/components/aurora/composables/runtime.d.ts +28 -1
- package/dist/components/aurora/composables/useAurora.d.ts +28 -0
- package/dist/components/aurora/composables/wgpuSetup.d.ts +1 -1
- package/dist/components/aurora/constants/presets.d.ts +62 -5
- package/dist/components/aurora/index.d.ts +1 -1
- package/dist/components/blob/Blob.vue.d.ts +3 -3
- package/dist/components/card/Card.vue.d.ts +8 -2
- package/dist/components/chip/Chip.vue.d.ts +1 -7
- package/dist/components/chip/chipVariants.d.ts +1 -0
- package/dist/components/collapsible/Collapsible.vue.d.ts +1 -0
- package/dist/components/command/CommandDialog.vue.d.ts +1 -1
- package/dist/components/configurator/Configurator.vue.d.ts +25 -2
- package/dist/components/configurator/ConfiguratorRow.vue.d.ts +4 -2
- package/dist/components/configurator/styles.css +1 -1
- package/dist/components/dark-mode-toggle/dark-mode-toggle.css +1 -1
- package/dist/components/deck/styles/capture.css +1 -1
- package/dist/components/dialog/styles.css +1 -1
- package/dist/components/dock/DockSeparator.vue.d.ts +2 -3
- package/dist/components/dock/GlassDock.vue.d.ts +1 -0
- package/dist/components/dock/composables/dockContext.d.ts +1 -8
- package/dist/components/dock/composables/dockCrossfadeContext.d.ts +0 -2
- package/dist/components/dock/composables/index.d.ts +1 -1
- package/dist/components/dock/composables/useDockHold.d.ts +16 -12
- package/dist/components/dock/composables/useDockRun.d.ts +20 -0
- package/dist/components/dock/composables/useDockSearch.d.ts +1 -1
- package/dist/components/dock/composables/useDockShellProps.d.ts +18 -101
- package/dist/components/dock/composables/useDockState.d.ts +2 -9
- package/dist/components/dock/constants.d.ts +15 -0
- package/dist/components/dock/index.d.ts +2 -2
- package/dist/components/dock/styles/controls/icon-button.css +1 -1
- package/dist/components/dock/styles/controls/tab-button.css +1 -1
- package/dist/components/dock/styles/controls/triggers.css +1 -1
- package/dist/components/dock/styles/controls.css +1 -1
- package/dist/components/dock/styles/density.css +1 -1
- package/dist/components/dock/styles/index.css +1 -1
- package/dist/components/dock/styles/layer-group.css +1 -1
- package/dist/components/dock/styles/layers.css +1 -1
- package/dist/components/dock/styles/morph.css +1 -1
- package/dist/components/dock/styles/run.css +1 -0
- package/dist/components/dock/styles/search.css +1 -1
- package/dist/components/dock/styles/shape.css +1 -1
- package/dist/components/dock/styles/shell-regions.css +1 -1
- package/dist/components/dock/styles/shell.css +1 -1
- package/dist/components/fourier-field/FourierField.vue.d.ts +29 -26
- package/dist/components/fourier-field/clock.d.ts +35 -0
- package/dist/components/fourier-field/constants.d.ts +80 -104
- package/dist/components/fourier-field/index.d.ts +3 -28
- package/dist/components/fourier-field/math.d.ts +69 -77
- package/dist/components/fourier-field/renderer/mint.d.ts +50 -0
- package/dist/components/fourier-field/renderer/uniforms.d.ts +84 -0
- package/dist/components/fourier-field/renderer/wgpu.d.ts +28 -0
- package/dist/components/fourier-field/shaders/compute.wgsl.d.ts +1 -0
- package/dist/components/fourier-field/shaders/render.wgsl.d.ts +1 -0
- package/dist/components/fourier-field/useFourierField.d.ts +49 -0
- package/dist/components/handmark/HandMark.vue.d.ts +18 -14
- package/dist/components/handmark/index.d.ts +4 -23
- package/dist/components/handmark/stroke.d.ts +92 -0
- package/dist/components/labeled-field/LabeledSwitch.vue.d.ts +3 -1
- package/dist/components/labeled-field/types.d.ts +1 -1
- package/dist/components/menu/DropdownMenu.vue.d.ts +1 -1
- package/dist/components/metric/coalesce-metric.d.ts +6 -1
- package/dist/components/metric/styles.css +1 -1
- package/dist/components/popover/Popover.vue.d.ts +1 -1
- package/dist/components/scroll-progress-rim/styles.css +1 -1
- package/dist/components/sheet/styles.css +1 -1
- package/dist/components/slider/styles.css +1 -1
- package/dist/components/tabs/SegmentedTabs.vue.d.ts +25 -112
- package/dist/components/tabs/composables/useTabDragMorph.d.ts +1 -1
- package/dist/components/tabs/composables/useTabResponsive.d.ts +11 -11
- package/dist/components/tabs/index.d.ts +1 -1
- package/dist/components/tabs/styles/drag.css +1 -1
- package/dist/components/tabs/styles/segmented.css +1 -1
- package/dist/components/tabs/types.d.ts +85 -0
- package/dist/components/timeline/index.d.ts +2 -0
- package/dist/components/toast/Toast.vue.d.ts +2 -2
- package/dist/composables/color/index.d.ts +0 -15
- package/dist/composables/dark/darkModeSyncScript.d.ts +42 -0
- package/dist/composables/dom/useResolveTokenColor.d.ts +1 -1
- package/dist/composables/glass/index.d.ts +2 -0
- package/dist/composables/keyboard/useKeyboardShortcuts.d.ts +47 -1
- package/dist/composables/motion/pointer/pointerFieldMappings.d.ts +0 -41
- package/dist/{components/search/composables → composables/search}/index.d.ts +2 -2
- package/dist/{components/search/composables/fuzzySearchIndex.d.ts → composables/search/match.d.ts} +8 -3
- package/dist/composables/sidebar/types.d.ts +5 -1
- package/dist/configurator-DiwVN573.js +339 -0
- package/dist/configurator.js +1 -1
- package/dist/constellation.js +5 -5
- package/dist/{content-CWO-XL7o.js → content-So3j6SOe.js} +1 -1
- package/dist/control-DJp15L4U.js +7 -0
- package/dist/dark-mode-toggle.js +2 -2
- package/dist/{dark-z_P5QwqI.js → dark-pONY3x93.js} +2 -2
- package/dist/dark.js +1 -1
- package/dist/{data-table-_RrOEdiw.js → data-table-Ba_uTfPc.js} +3 -3
- package/dist/data-table.js +1 -1
- package/dist/{deck-Ci6YjB5e.js → deck-Cm_VmyNL.js} +1 -1
- package/dist/deck.js +1 -1
- package/dist/{dialog-CbRnTRtg.js → dialog-BZoFG0j8.js} +1 -1
- package/dist/dialog.js +2 -2
- package/dist/dock.js +718 -496
- package/dist/dom.js +90 -8
- package/dist/easing.js +5 -5
- package/dist/expandable-container-CZUj9BzY.js +142 -0
- package/dist/expandable-container.js +2 -142
- package/dist/fourier-field.js +638 -855
- package/dist/fourier-math.js +6 -6
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +88 -75
- package/dist/handmark.js +330 -718
- package/dist/index.d.ts +2 -2
- package/dist/infinite-scroll.js +16 -17
- package/dist/{input-Bls2A4Tt.js → input-eLZ_AU7l.js} +1 -1
- package/dist/input.js +1 -1
- package/dist/keyboard.js +64 -21
- package/dist/{label-BQEZhnK_.js → label-CE03H1KL.js} +2 -2
- package/dist/label.js +1 -1
- package/dist/labeled-field.js +9 -6
- package/dist/{menu-wLu1XGKn.js → menu-BnmCOa3y.js} +93 -90
- package/dist/menu.js +2 -2
- package/dist/metric.js +12 -7
- package/dist/{motion-D4uYE0UM.js → motion-BvV1_24p.js} +1 -1
- package/dist/motion-core.js +35 -35
- package/dist/{number-field-NFAwQ0HK.js → number-field-RP89046a.js} +2 -2
- package/dist/number-field.js +1 -1
- package/dist/pager-dots.js +3 -3
- package/dist/{participation-B0hdsIRo.js → participation-Di4UHbzk.js} +8 -8
- package/dist/{pointerFieldMappings-DP5tla5z.js → pointerFieldMappings-DXwlU5uj.js} +7 -23
- package/dist/popover-DA87hFBx.js +184 -0
- package/dist/popover.js +1 -1
- package/dist/{progress-DF8dWZIX.js → progress-eVa-mc7J.js} +1 -1
- package/dist/progress.js +1 -1
- package/dist/{radio-group-Ci8o-pDx.js → radio-group-B58Bz16F.js} +2 -2
- package/dist/radio-group.js +1 -1
- package/dist/{select-CDgwGH_P.js → select-fy3vtArm.js} +13 -13
- package/dist/select.js +1 -1
- package/dist/{separator-CN11t406.js → separator-D4EZM10u.js} +2 -2
- package/dist/separator.js +1 -1
- package/dist/{sheet-BEFvnO_u.js → sheet-BQJyER59.js} +120 -115
- package/dist/sheet.js +2 -2
- package/dist/shortcuts-DGGWNRNe.js +13 -0
- package/dist/sidebar.js +4 -4
- package/dist/{slider-gsc8jDIo.js → slider-5ChjjWSR.js} +1 -1
- package/dist/slider.js +1 -1
- package/dist/{status-dot-BpnqOP5N.js → status-dot-W4LFiJps.js} +2 -2
- package/dist/status-dot.js +1 -1
- package/dist/styles/accessibility.css +1 -1
- package/dist/styles/animations.css +1 -1
- package/dist/styles/components.css +1 -1
- package/dist/styles/glass/a11y-fallback.css +1 -1
- package/dist/styles/glass/dissolve.css +1 -1
- package/dist/styles/glass/focus-veil.css +1 -1
- package/dist/styles/glass/ladder.css +1 -1
- package/dist/styles/glass/material.css +1 -1
- package/dist/styles/glass/overlay-plate.css +1 -1
- package/dist/styles/glass/reveal.css +1 -1
- package/dist/styles/glass-specular-track.css +1 -1
- package/dist/styles/paper.css +1 -1
- package/dist/styles/scroll-choreography.css +1 -1
- package/dist/styles/scroll-chrome.css +1 -1
- package/dist/styles/scroll-driven.css +1 -1
- package/dist/styles/theme/literals.css +1 -1
- package/dist/styles/tokens/color-radius.css +1 -1
- package/dist/styles/tokens/dark-arm-glass.css +1 -1
- package/dist/styles/tokens/light-dark.css +1 -1
- package/dist/styles/tokens/offsets.css +1 -1
- package/dist/styles/tokens/scheme-motion.css +1 -1
- package/dist/styles/tokens/sizing.css +1 -1
- package/dist/styles/typography/semantic.css +1 -1
- package/dist/styles/typography/utilities.css +1 -1
- package/dist/styles/utilities/a11y-overrides.css +1 -1
- package/dist/styles/utilities/responsive.css +1 -1
- package/dist/styles/view-transition.css +1 -1
- package/dist/styles/viz-reveal.css +1 -1
- package/dist/surface.js +1 -1
- package/dist/{switch-DxZzDrmV.js → switch-BYUZ6g9G.js} +2 -2
- package/dist/switch.js +1 -1
- package/dist/{tabs-CYscnq5H.js → tabs-rdRXKXxd.js} +4 -3
- package/dist/tabs.js +1 -1
- package/dist/textarea.js +1 -1
- package/dist/timeline.js +44 -42
- package/dist/{toast-9c6Kp58L.js → toast-DVOwo6GB.js} +1 -1
- package/dist/toast.js +1 -1
- package/dist/{toggle-group-11aPGMfE.js → toggle-group-CC5b3o1R.js} +2 -2
- package/dist/toggle-group.js +1 -1
- package/dist/{tooltip-DqKMZ4dn.js → tooltip-DhTHhtJN.js} +2 -2
- package/dist/tooltip.js +1 -1
- package/dist/typewriter.js +1 -1
- package/dist/{useAccentTone-DFAh1osB.js → useAccentTone-DitmKfGL.js} +1 -1
- package/dist/{resolveCanvasColor-6MCrswTB.js → useCanvas2D-CQRElMyE.js} +1 -11
- package/dist/{usePointerVelocityField-DsIf7yyq.js → usePointerVelocityField-Lx26_Yap.js} +1 -1
- package/dist/useResolveTokenColor-B2FfJnd9.js +24 -0
- package/package.json +5 -21
- package/dist/DialogContent-4hzLiaCQ.js +0 -152
- package/dist/canvas.d.ts +0 -1
- package/dist/canvas.js +0 -2
- package/dist/color.wgsl-B0N3mKMb.js +0 -412
- package/dist/compile-D7VYG3gi.js +0 -19
- package/dist/components/dock/composables/useDockOverflowFit.d.ts +0 -20
- package/dist/components/dock/composables/useDockTouchGate.d.ts +0 -42
- package/dist/components/dock/styles/overflow.css +0 -1
- package/dist/components/fourier-field/composables/fourierFieldGLSetup.d.ts +0 -24
- package/dist/components/fourier-field/composables/fourierFieldWGPUSetup.d.ts +0 -31
- package/dist/components/fourier-field/composables/uniformBridgeWGPU.d.ts +0 -39
- package/dist/components/fourier-field/composables/useFourierField.d.ts +0 -56
- package/dist/components/fourier-field/shaders/fourier-field.compute.wgsl.d.ts +0 -1
- package/dist/components/fourier-field/shaders/fourier-field.glsl.d.ts +0 -4
- package/dist/components/fourier-field/shaders/fourier-field.render.wgsl.d.ts +0 -1
- package/dist/components/fourier-field/shaders/fourier-field.ribbon.d.ts +0 -51
- package/dist/components/handmark/brush.d.ts +0 -269
- package/dist/components/handmark/composables/useHandMark.d.ts +0 -99
- package/dist/components/handmark/constants.d.ts +0 -69
- package/dist/components/handmark/freehand.d.ts +0 -69
- package/dist/components/handmark/geometry.d.ts +0 -62
- package/dist/components/handmark/ink.d.ts +0 -11
- package/dist/components/handmark/noise.d.ts +0 -30
- package/dist/components/handmark/texture.d.ts +0 -39
- package/dist/components/handmark/types.d.ts +0 -70
- package/dist/components/search/SearchBar.vue.d.ts +0 -38
- package/dist/components/search/index.d.ts +0 -8
- package/dist/components/search/searchVariants.d.ts +0 -16
- package/dist/configurator-BoeScnDL.js +0 -311
- package/dist/control-Da4XeT43.js +0 -11
- package/dist/popover-DBMKTPkL.js +0 -181
- package/dist/search.d.ts +0 -1
- package/dist/search.js +0 -61
- package/dist/useFuzzySearch-CUnZknpm.js +0 -177
- package/dist/useResolveTokenColor-CspQv_ik.js +0 -107
- /package/dist/{components/search/composables → composables/search}/types.d.ts +0 -0
- /package/dist/{components/search/composables → composables/search}/useFuzzySearch.d.ts +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export { default as SegmentedTabs } from "./SegmentedTabs.vue.js";
|
|
2
|
-
export type { SegmentedTabOption, SegmentedTabsVariant, SegmentedTabsSemantics, SegmentedTabsActivation, SegmentedTabsOrientation, SegmentedTabsProps, SegmentedTabsResponsive, } from "./
|
|
2
|
+
export type { SegmentedTabOption, SegmentedTabsVariant, SegmentedTabsSemantics, SegmentedTabsActivation, SegmentedTabsOrientation, SegmentedTabsProps, SegmentedTabsResponsive, } from "./types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.glass-drag-grabbable{cursor: grab;touch-action: none;}.glass-drag-lift{cursor: grabbing;will-change: transform;}.segmented-tabs:has(.segmented-indicator.glass-drag-grabbable) .segmented-tab[data-active]{pointer-events: none;}.segmented-indicator.glass-drag-lift{z-index: 30;}
|
|
1
|
+
@layer components{.glass-drag-grabbable{cursor: grab;touch-action: none;}.glass-drag-lift{cursor: grabbing;will-change: transform;}.segmented-tabs:has(.segmented-indicator.glass-drag-grabbable) .segmented-tab[data-active]{pointer-events: none;}.segmented-indicator.glass-drag-lift{z-index: 30;}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.segmented-tabs{--bouncy-track-trim: 0.1875rem;--bouncy-slider-radius: var(--radius-tab);--bouncy-track-radius: calc(var(--bouncy-slider-radius) + var(--bouncy-track-trim));--stretch: 1;position: relative;display: inline-grid;grid-auto-flow: column;grid-auto-columns: 1fr;padding: var(--bouncy-track-trim);border-radius: var(--bouncy-track-radius);overflow: visible;}.segmented-tabs--vertical{display: inline-flex;flex-direction: column;grid-auto-flow: unset;grid-auto-columns: unset;align-items: stretch;--bouncy-slider-radius: var(--radius-strip);--radius-ctx: var(--bouncy-track-radius);--radius-inset: var(--bouncy-track-trim);}.segmented-tabs--vertical .segmented-indicator{border-radius: max( var(--radius-floor),calc(var(--radius-ctx) - var(--radius-inset)) );}@media (min-width: 640px){.segmented-tabs{--bouncy-track-trim: 0.25rem;}}.segmented-indicator{position: absolute;z-index: 0;border-radius: var(--bouncy-slider-radius);transform-origin: var(--eyeglass-origin,50%) center;scale: var(--eyeglass-span,var(--stretch)) var(--eyeglass-swell,1);}.segmented-tabs--vertical .segmented-indicator{transform-origin: center var(--eyeglass-origin,50%);scale: var(--eyeglass-swell,1) var(--eyeglass-span,var(--stretch));}.segmented-tabs--underline .segmented-indicator{background: none;border-radius: 0;border-block-end: var(--paper-ink-mark-weight) solid var(--paper-ink-mark-color);scale: var(--stretch) 1;}.segmented-tabs--underline.segmented-tabs--vertical .segmented-indicator{border-block-end: none;border-inline-start: var(--paper-ink-mark-weight) solid var(--paper-ink-mark-color);scale: 1 var(--stretch);}.segmented-tabs:not(.segmented-tabs--underline){--eyeglass-span-max: 1.6;--eyeglass-cascade-annotation: 100ms;--eyeglass-light-clock: var(--engage-control-engage-release);transition: background var(--eyeglass-light-clock) var(--ease-standard);}.segmented-tabs:not(.segmented-tabs--underline) .segmented-indicator{box-shadow: var(--glass-rim-top),var(--glass-rim-bottom),inset 0 1px 2px var(--tab-track-recess-ink);}.segmented-tabs[data-eyeglass-wake]:not(.segmented-tabs--underline){--eyeglass-light-clock: var(--engage-control-engage-attack);background: color-mix( in oklab,var(--glass-plate-quiet),var(--glass-capsule-warm) var(--glass-capsule-warm-floor) );}.segmented-tabs[data-eyeglass-wake]:not(.segmented-tabs--underline) .segmented-indicator{box-shadow: var(--glass-rim-top),var(--glass-rim-bottom),var(--glass-shadow-capsule);}.segmented-indicator[data-eyeglass-clamped]{--eyeglass-swell: 1.22;}@media (prefers-reduced-motion: no-preference){.segmented-indicator--js{transition: translate var(--tab-indicator-duration) var(--spring-dock),width var(--tab-indicator-duration) var(--spring-dock),height var(--tab-indicator-duration) var(--spring-dock),scale var(--tab-indicator-duration) var(--ease-cartoon-punch),box-shadow var(--eyeglass-light-clock,var(--duration-fast)) var(--ease-standard),opacity var(--duration-fast) ease;}}.segmented-tab{position: relative;z-index: 10;border: none;background: none;font-weight: 500;cursor: pointer;white-space: nowrap;padding: 0.25rem 0.625rem;border-radius: var(--bouncy-slider-radius);font: inherit;font-size: var(--type-caption);color: color-mix(in oklab,var(--muted-foreground),var(--glass-capsule-warm) 12%);transition: color var(--duration-fast) ease;scale: 1;translate: 0;}@media (min-width: 640px){.segmented-tab{padding: 0.3125rem 0.75rem;font-size: var(--type-small);}}.segmented-tab[data-active]{color: var(--foreground);transition-delay: var(--eyeglass-cascade-annotation,0s);}.segmented-tab.is-disabled{opacity: 0.4;cursor: not-allowed;pointer-events: none;filter: blur(0.5px);}.segmented-tabs--underline{display: flex;grid-auto-flow: unset;grid-auto-columns: unset;gap: 0.25rem;padding: 0;background: none;-webkit-backdrop-filter: none;backdrop-filter: none;box-shadow: none;border-radius: 0;border-block-end: 1px solid var(--border);}.segmented-tabs--underline.segmented-tabs--vertical{flex-direction: column;align-items: stretch;border-block-end: none;border-inline-start: 1px solid var(--border);}.segmented-tabs--underline .segmented-tab{padding: 0.375rem 0.75rem;font-size: var(--type-subheading);letter-spacing: var(--type-tracking-display);border-radius: var(--bouncy-slider-radius);transition: color var(--duration-fast) ease;}.segmented-tabs--underline.segmented-tabs--vertical .segmented-tab{text-align: start;}.segmented-tabs--underline .segmented-tab:hover{color: color-mix(in oklab,var(--foreground) 70%,transparent);}
|
|
1
|
+
@layer components{.segmented-tabs{--bouncy-track-trim: 0.1875rem;--bouncy-slider-radius: var(--radius-tab);--bouncy-track-radius: calc(var(--bouncy-slider-radius) + var(--bouncy-track-trim));--stretch: 1;position: relative;display: inline-grid;grid-auto-flow: column;grid-auto-columns: 1fr;padding: var(--bouncy-track-trim);border-radius: var(--bouncy-track-radius);overflow: visible;}.segmented-tabs--vertical{display: inline-flex;flex-direction: column;grid-auto-flow: unset;grid-auto-columns: unset;align-items: stretch;--bouncy-slider-radius: var(--radius-strip);--radius-ctx: var(--bouncy-track-radius);--radius-inset: var(--bouncy-track-trim);}.segmented-tabs--vertical .segmented-indicator{border-radius: max( var(--radius-floor),calc(var(--radius-ctx) - var(--radius-inset)) );}@media (min-width: 640px){.segmented-tabs{--bouncy-track-trim: 0.25rem;}}.segmented-indicator{position: absolute;z-index: 0;border-radius: var(--bouncy-slider-radius);transform-origin: var(--eyeglass-origin,50%) center;scale: var(--eyeglass-span,var(--stretch)) var(--eyeglass-swell,1);}.segmented-tabs--vertical .segmented-indicator{transform-origin: center var(--eyeglass-origin,50%);scale: var(--eyeglass-swell,1) var(--eyeglass-span,var(--stretch));}.segmented-tabs--underline .segmented-indicator{background: none;border-radius: 0;border-block-end: var(--paper-ink-mark-weight) solid var(--paper-ink-mark-color);scale: var(--stretch) 1;}.segmented-tabs--underline.segmented-tabs--vertical .segmented-indicator{border-block-end: none;border-inline-start: var(--paper-ink-mark-weight) solid var(--paper-ink-mark-color);scale: 1 var(--stretch);}.segmented-tabs:not(.segmented-tabs--underline){--eyeglass-span-max: 1.6;--eyeglass-cascade-annotation: 100ms;--eyeglass-light-clock: var(--engage-control-engage-release);transition: background var(--eyeglass-light-clock) var(--ease-standard);}.segmented-tabs:not(.segmented-tabs--underline) .segmented-indicator{box-shadow: var(--glass-rim-top),var(--glass-rim-bottom),inset 0 1px 2px var(--tab-track-recess-ink);}.segmented-tabs[data-eyeglass-wake]:not(.segmented-tabs--underline){--eyeglass-light-clock: var(--engage-control-engage-attack);background: color-mix( in oklab,var(--glass-plate-quiet),var(--glass-capsule-warm) var(--glass-capsule-warm-floor) );}.segmented-tabs[data-eyeglass-wake]:not(.segmented-tabs--underline) .segmented-indicator{box-shadow: var(--glass-rim-top),var(--glass-rim-bottom),var(--glass-shadow-capsule);}.segmented-indicator[data-eyeglass-clamped]{--eyeglass-swell: 1.22;}@media (prefers-reduced-motion: no-preference){.segmented-indicator--js{transition: translate var(--tab-indicator-duration) var(--spring-dock),width var(--tab-indicator-duration) var(--spring-dock),height var(--tab-indicator-duration) var(--spring-dock),scale var(--tab-indicator-duration) var(--ease-cartoon-punch),box-shadow var(--eyeglass-light-clock,var(--duration-fast)) var(--ease-standard),opacity var(--duration-fast) ease;}}.segmented-tab{position: relative;z-index: 10;border: none;background: none;font-weight: 500;cursor: pointer;white-space: nowrap;padding: 0.25rem 0.625rem;border-radius: var(--bouncy-slider-radius);font: inherit;font-size: var(--type-caption);color: color-mix(in oklab,var(--muted-foreground),var(--glass-capsule-warm) 12%);transition: color var(--duration-fast) ease;scale: 1;translate: 0;}@media (min-width: 640px){.segmented-tab{padding: 0.3125rem 0.75rem;font-size: var(--type-small);}}.segmented-tab[data-active]{color: var(--foreground);transition-delay: var(--eyeglass-cascade-annotation,0s);}.segmented-tab.is-disabled{opacity: 0.4;cursor: not-allowed;pointer-events: none;filter: blur(0.5px);}.segmented-tabs--underline{display: flex;grid-auto-flow: unset;grid-auto-columns: unset;gap: 0.25rem;padding: 0;background: none;-webkit-backdrop-filter: none;backdrop-filter: none;box-shadow: none;border-radius: 0;border-block-end: 1px solid var(--border);}.segmented-tabs--underline.segmented-tabs--vertical{flex-direction: column;align-items: stretch;border-block-end: none;border-inline-start: 1px solid var(--border);}.segmented-tabs--underline .segmented-tab{padding: 0.375rem 0.75rem;font-size: var(--type-subheading);letter-spacing: var(--type-tracking-display);border-radius: var(--bouncy-slider-radius);transition: color var(--duration-fast) ease;}.segmented-tabs--underline.segmented-tabs--vertical .segmented-tab{text-align: start;}.segmented-tabs--underline .segmented-tab:not([data-active]){color: var(--muted-foreground);}.segmented-tabs--underline .segmented-tab:hover{color: color-mix(in oklab,var(--foreground) 70%,transparent);}}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { HTMLAttributes } from "vue";
|
|
2
|
+
import type { Motion } from "../_shared/axes.js";
|
|
3
|
+
import type { TabActivation } from "./composables/useTabRovingFocus.js";
|
|
4
|
+
/** The canonical tab/option shape — one descriptor across both materials. */
|
|
5
|
+
export interface SegmentedTabOption<V extends string = string> {
|
|
6
|
+
label: string;
|
|
7
|
+
value: V;
|
|
8
|
+
icon?: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* The `id` of the tabpanel this option reveals. When set and semantics resolve to
|
|
12
|
+
* `tabs`, it is emitted as the tab's `aria-controls`, completing the APG
|
|
13
|
+
* tablist↔tabpanel linkage for consumers that own a panel. Ignored in `toggle`
|
|
14
|
+
* semantics (a toggle group mutates a shared surface, not a distinct panel).
|
|
15
|
+
*/
|
|
16
|
+
controls?: string;
|
|
17
|
+
}
|
|
18
|
+
/** The two materials: `pill` is the default glass eyeglass; `underline` is the paper ink hairline. */
|
|
19
|
+
export type SegmentedTabsVariant = "pill" | "underline";
|
|
20
|
+
/** The interaction semantic, independent of material. `toggle` exposes a
|
|
21
|
+
* group of pressed buttons; `tabs` exposes a tablist with selected tabs. */
|
|
22
|
+
export type SegmentedTabsSemantics = "toggle" | "tabs";
|
|
23
|
+
/** Whether focus movement also selects. Manual activation waits for Enter/Space. */
|
|
24
|
+
export type SegmentedTabsActivation = TabActivation;
|
|
25
|
+
/** The orientation axis — `horizontal` (default) lays children in a row + tracks
|
|
26
|
+
* the indicator on the inline axis; `vertical` stacks a column + tracks the
|
|
27
|
+
* block axis (the vertical underline is the leading-edge ink rail). */
|
|
28
|
+
export type SegmentedTabsOrientation = "horizontal" | "vertical";
|
|
29
|
+
export interface SegmentedTabsResponsive<V extends string = string> {
|
|
30
|
+
/**
|
|
31
|
+
* CSS length consumed inside `(min-width: <breakpoint>)`. BELOW it the
|
|
32
|
+
* strip collapses to a `<Select>`; at/above it renders the tab strip.
|
|
33
|
+
* Defaults to `"640px"` (Tailwind `sm:`).
|
|
34
|
+
*/
|
|
35
|
+
breakpoint?: string;
|
|
36
|
+
/**
|
|
37
|
+
* Optional subset shown in the desktop strip (the mobile Select keeps the
|
|
38
|
+
* full option list). Falls back to `options`.
|
|
39
|
+
*/
|
|
40
|
+
desktopOptions?: SegmentedTabOption<V>[] | null;
|
|
41
|
+
/** Accessible name for the mobile `<SelectTrigger>`. */
|
|
42
|
+
ariaLabel?: string;
|
|
43
|
+
/** Class merged onto the mobile `<SelectTrigger>` only. */
|
|
44
|
+
triggerClass?: HTMLAttributes["class"];
|
|
45
|
+
}
|
|
46
|
+
export interface SegmentedTabsProps<V extends string = string> {
|
|
47
|
+
options: SegmentedTabOption<V>[];
|
|
48
|
+
/** Accessible name shared by the desktop strip and responsive Select. */
|
|
49
|
+
ariaLabel?: string;
|
|
50
|
+
/**
|
|
51
|
+
* The material — `pill` (DEFAULT, the glass eyeglass) or `underline` (the paper
|
|
52
|
+
* ink-hairline rule). TWO, and the eyeglass is not a third: it is what `pill`
|
|
53
|
+
* IS. A "million variants that are essentially the same thing" is the failure
|
|
54
|
+
* mode this axis exists to refuse.
|
|
55
|
+
*/
|
|
56
|
+
variant?: SegmentedTabsVariant;
|
|
57
|
+
/**
|
|
58
|
+
* Interaction semantics, independent of `variant`. When omitted, preserves the
|
|
59
|
+
* historical mapping: `pill` → `toggle`, `underline` → `tabs`.
|
|
60
|
+
*/
|
|
61
|
+
semantics?: SegmentedTabsSemantics;
|
|
62
|
+
/** Selection follows focus by default; manual mode activates with Enter/Space. */
|
|
63
|
+
activation?: SegmentedTabsActivation;
|
|
64
|
+
/**
|
|
65
|
+
* Orientation — `horizontal` (default) or `vertical`. Axis-derived on the
|
|
66
|
+
* one indicator engine.
|
|
67
|
+
*/
|
|
68
|
+
orientation?: SegmentedTabsOrientation;
|
|
69
|
+
/**
|
|
70
|
+
* Responsive collapse — below the breakpoint the strip becomes a `<Select>`.
|
|
71
|
+
* `true` uses defaults; an object tunes the breakpoint, desktop subset, and
|
|
72
|
+
* accessible name.
|
|
73
|
+
*/
|
|
74
|
+
responsive?: boolean | SegmentedTabsResponsive<V>;
|
|
75
|
+
/**
|
|
76
|
+
* Motion weight. `full` (default) lets the pill indicator follow a pointer,
|
|
77
|
+
* squash with drag velocity, and settle to the nearest tab. Drag supplements the
|
|
78
|
+
* fully operable click and keyboard path; it is never the sole selection method.
|
|
79
|
+
* `reduced` and `off` use the click-only strip while preserving roving focus.
|
|
80
|
+
* Underline has no deformable indicator. Reduced-motion preference forces
|
|
81
|
+
* `full → reduced`.
|
|
82
|
+
*/
|
|
83
|
+
motion?: Motion;
|
|
84
|
+
class?: HTMLAttributes["class"];
|
|
85
|
+
}
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
export { default as Timeline } from "./Timeline.vue.js";
|
|
2
2
|
export type { TimelineProps, TimelineSegment, TimelineSegmentState, } from "./types.js";
|
|
3
|
+
export { accentFor, HUE_OFFSET, HUE_STRIDE, HUE_STOPS } from "./geometry.js";
|
|
4
|
+
export type { TimelineSpan } from "./geometry.js";
|
|
@@ -35,18 +35,18 @@ type __VLS_Slots = {} & {
|
|
|
35
35
|
};
|
|
36
36
|
declare const __VLS_base: import("vue").DefineComponent<ToastProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
37
37
|
pause: () => any;
|
|
38
|
+
resume: () => any;
|
|
38
39
|
"update:open": (value: boolean) => any;
|
|
39
40
|
escapeKeyDown: (event: KeyboardEvent) => any;
|
|
40
|
-
resume: () => any;
|
|
41
41
|
swipeStart: (event: ToastSwipeEvent) => any;
|
|
42
42
|
swipeMove: (event: ToastSwipeEvent) => any;
|
|
43
43
|
swipeCancel: (event: ToastSwipeEvent) => any;
|
|
44
44
|
swipeEnd: (event: ToastSwipeEvent) => any;
|
|
45
45
|
}, string, import("vue").PublicProps, Readonly<ToastProps> & Readonly<{
|
|
46
46
|
onPause?: (() => any) | undefined;
|
|
47
|
+
onResume?: (() => any) | undefined;
|
|
47
48
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
48
49
|
onEscapeKeyDown?: ((event: KeyboardEvent) => any) | undefined;
|
|
49
|
-
onResume?: (() => any) | undefined;
|
|
50
50
|
onSwipeStart?: ((event: ToastSwipeEvent) => any) | undefined;
|
|
51
51
|
onSwipeMove?: ((event: ToastSwipeEvent) => any) | undefined;
|
|
52
52
|
onSwipeCancel?: ((event: ToastSwipeEvent) => any) | undefined;
|
|
@@ -4,15 +4,6 @@ export interface OklchStop {
|
|
|
4
4
|
C: number;
|
|
5
5
|
h: number;
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
8
|
-
* A color seam: resolves a CSS color string to a GAMMA-sRGB triple in [0,1].
|
|
9
|
-
* `defaultBlobColorResolver` is the default. A general-purpose injection type for
|
|
10
|
-
* consumers that theme a substrate through an external color pipeline — the
|
|
11
|
-
* `<FourierField>` ambient background takes it as an optional `colorResolver` prop
|
|
12
|
-
* (paired with the `color` token seam). The goo-blob resolves color internally through
|
|
13
|
-
* `cssToOklch → oklchToGammaRgb` without dependency injection.
|
|
14
|
-
*/
|
|
15
|
-
export type ColorResolver = (css: string) => [number, number, number];
|
|
16
7
|
/**
|
|
17
8
|
* OKLCh stop → LINEAR-sRGB in [0,1] — aurora's bundle-canonical bake target (the
|
|
18
9
|
* shader ACES-tonemaps in linear, so the LUT stays linear).
|
|
@@ -61,12 +52,6 @@ export declare function oklchToGammaRgb(stop: OklchStop): [number, number, numbe
|
|
|
61
52
|
export declare function cssToOklch(css: string): OklchStop;
|
|
62
53
|
/** OKLCh stop → `#rrggbb` gamma hex through value.js `toRgba8`. */
|
|
63
54
|
export declare function oklchStopToHex(s: OklchStop): string;
|
|
64
|
-
/**
|
|
65
|
-
* Default `ColorResolver`: `(css) => gamma [r,g,b]` through
|
|
66
|
-
* `cssToOklch → oklchToGammaRgb`. `<FourierField>` can pass it as its
|
|
67
|
-
* `colorResolver`; Blob uses the same body internally without a DI seam.
|
|
68
|
-
*/
|
|
69
|
-
export declare const defaultBlobColorResolver: ColorResolver;
|
|
70
55
|
/**
|
|
71
56
|
* Harmony schemes for the OKLCh palette derivers. Each maps the seed hue onto the
|
|
72
57
|
* derived stops differently:
|
|
@@ -8,6 +8,48 @@ export interface DarkModeSyncScriptOptions {
|
|
|
8
8
|
* uses. Override ONLY if a consumer reconfigured the vueuse storage key.
|
|
9
9
|
*/
|
|
10
10
|
storageKey?: string;
|
|
11
|
+
/**
|
|
12
|
+
* What an ABSENT or `"auto"` stored mode resolves to. `"os"` (the default)
|
|
13
|
+
* follows `prefers-color-scheme`, which is right for an app. `false`/`true`
|
|
14
|
+
* resolve DETERMINISTICALLY, which is right for a document that must not flip
|
|
15
|
+
* with the projector's OS theme — a briefing, a print target, a capture.
|
|
16
|
+
*
|
|
17
|
+
* The scalar forms answer BOTH cases at once. The object form answers them
|
|
18
|
+
* SEPARATELY, which is the only way to say "a first visit is a deliberate
|
|
19
|
+
* light document, but a reader who chose `auto` gets their platform":
|
|
20
|
+
*
|
|
21
|
+
* ```ts
|
|
22
|
+
* darkModeSyncScript({ defaultDark: { absent: false, auto: "os" } });
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* No scalar reproduces that pair — `false` makes `auto` mean light and `"os"`
|
|
26
|
+
* makes a first visit follow the OS — which is why a consumer with the split
|
|
27
|
+
* policy hand-rolls the whole `<head>` block instead of calling this.
|
|
28
|
+
*
|
|
29
|
+
* [2026-09-22 · register-wave N-3 — an UNREADABLE store (a throwing
|
|
30
|
+
* `localStorage` accessor or `getItem`) counts as ABSENT: the scalar forms
|
|
31
|
+
* fall to their one arm, the object form to `absent`.]
|
|
32
|
+
*/
|
|
33
|
+
defaultDark?: boolean | "os" | {
|
|
34
|
+
absent: boolean | "os";
|
|
35
|
+
auto: boolean | "os";
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Honour `?light` / `?dark` in the query string, above storage and above the
|
|
39
|
+
* default. This is the capture-forcing seam: a screenshot pipeline asks for a
|
|
40
|
+
* mode in the URL rather than driving a toggle and hoping.
|
|
41
|
+
*/
|
|
42
|
+
queryOverride?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Write the RESOLVED mode back to storage, so an absent or `"auto"` value
|
|
45
|
+
* becomes a concrete `"dark"`/`"light"` at first paint and the runtime
|
|
46
|
+
* composable and the stamp cannot disagree about what `auto` meant.
|
|
47
|
+
*
|
|
48
|
+
* The write is emitted AFTER the stamp, so a storage that throws on write
|
|
49
|
+
* (quota, privacy mode, a sandboxed origin) costs the write-back and nothing
|
|
50
|
+
* else — the page is already themed when it fails.
|
|
51
|
+
*/
|
|
52
|
+
normalize?: boolean;
|
|
11
53
|
}
|
|
12
54
|
/**
|
|
13
55
|
* Return the inline `<head>` script STRING that resolves dark/light at parse
|
|
@@ -14,7 +14,7 @@ export interface ResolveTokenColorCache {
|
|
|
14
14
|
*
|
|
15
15
|
* @param css the color string (a `var(--token)` wrapper or a literal)
|
|
16
16
|
* @param el the element to resolve the cascade against (the host wrapper)
|
|
17
|
-
* @returns the concrete color string
|
|
17
|
+
* @returns the concrete color string a `(css) => rgb` resolver can parse
|
|
18
18
|
*/
|
|
19
19
|
export declare function resolveTokenColor(css: string, el: HTMLElement | null): string;
|
|
20
20
|
/**
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { useSpecularTracking, createSpecularWriter, } from "./useSpecularTracking.js";
|
|
2
2
|
export type { UseSpecularTracking, SpecularWriter, } from "./useSpecularTracking.js";
|
|
3
3
|
export { vSpecular } from "./vSpecular.js";
|
|
4
|
+
export type { RendererStatus } from "./webgpu/rendererStatus.js";
|
|
5
|
+
export type { GpuBackend } from "./webgpu/useGpuSubstrate.js";
|
|
4
6
|
export { useCanvas2D, resolveCanvasColor } from "./canvas2d/index.js";
|
|
5
7
|
export type { Canvas2DFrame, Canvas2DHandle, Canvas2DOptions, Canvas2DSuspendReason, } from "./canvas2d/index.js";
|
|
@@ -18,6 +18,17 @@ export interface RegisteredShortcut {
|
|
|
18
18
|
handler: (e: KeyboardEvent) => void;
|
|
19
19
|
options: ShortcutOptions;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* A registration the help UI can render: the element type of
|
|
23
|
+
* `useRegisteredShortcuts()`, which filters on the label the registrar supplied.
|
|
24
|
+
* Type-only narrowing — `options.label` is the field the runtime guarantees, so
|
|
25
|
+
* that is the field the type promises.
|
|
26
|
+
*/
|
|
27
|
+
export interface LabeledShortcut extends RegisteredShortcut {
|
|
28
|
+
options: ShortcutOptions & {
|
|
29
|
+
label: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
21
32
|
export interface ShortcutCombo {
|
|
22
33
|
key: string;
|
|
23
34
|
ctrl: boolean;
|
|
@@ -29,5 +40,40 @@ export interface ShortcutCombo {
|
|
|
29
40
|
export declare const isMac: boolean;
|
|
30
41
|
export declare function formatComboParts(raw: string): string[];
|
|
31
42
|
export declare function formatCombo(raw: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* The spoken form of a combo, for an `aria-label` beside the `<kbd>` glyphs.
|
|
45
|
+
* `"mod+shift+z"` → "Control Shift Z" (or "Command Shift Z" on a Mac);
|
|
46
|
+
* `"delete"` → "Delete or Backspace".
|
|
47
|
+
*/
|
|
48
|
+
export declare function formatComboLabel(raw: string): string;
|
|
32
49
|
export declare function registerShortcut(combo: string, handler: (e: KeyboardEvent) => void, options?: ShortcutOptions): () => void;
|
|
33
|
-
|
|
50
|
+
/**
|
|
51
|
+
* Quiet every shortcut registered SO FAR for non-Escape keys, and return the
|
|
52
|
+
* release. A modal owns the keyboard while it is open: the nineteen app-level
|
|
53
|
+
* accelerators behind it must not fire, and nothing but the modal's own bindings
|
|
54
|
+
* should answer a keystroke aimed at it.
|
|
55
|
+
*
|
|
56
|
+
* ORDERING — call this BEFORE the modal registers its own bindings. The barrier is
|
|
57
|
+
* `seq > topBarrier`, so anything registered after the call is still live and
|
|
58
|
+
* anything registered before is not; suspending afterwards would silence the modal
|
|
59
|
+
* along with the app. The in-house overlays wire it in that order.
|
|
60
|
+
*
|
|
61
|
+
* Content that stays mounted across a close (`force-mount`, `unmount-on-hide="false"`,
|
|
62
|
+
* a reopen inside the exit spring) keeps the registration seq it took at mount and
|
|
63
|
+
* so falls BELOW the next barrier. Register on open and release on close, as the
|
|
64
|
+
* in-house overlays do — ExpandableContainer registers its Escape inside its open
|
|
65
|
+
* watch, not at mount.
|
|
66
|
+
*
|
|
67
|
+
* Escape is exempt by design and keeps its reversed LIFO walk, so the top-most
|
|
68
|
+
* overlay is always dismissable. Within a layer the forward first-registered-wins
|
|
69
|
+
* order is untouched, so a late registrant cannot shadow a destructive binding.
|
|
70
|
+
*
|
|
71
|
+
* `useRegisteredShortcuts()` is NOT barrier-filtered, deliberately: it is the
|
|
72
|
+
* reference list of what the app answers to, not a live capability probe. A help
|
|
73
|
+
* overlay is itself a modal, and filtering would hand it an empty list.
|
|
74
|
+
*
|
|
75
|
+
* The returned release is idempotent and order-free — it splices out its own
|
|
76
|
+
* barrier by identity, so nested suspensions can resume in any order.
|
|
77
|
+
*/
|
|
78
|
+
export declare function suspendShortcuts(): () => void;
|
|
79
|
+
export declare function useRegisteredShortcuts(): ComputedRef<LabeledShortcut[]>;
|
|
@@ -20,47 +20,6 @@ export interface PointerFieldSnapshot {
|
|
|
20
20
|
/** The smoothed active-engagement envelope (0..1). */
|
|
21
21
|
engagement: number;
|
|
22
22
|
}
|
|
23
|
-
/** The default bias gain — the curve advances at most ±BIAS_GAIN faster/slower (≤0.15). */
|
|
24
|
-
export declare const FOURIER_BIAS_GAIN = 0.15;
|
|
25
|
-
/** The default centroid-lean fraction (the subtle lean). */
|
|
26
|
-
export declare const FOURIER_FOLLOW_LEAN = 0.15;
|
|
27
|
-
export interface FourierLeanGeometry {
|
|
28
|
-
/** The canvas backing aspect (w/h) — the model→clip fit inverse. */
|
|
29
|
-
aspect: number;
|
|
30
|
-
/** The fit scale (`model = center + clip·aspect / scale`). */
|
|
31
|
-
scale: number;
|
|
32
|
-
/**
|
|
33
|
-
* The head→cursor direction in CLIP space (the renderer computes it from the head
|
|
34
|
-
* model position + the cursor clip position). Its dot with the head's travel tangent
|
|
35
|
-
* is the draw-bias alignment. Omit (or zero) → no draw-bias (phaseRateMul = 1).
|
|
36
|
-
*/
|
|
37
|
-
headToCursor?: PointerVec2;
|
|
38
|
-
/** The head's travel TANGENT (clip space), for the draw-bias alignment. Omit → no bias. */
|
|
39
|
-
headTangent?: PointerVec2;
|
|
40
|
-
}
|
|
41
|
-
export interface FourierLeanOptions {
|
|
42
|
-
/** The centroid-lean fraction (default {@link FOURIER_FOLLOW_LEAN}). */
|
|
43
|
-
lean?: number;
|
|
44
|
-
/** The draw-bias gain (default {@link FOURIER_BIAS_GAIN}; clamped ≤0.15). */
|
|
45
|
-
biasGain?: number;
|
|
46
|
-
}
|
|
47
|
-
export interface FourierLeanResult {
|
|
48
|
-
/** The MODEL-space centroid lean the setups subtract from `fit.center`. */
|
|
49
|
-
leanX: number;
|
|
50
|
-
leanY: number;
|
|
51
|
-
/**
|
|
52
|
-
* The clock phase-rate multiplier (1 = neutral). >1 draws toward the cursor a hair
|
|
53
|
-
* faster; <1 a hair slower. Bounded [1-biasGain, 1+biasGain].
|
|
54
|
-
*/
|
|
55
|
-
phaseRateMul: number;
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* The fourier draw-bias + subtle-lean mapping (PURE). The lean uses the SAME [0,1]→clip
|
|
59
|
-
* (y-inverted) → model math the renderer inverts, at the subtle FOLLOW_LEAN (NOT the retired
|
|
60
|
-
* FOLLOW_REACH teleport), scaled by engagement. The draw-bias modulates the clock phase-rate
|
|
61
|
-
* by the head-tangent · head→cursor alignment, bounded by biasGain.
|
|
62
|
-
*/
|
|
63
|
-
export declare function fourierLeanMapping(snap: PointerFieldSnapshot, geom: FourierLeanGeometry, options?: FourierLeanOptions): FourierLeanResult;
|
|
64
23
|
/** The steady velocity-lead gain (the body anticipates the heading). */
|
|
65
24
|
export declare const BLOB_LEAD_K = 0.09;
|
|
66
25
|
/** The pseudopod stretch gain off |acceleration| (capped LOW so it swells, never taffies). */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { useFuzzySearch } from "./useFuzzySearch.js";
|
|
2
2
|
export type { UseFuzzySearchOptions } from "./useFuzzySearch.js";
|
|
3
|
-
export { buildIndex, searchIndex, fuzzyMatch, clearSearchCache } from "./
|
|
4
|
-
export type { SearchIndex } from "./
|
|
3
|
+
export { buildIndex, searchIndex, fuzzyMatch, clearSearchCache } from "./match.js";
|
|
4
|
+
export type { SearchIndex } from "./match.js";
|
|
5
5
|
export type { SearchableItem, SearchResult, FuzzySearchState } from "./types.js";
|
package/dist/{components/search/composables/fuzzySearchIndex.d.ts → composables/search/match.d.ts}
RENAMED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* The engine's matcher — builds a flat searchable index from items and scores queries
|
|
3
|
+
* with VSCode-style fuzzy matching. Pure functions, no Vue reactivity.
|
|
4
|
+
*
|
|
5
|
+
* [2026-08-25 · BK #42 W-SEARCH] Landed here from
|
|
6
|
+
* `src/components/search/composables/fuzzySearchIndex.ts`. The name lost its
|
|
7
|
+
* `fuzzySearchIndex` prefix with the directory: under `composables/search/` the words
|
|
8
|
+
* "search" and "fuzzy" are the path, and a file called `search/fuzzySearchIndex.ts`
|
|
9
|
+
* says them twice.
|
|
5
10
|
*/
|
|
6
11
|
import type { SearchableItem, SearchResult } from "./types.js";
|
|
7
12
|
interface IndexEntry<T extends SearchableItem> {
|
|
@@ -14,7 +14,11 @@ export interface SectionHierarchy {
|
|
|
14
14
|
depth: number;
|
|
15
15
|
/** ID of the root-level ancestor (self.id when depth === 0). */
|
|
16
16
|
rootId: string;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Direct parent ID (null for root nodes). [2026-09-22 · O-32 §3.4: the index used
|
|
19
|
+
* to write self.id for roots and the root id at every depth; read `rootId` for the
|
|
20
|
+
* root-level ancestor.]
|
|
21
|
+
*/
|
|
18
22
|
parentId: string | null;
|
|
19
23
|
/** Index within root-level nodes. */
|
|
20
24
|
rootIndex: number;
|