@mkbabb/glass-ui 3.6.0 → 3.7.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 (206) hide show
  1. package/dist/CardAction-D8nSE62a.js +163 -0
  2. package/dist/CollapsibleContent-D7UNsXQr.js +63 -0
  3. package/dist/{CommandShortcut-BiVyqipe.js → CommandShortcut-CY0aQTz5.js} +4 -4
  4. package/dist/{ContextMenuContent-De01_83g.js → ContextMenuContent-DGKZX1Du.js} +1 -1
  5. package/dist/{ContextMenuSubContent-DrWkXKQP.js → ContextMenuSubContent-BeDz7G6f.js} +4 -4
  6. package/dist/{DataTable-BGVXx0Ww.js → DataTable-gtPOLZvl.js} +14 -7
  7. package/dist/{DialogContent-IQ8_BRrC.js → DialogContent-DG1YMR-P.js} +24 -24
  8. package/dist/{DialogFooter-Er0wA3K6.js → DialogFooter-BCIaDP15.js} +2 -2
  9. package/dist/{DiscoGlyph-BaZ8OawK.js → DiscoGlyph-ZoBYpoxI.js} +1 -1
  10. package/dist/{GlyphFace-B_7vOmYn.js → GlyphFace-Ce_oe3tM.js} +1 -1
  11. package/dist/{HoverCardContent-ICfIMZX1.js → HoverCardContent-Bn0UBMY9.js} +1 -1
  12. package/dist/{HoverPopover-DTSYkJtw.js → HoverPopover-DXpOEw1P.js} +1 -1
  13. package/dist/{IconTooltip-DZlCkU-0.js → IconTooltip-Cu86JR4e.js} +1 -1
  14. package/dist/{Input-CRJ2owjN.js → Input-DWQQIOC4.js} +4 -1
  15. package/dist/{Label-CZk-3nTc.js → Label-DBc7bKzZ.js} +1 -1
  16. package/dist/{MetricBadge-BlrdbOGN.js → MetricBadge-D-bRaQUD.js} +1 -1
  17. package/dist/{Notification-DP_ApJLo.js → Notification-B5WHP3_1.js} +5 -4
  18. package/dist/{NumberFieldContent-Bhhmk95p.js → NumberFieldContent-CLNVR1iY.js} +5 -5
  19. package/dist/{PopoverContent-B8WtJECb.js → PopoverContent-F1bWnYoh.js} +2 -2
  20. package/dist/{Progress-DjM86vfb.js → Progress-c4vo4ALi.js} +6 -6
  21. package/dist/{ScrollingText-P9o_DuMn.js → ScrollingText-BEp377U5.js} +2 -2
  22. package/dist/{SelectScrollDownButton-BGn3rjs9.js → SelectScrollDownButton-DAo5NmY_.js} +8 -7
  23. package/dist/{Separator-C2XtAXRp.js → Separator-DZyqsCum.js} +1 -1
  24. package/dist/{Switch-x8n6husW.js → Switch-2rsAtDfA.js} +8 -2
  25. package/dist/TabsList-COqIdW7i.js +101 -0
  26. package/dist/{Toaster-DdhMKfus.js → Toaster-BMaeziJJ.js} +54 -60
  27. package/dist/{ToggleGroupItem-gyXj998A.js → ToggleGroupItem-C-AIkBUw.js} +13 -5
  28. package/dist/{TooltipProvider-D-JrSqDu.js → TooltipProvider-CD2IXfRv.js} +1 -1
  29. package/dist/{UnderlineTabs-CuIK16JI.js → UnderlineTabs-D_c1iYo-.js} +1 -1
  30. package/dist/animated-digit.js +2 -2
  31. package/dist/api/index.d.ts +1 -1
  32. package/dist/api.js +1 -1
  33. package/dist/aurora.js +690 -227
  34. package/dist/{badge-Cl6JZ1B7.js → badge-DHQrc_GQ.js} +13 -9
  35. package/dist/badge.js +1 -1
  36. package/dist/{button-BcMzVrqs.js → button-CAywcrhO.js} +6 -3
  37. package/dist/button.js +1 -1
  38. package/dist/card.js +2 -2
  39. package/dist/carousel.js +5 -5
  40. package/dist/{check-CdkxGxXJ.js → check-BBKKKSTf.js} +1 -1
  41. package/dist/{chevron-down-pBY8sYfV.js → chevron-down-BSkTP2aL.js} +1 -1
  42. package/dist/{chevron-right-BjeKC22V.js → chevron-right-sDM0Yvrf.js} +1 -1
  43. package/dist/{chevron-up-DBeNHUm1.js → chevron-up-CCOD_FTz.js} +1 -1
  44. package/dist/collapsible.js +1 -1
  45. package/dist/color-DjJCAQ6f.js +76 -0
  46. package/dist/color.js +2 -2
  47. package/dist/command.js +1 -1
  48. package/dist/compile-iM4IUB66.js +158 -0
  49. package/dist/components/custom/aurora/Aurora.vue.d.ts +1 -0
  50. package/dist/components/custom/aurora/composables/atoms.d.ts +60 -0
  51. package/dist/components/custom/aurora/composables/color.d.ts +7 -13
  52. package/dist/components/custom/aurora/composables/cursorModel.d.ts +35 -2
  53. package/dist/components/custom/aurora/composables/glSetup.d.ts +1 -1
  54. package/dist/components/custom/aurora/composables/gpuRuntime.d.ts +16 -0
  55. package/dist/components/custom/aurora/composables/runtime.d.ts +18 -0
  56. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +23 -0
  57. package/dist/components/custom/aurora/composables/useAurora.d.ts +6 -0
  58. package/dist/components/custom/aurora/composables/useCursorInteraction.d.ts +8 -0
  59. package/dist/components/custom/aurora/constants/presets.d.ts +55 -2
  60. package/dist/components/custom/aurora/constants/renderMode.d.ts +10 -0
  61. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +7 -0
  62. package/dist/components/custom/aurora/constants/shaders/brush.glsl.d.ts +1 -1
  63. package/dist/components/custom/aurora/constants/shaders/flow.glsl.d.ts +1 -1
  64. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +2 -2
  65. package/dist/components/custom/aurora/constants/shaders/painterly.wgsl.d.ts +7 -0
  66. package/dist/components/custom/aurora/constants/shaders/wake.wgsl.d.ts +4 -0
  67. package/dist/components/custom/aurora/index.d.ts +2 -1
  68. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +38 -0
  69. package/dist/components/custom/fourier-field/index.d.ts +2 -0
  70. package/dist/components/custom/fourier-field/math.d.ts +57 -0
  71. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +2 -0
  72. package/dist/components/custom/goo-blob/composables/useBlobMood.d.ts +14 -2
  73. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +45 -4
  74. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +1 -1
  75. package/dist/components/custom/goo-blob/index.d.ts +1 -1
  76. package/dist/components/custom/goo-blob/shaders/sdf-body.glsl.d.ts +1 -1
  77. package/dist/components/custom/goo-blob/shaders/watercolor-edges.glsl.d.ts +2 -2
  78. package/dist/components/custom/goo-blob/types.d.ts +40 -0
  79. package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +1 -1
  80. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  81. package/dist/components/ui/_shared/ModalOverlay.vue.d.ts +1 -1
  82. package/dist/components/ui/alert/index.d.ts +1 -1
  83. package/dist/components/ui/card/Card.vue.d.ts +10 -3
  84. package/dist/components/ui/card/CardAction.vue.d.ts +24 -0
  85. package/dist/components/ui/card/index.d.ts +1 -0
  86. package/dist/components/ui/collapsible/CollapsibleTrigger.vue.d.ts +5 -1
  87. package/dist/components/ui/tabs/TabsList.vue.d.ts +13 -3
  88. package/dist/components/ui/toast/Toast.vue.d.ts +5 -5
  89. package/dist/components/ui/toast/use-toast.d.ts +1 -1
  90. package/dist/composables/color/index.d.ts +50 -0
  91. package/dist/composables/glass/createGPUCanvas.d.ts +40 -0
  92. package/dist/composables/glass/webgl/createCanvasLifecycle.d.ts +45 -0
  93. package/dist/composables/glass/webgl/shaders/procedural-color.glsl.d.ts +3 -0
  94. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +4 -4
  95. package/dist/configurator.js +1 -1
  96. package/dist/confirm-dialog.js +3 -3
  97. package/dist/constellation.js +3 -3
  98. package/dist/context-menu.js +2 -2
  99. package/dist/controls.js +2 -2
  100. package/dist/dark.js +1 -1
  101. package/dist/data-table.js +1 -1
  102. package/dist/dialog.js +2 -2
  103. package/dist/disco-glyph.js +1 -1
  104. package/dist/dock.js +9 -9
  105. package/dist/{dockContext-spUj_-E5.js → dockContext-DLgrVWsU.js} +1 -1
  106. package/dist/dom.js +5 -5
  107. package/dist/{dropdown-menu-EFjl5iKo.js → dropdown-menu-BWpwutt0.js} +5 -5
  108. package/dist/dropdown-menu.js +1 -1
  109. package/dist/expandable-container.js +2 -2
  110. package/dist/forms.js +10 -7
  111. package/dist/fourier-field.d.ts +1 -0
  112. package/dist/fourier-field.js +166 -0
  113. package/dist/glass-carousel.js +1 -1
  114. package/dist/glass-panel.js +2 -2
  115. package/dist/glass-ui.css +1 -1
  116. package/dist/glass-ui.js +207 -192
  117. package/dist/glyph-face.js +2 -2
  118. package/dist/goo-blob.js +336 -234
  119. package/dist/header-ribbon.js +1 -1
  120. package/dist/hover-card.js +1 -1
  121. package/dist/hover-popover.js +1 -1
  122. package/dist/icon-tooltip.js +1 -1
  123. package/dist/instrument-chassis.js +1 -1
  124. package/dist/instrument-rail.js +1 -1
  125. package/dist/keyboard.js +1 -1
  126. package/dist/{keys-BFoma9vm.js → keys-Dyf_uTs5.js} +1 -1
  127. package/dist/label.js +1 -1
  128. package/dist/labeled-field.js +6 -6
  129. package/dist/metric-badge.js +1 -1
  130. package/dist/metric-stack.js +1 -1
  131. package/dist/{minimize-2-BP27-qBY.js → minimize-2-lcXOuc6V.js} +1 -1
  132. package/dist/motion-core.js +76 -106
  133. package/dist/motion.js +3 -3
  134. package/dist/notification.js +1 -1
  135. package/dist/number-field.js +1 -1
  136. package/dist/paper-backdrop.js +1 -1
  137. package/dist/popover.js +1 -1
  138. package/dist/progress.js +1 -1
  139. package/dist/pulse.js +1 -1
  140. package/dist/reactive.js +2 -2
  141. package/dist/responsive-tabs.js +2 -2
  142. package/dist/scrolling-text.js +1 -1
  143. package/dist/{search-DBG8qaRs.js → search-nbkvr2dC.js} +1 -1
  144. package/dist/search.js +8 -8
  145. package/dist/select.js +3 -3
  146. package/dist/separator.js +1 -1
  147. package/dist/{sheet-CQYYrkr9.js → sheet-Cv1uO-Gq.js} +4 -4
  148. package/dist/sheet.js +1 -1
  149. package/dist/{slider-CgNzRSh6.js → slider-BA9wIs5e.js} +5 -4
  150. package/dist/slider.js +1 -1
  151. package/dist/sortable-list.js +3 -3
  152. package/dist/styles/components.css +1 -1
  153. package/dist/styles/theme.css +49 -0
  154. package/dist/styles/typography.css +3 -3
  155. package/dist/styles/utilities.css +17 -13
  156. package/dist/supportsCssTimeline-C5oe0lnD.js +12 -0
  157. package/dist/switch.js +1 -1
  158. package/dist/tabs.js +3 -3
  159. package/dist/timeline.js +2 -2
  160. package/dist/toast.js +1 -1
  161. package/dist/toggle-group.js +1 -1
  162. package/dist/tooltip.js +1 -1
  163. package/dist/typewriter.js +1 -1
  164. package/dist/{useAnimatedNumber-DfVgP4te.js → useAnimatedNumber-C5I3wWd8.js} +1 -1
  165. package/dist/{useConfiguratorState-DUtC1jxr.js → useConfiguratorState-B24TcgIn.js} +5 -5
  166. package/dist/useScrollProgress-CAH8Ofwt.js +35 -0
  167. package/dist/{useTouchGate-CS5Csc2h.js → useTouchGate-YQRwyUGU.js} +1 -1
  168. package/dist/{vReveal-u2wSG2El.js → vReveal-BE2TsPoR.js} +6 -17
  169. package/dist/watercolor-dot.js +2 -2
  170. package/dist/{x-C4pz9nbD.js → x-Dfsegz9Y.js} +1 -1
  171. package/package.json +29 -1
  172. package/src/styles/theme.css +49 -0
  173. package/src/styles/typography.css +3 -3
  174. package/src/styles/utilities.css +17 -13
  175. package/dist/CardFooter-C390imy7.js +0 -129
  176. package/dist/CollapsibleContent-cauTbZEM.js +0 -52
  177. package/dist/TabsIndicator-DA0x9gPr.js +0 -97
  178. package/dist/color-DS-iLRVM.js +0 -33
  179. package/dist/compile-C62K_FpC.js +0 -106
  180. /package/dist/{InstrumentChassis-DaHIZCqy.js → InstrumentChassis-BLJBl1BW.js} +0 -0
  181. /package/dist/{InstrumentRail-B0qqLFN0.js → InstrumentRail-BElFwKyt.js} +0 -0
  182. /package/dist/{ModalOverlay-B_CBtqcE.js → ModalOverlay-D1VrWyoi.js} +0 -0
  183. /package/dist/{PaperBackdrop-D_YZW47j.js → PaperBackdrop-DCGoGatv.js} +0 -0
  184. /package/dist/{SelectGroup-CMdoCjRE.js → SelectGroup-BcaFjvP4.js} +0 -0
  185. /package/dist/{SelectSeparator-CaJnPF3_.js → SelectSeparator-COFMJGng.js} +0 -0
  186. /package/dist/{_plugin-vue_export-helper-C1je1s0u.js → _plugin-vue_export-helper-gLzyemvl.js} +0 -0
  187. /package/dist/{constants-C8NMonuo.js → constants-CS75AWHG.js} +0 -0
  188. /package/dist/{createContext-DBMGRlx4.js → createContext-CvNyBk4o.js} +0 -0
  189. /package/dist/{createLucideIcon-DuDoe_ra.js → createLucideIcon-B6uNAU9G.js} +0 -0
  190. /package/dist/{menuItemVariants-C2QlXqT3.js → menuItemVariants-B4eFR5Ix.js} +0 -0
  191. /package/dist/{presets-Dyv9Zl7W.js → presets-BKVyQfbt.js} +0 -0
  192. /package/dist/{prng-CjVgzjQT.js → prng-wHuHlNHE.js} +0 -0
  193. /package/dist/{useCanvas2D-BeNJqqIS.js → useCanvas2D-C31yfUGY.js} +0 -0
  194. /package/dist/{useGlassRenderer-Dn3WpfG-.js → useGlassRenderer-HebgSEgN.js} +0 -0
  195. /package/dist/{useGlobalDark-D7R9OypB.js → useGlobalDark-yhL4Wp-s.js} +0 -0
  196. /package/dist/{useIntersectionPause-DsQYGc8V.js → useIntersectionPause-Cc-H9ees.js} +0 -0
  197. /package/dist/{useInterval-CHVYFpXV.js → useInterval-D3USn0yc.js} +0 -0
  198. /package/dist/{useKeyboardShortcuts-i8tHd5WO.js → useKeyboardShortcuts-Be3w_Rwk.js} +0 -0
  199. /package/dist/{useResizeObserver-DX-STszm.js → useResizeObserver-CSyxGxIX.js} +0 -0
  200. /package/dist/{useSortable-muI29agz.js → useSortable-C8ReQ50P.js} +0 -0
  201. /package/dist/{useSpringMount-CnizvZGm.js → useSpringMount-LRZqJTaF.js} +0 -0
  202. /package/dist/{useTextHighlight-Dmtofpk2.js → useTextHighlight-aMPdEpkq.js} +0 -0
  203. /package/dist/{useTimer-DGgoxTXL.js → useTimer-DEJonOZa.js} +0 -0
  204. /package/dist/{useUserInvalidAria-DmvZ_6Dx.js → useUserInvalidAria-CQKjEfwP.js} +0 -0
  205. /package/dist/{useViewTransition-DI0Rs2rV.js → useViewTransition-DaN5Zrox.js} +0 -0
  206. /package/dist/{useViewportReady-Dcvf0c4p.js → useViewportReady-K96m-Mdv.js} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mkbabb/glass-ui",
