@pibbl/core 0.0.2 → 0.0.3-alpha.109.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 (549) hide show
  1. package/THIRD_PARTY_NOTICES.txt +81 -0
  2. package/dist/features/physics/2d-testing.d.ts +1 -1
  3. package/dist/features/physics/2d-testing.js +2 -2
  4. package/dist/features/physics/2d-testing.js.map +2 -2
  5. package/dist/features/physics/lib/2d/canvas/components.js +25 -21
  6. package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
  7. package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
  8. package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
  9. package/dist/features/physics/lib/2d/collision/casts.js +4 -2
  10. package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
  11. package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
  12. package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
  13. package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
  14. package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
  15. package/dist/features/physics/lib/2d/shapes.js +8 -9
  16. package/dist/features/physics/lib/2d/shapes.js.map +2 -2
  17. package/dist/features/physics/lib/2d/world/rapier.js +22 -26
  18. package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
  19. package/dist/features/sprites/loader.js +6 -3
  20. package/dist/features/sprites/loader.js.map +2 -2
  21. package/dist/features/textures/index.d.ts +12 -2
  22. package/dist/features/textures/index.js +33 -1
  23. package/dist/features/textures/index.js.map +2 -2
  24. package/dist/features/textures/lib/chemical-field.d.ts +56 -0
  25. package/dist/features/textures/lib/chemical-field.js +154 -0
  26. package/dist/features/textures/lib/chemical-field.js.map +7 -0
  27. package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
  28. package/dist/features/textures/lib/chemical-recipes.js +275 -0
  29. package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
  30. package/dist/features/textures/lib/definitions.d.ts +3 -18
  31. package/dist/features/textures/lib/definitions.js +17 -24
  32. package/dist/features/textures/lib/definitions.js.map +2 -2
  33. package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
  34. package/dist/features/textures/lib/geometric-patterns.js +305 -0
  35. package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
  36. package/dist/features/textures/lib/gray-scott.d.ts +55 -0
  37. package/dist/features/textures/lib/gray-scott.js +37 -0
  38. package/dist/features/textures/lib/gray-scott.js.map +7 -0
  39. package/dist/features/textures/lib/palette.js +1 -3
  40. package/dist/features/textures/lib/palette.js.map +2 -2
  41. package/dist/features/textures/lib/patterns.d.ts +123 -0
  42. package/dist/features/textures/lib/patterns.js +344 -0
  43. package/dist/features/textures/lib/patterns.js.map +7 -0
  44. package/dist/features/textures/lib/rain-drops.js +2 -1
  45. package/dist/features/textures/lib/rain-drops.js.map +2 -2
  46. package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
  47. package/dist/features/textures/lib/reaction-diffusion.js +9 -20
  48. package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
  49. package/dist/features/textures/lib/simulation.d.ts +10 -4
  50. package/dist/features/textures/lib/simulation.js +23 -13
  51. package/dist/features/textures/lib/simulation.js.map +2 -2
  52. package/dist/features/textures/lib/wasm/electric.js +8 -1
  53. package/dist/features/textures/lib/wasm/electric.js.map +2 -2
  54. package/dist/features/textures/lib/water-surface.js +1 -3
  55. package/dist/features/textures/lib/water-surface.js.map +2 -2
  56. package/dist/features/viz/index.d.ts +68 -6
  57. package/dist/features/viz/index.js +164 -2
  58. package/dist/features/viz/index.js.map +2 -2
  59. package/dist/features/viz/inspection/bar.d.ts +79 -0
  60. package/dist/features/viz/inspection/bar.js +49 -0
  61. package/dist/features/viz/inspection/bar.js.map +7 -0
  62. package/dist/features/viz/inspection/candle.d.ts +156 -0
  63. package/dist/features/viz/inspection/candle.js +120 -0
  64. package/dist/features/viz/inspection/candle.js.map +7 -0
  65. package/dist/features/viz/inspection/capture-types.d.ts +65 -0
  66. package/dist/features/viz/inspection/capture.d.ts +16 -0
  67. package/dist/features/viz/inspection/capture.js +49 -0
  68. package/dist/features/viz/inspection/capture.js.map +7 -0
  69. package/dist/features/viz/inspection/handler.d.ts +36 -0
  70. package/dist/features/viz/inspection/handler.js +91 -0
  71. package/dist/features/viz/inspection/handler.js.map +7 -0
  72. package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
  73. package/dist/features/viz/inspection/ohlc-bar.js +118 -0
  74. package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
  75. package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
  76. package/dist/features/viz/inspection/owned-ref.js +99 -0
  77. package/dist/features/viz/inspection/owned-ref.js.map +7 -0
  78. package/dist/features/viz/inspection/painted-point.d.ts +22 -0
  79. package/dist/features/viz/inspection/painted-point.js +29 -0
  80. package/dist/features/viz/inspection/painted-point.js.map +7 -0
  81. package/dist/features/viz/inspection/queries.d.ts +100 -0
  82. package/dist/features/viz/inspection/queries.js +192 -0
  83. package/dist/features/viz/inspection/queries.js.map +7 -0
  84. package/dist/features/viz/inspection/query-types.d.ts +177 -0
  85. package/dist/features/viz/inspection/volume.d.ts +104 -0
  86. package/dist/features/viz/inspection/volume.js +95 -0
  87. package/dist/features/viz/inspection/volume.js.map +7 -0
  88. package/dist/features/viz/inspection.d.ts +19 -0
  89. package/dist/features/viz/inspection.js +54 -0
  90. package/dist/features/viz/inspection.js.map +7 -0
  91. package/dist/features/viz/inspection.mjs +1 -0
  92. package/dist/features/viz/lib/area-series.d.ts +62 -0
  93. package/dist/features/viz/lib/area-series.js +120 -0
  94. package/dist/features/viz/lib/area-series.js.map +7 -0
  95. package/dist/features/viz/lib/axis-title.js +2 -1
  96. package/dist/features/viz/lib/axis-title.js.map +2 -2
  97. package/dist/features/viz/lib/axis.js +1 -1
  98. package/dist/features/viz/lib/axis.js.map +2 -2
  99. package/dist/features/viz/lib/bar-series.d.ts +3 -1
  100. package/dist/features/viz/lib/bar-series.js +16 -1
  101. package/dist/features/viz/lib/bar-series.js.map +2 -2
  102. package/dist/features/viz/lib/baseline-series.d.ts +55 -0
  103. package/dist/features/viz/lib/baseline-series.js +136 -0
  104. package/dist/features/viz/lib/baseline-series.js.map +7 -0
  105. package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
  106. package/dist/features/viz/lib/candlestick-series.js +150 -0
  107. package/dist/features/viz/lib/candlestick-series.js.map +7 -0
  108. package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
  109. package/dist/features/viz/lib/censored-point-series.js +129 -0
  110. package/dist/features/viz/lib/censored-point-series.js.map +7 -0
  111. package/dist/features/viz/lib/color-context.d.ts +4 -0
  112. package/dist/features/viz/lib/color-context.js +41 -0
  113. package/dist/features/viz/lib/color-context.js.map +7 -0
  114. package/dist/features/viz/lib/color-math.d.ts +4 -0
  115. package/dist/features/viz/lib/color-math.js +31 -0
  116. package/dist/features/viz/lib/color-math.js.map +7 -0
  117. package/dist/features/viz/lib/color-types.d.ts +53 -0
  118. package/dist/features/viz/lib/curve-definition.d.ts +49 -0
  119. package/dist/features/viz/lib/curve-definition.js +142 -0
  120. package/dist/features/viz/lib/curve-definition.js.map +7 -0
  121. package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
  122. package/dist/features/viz/lib/diverging-color-scale.js +51 -0
  123. package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
  124. package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
  125. package/dist/features/viz/lib/domain-navigation.js +77 -0
  126. package/dist/features/viz/lib/domain-navigation.js.map +7 -0
  127. package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
  128. package/dist/features/viz/lib/editable-chart-elements.js +733 -0
  129. package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
  130. package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
  131. package/dist/features/viz/lib/financial-aggregation.js +116 -0
  132. package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
  133. package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
  134. package/dist/features/viz/lib/financial-autoscale.js +61 -0
  135. package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
  136. package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
  137. package/dist/features/viz/lib/financial-comparison.js +98 -0
  138. package/dist/features/viz/lib/financial-comparison.js.map +7 -0
  139. package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
  140. package/dist/features/viz/lib/financial-geometry.js +67 -0
  141. package/dist/features/viz/lib/financial-geometry.js.map +7 -0
  142. package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
  143. package/dist/features/viz/lib/financial-indicators.js +135 -0
  144. package/dist/features/viz/lib/financial-indicators.js.map +7 -0
  145. package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
  146. package/dist/features/viz/lib/financial-oscillators.js +265 -0
  147. package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
  148. package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
  149. package/dist/features/viz/lib/graph/bipartite.js +250 -0
  150. package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
  151. package/dist/features/viz/lib/graph/chord.d.ts +44 -0
  152. package/dist/features/viz/lib/graph/chord.js +348 -0
  153. package/dist/features/viz/lib/graph/chord.js.map +7 -0
  154. package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
  155. package/dist/features/viz/lib/graph/dependency.js +140 -0
  156. package/dist/features/viz/lib/graph/dependency.js.map +7 -0
  157. package/dist/features/viz/lib/graph/force.d.ts +28 -0
  158. package/dist/features/viz/lib/graph/force.js +580 -0
  159. package/dist/features/viz/lib/graph/force.js.map +7 -0
  160. package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
  161. package/dist/features/viz/lib/graph/hierarchy.js +112 -0
  162. package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
  163. package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
  164. package/dist/features/viz/lib/graph/icicle.js +153 -0
  165. package/dist/features/viz/lib/graph/icicle.js.map +7 -0
  166. package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
  167. package/dist/features/viz/lib/graph/matrix.js +243 -0
  168. package/dist/features/viz/lib/graph/matrix.js.map +7 -0
  169. package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
  170. package/dist/features/viz/lib/graph/neighborhood.js +281 -0
  171. package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
  172. package/dist/features/viz/lib/graph/routes.d.ts +35 -0
  173. package/dist/features/viz/lib/graph/routes.js +101 -0
  174. package/dist/features/viz/lib/graph/routes.js.map +7 -0
  175. package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
  176. package/dist/features/viz/lib/graph/sankey.js +341 -0
  177. package/dist/features/viz/lib/graph/sankey.js.map +7 -0
  178. package/dist/features/viz/lib/graph/shared.d.ts +59 -0
  179. package/dist/features/viz/lib/graph/shared.js +301 -0
  180. package/dist/features/viz/lib/graph/shared.js.map +7 -0
  181. package/dist/features/viz/lib/graph/tree.d.ts +11 -0
  182. package/dist/features/viz/lib/graph/tree.js +232 -0
  183. package/dist/features/viz/lib/graph/tree.js.map +7 -0
  184. package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
  185. package/dist/features/viz/lib/graph/treemap.js +227 -0
  186. package/dist/features/viz/lib/graph/treemap.js.map +7 -0
  187. package/dist/features/viz/lib/graph/types.d.ts +1097 -0
  188. package/dist/features/viz/lib/hover-card.js +8 -9
  189. package/dist/features/viz/lib/hover-card.js.map +2 -2
  190. package/dist/features/viz/lib/hover-data.d.ts +1 -1
  191. package/dist/features/viz/lib/hover-data.js +5 -2
  192. package/dist/features/viz/lib/hover-data.js.map +2 -2
  193. package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
  194. package/dist/features/viz/lib/interval-band-series.js +136 -0
  195. package/dist/features/viz/lib/interval-band-series.js.map +7 -0
  196. package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
  197. package/dist/features/viz/lib/interval-diamond-series.js +122 -0
  198. package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
  199. package/dist/features/viz/lib/interval-series.d.ts +79 -0
  200. package/dist/features/viz/lib/interval-series.js +158 -0
  201. package/dist/features/viz/lib/interval-series.js.map +7 -0
  202. package/dist/features/viz/lib/layout-pie.js +9 -13
  203. package/dist/features/viz/lib/layout-pie.js.map +2 -2
  204. package/dist/features/viz/lib/line-series.d.ts +1 -1
  205. package/dist/features/viz/lib/line-series.js +47 -28
  206. package/dist/features/viz/lib/line-series.js.map +2 -2
  207. package/dist/features/viz/lib/linear-scale.js +1 -1
  208. package/dist/features/viz/lib/linear-scale.js.map +2 -2
  209. package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
  210. package/dist/features/viz/lib/monotone-curve.js +63 -0
  211. package/dist/features/viz/lib/monotone-curve.js.map +7 -0
  212. package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
  213. package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
  214. package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
  215. package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
  216. package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
  217. package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
  218. package/dist/features/viz/lib/paired-series.d.ts +44 -0
  219. package/dist/features/viz/lib/paired-series.js +93 -0
  220. package/dist/features/viz/lib/paired-series.js.map +7 -0
  221. package/dist/features/viz/lib/pie-layout.js +2 -1
  222. package/dist/features/viz/lib/pie-layout.js.map +2 -2
  223. package/dist/features/viz/lib/plot-series.js +11 -6
  224. package/dist/features/viz/lib/plot-series.js.map +2 -2
  225. package/dist/features/viz/lib/plot-types.d.ts +4 -3
  226. package/dist/features/viz/lib/point-series.d.ts +1 -1
  227. package/dist/features/viz/lib/point-series.js +36 -9
  228. package/dist/features/viz/lib/point-series.js.map +2 -2
  229. package/dist/features/viz/lib/point-types.d.ts +5 -2
  230. package/dist/features/viz/lib/reference-band.js +4 -1
  231. package/dist/features/viz/lib/reference-band.js.map +2 -2
  232. package/dist/features/viz/lib/scale-context.d.ts +1 -1
  233. package/dist/features/viz/lib/scale-ticks.js +21 -6
  234. package/dist/features/viz/lib/scale-ticks.js.map +2 -2
  235. package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
  236. package/dist/features/viz/lib/sequential-color-scale.js +49 -0
  237. package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
  238. package/dist/features/viz/lib/series-position.d.ts +12 -0
  239. package/dist/features/viz/lib/series-position.js +44 -0
  240. package/dist/features/viz/lib/series-position.js.map +7 -0
  241. package/dist/features/viz/lib/step-curves.d.ts +19 -0
  242. package/dist/features/viz/lib/step-curves.js +53 -0
  243. package/dist/features/viz/lib/step-curves.js.map +7 -0
  244. package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
  245. package/dist/features/viz/lib/threshold-color-scale.js +59 -0
  246. package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
  247. package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
  248. package/dist/features/viz/lib/trading-time-mapping.js +89 -0
  249. package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
  250. package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
  251. package/dist/features/viz/lib/trading-time-scale.js +96 -0
  252. package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
  253. package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
  254. package/dist/features/viz/lib/trajectory-series.js +111 -0
  255. package/dist/features/viz/lib/trajectory-series.js.map +7 -0
  256. package/dist/features/viz/lib/types.d.ts +20 -4
  257. package/dist/features/viz/lib/use-continuous-scale.js +6 -1
  258. package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
  259. package/dist/features/viz/lib/utc-scale.js +11 -10
  260. package/dist/features/viz/lib/utc-scale.js.map +2 -2
  261. package/dist/features/viz/lib/volume-series.d.ts +59 -0
  262. package/dist/features/viz/lib/volume-series.js +117 -0
  263. package/dist/features/viz/lib/volume-series.js.map +7 -0
  264. package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
  265. package/dist/features/viz/lib/weighted-point-series.js +169 -0
  266. package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
  267. package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
  268. package/dist/filters/backdrop-contrast-gpu.js +33 -0
  269. package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
  270. package/dist/filters/backdrop-contrast.d.ts +21 -0
  271. package/dist/filters/backdrop-contrast.js +61 -0
  272. package/dist/filters/backdrop-contrast.js.map +7 -0
  273. package/dist/filters/displacement.js +1 -1
  274. package/dist/filters/displacement.js.map +2 -2
  275. package/dist/filters/emboss-gpu.d.ts +4 -0
  276. package/dist/filters/emboss-gpu.js +39 -0
  277. package/dist/filters/emboss-gpu.js.map +7 -0
  278. package/dist/filters/emboss.d.ts +32 -0
  279. package/dist/filters/emboss.js +104 -0
  280. package/dist/filters/emboss.js.map +7 -0
  281. package/dist/filters/filter-executor.d.ts +11 -4
  282. package/dist/filters/filter-executor.js +104 -49
  283. package/dist/filters/filter-executor.js.map +2 -2
  284. package/dist/filters/reflected-light.js +1 -1
  285. package/dist/filters/reflected-light.js.map +2 -2
  286. package/dist/filters/reflection-gpu.d.ts +3 -1
  287. package/dist/filters/reflection-gpu.js +5 -2
  288. package/dist/filters/reflection-gpu.js.map +2 -2
  289. package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
  290. package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
  291. package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
  292. package/dist/filters/render-emboss-boundary.d.ts +13 -0
  293. package/dist/filters/render-emboss-boundary.js +131 -0
  294. package/dist/filters/render-emboss-boundary.js.map +7 -0
  295. package/dist/filters.d.ts +9 -5
  296. package/dist/filters.js +4 -0
  297. package/dist/filters.js.map +2 -2
  298. package/dist/index.d.ts +9 -5
  299. package/dist/index.js +18 -2
  300. package/dist/index.js.map +2 -2
  301. package/dist/internal.d.ts +4 -0
  302. package/dist/internal.js +6 -0
  303. package/dist/internal.js.map +2 -2
  304. package/dist/layout-kernel.d.ts +12 -0
  305. package/dist/layout-kernel.js +11 -0
  306. package/dist/layout-kernel.js.map +7 -0
  307. package/dist/layout-kernel.mjs +1 -0
  308. package/dist/lib/backend/types.d.ts +13 -1
  309. package/dist/lib/backend/types.js.map +2 -2
  310. package/dist/lib/components/arc-geometry.js +2 -1
  311. package/dist/lib/components/arc-geometry.js.map +2 -2
  312. package/dist/lib/components/g.js +2 -0
  313. package/dist/lib/components/g.js.map +2 -2
  314. package/dist/lib/components/html-box.js +2 -1
  315. package/dist/lib/components/html-box.js.map +2 -2
  316. package/dist/lib/components/img.js +3 -3
  317. package/dist/lib/components/img.js.map +2 -2
  318. package/dist/lib/components/layer.js +98 -16
  319. package/dist/lib/components/layer.js.map +3 -3
  320. package/dist/lib/components/text.d.ts +16 -0
  321. package/dist/lib/components/text.js +131 -24
  322. package/dist/lib/components/text.js.map +2 -2
  323. package/dist/lib/define-primitive.d.ts +4 -2
  324. package/dist/lib/define-primitive.js +3 -1
  325. package/dist/lib/define-primitive.js.map +2 -2
  326. package/dist/lib/element/metadata.d.ts +9 -0
  327. package/dist/lib/element/metadata.js +19 -0
  328. package/dist/lib/element/metadata.js.map +2 -2
  329. package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
  330. package/dist/lib/element/resolve-primitive-inputs.js +17 -4
  331. package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
  332. package/dist/lib/events/event-facade.d.ts +18 -0
  333. package/dist/lib/events/event-facade.js +28 -2
  334. package/dist/lib/events/event-facade.js.map +2 -2
  335. package/dist/lib/events/hit-test.js +2 -1
  336. package/dist/lib/events/hit-test.js.map +2 -2
  337. package/dist/lib/events/propagation.d.ts +2 -1
  338. package/dist/lib/events/propagation.js +22 -16
  339. package/dist/lib/events/propagation.js.map +2 -2
  340. package/dist/lib/events/registrations.d.ts +10 -0
  341. package/dist/lib/events/registrations.js +160 -5
  342. package/dist/lib/events/registrations.js.map +2 -2
  343. package/dist/lib/execute-render.js +25 -1
  344. package/dist/lib/execute-render.js.map +2 -2
  345. package/dist/lib/filter/filter-region.js +3 -10
  346. package/dist/lib/filter/filter-region.js.map +2 -2
  347. package/dist/lib/focus/focus-manager.d.ts +8 -1
  348. package/dist/lib/focus/focus-manager.js +87 -43
  349. package/dist/lib/focus/focus-manager.js.map +2 -2
  350. package/dist/lib/focus/geometry.d.ts +2 -0
  351. package/dist/lib/focus/geometry.js +6 -0
  352. package/dist/lib/focus/geometry.js.map +2 -2
  353. package/dist/lib/geometry/path-bend-guide.js +1 -1
  354. package/dist/lib/geometry/path-bend-guide.js.map +2 -2
  355. package/dist/lib/geometry/path-geometry.js +12 -11
  356. package/dist/lib/geometry/path-geometry.js.map +2 -2
  357. package/dist/lib/geometry/path-transforms.js +17 -21
  358. package/dist/lib/geometry/path-transforms.js.map +2 -2
  359. package/dist/lib/geometry/path-warp-bezier.js +3 -1
  360. package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
  361. package/dist/lib/geometry/path-warp.js +1 -1
  362. package/dist/lib/geometry/path-warp.js.map +2 -2
  363. package/dist/lib/global-state.js +2 -0
  364. package/dist/lib/global-state.js.map +2 -2
  365. package/dist/lib/html/html-events.d.ts +32 -0
  366. package/dist/lib/html/html-events.js +179 -0
  367. package/dist/lib/html/html-events.js.map +7 -0
  368. package/dist/lib/html/html-service.d.ts +8 -2
  369. package/dist/lib/html/html-service.js +198 -65
  370. package/dist/lib/html/html-service.js.map +2 -2
  371. package/dist/lib/html/overlay-config.js +7 -6
  372. package/dist/lib/html/overlay-config.js.map +2 -2
  373. package/dist/lib/html/types.d.ts +29 -2
  374. package/dist/lib/layout/absolute.d.ts +11 -5
  375. package/dist/lib/layout/absolute.js +329 -55
  376. package/dist/lib/layout/absolute.js.map +3 -3
  377. package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
  378. package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
  379. package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
  380. package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
  381. package/dist/lib/layout/allocation-checkpoint.js +463 -0
  382. package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
  383. package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
  384. package/dist/lib/layout/allocation-dependencies.js +90 -0
  385. package/dist/lib/layout/allocation-dependencies.js.map +7 -0
  386. package/dist/lib/layout/allocation-revision.d.ts +13 -0
  387. package/dist/lib/layout/allocation-revision.js +67 -0
  388. package/dist/lib/layout/allocation-revision.js.map +7 -0
  389. package/dist/lib/layout/box-insets.d.ts +17 -0
  390. package/dist/lib/layout/box-insets.js +138 -0
  391. package/dist/lib/layout/box-insets.js.map +7 -0
  392. package/dist/lib/layout/box-sizing.d.ts +16 -0
  393. package/dist/lib/layout/box-sizing.js +77 -0
  394. package/dist/lib/layout/box-sizing.js.map +7 -0
  395. package/dist/lib/layout/box.js +42 -12
  396. package/dist/lib/layout/box.js.map +2 -2
  397. package/dist/lib/layout/canvas-measurement.d.ts +13 -0
  398. package/dist/lib/layout/canvas-measurement.js +57 -0
  399. package/dist/lib/layout/canvas-measurement.js.map +7 -0
  400. package/dist/lib/layout/context.d.ts +35 -6
  401. package/dist/lib/layout/context.js +72 -3
  402. package/dist/lib/layout/context.js.map +2 -2
  403. package/dist/lib/layout/define-layout-component.d.ts +23 -0
  404. package/dist/lib/layout/define-layout-component.js +84 -0
  405. package/dist/lib/layout/define-layout-component.js.map +7 -0
  406. package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
  407. package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
  408. package/dist/lib/layout/flex-baseline-mode.js +7 -0
  409. package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
  410. package/dist/lib/layout/flex.d.ts +50 -15
  411. package/dist/lib/layout/flex.js +2124 -195
  412. package/dist/lib/layout/flex.js.map +3 -3
  413. package/dist/lib/layout/flow.js +225 -49
  414. package/dist/lib/layout/flow.js.map +2 -2
  415. package/dist/lib/layout/geometry-publication.d.ts +53 -0
  416. package/dist/lib/layout/geometry-publication.js +244 -0
  417. package/dist/lib/layout/geometry-publication.js.map +7 -0
  418. package/dist/lib/layout/grid-kernel.d.ts +63 -0
  419. package/dist/lib/layout/grid-kernel.js +168 -0
  420. package/dist/lib/layout/grid-kernel.js.map +7 -0
  421. package/dist/lib/layout/grid.d.ts +63 -4
  422. package/dist/lib/layout/grid.js +767 -171
  423. package/dist/lib/layout/grid.js.map +3 -3
  424. package/dist/lib/layout/measure.d.ts +55 -3
  425. package/dist/lib/layout/measure.js +448 -15
  426. package/dist/lib/layout/measure.js.map +2 -2
  427. package/dist/lib/layout/overlay.js +81 -23
  428. package/dist/lib/layout/overlay.js.map +2 -2
  429. package/dist/lib/layout/participation.d.ts +27 -0
  430. package/dist/lib/layout/participation.js +188 -0
  431. package/dist/lib/layout/participation.js.map +7 -0
  432. package/dist/lib/layout/place-child.js +1 -1
  433. package/dist/lib/layout/place-child.js.map +2 -2
  434. package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
  435. package/dist/lib/layout/positioning-diagnostics.js +13 -2
  436. package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
  437. package/dist/lib/layout/prepared-root.d.ts +121 -0
  438. package/dist/lib/layout/prepared-root.js +360 -0
  439. package/dist/lib/layout/prepared-root.js.map +7 -0
  440. package/dist/lib/layout/standalone-kernel.d.ts +60 -0
  441. package/dist/lib/layout/standalone-kernel.js +722 -0
  442. package/dist/lib/layout/standalone-kernel.js.map +7 -0
  443. package/dist/lib/layout/topology.d.ts +21 -0
  444. package/dist/lib/layout/topology.js +113 -0
  445. package/dist/lib/layout/topology.js.map +7 -0
  446. package/dist/lib/layout/types.d.ts +5 -0
  447. package/dist/lib/layout/wasm/artifact.d.ts +1 -0
  448. package/dist/lib/layout/wasm/artifact.js +5 -0
  449. package/dist/lib/layout/wasm/artifact.js.map +7 -0
  450. package/dist/lib/layout/wasm/bytes.d.ts +1 -0
  451. package/dist/lib/layout/wasm/bytes.js +5 -0
  452. package/dist/lib/layout/wasm/bytes.js.map +7 -0
  453. package/dist/lib/layout/wasm/embedded.d.ts +2 -0
  454. package/dist/lib/layout/wasm/embedded.js +12 -0
  455. package/dist/lib/layout/wasm/embedded.js.map +7 -0
  456. package/dist/lib/layout/wasm/layout.wasm +0 -0
  457. package/dist/lib/layout/wasm/module.d.ts +8 -0
  458. package/dist/lib/layout/wasm/module.js +70 -0
  459. package/dist/lib/layout/wasm/module.js.map +7 -0
  460. package/dist/lib/layout/wasm/region.d.ts +267 -0
  461. package/dist/lib/layout/wasm/region.js +1018 -0
  462. package/dist/lib/layout/wasm/region.js.map +7 -0
  463. package/dist/lib/manipulation/controller.js +4 -7
  464. package/dist/lib/manipulation/controller.js.map +2 -2
  465. package/dist/lib/manipulation/frame.js +1 -1
  466. package/dist/lib/manipulation/frame.js.map +2 -2
  467. package/dist/lib/manipulation/handles.js +32 -33
  468. package/dist/lib/manipulation/handles.js.map +2 -2
  469. package/dist/lib/manipulation/solve.js +12 -10
  470. package/dist/lib/manipulation/solve.js.map +2 -2
  471. package/dist/lib/mount-pibbl.js +1 -0
  472. package/dist/lib/mount-pibbl.js.map +2 -2
  473. package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
  474. package/dist/lib/mount-prepared-pibbl.js +29 -0
  475. package/dist/lib/mount-prepared-pibbl.js.map +7 -0
  476. package/dist/lib/mount-request.d.ts +8 -0
  477. package/dist/lib/mount-request.js +41 -0
  478. package/dist/lib/mount-request.js.map +7 -0
  479. package/dist/lib/pibbl.d.ts +21 -13
  480. package/dist/lib/pibbl.js +18 -16
  481. package/dist/lib/pibbl.js.map +2 -2
  482. package/dist/lib/recording/recording.d.ts +43 -0
  483. package/dist/lib/recording/recording.js +555 -0
  484. package/dist/lib/recording/recording.js.map +7 -0
  485. package/dist/lib/recording/types.d.ts +118 -0
  486. package/dist/lib/recording/wasm-bytes.d.ts +1 -0
  487. package/dist/lib/recording/wasm-bytes.js +5 -0
  488. package/dist/lib/recording/wasm-bytes.js.map +7 -0
  489. package/dist/lib/recording/worker-source.d.ts +1 -0
  490. package/dist/lib/recording/worker-source.js +5 -0
  491. package/dist/lib/recording/worker-source.js.map +7 -0
  492. package/dist/lib/render-layer/controller.d.ts +9 -3
  493. package/dist/lib/render-layer/controller.js +259 -110
  494. package/dist/lib/render-layer/controller.js.map +2 -2
  495. package/dist/lib/render-transaction.d.ts +12 -2
  496. package/dist/lib/render-transaction.js +69 -1
  497. package/dist/lib/render-transaction.js.map +2 -2
  498. package/dist/lib/render.js +32 -8
  499. package/dist/lib/render.js.map +2 -2
  500. package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
  501. package/dist/lib/scheduler/realm-scheduler.js +55 -26
  502. package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
  503. package/dist/lib/scheduler/renderer-participant.js +1 -0
  504. package/dist/lib/scheduler/renderer-participant.js.map +2 -2
  505. package/dist/lib/series-inspection-frame.d.ts +18 -0
  506. package/dist/lib/series-inspection-frame.js +70 -0
  507. package/dist/lib/series-inspection-frame.js.map +7 -0
  508. package/dist/lib/signals/edge.d.ts +7 -4
  509. package/dist/lib/signals/edge.js +25 -3
  510. package/dist/lib/signals/edge.js.map +2 -2
  511. package/dist/lib/signals/graph.d.ts +16 -2
  512. package/dist/lib/signals/graph.js +54 -12
  513. package/dist/lib/signals/graph.js.map +2 -2
  514. package/dist/lib/signals/input-provision.d.ts +15 -0
  515. package/dist/lib/signals/input-provision.js +53 -3
  516. package/dist/lib/signals/input-provision.js.map +2 -2
  517. package/dist/lib/signals/render-consumer.d.ts +3 -0
  518. package/dist/lib/signals/render-consumer.js +22 -14
  519. package/dist/lib/signals/render-consumer.js.map +2 -2
  520. package/dist/lib/style/positioning.d.ts +50 -2
  521. package/dist/lib/style/positioning.js +28 -4
  522. package/dist/lib/style/positioning.js.map +2 -2
  523. package/dist/lib/style/resolve-built-in.d.ts +4 -3
  524. package/dist/lib/style/resolve-built-in.js +17 -3
  525. package/dist/lib/style/resolve-built-in.js.map +2 -2
  526. package/dist/lib/style/resolve-dispatch.d.ts +3 -0
  527. package/dist/lib/style/resolve-dispatch.js +77 -4
  528. package/dist/lib/style/resolve-dispatch.js.map +2 -2
  529. package/dist/lib/style/resolve-length.d.ts +2 -0
  530. package/dist/lib/style/resolve-length.js +13 -9
  531. package/dist/lib/style/resolve-length.js.map +2 -2
  532. package/dist/lib/style/sizing-length.d.ts +51 -0
  533. package/dist/lib/style/sizing-length.js +77 -0
  534. package/dist/lib/style/sizing-length.js.map +7 -0
  535. package/dist/lib/style/types.d.ts +63 -25
  536. package/dist/lib/surface/root-surface.js +10 -6
  537. package/dist/lib/surface/root-surface.js.map +2 -2
  538. package/dist/lib/textures/texture.js +10 -8
  539. package/dist/lib/textures/texture.js.map +2 -2
  540. package/dist/lib/transitions/capture.js +4 -1
  541. package/dist/lib/transitions/capture.js.map +2 -2
  542. package/dist/lib/transitions/embers-physics.js +17 -10
  543. package/dist/lib/transitions/embers-physics.js.map +2 -2
  544. package/dist/lib/types.d.ts +110 -1
  545. package/dist/sync.d.ts +16 -0
  546. package/dist/sync.js +13 -0
  547. package/dist/sync.js.map +7 -0
  548. package/dist/sync.mjs +1 -0
  549. package/package.json +26 -3
