@mkbabb/glass-ui 3.13.0 → 4.0.1

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 (507) hide show
  1. package/README.md +3 -1
  2. package/dist/CardAction-CW7a0m8M.js +253 -0
  3. package/dist/{CommandShortcut-RowNEO6i.js → CommandShortcut-DvZNQ_HF.js} +58 -53
  4. package/dist/ConfiguratorRow-BR4l-ixA.js +143 -0
  5. package/dist/{ContextMenuContent-CT3AS1WX.js → ContextMenuContent-uWnVxDab.js} +1 -1
  6. package/dist/{ContextMenuSubContent-BQmxTAdw.js → ContextMenuSubContent-xol4sD2q.js} +32 -37
  7. package/dist/{DataTable-BCddn3T3.js → DataTable-CuKwF7wr.js} +99 -97
  8. package/dist/DialogContent-DcKK8k9i.js +103 -0
  9. package/dist/{DialogFooter-Blu4t7tJ.js → DialogFooter-BZNX5aVr.js} +3 -3
  10. package/dist/FadingScroll-DI6hQhT9.js +76 -0
  11. package/dist/{HoverCardContent-Csywg3YF.js → HoverCardContent-b2uaAMRR.js} +1 -1
  12. package/dist/{HoverPopover-CISOJQuZ.js → HoverPopover-CbqbNwgU.js} +2 -2
  13. package/dist/IconChip-BTD-nay5.js +55 -0
  14. package/dist/{IconTooltip-DPzE09X9.js → IconTooltip-Bl8gFZ8d.js} +1 -1
  15. package/dist/{Input-DWQQIOC4.js → Input-h9v5LeXf.js} +1 -1
  16. package/dist/{MetricBadge-C9QMz1KT.js → MetricBadge-RHdBP72w.js} +1 -1
  17. package/dist/Notification-VUwexFUf.js +43 -0
  18. package/dist/NumberFieldContent-Cq7EzX-U.js +138 -0
  19. package/dist/PopoverContent-DL7E6vJP.js +127 -0
  20. package/dist/{Progress-DwlUKGbr.js → Progress-DctG61iZ.js} +98 -78
  21. package/dist/{ScrollingText-DfFrwSph.js → ScrollingText-yOpBzFYq.js} +2 -2
  22. package/dist/{SelectScrollDownButton-CiDUxfEj.js → SelectScrollDownButton-CrA8F0iV.js} +35 -20
  23. package/dist/{Switch-CsIuYP_e.js → Switch-CwYNf8bo.js} +1 -1
  24. package/dist/Toaster-Bw4xR8xV.js +274 -0
  25. package/dist/{ToggleGroupItem-D_AHlRw9.js → ToggleGroupItem-pEM9vIhs.js} +50 -37
  26. package/dist/{TooltipProvider-B3MkB_8P.js → TooltipProvider-rzvnXz60.js} +1 -1
  27. package/dist/animated-digit.js +2 -2
  28. package/dist/api/index.d.ts +16 -8
  29. package/dist/api/types-extra.d.ts +6 -0
  30. package/dist/api.js +2 -2
  31. package/dist/aurora.js +888 -230
  32. package/dist/badge.js +1 -1
  33. package/dist/border-progress.d.ts +1 -0
  34. package/dist/border-progress.js +106 -0
  35. package/dist/button-DYCUa-tH.js +126 -0
  36. package/dist/button.js +1 -1
  37. package/dist/canvas.js +2 -2
  38. package/dist/card.js +2 -2
  39. package/dist/carousel.d.ts +1 -1
  40. package/dist/carousel.js +90 -151
  41. package/dist/collapsible.js +1 -1
  42. package/dist/color-swatch.d.ts +1 -0
  43. package/dist/color-swatch.js +47 -0
  44. package/dist/color.js +1 -1
  45. package/dist/command.js +1 -1
  46. package/dist/compile-CQEFRTmx.js +19 -0
  47. package/dist/components/custom/aurora/composables/atoms-fields.d.ts +39 -0
  48. package/dist/components/custom/aurora/composables/auroraFallbackGround.d.ts +108 -0
  49. package/dist/components/custom/aurora/composables/runtime.d.ts +19 -0
  50. package/dist/components/custom/aurora/composables/uniformBridge.d.ts +5 -1
  51. package/dist/components/custom/aurora/composables/uniformBridgeWGPU.d.ts +51 -0
  52. package/dist/components/custom/aurora/composables/wgpuSetup.d.ts +29 -0
  53. package/dist/components/custom/aurora/constants/budget.d.ts +21 -0
  54. package/dist/components/custom/aurora/constants/presets.d.ts +30 -2
  55. package/dist/components/custom/aurora/constants/renderMode.d.ts +63 -10
  56. package/dist/components/custom/aurora/constants/shaders/aurora.wgsl.d.ts +1 -0
  57. package/dist/components/custom/aurora/constants/shaders/oil-modes.glsl.d.ts +1 -0
  58. package/dist/components/custom/aurora/constants/shaders/procedural-color.wgsl.d.ts +4 -0
  59. package/dist/components/custom/aurora/index.d.ts +3 -2
  60. package/dist/components/custom/border-progress/BorderProgress.vue.d.ts +46 -0
  61. package/dist/components/custom/border-progress/composables/useBorderSpectrum.d.ts +22 -0
  62. package/dist/components/custom/border-progress/constants.d.ts +59 -0
  63. package/dist/components/custom/border-progress/index.d.ts +4 -0
  64. package/dist/components/custom/color-swatch/ColorSwatch.vue.d.ts +22 -0
  65. package/dist/components/custom/color-swatch/index.d.ts +1 -0
  66. package/dist/components/custom/concentric/Concentric.vue.d.ts +39 -0
  67. package/dist/components/custom/concentric/composables/concentricGLSetup.d.ts +11 -0
  68. package/dist/components/custom/concentric/composables/concentricWGPUSetup.d.ts +13 -0
  69. package/dist/components/custom/concentric/composables/ringField.d.ts +44 -0
  70. package/dist/components/custom/concentric/composables/uniformBridgeWGPU.d.ts +13 -0
  71. package/dist/components/custom/concentric/composables/useConcentric.d.ts +35 -0
  72. package/dist/components/custom/concentric/constants.d.ts +43 -0
  73. package/dist/components/custom/concentric/index.d.ts +5 -0
  74. package/dist/components/custom/concentric/shaders/concentric.glsl.d.ts +4 -0
  75. package/dist/components/custom/concentric/shaders/concentric.wgsl.d.ts +1 -0
  76. package/dist/components/custom/configurator/Configurator.vue.d.ts +19 -8
  77. package/dist/components/custom/constellation/Constellation.vue.d.ts +18 -206
  78. package/dist/components/custom/constellation/composables/useConstellation.d.ts +26 -0
  79. package/dist/components/custom/constellation/constellationField.d.ts +2 -369
  80. package/dist/components/custom/constellation/constellationTypes.d.ts +369 -0
  81. package/dist/components/custom/constellation/index.d.ts +1 -1
  82. package/dist/components/custom/dock/DockIconButton.vue.d.ts +13 -4
  83. package/dist/components/custom/dock/DockLayerGroup.vue.d.ts +10 -2
  84. package/dist/components/custom/dock/DockRail.vue.d.ts +17 -16
  85. package/dist/components/custom/dock/DockSection.vue.d.ts +69 -0
  86. package/dist/components/custom/dock/DockSeparator.vue.d.ts +49 -1
  87. package/dist/components/custom/dock/DockTabButton.vue.d.ts +5 -5
  88. package/dist/components/custom/dock/composables/dockMorphMeasure.d.ts +75 -0
  89. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +13 -0
  90. package/dist/components/custom/dock/constants.d.ts +35 -0
  91. package/dist/components/custom/dock/index.d.ts +2 -0
  92. package/dist/components/custom/dot-flow-field/DotFlowField.vue.d.ts +38 -0
  93. package/dist/components/custom/dot-flow-field/composables/flowField.d.ts +41 -0
  94. package/dist/components/custom/dot-flow-field/composables/uniformBridgeWGPU.d.ts +24 -0
  95. package/dist/components/custom/dot-flow-field/composables/useDotFlowField.d.ts +34 -0
  96. package/dist/components/custom/dot-flow-field/composables/useFlowParticles.d.ts +18 -0
  97. package/dist/components/custom/dot-flow-field/constants.d.ts +48 -0
  98. package/dist/components/custom/dot-flow-field/index.d.ts +5 -0
  99. package/dist/components/custom/dot-flow-field/shaders/flow-field.compute.wgsl.d.ts +1 -0
  100. package/dist/components/custom/dot-flow-field/shaders/flow-field.glsl.d.ts +20 -0
  101. package/dist/components/custom/dot-flow-field/shaders/flow-field.render.wgsl.d.ts +1 -0
  102. package/dist/components/custom/easing/EasingConfigurator.vue.d.ts +33 -0
  103. package/dist/components/custom/easing/EasingPicker.vue.d.ts +49 -0
  104. package/dist/components/custom/easing/composables/useEasingPicker.d.ts +75 -0
  105. package/dist/components/custom/easing/constants.d.ts +28 -0
  106. package/dist/components/custom/easing/index.d.ts +3 -0
  107. package/dist/components/custom/expandable-container/ExpandableContainer.vue.d.ts +10 -0
  108. package/dist/components/custom/fading-scroll/FadingScroll.vue.d.ts +25 -0
  109. package/dist/components/custom/fading-scroll/composables/useFadingScroll.d.ts +31 -0
  110. package/dist/components/custom/fading-scroll/constants.d.ts +19 -0
  111. package/dist/components/custom/fading-scroll/index.d.ts +2 -0
  112. package/dist/components/custom/fourier-field/FourierField.vue.d.ts +19 -2
  113. package/dist/components/custom/fourier-field/composables/useFourierField.d.ts +39 -0
  114. package/dist/components/custom/fourier-field/constants.d.ts +7 -0
  115. package/dist/components/custom/fourier-field/index.d.ts +1 -1
  116. package/dist/components/custom/fourier-field/math.d.ts +17 -0
  117. package/dist/components/custom/glass-panel/GlassPanel.vue.d.ts +9 -1
  118. package/dist/components/custom/goo-blob/GooBlob.vue.d.ts +4 -2
  119. package/dist/components/custom/goo-blob/composables/uniformBridgeWGPU.d.ts +24 -0
  120. package/dist/components/custom/goo-blob/composables/useMetaballRenderer.d.ts +29 -12
  121. package/dist/components/custom/goo-blob/composables/wgpuSetup.d.ts +23 -0
  122. package/dist/components/custom/goo-blob/constants.d.ts +6 -1
  123. package/dist/components/custom/goo-blob/shaders/metaball.wgsl.d.ts +1 -0
  124. package/dist/components/custom/handmark/HandMark.vue.d.ts +29 -0
  125. package/dist/components/custom/handmark/brush.d.ts +269 -0
  126. package/dist/components/custom/handmark/composables/useHandMark.d.ts +89 -0
  127. package/dist/components/custom/handmark/constants.d.ts +39 -0
  128. package/dist/components/custom/handmark/freehand.d.ts +69 -0
  129. package/dist/components/custom/handmark/geometry.d.ts +52 -0
  130. package/dist/components/custom/handmark/index.d.ts +27 -0
  131. package/dist/components/custom/handmark/ink.d.ts +11 -0
  132. package/dist/components/custom/handmark/texture.d.ts +39 -0
  133. package/dist/components/custom/handmark/types.d.ts +62 -0
  134. package/dist/components/custom/icon-chip/IconChip.vue.d.ts +4 -0
  135. package/dist/components/custom/icon-chip/index.d.ts +2 -0
  136. package/dist/components/custom/icon-chip/types.d.ts +82 -0
  137. package/dist/components/custom/instrument-chassis/InstrumentChassis.vue.d.ts +17 -2
  138. package/dist/components/custom/metric-stack/MetricStack.vue.d.ts +1 -1
  139. package/dist/components/custom/pager-dots/PagerDots.vue.d.ts +39 -0
  140. package/dist/components/custom/pager-dots/index.d.ts +2 -0
  141. package/dist/components/custom/spa-view/SpaView.vue.d.ts +50 -0
  142. package/dist/components/custom/spa-view/index.d.ts +2 -0
  143. package/dist/components/custom/tabs/SegmentedTabs.vue.d.ts +29 -24
  144. package/dist/components/custom/tabs/composables/useTabDragMorph.d.ts +42 -0
  145. package/dist/components/custom/tabs/composables/useTabIndicator.d.ts +30 -21
  146. package/dist/components/custom/tabs/constants.d.ts +9 -3
  147. package/dist/components/custom/tabs/index.d.ts +1 -1
  148. package/dist/components/custom/watercolor-dot/WatercolorDot.vue.d.ts +15 -1
  149. package/dist/components/ui/_shared/index.d.ts +2 -0
  150. package/dist/components/ui/_shared/menuItemVariants.d.ts +19 -0
  151. package/dist/components/ui/_shared/useSurfaceAxis.d.ts +41 -0
  152. package/dist/components/ui/badge/index.d.ts +1 -1
  153. package/dist/components/ui/button/Button.vue.d.ts +5 -2
  154. package/dist/components/ui/button/index.d.ts +2 -2
  155. package/dist/components/ui/card/Card.vue.d.ts +34 -4
  156. package/dist/components/ui/card/CardHeader.vue.d.ts +42 -16
  157. package/dist/components/ui/card/ScrollCard.vue.d.ts +33 -0
  158. package/dist/components/ui/card/ScrollCardHeader.vue.d.ts +17 -0
  159. package/dist/components/ui/card/index.d.ts +2 -0
  160. package/dist/components/ui/carousel/CarouselNext.vue.d.ts +2 -2
  161. package/dist/components/ui/carousel/CarouselPrevious.vue.d.ts +2 -2
  162. package/dist/components/ui/carousel/GlassCarouselPager.vue.d.ts +2 -2
  163. package/dist/components/ui/carousel/index.d.ts +0 -1
  164. package/dist/components/ui/command/Command.vue.d.ts +4 -1
  165. package/dist/components/ui/dialog/DialogContent.vue.d.ts +8 -3
  166. package/dist/components/ui/drawer/Drawer.vue.d.ts +46 -33
  167. package/dist/components/ui/drawer/DrawerContent.vue.d.ts +12 -8
  168. package/dist/components/ui/drawer/DrawerDescription.vue.d.ts +2 -2
  169. package/dist/components/ui/drawer/DrawerOverlay.vue.d.ts +1 -1
  170. package/dist/components/ui/drawer/DrawerTitle.vue.d.ts +2 -2
  171. package/dist/components/ui/drawer/composables/drawerSnapContext.d.ts +26 -0
  172. package/dist/components/ui/drawer/composables/useDrawerSnap.d.ts +17 -0
  173. package/dist/components/ui/drawer/constants.d.ts +45 -0
  174. package/dist/components/ui/drawer/index.d.ts +23 -15
  175. package/dist/components/ui/focus-scope/FocusScope.vue.d.ts +20 -0
  176. package/dist/components/ui/focus-scope/index.d.ts +2 -0
  177. package/dist/components/ui/index.d.ts +1 -1
  178. package/dist/components/ui/popover/PopoverContent.vue.d.ts +3 -0
  179. package/dist/components/ui/progress/ProgressDefault.vue.d.ts +3 -2
  180. package/dist/components/ui/progress/ProgressSectioned.vue.d.ts +14 -3
  181. package/dist/components/ui/select/SelectContent.vue.d.ts +1 -1
  182. package/dist/components/ui/select/SelectTrigger.vue.d.ts +27 -4
  183. package/dist/components/ui/sheet/SheetContent.vue.d.ts +6 -0
  184. package/dist/components/ui/sheet/index.d.ts +1 -1
  185. package/dist/components/ui/skeleton/Skeleton.vue.d.ts +3 -0
  186. package/dist/components/ui/tags-input/TagsInput.vue.d.ts +2 -2
  187. package/dist/components/ui/toast/Toast.vue.d.ts +5 -2
  188. package/dist/components/ui/toast/use-toast.d.ts +14 -0
  189. package/dist/components/ui/toggle/Toggle.vue.d.ts +1 -1
  190. package/dist/composables/dark/index.d.ts +1 -1
  191. package/dist/composables/dark/useGlobalDark.d.ts +23 -1
  192. package/dist/composables/glass/canvas2d/useCanvas2D.d.ts +13 -6
  193. package/dist/composables/glass/index.d.ts +5 -2
  194. package/dist/composables/glass/useSpecularPointer.d.ts +33 -0
  195. package/dist/composables/glass/useSpecularTracking.d.ts +20 -0
  196. package/dist/composables/glass/vSpecular.d.ts +2 -0
  197. package/dist/composables/glass/webgl/shaders/flow.glsl.d.ts +1 -0
  198. package/dist/composables/glass/webgl/useWebGLCanvas.d.ts +16 -0
  199. package/dist/composables/glass/webgpu/index.d.ts +2 -0
  200. package/dist/composables/glass/webgpu/useGpuSubstrate.d.ts +54 -0
  201. package/dist/composables/glass/webgpu/useWebGPUCanvas.d.ts +84 -0
  202. package/dist/composables/motion/core/index.d.ts +1 -0
  203. package/dist/composables/motion/index.d.ts +4 -0
  204. package/dist/composables/motion/useDockCtaReceive.d.ts +59 -0
  205. package/dist/composables/motion/useDragMorph.d.ts +77 -0
  206. package/dist/composables/motion/useLiquidFlex.d.ts +11 -0
  207. package/dist/composables/motion/useLiquidPress.d.ts +71 -0
  208. package/dist/composables/motion/useLiquidReveal.d.ts +51 -0
  209. package/dist/composables/motion/useNumericTransition.d.ts +3 -3
  210. package/dist/composables/motion/usePointerVelocityField.d.ts +98 -0
  211. package/dist/composables/motion/useViewTransition.d.ts +36 -1
  212. package/dist/concentric.d.ts +1 -0
  213. package/dist/concentric.js +562 -0
  214. package/dist/configurator.js +3 -2
  215. package/dist/confirm-dialog.js +22 -24
  216. package/dist/constellation.js +93 -95
  217. package/dist/context-menu.js +3 -3
  218. package/dist/controls.js +10 -4
  219. package/dist/createCanvasLifecycle-CHD5XrDW.js +82 -0
  220. package/dist/dark.d.ts +1 -1
  221. package/dist/dark.js +1 -1
  222. package/dist/data-table.js +1 -1
  223. package/dist/dialog.js +2 -2
  224. package/dist/dock.js +738 -442
  225. package/dist/{dockContext-BegmJVmx.js → dockContext-BNfyPLe9.js} +1 -1
  226. package/dist/dom.js +5 -5
  227. package/dist/dot-flow-field.d.ts +1 -0
  228. package/dist/dot-flow-field.js +604 -0
  229. package/dist/drawer.d.ts +1 -0
  230. package/dist/drawer.js +380 -0
  231. package/dist/{dropdown-menu-DzkkyBwX.js → dropdown-menu-CofSZuk8.js} +14 -15
  232. package/dist/dropdown-menu.js +1 -1
  233. package/dist/easing.d.ts +1 -0
  234. package/dist/easing.js +463 -0
  235. package/dist/expandable-container.js +45 -38
  236. package/dist/fading-scroll.d.ts +1 -0
  237. package/dist/fading-scroll.js +2 -0
  238. package/dist/focus-scope.d.ts +1 -0
  239. package/dist/focus-scope.js +23 -0
  240. package/dist/forms.js +7 -7
  241. package/dist/fourier-field.js +135 -122
  242. package/dist/fourier-math.js +2 -2
  243. package/dist/glass-panel.js +39 -36
  244. package/dist/glass-ui.css +1 -1
  245. package/dist/glass-ui.js +154 -362
  246. package/dist/goo-blob.js +838 -227
  247. package/dist/handmark.d.ts +1 -0
  248. package/dist/handmark.js +707 -0
  249. package/dist/header-ribbon.js +1 -1
  250. package/dist/hover-card.js +1 -1
  251. package/dist/hover-popover.js +1 -1
  252. package/dist/icon-chip.d.ts +1 -0
  253. package/dist/icon-chip.js +2 -0
  254. package/dist/icon-tooltip.js +1 -1
  255. package/dist/index.d.ts +3 -3
  256. package/dist/instrument-chassis.js +1 -1
  257. package/dist/keyboard.js +1 -1
  258. package/dist/label.js +1 -1
  259. package/dist/labeled-field.js +6 -6
  260. package/dist/{math-U6-RrLmV.js → math-BINYmg5z.js} +11 -3
  261. package/dist/{menuItemVariants-DPiEarb0.js → menuItemVariants-D8VNHq22.js} +10 -4
  262. package/dist/metric-badge.js +1 -1
  263. package/dist/metric-cell.js +25 -22
  264. package/dist/metric-stack.js +4 -8
  265. package/dist/motion-core.js +36 -35
  266. package/dist/motion-curves.js +1 -1
  267. package/dist/motion.js +157 -55
  268. package/dist/notification.js +1 -1
  269. package/dist/number-field.js +1 -1
  270. package/dist/pager-dots.d.ts +1 -0
  271. package/dist/pager-dots.js +91 -0
  272. package/dist/paper-backdrop.js +1 -1
  273. package/dist/popover.js +1 -1
  274. package/dist/{presets-BKVyQfbt.js → presets-BW2b-fr1.js} +14 -1
  275. package/dist/{compile-B7NGOBcP.js → procedural-color.glsl-CIFsJhwI.js} +1 -155
  276. package/dist/procedural-color.wgsl-CToRHugY.js +224 -0
  277. package/dist/progress.js +1 -1
  278. package/dist/pulse.js +1 -1
  279. package/dist/reactive.js +2 -2
  280. package/dist/scrolling-text.js +1 -1
  281. package/dist/search.js +10 -12
  282. package/dist/select.js +3 -3
  283. package/dist/separator.js +1 -1
  284. package/dist/sheet-tZMg0E0w.js +218 -0
  285. package/dist/sheet.js +1 -1
  286. package/dist/{slider-B-JP2JlI.js → slider-DVb4HXU-.js} +7 -7
  287. package/dist/slider.js +1 -1
  288. package/dist/sortable-list.js +3 -3
  289. package/dist/spa-view.d.ts +1 -0
  290. package/dist/spa-view.js +46 -0
  291. package/dist/styles/animations.css +40 -31
  292. package/dist/styles/border-progress.css +109 -0
  293. package/dist/styles/cards.css +76 -0
  294. package/dist/styles/components.css +1 -1
  295. package/dist/styles/configurator.css +35 -0
  296. package/dist/styles/critical-partition.mjs +140 -0
  297. package/dist/styles/critical.css +12 -0
  298. package/dist/styles/deferred.css +31 -0
  299. package/dist/styles/dock/density.css +64 -0
  300. package/dist/styles/dock/layers.css +54 -30
  301. package/dist/styles/dock/morph.css +124 -7
  302. package/dist/styles/dock/overflow.css +31 -2
  303. package/dist/styles/dock/rail-extend.css +168 -71
  304. package/dist/styles/dock/section.css +59 -0
  305. package/dist/styles/dock/shell.css +83 -16
  306. package/dist/styles/dock-controls/icon-button.css +11 -1
  307. package/dist/styles/dock-controls/tab-button.css +24 -83
  308. package/dist/styles/dock-controls/triggers.css +7 -0
  309. package/dist/styles/dock.css +38 -3
  310. package/dist/styles/drawer.css +127 -35
  311. package/dist/styles/feedback-tone.css +104 -0
  312. package/dist/styles/glass/deep.css +44 -0
  313. package/dist/styles/glass/ladder.css +154 -52
  314. package/dist/styles/glass/material.css +78 -15
  315. package/dist/styles/glass/reveal.css +136 -0
  316. package/dist/styles/glass/rim.css +100 -0
  317. package/dist/styles/glass/surface-axis.css +113 -0
  318. package/dist/styles/glass/surfaces.css +189 -15
  319. package/dist/styles/glass-refract.css +96 -44
  320. package/dist/styles/glass-specular-track.css +7 -0
  321. package/dist/styles/glass.css +8 -2
  322. package/dist/styles/hover-popover.css +7 -6
  323. package/dist/styles/icon-chip.css +211 -0
  324. package/dist/styles/index.css +78 -4
  325. package/dist/styles/instrument-chassis.css +107 -2
  326. package/dist/styles/menu.css +127 -0
  327. package/dist/styles/scroll-choreography.css +300 -0
  328. package/dist/styles/segmented-tabs.css +188 -86
  329. package/dist/styles/select.css +50 -0
  330. package/dist/styles/theme/bridges.css +22 -1
  331. package/dist/styles/theme/literals.css +11 -2
  332. package/dist/styles/theme/radius.css +6 -1
  333. package/dist/styles/tokens/color-radius.css +40 -13
  334. package/dist/styles/tokens/dark-arm.css +200 -20
  335. package/dist/styles/tokens/glass-deep.css +75 -0
  336. package/dist/styles/tokens/glass-fx.css +333 -0
  337. package/dist/styles/tokens/glass.css +95 -315
  338. package/dist/styles/tokens/light-dark.css +64 -22
  339. package/dist/styles/tokens/offsets.css +116 -0
  340. package/dist/styles/tokens/on-glass-fg.css +39 -0
  341. package/dist/styles/tokens/property-regs.css +130 -10
  342. package/dist/styles/tokens/scale-paper.css +155 -84
  343. package/dist/styles/tokens/scheme-motion.css +102 -46
  344. package/dist/styles/tokens/scroll-tokens.css +123 -0
  345. package/dist/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  346. package/dist/styles/tokens.css +9 -3
  347. package/dist/styles/transitions.css +7 -7
  348. package/dist/styles/typography/scale.css +153 -0
  349. package/dist/styles/typography/semantic.css +220 -0
  350. package/dist/styles/typography/utilities.css +174 -0
  351. package/dist/styles/typography.css +23 -507
  352. package/dist/styles/utilities/a11y-overrides.css +33 -4
  353. package/dist/styles/utilities/animate.css +27 -24
  354. package/dist/styles/utilities/base-misc.css +255 -0
  355. package/dist/styles/utilities/base.css +100 -138
  356. package/dist/styles/utilities/btn.css +21 -202
  357. package/dist/styles/utilities/metal.css +189 -0
  358. package/dist/styles/utilities.css +14 -7
  359. package/dist/styles/view-transition.css +4 -1
  360. package/dist/switch.js +1 -1
  361. package/dist/tabs.js +275 -191
  362. package/dist/timeline.js +2 -2
  363. package/dist/toast.js +1 -1
  364. package/dist/toggle-chip.js +3 -1
  365. package/dist/toggle-group.js +1 -1
  366. package/dist/tooltip.js +1 -1
  367. package/dist/typewriter.js +1 -1
  368. package/dist/{useAnimatedNumber-C5I3wWd8.js → useAnimatedNumber-BfUq2bUM.js} +1 -1
  369. package/dist/useCanvas2D-B8w_E3Rr.js +83 -0
  370. package/dist/useConfiguratorState-DNlOh6c8.js +161 -0
  371. package/dist/useDragMorph-DgxnsVJz.js +102 -0
  372. package/dist/{useGlobalDark-yhL4Wp-s.js → useGlobalDark-C28t0VWJ.js} +22 -3
  373. package/dist/useLiquidPress-kfb4KX79.js +39 -0
  374. package/dist/usePointerVelocityField-JbRd5CrM.js +137 -0
  375. package/dist/{useRAFLoop-Bxv0o6L5.js → useRAFLoop-UYa4zoiN.js} +1 -1
  376. package/dist/useSpring-C0jyvEJB.js +40 -0
  377. package/dist/useSpringMount-q1amq1SJ.js +71 -0
  378. package/dist/useSpringPress-BsqPr7FJ.js +34 -0
  379. package/dist/useSurfaceAxis-g0NloYEF.js +7 -0
  380. package/dist/{useTouchGate-Dg7MQI1G.js → useTouchGate-CBZTD4SD.js} +1 -1
  381. package/dist/vReveal-Czsb7zQC.js +10 -0
  382. package/dist/vSpecular-CQFmLNzA.js +68 -0
  383. package/dist/vendor-CKmzio-i.js +226 -0
  384. package/dist/watercolor-dot.js +12 -5
  385. package/package.json +193 -25
  386. package/src/styles/animations.css +40 -31
  387. package/src/styles/border-progress.css +109 -0
  388. package/src/styles/cards.css +76 -0
  389. package/src/styles/configurator.css +35 -0
  390. package/src/styles/critical-partition.mjs +140 -0
  391. package/src/styles/dock/density.css +64 -0
  392. package/src/styles/dock/layers.css +54 -30
  393. package/src/styles/dock/morph.css +124 -7
  394. package/src/styles/dock/overflow.css +31 -2
  395. package/src/styles/dock/rail-extend.css +168 -71
  396. package/src/styles/dock/section.css +59 -0
  397. package/src/styles/dock/shell.css +83 -16
  398. package/src/styles/dock-controls/icon-button.css +11 -1
  399. package/src/styles/dock-controls/tab-button.css +24 -83
  400. package/src/styles/dock-controls/triggers.css +7 -0
  401. package/src/styles/dock.css +38 -3
  402. package/src/styles/drawer.css +123 -35
  403. package/src/styles/feedback-tone.css +104 -0
  404. package/src/styles/glass/deep.css +44 -0
  405. package/src/styles/glass/ladder.css +154 -52
  406. package/src/styles/glass/material.css +78 -15
  407. package/src/styles/glass/reveal.css +136 -0
  408. package/src/styles/glass/rim.css +100 -0
  409. package/src/styles/glass/surface-axis.css +113 -0
  410. package/src/styles/glass/surfaces.css +189 -15
  411. package/src/styles/glass-refract.css +96 -44
  412. package/src/styles/glass-specular-track.css +7 -0
  413. package/src/styles/glass.css +8 -2
  414. package/src/styles/hover-popover.css +7 -6
  415. package/src/styles/icon-chip.css +211 -0
  416. package/src/styles/index.css +78 -4
  417. package/src/styles/instrument-chassis.css +107 -2
  418. package/src/styles/menu.css +127 -0
  419. package/src/styles/scroll-choreography.css +300 -0
  420. package/src/styles/segmented-tabs.css +184 -84
  421. package/src/styles/select.css +50 -0
  422. package/src/styles/theme/bridges.css +22 -1
  423. package/src/styles/theme/literals.css +11 -2
  424. package/src/styles/theme/radius.css +6 -1
  425. package/src/styles/tokens/color-radius.css +40 -13
  426. package/src/styles/tokens/dark-arm.css +200 -20
  427. package/src/styles/tokens/glass-deep.css +75 -0
  428. package/src/styles/tokens/glass-fx.css +333 -0
  429. package/src/styles/tokens/glass.css +95 -315
  430. package/src/styles/tokens/light-dark.css +64 -22
  431. package/src/styles/tokens/offsets.css +116 -0
  432. package/src/styles/tokens/on-glass-fg.css +39 -0
  433. package/src/styles/tokens/property-regs.css +130 -10
  434. package/src/styles/tokens/scale-paper.css +155 -84
  435. package/src/styles/tokens/scheme-motion.css +102 -46
  436. package/src/styles/tokens/scroll-tokens.css +123 -0
  437. package/src/styles/tokens/{offsets-sizing.css → sizing.css} +88 -89
  438. package/src/styles/tokens.css +9 -3
  439. package/src/styles/transitions.css +7 -7
  440. package/src/styles/typography/scale.css +153 -0
  441. package/src/styles/typography/semantic.css +220 -0
  442. package/src/styles/typography/utilities.css +174 -0
  443. package/src/styles/typography.css +23 -507
  444. package/src/styles/utilities/a11y-overrides.css +33 -4
  445. package/src/styles/utilities/animate.css +27 -24
  446. package/src/styles/utilities/base-misc.css +255 -0
  447. package/src/styles/utilities/base.css +100 -138
  448. package/src/styles/utilities/btn.css +21 -202
  449. package/src/styles/utilities/metal.css +189 -0
  450. package/src/styles/utilities.css +14 -7
  451. package/src/styles/view-transition.css +4 -1
  452. package/dist/CardAction-Cj2eycQ2.js +0 -157
  453. package/dist/DialogContent-Dl9WkAoS.js +0 -100
  454. package/dist/Notification-DdwNxIrI.js +0 -100
  455. package/dist/NumberFieldContent-CqaN-SvN.js +0 -145
  456. package/dist/PopoverContent-BYwt2-4x.js +0 -121
  457. package/dist/TabsList-Dttss653.js +0 -105
  458. package/dist/Toaster-D6q4HtXu.js +0 -263
  459. package/dist/button-ChXMfsud.js +0 -81
  460. package/dist/check-njhk-vfu.js +0 -7
  461. package/dist/chevron-down-DKkxb4VV.js +0 -7
  462. package/dist/chevron-right-CPXbqQQz.js +0 -7
  463. package/dist/chevron-up-n_24SqI-.js +0 -7
  464. package/dist/components/custom/underline/GlassUnderline.vue.d.ts +0 -84
  465. package/dist/components/custom/underline/index.d.ts +0 -2
  466. package/dist/components/custom/underline/types.d.ts +0 -56
  467. package/dist/components/ui/carousel/CarouselDots.vue.d.ts +0 -4
  468. package/dist/createLucideIcon-DydS2qgk.js +0 -43
  469. package/dist/minimize-2-BV31Ob_h.js +0 -38
  470. package/dist/search-BSGrf2Sk.js +0 -12
  471. package/dist/sheet-1fChZjtw.js +0 -214
  472. package/dist/underline.d.ts +0 -1
  473. package/dist/underline.js +0 -85
  474. package/dist/useCanvas2D-ClrQuZtp.js +0 -96
  475. package/dist/useConfiguratorState-DAoeHVue.js +0 -287
  476. package/dist/useSpecularTracking-Bo5su68i.js +0 -32
  477. package/dist/useSpringMount-CI2jOstM.js +0 -108
  478. package/dist/vReveal-CqaCz_mC.js +0 -44
  479. package/dist/x-BUwTKe50.js +0 -10
  480. /package/dist/{CollapsibleContent-CP9qF1v4.js → CollapsibleContent-68dEXIAl.js} +0 -0
  481. /package/dist/{InstrumentChassis-UUJX0-mW.js → InstrumentChassis-Bx0F_q5g.js} +0 -0
  482. /package/dist/{Label-r3WzWrsj.js → Label-C2ejNWeC.js} +0 -0
  483. /package/dist/{ModalOverlay-DVLI2VRr.js → ModalOverlay-D1VrWyoi.js} +0 -0
  484. /package/dist/{PaperBackdrop-DIXTtVq6.js → PaperBackdrop-Vf3tlpvd.js} +0 -0
  485. /package/dist/{SelectGroup-aumMgWLs.js → SelectGroup-DwwjicPY.js} +0 -0
  486. /package/dist/{SelectSeparator-BQ_1Fcbp.js → SelectSeparator-DXswVdRz.js} +0 -0
  487. /package/dist/{Separator-0JE6LtNu.js → Separator-pKF0oA4M.js} +0 -0
  488. /package/dist/{_plugin-vue_export-helper-ok8pgSl5.js → _plugin-vue_export-helper-C1je1s0u.js} +0 -0
  489. /package/dist/{badge-UILT_3pZ.js → badge-D9XWW4GT.js} +0 -0
  490. /package/dist/{color-CUYeFbgd.js → color-DweYl7pE.js} +0 -0
  491. /package/dist/{constants-CS75AWHG.js → constants-BPOqYJAm.js} +0 -0
  492. /package/dist/{createContext-BM46COQ-.js → createContext-CpBNTRMI.js} +0 -0
  493. /package/dist/{prng-D27-B3tK.js → prng-Za0Rmgag.js} +0 -0
  494. /package/dist/{resolveCanvasColor-BBiYfp8g.js → resolveCanvasColor-CUyHr5Uu.js} +0 -0
  495. /package/dist/{springPresets--YdWTHtm.js → springPresets-CFQGQfdl.js} +0 -0
  496. /package/dist/{useIntersectionPause-Cc-H9ees.js → useIntersectionPause-Bj4sPkMh.js} +0 -0
  497. /package/dist/{useInterval-iHludrxk.js → useInterval-CvK1mL92.js} +0 -0
  498. /package/dist/{useKeyboardShortcuts-Be3w_Rwk.js → useKeyboardShortcuts-BXWXOZ-9.js} +0 -0
  499. /package/dist/{useLiquidFlex-BL0lLLN2.js → useLiquidFlex-mZPMiNXh.js} +0 -0
  500. /package/dist/{useResizeObserver-BhgdhOIj.js → useResizeObserver-Bpoi7tRE.js} +0 -0
  501. /package/dist/{useResolveTokenColor-Dvn2RZJW.js → useResolveTokenColor-vAylyR0x.js} +0 -0
  502. /package/dist/{useScrollProgress-Dlvx-L3v.js → useScrollProgress-D7bYU2RK.js} +0 -0
  503. /package/dist/{useSortable-muI29agz.js → useSortable-DHjtZSEd.js} +0 -0
  504. /package/dist/{useTextHighlight-DmRYkOBx.js → useTextHighlight-CWEi25hf.js} +0 -0
  505. /package/dist/{useTimer-Dzarvzuk.js → useTimer-BHJOKr35.js} +0 -0
  506. /package/dist/{useUserInvalidAria-B2h6jAM_.js → useUserInvalidAria-y5namzeE.js} +0 -0
  507. /package/dist/{useViewportReady-B40FK4Pa.js → useViewportReady-anbac3m6.js} +0 -0
