@mkbabb/glass-ui 3.8.0 → 3.10.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.
Files changed (228) hide show
  1. package/README.md +1 -6
  2. package/dist/{CardAction-q2qHCJFG.js → CardAction-DuArVky-.js} +4 -4
  3. package/dist/{CommandShortcut-SzWRhROC.js → CommandShortcut-CefCj5mt.js} +7 -7
  4. package/dist/{ContextMenuSubContent-Do977Cbf.js → ContextMenuSubContent-Bhg4f5jX.js} +3 -3
  5. package/dist/{DataTable-CvlWXz65.js → DataTable-CUHMukiQ.js} +1 -1
  6. package/dist/{DialogContent-DjZWT3lK.js → DialogContent-BRkT1cjP.js} +1 -1
  7. package/dist/{MetricBadge-lTc002u2.js → MetricBadge-BZVWIxNy.js} +6 -4
  8. package/dist/{Notification-BxK8LZMw.js → Notification-DLMhblXR.js} +2 -2
  9. package/dist/{NumberFieldContent-CLNVR1iY.js → NumberFieldContent-BbLOh8RU.js} +2 -2
  10. package/dist/{SelectScrollDownButton-C7TRe-ep.js → SelectScrollDownButton-T32cVFeM.js} +3 -3
  11. package/dist/{SelectSeparator-L8pPEn4L.js → SelectSeparator-C4Ql0gzV.js} +1 -1
  12. package/dist/{Switch-LDKLmmgx.js → Switch-Ch-k3Rv-.js} +1 -1
  13. package/dist/{TabsList-qyHZ2lKY.js → TabsList-B8CVOQPC.js} +2 -2
  14. package/dist/{Toaster-CabYEEF_.js → Toaster-1rYWrmAm.js} +1 -1
  15. package/dist/{ToggleGroupItem-CkXUcBlt.js → ToggleGroupItem-Cev4pOVK.js} +4 -4
  16. package/dist/animated-digit.js +1 -1
  17. package/dist/api/index.d.ts +2 -1
  18. package/dist/api.js +1 -1
  19. package/dist/aurora.js +236 -545
  20. package/dist/{badge-DHQrc_GQ.js → badge-CaoFJzRb.js} +5 -5
  21. package/dist/badge.js +1 -1
  22. package/dist/{button-CAywcrhO.js → button-DN39cGqL.js} +13 -12
  23. package/dist/button.js +1 -1
  24. package/dist/card.js +1 -1
  25. package/dist/carousel.js +1 -1
  26. package/dist/color.js +1 -1
  27. package/dist/command.js +1 -1
  28. package/dist/{compile-BBTRjvQS.js → compile-BOXjLUxu.js} +24 -24
  29. package/dist/components/custom/aurora/composables/atoms.d.ts +21 -4
  30. package/dist/components/custom/aurora/composables/runtime.d.ts +0 -9
  31. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +0 -11
  32. package/dist/components/custom/aurora/constants/renderMode.d.ts +0 -32
  33. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  34. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
  35. package/dist/components/custom/aurora/constants/shaders/tonemap.glsl.d.ts +1 -1
  36. package/dist/components/custom/aurora/index.d.ts +1 -1
  37. package/dist/components/custom/configurator/ConfiguratorLayer.vue.d.ts +1 -1
  38. package/dist/components/custom/constellation/Constellation.vue.d.ts +73 -1
  39. package/dist/components/custom/constellation/constellationField.d.ts +255 -3
  40. package/dist/components/custom/constellation/index.d.ts +2 -2
  41. package/dist/components/custom/dock/DockSeparator.vue.d.ts +3 -0
  42. package/dist/components/custom/dock/DockTabButton.vue.d.ts +4 -3
  43. package/dist/components/custom/dock/GlassDock.vue.d.ts +45 -63
  44. package/dist/components/custom/dock/composables/dockContext.d.ts +7 -0
  45. package/dist/components/custom/dock/index.d.ts +2 -1
  46. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +29 -0
  47. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +6 -0
  48. package/dist/components/custom/fourier-field/index.d.ts +25 -1
  49. package/dist/components/custom/fourier-field/math.d.ts +3 -8
  50. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +8 -10
  51. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +19 -5
  52. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +6 -14
  53. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  54. package/dist/components/custom/goo-blob/types.d.ts +59 -25
  55. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  56. package/dist/components/custom/handmark/brush.d.ts +219 -0
  57. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  58. package/dist/components/custom/handmark/geometry.d.ts +32 -0
  59. package/dist/components/custom/handmark/index.d.ts +21 -0
  60. package/dist/components/custom/handmark/ink.d.ts +11 -0
  61. package/dist/components/custom/handmark/texture.d.ts +39 -0
  62. package/dist/components/custom/handmark/types.d.ts +53 -0
  63. package/dist/components/custom/handmark/useHandMark.d.ts +66 -0
  64. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +8 -0
  65. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +92 -0
  66. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +49 -0
  67. package/dist/components/custom/tabs/index.d.ts +2 -5
  68. package/dist/components/ui/button/index.d.ts +1 -1
  69. package/dist/components/ui/card/Card.vue.d.ts +5 -3
  70. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +1 -1
  71. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +1 -1
  72. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +3 -4
  73. package/dist/components/ui/slider/index.d.ts +22 -11
  74. package/dist/components/ui/tabs/TabsList.vue.d.ts +1 -1
  75. package/dist/composables/color/index.d.ts +12 -7
  76. package/dist/composables/context/createContext.d.ts +1 -1
  77. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +1 -6
  78. package/dist/composables/motion/core/index.d.ts +1 -0
  79. package/dist/composables/motion/useRouteTransition.d.ts +42 -0
  80. package/dist/configurator.js +1 -1
  81. package/dist/confirm-dialog.js +1 -1
  82. package/dist/constellation.js +212 -72
  83. package/dist/context-menu.js +1 -1
  84. package/dist/controls.js +1 -1
  85. package/dist/dark.js +1 -1
  86. package/dist/data-table.js +1 -1
  87. package/dist/deck-progress.js +1 -1
  88. package/dist/dialog.js +1 -1
  89. package/dist/dock.js +257 -243
  90. package/dist/{dropdown-menu-B_4bWyyG.js → dropdown-menu-D77jX6Df.js} +3 -3
  91. package/dist/dropdown-menu.js +1 -1
  92. package/dist/expandable-container.js +61 -38
  93. package/dist/forms.js +5 -5
  94. package/dist/fourier-field.js +89 -97
  95. package/dist/fourier-math.d.ts +1 -0
  96. package/dist/fourier-math.js +2 -0
  97. package/dist/glass-panel.js +1 -1
  98. package/dist/glass-ui.css +1 -1
  99. package/dist/glass-ui.js +107 -109
  100. package/dist/goo-blob.js +316 -297
  101. package/dist/handmark.d.ts +1 -0
  102. package/dist/handmark.js +609 -0
  103. package/dist/hover-popover.js +1 -1
  104. package/dist/icon-tooltip.js +1 -1
  105. package/dist/index.d.ts +1 -2
  106. package/dist/keyboard.js +1 -1
  107. package/dist/labeled-field.js +5 -5
  108. package/dist/math-DTpRVC0e.js +27 -0
  109. package/dist/{menuItemVariants-DKM85SNE.js → menuItemVariants-CCoBNkU5.js} +1 -1
  110. package/dist/metric-badge.js +1 -1
  111. package/dist/metric-stack.js +1 -1
  112. package/dist/motion-core.js +70 -69
  113. package/dist/motion.js +2 -2
  114. package/dist/notification.js +1 -1
  115. package/dist/number-field.js +1 -1
  116. package/dist/pulse.js +1 -1
  117. package/dist/reactive.js +1 -1
  118. package/dist/scrolling-text.js +1 -1
  119. package/dist/search.js +4 -4
  120. package/dist/select.js +2 -2
  121. package/dist/{slider-D9puf-Ko.js → slider-CyzcxBoh.js} +6 -6
  122. package/dist/slider.js +1 -1
  123. package/dist/sortable-list.js +1 -1
  124. package/dist/status-dot.js +17 -16
  125. package/dist/styles/animations.css +80 -20
  126. package/dist/styles/cards.css +2 -2
  127. package/dist/styles/components.css +1 -1
  128. package/dist/styles/dock/density.css +230 -0
  129. package/dist/styles/dock/layer-group.css +275 -0
  130. package/dist/styles/dock/layers.css +355 -0
  131. package/dist/styles/dock/morph.css +244 -0
  132. package/dist/styles/dock/overflow.css +201 -0
  133. package/dist/styles/dock/shell.css +457 -0
  134. package/dist/styles/dock-controls.css +205 -55
  135. package/dist/styles/dock.css +42 -1349
  136. package/dist/styles/drawer.css +12 -4
  137. package/dist/styles/glass.css +535 -78
  138. package/dist/styles/index.css +12 -11
  139. package/dist/styles/paper.css +68 -2
  140. package/dist/styles/theme.css +58 -0
  141. package/dist/styles/tokens.css +601 -69
  142. package/dist/styles/transitions.css +20 -2
  143. package/dist/styles/utilities.css +218 -78
  144. package/dist/styles/view-transition.css +51 -0
  145. package/dist/switch.js +1 -1
  146. package/dist/tabs.js +182 -151
  147. package/dist/timeline.js +1 -1
  148. package/dist/toast.js +1 -1
  149. package/dist/toggle-group.js +1 -1
  150. package/dist/{useAnimatedNumber-C_3wZLx4.js → useAnimatedNumber-Bcpy5Etf.js} +1 -1
  151. package/dist/{useConfiguratorState-CMff4GzH.js → useConfiguratorState-DxAqksK6.js} +21 -10
  152. package/dist/{useGlassRenderer-5I0YkI4t.js → useGlassRenderer-D7YGOYiM.js} +1 -1
  153. package/dist/useViewTransition-DaN5Zrox.js +21 -0
  154. package/dist/vReveal-zUIQk-rJ.js +53 -0
  155. package/dist/watercolor-dot.js +1 -1
  156. package/package.json +80 -39
  157. package/src/styles/animations.css +80 -20
  158. package/src/styles/cards.css +2 -2
  159. package/src/styles/dock/density.css +230 -0
  160. package/src/styles/dock/layer-group.css +275 -0
  161. package/src/styles/dock/layers.css +355 -0
  162. package/src/styles/dock/morph.css +244 -0
  163. package/src/styles/dock/overflow.css +201 -0
  164. package/src/styles/dock/shell.css +457 -0
  165. package/src/styles/dock-controls.css +205 -55
  166. package/src/styles/dock.css +42 -1349
  167. package/src/styles/drawer.css +12 -4
  168. package/src/styles/glass.css +535 -78
  169. package/src/styles/index.css +12 -11
  170. package/src/styles/paper.css +68 -2
  171. package/src/styles/theme.css +58 -0
  172. package/src/styles/tokens.css +601 -69
  173. package/src/styles/transitions.css +20 -2
  174. package/src/styles/utilities.css +218 -78
  175. package/src/styles/view-transition.css +51 -0
  176. package/dist/DiscoGlyph-CG0F410s.js +0 -132
  177. package/dist/GlyphFace-DRjDkB0s.js +0 -51
  178. package/dist/UnderlineTabs-Uxn-R3MT.js +0 -39
  179. package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +0 -16
  180. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +0 -7
  181. package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +0 -7
  182. package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +0 -4
  183. package/dist/components/custom/disco-glyph/DiscoGlyph.vue.d.ts +0 -58
  184. package/dist/components/custom/disco-glyph/index.d.ts +0 -1
  185. package/dist/components/custom/glass-carousel/GlassCarousel.vue.d.ts +0 -36
  186. package/dist/components/custom/glass-carousel/GlassCarouselItem.vue.d.ts +0 -28
  187. package/dist/components/custom/glass-carousel/index.d.ts +0 -4
  188. package/dist/components/custom/glass-carousel/useGlassCarousel.d.ts +0 -30
  189. package/dist/components/custom/glyph-face/GlyphFace.vue.d.ts +0 -64
  190. package/dist/components/custom/glyph-face/index.d.ts +0 -2
  191. package/dist/components/custom/glyph-face/keys.d.ts +0 -9
  192. package/dist/components/custom/responsive-tabs/ResponsiveTabs.vue.d.ts +0 -73
  193. package/dist/components/custom/responsive-tabs/index.d.ts +0 -2
  194. package/dist/components/custom/tabs/BouncyTabs.vue.d.ts +0 -27
  195. package/dist/components/custom/tabs/BouncyToggle.vue.d.ts +0 -60
  196. package/dist/components/custom/tabs/UnderlineTabs.vue.d.ts +0 -20
  197. package/dist/components/custom/tabs/composables/useBouncySlider.d.ts +0 -39
  198. package/dist/composables/glass/createGPUCanvas.d.ts +0 -40
  199. package/dist/disco-glyph.d.ts +0 -1
  200. package/dist/disco-glyph.js +0 -2
  201. package/dist/glass-carousel.d.ts +0 -1
  202. package/dist/glass-carousel.js +0 -219
  203. package/dist/glyph-face.d.ts +0 -1
  204. package/dist/glyph-face.js +0 -3
  205. package/dist/keys-BsYjEFOW.js +0 -9
  206. package/dist/responsive-tabs.d.ts +0 -1
  207. package/dist/responsive-tabs.js +0 -95
  208. package/dist/styles/disco-glyph.css +0 -26
  209. package/dist/styles/glyph-face.css +0 -92
  210. package/dist/vReveal-CqaCz_mC.js +0 -44
  211. package/src/styles/disco-glyph.css +0 -26
  212. package/src/styles/glyph-face.css +0 -92
  213. /package/dist/{DeckProgress-AVgbIULY.js → DeckProgress-Dmk4_AKN.js} +0 -0
  214. /package/dist/{HoverPopover-D56O6Ylp.js → HoverPopover-2LOIW34a.js} +0 -0
  215. /package/dist/{IconTooltip-D2T5nYOM.js → IconTooltip-Cus0fvK0.js} +0 -0
  216. /package/dist/{Input-DVG_J0ne.js → Input-xuDwALQR.js} +0 -0
  217. /package/dist/{ScrollingText-CVyqxvfv.js → ScrollingText-BPP84wKo.js} +0 -0
  218. /package/dist/{color-DMLTunJK.js → color-C5ls_QF7.js} +0 -0
  219. /package/dist/{constants-BPOqYJAm.js → constants-yKeKnE84.js} +0 -0
  220. /package/dist/{presets-D1XPuTj-.js → presets-Dkdv55Gt.js} +0 -0
  221. /package/dist/{prng-COGhh02-.js → prng-D27-B3tK.js} +0 -0
  222. /package/dist/{useGlobalDark-D3EBWzXK.js → useGlobalDark-d6waty-X.js} +0 -0
  223. /package/dist/{useIntersectionPause-Bj4sPkMh.js → useIntersectionPause-Cck5Uxk8.js} +0 -0
  224. /package/dist/{useInterval-CcLfq2WU.js → useInterval-Dsmqwi03.js} +0 -0
  225. /package/dist/{useKeyboardShortcuts-BXWXOZ-9.js → useKeyboardShortcuts-CyIYrndH.js} +0 -0
  226. /package/dist/{useScrollProgress-C9ysDic5.js → useScrollProgress-CffFGLa5.js} +0 -0
  227. /package/dist/{useSortable-MGAbCGVJ.js → useSortable-C8ReQ50P.js} +0 -0
  228. /package/dist/{useTextHighlight-9nMW23Qb.js → useTextHighlight-CWEi25hf.js} +0 -0