3
- "version": "3.6.0",
3
+ "version": "3.7.0",
4
4
  "description": "Glassmorphic design system — Vue 3.5 components, reka-ui primitives, Tailwind CSS v4 tokens",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -52,6 +52,9 @@
52
52
  "color": [
53
53
  "dist/color.d.ts"
54
54
  ],
55
+ "fourier-field": [
56
+ "dist/fourier-field.d.ts"
57
+ ],
55
58
  "goo-blob": [
56
59
  "dist/goo-blob.d.ts"
57
60
  ],
@@ -293,6 +296,10 @@
293
296
  "types": "./dist/color.d.ts",
294
297
  "import": "./dist/color.js"
295
298
  },
299
+ "./fourier-field": {
300
+ "types": "./dist/fourier-field.d.ts",
301
+ "import": "./dist/fourier-field.js"
302
+ },
296
303
  "./goo-blob": {
297
304
  "types": "./dist/goo-blob.d.ts",
298
305
  "import": "./dist/goo-blob.js"
@@ -584,7 +591,10 @@
584
591
  "proof:frostShader-deleted": "node scripts/proof-frostshader-deleted.mjs",
585
592
  "proof:slider-two-only": "node scripts/proof-slider-two-only.mjs",
586
593
  "proof:storybook-ia": "node scripts/proof-storybook-ia.mjs",
594
+ "proof:storybook-complete": "node scripts/proof-storybook-complete.mjs",
587
595
  "proof:no-orphan-demo-route": "node scripts/proof-no-orphan-demo-route.mjs",
596
+ "proof:demo-dock-nav": "node scripts/proof-demo-dock-nav.mjs",
597
+ "proof:demo-dock-nav-runtime": "node scripts/proof-demo-dock-nav-runtime.mjs",
588
598
  "proof:font-canon": "node scripts/proof-font-canon.mjs",
589
599
  "proof:webgl-substrate-single": "node scripts/proof-webgl-substrate-single.mjs",
590
600
  "proof:blob-value-free": "node scripts/proof-blob-value-free.mjs",
@@ -592,9 +602,24 @@
592
602
  "proof:motion-value-free": "node scripts/proof-motion-value-free.mjs",
593
603
  "proof:no-value-default": "node scripts/proof-no-value-default.mjs",
594
604
  "proof:blob-space-gamma": "node scripts/proof-blob-space-gamma.mjs",
605
+ "proof:blob-smin-normalized": "node scripts/proof-blob-smin-normalized.mjs",
606
+ "proof:blob-gradient-unit-length": "node scripts/proof-blob-gradient-unit-length.mjs",
607
+ "proof:blob-spec-premult": "node scripts/proof-blob-spec-premult.mjs",
608
+ "proof:blob-interaction-prm": "node scripts/proof-blob-interaction-prm.mjs",
609
+ "proof:blob-mood-resolved": "node scripts/proof-blob-mood-resolved.mjs",
610
+ "proof:blob-tempo-suppression": "node scripts/proof-blob-tempo-suppression.mjs",
595
611
  "proof:aurora-space-gamma": "node scripts/proof-aurora-space-gamma.mjs",
596
612
  "proof:aurora-oklch-interp": "node scripts/proof-aurora-oklch-interp.mjs",
597
613
  "proof:aurora-derive-gamut": "vitest run tests/components/custom/aurora/derive-color.test.ts",
614
+ "proof:aurora-tensor-field": "node scripts/proof-aurora-tensor-field.mjs && vitest run tests/components/custom/aurora/painterly.test.ts",
615
+ "proof:aurora-impasto-relight": "node scripts/proof-aurora-impasto-relight.mjs",
616
+ "proof:aurora-vangogh-preset": "node scripts/proof-aurora-vangogh-preset.mjs",
617
+ "proof:aurora-oilpastel-medium": "node scripts/proof-aurora-oilpastel-medium.mjs",
618
+ "proof:aurora-atoms-roundtrip": "node scripts/proof-aurora-atoms-roundtrip.mjs",
619
+ "proof:aurora-wgsl-equivalence": "node scripts/proof-aurora-wgsl-equivalence.mjs",
620
+ "proof:aurora-backend-fallback": "node scripts/proof-aurora-backend-fallback.mjs",
621
+ "proof:webgpu-substrate-single": "node scripts/proof-webgpu-substrate-single.mjs",
622
+ "proof:aurora-interaction-prm": "node scripts/proof-aurora-interaction-prm.mjs",
598
623
  "proof:shader-shared-source": "node scripts/proof-shader-shared-source.mjs",
599
624
  "proof:blob-color-equivalence": "vitest run tests/components/custom/goo-blob/blob-color-equivalence.test.ts",
600
625
  "proof:fail-explicit": "node scripts/proof-fail-explicit.mjs",
@@ -620,6 +645,9 @@
620
645
  "proof:glass-card-tiers": "node scripts/proof-glass-card-tiers.mjs",
621
646
  "proof:primitive-affordance": "node scripts/proof-primitive-affordance.mjs",
622
647
  "proof:reka-binding-idiom": "node scripts/proof-reka-binding-idiom.mjs",
648
+ "proof:animation-coherence": "node scripts/proof-animation-coherence.mjs",
649
+ "proof:design-md-current": "node scripts/proof-design-md-current.mjs",
650
+ "proof:naming-consistency": "node scripts/proof-naming-consistency.mjs",
623
651
  "proof:all": "node scripts/gates.mjs --run local",
624
652
  "gates:verify-ci": "node scripts/gates.mjs --verify-ci",
625
653
  "profile:bundle": "node scripts/profile-bundle.mjs",
@@ -47,6 +47,15 @@
47
47
  --radius-dialog: var(--radius-2xl);
48
48
  --radius-input: var(--radius);
49
49
  --radius-button: var(--radius);
50
+ /* AW.W25 — form-radius unification. `--radius-field` is the non-pill field
51
+ rung the multi-line / stepper form atoms (Textarea, NumberFieldInput)
52
+ resolve so a multi-line box stops inheriting the `9999px` stadium pill;
53
+ single-line controls (Input, SelectTrigger) keep the pill. `--radius-control`
54
+ is the semantic control-corner rung that retires the raw `rounded-sm` (4px)
55
+ on Checkbox + base Tabs onto a softer, named radius. One geometry language
56
+ across the form family — token + class only, no new primitive. */
57
+ --radius-field: var(--radius-2xl);
58
+ --radius-control: var(--radius-md);
50
59
  --radius-badge: var(--radius-pill);
51
60
  --radius-dock: var(--radius-pill);
52
61
  /* AW.W3b — the big-dock card shell's default (comfortable-density) radius.
@@ -416,6 +425,46 @@
416
425
  ═══════════════════════════════════════════════ */
417
426
  --opacity-disabled: 0.5;
418
427
  --opacity-icon-muted: 0.8;
428
+
429
+ /* ═══════════════════════════════════════════════
430
+ text-shadow → text-shadow-* utilities (AW.W26)
431
+
432
+ text-shadow is the lone shadow family that shipped no `@theme` bridge
433
+ (Tailwind v4.1 minted the `text-shadow-{2xs,xs,sm,md,lg}` utilities). The
434
+ rungs are warm-`--shadow-color`-derived via `color-mix` per the box-shadow
435
+ ladder (tokens.css §7) + the cartoon-shadow precept's one-source chain, so
436
+ they re-tint under `.dark` BY CONSTRUCTION — `--shadow-color: var(--foreground)`
437
+ flips light→dark with no hardcoded `.dark` re-declaration. The hand-rolled
438
+ multi-stop `text-shadow:` literals in `.depth-text` (utilities.css) +
439
+ `.text-engraved` (typography.css) now compose these tokens. */
440
+ --text-shadow-2xs: 0 1px 0 color-mix(in srgb, var(--shadow-color) 12%, transparent);
441
+ --text-shadow-xs: 0 1px 1px color-mix(in srgb, var(--shadow-color) 16%, transparent);
442
+ --text-shadow-sm: 0 1px 0 color-mix(in srgb, var(--shadow-color) 14%, transparent),
443
+ 0 2px 3px color-mix(in srgb, var(--shadow-color) 18%, transparent);
444
+ --text-shadow-md: 0 1px 0 color-mix(in srgb, var(--shadow-color) 16%, transparent),
445
+ 0 2px 4px color-mix(in srgb, var(--shadow-color) 20%, transparent),
446
+ 0 4px 8px color-mix(in srgb, var(--shadow-color) 14%, transparent);
447
+ --text-shadow-lg: 0 1px 0 color-mix(in srgb, var(--shadow-color) 18%, transparent),
448
+ 0 2px 4px color-mix(in srgb, var(--shadow-color) 22%, transparent),
449
+ 0 6px 12px color-mix(in srgb, var(--shadow-color) 18%, transparent);
450
+
451
+ /* Two IDENTITY text-shadow tokens — the hard offset STAMP (`.depth-text`)
452
+ + the two-stop EMBOSS (`.text-engraved`). These hold the multi-stop
453
+ literals INSIDE the `@theme` defs so the utilities compose `var(--text-shadow-*)`
454
+ and no raw `text-shadow:` literal survives in `utilities.css`/`typography.css`
455
+ (AW.W26 gate 4). Both are `--shadow-color`/surface-tint-derived, so they
456
+ re-tint under `.dark` BY CONSTRUCTION. */
457
+ --text-shadow-depth: 1px 1px 0 var(--shadow),
458
+ 2px 2px 0 var(--shadow),
459
+ 3px 3px 0 var(--shadow),
460
+ 4px 4px 0 var(--shadow),
461
+ 5px 5px 0 var(--shadow),
462
+ 5px 5px 1px color-mix(in srgb, var(--shadow-color) 10%, transparent),
463
+ 2px 2px 2px color-mix(in srgb, var(--shadow-color) 20%, transparent),
464
+ 4px 4px 5px color-mix(in srgb, var(--shadow-color) 25%, transparent),
465
+ 6px 6px 10px color-mix(in srgb, var(--shadow-color) 15%, transparent);
466
+ --text-shadow-engraved: 0 1px 0 color-mix(in srgb, var(--background) 30%, transparent),
467
+ 0 -1px 0 var(--surface-tint-8);
419
468
  }