@@ -0,0 +1,269 @@
1
+ /**
2
+ * brush.ts — the flat Brush DATA model (the keystone; SPEC §2). Pure data, 0 deps.
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * A `Brush` is a plain JSON-serialisable record — twelve scalars, four enums, and
5
+ * one optional `stamp` function. Every built-in medium is a frozen literal: a
6
+ * POINT in one continuous parameter space, NOT a class in a taxonomy. The renderer
7
+ * (`ink.ts`) reads fields — it NEVER branches on instrument name (SPEC §12 acc-1).
8
+ * Adding a medium = adding one row here; an in-between medium = a spread/lerp.
9
+ *
10
+ * Field-count discipline (SPEC §2): resist a 13th scalar per new instrument —
11
+ * `blend` earned its place only because highlighter genuinely needed `multiply`.
12
+ *
13
+ * The shipped register: PEN is the default (clean ink, grain:0 ⇒ no filter); the
14
+ * CRAYON ships as the proven STROKE-crayon (constant-width offset passes + the
15
+ * seeded static feTurbulence grain — `ds-crayon-handmark` verdict), i.e.
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).
20
+ */
21
+ export type BlendMode = "source-over" | "multiply" | "darken" | "screen";
22
+ export interface TaperSpec {
23
+ /** px the width ramps 0→full at the start (lift-on). */
24
+ start: number;
25
+ /** px the width ramps full→0 at the end (lift-off / dry run-out). */
26
+ end: number;
27
+ /** out-cubic = the lazy pencil run-out. */
28
+ ease: "linear" | "out-cubic";
29
+ }
30
+ export interface Brush {
31
+ /** base stroke diameter, in viewBox units. */
32
+ weight: number;
33
+ /** 0..1.4 seeded ±width variance along arc-length. */
34
+ weightJitter: number;
35
+ /** -1..1 pressure→width gain (pf `thinning`). */
36
+ thinning: number;
37
+ /** lift-on / lift-off ramp. */
38
+ taper: TaperSpec;
39
+ /** L2 body strategy: plain stroked <path> | pf filled hull. DEFAULT 'stroke'. */
40
+ ribbon: "stroke" | "hull";
41
+ /** 0..1 base alpha. */
42
+ opacity: number;
43
+ /** 'source-over' ink | 'multiply' highlighter-behind-text. */
44
+ blend: BlendMode;
45
+ /** overdraw count (pen 1 · crayon 2-3). */
46
+ passes: number;
47
+ /** 0..1 per-pass alpha falloff (heavy core, light fringe). */
48
+ passOpacity: number;
49
+ /** 0..1 paper-through depth — THE master pen↔crayon knob. 0 ⇒ NO filter. */
50
+ grain: number;
51
+ /** feTurbulence baseFrequency (high=pencil tooth · low=crayon wax). */
52
+ grainFreq: number;
53
+ /** feDisplacementMap edge-fray scale, px. */
54
+ grainScale: number;
55
+ /** feTurbulence numOctaves (grain richness). */
56
+ octaves: number;
57
+ /** macro tremor → wobbleLinePoints({ roughness }). */
58
+ roughness: number;
59
+ /** micro displacement scale (boil amplitude + warp filter). */
60
+ wobble: number;
61
+ /** wobble centerline resolution. */
62
+ segments: number;
63
+ cap: "round" | "square" | "butt";
64
+ /** when present, OVERRIDES the built-in ink stage only. */
65
+ stamp?: StampFn;
66
+ }
67
+ /** SPEC §5 — the arbitrary-brush escape hatch (one optional field, not a framework). */
68
+ export type StampFn = (ctx: {
69
+ centerline: [number, number][];
70
+ brush: Brush;
71
+ rng: () => number;
72
+ seed: number;
73
+ length: number;
74
+ color: string;
75
+ }) => {
76
+ paths: InkPath[];
77
+ filterId?: string | null;
78
+ defs?: string[];
79
+ };
80
+ /** One ink path the renderer emits (shared with ink.ts; declared here to avoid a cycle). */
81
+ export interface InkPath {
82
+ d: string;
83
+ fill?: string;
84
+ stroke?: string;
85
+ opacity: number;
86
+ blend: BlendMode;
87
+ /** geometry finish — bound to the SVG `stroke-linecap` on the path (C-1(d)). */
88
+ cap?: "round" | "square" | "butt";
89
+ }
90
+ /**
91
+ * The named points in the continuum. `pen` is the DEFAULT (clean ink, grain:0).
92
+ * `crayon` is the SHIPPED stroke-crayon (ribbon:'stroke', the static grain filter);
93
+ * `pencil`/`marker`/`highlighter` round out the spanning set.
94
+ */
95
+ export declare const BRUSHES: {
96
+ readonly pen: {
97
+ readonly weight: 6;
98
+ readonly weightJitter: 0.1;
99
+ readonly thinning: 0.15;
100
+ readonly taper: {
101
+ readonly start: 14;
102
+ readonly end: 14;
103
+ readonly ease: "out-cubic";
104
+ };
105
+ readonly ribbon: "stroke";
106
+ readonly opacity: 1;
107
+ readonly blend: "source-over";
108
+ readonly passes: 1;
109
+ readonly passOpacity: 0;
110
+ readonly grain: 0;
111
+ readonly grainFreq: 0.1;
112
+ readonly grainScale: 0;
113
+ readonly octaves: 2;
114
+ readonly roughness: 0.7;
115
+ readonly wobble: 1.2;
116
+ readonly segments: 9;
117
+ readonly cap: "round";
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
+ };
142
+ readonly pencil: {
143
+ readonly weight: 3;
144
+ readonly weightJitter: 0.3;
145
+ readonly thinning: 0.4;
146
+ readonly taper: {
147
+ readonly start: 8;
148
+ readonly end: 18;
149
+ readonly ease: "out-cubic";
150
+ };
151
+ readonly ribbon: "stroke";
152
+ readonly opacity: 0.6;
153
+ readonly blend: "source-over";
154
+ readonly passes: 1;
155
+ readonly passOpacity: 0;
156
+ readonly grain: 0.5;
157
+ readonly grainFreq: 0.42;
158
+ readonly grainScale: 1.5;
159
+ readonly octaves: 3;
160
+ readonly roughness: 1;
161
+ readonly wobble: 1.6;
162
+ readonly segments: 11;
163
+ readonly cap: "round";
164
+ };
165
+ readonly crayon: {
166
+ readonly weight: 16;
167
+ readonly weightJitter: 1;
168
+ readonly thinning: 0.25;
169
+ readonly taper: {
170
+ readonly start: 6;
171
+ readonly end: 6;
172
+ readonly ease: "linear";
173
+ };
174
+ readonly ribbon: "stroke";
175
+ readonly opacity: 0.8;
176
+ readonly blend: "source-over";
177
+ readonly passes: 2;
178
+ readonly passOpacity: 0.18;
179
+ readonly grain: 0.85;
180
+ readonly grainFreq: 0.16;
181
+ readonly grainScale: 2.6;
182
+ readonly octaves: 4;
183
+ readonly roughness: 1.5;
184
+ readonly wobble: 3;
185
+ readonly segments: 13;
186
+ readonly cap: "round";
187
+ };
188
+ readonly ring: {
189
+ readonly weight: 5;
190
+ readonly weightJitter: 0.6;
191
+ readonly thinning: 0.3;
192
+ readonly taper: {
193
+ readonly start: 8;
194
+ readonly end: 12;
195
+ readonly ease: "out-cubic";
196
+ };
197
+ readonly ribbon: "stroke";
198
+ readonly opacity: 0.55;
199
+ readonly blend: "source-over";
200
+ readonly passes: 1;
201
+ readonly passOpacity: 0;
202
+ readonly grain: 0.7;
203
+ readonly grainFreq: 0.18;
204
+ readonly grainScale: 1.8;
205
+ readonly octaves: 4;
206
+ readonly roughness: 1.4;
207
+ readonly wobble: 2.6;
208
+ readonly segments: 13;
209
+ readonly cap: "round";
210
+ };
211
+ readonly marker: {
212
+ readonly weight: 12;
213
+ readonly weightJitter: 0.2;
214
+ readonly thinning: 0.1;
215
+ readonly taper: {
216
+ readonly start: 4;
217
+ readonly end: 10;
218
+ readonly ease: "out-cubic";
219
+ };
220
+ readonly ribbon: "stroke";
221
+ readonly opacity: 0.92;
222
+ readonly blend: "source-over";
223
+ readonly passes: 1;
224
+ readonly passOpacity: 0;
225
+ readonly grain: 0.22;
226
+ readonly grainFreq: 0.09;
227
+ readonly grainScale: 1;
228
+ readonly octaves: 3;
229
+ readonly roughness: 1;
230
+ readonly wobble: 2.2;
231
+ readonly segments: 9;
232
+ readonly cap: "square";
233
+ };
234
+ readonly highlighter: {
235
+ readonly weight: 26;
236
+ readonly weightJitter: 0.05;
237
+ readonly thinning: 0;
238
+ readonly taper: {
239
+ readonly start: 6;
240
+ readonly end: 10;
241
+ readonly ease: "out-cubic";
242
+ };
243
+ readonly ribbon: "hull";
244
+ readonly opacity: 0.38;
245
+ readonly blend: "multiply";
246
+ readonly passes: 1;
247
+ readonly passOpacity: 0;
248
+ readonly grain: 0.12;
249
+ readonly grainFreq: 0.2;
250
+ readonly grainScale: 1.5;
251
+ readonly octaves: 2;
252
+ readonly roughness: 0.5;
253
+ readonly wobble: 1.4;
254
+ readonly segments: 9;
255
+ readonly cap: "square";
256
+ };
257
+ };
258
+ export type BrushName = keyof typeof BRUSHES;
259
+ /**
260
+ * Resolution order (KISS, deterministic): preset → object overrides → extra `o`.
261
+ * A string selects a preset; an object spreads over `pen`. Later wins.
262
+ */
263
+ export declare const resolveBrush: (b: BrushName | Partial<Brush>, o?: Partial<Brush>) => Brush;
264
+ /**
265
+ * lerpBrush — the continuum proof (SPEC §12 acc-2). Linearly interpolate the
266
+ * scalar fields of two brushes; enums/taper/ribbon snap from `a` below 0.5, `b`
267
+ * at/above. Yields a sensible in-between ("inky crayon"), no NaN.
268
+ */
269
+ export declare const lerpBrush: (a: Brush, b: Brush, t: number) => Brush;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * useHandMark.ts — the headless reactive core (L2/L3/L4; SPEC §9).
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * Sits between the props and the SFC template so a future React/web-component skin
5
+ * reuses L1–L4. It orchestrates: resolve brush → shapeGeom → ink → animation. It
6
+ * owns NO DOM (the SFC anchors/measures/mounts the filter); it owns the reactive
7
+ * pipeline + the draw-on / boil state machine.
8
+ *
9
+ * Two draw-on mechanisms, picked by a FIELD (never an instrument `if`):
10
+ * - clean ink (no grain): `stroke-dashoffset` on `pathLength="1"` — the slides
11
+ * recipe, geometry-agnostic, compositor-cheap, no filter to re-raster.
12
+ * - grained ink (crayon): a `clip-path: inset()` WIPE — the filter rasters ONCE
13
+ * and the reveal mutates only the clip (`ds-crayon-handmark §5.1`). NEVER
14
+ * dashoffset under a filter (it would re-raster the graph per frame — the Δ4
15
+ * gate).
16
+ *
17
+ * PRM: every draw-on collapses to instant (finished static state); boil no-ops
18
+ * (`useLineBoil.start()` early-returns under reduced motion).
19
+ */
20
+ import { type Ref } from "vue";
21
+ import { type Brush, type BrushName } from "../brush";
22
+ /**
23
+ * The boil clock surface the SFC binds — the `useLineBoil` return shape, declared
24
+ * structurally over glass-ui's OWN `Ref` (pencil-boil ships a nested `@vue`, so its
25
+ * `Ref` symbol differs; the no-op stub is built with this `ref`, hence the surface
26
+ * is named here rather than `ReturnType<typeof useLineBoil>`).
27
+ */
28
+ export interface BoilClock {
29
+ currentFrame: Ref<number>;
30
+ start: () => void;
31
+ stop: () => void;
32
+ }
33
+ import { type ShapeGeom } from "../geometry";
34
+ import { type SVGFragment } from "../ink";
35
+ import type { HandAnimation, HandMarkProps, HandShape, MarkBox } from "../types";
36
+ export interface UseHandMarkInput {
37
+ brush: BrushName | Partial<Brush>;
38
+ shape: HandShape;
39
+ color: string;
40
+ seed: number;
41
+ overrides?: Partial<Brush>;
42
+ animation: HandAnimation;
43
+ boilFps: number;
44
+ boilFrames: number;
45
+ roughness: number | null;
46
+ segments: number | null;
47
+ jagged: boolean;
48
+ /** NATURAL underline morphology (C-2) — procedural off the house-seeded engine. */
49
+ natural: boolean;
50
+ box: MarkBox | null;
51
+ path: string | null;
52
+ filterId: string;
53
+ /**
54
+ * The MEASURED text baseline as a fraction of the `.hm` box height (text-mode
55
+ * underline anchor). `null` until the SFC measures it (ResizeObserver +
56
+ * `document.fonts.ready`) — geometry falls back to the legacy constant for that
57
+ * one pre-measure frame. Ignored in positioned (`box`) mode.
58
+ */
59
+ baselineFrac: number | null;
60
+ }
61
+ /**
62
+ * Normalise raw HandMarkProps (with their defaults applied) into the core input.
63
+ * `baselineFrac` is the SFC's MEASURED text baseline (text-mode underline anchor) —
64
+ * passed in (not a prop) because it is a runtime measurement, `null` until measured.
65
+ */
66
+ export declare function normalizeProps(props: HandMarkProps, filterId: string, baselineFrac?: number | null): UseHandMarkInput;
67
+ export interface HandMarkCore {
68
+ /** the resolved effective brush vector. */
69
+ brush: Ref<Brush>;
70
+ /** the static base geometry (boil re-perturbs THIS). */
71
+ baseGeom: Ref<ShapeGeom>;
72
+ /** the live SVG fragment (paths + filter defs). */
73
+ fragment: Ref<SVGFragment>;
74
+ /** the live `d` (escape-hatch path > boiled geometry > static base). */
75
+ pathD: Ref<string>;
76
+ /** does the brush emit a grain filter? (drives the draw-on mechanism). */
77
+ grained: Ref<boolean>;
78
+ /** the draw-on mechanism for this mark: dashoffset (pen) | clip (crayon). */
79
+ drawKind: Ref<"dashoffset" | "clip">;
80
+ /** does this animation draw on at all? */
81
+ draws: Ref<boolean>;
82
+ /** does this animation boil? */
83
+ boils: Ref<boolean>;
84
+ /** the boil clock (a real `useLineBoil` only when the mark boils; else a no-op stub). */
85
+ boil: BoilClock;
86
+ /** arm/disarm boil (draw-then-boil holds it until the draw finishes). */
87
+ boilArmed: Ref<boolean>;
88
+ }
89
+ export declare function useHandMark(input: Ref<UseHandMarkInput>): HandMarkCore;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * constants.ts — the marking-space geometry constants (the colocation home).
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * The hand-mark family's named geometry constants live here (the AY.W-COLOCATE
5
+ * convention's `constants.ts` home). geometry.ts + the SFC re-read them by name.
6
+ */
7
+ /** Marking-space width (the 0..100 × 0..40 viewBox; `preserveAspectRatio="none"`). */
8
+ export declare const VB_W = 100;
9
+ /** Marking-space height. */
10
+ export declare const VB_H = 40;
11
+ /**
12
+ * The hairline gap, as a fraction of the `.hm` box, between the MEASURED text
13
+ * baseline and the underline centerline. The underline rides just under the real
14
+ * glyph bottoms — a hand mark sits a few % of cap-height below the baseline, never
15
+ * through it (the E1 occlusion root: a constant `y=32` strikethroughs tight-leading
16
+ * display type because 80% of a `line-height:1.02` box IS the baseline).
17
+ */
18
+ export declare const UNDERLINE_GAP = 0.06;
19
+ /**
20
+ * The highlighter LOW-SEAT band (BA.W-HANDMARK C-1(a)). A real highlighter rides
21
+ * the low two-thirds of the line — the ink sits on the baseline and rises to
22
+ * ~x-height — NOT the box vertical center the fork shipped. The band centerline
23
+ * seats at `baselineFrac − HIGHLIGHT_RISE` (raised off the baseline by ~half a
24
+ * lowercase x-height) so the wide slab (weight 26) covers x-height down to the
25
+ * baseline. Expressed as a fraction of the `.hm` box, parallel to UNDERLINE_GAP.
26
+ */
27
+ export declare const HIGHLIGHT_RISE = 0.22;
28
+ /** Pre-measure fallback for the highlight band's low seat (null baselineFrac). */
29
+ export declare const HIGHLIGHT_FALLBACK_FRAC = 0.66;
30
+ /**
31
+ * Natural-underline morphology (BA.W-HANDMARK C-2). The procedural wobble is
32
+ * SCALE-RELATIVE: the amplitude is a fraction of the rendered word width (a long
33
+ * word and a short word wobble in proportion, not the viewBox-stretched-constant
34
+ * the fork's GlassUnderline shipped). The period count is IRREGULAR — a seeded
35
+ * pick in [PERIODS_MIN, PERIODS_MAX] — so two seeds differ in hump count, never
36
+ * identical twins.
37
+ */
38
+ export declare const PERIODS_MIN = 2;
39
+ export declare const PERIODS_MAX = 4;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * freehand.ts — the VENDORED perfect-freehand geometry core (MIT, tldraw).
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * SPEC §1.1 / §11: glass-ui ships ZERO hard deps. `perfect-freehand` is an
5
+ * OPTIONAL peer; its `getStroke` is the only one of the four engines that
6
+ * produces TRUE variable width (the swelling/tapering crayon nib). We vendor only
7
+ * its *geometry* core (a few hundred LOC, MIT) behind this L2 seam so:
8
+ *
9
+ * - the default pen/crayon presets (`ribbon: 'stroke'`) NEVER import it — the
10
+ * bundle treeshakes it away (the shipped stroke-crayon, `ds-crayon-handmark`),
11
+ * - the `ribbon: 'hull'` opt-in (the future width-variance upgrade) has a
12
+ * dependency-free, deterministic body engine already in place,
13
+ * - the pointer-capture half of the library (dead weight to us) never ships.
14
+ *
15
+ * This is the `getStroke` + `getStrokeOutlinePoints` + `getStrokePoints` core
16
+ * from perfect-freehand@1.2.3 (Steve Ruiz, MIT), transcribed to TypeScript with
17
+ * the `getSvgPathFromStroke` median-quad serialiser the references use. The
18
+ * algorithm is verbatim; only the module shape (named exports, vendored vec math)
19
+ * is glass-ui-local.
20
+ *
21
+ * @license MIT — perfect-freehand © Stephen Ruiz Ltd. https://github.com/steveruizok/perfect-freehand
22
+ */
23
+ /** A point: [x, y] or [x, y, pressure]. */
24
+ export type InputPoint = [number, number] | [number, number, number];
25
+ export interface StrokeOptions {
26
+ size?: number;
27
+ thinning?: number;
28
+ smoothing?: number;
29
+ streamline?: number;
30
+ easing?: (t: number) => number;
31
+ simulatePressure?: boolean;
32
+ start?: {
33
+ cap?: boolean;
34
+ taper?: number | boolean;
35
+ easing?: (t: number) => number;
36
+ };
37
+ end?: {
38
+ cap?: boolean;
39
+ taper?: number | boolean;
40
+ easing?: (t: number) => number;
41
+ };
42
+ last?: boolean;
43
+ }
44
+ interface StrokePoint {
45
+ point: number[];
46
+ pressure: number;
47
+ distance: number;
48
+ vector: number[];
49
+ runningLength: number;
50
+ }
51
+ /**
52
+ * getStrokePoints — resample the raw input into smoothed StrokePoints with
53
+ * running length + per-segment unit vectors (the streamline low-pass).
54
+ */
55
+ export declare function getStrokePoints(points: InputPoint[], options?: StrokeOptions): StrokePoint[];
56
+ /**
57
+ * getStrokeOutlinePoints — walk the StrokePoints, emit left/right offset points
58
+ * (the variable-width hull), with tapered caps.
59
+ */
60
+ export declare function getStrokeOutlinePoints(points: StrokePoint[], options?: StrokeOptions): number[][];
61
+ /** getStroke — the public entry: raw input → variable-width hull outline points. */
62
+ export declare function getStroke(points: InputPoint[], options?: StrokeOptions): number[][];
63
+ /**
64
+ * getSvgPathFromStroke — the canonical median-quad serialiser the references use:
65
+ * each segment's control point is the midpoint of two consecutive outline points,
66
+ * yielding a smooth closed fill `d`-string.
67
+ */
68
+ export declare function getSvgPathFromStroke(stroke: number[][], closed?: boolean): string;
69
+ export {};
@@ -0,0 +1,52 @@
1
+ /**
2
+ * geometry.ts — SEMANTIC shape → pencil-boil centerlines (L1, pure; SPEC §3).
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * A shape is a pure mapper: (semantic target) → L1 geometry. The renderer never
5
+ * knows what it drew — it sees only `Point[]`. Adding a shape = adding one switch
6
+ * arm; nothing downstream changes (texture + animation are shape-blind). This is
7
+ * the generality lever (Brush ⟂ Path).
8
+ *
9
+ * The marking coordinate space is 0..100 × 0..40, with `preserveAspectRatio="none"`
10
+ * so the <svg> stretches to the slotted word box (the SPEC §6.2 width-invariance
11
+ * contract). Two usage modes:
12
+ * - text mode (box == null): use the full viewBox (single-line underline/strike)
13
+ * - positioned mode (box = {x,y,w,h}): map an explicit rect (circle a datum)
14
+ *
15
+ * The circle arm rides pencil-boil 0.4.x's `ellipsePoints` (the hand-circle
16
+ * overshoot ring — the sole upstream geometry delta this component required).
17
+ *
18
+ * THE SEED RECONCILE (BA.W-HANDMARK [S2]): the wobble centerlines are seeded from
19
+ * the HOUSE prng leaf (`src/utils/prng.ts` mulberry32 + hashString — the AV.W14
20
+ * single-source). The family FEEDS pencil-boil a house-derived integer seed; glass-
21
+ * ui code imports ZERO `mulberry32` from pencil-boil (its internal mulberry32 stays
22
+ * inside its OWN perturb math). ONE seed leaf, the house identity.
23
+ */
24
+ import { type WobbleOptions } from "@mkbabb/pencil-boil";
25
+ import { UNDERLINE_GAP, VB_H, VB_W } from "./constants";
26
+ import type { HandShape, MarkBox } from "./types";
27
+ export { VB_W, VB_H, UNDERLINE_GAP };
28
+ /** A shape maps to one or more centerlines (open polylines) or one closed ring. */
29
+ export interface ShapeGeom {
30
+ lines: [number, number][][];
31
+ closed: boolean;
32
+ }
33
+ /**
34
+ * Semantic shape → { lines, closed } in the marking space (or a positioned box).
35
+ *
36
+ * The text-mode underline anchors to a MEASURED baseline: `baselineFrac` is the
37
+ * slotted word's alphabetic baseline as a fraction of the `.hm` box height (the SFC
38
+ * measures it via ResizeObserver + `document.fonts.ready`). The underline y is then
39
+ * `VB_H × (baselineFrac + UNDERLINE_GAP)` — never the old hardcoded `32` (80% of the
40
+ * box), which struck through tight-leading headings. `null` ⇒ not yet measured: fall
41
+ * back to the legacy `VB_H − 8` constant so first paint (and jsdom/SSR) still renders
42
+ * a line, replaced the instant the measure lands.
43
+ *
44
+ * `natural` (BA.W-HANDMARK C-2) routes the underline through the procedural
45
+ * `naturalUnderlinePoints` morphology instead of pencil-boil's `wobbleLinePoints`
46
+ * (the masthead `boil` voice); the default underline keeps the pencil-boil line.
47
+ */
48
+ export declare function shapeGeom(shape: HandShape, opts: WobbleOptions, box?: MarkBox | null, baselineFrac?: number | null, natural?: boolean): ShapeGeom;
49
+ /** Boil one geometry: re-perturb the CACHED centerlines (anchored → no draw-on pop). */
50
+ export declare function boilLines({ lines, closed }: ShapeGeom, amount: number, seed: number): [number, number][][];
51
+ /** Serialize centerlines → one SVG `d` (multi-line shapes concat with a space). */
52
+ export declare function serialize(lines: [number, number][][], jagged?: boolean): string;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * handmark — the ./handmark barrel (SPEC §11).
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * `HandMark` is the generic export; `InkMark` is the prose alias the atlas/slides
5
+ * import so call sites read as prose (one implementation, zero divergence). The
6
+ * pure L1–L3 functions ship too — they are framework-free, directly usable in
7
+ * slides decks, D3 charts (call `shapeGeom`/`ellipsePoints` to ink a path), even
8
+ * canvas.
9
+ *
10
+ * The DEFAULT is `pen` (clean ink, grain:0 ⇒ no filter, zero extra dep). The
11
+ * `@mkbabb/pencil-boil` geometry + `perfect-freehand` body are OPTIONAL PEERS;
12
+ * only `ribbon:'hull'` (the highlighter) touches the vendored pf core (treeshaken
13
+ * otherwise).
14
+ *
15
+ * BA.W-HANDMARK: `GlassUnderline`/the `/underline` subpath RETIRED onto
16
+ * `HandMark shape="underline"` (DEC-8 outcome 1; clean break, no alias). The
17
+ * editorial draw-on underline is `<HandMark shape="underline" animation="draw-on">`;
18
+ * the natural pencil-boil morphology is the `boil` brush.
19
+ */
20
+ export { default as HandMark, default as InkMark } from "./HandMark.vue";
21
+ export { BRUSHES, resolveBrush, lerpBrush, type Brush, type BrushName, type BlendMode, type TaperSpec, type StampFn, type InkPath, } from "./brush";
22
+ export { shapeGeom, serialize, boilLines, VB_W, VB_H, UNDERLINE_GAP, type ShapeGeom, } from "./geometry";
23
+ export { ink, type SVGFragment } from "./ink";
24
+ export { grainFilter, hasGrain } from "./texture";
25
+ export { getStroke, getStrokePoints, getSvgPathFromStroke, type StrokeOptions, type InputPoint, } from "./freehand";
26
+ export { useHandMark, normalizeProps, type UseHandMarkInput, type HandMarkCore, type BoilClock, } from "./composables/useHandMark";
27
+ export type { HandMarkProps, HandShape, HandAnimation, MarkBox, } from "./types";
@@ -0,0 +1,11 @@
1
+ import type { Brush, InkPath } from "./brush";
2
+ export interface SVGFragment {
3
+ paths: InkPath[];
4
+ filterId: string | null;
5
+ defs: string[];
6
+ }
7
+ /**
8
+ * ink — the only stage the brush fully drives. `jagged` serialises the stroke body
9
+ * with angular kinks (pointsToLinear) instead of the smooth Catmull-Rom bezier.
10
+ */
11
+ export declare function ink(centerline: [number, number][], b: Brush, seed: number, color: string, filterId: string, jagged?: boolean): SVGFragment;
@@ -0,0 +1,39 @@
1
+ /**
2
+ * texture.ts — the L3 grain as ONE parameterized SVG <filter> (pure; SPEC §4.2).
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * `grainFilter(id, b, seed)` returns the markup for ONE static, seeded <filter>
5
+ * driven entirely by the brush vector. The KISS invariant (the PEN-is-free law,
6
+ * SPEC §12 acc-4):
7
+ *
8
+ * grain <= 0 && grainScale <= 0 ⇒ returns '' ⇒ NO filter emitted ⇒ bare <path>.
9
+ *
10
+ * So pen/marker-lite get the cleanest vector edge at zero filter cost; pencil/
11
+ * crayon get a real broken-edge filter. SAME code path, field delta only — never
12
+ * an instrument `if`.
13
+ *
14
+ * The graph is the proven 5-stage pipeline from the `proto/_final` sandbox (it
15
+ * supersets the bare SPEC §4.2 graph with a trailing re-break displacement —
16
+ * `ds-crayon-handmark §4.4` keeps the proven one):
17
+ * 1. feTurbulence (warp) — low-freq fractal noise for edge wobble
18
+ * 2. feDisplacementMap (wob) — push the stroke edge by grainScale
19
+ * 3. feTurbulence (grain) — high-freq noise = paper tooth / wax grain
20
+ * 4. feColorMatrix (grainA) — threshold the grain into a hard alpha mask
21
+ * 5. feComposite + feDisplace — knock paper-through holes (operator="in") + re-break
22
+ *
23
+ * CRITICAL (the Δ4 gate, `ds-crayon-handmark §3`): this filter is STATIC + SEEDED.
24
+ * It rasters ONCE per (mount, resize, scheme flip) and is cached. The draw-on is a
25
+ * `clip-path: inset()` wipe that mutates only the clip — it NEVER animates
26
+ * `stroke-dashoffset` under the filter (which would re-raster the graph per frame).
27
+ * Boil does NOT ship on this register (`ds-crayon-handmark §5.3`).
28
+ *
29
+ * `id` MUST be per-instance (the component's `useId()`) so two marks never collide
30
+ * their <filter> namespaces — the glass-ui WatercolorDot idiom.
31
+ *
32
+ * The grain sub-seed is derived (`seed ^ 0x85eb`) per SPEC §7, so one top seed
33
+ * re-rolls the grain coherently with the centerline wobble.
34
+ */
35
+ import type { Brush } from "./brush";
36
+ /** @returns SVG <filter> markup, or '' when the brush is clean ink (pen). */
37
+ export declare function grainFilter(id: string, b: Brush, seed: number): string;
38
+ /** Does this brush emit a grain filter? (the pen-is-free predicate). */
39
+ export declare function hasGrain(b: Brush): boolean;
@@ -0,0 +1,62 @@
1
+ /**
2
+ * types.ts — the public API surface (SPEC §6). Pure types, 0 runtime.
3
+ * ─────────────────────────────────────────────────────────────────────────────
4
+ * The L5 surface steals rough-notation's *vocabulary* (annotate-style props +
5
+ * ordered groups), not its code. Every prop has a per-brush default, so the
6
+ * common call is one tag: <HandMark>who pays in</HandMark>.
7
+ */
8
+ import type { Brush, BrushName } from "./brush";
9
+ /** A target rect in the 0..100 × 0..40 marking space (positioned mode). */
10
+ export interface MarkBox {
11
+ x: number;
12
+ y: number;
13
+ w: number;
14
+ h: number;
15
+ }
16
+ export type HandShape = "underline" | "strikethrough" | "highlight" | "circle" | "box" | "bracket" | "path";
17
+ export type HandAnimation = "none" | "draw-on" | "boil" | "draw-then-boil";
18
+ export interface HandMarkProps {
19
+ /** 'pen'(default) | preset name | full/partial Brush object. */
20
+ brush?: BrushName | Partial<Brush>;
21
+ /** default 'underline'. */
22
+ shape?: HandShape;
23
+ /** ANY CSS color. default 'currentColor'. */
24
+ color?: string;
25
+ /** procedural variant — deterministic. default 1. */
26
+ seed?: number;
27
+ /** spread over the resolved brush (3rd resolution level). */
28
+ overrides?: Partial<Brush>;
29
+ /** default 'none' (the static-masthead default). */
30
+ animation?: HandAnimation;
31
+ /** draw-on duration. default 800. */
32
+ drawMs?: number;
33
+ /** draw-on start delay. default 0. */
34
+ drawDelayMs?: number;
35
+ /** draw-on trigger. default 'visible' (IntersectionObserver). */
36
+ appear?: "mount" | "visible" | "manual";
37
+ /** boil frame rate. default 8 (≈125ms). */
38
+ boilFps?: number;
39
+ /** distinct boil frames. default 3. */
40
+ boilFrames?: number;
41
+ /** override brush.roughness. */
42
+ roughness?: number;
43
+ /** wobble resolution. default per-brush. */
44
+ segments?: number;
45
+ /** angular kinks vs smooth bezier. default false. */
46
+ jagged?: boolean;
47
+ /**
48
+ * NATURAL underline morphology (BA.W-HANDMARK C-2). When true (the masthead
49
+ * `boil` voice), the underline geometry goes PROCEDURAL — scale-relative
50
+ * amplitude, an IRREGULAR seeded period count, off the house prng leaf feeding
51
+ * pencil-boil — instead of pencil-boil's single `wobbleLinePoints` line. The
52
+ * `boil` brush auto-engages it; the default underline keeps the pencil-boil line.
53
+ * Ignored on non-underline shapes.
54
+ */
55
+ natural?: boolean;
56
+ /** POSITIONED mode (circle a datum): explicit target rect. */
57
+ box?: MarkBox;
58
+ /** shape:'path' escape hatch — arbitrary SVG `d` (wins over shape). */
59
+ path?: string;
60
+ /** arbitrary point stream → brush ink. */
61
+ points?: [number, number][];
62
+ }
@@ -0,0 +1,4 @@
1
+ import type { IconChipProps } from "./types";
2
+ declare const __VLS_export: import("vue").DefineComponent<IconChipProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<IconChipProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
3
+ declare const _default: typeof __VLS_export;
4
+ export default _default;