@@ -184,10 +184,28 @@
184
184
  * surface). The grammar is single-event entrance + dwell + exit;
185
185
  * the next toast (if any) enters on its own contract.
186
186
  *
187
+ * §6 EASING-DOCTRINE EXEMPTION (AY.W-MOTION — DELIBERATE KEEP).
188
+ * Every glass-ui-OWNED entrance surface (`dialog-scale`, `pop`,
189
+ * `dropdown`, `fade-slide`, `dock-in`) rides the house `--spring-*`
190
+ * enter / `--ease-out`/`--ease-standard` exit vocabulary (the §6
191
+ * doctrine, tokens.css:162-190). The Toast does NOT — and that is
192
+ * BY DESIGN, not an unexamined default. The reka-ui `ToastRoot`
193
+ * primitive OWNS its data-state choreography: the entrance slide
194
+ * direction tracks the viewport origin AND the swipe-end gesture
195
+ * (`data-[swipe=end]:slide-out-to-right-full`), so the entrance/exit
196
+ * are coupled to reka's `tw-animate-css` data-state machinery. The §6
197
+ * spring vocabulary governs glass-ui-OWNED surfaces; the reka-Toast
198
+ * entrance is not one — re-authoring it onto a `<Transition>` would
199
+ * fork the primitive's swipe-coupled contract (and `tw-animate-css`
200
+ * is the shipped optionalPeer this contract depends on). The gate
201
+ * (proof:animation-coherence) carries the Toast surface in its
202
+ * REGISTER_ASSIGNMENT_ALLOW set so this keep reads as a gated,
203
+ * deliberate exemption.
204
+ *
187
205
  * PRM is honoured at the `@media (prefers-reduced-motion: reduce)`