@@ -179,7 +179,7 @@ class PathGeometry {
179
179
  * @param counterclockwise - Whether the arc runs counterclockwise; defaults to false.
180
180
  */
181
181
  ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, counterclockwise = false) {
182
- if (![x, y, radiusX, radiusY, rotation, startAngle, endAngle].every(Number.isFinite)) return;
182
+ if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(radiusX) && Number.isFinite(radiusY) && Number.isFinite(rotation) && Number.isFinite(startAngle) && Number.isFinite(endAngle))) return;
183
183
  if (radiusX < 0 || radiusY < 0) throw new DOMException("Arc radii must not be negative.", "IndexSizeError");
184
184
  const cos = Math.cos(rotation), sin = Math.sin(rotation);
185
185
  const arc = {
@@ -198,7 +198,7 @@ class PathGeometry {
198
198
  #appendArc(arc) {
199
199
  const [x, y] = arcPoint(arc, arc.startAngle);
200
200
  const end = arcPoint(arc, arc.startAngle + arc.sweep);
201
- if (![x, y, ...end].every(Number.isFinite)) throw new RangeError("Arc coordinates overflowed.");
201
+ if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(end[0]) && Number.isFinite(end[1]))) throw new RangeError("Arc coordinates overflowed.");
202
202
  const value = state(this);
203
203
  ensureRevision(value);
204
204
  if (!value.count) append(value, 0, [x, y]);