420
469
 
421
470
  /* Class-based dark mode */
@@ -486,8 +486,8 @@ body {
486
486
  surface read as a fade, not as engraving. */
487
487
  .text-engraved {
488
488
  color: var(--muted-foreground);
489
- text-shadow:
490
- 0 1px 0 color-mix(in srgb, var(--background) 30%, transparent),
491
- 0 -1px 0 var(--surface-tint-8);
489
+ /* AW.W26 — composes the `--text-shadow-engraved` @theme identity token
490
+ (the two-stop emboss) instead of a hand-rolled literal (gate 4). */
491
+ text-shadow: var(--text-shadow-engraved);
492
492
  }
493
493
  }
@@ -173,7 +173,12 @@
173
173
  box-shadow: var(--focus-ring-shadow);
174
174
  }
175
175
  .interactive-item:active {
176
- scale: 0.98;
176
+ /* AW.W31.a — fold the residual literal press scale onto the canonical
177
+ `--scale-press*` cohort (the prior `0.98` was the sole per-atom press
178
+ literal surviving the W2/W3/W25 sweeps). `--scale-press-sm` (0.97) is
179
+ the soft press rung the button + slider recipes consume — ONE press
180
+ vocabulary, no per-atom literal. The 0.98→0.97 delta is sub-perceptual. */
181
+ scale: var(--scale-press-sm);
177
182
  }
