@mkbabb/glass-ui 3.8.0 → 3.9.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/README.md +1 -6
- package/dist/{CardAction-q2qHCJFG.js → CardAction-DuArVky-.js} +4 -4
- package/dist/{CommandShortcut-SzWRhROC.js → CommandShortcut-CefCj5mt.js} +7 -7
- package/dist/{ContextMenuSubContent-Do977Cbf.js → ContextMenuSubContent-Bhg4f5jX.js} +3 -3
- package/dist/{DataTable-CvlWXz65.js → DataTable-CUHMukiQ.js} +1 -1
- package/dist/{DialogContent-DjZWT3lK.js → DialogContent-BRkT1cjP.js} +1 -1
- package/dist/{NumberFieldContent-CLNVR1iY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
- package/dist/{SelectScrollDownButton-C7TRe-ep.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
- package/dist/{SelectSeparator-L8pPEn4L.js → SelectSeparator-C4Ql0gzV.js} +1 -1
- package/dist/{TabsList-qyHZ2lKY.js → TabsList-B8CVOQPC.js} +2 -2
- package/dist/{Toaster-CabYEEF_.js → Toaster-1rYWrmAm.js} +1 -1
- package/dist/{ToggleGroupItem-CkXUcBlt.js → ToggleGroupItem-Cev4pOVK.js} +4 -4
- package/dist/animated-digit.js +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api.js +1 -1
- package/dist/aurora.js +10 -10
- package/dist/{badge-DHQrc_GQ.js → badge-BvwvT50i.js} +4 -4
- package/dist/badge.js +1 -1
- package/dist/{button-CAywcrhO.js → button-DN39cGqL.js} +13 -12
- package/dist/button.js +1 -1
- package/dist/card.js +1 -1
- package/dist/carousel.js +1 -1
- package/dist/color.js +1 -1
- package/dist/command.js +1 -1
- package/dist/{compile-BBTRjvQS.js → compile-DAjIoEy2.js} +1 -1
- package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +1 -1
- package/dist/components/custom/dock/DockSeparator.vue.d.ts +3 -0
- package/dist/components/custom/dock/GlassDock.vue.d.ts +45 -63
- package/dist/components/custom/dock/composables/dockContext.d.ts +7 -0
- package/dist/components/custom/dock/index.d.ts +2 -1
- package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +19 -5
- package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +92 -0
- package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +49 -0
- package/dist/components/custom/tabs/index.d.ts +2 -5
- package/dist/components/ui/button/index.d.ts +1 -1
- package/dist/components/ui/card/Card.vue.d.ts +5 -3
- 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/carousel/GlassCarouselPager.vue.d.ts +3 -4
- package/dist/components/ui/slider/index.d.ts +14 -7
- package/dist/components/ui/tabs/TabsList.vue.d.ts +1 -1
- package/dist/composables/context/createContext.d.ts +1 -1
- package/dist/configurator.js +1 -1
- package/dist/confirm-dialog.js +1 -1
- package/dist/constellation.js +1 -1
- package/dist/context-menu.js +1 -1
- package/dist/controls.js +1 -1
- package/dist/dark.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/deck-progress.js +1 -1
- package/dist/dialog.js +1 -1
- package/dist/dock.js +256 -243
- package/dist/{dropdown-menu-B_4bWyyG.js → dropdown-menu-D77jX6Df.js} +3 -3
- package/dist/dropdown-menu.js +1 -1
- package/dist/expandable-container.js +1 -1
- package/dist/forms.js +5 -5
- package/dist/fourier-field.js +3 -3
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +101 -104
- package/dist/goo-blob.js +36 -32
- package/dist/hover-popover.js +1 -1
- package/dist/icon-tooltip.js +1 -1
- package/dist/index.d.ts +0 -2
- package/dist/keyboard.js +1 -1
- package/dist/labeled-field.js +4 -4
- package/dist/{menuItemVariants-DKM85SNE.js → menuItemVariants-CCoBNkU5.js} +1 -1
- package/dist/motion-core.js +4 -4
- package/dist/motion.js +2 -2
- package/dist/number-field.js +1 -1
- package/dist/pulse.js +1 -1
- package/dist/reactive.js +1 -1
- package/dist/scrolling-text.js +1 -1
- package/dist/search.js +4 -4
- package/dist/select.js +2 -2
- package/dist/{slider-D9puf-Ko.js → slider-DC2mwuoe.js} +1 -1
- package/dist/slider.js +1 -1
- package/dist/sortable-list.js +1 -1
- package/dist/status-dot.js +17 -16
- package/dist/styles/animations.css +6 -2
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock/density.css +230 -0
- package/dist/styles/dock/layer-group.css +263 -0
- package/dist/styles/dock/layers.css +355 -0
- package/dist/styles/dock/morph.css +244 -0
- package/dist/styles/dock/overflow.css +201 -0
- package/dist/styles/dock/shell.css +457 -0
- package/dist/styles/dock-controls.css +166 -32
- package/dist/styles/dock.css +42 -1349
- package/dist/styles/glass.css +396 -75
- package/dist/styles/index.css +12 -11
- package/dist/styles/theme.css +51 -0
- package/dist/styles/tokens.css +501 -55
- package/dist/styles/utilities.css +89 -39
- package/dist/tabs.js +182 -151
- package/dist/timeline.js +1 -1
- package/dist/toast.js +1 -1
- package/dist/toggle-group.js +1 -1
- package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-C5I3wWd8.js} +1 -1
- package/dist/{useConfiguratorState-CMff4GzH.js → useConfiguratorState-DxAqksK6.js} +21 -10
- package/dist/watercolor-dot.js +1 -1
- package/package.json +32 -33
- package/src/styles/animations.css +6 -2
- package/src/styles/dock/density.css +230 -0
- package/src/styles/dock/layer-group.css +263 -0
- package/src/styles/dock/layers.css +355 -0
- package/src/styles/dock/morph.css +244 -0
- package/src/styles/dock/overflow.css +201 -0
- package/src/styles/dock/shell.css +457 -0
- package/src/styles/dock-controls.css +166 -32
- package/src/styles/dock.css +42 -1349
- package/src/styles/glass.css +396 -75
- package/src/styles/index.css +12 -11
- package/src/styles/theme.css +51 -0
- package/src/styles/tokens.css +501 -55
- package/src/styles/utilities.css +89 -39
- package/dist/DiscoGlyph-CG0F410s.js +0 -132
- package/dist/GlyphFace-DRjDkB0s.js +0 -51
- package/dist/UnderlineTabs-Uxn-R3MT.js +0 -39
- package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +0 -7
- package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +0 -4
- package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +0 -58
- package/dist/components/custom/disco-glyph/index.d.ts +0 -1
- package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +0 -36
- package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +0 -28
- package/dist/components/custom/glass-carousel/index.d.ts +0 -4
- package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +0 -30
- package/dist/components/custom/glyph-face/GlyphFace.vue.d.ts +0 -64
- package/dist/components/custom/glyph-face/index.d.ts +0 -2
- package/dist/components/custom/glyph-face/keys.d.ts +0 -9
- package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +0 -73
- package/dist/components/custom/responsive-tabs/index.d.ts +0 -2
- package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +0 -27
- package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +0 -60
- package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +0 -20
- package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +0 -39
- package/dist/disco-glyph.d.ts +0 -1
- package/dist/disco-glyph.js +0 -2
- package/dist/glass-carousel.d.ts +0 -1
- package/dist/glass-carousel.js +0 -219
- package/dist/glyph-face.d.ts +0 -1
- package/dist/glyph-face.js +0 -3
- package/dist/keys-BsYjEFOW.js +0 -9
- package/dist/responsive-tabs.d.ts +0 -1
- package/dist/responsive-tabs.js +0 -95
- package/dist/styles/disco-glyph.css +0 -26
- package/dist/styles/glyph-face.css +0 -92
- package/src/styles/disco-glyph.css +0 -26
- package/src/styles/glyph-face.css +0 -92
- /package/dist/{DeckProgress-AVgbIULY.js → DeckProgress-Dmk4_AKN.js} +0 -0
- /package/dist/{HoverPopover-D56O6Ylp.js → HoverPopover-2LOIW34a.js} +0 -0
- /package/dist/{IconTooltip-D2T5nYOM.js → IconTooltip-yefK7cJc.js} +0 -0
- /package/dist/{Input-DVG_J0ne.js → Input-DWQQIOC4.js} +0 -0
- /package/dist/{ScrollingText-CVyqxvfv.js → ScrollingText-BPP84wKo.js} +0 -0
- /package/dist/{color-DMLTunJK.js → color-8jBjWiJ6.js} +0 -0
- /package/dist/{constants-BPOqYJAm.js → constants-CS75AWHG.js} +0 -0
- /package/dist/{presets-D1XPuTj-.js → presets-BKVyQfbt.js} +0 -0
- /package/dist/{prng-COGhh02-.js → prng-wHuHlNHE.js} +0 -0
- /package/dist/{useGlobalDark-D3EBWzXK.js → useGlobalDark-yhL4Wp-s.js} +0 -0
- /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Cc-H9ees.js} +0 -0
- /package/dist/{useInterval-CcLfq2WU.js → useInterval-Dsmqwi03.js} +0 -0
- /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-Be3w_Rwk.js} +0 -0
- /package/dist/{useScrollProgress-C9ysDic5.js → useScrollProgress-CAH8Ofwt.js} +0 -0
- /package/dist/{useSortable-MGAbCGVJ.js → useSortable-C8ReQ50P.js} +0 -0
- /package/dist/{useTextHighlight-9nMW23Qb.js → useTextHighlight-DON84L8w.js} +0 -0
package/src/styles/utilities.css
CHANGED
|
@@ -191,14 +191,32 @@
|
|
|
191
191
|
AL-W10 SLIM (X6 §M-1 + Y7 §3 + DESIGN.md §L3). I compose this
|
|
192
192
|
class onto every interactive surface that wants the iOS tap-
|
|
193
193
|
squish idiom; the press scales to `--scale-press` (0.96, the
|
|
194
|
-
canonical iOS `.regular` control rung)
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
194
|
+
canonical iOS `.regular` control rung). I keep this as a single
|
|
195
|
+
canonical rung — NOT a 3-rung ladder. The one outlier I leave
|
|
196
|
+
alone is the button `0.97` (`--scale-press-btn`), which consumes
|
|
197
|
+
its own slightly-softer token directly. The dock control now
|
|
198
|
+
tracks the canonical `--scale-press` (0.96) too (AT.W7-dock-b
|
|
199
|
+
press canon — the prior deeper `0.92` was retired to ONE source).
|
|
200
|
+
|
|
201
|
+
AX.W52 §6 doctrine — the `scale` register is reconciled onto
|
|
202
|
+
`--spring-smooth` (was `--spring-snappy`), the ONE button/interactive
|
|
203
|
+
scale register the §6 easing doctrine records and the gate asserts
|
|
204
|
+
across `.btn-pill`/`.tap-squish`/`.glass-btn`/`btn-interactive`. At
|
|
205
|
+
ζ=0.86 `--spring-smooth` settles a press crisply with a sub-perceptual
|
|
206
|
+
(~0.5%) peak — no visible bounce — so press still reads alive while
|
|
207
|
+
hover reads as a smooth glide on the SAME spring.
|
|
208
|
+
|
|
209
|
+
The transition lists the SURFACE legs (bg/border/box-shadow/color/
|
|
210
|
+
opacity) on the bezier `--ease-standard` alongside the spring `scale`
|
|
211
|
+
leg — the SAME coherent set `.btn-pill` carries. This is load-bearing:
|
|
212
|
+
`.tap-squish` and `.btn-pill` are co-composed on the button base and
|
|
213
|
+
this `transition` shorthand would otherwise CLOBBER `.btn-pill`'s
|
|
214
|
+
surface legs down to a scale-only animation (the cascade bug that left
|
|
215
|
+
every button transitioning ONLY `scale` — the live-readback RED). With
|
|
216
|
+
both classes carrying the full set, whichever wins the surface cross-
|
|
217
|
+
fade survives. On a non-button press surface the extra legs are inert
|
|
218
|
+
unless that prop changes, in which case a smooth cross-fade is the
|
|
219
|
+
desired interactive read anyway.
|
|
202
220
|
|
|
203
221
|
Under PRM I retire the press transform entirely and lean on the
|
|
204
222
|
consumer's own hover/active bg-tint cascade to acknowledge the
|
|
@@ -206,7 +224,13 @@
|
|
|
206
224
|
.tap-squish {
|
|
207
225
|
/* AQ.W3 §W3.2 identity base */
|
|
208
226
|
scale: 1;
|
|
209
|
-
transition:
|
|
227
|
+
transition:
|
|
228
|
+
background-color var(--duration-fast) var(--ease-standard),
|
|
229
|
+
border-color var(--duration-fast) var(--ease-standard),
|
|
230
|
+
box-shadow var(--duration-fast) var(--ease-standard),
|
|
231
|
+
color var(--duration-fast) var(--ease-standard),
|
|
232
|
+
opacity var(--duration-fast) var(--ease-standard),
|
|
233
|
+
scale var(--duration-fast) var(--spring-smooth);
|
|
210
234
|
transform-origin: center center;
|
|
211
235
|
}
|
|
212
236
|
.tap-squish:active {
|
|
@@ -683,9 +707,12 @@
|
|
|
683
707
|
`--duration-fast` + `--ease-standard` tokens. */
|
|
684
708
|
@utility scale-on-hover {
|
|
685
709
|
/* Individual-transform identity base (AQ.W3 §W3.2). Transition the `scale`
|
|
686
|
-
longhand (not `transform`) so the migrated hover scale animates.
|
|
710
|
+
longhand (not `transform`) so the migrated hover scale animates.
|
|
711
|
+
AX.W52 §6 doctrine — the `scale` transform leg rides `--spring-smooth`
|
|
712
|
+
(the settle register), NOT the bezier `--ease-standard` (a transform on a
|
|
713
|
+
bezier reads mechanical; springs read alive on transform). */
|
|
687
714
|
scale: 1;
|
|
688
|
-
transition: scale var(--duration-fast) var(--
|
|
715
|
+
transition: scale var(--duration-fast) var(--spring-smooth);
|
|
689
716
|
|
|
690
717
|
&:hover {
|
|
691
718
|
scale: var(--scale-hover);
|
|
@@ -1005,22 +1032,28 @@
|
|
|
1005
1032
|
|
|
1006
1033
|
/* ── Interactive-button four-state recipe ────────────────────────────────
|
|
1007
1034
|
`.btn-interactive` carries the canonical "Button-with-spring-hover"
|
|
1008
|
-
four-state contract — transition + hover-scale
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1035
|
+
four-state contract — transition + hover-scale + active-press + disabled-
|
|
1036
|
+
opacity + focus-ring fade-in. The Button primitive's variants emit the four
|
|
1037
|
+
states except `hover:scale-*`; this is the canonical opt-in that adds the
|
|
1038
|
+
spring-hover lift. Consumed by keyframes.js at 7 sites.
|
|
1039
|
+
|
|
1040
|
+
AX.W52 §6 — the hover lift is the restrained `--scale-hover-btn` (1.035, NOT
|
|
1041
|
+
the emphatic 1.08 `--scale-hover`) routed through `--spring-smooth` — the ONE
|
|
1042
|
+
button scale register the §6 doctrine records and the gate asserts across
|
|
1043
|
+
`.btn-pill`/`.tap-squish`/`.glass-btn`/`btn-interactive`. The surface legs
|
|
1044
|
+
stay on the bezier `--ease-standard` (a colour cross-fade reads as a wobble
|
|
1045
|
+
on a spring); only the `scale` transform leg springs. */
|
|
1013
1046
|
@utility btn-interactive {
|
|
1014
1047
|
/* AQ.W3 §W3.2 identity base */
|
|
1015
1048
|
scale: 1;
|
|
1016
1049
|
transition:
|
|
1017
1050
|
background-color var(--duration-fast) var(--ease-standard),
|
|
1018
1051
|
color var(--duration-fast) var(--ease-standard),
|
|
1019
|
-
scale var(--duration-fast) var(--
|
|
1052
|
+
scale var(--duration-fast) var(--spring-smooth),
|
|
1020
1053
|
opacity var(--duration-fast) var(--ease-standard);
|
|
1021
1054
|
|
|
1022
1055
|
&:hover {
|
|
1023
|
-
scale: var(--scale-hover);
|
|
1056
|
+
scale: var(--scale-hover-btn);
|
|
1024
1057
|
}
|
|
1025
1058
|
|
|
1026
1059
|
&:active {
|
|
@@ -1036,11 +1069,11 @@
|
|
|
1036
1069
|
box-shadow: var(--focus-ring-shadow);
|
|
1037
1070
|
outline: none;
|
|
1038
1071
|
/* Fade in; base state has no box-shadow transition → instant
|
|
1039
|
-
removal */
|
|
1072
|
+
removal. The `scale` leg keeps the `--spring-smooth` register. */
|
|
1040
1073
|
transition:
|
|
1041
1074
|
background-color var(--duration-fast) var(--ease-standard),
|
|
1042
1075
|
color var(--duration-fast) var(--ease-standard),
|
|
1043
|
-
scale var(--duration-fast) var(--
|
|
1076
|
+
scale var(--duration-fast) var(--spring-smooth),
|
|
1044
1077
|
opacity var(--duration-fast) var(--ease-standard),
|
|
1045
1078
|
box-shadow var(--duration-fast) var(--ease-standard);
|
|
1046
1079
|
}
|
|
@@ -1068,36 +1101,52 @@ html.no-transition *::after {
|
|
|
1068
1101
|
transition-duration: 0s !important;
|
|
1069
1102
|
}
|
|
1070
1103
|
|
|
1071
|
-
/* ── Forced-colors
|
|
1104
|
+
/* ── Forced-colors focus + silhouette rung (AQ.W2 §5 · generalized AX.W36) ────
|
|
1072
1105
|
Windows High Contrast / forced-colors mode STRIPS `box-shadow` — so the
|
|
1073
1106
|
glass focus rings (box-shadow + `outline: none`) vanish, leaving keyboard
|
|
1074
|
-
users with no visible focus
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1107
|
+
users with no visible focus. Restore a real `outline` keyed to the system
|
|
1108
|
+
`Highlight` color (outline survives forced-colors; box-shadow does not). The
|
|
1109
|
+
box-shadow ring stays the primary in normal mode (it carries the glass
|
|
1110
|
+
aesthetic) — these two are mutually exclusive by media query, NOT a parallel
|
|
1111
|
+
path.
|
|
1112
|
+
|
|
1113
|
+
AX.W36 — the focus-survival selector set is GENERALIZED to the broader
|
|
1114
|
+
interactive surface: the dock CONTROLS (`.dock-icon-button` / `.dock-tab-button`
|
|
1115
|
+
/ `.dock-select-trigger` / `.dock-dropdown-trigger`) + the pill button base
|
|
1116
|
+
(`.btn-pill`) all carry a box-shadow focus ring (dock.css / utilities.css) that
|
|
1117
|
+
vanishes under WHC just like the original five. This is the SAME `Highlight`
|
|
1118
|
+
outline rung extended to cover them — ONE block, ONE path (the glass-language
|
|
1119
|
+
structure-survival skin for the tier panes / StatusDot / floating surfaces lives
|
|
1120
|
+
co-located with the ladder it skins, in glass.css).
|
|
1121
|
+
|
|
1122
|
+
`forced-color-adjust: none` is deliberately NOT used — glass-ui's glassmorphic
|
|
1123
|
+
chrome is decorative and yields to the user's forced palette (css forced-colors
|
|
1124
|
+
guidance). Baseline Widely Available; this IS the fallback mechanism (it only
|
|
1125
|
+
activates under forced-colors), so no nested guard. */
|
|
1085
1126
|
@media (forced-colors: active) {
|
|
1086
1127
|
.focus-ring:focus-visible,
|
|
1087
1128
|
.glass-btn:focus-visible,
|
|
1088
1129
|
.interactive-item:focus-visible,
|
|
1130
|
+
.btn-pill:focus-visible,
|
|
1131
|
+
.dock-icon-button:focus-visible,
|
|
1132
|
+
.dock-tab-button:focus-visible,
|
|
1133
|
+
.dock-select-trigger:focus-visible,
|
|
1134
|
+
.dock-dropdown-trigger:focus-visible,
|
|
1089
1135
|
.input-pill:focus,
|
|
1090
1136
|
.input-pill:focus-visible {
|
|
1091
1137
|
outline: 2px solid Highlight;
|
|
1092
1138
|
outline-offset: 2px;
|
|
1093
1139
|
}
|
|
1094
1140
|
|
|
1095
|
-
/* Structural edges borne ONLY by box-shadow (the hairline catch-light
|
|
1096
|
-
|
|
1097
|
-
|
|
1141
|
+
/* Structural edges borne ONLY by box-shadow (the hairline catch-light + the
|
|
1142
|
+
dock SHELL pill edge) also vanish — restore a real border so the silhouette
|
|
1143
|
+
survives. CanvasText is the system text/border color. The `.glass-dock`
|
|
1144
|
+
shell is OUT of the glass-material group BY DESIGN (it hand-rolls a parallel
|
|
1145
|
+
surface — see glass.css), so it keeps its WHC edge HERE; the five-rung ladder
|
|
1146
|
+
+ `.glass-card` get their WHC border from the co-located glass-language skin
|
|
1147
|
+
in glass.css (one source per surface family, no double-declaration). */
|
|
1098
1148
|
.hairline-accent,
|
|
1099
|
-
.glass-dock
|
|
1100
|
-
.glass-card {
|
|
1149
|
+
.glass-dock {
|
|
1101
1150
|
border: 1px solid CanvasText;
|
|
1102
1151
|
}
|
|
1103
1152
|
}
|
|
@@ -1108,12 +1157,13 @@ html.no-transition *::after {
|
|
|
1108
1157
|
to the WCAG 2.5.5 (44px) minimum — ONE amendment retiring the per-consumer
|
|
1109
1158
|
`min-h-[44px]` one-liners. Token-driven (`--touch-target`); fine-pointer
|
|
1110
1159
|
byte-identical. Targets `Button size="icon"` (via the `data-size="icon"`
|
|
1111
|
-
attr Button.vue reflects), ExpandableContainer +
|
|
1160
|
+
attr Button.vue reflects), ExpandableContainer + SegmentedTabs (responsive
|
|
1161
|
+
mobile Select) triggers.
|
|
1112
1162
|
`min-block/inline-size` only RAISES — a larger explicit size is never lost. */
|
|
1113
1163
|
@media (pointer: coarse) {
|
|
1114
1164
|
[data-size="icon"],
|
|
1115
1165
|
.expandable-container__trigger,
|
|
1116
|
-
.
|
|
1166
|
+
.segmented-tabs__trigger {
|
|
1117
1167
|
min-block-size: var(--touch-target, 2.75rem);
|
|
1118
1168
|
min-inline-size: var(--touch-target, 2.75rem);
|
|
1119
1169
|
}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { r as e } from "./keys-BsYjEFOW.js";
|
|
2
|
-
import { computed as t, createElementBlock as n, createElementVNode as r, defineComponent as i, normalizeClass as a, openBlock as o, useId as s, watch as c } from "vue";
|
|
3
|
-
//#region src/components/custom/disco-glyph/DiscoGlyph.vue?vue&type=script&setup=true&lang.ts
|
|
4
|
-
var l = ["viewBox"], u = [
|
|
5
|
-
"id",
|
|
6
|
-
"x1",
|
|
7
|
-
"y1",
|
|
8
|
-
"x2",
|
|
9
|
-
"y2"
|
|
10
|
-
], d = ["stop-color"], f = ["stop-color"], p = ["stop-color"], m = ["stop-color"], h = ["stop-color"], g = ["stop-color"], _ = ["stop-color"], v = ["stop-color"], y = ["id"], b = ["d"], x = ["d", "fill"], S = ["d", "fill"], C = /* @__PURE__ */ i({
|
|
11
|
-
__name: "DiscoGlyph",
|
|
12
|
-
props: {
|
|
13
|
-
silhouette: {},
|
|
14
|
-
viewBox: { default: "0 0 24 24" },
|
|
15
|
-
active: {
|
|
16
|
-
type: Boolean,
|
|
17
|
-
default: !1
|
|
18
|
-
},
|
|
19
|
-
phaseColor: { default: "currentColor" },
|
|
20
|
-
facetAxis: { default: "diagonal" }
|
|
21
|
-
},
|
|
22
|
-
setup(i) {
|
|
23
|
-
let C = i, w = s(), T = t(() => `disco-facet-${w}`), E = t(() => `disco-cap-${w}`), D = t(() => {
|
|
24
|
-
switch (C.facetAxis) {
|
|
25
|
-
case "horizontal": return {
|
|
26
|
-
x1: "0",
|
|
27
|
-
y1: "0.5",
|
|
28
|
-
x2: "1",
|
|
29
|
-
y2: "0.5"
|
|
30
|
-
};
|
|
31
|
-
case "vertical": return {
|
|
32
|
-
x1: "0.5",
|
|
33
|
-
y1: "0",
|
|
34
|
-
x2: "0.5",
|
|
35
|
-
y2: "1"
|
|
36
|
-
};
|
|
37
|
-
default: return {
|
|
38
|
-
x1: "0",
|
|
39
|
-
y1: "0",
|
|
40
|
-
x2: "1",
|
|
41
|
-
y2: "1"
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
}), O = e();
|
|
45
|
-
return O && c(() => C.silhouette, (e) => {
|
|
46
|
-
O.value = e;
|
|
47
|
-
}, { immediate: !0 }), (e, t) => (o(), n("svg", {
|
|
48
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
49
|
-
viewBox: i.viewBox,
|
|
50
|
-
fill: "none",
|
|
51
|
-
class: a(["disco-glyph", { "disco-glyph--phase-tinted": i.active }]),
|
|
52
|
-
"aria-hidden": "true"
|
|
53
|
-
}, [
|
|
54
|
-
r("defs", null, [r("linearGradient", {
|
|
55
|
-
id: T.value,
|
|
56
|
-
x1: D.value.x1,
|
|
57
|
-
y1: D.value.y1,
|
|
58
|
-
x2: D.value.x2,
|
|
59
|
-
y2: D.value.y2
|
|
60
|
-
}, [
|
|
61
|
-
r("stop", {
|
|
62
|
-
offset: "0%",
|
|
63
|
-
"stop-color": i.phaseColor,
|
|
64
|
-
"stop-opacity": "0.85"
|
|
65
|
-
}, null, 8, d),
|
|
66
|
-
r("stop", {
|
|
67
|
-
offset: "14%",
|
|
68
|
-
"stop-color": i.phaseColor,
|
|
69
|
-
"stop-opacity": "1"
|
|
70
|
-
}, null, 8, f),
|
|
71
|
-
r("stop", {
|
|
72
|
-
offset: "28%",
|
|
73
|
-
"stop-color": i.phaseColor,
|
|
74
|
-
"stop-opacity": "0.7"
|
|
75
|
-
}, null, 8, p),
|
|
76
|
-
r("stop", {
|
|
77
|
-
offset: "42%",
|
|
78
|
-
"stop-color": i.phaseColor,
|
|
79
|
-
"stop-opacity": "0.95"
|
|
80
|
-
}, null, 8, m),
|
|
81
|
-
r("stop", {
|
|
82
|
-
offset: "56%",
|
|
83
|
-
"stop-color": i.phaseColor,
|
|
84
|
-
"stop-opacity": "0.6"
|
|
85
|
-
}, null, 8, h),
|
|
86
|
-
r("stop", {
|
|
87
|
-
offset: "70%",
|
|
88
|
-
"stop-color": i.phaseColor,
|
|
89
|
-
"stop-opacity": "0.85"
|
|
90
|
-
}, null, 8, g),
|
|
91
|
-
r("stop", {
|
|
92
|
-
offset: "84%",
|
|
93
|
-
"stop-color": i.phaseColor,
|
|
94
|
-
"stop-opacity": "0.5"
|
|
95
|
-
}, null, 8, _),
|
|
96
|
-
r("stop", {
|
|
97
|
-
offset: "100%",
|
|
98
|
-
"stop-color": i.phaseColor,
|
|
99
|
-
"stop-opacity": "0.75"
|
|
100
|
-
}, null, 8, v)
|
|
101
|
-
], 8, u), r("linearGradient", {
|
|
102
|
-
id: E.value,
|
|
103
|
-
x1: "0",
|
|
104
|
-
y1: "0",
|
|
105
|
-
x2: "0.5",
|
|
106
|
-
y2: "0.5"
|
|
107
|
-
}, [...t[0] ||= [r("stop", {
|
|
108
|
-
offset: "0%",
|
|
109
|
-
"stop-color": "white",
|
|
110
|
-
"stop-opacity": "0.55"
|
|
111
|
-
}, null, -1), r("stop", {
|
|
112
|
-
offset: "40%",
|
|
113
|
-
"stop-color": "white",
|
|
114
|
-
"stop-opacity": "0"
|
|
115
|
-
}, null, -1)]], 8, y)]),
|
|
116
|
-
r("path", {
|
|
117
|
-
d: i.silhouette,
|
|
118
|
-
fill: "currentColor"
|
|
119
|
-
}, null, 8, b),
|
|
120
|
-
r("path", {
|
|
121
|
-
d: i.silhouette,
|
|
122
|
-
fill: `url(#${T.value})`
|
|
123
|
-
}, null, 8, x),
|
|
124
|
-
r("path", {
|
|
125
|
-
d: i.silhouette,
|
|
126
|
-
fill: `url(#${E.value})`
|
|
127
|
-
}, null, 8, S)
|
|
128
|
-
], 10, l));
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
//#endregion
|
|
132
|
-
export { C as t };
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./cn-DJXf4yaB.js";
|
|
2
|
-
import { n as t } from "./keys-BsYjEFOW.js";
|
|
3
|
-
import { computed as n, createElementBlock as r, createElementVNode as i, defineComponent as a, normalizeClass as o, normalizeStyle as s, openBlock as c, ref as l, renderSlot as u } from "vue";
|
|
4
|
-
//#region src/components/custom/glyph-face/GlyphFace.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
-
var d = ["data-active"], f = /* @__PURE__ */ a({
|
|
6
|
-
__name: "GlyphFace",
|
|
7
|
-
props: {
|
|
8
|
-
active: {
|
|
9
|
-
type: Boolean,
|
|
10
|
-
default: !1
|
|
11
|
-
},
|
|
12
|
-
tint: {},
|
|
13
|
-
silhouette: {},
|
|
14
|
-
class: { type: [
|
|
15
|
-
Boolean,
|
|
16
|
-
null,
|
|
17
|
-
String,
|
|
18
|
-
Object,
|
|
19
|
-
Array
|
|
20
|
-
] }
|
|
21
|
-
},
|
|
22
|
-
setup(a) {
|
|
23
|
-
let f = a, p = l(void 0);
|
|
24
|
-
t(p);
|
|
25
|
-
let m = n(() => e("glyph-face", f.class)), h = n(() => {
|
|
26
|
-
let e = { "--gf-tint": f.tint ?? "transparent" }, t = f.silhouette ?? p.value;
|
|
27
|
-
if (t) {
|
|
28
|
-
let n = t.trim();
|
|
29
|
-
e["--gf-silhouette"] = /^[Mm][\s.,\d-]/.test(n) ? `path('${n}')` : n;
|
|
30
|
-
}
|
|
31
|
-
return e;
|
|
32
|
-
});
|
|
33
|
-
return (e, t) => (c(), r("span", {
|
|
34
|
-
class: o(m.value),
|
|
35
|
-
"data-active": a.active ? "true" : "false",
|
|
36
|
-
style: s(h.value)
|
|
37
|
-
}, [
|
|
38
|
-
t[0] ||= i("span", {
|
|
39
|
-
class: "glyph-face-backplate",
|
|
40
|
-
"aria-hidden": "true"
|
|
41
|
-
}, null, -1),
|
|
42
|
-
u(e.$slots, "default"),
|
|
43
|
-
t[1] ||= i("span", {
|
|
44
|
-
class: "glyph-face-cap",
|
|
45
|
-
"aria-hidden": "true"
|
|
46
|
-
}, null, -1)
|
|
47
|
-
], 14, d));
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
//#endregion
|
|
51
|
-
export { f as t };
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { t as e } from "./cn-DJXf4yaB.js";
|
|
2
|
-
import { t } from "./_plugin-vue_export-helper-ok8pgSl5.js";
|
|
3
|
-
import { Fragment as n, createElementBlock as r, defineComponent as i, mergeModels as a, normalizeClass as o, openBlock as s, renderList as c, toDisplayString as l, unref as u, useModel as d } from "vue";
|
|
4
|
-
//#region src/components/custom/tabs/UnderlineTabs.vue?vue&type=script&setup=true&lang.ts
|
|
5
|
-
var f = ["aria-selected", "onClick"], p = /* @__PURE__ */ t(/* @__PURE__ */ i({
|
|
6
|
-
__name: "UnderlineTabs",
|
|
7
|
-
props: /* @__PURE__ */ a({
|
|
8
|
-
options: {},
|
|
9
|
-
class: { type: [
|
|
10
|
-
Boolean,
|
|
11
|
-
null,
|
|
12
|
-
String,
|
|
13
|
-
Object,
|
|
14
|
-
Array
|
|
15
|
-
] }
|
|
16
|
-
}, {
|
|
17
|
-
modelValue: { required: !0 },
|
|
18
|
-
modelModifiers: {}
|
|
19
|
-
}),
|
|
20
|
-
emits: ["update:modelValue"],
|
|
21
|
-
setup(t) {
|
|
22
|
-
let i = t, a = d(t, "modelValue");
|
|
23
|
-
function p(e) {
|
|
24
|
-
a.value = e;
|
|
25
|
-
}
|
|
26
|
-
return (d, m) => (s(), r("div", {
|
|
27
|
-
role: "tablist",
|
|
28
|
-
class: o(u(e)("underline-tabs", i.class))
|
|
29
|
-
}, [(s(!0), r(n, null, c(t.options, (e) => (s(), r("button", {
|
|
30
|
-
key: e.value,
|
|
31
|
-
class: "underline-tab",
|
|
32
|
-
role: "tab",
|
|
33
|
-
"aria-selected": a.value === e.value ? "true" : "false",
|
|
34
|
-
onClick: (t) => p(e.value)
|
|
35
|
-
}, l(e.label), 9, f))), 128))], 2));
|
|
36
|
-
}
|
|
37
|
-
}), [["__scopeId", "data-v-f3ec0f83"]]);
|
|
38
|
-
//#endregion
|
|
39
|
-
export { p as t };
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/** The tensor-target format the CONSUMER declares (NOT baked in the substrate). */
|
|
2
|
-
export declare const PAINTERLY_TENSOR_FORMAT: "rgba16float";
|
|
3
|
-
/** The anisotropic-Kuwahara sector count the CONSUMER declares. */
|
|
4
|
-
export declare const PAINTERLY_KUWAHARA_SECTORS: 8;
|
|
5
|
-
export declare const PAINTERLY_TENSOR_WGSL = "\n@group(0) @binding(0) var baseTex: texture_2d<f32>;\n@group(0) @binding(1) var baseSampler: sampler;\n\nconst W_LUMA: vec3f = vec3f(0.2126, 0.7152, 0.0722);\n\n@fragment\nfn tensor_main(@location(0) uv: vec2f) -> @location(0) vec4f {\n let texel = 1.0 / vec2f(textureDimensions(baseTex));\n // 3x3 Sobel over luma.\n var l: array<f32, 9>;\n var k = 0;\n for (var dy = -1; dy <= 1; dy = dy + 1) {\n for (var dx = -1; dx <= 1; dx = dx + 1) {\n let s = textureSample(baseTex, baseSampler, uv + vec2f(f32(dx), f32(dy)) * texel).rgb;\n l[k] = dot(s, W_LUMA);\n k = k + 1;\n }\n }\n let gx = (l[2] + 2.0 * l[5] + l[8]) - (l[0] + 2.0 * l[3] + l[6]);\n let gy = (l[6] + 2.0 * l[7] + l[8]) - (l[0] + 2.0 * l[1] + l[2]);\n // (Jxx, Jyy, Jxy) \u2014 RGBA16F target (magnitudes exceed [0,1], 8-bit LDR clips).\n return vec4f(gx * gx, gy * gy, gx * gy, 1.0);\n}";
|
|
6
|
-
export declare const PAINTERLY_SMOOTH_WGSL = "\n@group(0) @binding(0) var tensorTex: texture_2d<f32>;\n@group(0) @binding(1) var tensorSampler: sampler;\n@group(0) @binding(2) var<uniform> dir: vec2f;\n\n@fragment\nfn smooth_main(@location(0) uv: vec2f) -> @location(0) vec4f {\n let texel = 1.0 / vec2f(textureDimensions(tensorTex));\n // 9-tap Gaussian (sigma ~2) along the dir axis.\n let w = array<f32, 5>(0.227027, 0.194594, 0.121622, 0.054054, 0.016216);\n var sum = textureSample(tensorTex, tensorSampler, uv).xyz * w[0];\n for (var i = 1; i < 5; i = i + 1) {\n let off = dir * texel * f32(i);\n sum = sum + textureSample(tensorTex, tensorSampler, uv + off).xyz * w[i];\n sum = sum + textureSample(tensorTex, tensorSampler, uv - off).xyz * w[i];\n }\n return vec4f(sum, 1.0);\n}";
|
|
7
|
-
export declare const PAINTERLY_KUWAHARA_WGSL: string;
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/** The wake velocity-texture format (the CONSUMER declares it; the substrate bakes none). */
|
|
2
|
-
export declare const WAKE_TEXTURE_FORMAT: "rg16float";
|
|
3
|
-
export declare const WAKE_ADVECT_WGSL = "\nstruct WakeUniforms {\n dt: f32,\n tempo: f32, // the master tempo scalar (0 under PRM/pause \u2014 freezes injection)\n dissipation: f32,\n pad: f32,\n splatPos: vec2f, // the delta-tracked pointer position (0..1)\n splatVel: vec2f, // the pointer velocity (the splat direction/strength)\n splatRadius: f32,\n rippleAmp: f32, // a click \u2192 a radial-ripple impulse\n pad2: vec2f,\n};\n\n@group(0) @binding(0) var velTex: texture_2d<f32>;\n@group(0) @binding(1) var velSampler: sampler;\n@group(0) @binding(2) var<uniform> U: WakeUniforms;\n\n@fragment\nfn advect_main(@location(0) uv: vec2f) -> @location(0) vec4f {\n let texel = 1.0 / vec2f(textureDimensions(velTex));\n // Self-advection: trace back along the local velocity by dt (semi-Lagrangian).\n let v0 = textureSample(velTex, velSampler, uv).xy;\n let back = uv - v0 * U.dt;\n var v = textureSample(velTex, velSampler, back).xy;\n // Dissipate (the eddies decay so the wake lingers but fades).\n v = v * U.dissipation;\n\n // Delta-tracked Gaussian SPLAT \u2014 the pointer writes velocity into the field. The\n // injection is gated by the master tempo (0 under PRM \u2192 no new motion under reduce).\n let d = uv - U.splatPos;\n let g = exp(-dot(d, d) / max(U.splatRadius * U.splatRadius, 1e-6));\n v = v + U.splatVel * g * U.tempo;\n\n // Click \u2192 a radial-ripple impulse (pushes velocity radially outward from the splat).\n if (U.rippleAmp > 0.001) {\n let dir = d / max(length(d), 1e-4);\n v = v + dir * U.rippleAmp * g * U.tempo;\n }\n\n return vec4f(v, 0.0, 1.0);\n}";
|
|
4
|
-
export declare const WAKE_APPLY_WGSL = "\n@group(0) @binding(0) var wakeTex: texture_2d<f32>;\n@group(0) @binding(1) var wakeSampler: sampler;\n\nfn wakeBias(uv: vec2f) -> vec2f {\n return textureSample(wakeTex, wakeSampler, uv).xy;\n}";
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* <DiscoGlyph> — faceted SVG glyph primitive.
|
|
3
|
-
*
|
|
4
|
-
* Three layers paint over a single `silhouette` path:
|
|
5
|
-
* 1. base — the silhouette filled `currentColor` so consumers retain the
|
|
6
|
-
* lucide cascade (Vignelli-clean colour register at idle).
|
|
7
|
-
* 2. facet — an 8-stop linear gradient that simulates ~6 facets cutting
|
|
8
|
-
* across the glyph face. `phaseColor` (default `currentColor`) drives
|
|
9
|
-
* the hue; in active states a phase var (`--phase-color` or similar)
|
|
10
|
-
* reads through. Q.W3.A.3: gradient axis adapts to silhouette via
|
|
11
|
-
* `facetAxis` so each consumer picks the axis that cuts *across* its
|
|
12
|
-
* dominant stroke direction (CheckDisco's V-shape calls for vertical;
|
|
13
|
-
* ArrowRightDisco's horizontal shaft also vertical; PlayDisco's
|
|
14
|
-
* triangle works on the diagonal).
|
|
15
|
-
* 3. cap — a 165° specular catch-light gradient. White at the upper-left,
|
|
16
|
-
* transparent past 40%; the polished-metal hot-spot a real disco
|
|
17
|
-
* glyph would carry under club lighting.
|
|
18
|
-
*
|
|
19
|
-
* Q.W3.A.1 silhouette hand-off: when wrapped in a `<GlyphFace>`, this
|
|
20
|
-
* primitive publishes its `silhouette` prop upward via the
|
|
21
|
-
* `GLYPH_FACE_SILHOUETTE_KEY` injection slot, so the GlyphFace cap clips
|
|
22
|
-
* to the disco silhouette without the wrapping consumer (PrimaryAction)
|
|
23
|
-
* needing to mirror the path on every glyph swap. The provide/inject
|
|
24
|
-
* path is reactive — GlyphFace re-reads when the descendant's
|
|
25
|
-
* `silhouette` prop changes (e.g. PrimaryAction's `glyphFor(state)`
|
|
26
|
-
* branches across Play / Check / ArrowRight / RotateCcw).
|
|
27
|
-
*
|
|
28
|
-
* `useId()` scopes the gradient ids so multiple glyphs on one page do not
|
|
29
|
-
* collide post-SSR/hydration. The id format mirrors the existing speedtest
|
|
30
|
-
* conventions (`disco-facet-<id>` / `disco-cap-<id>`).
|
|
31
|
-
*/
|
|
32
|
-
type __VLS_Props = {
|
|
33
|
-
/** SVG path d-attribute describing the glyph silhouette. */
|
|
34
|
-
silhouette: string;
|
|
35
|
-
/** SVG viewBox. Defaults `0 0 24 24`. */
|
|
36
|
-
viewBox?: string;
|
|
37
|
-
/** Phase-tinted state — wired through CSS class consumers may hook. */
|
|
38
|
-
active?: boolean;
|
|
39
|
-
/** Stop-color for the facet gradient. Defaults `currentColor`. */
|
|
40
|
-
phaseColor?: string;
|
|
41
|
-
/**
|
|
42
|
-
* Axis along which the facet gradient runs. The 8 stops cut
|
|
43
|
-
* perpendicular to this axis, so a diagonal axis gives diagonal
|
|
44
|
-
* facets, vertical gives horizontal facets across the glyph,
|
|
45
|
-
* etc. Q.W3.A.3 default stays diagonal; consumers picking an
|
|
46
|
-
* axis that cuts across the silhouette's dominant stroke
|
|
47
|
-
* sharpen the facet read at small render sizes.
|
|
48
|
-
*/
|
|
49
|
-
facetAxis?: "diagonal" | "horizontal" | "vertical";
|
|
50
|
-
};
|
|
51
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
52
|
-
active: boolean;
|
|
53
|
-
viewBox: string;
|
|
54
|
-
phaseColor: string;
|
|
55
|
-
facetAxis: "diagonal" | "horizontal" | "vertical";
|
|
56
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
57
|
-
declare const _default: typeof __VLS_export;
|
|
58
|
-
export default _default;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as DiscoGlyph } from "./DiscoGlyph.vue";
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { type HTMLAttributes } from "vue";
|
|
2
|
-
type __VLS_Props = {
|
|
3
|
-
/** Scroll axis */
|
|
4
|
-
orientation?: "horizontal" | "vertical";
|
|
5
|
-
/** Expanded = items spread to fill space; collapsed = compact pill */
|
|
6
|
-
expanded?: boolean;
|
|
7
|
-
/** Enable scroll-snap */
|
|
8
|
-
snap?: boolean | "mandatory" | "proximity";
|
|
9
|
-
/** Show overflow fade indicators */
|
|
10
|
-
fadeOverflow?: boolean;
|
|
11
|
-
class?: HTMLAttributes["class"];
|
|
12
|
-
};
|
|
13
|
-
declare var __VLS_15: {};
|
|
14
|
-
type __VLS_Slots = {} & {
|
|
15
|
-
default?: (props: typeof __VLS_15) => any;
|
|
16
|
-
};
|
|
17
|
-
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
18
|
-
canScrollStart: import("vue").Ref<boolean, boolean>;
|
|
19
|
-
canScrollEnd: import("vue").Ref<boolean, boolean>;
|
|
20
|
-
scrollToItem: (index: number) => void;
|
|
21
|
-
isTransitioning: import("vue").Ref<boolean, boolean>;
|
|
22
|
-
visualExpanded: import("vue").Ref<boolean, boolean>;
|
|
23
|
-
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
24
|
-
orientation: "horizontal" | "vertical";
|
|
25
|
-
expanded: boolean;
|
|
26
|
-
snap: boolean | "mandatory" | "proximity";
|
|
27
|
-
fadeOverflow: boolean;
|
|
28
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
29
|
-
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
30
|
-
declare const _default: typeof __VLS_export;
|
|
31
|
-
export default _default;
|
|
32
|
-
type __VLS_WithSlots<T, S> = T & {
|
|
33
|
-
new (): {
|
|
34
|
-
$slots: S;
|
|
35
|
-
};
|
|
36
|
-
};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { type HTMLAttributes } from "vue";
|
|
2
|
-
type __VLS_Props = {
|
|
3
|
-
/** Whether this item is the active/highlighted one */
|
|
4
|
-
active?: boolean;
|
|
5
|
-
/** Whether the item grows/shrinks between expanded and collapsed modes */
|
|
6
|
-
expandable?: boolean;
|
|
7
|
-
class?: HTMLAttributes["class"];
|
|
8
|
-
};
|
|
9
|
-
declare var __VLS_1: {};
|
|
10
|
-
type __VLS_Slots = {} & {
|
|
11
|
-
default?: (props: typeof __VLS_1) => any;
|
|
12
|
-
};
|
|
13
|
-
declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
14
|
-
click: (e: MouseEvent) => any;
|
|
15
|
-
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
16
|
-
onClick?: ((e: MouseEvent) => any) | undefined;
|
|
17
|
-
}>, {
|
|
18
|
-
active: boolean;
|
|
19
|
-
expandable: boolean;
|
|
20
|
-
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
21
|
-
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
22
|
-
declare const _default: typeof __VLS_export;
|
|
23
|
-
export default _default;
|
|
24
|
-
type __VLS_WithSlots<T, S> = T & {
|
|
25
|
-
new (): {
|
|
26
|
-
$slots: S;
|
|
27
|
-
};
|
|
28
|
-
};
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { type Ref } from "vue";
|
|
2
|
-
export interface UseGlassCarouselOptions {
|
|
3
|
-
/** Scroll axis */
|
|
4
|
-
orientation: Ref<"horizontal" | "vertical">;
|
|
5
|
-
/** The logical expanded state */
|
|
6
|
-
expanded: Ref<boolean>;
|
|
7
|
-
/** The carousel root element ref — dimensions are animated on this element */
|
|
8
|
-
rootEl: Ref<HTMLElement | null>;
|
|
9
|
-
/** The scroll viewport element ref (reka-ui ScrollAreaViewport) */
|
|
10
|
-
viewportEl: Ref<HTMLElement | null>;
|
|
11
|
-
/** Fade duration in ms before the mode swap (default: 60) */
|
|
12
|
-
fadeMs?: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Composable for GlassCarousel — manages scroll overflow detection,
|
|
16
|
-
* expand/collapse transitions (following GlassDock's FLIP pattern),
|
|
17
|
-
* and item scroll-to behavior.
|
|
18
|
-
*/
|
|
19
|
-
export declare function useGlassCarousel(options: UseGlassCarouselOptions): {
|
|
20
|
-
canScrollStart: Ref<boolean, boolean>;
|
|
21
|
-
canScrollEnd: Ref<boolean, boolean>;
|
|
22
|
-
getOverflowFadeClass: () => "" | "scroll-fade-y" | "scroll-fade-mask" | "scroll-fade-top" | "scroll-fade-bottom";
|
|
23
|
-
updateOverflow: () => void;
|
|
24
|
-
scrollToItem: (index: number) => void;
|
|
25
|
-
visualExpanded: Ref<boolean, boolean>;
|
|
26
|
-
isTransitioning: Ref<boolean, boolean>;
|
|
27
|
-
transitionSize: Ref<string | null, string | null>;
|
|
28
|
-
suppressTransition: Ref<boolean, boolean>;
|
|
29
|
-
onTransitionEnd: (e: TransitionEvent) => void;
|
|
30
|
-
};
|