@mkbabb/glass-ui 3.12.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/dist/CardAction-XH4YBVEK.js +158 -0
  2. package/dist/{CommandShortcut-CefCj5mt.js → CommandShortcut-DdtWXxOK.js} +58 -53
  3. package/dist/{ContextMenuSubContent-Bhg4f5jX.js → ContextMenuSubContent-B0Vs6atR.js} +4 -4
  4. package/dist/{DataTable-CUHMukiQ.js → DataTable-C464Zbqd.js} +99 -97
  5. package/dist/DialogContent-DDE6pQBU.js +103 -0
  6. package/dist/{DialogFooter-Gprw8H_A.js → DialogFooter-8eZbdmPc.js} +2 -2
  7. package/dist/FadingScroll-DwNnvKMs.js +76 -0
  8. package/dist/{HoverPopover-2LOIW34a.js → HoverPopover-Dpzwvc4t.js} +1 -1
  9. package/dist/IconChip-BDw1j5mu.js +54 -0
  10. package/dist/{IconTooltip-Cus0fvK0.js → IconTooltip-DSjasZIt.js} +1 -1
  11. package/dist/MetricBadge-BpC0R_Ec.js +79 -0
  12. package/dist/{Notification-DLMhblXR.js → Notification-DKjKsQq8.js} +10 -10
  13. package/dist/{NumberFieldContent-BbLOh8RU.js → NumberFieldContent-1VtwDSgf.js} +3 -3
  14. package/dist/PopoverContent-BTorlp--.js +127 -0
  15. package/dist/{Progress-iEuD9pxG.js → Progress-hAT4gqGH.js} +97 -77
  16. package/dist/{ScrollingText-BPP84wKo.js → ScrollingText-CUVFTWk2.js} +2 -2
  17. package/dist/{SelectScrollDownButton-T32cVFeM.js → SelectScrollDownButton-C1jb3b3K.js} +24 -8
  18. package/dist/{Switch-Ch-k3Rv-.js → Switch-Dr--uLGH.js} +2 -2
  19. package/dist/{Toaster-1rYWrmAm.js → Toaster-Bm_HQSpc.js} +55 -52
  20. package/dist/{ToggleGroupItem-COu_4IW4.js → ToggleGroupItem-Dzk9hWsF.js} +18 -22
  21. package/dist/animated-digit.js +3 -3
  22. package/dist/api/index.d.ts +10 -4
  23. package/dist/api.js +1 -1
  24. package/dist/aurora.js +113 -98
  25. package/dist/{badge-CaoFJzRb.js → badge-UILT_3pZ.js} +1 -1
  26. package/dist/badge.js +1 -1
  27. package/dist/{button-DN39cGqL.js → button-BNDWhAZb.js} +12 -12
  28. package/dist/button.js +1 -1
  29. package/dist/card.js +1 -1
  30. package/dist/carousel.d.ts +1 -1
  31. package/dist/carousel.js +101 -145
  32. package/dist/{check-BBKKKSTf.js → check-njhk-vfu.js} +1 -1
  33. package/dist/{chevron-down-BSkTP2aL.js → chevron-down-DKkxb4VV.js} +1 -1
  34. package/dist/{chevron-right-sDM0Yvrf.js → chevron-right-CPXbqQQz.js} +1 -1
  35. package/dist/{chevron-up-CCOD_FTz.js → chevron-up-n_24SqI-.js} +1 -1
  36. package/dist/coalesceMetric-5qIeZnTx.js +13 -0
  37. package/dist/collapsible.js +1 -1
  38. package/dist/{color-C5ls_QF7.js → color-DweYl7pE.js} +9 -7
  39. package/dist/color-swatch.d.ts +1 -0
  40. package/dist/color-swatch.js +47 -0
  41. package/dist/color.js +1 -1
  42. package/dist/command.js +1 -1
  43. package/dist/components/custom/animated-digit/AnimatedDigit.vue.d.ts +8 -0
  44. package/dist/components/custom/aurora/constants/presets.d.ts +16 -45
  45. package/dist/components/custom/aurora/constants/renderMode.d.ts +2 -0
  46. package/dist/components/custom/aurora/constants/shaders/mediums.glsl.d.ts +1 -1
  47. package/dist/components/custom/aurora/constants/shaders/vangogh-medium.glsl.d.ts +1 -0
  48. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  49. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  50. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  51. package/dist/components/custom/configurator/ConfiguratorRow.vue.d.ts +16 -0
  52. package/dist/components/custom/constellation/Constellation.vue.d.ts +23 -143
  53. package/dist/components/custom/constellation/composables/createConstellationField.d.ts +41 -0
  54. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  55. package/dist/components/custom/constellation/composables/useConstellationPointer.d.ts +35 -0
  56. package/dist/components/custom/constellation/constants.d.ts +61 -0
  57. package/dist/components/custom/constellation/constellationDraw.d.ts +30 -0
  58. package/dist/components/custom/constellation/constellationField.d.ts +3 -403
  59. package/dist/components/custom/constellation/constellationInteraction.d.ts +132 -0
  60. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  61. package/dist/components/custom/constellation/index.d.ts +5 -2
  62. package/dist/components/custom/controls/DarkModeToggle.vue.d.ts +11 -0
  63. package/dist/components/custom/dock/DockRail.vue.d.ts +89 -0
  64. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  65. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  66. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -6
  67. package/dist/components/custom/dock/GlassDock.vue.d.ts +5 -118
  68. package/dist/components/custom/dock/composables/dockMorphContext.d.ts +36 -0
  69. package/dist/components/custom/dock/composables/index.d.ts +1 -0
  70. package/dist/components/custom/dock/composables/useDockClickIntegrity.d.ts +23 -0
  71. package/dist/components/custom/dock/composables/useDockMorphWindow.d.ts +15 -0
  72. package/dist/components/custom/dock/composables/useDockOrientationMorph.d.ts +44 -0
  73. package/dist/components/custom/dock/composables/useDockShellProps.d.ts +165 -0
  74. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +44 -0
  75. package/dist/components/custom/dock/constants.d.ts +83 -0
  76. package/dist/components/custom/dock/index.d.ts +5 -0
  77. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +15 -37
  78. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  79. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  80. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  81. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  82. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +7 -0
  83. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  84. package/dist/components/custom/fourier-field/math.d.ts +34 -0
  85. package/dist/components/custom/fourier-field/presets.d.ts +54 -0
  86. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +8 -0
  87. package/dist/components/custom/goo-blob/composables/buildMetaballProgram.d.ts +18 -0
  88. package/dist/components/custom/goo-blob/composables/uploadBlobUniforms.d.ts +41 -0
  89. package/dist/components/custom/goo-blob/composables/useBlobPointer.d.ts +4 -3
  90. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +21 -8
  91. package/dist/components/custom/goo-blob/constants.d.ts +57 -0
  92. package/dist/components/custom/goo-blob/shaders/metaball-uniforms.glsl.d.ts +1 -0
  93. package/dist/components/custom/handmark/brush.d.ts +33 -6
  94. package/dist/components/custom/handmark/{useHandMark.d.ts → composables/useHandMark.d.ts} +6 -4
  95. package/dist/components/custom/handmark/constants.d.ts +39 -0
  96. package/dist/components/custom/handmark/geometry.d.ts +14 -12
  97. package/dist/components/custom/handmark/index.d.ts +8 -2
  98. package/dist/components/custom/handmark/types.d.ts +9 -0
  99. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  100. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  101. package/dist/components/custom/icon-chip/types.d.ts +72 -0
  102. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -4
  103. package/dist/components/custom/labeled-field/LabeledField.vue.d.ts +37 -0
  104. package/dist/components/custom/labeled-field/LabeledSelect.vue.d.ts +6 -0
  105. package/dist/components/custom/labeled-field/LabeledSlider.vue.d.ts +6 -0
  106. package/dist/components/custom/labeled-field/LabeledSwitch.vue.d.ts +6 -0
  107. package/dist/components/custom/metric-badge/MetricBadge.vue.d.ts +11 -18
  108. package/dist/components/custom/metric-badge/index.d.ts +1 -0
  109. package/dist/components/custom/metric-cell/MetricCell.vue.d.ts +15 -4
  110. package/dist/components/custom/metric-stack/MetricRow.vue.d.ts +6 -4
  111. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  112. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  113. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +20 -25
  114. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  115. package/dist/components/custom/tabs/constants.d.ts +18 -0
  116. package/dist/components/custom/tabs/index.d.ts +1 -1
  117. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +14 -0
  118. package/dist/components/ui/_shared/index.d.ts +2 -0
  119. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  120. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  121. package/dist/components/ui/card/Card.vue.d.ts +16 -4
  122. package/dist/components/ui/carousel/index.d.ts +0 -1
  123. package/dist/components/ui/command/Command.vue.d.ts +3 -0
  124. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  125. package/dist/components/ui/drawer/Drawer.vue.d.ts +1 -0
  126. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +5 -0
  127. package/dist/components/ui/dropdown-menu/DropdownMenuSubContent.vue.d.ts +2 -2
  128. package/dist/components/ui/index.d.ts +0 -1
  129. package/dist/components/ui/metric-pill/MetricPill.vue.d.ts +6 -3
  130. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  131. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  132. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  133. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  134. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  135. package/dist/components/ui/slider/index.d.ts +22 -19
  136. package/dist/components/ui/tabs/TabsIndicator.vue.d.ts +4 -1
  137. package/dist/components/ui/toast/use-toast.d.ts +2 -2
  138. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  139. package/dist/components/ui/toggle/index.d.ts +1 -1
  140. package/dist/components/ui/toggle-group/ToggleGroup.vue.d.ts +1 -7
  141. package/dist/components/ui/toggle-group/ToggleGroupItem.vue.d.ts +1 -3
  142. package/dist/components/ui/toggle-group/toggleGroupContext.d.ts +0 -13
  143. package/dist/composables/color/index.d.ts +12 -0
  144. package/dist/composables/dark/useGlobalDark.d.ts +14 -12
  145. package/dist/composables/glass/index.d.ts +0 -1
  146. package/dist/composables/glass/useGlassBackdropLuminance.d.ts +59 -0
  147. package/dist/composables/glass/useSpecularTracking.d.ts +12 -3
  148. package/dist/composables/motion/core/index.d.ts +1 -1
  149. package/dist/composables/motion/curves.d.ts +48 -0
  150. package/dist/composables/motion/index.d.ts +2 -0
  151. package/dist/composables/motion/springPresets.d.ts +33 -0
  152. package/dist/composables/motion/suite.d.ts +2 -0
  153. package/dist/composables/motion/useLiquidFlex.d.ts +85 -0
  154. package/dist/composables/motion/useSpringMount.d.ts +1 -1
  155. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  156. package/dist/configurator.js +1 -1
  157. package/dist/confirm-dialog.js +3 -3
  158. package/dist/constellation.js +373 -261
  159. package/dist/context-menu.js +2 -2
  160. package/dist/controls.js +48 -14
  161. package/dist/dark.js +1 -1
  162. package/dist/data-table.js +1 -1
  163. package/dist/dialog.js +2 -2
  164. package/dist/dock.js +901 -372
  165. package/dist/dockContext-Bu1Avy-a.js +17 -0
  166. package/dist/dom.js +5 -5
  167. package/dist/{dropdown-menu-D77jX6Df.js → dropdown-menu-BJ7E9js_.js} +11 -8
  168. package/dist/dropdown-menu.js +1 -1
  169. package/dist/expandable-container.js +44 -81
  170. package/dist/fading-scroll.d.ts +1 -0
  171. package/dist/fading-scroll.js +2 -0
  172. package/dist/forms.js +5 -5
  173. package/dist/fourier-field.js +140 -104
  174. package/dist/fourier-math.js +2 -2
  175. package/dist/glass-panel.js +90 -21
  176. package/dist/glass-ui.css +1 -1
  177. package/dist/glass-ui.js +230 -236
  178. package/dist/goo-blob.js +264 -228
  179. package/dist/handmark.js +203 -159
  180. package/dist/header-ribbon.js +1 -1
  181. package/dist/hover-card.js +1 -1
  182. package/dist/hover-popover.js +1 -1
  183. package/dist/icon-chip.d.ts +1 -0
  184. package/dist/icon-chip.js +2 -0
  185. package/dist/icon-tooltip.js +1 -1
  186. package/dist/index.d.ts +3 -5
  187. package/dist/instrument-chassis.js +1 -1
  188. package/dist/keyboard.js +1 -1
  189. package/dist/label.js +1 -1
  190. package/dist/labeled-field.js +28 -18
  191. package/dist/{math-DTpRVC0e.js → math-DeuJwLFx.js} +26 -2
  192. package/dist/{menuItemVariants-CCoBNkU5.js → menuItemVariants-DWRQXBxJ.js} +10 -4
  193. package/dist/metric-badge.js +1 -1
  194. package/dist/metric-cell.js +29 -22
  195. package/dist/metric-stack.js +35 -34
  196. package/dist/{minimize-2-lcXOuc6V.js → minimize-2-BV31Ob_h.js} +1 -1
  197. package/dist/motion-core.js +32 -136
  198. package/dist/motion-curves.d.ts +1 -0
  199. package/dist/motion-curves.js +130 -0
  200. package/dist/motion.js +38 -37
  201. package/dist/notification.js +1 -1
  202. package/dist/number-field.js +1 -1
  203. package/dist/pager-dots.d.ts +1 -0
  204. package/dist/pager-dots.js +91 -0
  205. package/dist/paper-backdrop.js +1 -1
  206. package/dist/popover.js +1 -1
  207. package/dist/progress.js +1 -1
  208. package/dist/pulse.js +1 -1
  209. package/dist/reactive.js +2 -2
  210. package/dist/scrolling-text.js +1 -1
  211. package/dist/{search-nbkvr2dC.js → search-BSGrf2Sk.js} +1 -1
  212. package/dist/search.js +10 -10
  213. package/dist/select.js +3 -3
  214. package/dist/separator.js +1 -1
  215. package/dist/sheet-CquRYOAw.js +218 -0
  216. package/dist/sheet.js +1 -1
  217. package/dist/{slider-ClgpP7EB.js → slider-DQ95MET2.js} +8 -8
  218. package/dist/slider.js +1 -1
  219. package/dist/sortable-list.js +3 -3
  220. package/dist/springPresets-WXaLbu8u.js +40 -0
  221. package/dist/stacked-icons.js +6 -6
  222. package/dist/styles/animations.css +25 -125
  223. package/dist/styles/cards.css +55 -0
  224. package/dist/styles/components.css +4 -1
  225. package/dist/styles/configurator.css +77 -0
  226. package/dist/styles/dock/density.css +19 -0
  227. package/dist/styles/dock/layer-group.css +83 -25
  228. package/dist/styles/dock/layers.css +23 -1
  229. package/dist/styles/dock/morph-bridge.css +123 -0
  230. package/dist/styles/dock/morph.css +175 -45
  231. package/dist/styles/dock/overflow.css +66 -1
  232. package/dist/styles/dock/rail-extend.css +397 -0
  233. package/dist/styles/dock/section.css +59 -0
  234. package/dist/styles/dock/shell.css +97 -110
  235. package/dist/styles/dock-controls/dark-mode-toggle.css +109 -0
  236. package/dist/styles/dock-controls/icon-button.css +143 -0
  237. package/dist/styles/dock-controls/tab-button.css +143 -0
  238. package/dist/styles/dock-controls/touch-floor.css +94 -0
  239. package/dist/styles/dock-controls/triggers.css +135 -0
  240. package/dist/styles/dock-controls.css +30 -595
  241. package/dist/styles/dock.css +8 -3
  242. package/dist/styles/drawer.css +48 -0
  243. package/dist/styles/feedback-tone.css +104 -0
  244. package/dist/styles/floating-panel.css +17 -0
  245. package/dist/styles/glass/a11y-fallback.css +245 -0
  246. package/dist/styles/glass/ladder.css +383 -0
  247. package/dist/styles/glass/material.css +238 -0
  248. package/dist/styles/glass/progress-rail.css +78 -0
  249. package/dist/styles/glass/squircle.css +66 -0
  250. package/dist/styles/glass/surface-axis.css +113 -0
  251. package/dist/styles/glass/surfaces.css +382 -0
  252. package/dist/styles/glass-refract.css +2 -0
  253. package/dist/styles/glass.css +34 -1188
  254. package/dist/styles/hover-popover.css +2 -0
  255. package/dist/styles/icon-chip.css +149 -0
  256. package/dist/styles/index.css +94 -18
  257. package/dist/styles/instrument-chassis.css +46 -0
  258. package/dist/styles/menu.css +127 -0
  259. package/dist/styles/paper.css +2 -68
  260. package/dist/styles/segmented-tabs.css +346 -0
  261. package/dist/styles/select.css +50 -0
  262. package/dist/styles/theme/bridges.css +347 -0
  263. package/dist/styles/theme/dark.css +7 -0
  264. package/dist/styles/theme/literals.css +94 -0
  265. package/dist/styles/theme/radius.css +95 -0
  266. package/dist/styles/theme.css +26 -529
  267. package/dist/styles/tokens/color-radius.css +287 -0
  268. package/dist/styles/tokens/dark-arm.css +308 -0
  269. package/dist/styles/tokens/glass.css +500 -0
  270. package/dist/styles/tokens/light-dark.css +187 -0
  271. package/dist/styles/tokens/offsets-sizing.css +562 -0
  272. package/dist/styles/tokens/property-regs.css +162 -0
  273. package/dist/styles/tokens/scale-paper.css +409 -0
  274. package/dist/styles/tokens/scheme-motion.css +352 -0
  275. package/dist/styles/tokens/shadow.css +166 -0
  276. package/dist/styles/tokens.css +22 -2360
  277. package/dist/styles/transitions.css +7 -7
  278. package/dist/styles/typography/scale.css +153 -0
  279. package/dist/styles/typography/semantic.css +220 -0
  280. package/dist/styles/typography/utilities.css +159 -0
  281. package/dist/styles/typography.css +23 -453
  282. package/dist/styles/utilities/a11y-overrides.css +169 -0
  283. package/dist/styles/utilities/animate.css +26 -0
  284. package/dist/styles/utilities/base.css +541 -0
  285. package/dist/styles/utilities/btn.css +218 -0
  286. package/dist/styles/utilities/components.css +317 -0
  287. package/dist/styles/utilities.css +19 -1318
  288. package/dist/styles/view-transition.css +4 -52
  289. package/dist/switch.js +1 -1
  290. package/dist/tabs.js +161 -181
  291. package/dist/timeline.js +2 -2
  292. package/dist/toast.js +1 -1
  293. package/dist/toggle-chip.js +3 -1
  294. package/dist/toggle-group.js +1 -1
  295. package/dist/tooltip.js +1 -1
  296. package/dist/typewriter.js +1 -1
  297. package/dist/{useAnimatedNumber-Bcpy5Etf.js → useAnimatedNumber-C_3wZLx4.js} +1 -1
  298. package/dist/useConfiguratorState-kiIlun8I.js +303 -0
  299. package/dist/useLiquidFlex-C12hXwOZ.js +30 -0
  300. package/dist/useRAFLoop-CdwJ7284.js +109 -0
  301. package/dist/{useScrollProgress-CffFGLa5.js → useScrollProgress-D7bYU2RK.js} +1 -1
  302. package/dist/useSpecularTracking-Bo5su68i.js +32 -0
  303. package/dist/useSpringMount-CvopqiFr.js +108 -0
  304. package/dist/useSurfaceAxis-CMnF2zHb.js +7 -0
  305. package/dist/{useTouchGate-WFyJYsth.js → useTouchGate-28Tk2-t2.js} +1 -1
  306. package/dist/useViewTransition-COsPjQVZ.js +47 -0
  307. package/dist/utils/coalesceMetric.d.ts +29 -0
  308. package/dist/utils/index.d.ts +1 -0
  309. package/dist/vReveal-D9k0jADx.js +10 -0
  310. package/dist/watercolor-dot.js +22 -13
  311. package/dist/{x-Dfsegz9Y.js → x-BUwTKe50.js} +1 -1
  312. package/package.json +134 -50
  313. package/src/styles/animations.css +25 -125
  314. package/src/styles/cards.css +53 -0
  315. package/src/styles/configurator.css +77 -0
  316. package/src/styles/dock/density.css +19 -0
  317. package/src/styles/dock/layer-group.css +83 -25
  318. package/src/styles/dock/layers.css +23 -1
  319. package/src/styles/dock/morph-bridge.css +123 -0
  320. package/src/styles/dock/morph.css +175 -45
  321. package/src/styles/dock/overflow.css +66 -1
  322. package/src/styles/dock/rail-extend.css +397 -0
  323. package/src/styles/dock/section.css +59 -0
  324. package/src/styles/dock/shell.css +97 -110
  325. package/src/styles/dock-controls/dark-mode-toggle.css +109 -0
  326. package/src/styles/dock-controls/icon-button.css +143 -0
  327. package/src/styles/dock-controls/tab-button.css +143 -0
  328. package/src/styles/dock-controls/touch-floor.css +94 -0
  329. package/src/styles/dock-controls/triggers.css +135 -0
  330. package/src/styles/dock-controls.css +30 -595
  331. package/src/styles/dock.css +8 -3
  332. package/src/styles/drawer.css +42 -0
  333. package/src/styles/feedback-tone.css +104 -0
  334. package/src/styles/floating-panel.css +15 -0
  335. package/src/styles/glass/a11y-fallback.css +245 -0
  336. package/src/styles/glass/ladder.css +383 -0
  337. package/src/styles/glass/material.css +238 -0
  338. package/src/styles/glass/progress-rail.css +78 -0
  339. package/src/styles/glass/squircle.css +66 -0
  340. package/src/styles/glass/surface-axis.css +113 -0
  341. package/src/styles/glass/surfaces.css +382 -0
  342. package/src/styles/glass.css +34 -1188
  343. package/src/styles/icon-chip.css +149 -0
  344. package/src/styles/index.css +93 -17
  345. package/src/styles/instrument-chassis.css +42 -0
  346. package/src/styles/menu.css +127 -0
  347. package/src/styles/paper.css +2 -68
  348. package/src/styles/segmented-tabs.css +340 -0
  349. package/src/styles/select.css +50 -0
  350. package/src/styles/theme/bridges.css +347 -0
  351. package/src/styles/theme/dark.css +7 -0
  352. package/src/styles/theme/literals.css +94 -0
  353. package/src/styles/theme/radius.css +95 -0
  354. package/src/styles/theme.css +26 -529
  355. package/src/styles/tokens/color-radius.css +287 -0
  356. package/src/styles/tokens/dark-arm.css +308 -0
  357. package/src/styles/tokens/glass.css +500 -0
  358. package/src/styles/tokens/light-dark.css +187 -0
  359. package/src/styles/tokens/offsets-sizing.css +562 -0
  360. package/src/styles/tokens/property-regs.css +162 -0
  361. package/src/styles/tokens/scale-paper.css +409 -0
  362. package/src/styles/tokens/scheme-motion.css +352 -0
  363. package/src/styles/tokens/shadow.css +166 -0
  364. package/src/styles/tokens.css +22 -2360
  365. package/src/styles/transitions.css +7 -7
  366. package/src/styles/typography/scale.css +153 -0
  367. package/src/styles/typography/semantic.css +220 -0
  368. package/src/styles/typography/utilities.css +159 -0
  369. package/src/styles/typography.css +23 -453
  370. package/src/styles/utilities/a11y-overrides.css +169 -0
  371. package/src/styles/utilities/animate.css +26 -0
  372. package/src/styles/utilities/base.css +541 -0
  373. package/src/styles/utilities/btn.css +218 -0
  374. package/src/styles/utilities/components.css +317 -0
  375. package/src/styles/utilities.css +19 -1318
  376. package/src/styles/view-transition.css +4 -52
  377. package/dist/CardAction-DuArVky-.js +0 -157
  378. package/dist/DeckProgress-Dmk4_AKN.js +0 -23
  379. package/dist/DialogContent-BRkT1cjP.js +0 -100
  380. package/dist/InstrumentRail-CUJ05YVG.js +0 -44
  381. package/dist/MetricBadge-BZVWIxNy.js +0 -80
  382. package/dist/PopoverContent-BId6ggf_.js +0 -121
  383. package/dist/TabsList-B8CVOQPC.js +0 -101
  384. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +0 -27
  385. package/dist/components/custom/deck-progress/index.d.ts +0 -2
  386. package/dist/components/custom/dialog-native/GlassDialogNative.vue.d.ts +0 -57
  387. package/dist/components/custom/dialog-native/index.d.ts +0 -1
  388. package/dist/components/custom/instrument-rail/InstrumentRail.vue.d.ts +0 -91
  389. package/dist/components/custom/instrument-rail/index.d.ts +0 -2
  390. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  391. package/dist/composables/motion/useRouteTransition.d.ts +0 -42
  392. package/dist/deck-progress.d.ts +0 -1
  393. package/dist/deck-progress.js +0 -2
  394. package/dist/dockContext-BKeIMmNk.js +0 -9
  395. package/dist/instrument-rail.d.ts +0 -1
  396. package/dist/instrument-rail.js +0 -2
  397. package/dist/sheet-VZEtNFvO.js +0 -214
  398. package/dist/styles/instrument-rail.css +0 -127
  399. package/dist/useConfiguratorState-DxAqksK6.js +0 -287
  400. package/dist/useGlassRenderer-D7YGOYiM.js +0 -69
  401. package/dist/useSpecularTracking-BVRZsRHA.js +0 -26
  402. package/dist/useSpringMount-BJSHcLl3.js +0 -113
  403. package/dist/useViewTransition-DaN5Zrox.js +0 -21
  404. package/dist/vReveal-zUIQk-rJ.js +0 -53
  405. package/src/styles/instrument-rail.css +0 -127
  406. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-C_s6fG7r.js} +0 -0
  407. /package/dist/{ContextMenuContent-DDa0v27s.js → ContextMenuContent-ON3x7cuk.js} +0 -0
  408. /package/dist/{HoverCardContent-B6CcQ8He.js → HoverCardContent-DkMaQzH5.js} +0 -0
  409. /package/dist/{Input-xuDwALQR.js → Input-DVG_J0ne.js} +0 -0
  410. /package/dist/{InstrumentChassis-C2f6cBaQ.js → InstrumentChassis-UUJX0-mW.js} +0 -0
  411. /package/dist/{Label-zRfbQdCn.js → Label-Ck9SWEKM.js} +0 -0
  412. /package/dist/{ModalOverlay-B1GkAjNb.js → ModalOverlay-CkPRRgl_.js} +0 -0
  413. /package/dist/{PaperBackdrop-CqwjnfLv.js → PaperBackdrop-nBKe0vkB.js} +0 -0
  414. /package/dist/{SelectGroup-BFiod7X2.js → SelectGroup-Dcczq44n.js} +0 -0
  415. /package/dist/{SelectSeparator-C4Ql0gzV.js → SelectSeparator-DK2y1Bun.js} +0 -0
  416. /package/dist/{Separator-D7sD7RKj.js → Separator-BArl4OaB.js} +0 -0
  417. /package/dist/{TooltipProvider-CmZzCuaG.js → TooltipProvider-B3MkB_8P.js} +0 -0
  418. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-CBt_VvXa.js} +0 -0
  419. /package/dist/{compile-BOXjLUxu.js → compile-EXXzEr1q.js} +0 -0
  420. /package/dist/{constants-yKeKnE84.js → constants-BPOqYJAm.js} +0 -0
  421. /package/dist/{createContext-B44Sah_H.js → createContext-B2RaZ-b8.js} +0 -0
  422. /package/dist/{createLucideIcon-B6uNAU9G.js → createLucideIcon-DydS2qgk.js} +0 -0
  423. /package/dist/{presets-BP_ALM0m.js → presets-BW2b-fr1.js} +0 -0
  424. /package/dist/{prng-D27-B3tK.js → prng-Cg22zv8g.js} +0 -0
  425. /package/dist/{supportsCssTimeline-C5oe0lnD.js → supportsCssTimeline-BWenxvHU.js} +0 -0
  426. /package/dist/{useGlobalDark-CAhOXNLO.js → useGlobalDark-C28t0VWJ.js} +0 -0
  427. /package/dist/{useIntersectionPause-Cck5Uxk8.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  428. /package/dist/{useInterval-Dsmqwi03.js → useInterval-CNdua40W.js} +0 -0
  429. /package/dist/{useKeyboardShortcuts-CyIYrndH.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  430. /package/dist/{useResizeObserver-CWCbk5Px.js → useResizeObserver-V6nq5gJb.js} +0 -0
  431. /package/dist/{useResolveTokenColor-r9pnNjqK.js → useResolveTokenColor-NUG2zYAW.js} +0 -0
  432. /package/dist/{useSortable-C8ReQ50P.js → useSortable-BVqlJRBR.js} +0 -0
  433. /package/dist/{useTextHighlight-CWEi25hf.js → useTextHighlight-NmBM5V_4.js} +0 -0
  434. /package/dist/{useTimer-3xqf_54b.js → useTimer-B_PAasDL.js} +0 -0
  435. /package/dist/{useUserInvalidAria-DoJKMZ3s.js → useUserInvalidAria-CDfJuakL.js} +0 -0
  436. /package/dist/{useViewportReady-RIr5Wgkh.js → useViewportReady-CvBcCYDf.js} +0 -0
@@ -1,3 +1,4 @@
1
+ import { type Surface } from "../../ui/_shared/useSurfaceAxis";
1
2
  declare const _default: typeof __VLS_export;
2
3
  export default _default;
3
4
  declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
@@ -6,20 +7,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
6
7
  expandLabel?: string;
7
8
  /** Accessible name for the collapse (exit fullscreen) button. */
8
9
  collapseLabel?: string;
9
- /**
10
- * Opt into the `gl-expand` plate → fullscreen MORPH (D6.c M7). When set,
11
- * the inline anchor and the teleported fullscreen surface share ONE
12
- * `view-transition-name` (this prop, suffixed by an app-unique `useId()`
13
- * so two ExpandableContainers on a page never collide their groups — the
14
- * proof:vt-names mandate), and the open/close toggle is wrapped in
15
- * `startViewTransition` so the plate's rect MORPHS to the fullscreen rect
16
- * (and back) instead of jump-cutting. A passed string namespaces the pair
17
- * (e.g. `"chart"`); pass an empty string for a bare `useId()` name.
18
- * Omitted (default) ⇒ NO view-transition-name, the legacy instant toggle —
19
- * byte-identical to the pre-M7 behaviour. PRM + unsupported engines take
20
- * `startViewTransition`'s instant fallback (the open/close still runs).
21
- */
22
- viewTransitionName?: string;
10
+ /** Surface decoration register for the fullscreen overlay
11
+ * (BA.W-SURFACE-AXIS) — `glass` (default) frosts over the page;
12
+ * `opaque` is the solid-wall opt-out; `veil` the borderless plate. */
13
+ surface?: Surface;
23
14
  } & {
24
15
  /**
25
16
  * Two-way `open` model so consumers can drive fullscreen externally
@@ -27,13 +18,7 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
27
18
  * buttons continue to operate without parent wiring.
28
19
  */
29
20
  open?: boolean;
30
- }, {
31
- anchorEl: Readonly<import("vue").ShallowRef<HTMLElement | null>>;
32
- surfaceEl: Readonly<import("vue").ShallowRef<HTMLElement | null>>;
33
- expand: () => void;
34
- collapse: () => void;
35
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
36
- settle: (fullscreen: boolean) => any;
21
+ }, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
37
22
  "update:open": (value: boolean) => any;
38
23
  }, string, import("vue").PublicProps, Readonly<{
39
24
  buttonPosition?: "left" | "right";
@@ -41,20 +26,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
41
26
  expandLabel?: string;
42
27
  /** Accessible name for the collapse (exit fullscreen) button. */
43
28
  collapseLabel?: string;
44
- /**
45
- * Opt into the `gl-expand` plate → fullscreen MORPH (D6.c M7). When set,
46
- * the inline anchor and the teleported fullscreen surface share ONE
47
- * `view-transition-name` (this prop, suffixed by an app-unique `useId()`
48
- * so two ExpandableContainers on a page never collide their groups — the
49
- * proof:vt-names mandate), and the open/close toggle is wrapped in
50
- * `startViewTransition` so the plate's rect MORPHS to the fullscreen rect
51
- * (and back) instead of jump-cutting. A passed string namespaces the pair
52
- * (e.g. `"chart"`); pass an empty string for a bare `useId()` name.
53
- * Omitted (default) ⇒ NO view-transition-name, the legacy instant toggle —
54
- * byte-identical to the pre-M7 behaviour. PRM + unsupported engines take
55
- * `startViewTransition`'s instant fallback (the open/close still runs).
56
- */
57
- viewTransitionName?: string;
29
+ /** Surface decoration register for the fullscreen overlay
30
+ * (BA.W-SURFACE-AXIS) — `glass` (default) frosts over the page;
31
+ * `opaque` is the solid-wall opt-out; `veil` the borderless plate. */
32
+ surface?: Surface;
58
33
  } & {
59
34
  /**
60
35
  * Two-way `open` model so consumers can drive fullscreen externally
@@ -63,10 +38,9 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
63
38
  */
64
39
  open?: boolean;
65
40
  }> & Readonly<{
66
- onSettle?: ((fullscreen: boolean) => any) | undefined;
67
41
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
68
42
  }>, {
69
- viewTransitionName: string;
43
+ surface: Surface;
70
44
  buttonPosition: "left" | "right";
71
45
  expandLabel: string;
72
46
  collapseLabel: string;
@@ -74,6 +48,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
74
48
  default?: (props: {
75
49
  fullscreen: boolean;
76
50
  }) => any;
51
+ } & {
52
+ default?: (props: {
53
+ fullscreen: boolean;
54
+ }) => any;
77
55
  }>;