188
206
  * block below — the slide motion retires; the fade-in/out
189
- * remains. No source change in W4; this comment block IS the
190
- * documentation closure for the W4-M.3 toast contract row.
207
+ * remains. No source motion change; this comment block IS the
208
+ * documentation closure for the toast contract row.
191
209
  */
192
210
 
193
211
  /* ── Reduced motion: preserve fades, remove transform/scale motion ── */
@@ -143,6 +143,20 @@
143
143
  box-shadow: var(--focus-ring-shadow);
144
144
  }
145
145
 
146
+ /* D6.b — `focus-ring-gold`: the opt-in gilded focus ring. Overrides ONLY
147
+ `--focus-ring-color` (tokens.css) → the shared `--focus-ring-shadow`
148
+ re-resolves to gold for THIS element; the default ring elsewhere is
149
+ unchanged. Gold-as-state is the "you are here / this is live" mark — a
150
+ transient highlight (appears on focus-visible, gone on blur), so gold is
151
+ lawful here where a permanent gold furniture would not be. Mirror of the
152
+ `focus-ring` custom-property pattern: a consumer composes
153
+ `class="focus-ring focus-ring-gold"` to gild the ring on the active rung;
154
+ the resting mark keeps its structural color (the four-voice law: red is
155
+ identity, gold is distinction). */
156
+ .focus-ring-gold {
157
+ --focus-ring-color: var(--gold);
158
+ }
159
+
146
160
  /* ── Hairline-accent — 0.5px catch-light + under-shadow pair ──
147
161
  Composes the canonical `--border-hairline` token (tokens.css §
148
162
  Glass-decorative). Adopt at any surface that wants the canonical
@@ -191,14 +205,32 @@
191
205
  AL-W10 SLIM (X6 §M-1 + Y7 §3 + DESIGN.md §L3). I compose this
192
206
  class onto every interactive surface that wants the iOS tap-
193
207
  squish idiom; the press scales to `--scale-press` (0.96, the
194
- canonical iOS `.regular` control rung) and the spring carries
195
- the return via `--spring-snappy` (the §L3 release-spring
196
- contract). I keep this as a single canonical rung — NOT a
197
- 3-rung ladder. The one outlier I leave alone is the button
198
- `0.97` (`--scale-press-btn`), which consumes its own slightly-
199
- softer token directly. The dock control now tracks the canonical
200
- `--scale-press` (0.96) too (AT.W7-dock-b press canon — the prior
201
- deeper `0.92` was retired to ONE source).
208
+ canonical iOS `.regular` control rung). I keep this as a single
209
+ canonical rung — NOT a 3-rung ladder. The one outlier I leave
210
+ alone is the button `0.97` (`--scale-press-btn`), which consumes
211
+ its own slightly-softer token directly. The dock control now
212
+ tracks the canonical `--scale-press` (0.96) too (AT.W7-dock-b
213
+ press canon — the prior deeper `0.92` was retired to ONE source).
214
+
215
+ AX.W52 §6 doctrine — the `scale` register is reconciled onto
216
+ `--spring-smooth` (was `--spring-snappy`), the ONE button/interactive
217
+ scale register the §6 easing doctrine records and the gate asserts
218
+ across `.btn-pill`/`.tap-squish`/`.glass-btn`/`btn-interactive`. At
219
+ ζ=0.86 `--spring-smooth` settles a press crisply with a sub-perceptual
220
+ (~0.5%) peak — no visible bounce — so press still reads alive while
221
+ hover reads as a smooth glide on the SAME spring.
222
+
223
+ The transition lists the SURFACE legs (bg/border/box-shadow/color/
224
+ opacity) on the bezier `--ease-standard` alongside the spring `scale`
225
+ leg — the SAME coherent set `.btn-pill` carries. This is load-bearing:
226
+ `.tap-squish` and `.btn-pill` are co-composed on the button base and
227
+ this `transition` shorthand would otherwise CLOBBER `.btn-pill`'s
228
+ surface legs down to a scale-only animation (the cascade bug that left
229
+ every button transitioning ONLY `scale` — the live-readback RED). With
230
+ both classes carrying the full set, whichever wins the surface cross-
231
+ fade survives. On a non-button press surface the extra legs are inert
232
+ unless that prop changes, in which case a smooth cross-fade is the
233
+ desired interactive read anyway.
202
234
 
203
235
  Under PRM I retire the press transform entirely and lean on the
204
236
  consumer's own hover/active bg-tint cascade to acknowledge the
@@ -206,7 +238,13 @@
206
238
  .tap-squish {
207
239
  /* AQ.W3 §W3.2 identity base */