178
183
  .interactive-item:disabled,
179
184
  .interactive-item[data-disabled] {
@@ -227,22 +232,16 @@
227
232
  background var(--duration-fast) var(--ease-standard),
228
233
  box-shadow var(--duration-fast) var(--ease-standard);
229
234
  }
230
- /* ── Depth text (layered shadow with customizable colors) ── */
235
+ /* ── Depth text (layered offset stamp) ──
236
+ AW.W26 — composes the `--text-shadow-depth` @theme identity token (the
237
+ hard offset stack + soft ambient tail) instead of a hand-rolled multi-stop
238
+ literal. The token holds the stack inside the `@theme` defs (gate 4) and
239
+ re-tints under `.dark` via `--shadow`/`--shadow-color` BY CONSTRUCTION. */
231
240
  .depth-text {
232
241
  --depth-color-primary: var(--primary);
233
- --depth-color-shadow: var(--shadow);
234
242
 
235
243
  color: var(--depth-color-primary);
236
- text-shadow:
237
- 1px 1px 0 var(--depth-color-shadow),
238
- 2px 2px 0 var(--depth-color-shadow),
239
- 3px 3px 0 var(--depth-color-shadow),
240
- 4px 4px 0 var(--depth-color-shadow),
241
- 5px 5px 0 var(--depth-color-shadow),
242
- 5px 5px 1px color-mix(in srgb, var(--shadow-color) 10%, transparent),
243
- 2px 2px 2px color-mix(in srgb, var(--shadow-color) 20%, transparent),
244
- 4px 4px 5px color-mix(in srgb, var(--shadow-color) 25%, transparent),
245
- 6px 6px 10px color-mix(in srgb, var(--shadow-color) 15%, transparent);
244
+ text-shadow: var(--text-shadow-depth);
246
245
  }