78
56
  type __VLS_WithSlots<T, S> = T & {
79
57
  new (): {
@@ -0,0 +1,25 @@
1
+ type __VLS_Props = {
2
+ /** Scroll axis. `"x"` is the horizontal strip, `"y"` the vertical column. Default `"x"`. */
3
+ axis?: "x" | "y";
4
+ /** Feather the start edge once scrolled past the start. Default `true`. */
5
+ fadeStart?: boolean;
6
+ /** Feather the end edge while trailing overflow remains. Default `true`. */
7
+ fadeEnd?: boolean;
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, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
14
+ axis: "x" | "y";
15
+ fadeStart: boolean;
16
+ fadeEnd: boolean;
17
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
21
+ type __VLS_WithSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
@@ -0,0 +1,31 @@
1
+ import type { MaybeRef, Ref } from "vue";
2
+ export interface UseFadingScrollOptions {
3
+ /** Scroll axis. `"x"` reads scrollLeft/Width; `"y"` reads scrollTop/Height. Default `"x"`. */
4
+ axis?: "x" | "y";
5
+ /** Feather the start edge once scrolled past the start. Default `true`. */
6
+ fadeStart?: boolean;
7
+ /** Feather the end edge while trailing overflow remains. Default `true`. */
8
+ fadeEnd?: boolean;
9
+ }
10
+ export interface UseFadingScrollControls {
11
+ /** True when this composable is the ACTIVE writer (the native timeline is absent). */
12
+ readonly active: Readonly<Ref<boolean>>;
13
+ /** Re-measure the scroll state and rewrite the customs. Safe to call manually. */
14
+ measure: () => void;
15
+ /** Detach all listeners/observers. Auto-called on unmount in a component scope. */
16
+ stop: () => void;
17
+ }
18
+ /**
19
+ * Drive the per-edge `--fade-start` / `--fade-end` mask-width customs off an
20
+ * element's live scroll state, the JS fallback for the native `scroll(self)`
21
+ * timeline. On a supporting engine this attaches NOTHING (the CSS recipe is the
22
+ * sole writer); on a non-supporting engine it measures `scrollLeft/Top`,
23
+ * `scrollWidth/Height − clientWidth/Height`, a `ResizeObserver` (the shared
24
+ * `useResizeObserver` substrate) + a rAF-coalesced `scroll` listener, writing
25
+ * `--fade-start = --fade-scroll-width` only past `scroll > 0` and `--fade-end`
26
+ * only while trailing overflow remains. The customs default to `0px` (no
27
+ * feather) so the at-rest no-overflow edge is SHARP.
28
+ *
29
+ * @param target the scroll-port element (the same element the CSS customs apply to)
30
+ */
31
+ export declare function useFadingScroll(target: MaybeRef<HTMLElement | null>, options?: UseFadingScrollOptions): UseFadingScrollControls;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The module-scope constants for the FadingScroll family — the colocation home
3
+ * (`proof:colocation`) the dir owes once it carries a complex composable. Both
4
+ * were promoted out of `composables/useFadingScroll.ts` verbatim.
5
+ */
6
+ /**
7
+ * True when the engine genuinely supports a `scroll()` timeline — the CSS recipe
8
+ * in `utilities/base.css` then owns the visual axis on the compositor and the
9
+ * `useFadingScroll` composable becomes the inert (non-attaching) path. Module-level
10
+ * so the feature gate is computed once. (Mirrors `useScrollProgress`'s twin.)
11
+ */
12
+ export declare const NATIVE_SCROLL_TIMELINE: boolean;
13
+ /**
14
+ * Tolerance (CSS px) absorbing scroll-snap jitter — `snap-mandatory` parks the
15
+ * active card a few px off the true start, so the start edge reads as sharp until
16
+ * the user genuinely scrolls past the first child. Promoted verbatim from the
17
+ * bespoke `PresetPickerRow` SNAP_TOLERANCE.
18
+ */
19
+ export declare const SNAP_TOLERANCE = 12;
@@ -0,0 +1,2 @@
1
+ export { default as FadingScroll } from "./FadingScroll.vue";
2
+ export { useFadingScroll, type UseFadingScrollOptions, type UseFadingScrollControls, } from "./composables/useFadingScroll";
@@ -38,6 +38,13 @@ type __VLS_Props = {
38
38
  * loudness); clamped [0, 2] — the field's ~2 upper bound lets a hero push
39
39
  * brighter than the recessed default without runaway. */
40
40
  intensity?: number;
41
+ /** OPTIONAL injected clock — a getter returning the loop parameter `t ∈ [0,1)`.
42
+ * When BOUND, the render reads `clock()` (a controllable studio clock: pause,
43
+ * scrub, speed); when ABSENT (the ambient face), the autonomous
44
+ * `(now / durationMs) % 1` frame-time loop is the DEFAULT. `freeze` /
45
+ * `prefers-reduced-motion` still short-circuit to `frozenT` regardless — the
46
+ * ambient bundle is unchanged. The SOLE additive seam (BA.W-FOURIER-STUDIO). */
47
+ clock?: () => number;
41
48
  };
42
49
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
43
50
  declare const _default: typeof __VLS_export;
@@ -1,6 +1,6 @@
1
1
  import type { ColorResolver } from "../../../composables/color";
2
2
  export { default as FourierField } from "./FourierField.vue";
3
- export { comp, positionsAt, makeEllipticSpectrum, type BasisComponent, type EllipticSpectrumOptions, } from "./math";
3
+ export { comp, positionsAt, partialSumAt, dftFromPoints, makeEllipticSpectrum, type BasisComponent, type EllipticSpectrumOptions, } from "./math";
4
4
  /** The configuration-BUNDLE axis — `hero` (epicycles on, fewer harmonics) vs
5
5
  * `final` (epicycles off, denser). Not a recolour of one curve; one engine,
6
6
  * two presets. */
@@ -23,6 +23,40 @@ export declare function comp(index: number, re: number, im: number): BasisCompon
23
23
  * carries).
24
24
  */
25
25
  export declare function positionsAt(components: BasisComponent[], t: number, maxCircles?: number): [number, number][];
26
+ /**
27
+ * The PARTIAL-SUM curve point at parameter `t` over the FIRST `maxTerms` phasors
28
+ * — the inverse-DFT truncated summation `Σ_{k<maxTerms} c_k * exp(2*pi*i*k*t)`.
29
+ * It is {@link positionsAt} truncated at `maxTerms` and read at the FINAL tip:
30
+ * the single curve POINT (not the whole chain). The truncation axis is the SAME
31
+ * one `positionsAt`'s `maxCircles` arg drives — `maxCircles` reads the whole
32
+ * chain truncated, `partialSumAt` reads only its endpoint — so the studio's
33
+ * N-harmonics slider can draw the assembling chain (`positionsAt(.., N)`) AND the
34
+ * resolving curve point (`partialSumAt(.., t, N)`) off the ONE axis. Sweeping `t`
35
+ * over `[0,1)` and joining the points traces the partial-sum CURVE: at `maxTerms`
36
+ * = 1 a single ellipse, growing toward the full reconstruction as `maxTerms`
37
+ * climbs to `components.length` (the reference's "watch it sum" beauty).
38
+ *
39
+ * `maxTerms` omitted (or ≥ `components.length`) is the full reconstruction — the
40
+ * same point `positionsAt(components, t)` returns at its final tip.
41
+ */
42
+ export declare function partialSumAt(components: BasisComponent[], t: number, maxTerms?: number): [number, number];
43
+ /**
44
+ * The forward DFT — the inverse of {@link positionsAt}. Takes a closed sequence
45
+ * of `[x, y]` samples around a curve (treated as the complex signal `x + i·y`,
46
+ * uniformly spaced in the parameter `t ∈ [0, 1)`) and returns the
47
+ * {@link BasisComponent} spectrum that {@link positionsAt} reconstructs.
48
+ *
49
+ * Frequencies run symmetrically around 0 — `0, +1, -1, +2, -2, …` up to the
50
+ * Nyquist limit — which is the index ordering the epicycle chain wants (the big
51
+ * low-order phasors first). The DC term (`index 0`) is the curve's centroid; the
52
+ * caller can subtract it (draw the chain centered) or keep it (draw at the
53
+ * sampled position).
54
+ *
55
+ * General: any point set drives it (a glyph outline, a hand-traced path, a
56
+ * digitized signature). It is NOT a special case — it is the literal forward
57
+ * transform whose inverse already ships as `positionsAt`.
58
+ */
59
+ export declare function dftFromPoints(points: [number, number][]): BasisComponent[];
26
60
  /** Tuning for {@link makeEllipticSpectrum}. */
27
61
  export interface EllipticSpectrumOptions {
28
62
  /**
@@ -0,0 +1,54 @@
1
+ export interface VariantPreset {
2
+ /** Higher-order harmonics layered over the dominant counter-rotating pair. */
3
+ harmonics: number;
4
+ /** Peak magnitude of those harmonics relative to the dominant phasor. */
5
+ harmonicScale: number;
6
+ /** Draw the nested epicycle circles + arms underneath the curve. */
7
+ epicycles: boolean;
8
+ /** Comet-trail capacity (frames of head history). ~1/3 of the period so the
9
+ * comet reads as a substantial arc, not a stub (the fourier-analysis bar). */
10
+ trailLength: number;
11
+ /** Hue offset (degrees) of the epicycle second hue away from the outline hue. */
12
+ epicycleHueShift: number;
13
+ /** Forward-clock period for one full curve traversal, in ms. */
14
+ durationMs: number;
15
+ /** A constant per-variant seed used under `freeze` so a capture is deterministic. */
16
+ frozenSeed: string;
17
+ /** The parameter `t` of the static best-frame painted under `freeze`. */
18
+ frozenT: number;
19
+ /** Comet-trail PEAK alpha (the head segment). The reference trail rides ~0.9
20
+ * near-opaque — present, not the prior 0.45 hairline whisper. */
21
+ peakAlpha: number;
22
+ /** Trail stroke weight in CSS px (the reference is a BOLD 3.5px stroke, not
23
+ * the prior 1.6 hairline). The single biggest faintness lever. */
24
+ trailWidth: number;
25
+ /** Head-glow alpha — the STRONGEST layer (head-forward: > peakAlpha). */
26
+ headGlowAlpha: number;
27
+ /** Head-glow `shadowBlur` bloom radius, in px. */
28
+ headGlowBlur: number;
29
+ /** The comet HEAD DOT radius in CSS px (the reference's glowing tip — a
30
+ * saturated core + white highlight + soft halo). 0 disables it. */
31
+ headDotRadius: number;
32
+ /** Epicycle scaffolding alphas ÷ peak (hero only; {0,0} disables the scaffold).
33
+ * The reference circles/arms are PRESENT (≈0.5/0.75), not the prior 0.18 ghost. */
34
+ epicycleRatios: {
35
+ circle: number;
36
+ arm: number;
37
+ };
38
+ /** Epicycle circle / arm stroke weights in CSS px (the reference uses a bold
39
+ * ≈2.5/2 chain, the joints carry filled dots). */
40
+ epicycleWidths: {
41
+ circle: number;
42
+ arm: number;
43
+ };
44
+ /** Paint the epicycle chain as a rainbow across the spectrum (the
45
+ * fourier-analysis signature) vs one analogous second hue. Hero only. */
46
+ epicycleRainbow: boolean;
47
+ /** Trail persistence exponent — SOFT (1..2), never the quadratic that kills the body. */
48
+ trailFadeExp: number;
49
+ /** Min trail alpha ÷ peak — the body survives, never decays to 0. The
50
+ * reference body reads near-uniform; the floor sits HIGH (≈0.35) so the
51
+ * comet body has real presence on cream too (the light-mode floor fork). */
52
+ trailFloor: number;
53
+ }
54
+ export declare const PRESETS: Record<"hero" | "final", VariantPreset>;
@@ -1,4 +1,5 @@
1
1
  import { type GlassTier } from "../../../composables/glass/useGlassRenderer";
2
+ import { type Surface } from "../../ui/_shared/useSurfaceAxis";
2
3
  /**
3
4
  * Surface-tier vocabulary for the CSS rendering branch. Mirrors the v0.8
4
5
  * five-rung ladder declared in `tokens.css §8` and consumed by the
@@ -18,6 +19,12 @@ export interface GlassPanelProps {
18
19
  chromaticAberration?: boolean;
19
20
  /** Glass surface tier for the CSS rendering branch (v0.8 5-rung ladder). */
20
21
  variant?: GlassPanelVariant;
22
+ /** Surface decoration register (BA.W-SURFACE-AXIS) — the SHARED
23
+ * {glass·veil·opaque} axis. `glass` (default) renders the variant's plain
24
+ * glass rung; `veil` overlays the borderless/rimless text-legibility plate;
25
+ * `opaque` sets `--glass-level:0` (the solid-card escape). Orthogonal to
26
+ * `variant`/`tier`, exactly as `surface` is on `<Card>`. */
27
+ surface?: Surface;
21
28
  /** Additional classes */
22
29
  class?: string;
23
30
  }