@@ -216,7 +216,7 @@ class PathGeometry {
216
216
  * @param radius - Arc radius in path units.
217
217
  */
218
218
  arcTo(x1, y1, x2, y2, radius) {
219
- if (![x1, y1, x2, y2, radius].every(Number.isFinite)) return;
219
+ if (!(Number.isFinite(x1) && Number.isFinite(y1) && Number.isFinite(x2) && Number.isFinite(y2) && Number.isFinite(radius))) return;
220
220
  if (radius < 0) throw new DOMException("Arc radius must not be negative.", "IndexSizeError");
221
221
  const value = state(this);
222
222
  if (!value.count) {
@@ -243,7 +243,7 @@ class PathGeometry {
243
243
  const endX = x1 + vx * distance, endY = y1 + vy * distance;
244
244
  const start = Math.atan2(startY - cy, startX - cx);
245
245
  const end = Math.atan2(endY - cy, endX - cx);
246
- if (![cx, cy, endX, endY].every(Number.isFinite)) throw new RangeError("Arc coordinates overflowed.");
246
+ if (!(Number.isFinite(cx) && Number.isFinite(cy) && Number.isFinite(endX) && Number.isFinite(endY))) throw new RangeError("Arc coordinates overflowed.");
247
247
  this.#appendArc({
248
248
  type: "arc",
249
249
  cx,
@@ -264,8 +264,8 @@ class PathGeometry {
264
264
  * @param height - Signed vertical extent in path units.
265
265
  */
266
266
  rect(x, y, width, height) {
267
- if (![x, y, width, height].every(Number.isFinite)) return;
268
- if (![x + width, y + height].every(Number.isFinite)) throw new RangeError("Rectangle coordinates overflowed.");
267
+ if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(width) && Number.isFinite(height))) return;
268
+ if (!(Number.isFinite(x + width) && Number.isFinite(y + height))) throw new RangeError("Rectangle coordinates overflowed.");
269
269
  const value = state(this);
270
270
  ensureRevision(value);
271
271
  append(value, 0, [x, y]);
@@ -286,14 +286,14 @@ class PathGeometry {
286
286
  * to zero.
287
287
  */
288
288
  roundRect(x, y, width, height, radii = 0) {
289
- if (![x, y, width, height].every(Number.isFinite)) return;
289
+ if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(width) && Number.isFinite(height))) return;
290
290
  const list = Array.isArray(radii) ? radii : [radii];
291
291
  if (!list.length || list.length > 4) throw new RangeError("Expected one to four corner radii.");
292
292
  const values = [];
293
293
  for (const radius of list) {
294
294
  const rx = typeof radius === "number" ? radius : radius.x ?? 0;
295
295
  const ry = typeof radius === "number" ? radius : radius.y ?? 0;
296
- if (![rx, ry].every(Number.isFinite)) return;
296
+ if (!(Number.isFinite(rx) && Number.isFinite(ry))) return;
297
297
  if (rx < 0 || ry < 0) throw new RangeError("Corner radii must not be negative.");
298
298
  values.push([rx, ry]);
299
299
  }
@@ -334,7 +334,7 @@ class PathGeometry {
334
334
  if (!state(other).count) return;
335
335
  const normalized = DOMMatrix.fromMatrix(matrix);
336
336
  if (!normalized.is2D) throw new TypeError("PathGeometry requires a 2D affine matrix.");
337
- if (![normalized.a, normalized.b, normalized.c, normalized.d, normalized.e, normalized.f].every(Number.isFinite)) return;
337
+ if (!(Number.isFinite(normalized.a) && Number.isFinite(normalized.b) && Number.isFinite(normalized.c) && Number.isFinite(normalized.d) && Number.isFinite(normalized.e) && Number.isFinite(normalized.f))) return;
338
338
  const copy = other.clone();
339
339
  copy.transform(normalized);
340
340
  const value = state(copy);
@@ -454,13 +454,14 @@ class PathGeometry {
454
454
  const normalized = DOMMatrix.fromMatrix(input);
455
455
  if (!normalized.is2D) throw new TypeError("PathGeometry requires a 2D affine matrix.");
456
456
  const { a, b, c, d, e, f } = normalized;
457
- if (![a, b, c, d, e, f].every(Number.isFinite)) {
457
+ if (!(Number.isFinite(a) && Number.isFinite(b) && Number.isFinite(c) && Number.isFinite(d) && Number.isFinite(e) && Number.isFinite(f))) {
458
458
  throw new RangeError("Path transform must be finite.");
459
459
  }
460
460
  const value = state(this);
461
461
  if (!value.count) return;
462
462
  ensureRevision(value);
463
- for (const write of [false, true]) {
463
+ for (let pass = 0; pass < 2; pass++) {
464
+ const write = pass === 1;
464
465
  visitPathGeometry(this, (type, data, offset) => {
465
466
  const length = type === 5 ? 6 : widths[type];
466
467
  for (let i = 0; i < length; i += 2) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/geometry/path-geometry.ts"],
4
- "sourcesContent": ["import { arcPoint, arcSweep, TAU, type ArcSegment } from './path-arc.js';\n/**\n * A canonical, independently editable path segment.\n *\n * @see {@link PathGeometry}\n */\nexport type PathSegment =\n | {\n /** Selects `\"move\"`, `\"line\"` for type. See {@link PathSegment}. */\n type: 'move' | 'line';\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n y: number;\n }\n | {\n /** The literal \"quadratic\" identifying this variant. See {@link PathSegment}. */\n type: 'quadratic';\n /** Horizontal coordinate of the quadratic control point. See {@link PathSegment}. */\n cpx: number;\n /** Vertical coordinate of the quadratic control point. See {@link PathSegment}. */\n cpy: number;\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n y: number;\n }\n | {\n /** The literal \"cubic\" identifying this variant. See {@link PathSegment}. */\n type: 'cubic';\n /** Horizontal coordinate of the first cubic control point. See {@link PathSegment}. */\n cp1x: number;\n /** Vertical coordinate of the first cubic control point. See {@link PathSegment}. */\n cp1y: number;\n /** Horizontal coordinate of the second cubic control point. See {@link PathSegment}. */\n cp2x: number;\n /** Vertical coordinate of the second cubic control point. See {@link PathSegment}. */\n cp2y: number;\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n y: number;\n }\n | ArcSegment\n | {\n /** The literal \"close\" identifying this variant. See {@link PathSegment}. */\n type: 'close';\n };\n\nconst names = ['move', 'line', 'quadratic', 'cubic', 'close', 'arc'] as const;\nconst widths = [2, 2, 4, 6, 0, 8] as const;\ninterface Storage {\n types: Uint8Array;\n data: Float64Array;\n count: number;\n length: number;\n revision: number;\n x: number; y: number; startX: number; startY: number;\n}\nconst storage = new WeakMap<PathGeometry, Storage>();\n\nfunction state(path: PathGeometry): Storage {\n const value = storage.get(path);\n if (!value) throw new TypeError('Expected a PathGeometry.');\n return value;\n}\n\n/** @internal Borrowed buffers must never escape this synchronous traversal. */\nexport function visitPathGeometry(\n path: PathGeometry,\n visit: (type: number, data: Float64Array, offset: number) => void,\n): void {\n const value = state(path);\n let offset = 0;\n for (let i = 0; i < value.count; i++) {\n const type = value.types[i];\n visit(type, value.data, offset);\n offset += widths[type];\n }\n}\n\nfunction ensureRevision(value: Storage): void {\n if (value.revision >= Number.MAX_SAFE_INTEGER) {\n throw new RangeError('PathGeometry revision exhausted.');\n }\n}\n\nfunction reserve(value: Storage, count: number, length: number): void {\n if (count > value.types.length) {\n const next = new Uint8Array(Math.max(count, value.types.length * 2, 8));\n next.set(value.types.subarray(0, value.count));\n value.types = next;\n }\n if (length > value.data.length) {\n const next = new Float64Array(Math.max(length, value.data.length * 2, 32));\n next.set(value.data.subarray(0, value.length));\n value.data = next;\n }\n}\n\nfunction append(value: Storage, type: number, data: readonly number[]): void {\n reserve(value, value.count + 1, value.length + data.length);\n value.types[value.count++] = type;\n value.data.set(data, value.length);\n value.length += data.length;\n updatePoint(value, type, data, 0);\n}\n\nfunction operands(segment: PathSegment): number[] {\n switch (segment.type) {\n case 'move': case 'line': return [segment.x, segment.y];\n case 'quadratic': return [segment.cpx, segment.cpy, segment.x, segment.y];\n case 'cubic': return [segment.cp1x, segment.cp1y, segment.cp2x, segment.cp2y, segment.x, segment.y];\n case 'close': return [];\n case 'arc': return [segment.cx, segment.cy, segment.ux, segment.uy, segment.vx, segment.vy, segment.startAngle, segment.sweep];\n default: throw new TypeError('Unknown path segment type.');\n }\n}\n\n/**\n * Mutable packed geometry. Mutations do not schedule Pibbl rendering.\n *\n * @see {@link PathSegment}\n */\nexport class PathGeometry implements Iterable<PathSegment> {\n /**\n * Creates empty geometry or an independent copy of the supplied path. See {@link PathGeometry}.\n * @param source - Optional geometry whose segments are copied; omission creates an empty path.\n * See {@link PathGeometry} .\n */\n constructor(source?: PathGeometry) {\n const original = source === undefined ? undefined : state(source);\n storage.set(this, {\n types: original ? original.types.slice(0, original.count) : new Uint8Array(0),\n data: original ? original.data.slice(0, original.length) : new Float64Array(0),\n count: original?.count ?? 0,\n length: original?.length ?? 0,\n revision: 0,\n x: original?.x ?? 0, y: original?.y ?? 0,\n startX: original?.startX ?? 0, startY: original?.startY ?? 0,\n });\n }\n\n /**\n * Monotonic mutation revision; changing geometry does not itself request a Pibbl frame. See\n * {@link PathGeometry}.\n * @returns The mutation revision used to invalidate cached representations.\n */\n get revision(): number { return state(this).revision; }\n /**\n * Number of stored path segments, including move and close commands. See {@link PathGeometry}.\n * @returns The number of stored path segments.\n */\n get segmentCount(): number { return state(this).count; }\n\n /**\n * Returns an independent copy with its own mutation revision. See {@link PathGeometry}.\n * @returns An independent copy of this path's segments. See {@link PathGeometry}.\n */\n clone(): PathGeometry { return new PathGeometry(this); }\n\n /** Removes all segments and resets the current point. See {@link PathGeometry}. */\n clear(): void {\n const value = state(this);\n if (!value.count) return;\n ensureRevision(value);\n value.count = value.length = 0;\n value.x = value.y = value.startX = value.startY = 0;\n value.revision++;\n }\n\n /**\n * Begins a subpath at the supplied coordinates. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the new subpath's starting point.\n * @param y - Vertical coordinate of the new subpath's starting point.\n */\n moveTo(x: number, y: number): void { this.#build(0, [x, y]); }\n /**\n * Appends a straight segment to the supplied coordinates. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the line endpoint.\n * @param y - Vertical coordinate of the line endpoint.\n */\n lineTo(x: number, y: number): void { this.#build(1, [x, y]); }\n /**\n * Appends a quadratic curve using one control point and an endpoint. See {@link PathGeometry}.\n * @param cpx - Horizontal coordinate of the quadratic control point.\n * @param cpy - Vertical coordinate of the quadratic control point.\n * @param x - Horizontal coordinate of the curve endpoint.\n * @param y - Vertical coordinate of the curve endpoint.\n */\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void {\n this.#build(2, [cpx, cpy, x, y]);\n }\n /**\n * Appends a cubic curve using two control points and an endpoint. See {@link PathGeometry}.\n * @param cp1x - Horizontal coordinate of the first control point.\n * @param cp1y - Vertical coordinate of the first control point.\n * @param cp2x - Horizontal coordinate of the second control point.\n * @param cp2y - Vertical coordinate of the second control point.\n * @param x - Horizontal coordinate of the curve endpoint.\n * @param y - Vertical coordinate of the curve endpoint.\n */\n bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void {\n this.#build(3, [cp1x, cp1y, cp2x, cp2y, x, y]);\n }\n /**\n * Closes the current subpath; an already closed or empty path is unchanged. See\n * {@link PathGeometry}.\n */\n closePath(): void {\n const value = state(this);\n if (!value.count || value.types[value.count - 1] === 4) return;\n this.#build(4, []);\n }\n\n /**\n * Appends a circular arc using Canvas-compatible angles in radians. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the circle center.\n * @param y - Vertical coordinate of the circle center.\n * @param radius - Circle radius in path units.\n * @param startAngle - Starting angle in radians.\n * @param endAngle - Ending angle in radians.\n * @param counterclockwise - Whether the arc runs counterclockwise; defaults to false.\n */\n arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise = false): void {\n this.ellipse(x, y, radius, radius, 0, startAngle, endAngle, counterclockwise);\n }\n\n /**\n * Appends an elliptical arc; rotation and arc angles are in radians. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the ellipse center.\n * @param y - Vertical coordinate of the ellipse center.\n * @param radiusX - Horizontal radius in path units.\n * @param radiusY - Vertical radius in path units.\n * @param rotation - Ellipse rotation in radians.\n * @param startAngle - Starting angle in radians.\n * @param endAngle - Ending angle in radians.\n * @param counterclockwise - Whether the arc runs counterclockwise; defaults to false.\n */\n ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise = false): void {\n if (![x, y, radiusX, radiusY, rotation, startAngle, endAngle].every(Number.isFinite)) return;\n if (radiusX < 0 || radiusY < 0) throw new DOMException('Arc radii must not be negative.', 'IndexSizeError');\n const cos = Math.cos(rotation), sin = Math.sin(rotation);\n const arc: ArcSegment = {\n type: 'arc', cx: x, cy: y, ux: radiusX * cos, uy: radiusX * sin,\n vx: -radiusY * sin, vy: radiusY * cos, startAngle: startAngle % TAU,\n sweep: arcSweep(startAngle, endAngle, counterclockwise),\n };\n this.#appendArc(arc);\n }\n\n #appendArc(arc: ArcSegment): void {\n const [x, y] = arcPoint(arc, arc.startAngle);\n const end = arcPoint(arc, arc.startAngle + arc.sweep);\n if (![x, y, ...end].every(Number.isFinite)) throw new RangeError('Arc coordinates overflowed.');\n const value = state(this);\n ensureRevision(value);\n if (!value.count) append(value, 0, [x, y]);\n else if (value.x !== x || value.y !== y) append(value, 1, [x, y]);\n append(value, 5, operands(arc));\n value.revision++;\n }\n\n /**\n * Appends a circular arc tangent to two lines using Canvas-compatible geometry. See\n * {@link PathGeometry}.\n * @param x1 - Horizontal coordinate of the first tangent intersection.\n * @param y1 - Vertical coordinate of the first tangent intersection.\n * @param x2 - Horizontal coordinate of the second tangent endpoint.\n * @param y2 - Vertical coordinate of the second tangent endpoint.\n * @param radius - Arc radius in path units.\n */\n arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n if (![x1, y1, x2, y2, radius].every(Number.isFinite)) return;\n if (radius < 0) throw new DOMException('Arc radius must not be negative.', 'IndexSizeError');\n const value = state(this);\n if (!value.count) { this.moveTo(x1, y1); return; }\n const ax = value.x - x1, ay = value.y - y1, bx = x2 - x1, by = y2 - y1;\n const al = Math.hypot(ax, ay), bl = Math.hypot(bx, by);\n if (al === 0 || bl === 0 || radius === 0) { this.lineTo(x1, y1); return; }\n const ux = ax / al, uy = ay / al, vx = bx / bl, vy = by / bl;\n const cross = ux * vy - uy * vx;\n if (cross === 0) { this.lineTo(x1, y1); return; }\n const dot = Math.max(-1, Math.min(1, ux * vx + uy * vy));\n const distance = radius * (1 + dot) / Math.abs(cross);\n const startX = x1 + ux * distance, startY = y1 + uy * distance;\n const sign = cross < 0 ? -1 : 1;\n const cx = startX - uy * radius * sign, cy = startY + ux * radius * sign;\n const endX = x1 + vx * distance, endY = y1 + vy * distance;\n const start = Math.atan2(startY - cy, startX - cx);\n const end = Math.atan2(endY - cy, endX - cx);\n if (![cx, cy, endX, endY].every(Number.isFinite)) throw new RangeError('Arc coordinates overflowed.');\n this.#appendArc({ type: 'arc', cx, cy, ux: radius, uy: 0, vx: 0, vy: radius,\n startAngle: start, sweep: arcSweep(start, end, cross > 0) });\n }\n\n /**\n * Appends a closed rectangle subpath. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the rectangle origin.\n * @param y - Vertical coordinate of the rectangle origin.\n * @param width - Signed horizontal extent in path units.\n * @param height - Signed vertical extent in path units.\n */\n rect(x: number, y: number, width: number, height: number): void {\n if (![x, y, width, height].every(Number.isFinite)) return;\n if (![x + width, y + height].every(Number.isFinite)) throw new RangeError('Rectangle coordinates overflowed.');\n const value = state(this);\n ensureRevision(value);\n append(value, 0, [x, y]);\n append(value, 1, [x + width, y]);\n append(value, 1, [x + width, y + height]);\n append(value, 1, [x, y + height]);\n append(value, 4, []);\n append(value, 0, [x, y]);\n value.revision++;\n }\n\n /**\n * Appends a closed rectangle with Canvas-compatible corner radii. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the rectangle origin.\n * @param y - Vertical coordinate of the rectangle origin.\n * @param width - Signed horizontal extent in path units.\n * @param height - Signed vertical extent in path units.\n * @param radii - Circular or elliptical corner radii, using Canvas roundRect ordering; defaults\n * to zero.\n */\n roundRect(x: number, y: number, width: number, height: number,\n radii: number | DOMPointInit | (number | DOMPointInit)[] = 0): void {\n if (![x, y, width, height].every(Number.isFinite)) return;\n const list = Array.isArray(radii) ? radii : [radii];\n if (!list.length || list.length > 4) throw new RangeError('Expected one to four corner radii.');\n const values: [number, number][] = [];\n for (const radius of list) {\n const rx = typeof radius === 'number' ? radius : radius.x ?? 0;\n const ry = typeof radius === 'number' ? radius : radius.y ?? 0;\n if (![rx, ry].every(Number.isFinite)) return;\n if (rx < 0 || ry < 0) throw new RangeError('Corner radii must not be negative.');\n values.push([rx, ry]);\n }\n const corners = [values[0], values[1] ?? values[0], values[2] ?? values[0], values[3] ?? values[1] ?? values[0]];\n const w = Math.abs(width), h = Math.abs(height);\n const ratio = (length: number, sum: number) => sum === 0 ? 1 : length / sum;\n const scale = Math.min(1, ratio(w, corners[0][0] + corners[1][0]), ratio(w, corners[2][0] + corners[3][0]),\n ratio(h, corners[0][1] + corners[3][1]), ratio(h, corners[1][1] + corners[2][1]));\n const [tl, tr, br, bl] = corners.map(([rx, ry]) => [rx * scale, ry * scale]);\n const path = new PathGeometry();\n path.moveTo(tl[0], 0);\n path.lineTo(w - tr[0], 0);\n path.ellipse(w - tr[0], tr[1], tr[0], tr[1], 0, -Math.PI / 2, 0);\n path.lineTo(w, h - br[1]);\n path.ellipse(w - br[0], h - br[1], br[0], br[1], 0, 0, Math.PI / 2);\n path.lineTo(bl[0], h);\n path.ellipse(bl[0], h - bl[1], bl[0], bl[1], 0, Math.PI / 2, Math.PI);\n path.lineTo(0, tl[1]);\n path.ellipse(tl[0], tl[1], tl[0], tl[1], 0, Math.PI, Math.PI * 1.5);\n path.closePath();\n // Chromium resumes at the normalized rectangle origin after negative dimensions.\n path.moveTo(width < 0 ? w : 0, height < 0 ? h : 0);\n path.transform({ a: width < 0 ? -1 : 1, d: height < 0 ? -1 : 1, e: x, f: y });\n this.#copyPath(path);\n }\n\n /**\n * Appends a copy of another path, optionally transformed by a 2D matrix. See\n * {@link PathGeometry}.\n * @param other - Geometry whose segments are appended. See {@link PathGeometry}.\n * @param matrix - Optional affine transform applied to the appended segments; defaults to\n * identity.\n */\n addPath(other: PathGeometry, matrix: DOMMatrix2DInit = {}): void {\n if (!state(other).count) return;\n const normalized = DOMMatrix.fromMatrix(matrix);\n if (!normalized.is2D) throw new TypeError('PathGeometry requires a 2D affine matrix.');\n if (![normalized.a, normalized.b, normalized.c, normalized.d, normalized.e, normalized.f].every(Number.isFinite)) return;\n const copy = other.clone();\n copy.transform(normalized);\n const value = state(copy);\n append(value, 0, [value.x, value.y]);\n this.#copyPath(copy);\n }\n\n #copyPath(other: PathGeometry): void {\n const source = state(other), value = state(this);\n ensureRevision(value);\n reserve(value, value.count + source.count, value.length + source.length);\n value.types.set(source.types.subarray(0, source.count), value.count);\n value.data.set(source.data.subarray(0, source.length), value.length);\n value.count += source.count; value.length += source.length;\n value.x = source.x; value.y = source.y;\n value.startX = source.startX; value.startY = source.startY;\n value.revision++;\n }\n\n /**\n * Replaces a segment range with validated independent segment values. See {@link PathGeometry}.\n * @param start - Index at which to begin replacing segments.\n * @param deleteCount - Number of segments to remove.\n * @param segments - Replacement segments; defaults to no inserted segments. See\n * {@link PathSegment} .\n */\n spliceSegments(start: number, deleteCount: number, segments: readonly PathSegment[] = []): void {\n const value = state(this);\n if (!Number.isInteger(start) || start < 0 || start > value.count ||\n !Number.isInteger(deleteCount) || deleteCount < 0 || deleteCount > value.count - start) {\n throw new RangeError('Invalid path splice range.');\n }\n const additions = segments.map(segment => ({ type: names.indexOf(segment.type), data: validatedOperands(segment) }));\n const count = value.count - deleteCount + additions.length;\n const firstType = start === 0 ? (additions[0]?.type ?? value.types[deleteCount]) : value.types[0];\n if (count > 0 && firstType !== 0) throw new TypeError('A path must start with a move segment.');\n if (!deleteCount && !additions.length) return;\n ensureRevision(value);\n let offset = 0, removed = 0;\n for (let i = 0; i < start; i++) offset += widths[value.types[i]];\n for (let i = start; i < start + deleteCount; i++) removed += widths[value.types[i]];\n const added = additions.reduce((sum, segment) => sum + segment.data.length, 0);\n const length = value.length - removed + added;\n reserve(value, count, length);\n value.types.copyWithin(start + additions.length, start + deleteCount, value.count);\n value.data.copyWithin(offset + added, offset + removed, value.length);\n for (let i = 0; i < additions.length; i++) {\n value.types[start + i] = additions[i].type;\n value.data.set(additions[i].data, offset);\n offset += additions[i].data.length;\n }\n value.count = count; value.length = length;\n rebuildPoint(value);\n value.revision++;\n }\n\n #build(type: number, data: number[]): void {\n if (!data.every(Number.isFinite)) return;\n const value = state(this);\n ensureRevision(value);\n if (!value.count && type !== 0) {\n // Canvas starts a missing subpath at the first control point (or endpoint).\n append(value, 0, data.slice(0, 2));\n if (type === 1) {\n value.revision++;\n return;\n }\n }\n append(value, type, data);\n value.revision++;\n }\n\n #offset(index: number): number {\n const value = state(this);\n if (!Number.isInteger(index) || index < 0 || index >= value.count) {\n throw new RangeError('Path segment index is out of range.');\n }\n let offset = 0;\n for (let i = 0; i < index; i++) offset += widths[value.types[i]];\n return offset;\n }\n\n /**\n * Returns an independent segment value at the specified index. See {@link PathSegment}.\n * @param index - Zero-based segment index.\n * @returns The segment at the requested index. See {@link PathSegment}.\n */\n getSegment(index: number): PathSegment {\n return readSegment(state(this), index, this.#offset(index));\n }\n\n /**\n * Replaces one stored segment with a validated independent value. See {@link PathGeometry}.\n * @param index - Zero-based index of the segment to replace.\n * @param segment - Replacement segment data. See {@link PathSegment}.\n */\n setSegment(index: number, segment: PathSegment): void {\n const offset = this.#offset(index);\n const type = names.indexOf(segment.type);\n const data = validatedOperands(segment);\n if (!data.every(Number.isFinite)) throw new RangeError('Path coordinates must be finite.');\n if (index === 0 && type !== 0) throw new TypeError('A path must start with a move segment.');\n const value = state(this);\n ensureRevision(value);\n const oldWidth = widths[value.types[index]];\n const length = value.length + data.length - oldWidth;\n reserve(value, value.count, length);\n value.data.copyWithin(offset + data.length, offset + oldWidth, value.length);\n value.data.set(data, offset);\n value.types[index] = type;\n value.length = length;\n rebuildPoint(value);\n value.revision++;\n }\n\n /**\n * Applies a finite 2D affine matrix. Old native conversions remain unchanged.\n * @param matrix - Affine matrix applied to all segments in this path.\n */\n transform(matrix: DOMMatrix2DInit): void {\n const input = matrix as DOMMatrixInit;\n const normalized = DOMMatrix.fromMatrix(input);\n if (!normalized.is2D) throw new TypeError('PathGeometry requires a 2D affine matrix.');\n const { a, b, c, d, e, f } = normalized;\n if (![a, b, c, d, e, f].every(Number.isFinite)) {\n throw new RangeError('Path transform must be finite.');\n }\n const value = state(this);\n if (!value.count) return;\n ensureRevision(value);\n // Two passes keep overflow errors atomic without allocating another buffer.\n for (const write of [false, true]) {\n visitPathGeometry(this, (type, data, offset) => {\n const length = type === 5 ? 6 : widths[type];\n for (let i = 0; i < length; i += 2) {\n const x = data[offset + i], y = data[offset + i + 1];\n const vector = type === 5 && i > 0;\n const nextX = a * x + c * y + (vector ? 0 : e);\n const nextY = b * x + d * y + (vector ? 0 : f);\n if (!Number.isFinite(nextX) || !Number.isFinite(nextY)) {\n throw new RangeError('Path transform coordinates overflowed.');\n }\n if (write) { data[offset + i] = nextX; data[offset + i + 1] = nextY; }\n }\n });\n }\n rebuildPoint(value);\n value.revision++;\n }\n\n /**\n * Iterates over independent segment values in source order. See {@link PathSegment}.\n * @returns An iterator over the path's segments in drawing order. See {@link PathSegment}.\n */\n *[Symbol.iterator](): IterableIterator<PathSegment> {\n const value = state(this);\n const revision = value.revision;\n let offset = 0;\n for (let index = 0; index < value.count; index++) {\n if (value.revision !== revision) throw new Error('PathGeometry changed during iteration.');\n const width = widths[value.types[index]];\n yield readSegment(value, index, offset);\n if (value.revision !== revision) throw new Error('PathGeometry changed during iteration.');\n offset += width;\n }\n }\n}\n\nfunction readSegment(value: Storage, index: number, offset: number): PathSegment {\n const d = value.data;\n switch (value.types[index]) {\n case 0: return { type: 'move', x: d[offset], y: d[offset + 1] };\n case 1: return { type: 'line', x: d[offset], y: d[offset + 1] };\n case 2: return { type: 'quadratic', cpx: d[offset], cpy: d[offset + 1], x: d[offset + 2], y: d[offset + 3] };\n case 3: return { type: 'cubic', cp1x: d[offset], cp1y: d[offset + 1], cp2x: d[offset + 2], cp2y: d[offset + 3], x: d[offset + 4], y: d[offset + 5] };\n case 5: return { type: 'arc', cx: d[offset], cy: d[offset + 1], ux: d[offset + 2], uy: d[offset + 3], vx: d[offset + 4], vy: d[offset + 5], startAngle: d[offset + 6], sweep: d[offset + 7] };\n default: return { type: 'close' };\n }\n}\n\nfunction validatedOperands(segment: PathSegment): number[] {\n const data = operands(segment);\n if (!data.every(Number.isFinite)) throw new RangeError('Path coordinates must be finite.');\n if (segment.type === 'arc' && (Math.abs(segment.sweep) > TAU || Math.abs(segment.startAngle) > TAU)) {\n throw new RangeError('Arc angles must be normalized to one revolution.');\n }\n return data;\n}\n\nfunction updatePoint(value: Storage, type: number, data: ArrayLike<number>, offset: number): void {\n if (type === 4) { value.x = value.startX; value.y = value.startY; return; }\n if (type === 5) {\n const angle = data[offset + 6] + data[offset + 7];\n value.x = data[offset] + data[offset + 2] * Math.cos(angle) + data[offset + 4] * Math.sin(angle);\n value.y = data[offset + 1] + data[offset + 3] * Math.cos(angle) + data[offset + 5] * Math.sin(angle);\n } else {\n value.x = data[offset + widths[type] - 2]; value.y = data[offset + widths[type] - 1];\n }\n if (type === 0) { value.startX = value.x; value.startY = value.y; }\n}\nfunction rebuildPoint(value: Storage): void {\n value.x = value.y = value.startX = value.startY = 0;\n let offset = 0;\n for (let i = 0; i < value.count; i++) {\n updatePoint(value, value.types[i], value.data, offset);\n offset += widths[value.types[i]];\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { arcPoint, arcSweep, TAU, type ArcSegment } from './path-arc.js';\n/**\n * A canonical, independently editable path segment.\n *\n * @see {@link PathGeometry}\n */\nexport type PathSegment =\n | {\n /** Selects `\"move\"`, `\"line\"` for type. See {@link PathSegment}. */\n type: 'move' | 'line';\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n y: number;\n }\n | {\n /** The literal \"quadratic\" identifying this variant. See {@link PathSegment}. */\n type: 'quadratic';\n /** Horizontal coordinate of the quadratic control point. See {@link PathSegment}. */\n cpx: number;\n /** Vertical coordinate of the quadratic control point. See {@link PathSegment}. */\n cpy: number;\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n y: number;\n }\n | {\n /** The literal \"cubic\" identifying this variant. See {@link PathSegment}. */\n type: 'cubic';\n /** Horizontal coordinate of the first cubic control point. See {@link PathSegment}. */\n cp1x: number;\n /** Vertical coordinate of the first cubic control point. See {@link PathSegment}. */\n cp1y: number;\n /** Horizontal coordinate of the second cubic control point. See {@link PathSegment}. */\n cp2x: number;\n /** Vertical coordinate of the second cubic control point. See {@link PathSegment}. */\n cp2y: number;\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See\n * {@link PathSegment}.\n */\n y: number;\n }\n | ArcSegment\n | {\n /** The literal \"close\" identifying this variant. See {@link PathSegment}. */\n type: 'close';\n };\n\nconst names = ['move', 'line', 'quadratic', 'cubic', 'close', 'arc'] as const;\nconst widths = [2, 2, 4, 6, 0, 8] as const;\ninterface Storage {\n types: Uint8Array;\n data: Float64Array;\n count: number;\n length: number;\n revision: number;\n x: number; y: number; startX: number; startY: number;\n}\nconst storage = new WeakMap<PathGeometry, Storage>();\n\nfunction state(path: PathGeometry): Storage {\n const value = storage.get(path);\n if (!value) throw new TypeError('Expected a PathGeometry.');\n return value;\n}\n\n/** @internal Borrowed buffers must never escape this synchronous traversal. */\nexport function visitPathGeometry(\n path: PathGeometry,\n visit: (type: number, data: Float64Array, offset: number) => void,\n): void {\n const value = state(path);\n let offset = 0;\n for (let i = 0; i < value.count; i++) {\n const type = value.types[i];\n visit(type, value.data, offset);\n offset += widths[type];\n }\n}\n\nfunction ensureRevision(value: Storage): void {\n if (value.revision >= Number.MAX_SAFE_INTEGER) {\n throw new RangeError('PathGeometry revision exhausted.');\n }\n}\n\nfunction reserve(value: Storage, count: number, length: number): void {\n if (count > value.types.length) {\n const next = new Uint8Array(Math.max(count, value.types.length * 2, 8));\n next.set(value.types.subarray(0, value.count));\n value.types = next;\n }\n if (length > value.data.length) {\n const next = new Float64Array(Math.max(length, value.data.length * 2, 32));\n next.set(value.data.subarray(0, value.length));\n value.data = next;\n }\n}\n\nfunction append(value: Storage, type: number, data: readonly number[]): void {\n reserve(value, value.count + 1, value.length + data.length);\n value.types[value.count++] = type;\n value.data.set(data, value.length);\n value.length += data.length;\n updatePoint(value, type, data, 0);\n}\n\nfunction operands(segment: PathSegment): number[] {\n switch (segment.type) {\n case 'move': case 'line': return [segment.x, segment.y];\n case 'quadratic': return [segment.cpx, segment.cpy, segment.x, segment.y];\n case 'cubic': return [segment.cp1x, segment.cp1y, segment.cp2x, segment.cp2y, segment.x, segment.y];\n case 'close': return [];\n case 'arc': return [segment.cx, segment.cy, segment.ux, segment.uy, segment.vx, segment.vy, segment.startAngle, segment.sweep];\n default: throw new TypeError('Unknown path segment type.');\n }\n}\n\n/**\n * Mutable packed geometry. Mutations do not schedule Pibbl rendering.\n *\n * @see {@link PathSegment}\n */\nexport class PathGeometry implements Iterable<PathSegment> {\n /**\n * Creates empty geometry or an independent copy of the supplied path. See {@link PathGeometry}.\n * @param source - Optional geometry whose segments are copied; omission creates an empty path.\n * See {@link PathGeometry} .\n */\n constructor(source?: PathGeometry) {\n const original = source === undefined ? undefined : state(source);\n storage.set(this, {\n types: original ? original.types.slice(0, original.count) : new Uint8Array(0),\n data: original ? original.data.slice(0, original.length) : new Float64Array(0),\n count: original?.count ?? 0,\n length: original?.length ?? 0,\n revision: 0,\n x: original?.x ?? 0, y: original?.y ?? 0,\n startX: original?.startX ?? 0, startY: original?.startY ?? 0,\n });\n }\n\n /**\n * Monotonic mutation revision; changing geometry does not itself request a Pibbl frame. See\n * {@link PathGeometry}.\n * @returns The mutation revision used to invalidate cached representations.\n */\n get revision(): number { return state(this).revision; }\n /**\n * Number of stored path segments, including move and close commands. See {@link PathGeometry}.\n * @returns The number of stored path segments.\n */\n get segmentCount(): number { return state(this).count; }\n\n /**\n * Returns an independent copy with its own mutation revision. See {@link PathGeometry}.\n * @returns An independent copy of this path's segments. See {@link PathGeometry}.\n */\n clone(): PathGeometry { return new PathGeometry(this); }\n\n /** Removes all segments and resets the current point. See {@link PathGeometry}. */\n clear(): void {\n const value = state(this);\n if (!value.count) return;\n ensureRevision(value);\n value.count = value.length = 0;\n value.x = value.y = value.startX = value.startY = 0;\n value.revision++;\n }\n\n /**\n * Begins a subpath at the supplied coordinates. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the new subpath's starting point.\n * @param y - Vertical coordinate of the new subpath's starting point.\n */\n moveTo(x: number, y: number): void { this.#build(0, [x, y]); }\n /**\n * Appends a straight segment to the supplied coordinates. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the line endpoint.\n * @param y - Vertical coordinate of the line endpoint.\n */\n lineTo(x: number, y: number): void { this.#build(1, [x, y]); }\n /**\n * Appends a quadratic curve using one control point and an endpoint. See {@link PathGeometry}.\n * @param cpx - Horizontal coordinate of the quadratic control point.\n * @param cpy - Vertical coordinate of the quadratic control point.\n * @param x - Horizontal coordinate of the curve endpoint.\n * @param y - Vertical coordinate of the curve endpoint.\n */\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void {\n this.#build(2, [cpx, cpy, x, y]);\n }\n /**\n * Appends a cubic curve using two control points and an endpoint. See {@link PathGeometry}.\n * @param cp1x - Horizontal coordinate of the first control point.\n * @param cp1y - Vertical coordinate of the first control point.\n * @param cp2x - Horizontal coordinate of the second control point.\n * @param cp2y - Vertical coordinate of the second control point.\n * @param x - Horizontal coordinate of the curve endpoint.\n * @param y - Vertical coordinate of the curve endpoint.\n */\n bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void {\n this.#build(3, [cp1x, cp1y, cp2x, cp2y, x, y]);\n }\n /**\n * Closes the current subpath; an already closed or empty path is unchanged. See\n * {@link PathGeometry}.\n */\n closePath(): void {\n const value = state(this);\n if (!value.count || value.types[value.count - 1] === 4) return;\n this.#build(4, []);\n }\n\n /**\n * Appends a circular arc using Canvas-compatible angles in radians. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the circle center.\n * @param y - Vertical coordinate of the circle center.\n * @param radius - Circle radius in path units.\n * @param startAngle - Starting angle in radians.\n * @param endAngle - Ending angle in radians.\n * @param counterclockwise - Whether the arc runs counterclockwise; defaults to false.\n */\n arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise = false): void {\n this.ellipse(x, y, radius, radius, 0, startAngle, endAngle, counterclockwise);\n }\n\n /**\n * Appends an elliptical arc; rotation and arc angles are in radians. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the ellipse center.\n * @param y - Vertical coordinate of the ellipse center.\n * @param radiusX - Horizontal radius in path units.\n * @param radiusY - Vertical radius in path units.\n * @param rotation - Ellipse rotation in radians.\n * @param startAngle - Starting angle in radians.\n * @param endAngle - Ending angle in radians.\n * @param counterclockwise - Whether the arc runs counterclockwise; defaults to false.\n */\n ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, counterclockwise = false): void {\n if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(radiusX) && Number.isFinite(radiusY) && Number.isFinite(rotation) && Number.isFinite(startAngle) && Number.isFinite(endAngle))) return;\n if (radiusX < 0 || radiusY < 0) throw new DOMException('Arc radii must not be negative.', 'IndexSizeError');\n const cos = Math.cos(rotation), sin = Math.sin(rotation);\n const arc: ArcSegment = {\n type: 'arc', cx: x, cy: y, ux: radiusX * cos, uy: radiusX * sin,\n vx: -radiusY * sin, vy: radiusY * cos, startAngle: startAngle % TAU,\n sweep: arcSweep(startAngle, endAngle, counterclockwise),\n };\n this.#appendArc(arc);\n }\n\n #appendArc(arc: ArcSegment): void {\n const [x, y] = arcPoint(arc, arc.startAngle);\n const end = arcPoint(arc, arc.startAngle + arc.sweep);\n if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(end[0]) && Number.isFinite(end[1]))) throw new RangeError('Arc coordinates overflowed.');\n const value = state(this);\n ensureRevision(value);\n if (!value.count) append(value, 0, [x, y]);\n else if (value.x !== x || value.y !== y) append(value, 1, [x, y]);\n append(value, 5, operands(arc));\n value.revision++;\n }\n\n /**\n * Appends a circular arc tangent to two lines using Canvas-compatible geometry. See\n * {@link PathGeometry}.\n * @param x1 - Horizontal coordinate of the first tangent intersection.\n * @param y1 - Vertical coordinate of the first tangent intersection.\n * @param x2 - Horizontal coordinate of the second tangent endpoint.\n * @param y2 - Vertical coordinate of the second tangent endpoint.\n * @param radius - Arc radius in path units.\n */\n arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n if (!(Number.isFinite(x1) && Number.isFinite(y1) && Number.isFinite(x2) && Number.isFinite(y2) && Number.isFinite(radius))) return;\n if (radius < 0) throw new DOMException('Arc radius must not be negative.', 'IndexSizeError');\n const value = state(this);\n if (!value.count) { this.moveTo(x1, y1); return; }\n const ax = value.x - x1, ay = value.y - y1, bx = x2 - x1, by = y2 - y1;\n const al = Math.hypot(ax, ay), bl = Math.hypot(bx, by);\n if (al === 0 || bl === 0 || radius === 0) { this.lineTo(x1, y1); return; }\n const ux = ax / al, uy = ay / al, vx = bx / bl, vy = by / bl;\n const cross = ux * vy - uy * vx;\n if (cross === 0) { this.lineTo(x1, y1); return; }\n const dot = Math.max(-1, Math.min(1, ux * vx + uy * vy));\n const distance = radius * (1 + dot) / Math.abs(cross);\n const startX = x1 + ux * distance, startY = y1 + uy * distance;\n const sign = cross < 0 ? -1 : 1;\n const cx = startX - uy * radius * sign, cy = startY + ux * radius * sign;\n const endX = x1 + vx * distance, endY = y1 + vy * distance;\n const start = Math.atan2(startY - cy, startX - cx);\n const end = Math.atan2(endY - cy, endX - cx);\n if (!(Number.isFinite(cx) && Number.isFinite(cy) && Number.isFinite(endX) && Number.isFinite(endY))) throw new RangeError('Arc coordinates overflowed.');\n this.#appendArc({ type: 'arc', cx, cy, ux: radius, uy: 0, vx: 0, vy: radius,\n startAngle: start, sweep: arcSweep(start, end, cross > 0) });\n }\n\n /**\n * Appends a closed rectangle subpath. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the rectangle origin.\n * @param y - Vertical coordinate of the rectangle origin.\n * @param width - Signed horizontal extent in path units.\n * @param height - Signed vertical extent in path units.\n */\n rect(x: number, y: number, width: number, height: number): void {\n if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(width) && Number.isFinite(height))) return;\n if (!(Number.isFinite(x + width) && Number.isFinite(y + height))) throw new RangeError('Rectangle coordinates overflowed.');\n const value = state(this);\n ensureRevision(value);\n append(value, 0, [x, y]);\n append(value, 1, [x + width, y]);\n append(value, 1, [x + width, y + height]);\n append(value, 1, [x, y + height]);\n append(value, 4, []);\n append(value, 0, [x, y]);\n value.revision++;\n }\n\n /**\n * Appends a closed rectangle with Canvas-compatible corner radii. See {@link PathGeometry}.\n * @param x - Horizontal coordinate of the rectangle origin.\n * @param y - Vertical coordinate of the rectangle origin.\n * @param width - Signed horizontal extent in path units.\n * @param height - Signed vertical extent in path units.\n * @param radii - Circular or elliptical corner radii, using Canvas roundRect ordering; defaults\n * to zero.\n */\n roundRect(x: number, y: number, width: number, height: number,\n radii: number | DOMPointInit | (number | DOMPointInit)[] = 0): void {\n if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(width) && Number.isFinite(height))) return;\n const list = Array.isArray(radii) ? radii : [radii];\n if (!list.length || list.length > 4) throw new RangeError('Expected one to four corner radii.');\n const values: [number, number][] = [];\n for (const radius of list) {\n const rx = typeof radius === 'number' ? radius : radius.x ?? 0;\n const ry = typeof radius === 'number' ? radius : radius.y ?? 0;\n if (!(Number.isFinite(rx) && Number.isFinite(ry))) return;\n if (rx < 0 || ry < 0) throw new RangeError('Corner radii must not be negative.');\n values.push([rx, ry]);\n }\n const corners = [values[0], values[1] ?? values[0], values[2] ?? values[0], values[3] ?? values[1] ?? values[0]];\n const w = Math.abs(width), h = Math.abs(height);\n const ratio = (length: number, sum: number) => sum === 0 ? 1 : length / sum;\n const scale = Math.min(1, ratio(w, corners[0][0] + corners[1][0]), ratio(w, corners[2][0] + corners[3][0]),\n ratio(h, corners[0][1] + corners[3][1]), ratio(h, corners[1][1] + corners[2][1]));\n const [tl, tr, br, bl] = corners.map(([rx, ry]) => [rx * scale, ry * scale]);\n const path = new PathGeometry();\n path.moveTo(tl[0], 0);\n path.lineTo(w - tr[0], 0);\n path.ellipse(w - tr[0], tr[1], tr[0], tr[1], 0, -Math.PI / 2, 0);\n path.lineTo(w, h - br[1]);\n path.ellipse(w - br[0], h - br[1], br[0], br[1], 0, 0, Math.PI / 2);\n path.lineTo(bl[0], h);\n path.ellipse(bl[0], h - bl[1], bl[0], bl[1], 0, Math.PI / 2, Math.PI);\n path.lineTo(0, tl[1]);\n path.ellipse(tl[0], tl[1], tl[0], tl[1], 0, Math.PI, Math.PI * 1.5);\n path.closePath();\n // Chromium resumes at the normalized rectangle origin after negative dimensions.\n path.moveTo(width < 0 ? w : 0, height < 0 ? h : 0);\n path.transform({ a: width < 0 ? -1 : 1, d: height < 0 ? -1 : 1, e: x, f: y });\n this.#copyPath(path);\n }\n\n /**\n * Appends a copy of another path, optionally transformed by a 2D matrix. See\n * {@link PathGeometry}.\n * @param other - Geometry whose segments are appended. See {@link PathGeometry}.\n * @param matrix - Optional affine transform applied to the appended segments; defaults to\n * identity.\n */\n addPath(other: PathGeometry, matrix: DOMMatrix2DInit = {}): void {\n if (!state(other).count) return;\n const normalized = DOMMatrix.fromMatrix(matrix);\n if (!normalized.is2D) throw new TypeError('PathGeometry requires a 2D affine matrix.');\n if (!(Number.isFinite(normalized.a) && Number.isFinite(normalized.b) && Number.isFinite(normalized.c) && Number.isFinite(normalized.d) && Number.isFinite(normalized.e) && Number.isFinite(normalized.f))) return;\n const copy = other.clone();\n copy.transform(normalized);\n const value = state(copy);\n append(value, 0, [value.x, value.y]);\n this.#copyPath(copy);\n }\n\n #copyPath(other: PathGeometry): void {\n const source = state(other), value = state(this);\n ensureRevision(value);\n reserve(value, value.count + source.count, value.length + source.length);\n value.types.set(source.types.subarray(0, source.count), value.count);\n value.data.set(source.data.subarray(0, source.length), value.length);\n value.count += source.count; value.length += source.length;\n value.x = source.x; value.y = source.y;\n value.startX = source.startX; value.startY = source.startY;\n value.revision++;\n }\n\n /**\n * Replaces a segment range with validated independent segment values. See {@link PathGeometry}.\n * @param start - Index at which to begin replacing segments.\n * @param deleteCount - Number of segments to remove.\n * @param segments - Replacement segments; defaults to no inserted segments. See\n * {@link PathSegment} .\n */\n spliceSegments(start: number, deleteCount: number, segments: readonly PathSegment[] = []): void {\n const value = state(this);\n if (!Number.isInteger(start) || start < 0 || start > value.count ||\n !Number.isInteger(deleteCount) || deleteCount < 0 || deleteCount > value.count - start) {\n throw new RangeError('Invalid path splice range.');\n }\n const additions = segments.map(segment => ({ type: names.indexOf(segment.type), data: validatedOperands(segment) }));\n const count = value.count - deleteCount + additions.length;\n const firstType = start === 0 ? (additions[0]?.type ?? value.types[deleteCount]) : value.types[0];\n if (count > 0 && firstType !== 0) throw new TypeError('A path must start with a move segment.');\n if (!deleteCount && !additions.length) return;\n ensureRevision(value);\n let offset = 0, removed = 0;\n for (let i = 0; i < start; i++) offset += widths[value.types[i]];\n for (let i = start; i < start + deleteCount; i++) removed += widths[value.types[i]];\n const added = additions.reduce((sum, segment) => sum + segment.data.length, 0);\n const length = value.length - removed + added;\n reserve(value, count, length);\n value.types.copyWithin(start + additions.length, start + deleteCount, value.count);\n value.data.copyWithin(offset + added, offset + removed, value.length);\n for (let i = 0; i < additions.length; i++) {\n value.types[start + i] = additions[i].type;\n value.data.set(additions[i].data, offset);\n offset += additions[i].data.length;\n }\n value.count = count; value.length = length;\n rebuildPoint(value);\n value.revision++;\n }\n\n #build(type: number, data: number[]): void {\n if (!data.every(Number.isFinite)) return;\n const value = state(this);\n ensureRevision(value);\n if (!value.count && type !== 0) {\n // Canvas starts a missing subpath at the first control point (or endpoint).\n append(value, 0, data.slice(0, 2));\n if (type === 1) {\n value.revision++;\n return;\n }\n }\n append(value, type, data);\n value.revision++;\n }\n\n #offset(index: number): number {\n const value = state(this);\n if (!Number.isInteger(index) || index < 0 || index >= value.count) {\n throw new RangeError('Path segment index is out of range.');\n }\n let offset = 0;\n for (let i = 0; i < index; i++) offset += widths[value.types[i]];\n return offset;\n }\n\n /**\n * Returns an independent segment value at the specified index. See {@link PathSegment}.\n * @param index - Zero-based segment index.\n * @returns The segment at the requested index. See {@link PathSegment}.\n */\n getSegment(index: number): PathSegment {\n return readSegment(state(this), index, this.#offset(index));\n }\n\n /**\n * Replaces one stored segment with a validated independent value. See {@link PathGeometry}.\n * @param index - Zero-based index of the segment to replace.\n * @param segment - Replacement segment data. See {@link PathSegment}.\n */\n setSegment(index: number, segment: PathSegment): void {\n const offset = this.#offset(index);\n const type = names.indexOf(segment.type);\n const data = validatedOperands(segment);\n if (!data.every(Number.isFinite)) throw new RangeError('Path coordinates must be finite.');\n if (index === 0 && type !== 0) throw new TypeError('A path must start with a move segment.');\n const value = state(this);\n ensureRevision(value);\n const oldWidth = widths[value.types[index]];\n const length = value.length + data.length - oldWidth;\n reserve(value, value.count, length);\n value.data.copyWithin(offset + data.length, offset + oldWidth, value.length);\n value.data.set(data, offset);\n value.types[index] = type;\n value.length = length;\n rebuildPoint(value);\n value.revision++;\n }\n\n /**\n * Applies a finite 2D affine matrix. Old native conversions remain unchanged.\n * @param matrix - Affine matrix applied to all segments in this path.\n */\n transform(matrix: DOMMatrix2DInit): void {\n const input = matrix as DOMMatrixInit;\n const normalized = DOMMatrix.fromMatrix(input);\n if (!normalized.is2D) throw new TypeError('PathGeometry requires a 2D affine matrix.');\n const { a, b, c, d, e, f } = normalized;\n if (!(Number.isFinite(a) && Number.isFinite(b) && Number.isFinite(c) && Number.isFinite(d) && Number.isFinite(e) && Number.isFinite(f))) {\n throw new RangeError('Path transform must be finite.');\n }\n const value = state(this);\n if (!value.count) return;\n ensureRevision(value);\n // Two passes keep overflow errors atomic without allocating another buffer.\n for (let pass = 0; pass < 2; pass++) {\n const write = pass === 1;\n visitPathGeometry(this, (type, data, offset) => {\n const length = type === 5 ? 6 : widths[type];\n for (let i = 0; i < length; i += 2) {\n const x = data[offset + i], y = data[offset + i + 1];\n const vector = type === 5 && i > 0;\n const nextX = a * x + c * y + (vector ? 0 : e);\n const nextY = b * x + d * y + (vector ? 0 : f);\n if (!Number.isFinite(nextX) || !Number.isFinite(nextY)) {\n throw new RangeError('Path transform coordinates overflowed.');\n }\n if (write) { data[offset + i] = nextX; data[offset + i + 1] = nextY; }\n }\n });\n }\n rebuildPoint(value);\n value.revision++;\n }\n\n /**\n * Iterates over independent segment values in source order. See {@link PathSegment}.\n * @returns An iterator over the path's segments in drawing order. See {@link PathSegment}.\n */\n *[Symbol.iterator](): IterableIterator<PathSegment> {\n const value = state(this);\n const revision = value.revision;\n let offset = 0;\n for (let index = 0; index < value.count; index++) {\n if (value.revision !== revision) throw new Error('PathGeometry changed during iteration.');\n const width = widths[value.types[index]];\n yield readSegment(value, index, offset);\n if (value.revision !== revision) throw new Error('PathGeometry changed during iteration.');\n offset += width;\n }\n }\n}\n\nfunction readSegment(value: Storage, index: number, offset: number): PathSegment {\n const d = value.data;\n switch (value.types[index]) {\n case 0: return { type: 'move', x: d[offset], y: d[offset + 1] };\n case 1: return { type: 'line', x: d[offset], y: d[offset + 1] };\n case 2: return { type: 'quadratic', cpx: d[offset], cpy: d[offset + 1], x: d[offset + 2], y: d[offset + 3] };\n case 3: return { type: 'cubic', cp1x: d[offset], cp1y: d[offset + 1], cp2x: d[offset + 2], cp2y: d[offset + 3], x: d[offset + 4], y: d[offset + 5] };\n case 5: return { type: 'arc', cx: d[offset], cy: d[offset + 1], ux: d[offset + 2], uy: d[offset + 3], vx: d[offset + 4], vy: d[offset + 5], startAngle: d[offset + 6], sweep: d[offset + 7] };\n default: return { type: 'close' };\n }\n}\n\nfunction validatedOperands(segment: PathSegment): number[] {\n const data = operands(segment);\n if (!data.every(Number.isFinite)) throw new RangeError('Path coordinates must be finite.');\n if (segment.type === 'arc' && (Math.abs(segment.sweep) > TAU || Math.abs(segment.startAngle) > TAU)) {\n throw new RangeError('Arc angles must be normalized to one revolution.');\n }\n return data;\n}\n\nfunction updatePoint(value: Storage, type: number, data: ArrayLike<number>, offset: number): void {\n if (type === 4) { value.x = value.startX; value.y = value.startY; return; }\n if (type === 5) {\n const angle = data[offset + 6] + data[offset + 7];\n value.x = data[offset] + data[offset + 2] * Math.cos(angle) + data[offset + 4] * Math.sin(angle);\n value.y = data[offset + 1] + data[offset + 3] * Math.cos(angle) + data[offset + 5] * Math.sin(angle);\n } else {\n value.x = data[offset + widths[type] - 2]; value.y = data[offset + widths[type] - 1];\n }\n if (type === 0) { value.startX = value.x; value.startY = value.y; }\n}\nfunction rebuildPoint(value: Storage): void {\n value.x = value.y = value.startX = value.startY = 0;\n let offset = 0;\n for (let i = 0; i < value.count; i++) {\n updatePoint(value, value.types[i], value.data, offset);\n offset += widths[value.types[i]];\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,UAAU,UAAU,WAA4B;AAmEzD,MAAM,QAAQ,CAAC,QAAQ,QAAQ,aAAa,SAAS,SAAS,KAAK;AACnE,MAAM,SAAS,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAShC,MAAM,UAAU,oBAAI,QAA+B;AAEnD,SAAS,MAAM,MAA6B;AAC1C,QAAM,QAAQ,QAAQ,IAAI,IAAI;AAC9B,MAAI,CAAC,MAAO,OAAM,IAAI,UAAU,0BAA0B;AAC1D,SAAO;AACT;AAGO,SAAS,kBACd,MACA,OACM;AACN,QAAM,QAAQ,MAAM,IAAI;AACxB,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,OAAO,KAAK;AACpC,UAAM,OAAO,MAAM,MAAM,CAAC;AAC1B,UAAM,MAAM,MAAM,MAAM,MAAM;AAC9B,cAAU,OAAO,IAAI;AAAA,EACvB;AACF;AAEA,SAAS,eAAe,OAAsB;AAC5C,MAAI,MAAM,YAAY,OAAO,kBAAkB;AAC7C,UAAM,IAAI,WAAW,kCAAkC;AAAA,EACzD;AACF;AAEA,SAAS,QAAQ,OAAgB,OAAe,QAAsB;AACpE,MAAI,QAAQ,MAAM,MAAM,QAAQ;AAC9B,UAAM,OAAO,IAAI,WAAW,KAAK,IAAI,OAAO,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC;AACtE,SAAK,IAAI,MAAM,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC;AAC7C,UAAM,QAAQ;AAAA,EAChB;AACA,MAAI,SAAS,MAAM,KAAK,QAAQ;AAC9B,UAAM,OAAO,IAAI,aAAa,KAAK,IAAI,QAAQ,MAAM,KAAK,SAAS,GAAG,EAAE,CAAC;AACzE,SAAK,IAAI,MAAM,KAAK,SAAS,GAAG,MAAM,MAAM,CAAC;AAC7C,UAAM,OAAO;AAAA,EACf;AACF;AAEA,SAAS,OAAO,OAAgB,MAAc,MAA+B;AAC3E,UAAQ,OAAO,MAAM,QAAQ,GAAG,MAAM,SAAS,KAAK,MAAM;AAC1D,QAAM,MAAM,MAAM,OAAO,IAAI;AAC7B,QAAM,KAAK,IAAI,MAAM,MAAM,MAAM;AACjC,QAAM,UAAU,KAAK;AACrB,cAAY,OAAO,MAAM,MAAM,CAAC;AAClC;AAEA,SAAS,SAAS,SAAgC;AAChD,UAAQ,QAAQ,MAAM;AAAA,IACpB,KAAK;AAAA,IAAQ,KAAK;AAAQ,aAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAAA,IACtD,KAAK;AAAa,aAAO,CAAC,QAAQ,KAAK,QAAQ,KAAK,QAAQ,GAAG,QAAQ,CAAC;AAAA,IACxE,KAAK;AAAS,aAAO,CAAC,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,GAAG,QAAQ,CAAC;AAAA,IAClG,KAAK;AAAS,aAAO,CAAC;AAAA,IACtB,KAAK;AAAO,aAAO,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,IAAI,QAAQ,YAAY,QAAQ,KAAK;AAAA,IAC7H;AAAS,YAAM,IAAI,UAAU,4BAA4B;AAAA,EAC3D;AACF;AAOO,MAAM,aAA8C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzD,YAAY,QAAuB;AACjC,UAAM,WAAW,WAAW,SAAY,SAAY,MAAM,MAAM;AAChE,YAAQ,IAAI,MAAM;AAAA,MAChB,OAAO,WAAW,SAAS,MAAM,MAAM,GAAG,SAAS,KAAK,IAAI,IAAI,WAAW,CAAC;AAAA,MAC5E,MAAM,WAAW,SAAS,KAAK,MAAM,GAAG,SAAS,MAAM,IAAI,IAAI,aAAa,CAAC;AAAA,MAC7E,OAAO,UAAU,SAAS;AAAA,MAC1B,QAAQ,UAAU,UAAU;AAAA,MAC5B,UAAU;AAAA,MACV,GAAG,UAAU,KAAK;AAAA,MAAG,GAAG,UAAU,KAAK;AAAA,MACvC,QAAQ,UAAU,UAAU;AAAA,MAAG,QAAQ,UAAU,UAAU;AAAA,IAC7D,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAmB;AAAE,WAAO,MAAM,IAAI,EAAE;AAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA,EAKtD,IAAI,eAAuB;AAAE,WAAO,MAAM,IAAI,EAAE;AAAA,EAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvD,QAAsB;AAAE,WAAO,IAAI,aAAa,IAAI;AAAA,EAAG;AAAA;AAAA,EAGvD,QAAc;AACZ,UAAM,QAAQ,MAAM,IAAI;AACxB,QAAI,CAAC,MAAM,MAAO;AAClB,mBAAe,KAAK;AACpB,UAAM,QAAQ,MAAM,SAAS;AAC7B,UAAM,IAAI,MAAM,IAAI,MAAM,SAAS,MAAM,SAAS;AAClD,UAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,GAAW,GAAiB;AAAE,SAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM7D,OAAO,GAAW,GAAiB;AAAE,SAAK,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,EAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ7D,iBAAiB,KAAa,KAAa,GAAW,GAAiB;AACrE,SAAK,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,cAAc,MAAc,MAAc,MAAc,MAAc,GAAW,GAAiB;AAChG,SAAK,OAAO,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA,EAKA,YAAkB;AAChB,UAAM,QAAQ,MAAM,IAAI;AACxB,QAAI,CAAC,MAAM,SAAS,MAAM,MAAM,MAAM,QAAQ,CAAC,MAAM,EAAG;AACxD,SAAK,OAAO,GAAG,CAAC,CAAC;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAI,GAAW,GAAW,QAAgB,YAAoB,UAAkB,mBAAmB,OAAa;AAC9G,SAAK,QAAQ,GAAG,GAAG,QAAQ,QAAQ,GAAG,YAAY,UAAU,gBAAgB;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,QAAQ,GAAW,GAAW,SAAiB,SAAiB,UAAkB,YAAoB,UAAkB,mBAAmB,OAAa;AACtJ,QAAI,EAAE,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,OAAO,KAAK,OAAO,SAAS,OAAO,KAAK,OAAO,SAAS,QAAQ,KAAK,OAAO,SAAS,UAAU,KAAK,OAAO,SAAS,QAAQ,GAAI;AAClM,QAAI,UAAU,KAAK,UAAU,EAAG,OAAM,IAAI,aAAa,mCAAmC,gBAAgB;AAC1G,UAAM,MAAM,KAAK,IAAI,QAAQ,GAAG,MAAM,KAAK,IAAI,QAAQ;AACvD,UAAM,MAAkB;AAAA,MACtB,MAAM;AAAA,MAAO,IAAI;AAAA,MAAG,IAAI;AAAA,MAAG,IAAI,UAAU;AAAA,MAAK,IAAI,UAAU;AAAA,MAC5D,IAAI,CAAC,UAAU;AAAA,MAAK,IAAI,UAAU;AAAA,MAAK,YAAY,aAAa;AAAA,MAChE,OAAO,SAAS,YAAY,UAAU,gBAAgB;AAAA,IACxD;AACA,SAAK,WAAW,GAAG;AAAA,EACrB;AAAA,EAEA,WAAW,KAAuB;AAChC,UAAM,CAAC,GAAG,CAAC,IAAI,SAAS,KAAK,IAAI,UAAU;AAC3C,UAAM,MAAM,SAAS,KAAK,IAAI,aAAa,IAAI,KAAK;AACpD,QAAI,EAAE,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,IAAI,CAAC,CAAC,KAAK,OAAO,SAAS,IAAI,CAAC,CAAC,GAAI,OAAM,IAAI,WAAW,6BAA6B;AACzJ,UAAM,QAAQ,MAAM,IAAI;AACxB,mBAAe,KAAK;AACpB,QAAI,CAAC,MAAM,MAAO,QAAO,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAAA,aAChC,MAAM,MAAM,KAAK,MAAM,MAAM,EAAG,QAAO,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAChE,WAAO,OAAO,GAAG,SAAS,GAAG,CAAC;AAC9B,UAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,IAAY,IAAY,IAAY,IAAY,QAAsB;AAC1E,QAAI,EAAE,OAAO,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK,OAAO,SAAS,MAAM,GAAI;AAC5H,QAAI,SAAS,EAAG,OAAM,IAAI,aAAa,oCAAoC,gBAAgB;AAC3F,UAAM,QAAQ,MAAM,IAAI;AACxB,QAAI,CAAC,MAAM,OAAO;AAAE,WAAK,OAAO,IAAI,EAAE;AAAG;AAAA,IAAQ;AACjD,UAAM,KAAK,MAAM,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK;AACpE,UAAM,KAAK,KAAK,MAAM,IAAI,EAAE,GAAG,KAAK,KAAK,MAAM,IAAI,EAAE;AACrD,QAAI,OAAO,KAAK,OAAO,KAAK,WAAW,GAAG;AAAE,WAAK,OAAO,IAAI,EAAE;AAAG;AAAA,IAAQ;AACzE,UAAM,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK;AAC1D,UAAM,QAAQ,KAAK,KAAK,KAAK;AAC7B,QAAI,UAAU,GAAG;AAAE,WAAK,OAAO,IAAI,EAAE;AAAG;AAAA,IAAQ;AAChD,UAAM,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,EAAE,CAAC;AACvD,UAAM,WAAW,UAAU,IAAI,OAAO,KAAK,IAAI,KAAK;AACpD,UAAM,SAAS,KAAK,KAAK,UAAU,SAAS,KAAK,KAAK;AACtD,UAAM,OAAO,QAAQ,IAAI,KAAK;AAC9B,UAAM,KAAK,SAAS,KAAK,SAAS,MAAM,KAAK,SAAS,KAAK,SAAS;AACpE,UAAM,OAAO,KAAK,KAAK,UAAU,OAAO,KAAK,KAAK;AAClD,UAAM,QAAQ,KAAK,MAAM,SAAS,IAAI,SAAS,EAAE;AACjD,UAAM,MAAM,KAAK,MAAM,OAAO,IAAI,OAAO,EAAE;AAC3C,QAAI,EAAE,OAAO,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,KAAK,OAAO,SAAS,IAAI,KAAK,OAAO,SAAS,IAAI,GAAI,OAAM,IAAI,WAAW,6BAA6B;AACvJ,SAAK,WAAW;AAAA,MAAE,MAAM;AAAA,MAAO;AAAA,MAAI;AAAA,MAAI,IAAI;AAAA,MAAQ,IAAI;AAAA,MAAG,IAAI;AAAA,MAAG,IAAI;AAAA,MACnE,YAAY;AAAA,MAAO,OAAO,SAAS,OAAO,KAAK,QAAQ,CAAC;AAAA,IAAE,CAAC;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,KAAK,GAAW,GAAW,OAAe,QAAsB;AAC9D,QAAI,EAAE,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS,MAAM,GAAI;AACtG,QAAI,EAAE,OAAO,SAAS,IAAI,KAAK,KAAK,OAAO,SAAS,IAAI,MAAM,GAAI,OAAM,IAAI,WAAW,mCAAmC;AAC1H,UAAM,QAAQ,MAAM,IAAI;AACxB,mBAAe,KAAK;AACpB,WAAO,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACvB,WAAO,OAAO,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC;AAC/B,WAAO,OAAO,GAAG,CAAC,IAAI,OAAO,IAAI,MAAM,CAAC;AACxC,WAAO,OAAO,GAAG,CAAC,GAAG,IAAI,MAAM,CAAC;AAChC,WAAO,OAAO,GAAG,CAAC,CAAC;AACnB,WAAO,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AACvB,UAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAU,GAAW,GAAW,OAAe,QAC7C,QAA2D,GAAS;AACpE,QAAI,EAAE,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,KAAK,KAAK,OAAO,SAAS,MAAM,GAAI;AACtG,UAAM,OAAO,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AAClD,QAAI,CAAC,KAAK,UAAU,KAAK,SAAS,EAAG,OAAM,IAAI,WAAW,oCAAoC;AAC9F,UAAM,SAA6B,CAAC;AACpC,eAAW,UAAU,MAAM;AACzB,YAAM,KAAK,OAAO,WAAW,WAAW,SAAS,OAAO,KAAK;AAC7D,YAAM,KAAK,OAAO,WAAW,WAAW,SAAS,OAAO,KAAK;AAC7D,UAAI,EAAE,OAAO,SAAS,EAAE,KAAK,OAAO,SAAS,EAAE,GAAI;AACnD,UAAI,KAAK,KAAK,KAAK,EAAG,OAAM,IAAI,WAAW,oCAAoC;AAC/E,aAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AAAA,IACtB;AACA,UAAM,UAAU,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,OAAO,CAAC,KAAK,OAAO,CAAC,CAAC;AAC/G,UAAM,IAAI,KAAK,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI,MAAM;AAC9C,UAAM,QAAQ,CAAC,QAAgB,QAAgB,QAAQ,IAAI,IAAI,SAAS;AACxE,UAAM,QAAQ,KAAK;AAAA,MAAI;AAAA,MAAG,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,MAAG,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,MACvG,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,MAAG,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC;AAAA,IAAC;AAClF,UAAM,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,OAAO,KAAK,KAAK,CAAC;AAC3E,UAAM,OAAO,IAAI,aAAa;AAC9B,SAAK,OAAO,GAAG,CAAC,GAAG,CAAC;AACpB,SAAK,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC;AACxB,SAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;AAC/D,SAAK,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;AACxB,SAAK,QAAQ,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,KAAK,CAAC;AAClE,SAAK,OAAO,GAAG,CAAC,GAAG,CAAC;AACpB,SAAK,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,KAAK,GAAG,KAAK,EAAE;AACpE,SAAK,OAAO,GAAG,GAAG,CAAC,CAAC;AACpB,SAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,KAAK,IAAI,KAAK,KAAK,GAAG;AAClE,SAAK,UAAU;AAEf,SAAK,OAAO,QAAQ,IAAI,IAAI,GAAG,SAAS,IAAI,IAAI,CAAC;AACjD,SAAK,UAAU,EAAE,GAAG,QAAQ,IAAI,KAAK,GAAG,GAAG,SAAS,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;AAC5E,SAAK,UAAU,IAAI;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,QAAQ,OAAqB,SAA0B,CAAC,GAAS;AAC/D,QAAI,CAAC,MAAM,KAAK,EAAE,MAAO;AACzB,UAAM,aAAa,UAAU,WAAW,MAAM;AAC9C,QAAI,CAAC,WAAW,KAAM,OAAM,IAAI,UAAU,2CAA2C;AACrF,QAAI,EAAE,OAAO,SAAS,WAAW,CAAC,KAAK,OAAO,SAAS,WAAW,CAAC,KAAK,OAAO,SAAS,WAAW,CAAC,KAAK,OAAO,SAAS,WAAW,CAAC,KAAK,OAAO,SAAS,WAAW,CAAC,KAAK,OAAO,SAAS,WAAW,CAAC,GAAI;AAC3M,UAAM,OAAO,MAAM,MAAM;AACzB,SAAK,UAAU,UAAU;AACzB,UAAM,QAAQ,MAAM,IAAI;AACxB,WAAO,OAAO,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACnC,SAAK,UAAU,IAAI;AAAA,EACrB;AAAA,EAEA,UAAU,OAA2B;AACnC,UAAM,SAAS,MAAM,KAAK,GAAG,QAAQ,MAAM,IAAI;AAC/C,mBAAe,KAAK;AACpB,YAAQ,OAAO,MAAM,QAAQ,OAAO,OAAO,MAAM,SAAS,OAAO,MAAM;AACvE,UAAM,MAAM,IAAI,OAAO,MAAM,SAAS,GAAG,OAAO,KAAK,GAAG,MAAM,KAAK;AACnE,UAAM,KAAK,IAAI,OAAO,KAAK,SAAS,GAAG,OAAO,MAAM,GAAG,MAAM,MAAM;AACnE,UAAM,SAAS,OAAO;AAAO,UAAM,UAAU,OAAO;AACpD,UAAM,IAAI,OAAO;AAAG,UAAM,IAAI,OAAO;AACrC,UAAM,SAAS,OAAO;AAAQ,UAAM,SAAS,OAAO;AACpD,UAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAe,OAAe,aAAqB,WAAmC,CAAC,GAAS;AAC9F,UAAM,QAAQ,MAAM,IAAI;AACxB,QAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ,MAAM,SACzD,CAAC,OAAO,UAAU,WAAW,KAAK,cAAc,KAAK,cAAc,MAAM,QAAQ,OAAO;AACxF,YAAM,IAAI,WAAW,4BAA4B;AAAA,IACnD;AACA,UAAM,YAAY,SAAS,IAAI,cAAY,EAAE,MAAM,MAAM,QAAQ,QAAQ,IAAI,GAAG,MAAM,kBAAkB,OAAO,EAAE,EAAE;AACnH,UAAM,QAAQ,MAAM,QAAQ,cAAc,UAAU;AACpD,UAAM,YAAY,UAAU,IAAK,UAAU,CAAC,GAAG,QAAQ,MAAM,MAAM,WAAW,IAAK,MAAM,MAAM,CAAC;AAChG,QAAI,QAAQ,KAAK,cAAc,EAAG,OAAM,IAAI,UAAU,wCAAwC;AAC9F,QAAI,CAAC,eAAe,CAAC,UAAU,OAAQ;AACvC,mBAAe,KAAK;AACpB,QAAI,SAAS,GAAG,UAAU;AAC1B,aAAS,IAAI,GAAG,IAAI,OAAO,IAAK,WAAU,OAAO,MAAM,MAAM,CAAC,CAAC;AAC/D,aAAS,IAAI,OAAO,IAAI,QAAQ,aAAa,IAAK,YAAW,OAAO,MAAM,MAAM,CAAC,CAAC;AAClF,UAAM,QAAQ,UAAU,OAAO,CAAC,KAAK,YAAY,MAAM,QAAQ,KAAK,QAAQ,CAAC;AAC7E,UAAM,SAAS,MAAM,SAAS,UAAU;AACxC,YAAQ,OAAO,OAAO,MAAM;AAC5B,UAAM,MAAM,WAAW,QAAQ,UAAU,QAAQ,QAAQ,aAAa,MAAM,KAAK;AACjF,UAAM,KAAK,WAAW,SAAS,OAAO,SAAS,SAAS,MAAM,MAAM;AACpE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,YAAM,MAAM,QAAQ,CAAC,IAAI,UAAU,CAAC,EAAE;AACtC,YAAM,KAAK,IAAI,UAAU,CAAC,EAAE,MAAM,MAAM;AACxC,gBAAU,UAAU,CAAC,EAAE,KAAK;AAAA,IAC9B;AACA,UAAM,QAAQ;AAAO,UAAM,SAAS;AACpC,iBAAa,KAAK;AAClB,UAAM;AAAA,EACR;AAAA,EAEA,OAAO,MAAc,MAAsB;AACzC,QAAI,CAAC,KAAK,MAAM,OAAO,QAAQ,EAAG;AAClC,UAAM,QAAQ,MAAM,IAAI;AACxB,mBAAe,KAAK;AACpB,QAAI,CAAC,MAAM,SAAS,SAAS,GAAG;AAE9B,aAAO,OAAO,GAAG,KAAK,MAAM,GAAG,CAAC,CAAC;AACjC,UAAI,SAAS,GAAG;AACd,cAAM;AACN;AAAA,MACF;AAAA,IACF;AACA,WAAO,OAAO,MAAM,IAAI;AACxB,UAAM;AAAA,EACR;AAAA,EAEA,QAAQ,OAAuB;AAC7B,UAAM,QAAQ,MAAM,IAAI;AACxB,QAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,SAAS,MAAM,OAAO;AACjE,YAAM,IAAI,WAAW,qCAAqC;AAAA,IAC5D;AACA,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,OAAO,IAAK,WAAU,OAAO,MAAM,MAAM,CAAC,CAAC;AAC/D,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,OAA4B;AACrC,WAAO,YAAY,MAAM,IAAI,GAAG,OAAO,KAAK,QAAQ,KAAK,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,OAAe,SAA4B;AACpD,UAAM,SAAS,KAAK,QAAQ,KAAK;AACjC,UAAM,OAAO,MAAM,QAAQ,QAAQ,IAAI;AACvC,UAAM,OAAO,kBAAkB,OAAO;AACtC,QAAI,CAAC,KAAK,MAAM,OAAO,QAAQ,EAAG,OAAM,IAAI,WAAW,kCAAkC;AACzF,QAAI,UAAU,KAAK,SAAS,EAAG,OAAM,IAAI,UAAU,wCAAwC;AAC3F,UAAM,QAAQ,MAAM,IAAI;AACxB,mBAAe,KAAK;AACpB,UAAM,WAAW,OAAO,MAAM,MAAM,KAAK,CAAC;AAC1C,UAAM,SAAS,MAAM,SAAS,KAAK,SAAS;AAC5C,YAAQ,OAAO,MAAM,OAAO,MAAM;AAClC,UAAM,KAAK,WAAW,SAAS,KAAK,QAAQ,SAAS,UAAU,MAAM,MAAM;AAC3E,UAAM,KAAK,IAAI,MAAM,MAAM;AAC3B,UAAM,MAAM,KAAK,IAAI;AACrB,UAAM,SAAS;AACf,iBAAa,KAAK;AAClB,UAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,QAA+B;AACvC,UAAM,QAAQ;AACd,UAAM,aAAa,UAAU,WAAW,KAAK;AAC7C,QAAI,CAAC,WAAW,KAAM,OAAM,IAAI,UAAU,2CAA2C;AACrF,UAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI;AAC7B,QAAI,EAAE,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,KAAK,OAAO,SAAS,CAAC,IAAI;AACvI,YAAM,IAAI,WAAW,gCAAgC;AAAA,IACvD;AACA,UAAM,QAAQ,MAAM,IAAI;AACxB,QAAI,CAAC,MAAM,MAAO;AAClB,mBAAe,KAAK;AAEpB,aAAS,OAAO,GAAG,OAAO,GAAG,QAAQ;AACnC,YAAM,QAAQ,SAAS;AACvB,wBAAkB,MAAM,CAAC,MAAM,MAAM,WAAW;AAC9C,cAAM,SAAS,SAAS,IAAI,IAAI,OAAO,IAAI;AAC3C,iBAAS,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;AAClC,gBAAM,IAAI,KAAK,SAAS,CAAC,GAAG,IAAI,KAAK,SAAS,IAAI,CAAC;AACnD,gBAAM,SAAS,SAAS,KAAK,IAAI;AACjC,gBAAM,QAAQ,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI;AAC5C,gBAAM,QAAQ,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI;AAC5C,cAAI,CAAC,OAAO,SAAS,KAAK,KAAK,CAAC,OAAO,SAAS,KAAK,GAAG;AACtD,kBAAM,IAAI,WAAW,wCAAwC;AAAA,UAC/D;AACA,cAAI,OAAO;AAAE,iBAAK,SAAS,CAAC,IAAI;AAAO,iBAAK,SAAS,IAAI,CAAC,IAAI;AAAA,UAAO;AAAA,QACvE;AAAA,MACF,CAAC;AAAA,IACH;AACA,iBAAa,KAAK;AAClB,UAAM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,EAAE,OAAO,QAAQ,IAAmC;AAClD,UAAM,QAAQ,MAAM,IAAI;AACxB,UAAM,WAAW,MAAM;AACvB,QAAI,SAAS;AACb,aAAS,QAAQ,GAAG,QAAQ,MAAM,OAAO,SAAS;AAChD,UAAI,MAAM,aAAa,SAAU,OAAM,IAAI,MAAM,wCAAwC;AACzF,YAAM,QAAQ,OAAO,MAAM,MAAM,KAAK,CAAC;AACvC,YAAM,YAAY,OAAO,OAAO,MAAM;AACtC,UAAI,MAAM,aAAa,SAAU,OAAM,IAAI,MAAM,wCAAwC;AACzF,gBAAU;AAAA,IACZ;AAAA,EACF;AACF;AAEA,SAAS,YAAY,OAAgB,OAAe,QAA6B;AAC/E,QAAM,IAAI,MAAM;AAChB,UAAQ,MAAM,MAAM,KAAK,GAAG;AAAA,IAC1B,KAAK;AAAG,aAAO,EAAE,MAAM,QAAQ,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,CAAC,EAAE;AAAA,IAC9D,KAAK;AAAG,aAAO,EAAE,MAAM,QAAQ,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,SAAS,CAAC,EAAE;AAAA,IAC9D,KAAK;AAAG,aAAO,EAAE,MAAM,aAAa,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,EAAE;AAAA,IAC3G,KAAK;AAAG,aAAO,EAAE,MAAM,SAAS,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,EAAE,SAAS,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,GAAG,GAAG,EAAE,SAAS,CAAC,EAAE;AAAA,IACnJ,KAAK;AAAG,aAAO,EAAE,MAAM,OAAO,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,YAAY,EAAE,SAAS,CAAC,GAAG,OAAO,EAAE,SAAS,CAAC,EAAE;AAAA,IAC5L;AAAS,aAAO,EAAE,MAAM,QAAQ;AAAA,EAClC;AACF;AAEA,SAAS,kBAAkB,SAAgC;AACzD,QAAM,OAAO,SAAS,OAAO;AAC7B,MAAI,CAAC,KAAK,MAAM,OAAO,QAAQ,EAAG,OAAM,IAAI,WAAW,kCAAkC;AACzF,MAAI,QAAQ,SAAS,UAAU,KAAK,IAAI,QAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ,UAAU,IAAI,MAAM;AACnG,UAAM,IAAI,WAAW,kDAAkD;AAAA,EACzE;AACA,SAAO;AACT;AAEA,SAAS,YAAY,OAAgB,MAAc,MAAyB,QAAsB;AAChG,MAAI,SAAS,GAAG;AAAE,UAAM,IAAI,MAAM;AAAQ,UAAM,IAAI,MAAM;AAAQ;AAAA,EAAQ;AAC1E,MAAI,SAAS,GAAG;AACd,UAAM,QAAQ,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC;AAChD,UAAM,IAAI,KAAK,MAAM,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,IAAI,KAAK;AAC/F,UAAM,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC,IAAI,KAAK,IAAI,KAAK;AAAA,EACrG,OAAO;AACL,UAAM,IAAI,KAAK,SAAS,OAAO,IAAI,IAAI,CAAC;AAAG,UAAM,IAAI,KAAK,SAAS,OAAO,IAAI,IAAI,CAAC;AAAA,EACrF;AACA,MAAI,SAAS,GAAG;AAAE,UAAM,SAAS,MAAM;AAAG,UAAM,SAAS,MAAM;AAAA,EAAG;AACpE;AACA,SAAS,aAAa,OAAsB;AAC1C,QAAM,IAAI,MAAM,IAAI,MAAM,SAAS,MAAM,SAAS;AAClD,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,OAAO,KAAK;AACpC,gBAAY,OAAO,MAAM,MAAM,CAAC,GAAG,MAAM,MAAM,MAAM;AACrD,cAAU,OAAO,MAAM,MAAM,CAAC,CAAC;AAAA,EACjC;AACF;",
6
6
  "names": []
7
7
  }
@@ -385,28 +385,21 @@ function affineMatrix(matrix) {
385
385
  if (!matrix || typeof matrix !== "object")
386
386
  throw new TypeError("Expected a finite 2D affine matrix.");
387
387
  const value = matrix;
388
- if (value.is2D === false || ["m13", "m14", "m23", "m24", "m31", "m32", "m34", "m43"].some(
389
- (k) => value[k] !== void 0 && value[k] !== 0
390
- ) || [value.m33, value.m44].some((n) => n !== void 0 && n !== 1))
388
+ if (value.is2D === false || nonzeroMatrixValue(value.m13) || nonzeroMatrixValue(value.m14) || nonzeroMatrixValue(value.m23) || nonzeroMatrixValue(value.m24) || nonzeroMatrixValue(value.m31) || nonzeroMatrixValue(value.m32) || nonzeroMatrixValue(value.m34) || nonzeroMatrixValue(value.m43) || value.m33 !== void 0 && value.m33 !== 1 || value.m44 !== void 0 && value.m44 !== 1)
391
389
  throw new RangeError("Expected a finite 2D affine matrix.");
392
- const pairs = [
393
- ["a", "m11", 1],
394
- ["b", "m12", 0],
395
- ["c", "m21", 0],
396
- ["d", "m22", 1],
397
- ["e", "m41", 0],
398
- ["f", "m42", 0]
399
- ];
400
- const result = {};
401
- for (const [key, alias, fallback] of pairs) {
402
- const a = value[key], b = value[alias];
403
- if (a !== void 0 && b !== void 0 && a !== b)
404
- throw new TypeError("Conflicting affine matrix aliases.");
405
- result[key] = coordinate(
406
- a === void 0 ? b === void 0 ? fallback : b : a
407
- );
408
- }
409
- return result;
390
+ return {
391
+ a: affineValue(value.a, value.m11, 1),
392
+ b: affineValue(value.b, value.m12, 0),
393
+ c: affineValue(value.c, value.m21, 0),
394
+ d: affineValue(value.d, value.m22, 1),
395
+ e: affineValue(value.e, value.m41, 0),
396
+ f: affineValue(value.f, value.m42, 0)
397
+ };
398
+ }
399
+ function affineValue(value, alias, fallback) {
400
+ if (value !== void 0 && alias !== void 0 && value !== alias)
401
+ throw new TypeError("Conflicting affine matrix aliases.");
402
+ return coordinate(value === void 0 ? alias === void 0 ? fallback : alias : value);
410
403
  }
411
404
  function applyAffine(path, m) {
412
405
  const p = (x, y, vector = false) => ({
@@ -458,6 +451,9 @@ function applyAffine(path, m) {
458
451
  result.spliceSegments(0, 0, segments);
459
452
  return result;
460
453
  }
454
+ function nonzeroMatrixValue(value) {
455
+ return value !== void 0 && value !== 0;
456
+ }
461
457
  export {
462
458
  affineTransform,
463
459
  arcBendTransform,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/geometry/path-transforms.ts"],
4
- "sourcesContent": ["import { PathGeometry } from './path-geometry.js';\nimport {\n bendSpans,\n bendSpanBounds,\n splitBendSpan,\n type BendSpan,\n} from './path-bend-spans.js';\nimport {\n absI,\n constant,\n add,\n sub,\n scale,\n mul,\n lerp,\n reciprocal,\n type Pair,\n} from './transform-math.js';\nimport {\n snapshotGuide,\n sampleGuide,\n type PathGuide,\n} from './transform-guide.js';\nimport {\n warpPath,\n type PathWarpCorners,\n type PathWarpMode,\n} from './path-warp.js';\n\n/**\n * A point in source or destination path coordinates.\n *\n * @see {@link PathTransform}\n * @see {@link PathRect}\n */\nexport interface PathPoint {\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathPoint}.\n */\n readonly x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See {@link PathPoint}\n * .\n */\n readonly y: number;\n}\n/**\n * A source rectangle with an origin and finite positive dimensions.\n *\n * @see {@link PathPoint}\n * @see {@link QuadTransformOptions}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface PathRect extends PathPoint {\n /** Horizontal extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly width: number;\n /** Vertical extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly height: number;\n}\ndeclare const transformBrand: unique symbol;\n/**\n * A constructor-created, reusable coordinate mapping for path transformation.\n *\n * @see {@link PathPoint}\n * @see {@link transformPath}\n * @see {@link composeTransforms}\n * @see {@link affineTransform}\n */\nexport interface PathTransform {\n readonly [transformBrand]: true;\n /**\n * Evaluate in ordinary source/destination coordinates. Guide approximation is bounded by\n * tolerance.\n * @param point - Source point in the transform's input coordinate system. See {@link PathPoint}.\n * @param options - Optional approximation tolerance for evaluating the mapping.\n * @returns The mapped point in the transform's output coordinate system. See {@link PathPoint}.\n */\n mapPoint(\n point: PathPoint,\n options?: {\n /** Positive maximum geometric approximation error. See {@link PathTransform}. */\n readonly tolerance?: number;\n },\n ): PathPoint;\n}\n/**\n * Accuracy and output-segment limits for applying a path transform.\n *\n * @see {@link transformPath}\n */\nexport interface TransformPathOptions {\n /** Positive maximum geometric approximation error. See {@link TransformPathOptions}. */\n readonly tolerance: number;\n /** Upper bound on the number of output path segments. See {@link TransformPathOptions}. */\n readonly maxSegments?: number;\n}\n/**\n * The four destination corners used by a quadrilateral path transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadCorners = PathWarpCorners;\n/**\n * Selects bilinear or perspective interpolation for a quadrilateral transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadMode = PathWarpMode;\n/**\n * Source rectangle, destination corners, and interpolation mode for a quadrilateral transform.\n *\n * @see {@link PathRect}\n * @see {@link PathQuadCorners}\n * @see {@link PathQuadMode}\n * @see {@link quadTransform}\n */\nexport interface QuadTransformOptions {\n /** Source rectangle mapped to the destination quadrilateral. See {@link PathRect}. */\n readonly source: PathRect;\n /** Destination corners into which the source rectangle maps. See {@link PathQuadCorners}. */\n readonly destination: PathQuadCorners;\n /** Selects the supported mapping, placement, or result policy. See {@link PathQuadMode}. */\n readonly mode?: PathQuadMode;\n}\n/**\n * A guide path positioned at a normalized station across an envelope.\n *\n * @see {@link PathGuide}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface EnvelopeGuide {\n /** Normalized station position. See {@link EnvelopeGuide}. */\n readonly at: number;\n /** Path geometry used by this operation. See {@link PathGuide}. */\n readonly path: PathGuide;\n}\n/**\n * Source rectangle and either a top/bottom pair or ordered envelope guides.\n *\n * @see {@link PathRect}\n * @see {@link PathGuide}\n * @see {@link EnvelopeGuide}\n * @see {@link envelopeTransform}\n */\nexport type EnvelopeTransformOptions = {\n /** Source rectangle mapped between the envelope guides. See {@link PathRect}. */\n readonly source: PathRect;\n /** Interpolation between successive guide paths; only linear interpolation is supported. See {@link EnvelopeTransformOptions}. */\n readonly interpolation?: 'linear';\n} & (\n | {\n /** Top edge value or top envelope guide. See {@link PathGuide}. */\n readonly top: PathGuide;\n /** Bottom edge value or bottom envelope guide. See {@link PathGuide}. */\n readonly bottom: PathGuide;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly guides?: never;\n }\n | {\n /**\n * Ordered guide paths defining the envelope from its first to last station. See\n * {@link EnvelopeGuide}.\n */\n readonly guides: readonly EnvelopeGuide[];\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly top?: never;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly bottom?: never;\n }\n);\nexport type {\n PathGuide,\n PathGuideOptions,\n PathGuideStation,\n} from './transform-guide.js';\n\nexport interface Stage {\n apply?(path: PathGeometry, options: TransformPathOptions): PathGeometry;\n evaluate(input: Pair): Pair;\n error(input: Pair): number;\n domain?(point: Pair, margin: number): boolean;\n affine?: Affine;\n}\nexport type Factory = (accuracy: number) => Stage;\nconst definitions = new WeakMap<PathTransform, readonly Factory[]>();\nconst MAX_WORK = 2_000_000;\nexport const coordinate = (value: number, label = 'coordinate') => {\n if (typeof value !== 'number')\n throw new TypeError(`${label} must be a number.`);\n if (!Number.isFinite(value)) throw new RangeError(`${label} must be finite.`);\n return value;\n};\nexport const positive = (value: number, label: string) => {\n coordinate(value, label);\n if (value <= 0) throw new RangeError(`${label} must be positive.`);\n return value;\n};\nexport function rectangle(input: PathRect): PathRect {\n return {\n x: coordinate(input?.x),\n y: coordinate(input?.y),\n width: positive(input?.width, 'source.width'),\n height: positive(input?.height, 'source.height'),\n };\n}\nexport const normalize = (input: Pair, r: PathRect): Pair => [\n scale(sub(input[0], constant(r.x)), 1 / r.width),\n scale(sub(input[1], constant(r.y)), 1 / r.height),\n];\nexport function make(factories: readonly Factory[]): PathTransform {\n // One cached preparation only; drag sessions cannot grow a tolerance cache indefinitely.\n let cachedAccuracy = NaN,\n cached: readonly Stage[] = [];\n const prepare = (accuracy: number) => {\n if (accuracy !== cachedAccuracy) {\n cached = factories.map((f) => f(accuracy));\n cachedAccuracy = accuracy;\n }\n return cached;\n };\n const value = Object.freeze({\n mapPoint(point: PathPoint, options: { tolerance?: number } = {}) {\n const tolerance = positive(options.tolerance ?? 0.0001, 'tolerance');\n const input: Pair = [\n constant(coordinate(point?.x)),\n constant(coordinate(point?.y)),\n ];\n for (\n let accuracy = tolerance / 16, attempt = 0;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const result = evaluate(prepare(accuracy), input);\n const x = result.value[0].v[0],\n y = result.value[1].v[0];\n if (!result.domain)\n throw new RangeError(\n 'Point lies outside a transformation source rectangle.',\n );\n if (result.error + roundoff(result.value) <= tolerance)\n return { x: coordinate(x), y: coordinate(y) };\n }\n throw new RangeError(\n 'Cannot certify point accuracy at available precision.',\n );\n },\n }) as PathTransform;\n definitions.set(value, factories);\n return value;\n}\nfunction definition(value: PathTransform): readonly Factory[] {\n const result = definitions.get(value);\n if (!result)\n throw new TypeError('Expected a constructor-created PathTransform.');\n return result;\n}\n/**\n * Apply mappings in the order written. Empty composition is identity.\n *\n * @param transforms - Point mappings in the order they should be applied. See\n * {@link PathTransform} .\n * @returns One mapping that applies each supplied transform in order. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function composeTransforms(\n ...transforms: readonly PathTransform[]\n): PathTransform {\n return make(transforms.flatMap((t) => [...definition(t)]));\n}\n/**\n * Creates a reusable 2D affine mapping; an omitted matrix produces identity.\n *\n * @param matrix - Affine matrix coefficients; omitted coefficients use the identity matrix.\n * @returns A point mapping applying the matrix. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function affineTransform(matrix: DOMMatrix2DInit = {}): PathTransform {\n const m = affineMatrix(matrix);\n return make([\n () => ({\n affine: m,\n error: () => 0,\n evaluate: ([x, y]) => [\n add(add(scale(x, m.a), scale(y, m.c)), constant(m.e)),\n add(add(scale(x, m.b), scale(y, m.d)), constant(m.f)),\n ],\n }),\n ]);\n}\n/**\n * Maps a source rectangle into four destination corners using bilinear or perspective\n * interpolation.\n *\n * @param options - Source rectangle and destination corner positions. See\n * {@link QuadTransformOptions} .\n * @returns A point mapping from the source rectangle to the destination quadrilateral. See\n * {@link PathTransform} .\n *\n * @see {@link QuadTransformOptions}\n * @see {@link PathTransform}\n */\nexport function quadTransform(options: QuadTransformOptions): PathTransform {\n const source = rectangle(options.source),\n mode = options.mode === undefined ? 'bilinear' : options.mode;\n const names = ['topLeft', 'topRight', 'bottomLeft', 'bottomRight'] as const;\n const corners = names.map((n) => ({\n x: coordinate(options.destination?.[n]?.x),\n y: coordinate(options.destination?.[n]?.y),\n }));\n const destination = Object.fromEntries(\n names.map((n, i) => [n, corners[i]]),\n ) as unknown as PathWarpCorners;\n // Reuse the existing convexity/pole validation, including empty geometry validation.\n warpPath(new PathGeometry(), { source, destination, mode, tolerance: 1 });\n const [a, b, c, d] = corners;\n const dx1 = b.x - d.x,\n dx2 = c.x - d.x,\n dx3 = a.x - b.x - c.x + d.x;\n const dy1 = b.y - d.y,\n dy2 = c.y - d.y,\n dy3 = a.y - b.y - c.y + d.y;\n const det = dx1 * dy2 - dx2 * dy1;\n const g = mode === 'perspective' ? (dx3 * dy2 - dx2 * dy3) / det : 0;\n const h = mode === 'perspective' ? (dx1 * dy3 - dx3 * dy1) / det : 0;\n return make([\n () => ({\n apply: (path, quality) =>\n warpPath(path, {\n source,\n destination,\n mode,\n tolerance: quality.tolerance,\n maxSegments: quality.maxSegments,\n }),\n error: () => 0,\n evaluate: (input) => {\n const [u, v] = normalize(input, source);\n if (mode === 'bilinear')\n return [\n lerp(\n lerp(constant(a.x), constant(b.x), u),\n lerp(constant(c.x), constant(d.x), u),\n v,\n ),\n lerp(\n lerp(constant(a.y), constant(b.y), u),\n lerp(constant(c.y), constant(d.y), u),\n v,\n ),\n ];\n const w = reciprocal(add(add(scale(u, g), scale(v, h)), constant(1)));\n return [\n mul(\n add(\n add(scale(u, b.x - a.x + g * b.x), scale(v, c.x - a.x + h * c.x)),\n constant(a.x),\n ),\n w,\n ),\n mul(\n add(\n add(scale(u, b.y - a.y + g * b.y), scale(v, c.y - a.y + h * c.y)),\n constant(a.y),\n ),\n w,\n ),\n ];\n },\n }),\n ]);\n}\n/**\n * Maps a source rectangle between ordered guide paths using linear interpolation.\n *\n * @param options - Source bounds and envelope guides defining the deformation. See\n * {@link EnvelopeTransformOptions} .\n * @returns A point mapping that deforms the source into the envelope. See {@link PathTransform}.\n *\n * @see {@link EnvelopeTransformOptions}\n * @see {@link PathTransform}\n */\nexport function envelopeTransform(\n options: EnvelopeTransformOptions,\n): PathTransform {\n const source = rectangle(options.source);\n if (options.interpolation !== undefined && options.interpolation !== 'linear')\n throw new TypeError('Unsupported envelope interpolation.');\n if (options.guides && (options.top || options.bottom))\n throw new TypeError('Specify guides or top/bottom, not both.');\n const guides = (\n options.guides ?? [\n { at: 0, path: options.top! },\n { at: 1, path: options.bottom! },\n ]\n ).map((g) => ({ at: coordinate(g.at), guide: snapshotGuide(g.path) }));\n if (\n guides.length < 2 ||\n guides[0].at !== 0 ||\n guides.at(-1)!.at !== 1 ||\n guides.some((g, i) => i > 0 && g.at <= guides[i - 1].at)\n )\n throw new RangeError('Envelope guides must strictly increase from 0 to 1.');\n return make([\n (accuracy) => {\n const sampled = guides.map((g) => sampleGuide(g.guide, accuracy));\n const error = Math.max(...sampled.map((g) => g.error));\n const evaluateBand = (input: Pair, i: number): Pair => {\n const [u, v] = normalize(input, source),\n a = sampled[i].evaluate(u),\n b = sampled[i + 1].evaluate(u);\n const t = scale(\n sub(v, constant(guides[i].at)),\n 1 / (guides[i + 1].at - guides[i].at),\n );\n return [lerp(a[0], b[0], t), lerp(a[1], b[1], t)];\n };\n return {\n error: () => error,\n domain: (input, margin) =>\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin,\n evaluate: (input) => {\n const v0 = (input[1].v[0] - source.y) / source.height,\n v1 = (input[1].v[1] - source.y) / source.height;\n let first = 0;\n while (first < guides.length - 2 && guides[first + 1].at <= v0)\n first++;\n let last = first;\n while (last < guides.length - 2 && guides[last + 1].at < v1) last++;\n if (first === last) return evaluateBand(input, first);\n const outputs: Pair[] = [];\n for (let i = first; i <= last; i++) {\n const y = {\n ...input[1],\n v: [\n Math.max(\n input[1].v[0],\n source.y + guides[i].at * source.height,\n ),\n Math.min(\n input[1].v[1],\n source.y + guides[i + 1].at * source.height,\n ),\n ] as const,\n };\n outputs.push(evaluateBand([input[0], y], i));\n }\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n },\n };\n },\n ]);\n}\nfunction roundoff(pair: Pair): number {\n return Number.EPSILON * 512 * Math.max(1, ...pair.map((p) => absI(p.v)));\n}\nfunction evaluate(\n stages: readonly Stage[],\n input: Pair,\n): { value: Pair; error: number; domain: boolean } {\n let value = input,\n error = 0,\n domain = true;\n for (const stage of stages) {\n // Bound propagation of guide approximation through every later map via its Jacobian.\n if (error > 0) {\n const box = value.map((p) => ({\n v: [p.v[0] - error, p.v[1] + error] as const,\n d: [0, 0] as const,\n dd: [0, 0] as const,\n })) as unknown as Pair;\n const dx = stage.evaluate([{ ...box[0], d: [1, 1] }, box[1]]);\n const dy = stage.evaluate([box[0], { ...box[1], d: [1, 1] }]);\n error *= Math.hypot(\n absI(dx[0].d),\n absI(dx[1].d),\n absI(dy[0].d),\n absI(dy[1].d),\n );\n }\n domain &&= stage.domain?.(value, roundoff(value)) ?? true;\n error += stage.error(value);\n value = stage.evaluate(value);\n }\n return { value, error, domain };\n}\n/**\n * Return independent geometry. Nonlinear mappings approximate the final composed curve once.\n *\n * @param path - Source geometry; it is not modified. See {@link PathGeometry}.\n * @param transform - Point mapping to apply to the source. See {@link PathTransform}.\n * @param options - Approximation tolerance and work limits for transformed curves. See\n * {@link TransformPathOptions} .\n * @returns Independent geometry containing the transformed path. See {@link PathGeometry}.\n *\n * @see {@link PathGeometry}\n * @see {@link PathTransform}\n * @see {@link TransformPathOptions}\n */\nexport function transformPath(\n path: PathGeometry,\n transform: PathTransform,\n options: TransformPathOptions,\n): PathGeometry {\n if (!(path instanceof PathGeometry))\n throw new TypeError('transformPath requires PathGeometry.');\n const factories = definition(transform),\n tolerance = positive(options?.tolerance, 'tolerance');\n const maxSegments = positive(\n options.maxSegments === undefined ? 1_000_000 : options.maxSegments,\n 'maxSegments',\n );\n if (!Number.isSafeInteger(maxSegments))\n throw new RangeError('maxSegments must be a safe integer.');\n let work = 0;\n for (\n let attempt = 0, accuracy = tolerance / 32;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const stages = factories.map((f) => f(accuracy));\n if (stages.length === 1 && stages[0].apply)\n return stages[0].apply(path, options);\n if (stages.every((s) => s.affine)) {\n if (path.segmentCount > maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n let result = path.clone();\n for (const s of stages) result = applyAffine(result, s.affine!);\n return result;\n }\n const output = new PathGeometry();\n let retry = false;\n const reserve = () => {\n if (output.segmentCount >= maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n };\n for (const item of bendSpans(path)) {\n if (item.type === 'close') {\n reserve();\n output.closePath();\n continue;\n }\n if (item.type === 'move') {\n const r = evaluate(stages, [\n constant(item.point[0]),\n constant(item.point[1]),\n ]);\n if (!r.domain)\n throw new RangeError(\n 'Path lies outside a transformation source rectangle.',\n );\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n if (r.error + roundoff(r.value) > tolerance)\n throw new RangeError('Cannot certify transform precision.');\n reserve();\n output.moveTo(coordinate(r.value[0].v[0]), coordinate(r.value[1].v[0]));\n continue;\n }\n const stack: { span: BendSpan; depth: number }[] = [\n { span: item.span, depth: 0 },\n ];\n while (stack.length) {\n if (++work > MAX_WORK)\n throw new RangeError('transformPath exceeded its work limit.');\n const { span, depth } = stack.pop()!,\n b = bendSpanBounds(span);\n const r = evaluate(stages, [\n { v: [b.xmin, b.xmax], d: [-b.dx, b.dx], dd: [-b.ddx, b.ddx] },\n { v: [b.ymin, b.ymax], d: [-b.dy, b.dy], dd: [-b.ddy, b.ddy] },\n ]);\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n const second = Math.hypot(absI(r.value[0].dd), absI(r.value[1].dd)) / 8;\n // A Lipschitz bound also covers piecewise-smooth guides and crossed cell boundaries.\n const first = Math.hypot(absI(r.value[0].d), absI(r.value[1].d)) / 2;\n const bound = Math.min(second, first) + 2 * r.error + roundoff(r.value);\n if (r.domain && bound <= tolerance) {\n const end =\n 'points' in span\n ? span.points.at(-1)!\n : [\n span.arc.cx +\n span.arc.ux *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vx *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n span.arc.cy +\n span.arc.uy *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vy *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n ];\n const p = evaluate(stages, [constant(end[0]), constant(end[1])]);\n reserve();\n output.lineTo(\n coordinate(p.value[0].v[0]),\n coordinate(p.value[1].v[0]),\n );\n } else {\n if (depth >= 52)\n throw new RangeError(\n 'Cannot certify transform tolerance or source domain.',\n );\n const [left, right] = splitBendSpan(span);\n stack.push(\n { span: right, depth: depth + 1 },\n { span: left, depth: depth + 1 },\n );\n }\n }\n if (retry) break;\n }\n if (!retry) return output;\n }\n throw new RangeError('Cannot certify composed guide accuracy.');\n}\n\n/** @internal Merge cell enclosures; derivatives may jump at the shared edge. */\nexport function mergePairs(outputs: readonly Pair[]): Pair {\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n}\nexport function sourceDomain(\n input: Pair,\n source: PathRect,\n margin: number,\n): boolean {\n return (\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin\n );\n}\nexport { meshTransform, type MeshTransformOptions } from './transform-mesh.js';\nexport {\n arcBendTransform,\n pathBendTransform,\n type ArcBendTransformOptions,\n type PathBendTransformOptions,\n type BendTransformOptions,\n} from './transform-bend.js';\n\ninterface Affine {\n readonly a: number;\n readonly b: number;\n readonly c: number;\n readonly d: number;\n readonly e: number;\n readonly f: number;\n}\nfunction affineMatrix(matrix: DOMMatrix2DInit): Affine {\n if (!matrix || typeof matrix !== 'object')\n throw new TypeError('Expected a finite 2D affine matrix.');\n const value = matrix as DOMMatrixInit;\n if (\n value.is2D === false ||\n ['m13', 'm14', 'm23', 'm24', 'm31', 'm32', 'm34', 'm43'].some(\n (k) =>\n value[k as keyof DOMMatrixInit] !== undefined &&\n value[k as keyof DOMMatrixInit] !== 0,\n ) ||\n [value.m33, value.m44].some((n) => n !== undefined && n !== 1)\n )\n throw new RangeError('Expected a finite 2D affine matrix.');\n const pairs = [\n ['a', 'm11', 1],\n ['b', 'm12', 0],\n ['c', 'm21', 0],\n ['d', 'm22', 1],\n ['e', 'm41', 0],\n ['f', 'm42', 0],\n ] as const;\n const result = {} as Record<string, number>;\n for (const [key, alias, fallback] of pairs) {\n const a = value[key],\n b = value[alias];\n if (a !== undefined && b !== undefined && a !== b)\n throw new TypeError('Conflicting affine matrix aliases.');\n result[key] = coordinate(\n a === undefined ? (b === undefined ? fallback : b) : a,\n );\n }\n return result as unknown as Affine;\n}\nfunction applyAffine(path: PathGeometry, m: Affine): PathGeometry {\n const p = (x: number, y: number, vector = false) => ({\n x: coordinate(m.a * x + m.c * y + (vector ? 0 : m.e)),\n y: coordinate(m.b * x + m.d * y + (vector ? 0 : m.f)),\n });\n const segments = Array.from(path, (segment) => {\n switch (segment.type) {\n case 'close':\n return segment;\n case 'move':\n case 'line':\n return { ...segment, ...p(segment.x, segment.y) };\n case 'quadratic': {\n const control = p(segment.cpx, segment.cpy);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cpx: control.x,\n cpy: control.y,\n };\n }\n case 'cubic': {\n const a = p(segment.cp1x, segment.cp1y),\n b = p(segment.cp2x, segment.cp2y);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cp1x: a.x,\n cp1y: a.y,\n cp2x: b.x,\n cp2y: b.y,\n };\n }\n case 'arc': {\n const center = p(segment.cx, segment.cy),\n u = p(segment.ux, segment.uy, true),\n v = p(segment.vx, segment.vy, true);\n return {\n ...segment,\n cx: center.x,\n cy: center.y,\n ux: u.x,\n uy: u.y,\n vx: v.x,\n vy: v.y,\n };\n }\n }\n });\n const result = new PathGeometry();\n result.spliceSegments(0, 0, segments);\n return result;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { PathGeometry } from './path-geometry.js';\nimport {\n bendSpans,\n bendSpanBounds,\n splitBendSpan,\n type BendSpan,\n} from './path-bend-spans.js';\nimport {\n absI,\n constant,\n add,\n sub,\n scale,\n mul,\n lerp,\n reciprocal,\n type Pair,\n} from './transform-math.js';\nimport {\n snapshotGuide,\n sampleGuide,\n type PathGuide,\n} from './transform-guide.js';\nimport {\n warpPath,\n type PathWarpCorners,\n type PathWarpMode,\n} from './path-warp.js';\n\n/**\n * A point in source or destination path coordinates.\n *\n * @see {@link PathTransform}\n * @see {@link PathRect}\n */\nexport interface PathPoint {\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathPoint}.\n */\n readonly x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See {@link PathPoint}\n * .\n */\n readonly y: number;\n}\n/**\n * A source rectangle with an origin and finite positive dimensions.\n *\n * @see {@link PathPoint}\n * @see {@link QuadTransformOptions}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface PathRect extends PathPoint {\n /** Horizontal extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly width: number;\n /** Vertical extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly height: number;\n}\ndeclare const transformBrand: unique symbol;\n/**\n * A constructor-created, reusable coordinate mapping for path transformation.\n *\n * @see {@link PathPoint}\n * @see {@link transformPath}\n * @see {@link composeTransforms}\n * @see {@link affineTransform}\n */\nexport interface PathTransform {\n readonly [transformBrand]: true;\n /**\n * Evaluate in ordinary source/destination coordinates. Guide approximation is bounded by\n * tolerance.\n * @param point - Source point in the transform's input coordinate system. See {@link PathPoint}.\n * @param options - Optional approximation tolerance for evaluating the mapping.\n * @returns The mapped point in the transform's output coordinate system. See {@link PathPoint}.\n */\n mapPoint(\n point: PathPoint,\n options?: {\n /** Positive maximum geometric approximation error. See {@link PathTransform}. */\n readonly tolerance?: number;\n },\n ): PathPoint;\n}\n/**\n * Accuracy and output-segment limits for applying a path transform.\n *\n * @see {@link transformPath}\n */\nexport interface TransformPathOptions {\n /** Positive maximum geometric approximation error. See {@link TransformPathOptions}. */\n readonly tolerance: number;\n /** Upper bound on the number of output path segments. See {@link TransformPathOptions}. */\n readonly maxSegments?: number;\n}\n/**\n * The four destination corners used by a quadrilateral path transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadCorners = PathWarpCorners;\n/**\n * Selects bilinear or perspective interpolation for a quadrilateral transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadMode = PathWarpMode;\n/**\n * Source rectangle, destination corners, and interpolation mode for a quadrilateral transform.\n *\n * @see {@link PathRect}\n * @see {@link PathQuadCorners}\n * @see {@link PathQuadMode}\n * @see {@link quadTransform}\n */\nexport interface QuadTransformOptions {\n /** Source rectangle mapped to the destination quadrilateral. See {@link PathRect}. */\n readonly source: PathRect;\n /** Destination corners into which the source rectangle maps. See {@link PathQuadCorners}. */\n readonly destination: PathQuadCorners;\n /** Selects the supported mapping, placement, or result policy. See {@link PathQuadMode}. */\n readonly mode?: PathQuadMode;\n}\n/**\n * A guide path positioned at a normalized station across an envelope.\n *\n * @see {@link PathGuide}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface EnvelopeGuide {\n /** Normalized station position. See {@link EnvelopeGuide}. */\n readonly at: number;\n /** Path geometry used by this operation. See {@link PathGuide}. */\n readonly path: PathGuide;\n}\n/**\n * Source rectangle and either a top/bottom pair or ordered envelope guides.\n *\n * @see {@link PathRect}\n * @see {@link PathGuide}\n * @see {@link EnvelopeGuide}\n * @see {@link envelopeTransform}\n */\nexport type EnvelopeTransformOptions = {\n /** Source rectangle mapped between the envelope guides. See {@link PathRect}. */\n readonly source: PathRect;\n /** Interpolation between successive guide paths; only linear interpolation is supported. See {@link EnvelopeTransformOptions}. */\n readonly interpolation?: 'linear';\n} & (\n | {\n /** Top edge value or top envelope guide. See {@link PathGuide}. */\n readonly top: PathGuide;\n /** Bottom edge value or bottom envelope guide. See {@link PathGuide}. */\n readonly bottom: PathGuide;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly guides?: never;\n }\n | {\n /**\n * Ordered guide paths defining the envelope from its first to last station. See\n * {@link EnvelopeGuide}.\n */\n readonly guides: readonly EnvelopeGuide[];\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly top?: never;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly bottom?: never;\n }\n);\nexport type {\n PathGuide,\n PathGuideOptions,\n PathGuideStation,\n} from './transform-guide.js';\n\nexport interface Stage {\n apply?(path: PathGeometry, options: TransformPathOptions): PathGeometry;\n evaluate(input: Pair): Pair;\n error(input: Pair): number;\n domain?(point: Pair, margin: number): boolean;\n affine?: Affine;\n}\nexport type Factory = (accuracy: number) => Stage;\nconst definitions = new WeakMap<PathTransform, readonly Factory[]>();\nconst MAX_WORK = 2_000_000;\nexport const coordinate = (value: number, label = 'coordinate') => {\n if (typeof value !== 'number')\n throw new TypeError(`${label} must be a number.`);\n if (!Number.isFinite(value)) throw new RangeError(`${label} must be finite.`);\n return value;\n};\nexport const positive = (value: number, label: string) => {\n coordinate(value, label);\n if (value <= 0) throw new RangeError(`${label} must be positive.`);\n return value;\n};\nexport function rectangle(input: PathRect): PathRect {\n return {\n x: coordinate(input?.x),\n y: coordinate(input?.y),\n width: positive(input?.width, 'source.width'),\n height: positive(input?.height, 'source.height'),\n };\n}\nexport const normalize = (input: Pair, r: PathRect): Pair => [\n scale(sub(input[0], constant(r.x)), 1 / r.width),\n scale(sub(input[1], constant(r.y)), 1 / r.height),\n];\nexport function make(factories: readonly Factory[]): PathTransform {\n // One cached preparation only; drag sessions cannot grow a tolerance cache indefinitely.\n let cachedAccuracy = NaN,\n cached: readonly Stage[] = [];\n const prepare = (accuracy: number) => {\n if (accuracy !== cachedAccuracy) {\n cached = factories.map((f) => f(accuracy));\n cachedAccuracy = accuracy;\n }\n return cached;\n };\n const value = Object.freeze({\n mapPoint(point: PathPoint, options: { tolerance?: number } = {}) {\n const tolerance = positive(options.tolerance ?? 0.0001, 'tolerance');\n const input: Pair = [\n constant(coordinate(point?.x)),\n constant(coordinate(point?.y)),\n ];\n for (\n let accuracy = tolerance / 16, attempt = 0;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const result = evaluate(prepare(accuracy), input);\n const x = result.value[0].v[0],\n y = result.value[1].v[0];\n if (!result.domain)\n throw new RangeError(\n 'Point lies outside a transformation source rectangle.',\n );\n if (result.error + roundoff(result.value) <= tolerance)\n return { x: coordinate(x), y: coordinate(y) };\n }\n throw new RangeError(\n 'Cannot certify point accuracy at available precision.',\n );\n },\n }) as PathTransform;\n definitions.set(value, factories);\n return value;\n}\nfunction definition(value: PathTransform): readonly Factory[] {\n const result = definitions.get(value);\n if (!result)\n throw new TypeError('Expected a constructor-created PathTransform.');\n return result;\n}\n/**\n * Apply mappings in the order written. Empty composition is identity.\n *\n * @param transforms - Point mappings in the order they should be applied. See\n * {@link PathTransform} .\n * @returns One mapping that applies each supplied transform in order. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function composeTransforms(\n ...transforms: readonly PathTransform[]\n): PathTransform {\n return make(transforms.flatMap((t) => [...definition(t)]));\n}\n/**\n * Creates a reusable 2D affine mapping; an omitted matrix produces identity.\n *\n * @param matrix - Affine matrix coefficients; omitted coefficients use the identity matrix.\n * @returns A point mapping applying the matrix. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function affineTransform(matrix: DOMMatrix2DInit = {}): PathTransform {\n const m = affineMatrix(matrix);\n return make([\n () => ({\n affine: m,\n error: () => 0,\n evaluate: ([x, y]) => [\n add(add(scale(x, m.a), scale(y, m.c)), constant(m.e)),\n add(add(scale(x, m.b), scale(y, m.d)), constant(m.f)),\n ],\n }),\n ]);\n}\n/**\n * Maps a source rectangle into four destination corners using bilinear or perspective\n * interpolation.\n *\n * @param options - Source rectangle and destination corner positions. See\n * {@link QuadTransformOptions} .\n * @returns A point mapping from the source rectangle to the destination quadrilateral. See\n * {@link PathTransform} .\n *\n * @see {@link QuadTransformOptions}\n * @see {@link PathTransform}\n */\nexport function quadTransform(options: QuadTransformOptions): PathTransform {\n const source = rectangle(options.source),\n mode = options.mode === undefined ? 'bilinear' : options.mode;\n const names = ['topLeft', 'topRight', 'bottomLeft', 'bottomRight'] as const;\n const corners = names.map((n) => ({\n x: coordinate(options.destination?.[n]?.x),\n y: coordinate(options.destination?.[n]?.y),\n }));\n const destination = Object.fromEntries(\n names.map((n, i) => [n, corners[i]]),\n ) as unknown as PathWarpCorners;\n // Reuse the existing convexity/pole validation, including empty geometry validation.\n warpPath(new PathGeometry(), { source, destination, mode, tolerance: 1 });\n const [a, b, c, d] = corners;\n const dx1 = b.x - d.x,\n dx2 = c.x - d.x,\n dx3 = a.x - b.x - c.x + d.x;\n const dy1 = b.y - d.y,\n dy2 = c.y - d.y,\n dy3 = a.y - b.y - c.y + d.y;\n const det = dx1 * dy2 - dx2 * dy1;\n const g = mode === 'perspective' ? (dx3 * dy2 - dx2 * dy3) / det : 0;\n const h = mode === 'perspective' ? (dx1 * dy3 - dx3 * dy1) / det : 0;\n return make([\n () => ({\n apply: (path, quality) =>\n warpPath(path, {\n source,\n destination,\n mode,\n tolerance: quality.tolerance,\n maxSegments: quality.maxSegments,\n }),\n error: () => 0,\n evaluate: (input) => {\n const [u, v] = normalize(input, source);\n if (mode === 'bilinear')\n return [\n lerp(\n lerp(constant(a.x), constant(b.x), u),\n lerp(constant(c.x), constant(d.x), u),\n v,\n ),\n lerp(\n lerp(constant(a.y), constant(b.y), u),\n lerp(constant(c.y), constant(d.y), u),\n v,\n ),\n ];\n const w = reciprocal(add(add(scale(u, g), scale(v, h)), constant(1)));\n return [\n mul(\n add(\n add(scale(u, b.x - a.x + g * b.x), scale(v, c.x - a.x + h * c.x)),\n constant(a.x),\n ),\n w,\n ),\n mul(\n add(\n add(scale(u, b.y - a.y + g * b.y), scale(v, c.y - a.y + h * c.y)),\n constant(a.y),\n ),\n w,\n ),\n ];\n },\n }),\n ]);\n}\n/**\n * Maps a source rectangle between ordered guide paths using linear interpolation.\n *\n * @param options - Source bounds and envelope guides defining the deformation. See\n * {@link EnvelopeTransformOptions} .\n * @returns A point mapping that deforms the source into the envelope. See {@link PathTransform}.\n *\n * @see {@link EnvelopeTransformOptions}\n * @see {@link PathTransform}\n */\nexport function envelopeTransform(\n options: EnvelopeTransformOptions,\n): PathTransform {\n const source = rectangle(options.source);\n if (options.interpolation !== undefined && options.interpolation !== 'linear')\n throw new TypeError('Unsupported envelope interpolation.');\n if (options.guides && (options.top || options.bottom))\n throw new TypeError('Specify guides or top/bottom, not both.');\n const guides = (\n options.guides ?? [\n { at: 0, path: options.top! },\n { at: 1, path: options.bottom! },\n ]\n ).map((g) => ({ at: coordinate(g.at), guide: snapshotGuide(g.path) }));\n if (\n guides.length < 2 ||\n guides[0].at !== 0 ||\n guides.at(-1)!.at !== 1 ||\n guides.some((g, i) => i > 0 && g.at <= guides[i - 1].at)\n )\n throw new RangeError('Envelope guides must strictly increase from 0 to 1.');\n return make([\n (accuracy) => {\n const sampled = guides.map((g) => sampleGuide(g.guide, accuracy));\n const error = Math.max(...sampled.map((g) => g.error));\n const evaluateBand = (input: Pair, i: number): Pair => {\n const [u, v] = normalize(input, source),\n a = sampled[i].evaluate(u),\n b = sampled[i + 1].evaluate(u);\n const t = scale(\n sub(v, constant(guides[i].at)),\n 1 / (guides[i + 1].at - guides[i].at),\n );\n return [lerp(a[0], b[0], t), lerp(a[1], b[1], t)];\n };\n return {\n error: () => error,\n domain: (input, margin) =>\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin,\n evaluate: (input) => {\n const v0 = (input[1].v[0] - source.y) / source.height,\n v1 = (input[1].v[1] - source.y) / source.height;\n let first = 0;\n while (first < guides.length - 2 && guides[first + 1].at <= v0)\n first++;\n let last = first;\n while (last < guides.length - 2 && guides[last + 1].at < v1) last++;\n if (first === last) return evaluateBand(input, first);\n const outputs: Pair[] = [];\n for (let i = first; i <= last; i++) {\n const y = {\n ...input[1],\n v: [\n Math.max(\n input[1].v[0],\n source.y + guides[i].at * source.height,\n ),\n Math.min(\n input[1].v[1],\n source.y + guides[i + 1].at * source.height,\n ),\n ] as const,\n };\n outputs.push(evaluateBand([input[0], y], i));\n }\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n },\n };\n },\n ]);\n}\nfunction roundoff(pair: Pair): number {\n return Number.EPSILON * 512 * Math.max(1, ...pair.map((p) => absI(p.v)));\n}\nfunction evaluate(\n stages: readonly Stage[],\n input: Pair,\n): { value: Pair; error: number; domain: boolean } {\n let value = input,\n error = 0,\n domain = true;\n for (const stage of stages) {\n // Bound propagation of guide approximation through every later map via its Jacobian.\n if (error > 0) {\n const box = value.map((p) => ({\n v: [p.v[0] - error, p.v[1] + error] as const,\n d: [0, 0] as const,\n dd: [0, 0] as const,\n })) as unknown as Pair;\n const dx = stage.evaluate([{ ...box[0], d: [1, 1] }, box[1]]);\n const dy = stage.evaluate([box[0], { ...box[1], d: [1, 1] }]);\n error *= Math.hypot(\n absI(dx[0].d),\n absI(dx[1].d),\n absI(dy[0].d),\n absI(dy[1].d),\n );\n }\n domain &&= stage.domain?.(value, roundoff(value)) ?? true;\n error += stage.error(value);\n value = stage.evaluate(value);\n }\n return { value, error, domain };\n}\n/**\n * Return independent geometry. Nonlinear mappings approximate the final composed curve once.\n *\n * @param path - Source geometry; it is not modified. See {@link PathGeometry}.\n * @param transform - Point mapping to apply to the source. See {@link PathTransform}.\n * @param options - Approximation tolerance and work limits for transformed curves. See\n * {@link TransformPathOptions} .\n * @returns Independent geometry containing the transformed path. See {@link PathGeometry}.\n *\n * @see {@link PathGeometry}\n * @see {@link PathTransform}\n * @see {@link TransformPathOptions}\n */\nexport function transformPath(\n path: PathGeometry,\n transform: PathTransform,\n options: TransformPathOptions,\n): PathGeometry {\n if (!(path instanceof PathGeometry))\n throw new TypeError('transformPath requires PathGeometry.');\n const factories = definition(transform),\n tolerance = positive(options?.tolerance, 'tolerance');\n const maxSegments = positive(\n options.maxSegments === undefined ? 1_000_000 : options.maxSegments,\n 'maxSegments',\n );\n if (!Number.isSafeInteger(maxSegments))\n throw new RangeError('maxSegments must be a safe integer.');\n let work = 0;\n for (\n let attempt = 0, accuracy = tolerance / 32;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const stages = factories.map((f) => f(accuracy));\n if (stages.length === 1 && stages[0].apply)\n return stages[0].apply(path, options);\n if (stages.every((s) => s.affine)) {\n if (path.segmentCount > maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n let result = path.clone();\n for (const s of stages) result = applyAffine(result, s.affine!);\n return result;\n }\n const output = new PathGeometry();\n let retry = false;\n const reserve = () => {\n if (output.segmentCount >= maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n };\n for (const item of bendSpans(path)) {\n if (item.type === 'close') {\n reserve();\n output.closePath();\n continue;\n }\n if (item.type === 'move') {\n const r = evaluate(stages, [\n constant(item.point[0]),\n constant(item.point[1]),\n ]);\n if (!r.domain)\n throw new RangeError(\n 'Path lies outside a transformation source rectangle.',\n );\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n if (r.error + roundoff(r.value) > tolerance)\n throw new RangeError('Cannot certify transform precision.');\n reserve();\n output.moveTo(coordinate(r.value[0].v[0]), coordinate(r.value[1].v[0]));\n continue;\n }\n const stack: { span: BendSpan; depth: number }[] = [\n { span: item.span, depth: 0 },\n ];\n while (stack.length) {\n if (++work > MAX_WORK)\n throw new RangeError('transformPath exceeded its work limit.');\n const { span, depth } = stack.pop()!,\n b = bendSpanBounds(span);\n const r = evaluate(stages, [\n { v: [b.xmin, b.xmax], d: [-b.dx, b.dx], dd: [-b.ddx, b.ddx] },\n { v: [b.ymin, b.ymax], d: [-b.dy, b.dy], dd: [-b.ddy, b.ddy] },\n ]);\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n const second = Math.hypot(absI(r.value[0].dd), absI(r.value[1].dd)) / 8;\n // A Lipschitz bound also covers piecewise-smooth guides and crossed cell boundaries.\n const first = Math.hypot(absI(r.value[0].d), absI(r.value[1].d)) / 2;\n const bound = Math.min(second, first) + 2 * r.error + roundoff(r.value);\n if (r.domain && bound <= tolerance) {\n const end =\n 'points' in span\n ? span.points.at(-1)!\n : [\n span.arc.cx +\n span.arc.ux *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vx *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n span.arc.cy +\n span.arc.uy *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vy *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n ];\n const p = evaluate(stages, [constant(end[0]), constant(end[1])]);\n reserve();\n output.lineTo(\n coordinate(p.value[0].v[0]),\n coordinate(p.value[1].v[0]),\n );\n } else {\n if (depth >= 52)\n throw new RangeError(\n 'Cannot certify transform tolerance or source domain.',\n );\n const [left, right] = splitBendSpan(span);\n stack.push(\n { span: right, depth: depth + 1 },\n { span: left, depth: depth + 1 },\n );\n }\n }\n if (retry) break;\n }\n if (!retry) return output;\n }\n throw new RangeError('Cannot certify composed guide accuracy.');\n}\n\n/** @internal Merge cell enclosures; derivatives may jump at the shared edge. */\nexport function mergePairs(outputs: readonly Pair[]): Pair {\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n}\nexport function sourceDomain(\n input: Pair,\n source: PathRect,\n margin: number,\n): boolean {\n return (\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin\n );\n}\nexport { meshTransform, type MeshTransformOptions } from './transform-mesh.js';\nexport {\n arcBendTransform,\n pathBendTransform,\n type ArcBendTransformOptions,\n type PathBendTransformOptions,\n type BendTransformOptions,\n} from './transform-bend.js';\n\ninterface Affine {\n readonly a: number;\n readonly b: number;\n readonly c: number;\n readonly d: number;\n readonly e: number;\n readonly f: number;\n}\nfunction affineMatrix(matrix: DOMMatrix2DInit): Affine {\n if (!matrix || typeof matrix !== 'object')\n throw new TypeError('Expected a finite 2D affine matrix.');\n const value = matrix as DOMMatrixInit;\n if (\n value.is2D === false ||\n nonzeroMatrixValue(value.m13) || nonzeroMatrixValue(value.m14) ||\n nonzeroMatrixValue(value.m23) || nonzeroMatrixValue(value.m24) ||\n nonzeroMatrixValue(value.m31) || nonzeroMatrixValue(value.m32) ||\n nonzeroMatrixValue(value.m34) || nonzeroMatrixValue(value.m43) ||\n (value.m33 !== undefined && value.m33 !== 1) ||\n (value.m44 !== undefined && value.m44 !== 1)\n )\n throw new RangeError('Expected a finite 2D affine matrix.');\n return {\n a: affineValue(value.a, value.m11, 1),\n b: affineValue(value.b, value.m12, 0),\n c: affineValue(value.c, value.m21, 0),\n d: affineValue(value.d, value.m22, 1),\n e: affineValue(value.e, value.m41, 0),\n f: affineValue(value.f, value.m42, 0),\n };\n}\nfunction affineValue(value: number | undefined, alias: number | undefined, fallback: number): number {\n if (value !== undefined && alias !== undefined && value !== alias)\n throw new TypeError('Conflicting affine matrix aliases.');\n return coordinate(value === undefined ? (alias === undefined ? fallback : alias) : value);\n}\n\nfunction applyAffine(path: PathGeometry, m: Affine): PathGeometry {\n const p = (x: number, y: number, vector = false) => ({\n x: coordinate(m.a * x + m.c * y + (vector ? 0 : m.e)),\n y: coordinate(m.b * x + m.d * y + (vector ? 0 : m.f)),\n });\n const segments = Array.from(path, (segment) => {\n switch (segment.type) {\n case 'close':\n return segment;\n case 'move':\n case 'line':\n return { ...segment, ...p(segment.x, segment.y) };\n case 'quadratic': {\n const control = p(segment.cpx, segment.cpy);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cpx: control.x,\n cpy: control.y,\n };\n }\n case 'cubic': {\n const a = p(segment.cp1x, segment.cp1y),\n b = p(segment.cp2x, segment.cp2y);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cp1x: a.x,\n cp1y: a.y,\n cp2x: b.x,\n cp2y: b.y,\n };\n }\n case 'arc': {\n const center = p(segment.cx, segment.cy),\n u = p(segment.ux, segment.uy, true),\n v = p(segment.vx, segment.vy, true);\n return {\n ...segment,\n cx: center.x,\n cy: center.y,\n ux: u.x,\n uy: u.y,\n vx: v.x,\n vy: v.y,\n };\n }\n }\n });\n const result = new PathGeometry();\n result.spliceSegments(0, 0, segments);\n return result;\n}\n\nfunction nonzeroMatrixValue(value: number | undefined): boolean {\n return value !== undefined && value !== 0;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,4 @@
1
+ const homogeneousCoordinateKeys = ["x", "y", "w"];
1
2
  const choose = Array.from({ length: 8 }, (_, n) => {
2
3
  const row = [1];
3
4
  for (let i = 1; i <= n; i++) row[i] = row[i - 1] * (n - i + 1) / i;
@@ -64,7 +65,8 @@ function frame(work, index) {
64
65
  }
65
66
  function emitSpan(span, tolerance, work, emit) {
66
67
  const first = frame(work, 0);
67
- for (const key of ["x", "y", "w"]) {
68
+ for (let keyIndex = 0; keyIndex < homogeneousCoordinateKeys.length; keyIndex++) {
69
+ const key = homogeneousCoordinateKeys[keyIndex];
68
70
  first[key].length = span[key].length;
69
71
  for (let i = 0; i < span[key].length; i++) {
70
72
  const value = span[key][i];