247
246
 
248
247
  /* ── 3D preserve ── */
@@ -397,6 +396,11 @@
397
396
 
398
397
  .metric-badge > span {
399
398
  line-height: 1;
399
+ /* AW.W26 — `wrap-anywhere` (overflow-wrap: anywhere) on the value slot:
400
+ a long metric value breaks WITHIN the badge rather than being clipped
401
+ by the host `overflow: hidden`. v4.1 `wrap-anywhere` / mwg css §7.
402
+ Scoped to the value span, NOT a universal selector (mwg perf caveat). */
403
+ overflow-wrap: anywhere;
400
404
  }
401
405
 
402
406
  .metric-badge:hover {
@@ -1,129 +0,0 @@
1
- import { t as e } from "./cn-DJXf4yaB.js";
2
- import { t } from "./_plugin-vue_export-helper-C1je1s0u.js";
3
- import { createBlock as n, createElementBlock as r, defineComponent as i, normalizeClass as a, openBlock as o, renderSlot as s, unref as c, withCtx as l } from "vue";
4
- import { Primitive as u } from "reka-ui";
5
- var d = /* @__PURE__ */ i({
6
- __name: "Card",
7
- props: {
8
- tier: { default: "resting" },
9
- surface: { default: "glass" },
10
- shadow: {
11
- type: Boolean,
12
- default: !0
13
- },
14
- grain: {
15
- type: Boolean,
16
- default: !0
17
- },
18
- class: { type: [
19
- Boolean,
20
- null,
21
- String,
22
- Object,
23
- Array
24
- ] },
25
- asChild: { type: Boolean },
26
- as: { default: "div" }
27
- },
28
- setup(t) {
29
- let r = t;
30
- return (i, d) => (o(), n(c(u), {
31
- "data-slot": "card",
32
- "data-tier": t.tier,
33
- "data-surface": t.surface,
34
- "data-grain": t.grain,
35
- as: t.as,
36
- "as-child": t.asChild,
37
- class: a(c(e)("rounded-card text-card-foreground scrollbar-hidden", `glass-${t.tier}`, t.surface === "glass" && "glass-specular-track", t.surface === "cartoon" && "cartoon-surface", t.shadow && t.surface === "glass" && "shadow-card", !t.grain && "[&::after]:hidden", r.class))
38
- }, {
39
- default: l(() => [s(i.$slots, "default")]),
40
- _: 3
41
- }, 8, [
42
- "data-tier",
43
- "data-surface",
44
- "data-grain",
45
- "as",
46
- "as-child",
47
- "class"
48
- ]));
49
- }
50
- }), f = /* @__PURE__ */ t(/* @__PURE__ */ i({
51
- __name: "CardHeader",
52
- props: {
53
- shrink: { type: Boolean },
54
- class: { type: [
55
- Boolean,
56
- null,
57
- String,
58
- Object,
59
- Array
60
- ] }
61
- },
62
- setup(t) {
63
- let n = t;
64
- return (i, l) => (o(), r("div", {
65
- "data-slot": "card-header",
66
- class: a(c(e)("flex flex-col gap-y-1.5 p-6", t.shrink && "card-header--shrink", n.class))
67
- }, [s(i.$slots, "default", {}, void 0, !0)], 2));
68
- }
69
- }), [["__scopeId", "data-v-522d190a"]]), p = /* @__PURE__ */ i({
70
- __name: "CardTitle",
71
- props: { class: { type: [
72
- Boolean,
73
- null,
74
- String,
75
- Object,
76
- Array
77
- ] } },
78
- setup(t) {
79
- let n = t;
80
- return (t, i) => (o(), r("h3", {
81
- "data-slot": "card-title",
82
- class: a(c(e)("text-heading leading-none tracking-tight", n.class))
83
- }, [s(t.$slots, "default")], 2));
84
- }
85
- }), m = /* @__PURE__ */ i({
86
- __name: "CardDescription",
87
- props: { class: { type: [
88
- Boolean,
89
- null,
90
- String,
91
- Object,
92
- Array
93
- ] } },
94
- setup(t) {
95
- let n = t;
96
- return (t, i) => (o(), r("p", {
97
- "data-slot": "card-description",
98
- class: a(c(e)("text-sm text-muted-foreground-strong", n.class))
99
- }, [s(t.$slots, "default")], 2));
100
- }
101
- }), h = /* @__PURE__ */ i({
102
- __name: "CardContent",
103
- props: { class: { type: [
104
- Boolean,
105
- null,
106
- String,
107
- Object,
108
- Array
109
- ] } },
110
- setup(t) {
111
- let n = t;
112
- return (t, i) => (o(), r("div", { class: a(c(e)("p-6", n.class)) }, [s(t.$slots, "default")], 2));
113
- }
114
- }), g = /* @__PURE__ */ i({
115
- __name: "CardFooter",
116
- props: { class: { type: [
117
- Boolean,
118
- null,
119
- String,
120
- Object,
121
- Array
122
- ] } },
123
- setup(t) {
124
- let n = t;
125
- return (t, i) => (o(), r("div", { class: a(c(e)("flex items-center p-6 pt-0", n.class)) }, [s(t.$slots, "default")], 2));
126
- }
127
- });
128
- //#endregion
129
- export { f as a, p as i, h as n, d as o, m as r, g as t };
@@ -1,52 +0,0 @@
1
- import { createBlock as e, defineComponent as t, guardReactiveProps as n, mergeProps as r, normalizeProps as i, openBlock as a, renderSlot as o, unref as s, withCtx as c } from "vue";
2
- import { CollapsibleContent as l, CollapsibleRoot as u, CollapsibleTrigger as d, useForwardPropsEmits as f } from "reka-ui";
3
- //#endregion
4
- //#region src/components/ui/collapsible/Collapsible.vue
5
- var p = /* @__PURE__ */ t({
6
- __name: "Collapsible",
7
- props: {
8
- defaultOpen: { type: Boolean },
9
- open: { type: Boolean },
10
- disabled: { type: Boolean },
11
- unmountOnHide: { type: Boolean },
12
- asChild: { type: Boolean },
13
- as: {}
14
- },
15
- emits: ["update:open"],
16
- setup(t, { emit: r }) {
17
- let l = f(t, r);
18
- return (t, r) => (a(), e(s(u), i(n(s(l))), {
19
- default: c(({ open: e }) => [o(t.$slots, "default", { open: e })]),
20
- _: 3
21
- }, 16));
22
- }
23
- }), m = /* @__PURE__ */ t({
24
- __name: "CollapsibleTrigger",
25
- props: {
26
- asChild: { type: Boolean },
27
- as: {}
28
- },
29
- setup(t) {
30
- let r = t;
31
- return (t, l) => (a(), e(s(d), i(n(r)), {
32
- default: c(() => [o(t.$slots, "default")]),
33
- _: 3
34
- }, 16));
35
- }
36
- }), h = /* @__PURE__ */ t({
37
- __name: "CollapsibleContent",
38
- props: {
39
- forceMount: { type: Boolean },
40
- asChild: { type: Boolean },
41
- as: {}
42
- },
43
- setup(t) {
44
- let n = t;
45
- return (t, i) => (a(), e(s(l), r(n, { class: "overflow-hidden transition-collapse data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down" }), {
46
- default: c(() => [o(t.$slots, "default")]),
47
- _: 3
48
- }, 16));
49
- }
50
- });
51
- //#endregion
52
- export { m as n, p as r, h as t };
@@ -1,97 +0,0 @@
1
- import { t as e } from "./cn-DJXf4yaB.js";
2
- import { computed as t, createBlock as n, defineComponent as r, guardReactiveProps as i, mergeProps as a, normalizeProps as o, openBlock as s, renderSlot as c, unref as l, withCtx as u } from "vue";
3
- import { TabsIndicator as d, TabsList as f, TabsRoot as p, TabsTrigger as m, useForwardProps as h, useForwardPropsEmits as g } from "reka-ui";
4
- //#endregion
5
- //#region src/components/ui/tabs/Tabs.vue
6
- var _ = /* @__PURE__ */ r({
7
- __name: "Tabs",
8
- props: {
9
- defaultValue: {},
10
- orientation: {},
11
- dir: {},
12
- activationMode: {},
13
- modelValue: {},
14
- unmountOnHide: { type: Boolean },
15
- asChild: { type: Boolean },
16
- as: {}
17
- },
18
- emits: ["update:modelValue"],
19
- setup(e, { emit: t }) {
20
- let r = g(e, t);
21
- return (e, t) => (s(), n(l(p), o(i(l(r))), {
22
- default: u(() => [c(e.$slots, "default")]),
23
- _: 3
24
- }, 16));
25
- }
26
- }), v = /* @__PURE__ */ r({
27
- __name: "TabsTrigger",
28
- props: {
29
- value: {},
30
- disabled: { type: Boolean },
31
- asChild: { type: Boolean },
32
- as: {},
33
- class: { type: [
34
- Boolean,
35
- null,
36
- String,
37
- Object,
38
- Array
39
- ] }
40
- },
41
- setup(r) {
42
- let i = r, o = h(t(() => {
43
- let { class: e, ...t } = i;
44
- return t;
45
- }));
46
- return (t, r) => (s(), n(l(m), a(l(o), { class: l(e)("focus-ring inline-flex items-center justify-center whitespace-nowrap rounded-sm p-1 px-3 text-sm font-medium transition-control disabled:pointer-events-none disabled:opacity-disabled data-[state=active]:text-[var(--active-tab-color,var(--foreground))] hover:text-foreground/70", i.class) }), {
47
- default: u(() => [c(t.$slots, "default")]),
48
- _: 3
49
- }, 16, ["class"]));
50
- }
51
- }), y = /* @__PURE__ */ r({
52
- __name: "TabsList",
53
- props: {
54
- loop: { type: Boolean },
55
- asChild: { type: Boolean },
56
- as: {},
57
- class: { type: [
58
- Boolean,
59
- null,
60
- String,
61
- Object,
62
- Array
63
- ] }
64
- },
65
- setup(r) {
66
- let i = r, o = t(() => {
67
- let { class: e, ...t } = i;
68
- return t;
69
- });
70
- return (t, r) => (s(), n(l(f), a(o.value, { class: l(e)("inline-flex h-10 items-center justify-center rounded-input p-1 text-muted-foreground", i.class) }), {
71
- default: u(() => [c(t.$slots, "default")]),
72
- _: 3
73
- }, 16, ["class"]));
74
- }
75
- }), b = /* @__PURE__ */ r({
76
- __name: "TabsIndicator",
77
- props: {
78
- asChild: { type: Boolean },
79
- as: {},
80
- class: { type: [
81
- Boolean,
82
- null,
83
- String,
84
- Object,
85
- Array
86
- ] }
87
- },
88
- setup(r) {
89
- let i = r, o = t(() => {
90
- let { class: e, ...t } = i;
91
- return t;
92
- });
93
- return (t, r) => (s(), n(l(d), a(o.value, { class: l(e)("absolute left-0 h-(--reka-tabs-indicator-size) translate-x-(--reka-tabs-indicator-position) rounded-pill bg-secondary/80 transition-[width,transform] duration-normal ease-spring-snappy", i.class) }), null, 16, ["class"]));
94
- }
95
- });
96
- //#endregion
97
- export { _ as i, y as n, v as r, b as t };
@@ -1,33 +0,0 @@
1
- import { colorUnit2 as e, oklabToLinearSRGB as t, oklabToRgb255 as n, parseCSSColor as r, rawOklabToOklch as i, rawOklchToOklab as a, srgbToOKLab as o } from "@mkbabb/value.js";
2
- //#region src/composables/color/index.ts
3
- function s(e) {
4
- let [n, r, i] = a(e.L, e.C, e.h), [o, s, c] = t(n, r, i);
5
- return [
6
- Math.max(0, o),
7
- Math.max(0, s),
8
- Math.max(0, c)
9
- ];
10
- }
11
- function c(e) {
12
- let [t, r, i] = a(e.L, e.C, e.h), [o, s, c] = n(t, r, i), l = (e) => Math.min(1, Math.max(0, e / 255));
13
- return [
14
- l(o),
15
- l(s),
16
- l(c)
17
- ];
18
- }
19
- function l(t) {
20
- let n = e(r(t), "rgb").value, [a, s, c] = o(Number(n.r), Number(n.g), Number(n.b)), [l, u, d] = i(a, s, c);
21
- return {
22
- L: l,
23
- C: u,
24
- h: d
25
- };
26
- }
27
- function u(e) {
28
- let [t, r, i] = a(e.L, e.C, e.h), [o, s, c] = n(t, r, i), l = (e) => Math.round(e).toString(16).padStart(2, "0");
29
- return `#${l(o)}${l(s)}${l(c)}`;
30
- }
31
- var d = (e) => c(l(e));
32
- //#endregion
33
- export { s as a, c as i, d as n, u as r, l as t };
@@ -1,106 +0,0 @@
1
- //#region src/composables/glass/webgl/shaders/procedural-color.glsl.ts
2
- var e = "\nfloat srgbToLinearCh(float c) {\n return c <= 0.04045 ? c / 12.92 : pow((c + 0.055) / 1.055, 2.4);\n}\nvec3 srgbToLinear(vec3 c) {\n return vec3(srgbToLinearCh(c.r), srgbToLinearCh(c.g), srgbToLinearCh(c.b));\n}\n\nfloat linearToSrgbCh(float c) {\n return c <= 0.0031308 ? c * 12.92 : 1.055 * pow(c, 1.0 / 2.4) - 0.055;\n}\nvec3 linearToSrgb(vec3 c) {\n return vec3(linearToSrgbCh(c.r), linearToSrgbCh(c.g), linearToSrgbCh(c.b));\n}", t = "const mat2 FBM_ROT = mat2(0.8, 0.6, -0.6, 0.8);", n = "\n// value.js LINEAR_SRGB_TO_LMS (constants.ts), row-major; written here as GLSL\n// columns (= the transpose) so mat3 * vec3 evaluates the row-major M·v.\nconst mat3 LINEAR_SRGB_TO_LMS = mat3(\n 0.4122214708, 0.2119034982, 0.0883024619,\n 0.5363325363, 0.6806995451, 0.2817188376,\n 0.0514459929, 0.1073969566, 0.6299787005\n);\n\n// value.js srgbToOKLab's INLINE LMS→OKLab coefficients (gamut.ts lines 295-297 —\n// these differ at the ~1e-9 digit from LMS_TO_OKLAB_MATRIX; use the inline ones to\n// mirror the exact value.js path), row-major → GLSL columns.\nconst mat3 LMS_TO_OKLAB = mat3(\n 0.2104542553, 1.9779984951, 0.0259040371,\n 0.7936177850, -2.4285922050, 0.7827717662,\n -0.0040720468, 0.4505937099, -0.8086757660\n);\n\n// value.js OKLAB_TO_LMS_COEFF (constants.ts), row-major → GLSL columns. Rows:\n// l = [1, 0.3963377774, 0.2158037573], m = [1, -0.1055613458, -0.0638541728],\n// s = [1, -0.0894841775, -1.2914855480].\nconst mat3 OKLAB_TO_LMS = mat3(\n 1.0, 1.0, 1.0,\n 0.3963377774, -0.1055613458, -0.0894841775,\n 0.2158037573, -0.0638541728, -1.2914855480\n);\n\n// value.js LMS_TO_LINEAR_SRGB (constants.ts), row-major → GLSL columns.\nconst mat3 LMS_TO_LINEAR_SRGB = mat3(\n 4.0767416621, -1.2684380046, -0.0041960863,\n -3.3077115913, 2.6097574011, -0.7034186147,\n 0.2309699292, -0.3413193965, 1.7076147010\n);\n\n// Gamma sRGB → raw OKLab (L, a, b). Mirrors value.js srgbToOKLab.\nvec3 srgbToOklab(vec3 c) {\n vec3 lin = srgbToLinear(c);\n vec3 lms = LINEAR_SRGB_TO_LMS * lin;\n vec3 lmsCbrt = sign(lms) * pow(abs(lms), vec3(1.0 / 3.0));\n return LMS_TO_OKLAB * lmsCbrt;\n}\n\n// Raw OKLab (L, a, b) → linear sRGB. Mirrors value.js oklabToLinearSRGB.\nvec3 oklabToLinearSrgb(vec3 lab) {\n vec3 lms_ = OKLAB_TO_LMS * lab;\n vec3 lms = lms_ * lms_ * lms_;\n return LMS_TO_LINEAR_SRGB * lms;\n}\n\n// OKLab → OKLCh: H in RADIANS. Mirrors value.js rawOklabToOklch (which returns\n// degrees; we stay in radians and only fold to [0, 2pi)).\nvec3 oklabToOklch(vec3 lab) {\n float C = length(lab.yz);\n float H = atan(lab.z, lab.y);\n if (H < 0.0) H += 2.0 * PI;\n return vec3(lab.x, C, H);\n}\n\n// OKLCh (H radians) → OKLab. Mirrors value.js rawOklchToOklab.\nvec3 oklchToOklab(vec3 lch) {\n return vec3(lch.x, lch.y * cos(lch.z), lch.y * sin(lch.z));\n}";
3
- function r() {
4
- let e = typeof window < "u" && window.devicePixelRatio || 1;
5
- return Math.min(e, 2);
6
- }
7
- //#endregion
8
- //#region src/composables/glass/webgl/useWebGLCanvas.ts
9
- function i(e, t) {
10
- let { setup: n, contextAttrs: r } = t, i = t.respectReducedMotion ?? t.mode !== "capture", a = /* @__PURE__ */ new Set();
11
- t.mode === "capture" && a.add("manual");
12
- let o = () => a.size === 0, s = 0, c = typeof performance < "u" ? performance.now() : 0, l = null, u = null, d = !1, f = !1, p = i && typeof window < "u" && window.matchMedia ? window.matchMedia("(prefers-reduced-motion: reduce)") : null, m = p?.matches ?? !1;
13
- function h() {
14
- if (!o() || !u) return;
15
- let e = (performance.now() - c) / 1e3, t = u.time ? u.time(e) : e;
16
- u.frame(t), s = !m && u.shouldContinue() ? requestAnimationFrame(h) : 0;
17
- }
18
- function g() {
19
- d && o() && !s && u && (s = requestAnimationFrame(h));
20
- }
21
- function _() {
22
- let e = p?.matches ?? !1;
23
- e !== m && (m = e, e || (c = performance.now()), g());
24
- }
25
- p?.addEventListener("change", _);
26
- function v(e = "manual") {
27
- let t = o();
28
- a.add(e), t && !o() && (cancelAnimationFrame(s), s = 0);
29
- }
30
- function y(e = "manual") {
31
- let t = !o();
32
- a.delete(e), t && o() && d && u && (c = performance.now() - 1e3, h());
33
- }
34
- let b = typeof document < "u";
35
- function x() {
36
- document.hidden ? v("tab-hidden") : y("tab-hidden");
37
- }
38
- b && document.addEventListener("visibilitychange", x), b && document.hidden && a.add("tab-hidden");
39
- let S = null;
40
- function C(e) {
41
- e.skipped ? v("off-screen") : y("off-screen");
42
- }
43
- function w() {
44
- if (S) return;
45
- let t = e.parentElement;
46
- t && (S = t, t.addEventListener("contentvisibilityautostatechange", C));
47
- }
48
- function T() {
49
- S?.removeEventListener("contentvisibilityautostatechange", C), S = null;
50
- }
51
- let E = null;
52
- function D(e) {
53
- e.preventDefault(), cancelAnimationFrame(s), s = 0, u = null, l = null;
54
- }
55
- function O() {
56
- f || (k(), o() && g());
57
- }
58
- function k() {
59
- let t = e.getContext("webgl2", r ?? void 0);
60
- if (!t) throw Error("[useWebGLCanvas] WebGL2 unavailable");
61
- l = t, u = n(l), u.resize(), E || (E = new ResizeObserver(() => u?.resize()), E.observe(e));
62
- }
63
- function A() {
64
- d || f || (e.addEventListener("webglcontextlost", D, !1), e.addEventListener("webglcontextrestored", O, !1), k(), w(), d = !0, c = performance.now(), o() && (s = requestAnimationFrame(h)));
65
- }
66
- function j(e) {
67
- d || A(), u?.frame(e);
68
- }
69
- function M() {
70
- f = !0, cancelAnimationFrame(s), s = 0, b && document.removeEventListener("visibilitychange", x), p?.removeEventListener("change", _), T(), e.removeEventListener("webglcontextlost", D, !1), e.removeEventListener("webglcontextrestored", O, !1), E?.disconnect(), E = null, u?.teardown?.(), u = null, l?.getExtension("WEBGL_lose_context")?.loseContext(), l = null, a.clear();
71
- }
72
- return t.mode === "capture" && A(), {
73
- arm: A,
74
- suspend: v,
75
- resume: y,
76
- wake: g,
77
- renderAt: j,
78
- dispose: M,
79
- get gl() {
80
- return l;
81
- },
82
- get reducedMotion() {
83
- return m;
84
- }
85
- };
86
- }
87
- //#endregion
88
- //#region src/composables/glass/webgl/compile.ts
89
- function a(e, t, n, r = "[glass-ui:webgl]") {
90
- let i = e.createShader(t);
91
- if (e.shaderSource(i, n), e.compileShader(i), !e.getShaderParameter(i, e.COMPILE_STATUS)) {
92
- let t = e.getShaderInfoLog(i) ?? "unknown";
93
- throw e.deleteShader(i), Error(`${r} shader compile failed:\n${t}`);
94
- }
95
- return i;
96
- }
97
- function o(e, t, n, r = "[glass-ui:webgl]") {
98
- let i = e.createProgram();
99
- if (e.attachShader(i, t), e.attachShader(i, n), e.linkProgram(i), !e.getProgramParameter(i, e.LINK_STATUS)) {
100
- let t = e.getProgramInfoLog(i) ?? "unknown";
101
- throw e.deleteProgram(i), Error(`${r} program link failed:\n${t}`);
102
- }
103
- return i;
104
- }
105
- //#endregion
106
- export { t as a, r as i, o as n, e as o, i as r, n as s, a as t };
File without changes