@@ -27,6 +34,7 @@ type __VLS_Slots = {} & {
27
34
  };
28
35
  declare const __VLS_base: import("vue").DefineComponent<GlassPanelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<GlassPanelProps> & Readonly<{}>, {
29
36
  variant: GlassPanelVariant;
37
+ surface: Surface;
30
38
  blur: number;
31
39
  refraction: number;
32
40
  chromaticAberration: boolean;
@@ -0,0 +1,18 @@
1
+ import { type MetaballUniformLocations } from "./uploadBlobUniforms";
2
+ /** The compiled-program handles the renderer closes over + tears down. */
3
+ export interface MetaballProgram {
4
+ prog: WebGLProgram;
5
+ vs: WebGLShader;
6
+ fs: WebGLShader;
7
+ vao: WebGLVertexArrayObject;
8
+ buf: WebGLBuffer;
9
+ locs: MetaballUniformLocations;
10
+ }
11
+ /**
12
+ * Compile the metaball shader, build the full-quad VAO, and resolve the uniform
13
+ * location cache on a fresh context. Leaves `BLEND` enabled with the
14
+ * premultiplied-alpha `(ONE, ONE_MINUS_SRC_ALPHA)` blend func (the source's
15
+ * setup), `prog` in use, and the VAO bound — the caller's `resize`/`drawFrame`
16
+ * re-bind as needed.
17
+ */
18
+ export declare function buildMetaballProgram(gl: WebGL2RenderingContext): MetaballProgram;
@@ -0,0 +1,41 @@
1
+ import type { BlobConfig, MoodParams } from "../types";
2
+ import type { BlobPointer } from "./useBlobPointer";
3
+ import type { BlobSatelliteSystem } from "./useBlobSatellites";
4
+ import { MAX_SATS, TRAIL_N, MAX_BLOB_STOPS, POS_SCALE, UNIFORM_NAMES } from "../constants";
5
+ import type { UniformName } from "../constants";
6
+ export { MAX_SATS, TRAIL_N, MAX_BLOB_STOPS, POS_SCALE, UNIFORM_NAMES };
7
+ export type { UniformName };
8
+ /** The cached uniform-location set the GL setup builds once per context. */
9
+ export interface MetaballUniformLocations {
10
+ U: Record<UniformName, WebGLUniformLocation | null>;
11
+ satPosLocs: (WebGLUniformLocation | null)[];
12
+ satRadLocs: (WebGLUniformLocation | null)[];
13
+ satOpLocs: (WebGLUniformLocation | null)[];
14
+ trailPosLocs: (WebGLUniformLocation | null)[];
15
+ trailRadLocs: (WebGLUniformLocation | null)[];
16
+ paletteLocs: (WebGLUniformLocation | null)[];
17
+ }
18
+ /** The per-frame state the renderer resolves and hands to the upload leaf. */
19
+ export interface BlobFrameState {
20
+ /** The mood params for this frame (`mood.params.value`). */
21
+ params: MoodParams;
22
+ /** The resolved base-color gamma-sRGB triple. */
23
+ rgb: [number, number, number];
24
+ /** The tempo-integrated motion clock (ms). */
25
+ simTimeMs: number;
26
+ /** The substrate's seconds clock for this frame (the pulse-phase axis). */
27
+ timeSec: number;
28
+ /** A CONCRETE → gamma-sRGB triple resolver (the renderer's memoised `/color` leaf). */
29
+ resolveColor: (css: string) => [number, number, number];
30
+ /** The Fresnel rim color (CONCRETE — the SFC un-wrapped any var()-token). */
31
+ rimColor: string;
32
+ /** The multi-stop palette (CONCRETE strings; EMPTY → falls back to base). */
33
+ paletteStops: string[];
34
+ }
35
+ /**
36
+ * Write the resolved frame state into the metaball program's uniforms and issue
37
+ * the draw call. Pure: it mutates GL state only (the bound program/VAO + the
38
+ * uniform values) and never reads the renderer's closure. The body is the
39
+ * byte-identical lift of the prior inline `drawFrame` uniform-upload section.
40
+ */
41
+ export declare function uploadBlobUniforms(gl: WebGL2RenderingContext, prog: WebGLProgram, vao: WebGLVertexArrayObject, locs: MetaballUniformLocations, canvas: HTMLCanvasElement, config: BlobConfig, pointer: BlobPointer, satellites: BlobSatelliteSystem, frame: BlobFrameState): void;
@@ -1,6 +1,7 @@
1
1
  import { type Ref } from "vue";
2
- /** Compile-time trail length — mirrors `TRAIL_N` in metaball.frag.ts. */
3
- export declare const TRAIL_N = 15;
2
+ import { TRAIL_N } from "../constants";
3
+ /** Compile-time trail length — re-exported from the co-located shape budget (`../constants`). */
4
+ export { TRAIL_N };
4
5
  /** A single trail sample — a decaying-radius metaball source the shader smin-merges. */
5
6
  export interface TrailSample {
6
7
  x: number;
@@ -13,7 +14,7 @@ export interface TrailSample {
13
14
  * FRAME-RATE-INDEPENDENT critically-damped spring fed the renderer's per-frame
14
15
  * `dtMs` (NOT a fixed-α lerp — the prior `SMOOTH_FACTOR = 0.12` was framerate
15
16
  * dependent). The spring is `@mkbabb/keyframes.js` `SpringProgress` driven through
16
- * its `tick(dt)` seam by the SUBSTRATE's single rAF — it does NOT call
17
+ * its `tickDt(dtMs)` seam by the SUBSTRATE's single rAF — it does NOT call
17
18
  * `SpringProgress.play()` (that would start a parallel rAF, the
18
19
  * single-substrate-loop violation `proof:blob-interaction-prm` forbids).
19
20
  *
@@ -24,14 +24,30 @@ export interface UseMetaballRendererOptions {
24
24
  satellites: BlobSatelliteSystem;
25
25
  config: BlobConfig;
26
26
  }
27
+ /** The renderer's public control surface — pause/resume + wake the demand loop. */
28
+ export interface UseMetaballRendererReturn {
29
+ pause: () => void;
30
+ resume: () => void;
31
+ /**
32
+ * BA.W-GOO-REDRESS — re-arm the demand-parked loop on demand (the public twin
33
+ * of the internal `color`/`paletteStops` wake watchers). The SFC's pointer-wake
34
+ * wire calls this so a first hover over a fully-parked blob (all satellites
35
+ * orbiting → the AX.W16 quiescence gate has parked the rAF) repaints on the
36
+ * SAME frame instead of waiting up to an orbit horizon for the next scheduled
37
+ * satellite wake (root cause 2 / BA-goo-3). It is the EXISTING substrate wake
38
+ * handle — NO new rAF, NO second wake path (the single-substrate-loop invariant).
39
+ */
40
+ wake: () => void;
41
+ }
27
42
  /**
28
43
  * The GooBlob WebGL renderer — composes the `useWebGLCanvas` substrate (AU.W6).
29
44
  *
30
45
  * This module owns ONLY the metaball-specific concerns: compiling the shader,
31
- * building the quad + uniform cache, and uploading the per-frame uniforms derived
32
- * from the mood / pointer / satellite systems and the resolved base color. The
33
- * generic WebGL2 lifecycle — context creation, the suspend/resume model, the
34
- * demand-driven rAF loop, the tab-visibility owner, the ResizeObserver, and the
46
+ * building the quad + uniform cache (the `buildMetaballProgram` leaf), and
47
+ * uploading the per-frame uniforms (the `uploadBlobUniforms` leaf) derived from the
48
+ * mood / pointer / satellite systems and the resolved base color. The generic
49
+ * WebGL2 lifecycle — context creation, the suspend/resume model, the demand-driven
50
+ * rAF loop, the tab-visibility owner, the ResizeObserver, and the
35
51
  * webglcontextlost/restored robustness — lives in the substrate; this renderer
36
52
  * threads its behaviour through the substrate's
37
53
  * `setup`/`frame`/`shouldContinue`/`resize`/`teardown` callbacks. It does NOT call
@@ -43,7 +59,4 @@ export interface UseMetaballRendererOptions {
43
59
  * a `var(--token)` — the SFC's `resolveTokenColor` leaf does that BEFORE handing
44
60
  * concrete strings here (inv-K-3 seam); the value.js 1×1-canvas DOM probe is gone.
45
61
  */
46
- export declare function useMetaballRenderer(options: UseMetaballRendererOptions): {
47
- pause: () => void;
48
- resume: () => void;
49
- };
62
+ export declare function useMetaballRenderer(options: UseMetaballRendererOptions): UseMetaballRendererReturn;
@@ -0,0 +1,57 @@
1
+ import type { BlobMood, MoodParams } from "./types";
2
+ /** Compile-time satellite cap — mirrors `uSat*[N]` in metaball.frag.ts. */
3
+ export declare const MAX_SATS = 4;
4
+ /** Compile-time trail length — mirrors the `uTrail*[N]` arrays in metaball.frag.ts. */
5
+ export declare const TRAIL_N = 15;
6
+ /** Compile-time palette cap — mirrors `#define MAX_BLOB_STOPS` in metaball-uniforms.glsl.ts. */
7
+ export declare const MAX_BLOB_STOPS = 4;
8
+ /**
9
+ * Canvas is CSS-sized 1.6x its layout wrapper (see GooBlob.vue). Positions are in
10
+ * [-0.5, 0.5] normalized space mapped to canvas UVs. To make the layout footprint
11
+ * represent the "visible blob region" and have the extra 60% of canvas serve as
12
+ * overflow margin for satellite orbits, scale all length-like uniforms by
13
+ * 1/1.6 = 0.625.
14
+ */
15
+ export declare const POS_SCALE: number;
16
+ /** The full ordered scalar/vector uniform-name list the program builder caches a location per. */
17
+ /** A point in the 2-axis circumplex affect space. */
18
+ export interface AffectPoint {
19
+ /** Pleasantness, -1 (unpleasant) .. +1 (pleasant). */
20
+ valence: number;
21
+ /** Activation, 0 (calm/sleepy) .. 1 (energized/excited). */
22
+ arousal: number;
23
+ }
24
+ /** The five named moods as POINTS in the {valence, arousal} circumplex. */
25
+ export declare const MOOD_AVA: Record<BlobMood, AffectPoint>;
26
+ /**
27
+ * Derive the full MoodParams from a {valence, arousal} point. Arousal drives the
28
+ * motion energy (orbit speed, wobble, pulse rate/amp, noise, the iridescence/SSS
29
+ * sheen); valence warms the palette (hue range, chroma, brightness) and the
30
+ * pointer lean. ONE principled surface — the five named moods are samples of it.
31
+ */
32
+ export declare function paramsFor({ valence, arousal }: AffectPoint): MoodParams;
33
+ /** The resolved per-mood target params (samples of the `paramsFor` surface). */
34
+ export declare const MOOD_TARGETS: Record<BlobMood, MoodParams>;
35
+ /** The per-mood cross-fade duration (ms). */
36
+ export declare const TRANSITION_MS: Record<BlobMood, number>;
37
+ /** Idle timeout (ms of no pointer) after which the blob drifts to `sleepy`. */
38
+ export declare const IDLE_SLEEP_MS = 6000;
39
+ /** Click-impulse spring ring frequency (rad/s). */
40
+ export declare const PULSE_OMEGA = 18;
41
+ /** Click-impulse spring damping (< 1 = underdamped, overshoot-then-settle). */
42
+ export declare const PULSE_ZETA = 0.35;
43
+ /** The at-rest epsilon — velocity/position below this is "settled" (the park gate). */
44
+ export declare const REST_EPS = 0.001;
45
+ export declare const ORBIT_RANDOM_BASE = 0.85;
46
+ export declare const ORBIT_RANDOM_SPAN = 0.2;
47
+ export declare const SAT_WOBBLE1_BASE = 0.015;
48
+ export declare const SAT_WOBBLE1_SPAN = 0.02;
49
+ export declare const SAT_WOBBLE2_BASE = 0.01;
50
+ export declare const SAT_WOBBLE2_SPAN = 0.015;
51
+ export declare const BASE_OPACITY = 0.75;
52
+ /** Duration (ms) to blend from emerge endpoint into live orbit — eliminates snap. */
53
+ export declare const ORBIT_BLEND_MS = 2000;
54
+ /** Minimum spacing (ms) between satellite merge events. */
55
+ export declare const MERGE_STAGGER_MS = 3000;
56
+ export declare const UNIFORM_NAMES: readonly ["uResolution", "uTime", "uBaseColor", "uPointer", "uPointerActive", "uPointerAttraction", "uPointerStrength", "uBodyRadius", "uPulsePhase", "uPulseAmp", "uNoiseAmp", "uNoiseFreq", "uNoiseSpeed", "uWarpAmp", "uSmoothK", "uMerge", "uMaxReach", "uLit", "uRimColor", "uLightDir", "uSpecStrength", "uSpecShininess", "uRimPower", "uRimStrength", "uIridescence", "uIridHue", "uIridSpeed", "uSssScale", "uSssPower", "uCoreGlow", "uHueRange", "uSatShift", "uBrightnessShift", "uColorNoiseFreq", "uColorNoiseSpeed", "uStopCount", "uSatCount", "uTrailCount", "uVelocity", "uStretch"];
57
+ export type UniformName = (typeof UNIFORM_NAMES)[number];
@@ -0,0 +1 @@
1
+ export declare const METABALL_UNIFORMS_GLSL = "#version 300 es\nprecision highp float;\n\nin vec2 vUv;\nout vec4 fragColor;\n\nuniform vec2 uResolution;\nuniform float uTime;\nuniform vec3 uBaseColor;\n\n// Multi-stop palette (W11.b) \u2014 2-4 in-family OKLCh stops (uploaded GAMMA sRGB, like\n// uBaseColor). uStopCount <= 1 falls back to uBaseColor (the single-color default,\n// zero regression). MAX_BLOB_STOPS is a compile-time #define.\n#define MAX_BLOB_STOPS 4\nuniform int uStopCount;\nuniform vec3 uPalette[MAX_BLOB_STOPS];\n\n// Pointer\nuniform vec2 uPointer;\nuniform float uPointerActive;\nuniform float uPointerAttraction;\nuniform float uPointerStrength;\n\n// Main body\nuniform float uBodyRadius;\n\n// Pulsation\nuniform float uPulsePhase;\nuniform float uPulseAmp;\n\n// Surface noise\nuniform float uNoiseAmp;\nuniform float uNoiseFreq;\nuniform float uNoiseSpeed;\n\n// Gooey\nuniform float uSmoothK;\nuniform float uMerge; // 0 = quadratic smin, 1 = circular smin (rounder menisci)\n\n// AX.W16 (arm 5) \u2014 the PRE-FBM bounding-discard radius (UV space). main() early-outs\n// to a transparent write for any fragment OUTSIDE this radius BEFORE the two 3-octave\n// FBM calls + the OKLCh round-trip. The renderer uploads it PADDED by every\n// outward-expanding term (body + eccentric orbit + sat radius + smin band + FBM edge\n// amplitude + click-pulse + a lean/squash safety pad) so it NEVER clips the wet\n// meniscus (IQ: inflate the bound to match any outward op).\nuniform float uMaxReach;\n\n// Membrane \u2014 domain-warp strength on the FBM edge displacement (0 = plain fbm).\nuniform float uWarpAmp;\n\n// Lit glass surface (W9.b) \u2014 gated behind uLit so the flat fill stays default.\nuniform float uLit; // 0 = flat fill (default), 1 = lit droplet\nuniform vec3 uRimColor; // Fresnel rim tint (GAMMA sRGB, via the /color leaf)\nuniform vec3 uLightDir; // normalized light direction (x, y, z)\nuniform float uSpecStrength; // Blinn-Phong specular weight\nuniform float uSpecShininess; // specular exponent (16-64, tight glint)\nuniform float uRimPower; // Fresnel/Schlick exponent (~2-3)\nuniform float uRimStrength; // Fresnel rim weight\n\n// Iridescence + fake subsurface (W11.a) \u2014 translucent-gel read.\nuniform float uIridescence; // warm-pearl rim sheen weight (0 = off)\nuniform float uIridHue; // base hue (radians) the cosine palette biases toward (warm)\nuniform float uIridSpeed; // animated-thickness scroll for the iridescent t\nuniform float uSssScale; // fast-SSS back-light weight\nuniform float uSssPower; // fast-SSS exponent\nuniform float uCoreGlow; // thickness-driven inner-luminosity lift\n\n// Color perturbation (perceptually uniform \u2014 OKLCh L/C/h)\nuniform float uHueRange; // degrees of hue swing (converted to radians)\nuniform float uSatShift; // OKLCh chroma swing\nuniform float uBrightnessShift; // OKLCh lightness bias\nuniform float uColorNoiseFreq;\nuniform float uColorNoiseSpeed;\n\n// Satellites (max 4)\n#define MAX_SATS 4\nuniform int uSatCount;\nuniform vec2 uSatPos[MAX_SATS];\nuniform float uSatRadius[MAX_SATS];\nuniform float uSatOpacity[MAX_SATS];\n\n// Pointer trail (W10) \u2014 a decaying-radius pseudopod toward the cursor. uTrail is a\n// COMPILE-TIME-SIZED array (GLSL ES 3.00 forbids a uniform-sized array) with a\n// DYNAMIC break on uTrailCount, mirroring the satellite loop. Later samples paint\n// smaller metaballs (r *= 1 - i/N) so the trail tapers into a tail.\n#define TRAIL_N 15\nuniform int uTrailCount;\nuniform vec2 uTrailPos[TRAIL_N];\nuniform float uTrailRadius[TRAIL_N];\n\n// Velocity-driven volume-preserving squash-and-stretch (W10).\nuniform vec2 uVelocity; // smoothed pointer velocity (motion direction + speed)\nuniform float uStretch; // squash-stretch magnitude (0 = off)\n\nconst float PI = 3.141592653589793;\n";
@@ -13,8 +13,10 @@
13
13
  * The shipped register: PEN is the default (clean ink, grain:0 ⇒ no filter); the
14
14
  * CRAYON ships as the proven STROKE-crayon (constant-width offset passes + the
15
15
  * seeded static feTurbulence grain — `ds-crayon-handmark` verdict), i.e.
16
- * `ribbon:'stroke'` (the `ribbon:'hull'` perfect-freehand width-variance upgrade
17
- * is wired but unconsumed — a later field-delta, never a code branch).
16
+ * `ribbon:'stroke'`. The HIGHLIGHTER (BA.W-HANDMARK C-1) ENGAGES `ribbon:'hull'`
17
+ * — the perfect-freehand variable-width slab the atlas's field delta names — so the
18
+ * vendored pf body ships whenever the highlighter does (the budget note in the cut
19
+ * + a `profile:budget` rebaseline).
18
20
  */
19
21
  export type BlendMode = "source-over" | "multiply" | "darken" | "screen";
20
22
  export interface TaperSpec {
@@ -82,6 +84,8 @@ export interface InkPath {
82
84
  stroke?: string;
83
85
  opacity: number;
84
86
  blend: BlendMode;
87
+ /** geometry finish — bound to the SVG `stroke-linecap` on the path (C-1(d)). */
88
+ cap?: "round" | "square" | "butt";
85
89
  }
86
90
  /**
87
91
  * The named points in the continuum. `pen` is the DEFAULT (clean ink, grain:0).
@@ -112,6 +116,29 @@ export declare const BRUSHES: {
112
116
  readonly segments: 9;
113
117
  readonly cap: "round";
114
118
  };
119
+ readonly boil: {
120
+ readonly weight: 5;
121
+ readonly weightJitter: 0.12;
122
+ readonly thinning: 0.2;
123
+ readonly taper: {
124
+ readonly start: 12;
125
+ readonly end: 12;
126
+ readonly ease: "out-cubic";
127
+ };
128
+ readonly ribbon: "stroke";
129
+ readonly opacity: 1;
130
+ readonly blend: "source-over";
131
+ readonly passes: 1;
132
+ readonly passOpacity: 0;
133
+ readonly grain: 0;
134
+ readonly grainFreq: 0.1;
135
+ readonly grainScale: 0;
136
+ readonly octaves: 2;
137
+ readonly roughness: 0.9;
138
+ readonly wobble: 1.4;
139
+ readonly segments: 14;
140
+ readonly cap: "round";
141
+ };
115
142
  readonly pencil: {
116
143
  readonly weight: 3;
117
144
  readonly weightJitter: 0.3;
@@ -209,11 +236,11 @@ export declare const BRUSHES: {
209
236
  readonly weightJitter: 0.05;
210
237
  readonly thinning: 0;
211
238
  readonly taper: {
212
- readonly start: 0;
213
- readonly end: 0;
214
- readonly ease: "linear";
239
+ readonly start: 6;
240
+ readonly end: 10;
241
+ readonly ease: "out-cubic";
215
242
  };
216
- readonly ribbon: "stroke";
243
+ readonly ribbon: "hull";
217
244
  readonly opacity: 0.38;
218
245
  readonly blend: "multiply";
219
246
  readonly passes: 1;
@@ -18,7 +18,7 @@
18
18
  * (`useLineBoil.start()` early-returns under reduced motion).
19
19
  */
20
20
  import { type Ref } from "vue";
21
- import { type Brush, type BrushName } from "./brush";
21
+ import { type Brush, type BrushName } from "../brush";
22
22
  /**
23
23
  * The boil clock surface the SFC binds — the `useLineBoil` return shape, declared
24
24
  * structurally over glass-ui's OWN `Ref` (pencil-boil ships a nested `@vue`, so its
@@ -30,9 +30,9 @@ export interface BoilClock {
30
30
  start: () => void;
31
31
  stop: () => void;
32
32
  }
33
- import { type ShapeGeom } from "./geometry";
34
- import { type SVGFragment } from "./ink";
35
- import type { HandAnimation, HandMarkProps, HandShape, MarkBox } from "./types";
33
+ import { type ShapeGeom } from "../geometry";
34
+ import { type SVGFragment } from "../ink";
35
+ import type { HandAnimation, HandMarkProps, HandShape, MarkBox } from "../types";
36
36
  export interface UseHandMarkInput {
37
37
  brush: BrushName | Partial<Brush>;
38
38
  shape: HandShape;
@@ -45,6 +45,8 @@ export interface UseHandMarkInput {
45
45
  roughness: number | null;
46
46
  segments: number | null;
47
47
  jagged: boolean;
48
+ /** NATURAL underline morphology (C-2) — procedural off the house-seeded engine. */
49
+ natural: boolean;
48
50
  box: MarkBox | null;
49
51
  path: string | null;
50
52
  filterId: string;