208
240
  scale: 1;
209
- transition: scale var(--duration-fast) var(--spring-snappy);
241
+ transition:
242
+ background-color var(--duration-fast) var(--ease-standard),
243
+ border-color var(--duration-fast) var(--ease-standard),
244
+ box-shadow var(--duration-fast) var(--ease-standard),
245
+ color var(--duration-fast) var(--ease-standard),
246
+ opacity var(--duration-fast) var(--ease-standard),
247
+ scale var(--duration-fast) var(--spring-smooth);
210
248
  transform-origin: center center;
211
249
  }
212
250
  .tap-squish:active {
@@ -342,6 +380,30 @@
342
380
  }
343
381
  }
344
382
 
383
+ /* D6.b — `.text-gilt`: the brand-polish ONE-SHOT shimmer. Same gold-clip
384
+ gradient pass as `.gold-shimmer`, but the gold passes ONCE then SETS — a
385
+ seal being pressed, not a marquee looping forever. This is the lawful home
386
+ for the chassis "Complete!" celebration the disco-star used to carry: the
387
+ gold sweeps once over the completion label on resolve, then holds the
388
+ static gold gradient.
389
+
390
+ `animation-iteration-count: 1` + `animation-fill-mode: forwards` so the
391
+ slide runs exactly one pass and the final keyframe (background-position
392
+ -200%) sticks — no per-frame repaint after settle. PRM users get the
393
+ static gradient, no pass (the gold is still present, just unanimated). */
394
+ .text-gilt {
395
+ background: linear-gradient(90deg, var(--color-gold-dark), var(--color-gold-light), var(--color-gold), var(--color-gold-light), var(--color-gold-dark));
396
+ background-size: 250% 100%;
397
+ background-clip: text;
398
+ -webkit-background-clip: text;
399
+ color: transparent;
400
+ }
401
+ @media (prefers-reduced-motion: no-preference) {
402
+ .text-gilt {
403
+ animation: gold-shimmer-slide var(--duration-shimmer) var(--ease-out-expo) 1 forwards;
404
+ }
405
+ }
406
+
345
407
  /* ── Keyboard key ── */
346
408
  .kbd {
347
409
  display: inline-flex;
@@ -546,6 +608,56 @@
546
608
  letter-spacing: 0.1em;
547
609
  }
548
610
 
611
+ /* D6.b — `MetricBadge variant="record"`: the gilded record/peak value.
612
+ The highest-leverage gold moment on a DATA atlas — a tiny gilt pill on the
613
+ single record / peak / featured figure (the all-time-high, the top
614
+ district). Gold marks the SUPERLATIVE, exactly one per view: a gilt pill on
615
+ a single figure reads as a medal — civic and earned, not decorative.
616
+
617
+ The recipe composes ON the base `.metric-badge` glass plate (it is a
618
+ MODIFIER, never a replacement): a 1px `--gold-rim` tooled edge + `--gold-ink`
619
+ text + a FAINT gold wash (≤8% alpha — never an opaque gold fill, which would
620
+ read as a fourth DATA category and break one-color-one-meaning). The wash
621
+ sits over the badge's own `--glass-bg-quiet` plate via `color-mix`, so the
622
+ cream glass still reads through; the gold is the leaf, not the area.
623
+
624
+ `--gold-ink` clears cream-law ② (APCA |Lc| ≥ 45) on `--card` in both arms
625
+ (proof:gold-ink-contrast), and the faint wash only lightens the plate it
626
+ sits on, so the ink stays legible. */
627
+ .metric-badge--record {
628
+ border-color: var(--gold-rim);
629
+ background:
630
+ linear-gradient(
631
+ 0deg,
632
+ color-mix(in oklab, var(--gold) 8%, transparent),
633
+ color-mix(in oklab, var(--gold) 8%, transparent)
634
+ ),
635
+ var(--metric-badge-bg, var(--glass-bg-quiet));
636
+ box-shadow:
637
+ inset 0 0 0 1px var(--gold-rim),
638
+ inset 0 0.5px 0 0
639
+ color-mix(in oklab, var(--gold-light) 30%, transparent),
640
+ 0 1px 6px color-mix(in srgb, var(--shadow-color) 8%, transparent);
641
+ }
642
+
643
+ /* The record value reads in legible gold ink (the medal numeral). Scoped to
644
+ the amount slot so the unit/label keep their muted register — the gold is
645
+ on the figure, not the furniture. */
646
+ .metric-badge--record .metric-badge__amount {
647
+ color: var(--gold-ink);
648
+ }
649
+
650
+ .metric-badge--record:hover {
651
+ /* Hover deepens the rim to full `--gold` and lifts the wash one rung —
652
+ the gilt edge catches a touch more light, never a fill. */
653
+ border-color: var(--gold);
654
+ box-shadow:
655
+ inset 0 0 0 1px var(--gold),
656
+ inset 0 0.5px 0 0
657
+ color-mix(in oklab, var(--gold-light) 40%, transparent),
658
+ 0 2px 10px color-mix(in srgb, var(--shadow-color) 12%, transparent);
659
+ }
660
+
549
661
  /* Q.W3 Lane A — the `.glass-dock[data-density="…"]` density rungs that
550
662
  set `--dock-tab-h` + `--dock-label-size` were consolidated into
551
663
  `dock.css` (their canonical dock-styles home). They formerly lived
@@ -683,9 +795,12 @@
683
795
  `--duration-fast` + `--ease-standard` tokens. */
684
796
  @utility scale-on-hover {
685
797
  /* Individual-transform identity base (AQ.W3 §W3.2). Transition the `scale`
686
- longhand (not `transform`) so the migrated hover scale animates. */
798
+ longhand (not `transform`) so the migrated hover scale animates.
799
+ AX.W52 §6 doctrine — the `scale` transform leg rides `--spring-smooth`
800
+ (the settle register), NOT the bezier `--ease-standard` (a transform on a
801
+ bezier reads mechanical; springs read alive on transform). */
687
802
  scale: 1;
688
- transition: scale var(--duration-fast) var(--ease-standard);
803
+ transition: scale var(--duration-fast) var(--spring-smooth);
689
804
 
690
805
  &:hover {
691
806
  scale: var(--scale-hover);
@@ -824,28 +939,17 @@
824
939
  --ripple-radius: var(--ripple-radius-max, 12rem);
825
940
  }
826
941
 
827
- /* Sparkle glyph — hidden at rest, animated on hover. The star
828
- sweeps diagonally from top-left to bottom-right per the canonical
829
- sparkle-sweep keyframe (animations.css). */
830
- &::after {
831
- content: "✦";
832
- position: absolute;
833
- top: 0.25rem;
834
- left: 0.5rem;
835
- color: hsl(0 0% 100% / 0.7);
836
- font-size: 0.75rem;
837
- line-height: 1;
838
- pointer-events: none;
839
- opacity: 0;
840
- will-change: transform, opacity;
841
- z-index: 1;
842
- }
843
-
844
- @media (prefers-reduced-motion: no-preference) {
845
- &:hover::after {
846
- animation: sparkle-sweep var(--duration-sparkle) var(--ease-out-expo);
847
- }
848
- }
942
+ /* D6.b — the disco-star EXCISED. The `::after { content:"✦" }` glyph and
943
+ its `&:hover::after { animation: sparkle-sweep … }` trigger are gone (the
944
+ user's named removal: "remove the disco star from all glass-ui elements").
945
+ A primary action now announces itself by SETTLING into a richer surface,
946
+ not by emitting a sparkle: the whole hover affirmation rides the existing
947
+ `&:hover` specular catch-light box-shadow (`--glass-specular`, above) —
948
+ honest physics, not casino-skeuomorphism. Gold CTAs add the
949
+ `btn-gold-bg-sweep` metal-catch (a metal catching light is honest; a star
950
+ is not). One garish gesture out, zero garish gestures in. The
951
+ `sparkle-sweep` keyframe is TOMBSTONED in animations.css (empty body,
952
+ full delete in 3.11); `--duration-sparkle` is `@deprecated` in tokens.css. */
849
953
 
850
954
  /* PRM bracket — the press-ripple retires; the press still reads
851
955
  via the audacious recipe's transform/scale beat (the ripple is
@@ -873,14 +977,14 @@
873
977
  token triad (tokens.css §13).
874
978
 
875
979
  Design register:
876
- • PRM no-preference: shimmer sweeps continuously at `--duration-shimmer`
877
- rate; the sparkle-sweep (from btn-audacious) coexists on hover.
980
+ • PRM no-preference: the gold sweep IS the gold-CTA affirmation — a metal
981
+ catching light is honest physics (the disco-star is gone, D6.b).
878
982
  • PRM reduce: static gold tint shows on hover; no animation.
879
983
  • The gold shimmer is a background-image layer ABOVE the existing
880
984
  btn-audacious paper-grain + primary-radial layers, blended with
881
985
  `overlay` so the glass substrate reads through at partial opacity.
882
- • The `::before` ripple and `::after` sparkle from btn-audacious are
883
- unchanged; this modifier only retunes the hover background layers.
986
+ • The `::before` ripple from btn-audacious is unchanged; the `::after`
987
+ sparkle is EXCISED (D6.b) — this modifier only retunes the hover layers.
884
988
  • Consumer applies: `<Button variant="gold-audacious">Next →</Button>` */
885
989
  @utility btn-audacious-gold {
886
990
  /* At rest: a faint warm gold tint over the glass surface reads as "warm
@@ -893,27 +997,40 @@
893
997
  color-mix(in srgb, var(--color-gold) 8%, transparent)
894
998
  );
895
999
 
896
- /* Hover: replace the audacious primary-radial with a gold sweep shimmer.
897
- The shimmer gradient rides above the paper-grain texture; the `overlay`
898
- blend-mode concentrates the gold on bright grain facets and recedes on
899
- dark ones — the same lens metaphor as the btn-audacious primary radial. */
1000
+ /* Hover: deepen the plate to a SATURATED gold the white label clears (AW.W13
1001
+ names a "saturated gold backplate"; the D1 fix). The bottom layer is the
1002
+ OPAQUE fixed deep gold (`--color-gold-deep`, mode-INVARIANT) — a solid plate
1003
+ at ~6.5:1 (light) / ~5.5:1 (dark) against white, well below the ~0.18
1004
+ luminance floor white text needs for ≥4.5:1 (was a translucent 22-30% wash
1005
+ over near-cream glass → 1.29:1 white-on-pale-gold). The plate is FIXED-dark
1006
+ in both modes — deepening toward the mode-flipping `--foreground` brightened
1007
+ the dark plate to a cream-gold; `--color-gold-deep` does not flip. The
1008
+ shimmer sweep rides ABOVE as a LOW-alpha gold gradient (normal blend, ≤18% —
1009
+ it textures the plate without brightening it past the floor), and the
1010
+ paper-grain overlays for the disco facet. */
900
1011
  &:hover:not(:disabled) {
901
1012
  background-image:
902
1013
  var(--paper-clean-texture),
903
1014
  linear-gradient(
904
1015
  90deg,
905
1016
  transparent 0%,
906
- color-mix(in srgb, var(--color-gold-dark) 22%, transparent) 25%,
907
- color-mix(in srgb, var(--color-gold-light) 30%, transparent) 50%,
908
- color-mix(in srgb, var(--color-gold-dark) 22%, transparent) 75%,
1017
+ color-mix(in srgb, var(--color-gold) 14%, transparent) 25%,
1018
+ color-mix(in srgb, var(--color-gold) 18%, transparent) 50%,
1019
+ color-mix(in srgb, var(--color-gold) 14%, transparent) 75%,
909
1020
  transparent 100%
1021
+ ),
1022
+ linear-gradient(
1023
+ 135deg,
1024
+ var(--color-gold-deep),
1025
+ color-mix(in srgb, var(--color-gold-deep), var(--color-gold-dark) 18%) 50%,
1026
+ var(--color-gold-deep)
910
1027
  );
911
- background-blend-mode: overlay, normal;
912
- background-size: var(--paper-texture-size), 250% 100%;
913
- background-position: 0 0, 100% 0;
1028
+ background-blend-mode: overlay, normal, normal;
1029
+ background-size: var(--paper-texture-size), 250% 100%, 100% 100%;
1030
+ background-position: 0 0, 100% 0, 0 0;
914
1031
  box-shadow:
915
1032
  var(--glass-specular),
916
- 0 0 0 1px color-mix(in srgb, var(--color-gold) 30%, transparent),
1033
+ 0 0 0 1px color-mix(in srgb, var(--color-gold-dark) 40%, transparent),
917
1034
  0 0.5px 0 0 rgb(0 0 0 / 0.06);
918
1035
  }
919
1036
 
@@ -929,8 +1046,8 @@
929
1046
  a text-clip gradient). This variant sweeps the `background-position` of the
930
1047
  250% wide gradient across the button's bounding box. */
931
1048
  @keyframes btn-gold-bg-sweep {
932
- 0% { background-position: 0 0, 100% 0; }
933
- 100% { background-position: 0 0, -100% 0; }
1049
+ 0% { background-position: 0 0, 100% 0, 0 0; }
1050
+ 100% { background-position: 0 0, -100% 0, 0 0; }
934
1051
  }
935
1052
 
936
1053
  /* ── Table density utilities — AN.R0 ─────────────────────────────────────
@@ -1005,22 +1122,28 @@
1005
1122
 
1006
1123
  /* ── Interactive-button four-state recipe ────────────────────────────────
1007
1124
  `.btn-interactive` carries the canonical "Button-with-spring-hover"
1008
- four-state contract — transition + hover-scale (`--scale-hover`) +
1009
- active-press (`--scale-press`) + disabled-opacity + focus-ring fade-in.
1010
- The Button primitive's variants emit the four states except `hover:scale-*`;
1011
- this is the canonical opt-in that adds the spring-hover lift. Consumed by
1012
- keyframes.js at 7 sites. */
1125
+ four-state contract — transition + hover-scale + active-press + disabled-
1126
+ opacity + focus-ring fade-in. The Button primitive's variants emit the four
1127
+ states except `hover:scale-*`; this is the canonical opt-in that adds the
1128
+ spring-hover lift. Consumed by keyframes.js at 7 sites.
1129
+
1130
+ AX.W52 §6 — the hover lift is the restrained `--scale-hover-btn` (1.05, NOT
1131
+ the emphatic 1.08 `--scale-hover`) routed through `--spring-smooth` — the ONE
1132
+ button scale register the §6 doctrine records and the gate asserts across
1133
+ `.btn-pill`/`.tap-squish`/`.glass-btn`/`btn-interactive`. The surface legs
1134
+ stay on the bezier `--ease-standard` (a colour cross-fade reads as a wobble
1135
+ on a spring); only the `scale` transform leg springs. */
1013
1136
  @utility btn-interactive {
1014
1137
  /* AQ.W3 §W3.2 identity base */
1015
1138
  scale: 1;
1016
1139
  transition:
1017
1140
  background-color var(--duration-fast) var(--ease-standard),
1018
1141
  color var(--duration-fast) var(--ease-standard),
1019
- scale var(--duration-fast) var(--ease-standard),
1142
+ scale var(--duration-fast) var(--spring-smooth),
1020
1143
  opacity var(--duration-fast) var(--ease-standard);
1021
1144
 
1022
1145
  &:hover {
1023
- scale: var(--scale-hover);
1146
+ scale: var(--scale-hover-btn);
1024
1147
  }
1025
1148
 
1026
1149
  &:active {
@@ -1036,11 +1159,11 @@
1036
1159
  box-shadow: var(--focus-ring-shadow);
1037
1160
  outline: none;
1038
1161
  /* Fade in; base state has no box-shadow transition → instant
1039
- removal */
1162
+ removal. The `scale` leg keeps the `--spring-smooth` register. */
1040
1163
  transition:
1041
1164
  background-color var(--duration-fast) var(--ease-standard),
1042
1165
  color var(--duration-fast) var(--ease-standard),
1043
- scale var(--duration-fast) var(--ease-standard),
1166
+ scale var(--duration-fast) var(--spring-smooth),
1044
1167
  opacity var(--duration-fast) var(--ease-standard),
1045
1168
  box-shadow var(--duration-fast) var(--ease-standard);
1046
1169
  }
@@ -1068,36 +1191,52 @@ html.no-transition *::after {
1068
1191
  transition-duration: 0s !important;
1069
1192
  }
1070
1193
 
1071
- /* ── Forced-colors restoration (AQ.W2 §5) ──────────────────────────────
1194
+ /* ── Forced-colors focus + silhouette rung (AQ.W2 §5 · generalized AX.W36) ────
1072
1195
  Windows High Contrast / forced-colors mode STRIPS `box-shadow` — so the
1073
1196
  glass focus rings (box-shadow + `outline: none`) vanish, leaving keyboard
1074
- users with no visible focus (a WCAG 2.4.7 failure forced-colors exposes).
1075
- Restore a real `outline` keyed to the system `Highlight` color (outline
1076
- survives forced-colors; box-shadow does not). The box-shadow ring stays the
1077
- primary in normal mode (it carries the glass aesthetic) — these two are
1078
- mutually exclusive by media query, NOT a parallel path.
1079
-
1080
- `forced-color-adjust: none` is deliberately NOT used — glass-ui's
1081
- glassmorphic chrome is decorative and yields to the user's forced palette
1082
- (css forced-colors guidance). Baseline Widely Available; this IS the
1083
- fallback mechanism (it only activates under forced-colors), so no nested
1084
- guard. */
1197
+ users with no visible focus. Restore a real `outline` keyed to the system
1198
+ `Highlight` color (outline survives forced-colors; box-shadow does not). The
1199
+ box-shadow ring stays the primary in normal mode (it carries the glass
1200
+ aesthetic) — these two are mutually exclusive by media query, NOT a parallel
1201
+ path.
1202
+
1203
+ AX.W36 — the focus-survival selector set is GENERALIZED to the broader
1204
+ interactive surface: the dock CONTROLS (`.dock-icon-button` / `.dock-tab-button`
1205
+ / `.dock-select-trigger` / `.dock-dropdown-trigger`) + the pill button base
1206
+ (`.btn-pill`) all carry a box-shadow focus ring (dock.css / utilities.css) that
1207
+ vanishes under WHC just like the original five. This is the SAME `Highlight`
1208
+ outline rung extended to cover them — ONE block, ONE path (the glass-language
1209
+ structure-survival skin for the tier panes / StatusDot / floating surfaces lives
1210
+ co-located with the ladder it skins, in glass.css).
1211
+
1212
+ `forced-color-adjust: none` is deliberately NOT used — glass-ui's glassmorphic
1213
+ chrome is decorative and yields to the user's forced palette (css forced-colors
1214
+ guidance). Baseline Widely Available; this IS the fallback mechanism (it only
1215
+ activates under forced-colors), so no nested guard. */
1085
1216
  @media (forced-colors: active) {
1086
1217
  .focus-ring:focus-visible,
1087
1218
  .glass-btn:focus-visible,
1088
1219
  .interactive-item:focus-visible,
1220
+ .btn-pill:focus-visible,
1221
+ .dock-icon-button:focus-visible,
1222
+ .dock-tab-button:focus-visible,
1223
+ .dock-select-trigger:focus-visible,
1224
+ .dock-dropdown-trigger:focus-visible,
1089
1225
  .input-pill:focus,
1090
1226
  .input-pill:focus-visible {
1091
1227
  outline: 2px solid Highlight;
1092
1228
  outline-offset: 2px;
1093
1229
  }
1094
1230
 
1095
- /* Structural edges borne ONLY by box-shadow (the hairline catch-light /
1096
- glass pill edge / card plate) also vanish — restore a real border so
1097
- the silhouette survives. CanvasText is the system text/border color. */
1231
+ /* Structural edges borne ONLY by box-shadow (the hairline catch-light + the
1232
+ dock SHELL pill edge) also vanish — restore a real border so the silhouette
1233
+ survives. CanvasText is the system text/border color. The `.glass-dock`
1234
+ shell is OUT of the glass-material group BY DESIGN (it hand-rolls a parallel
1235
+ surface — see glass.css), so it keeps its WHC edge HERE; the five-rung ladder
1236
+ + `.glass-card` get their WHC border from the co-located glass-language skin
1237
+ in glass.css (one source per surface family, no double-declaration). */
1098
1238
  .hairline-accent,
1099
- .glass-dock,
1100
- .glass-card {
1239
+ .glass-dock {
1101
1240
  border: 1px solid CanvasText;
1102
1241
  }
1103
1242
  }
@@ -1108,12 +1247,13 @@ html.no-transition *::after {
1108
1247
  to the WCAG 2.5.5 (44px) minimum — ONE amendment retiring the per-consumer
1109
1248
  `min-h-[44px]` one-liners. Token-driven (`--touch-target`); fine-pointer
1110
1249
  byte-identical. Targets `Button size="icon"` (via the `data-size="icon"`
1111
- attr Button.vue reflects), ExpandableContainer + ResponsiveTabs triggers.
1250
+ attr Button.vue reflects), ExpandableContainer + SegmentedTabs (responsive
1251
+ mobile Select) triggers.
1112
1252
  `min-block/inline-size` only RAISES — a larger explicit size is never lost. */
1113
1253
  @media (pointer: coarse) {
1114
1254
  [data-size="icon"],
1115
1255
  .expandable-container__trigger,
1116
- .responsive-tabs__trigger {
1256
+ .segmented-tabs__trigger {
1117
1257
  min-block-size: var(--touch-target, 2.75rem);
1118
1258
  min-inline-size: var(--touch-target, 2.75rem);
1119
1259
  }
@@ -60,5 +60,56 @@
60
60
  @keyframes gl-vt-slide-in { from { opacity: 0; translate: 0 var(--vt-rise, 8px); } }
61
61
  @keyframes gl-vt-slide-out { to { opacity: 0; translate: 0 var(--vt-rise, 8px); } }
62
62
 
63
+ /* ── gl-shared-element — the named-pair MORPH group (D6.c M6) ──────────────────
64
+ * Distinct from `.gl-list-item` (a cross-fade of MANY members in a re-rank): a
65
+ * shared-element morph is ONE element that exists in BOTH the old and new states
66
+ * under the SAME `view-transition-name`, so the browser MORPHS it in place — the
67
+ * group interpolates its size+position (transform) while old/new cross-fade. The
68
+ * editorial case: the gallery card's title IS the dashboard masthead's title, so
69
+ * the name you clicked GROWS into the name you read (the card → masthead route
70
+ * morph). The consumer adds `view-transition-class: gl-shared-element` plus a
71
+ * MATCHED `view-transition-name: <id>` on BOTH the source and destination element
72
+ * (the MANDATORY runtime rule — ≤1 element per name per state, else the morph is
73
+ * skipped silently), and wraps the navigation in `useRouteTransition` /
74
+ * `startViewTransition`.
75
+ *
76
+ * The morph rides the SMOOTH register (the 700ms-class spring, C-ANIM-VIZ-MAP T1
77
+ * §7) — a longer, gentler curve than the list-item cross-fade, because a morph
78
+ * that travels across the viewport wants room to read. The old/new cross-fade is
79
+ * softened so the morphing GROUP is the figure and the rest recedes. */
80
+ ::view-transition-group(.gl-shared-element) {
81
+ animation-duration: var(--vt-morph-duration, var(--duration-slow, 500ms));
82
+ animation-timing-function: var(--vt-morph-ease, var(--spring-smooth, ease-in-out));
83
+ }
84
+ ::view-transition-old(.gl-shared-element),
85
+ ::view-transition-new(.gl-shared-element) {
86
+ /* The image pair cross-fades UNDER the group's size/position morph — softer
87
+ than the group curve so the morph (the size/position travel) is the figure
88
+ and the pixel cross-fade is the recessive fill. */
89
+ animation-duration: var(--vt-morph-duration, var(--duration-slow, 500ms));
90
+ animation-timing-function: var(--vt-ease, var(--spring-smooth, ease-in-out));
91
+ }
92
+
93
+ /* ── gl-expand — the plate → fullscreen MORPH recipe (D6.c M7) ─────────────────
94
+ * The expand verb (a plate growing to fullscreen) is a SHARED-ELEMENT morph, not
95
+ * an opacity jump-cut: the plate IS the fullscreen surface, growing. It is a
96
+ * specialization of `gl-shared-element` — the SAME named-pair morph, with the
97
+ * expand register (a touch snappier than a route morph, because the surface stays
98
+ * in place and only the rect grows, so it wants less travel-room). `ExpandableContainer`
99
+ * wires the `view-transition-name` plumbing on its plate↔fullscreen surfaces (an
100
+ * opt-in `viewTransitionName` prop), so a consumer opts in and the open/close
101
+ * mutation — wrapped in `startViewTransition` — morphs the plate's rect to the
102
+ * fullscreen rect and back. The named pair is the SAME element across states
103
+ * (the slot content), so the browser captures one group and grows it. */
104
+ ::view-transition-group(.gl-expand) {
105
+ animation-duration: var(--vt-expand-duration, var(--duration-normal, 240ms));
106
+ animation-timing-function: var(--vt-expand-ease, var(--spring-bouncy, ease-out));
107
+ }
108
+ ::view-transition-old(.gl-expand),
109
+ ::view-transition-new(.gl-expand) {
110
+ animation-duration: var(--vt-expand-duration, var(--duration-normal, 240ms));
111
+ animation-timing-function: var(--vt-ease, var(--spring-bouncy, ease-out));
112
+ }
113
+
63
114
  /* Keep the non-transitioned UI interactive while the snapshot animates. */
64
115
  ::view-transition { pointer-events: none; }
@@ -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 };