@pibbl/core 0.0.1 → 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.
- package/README.md +1 -1
- package/THIRD_PARTY_NOTICES.txt +81 -0
- package/dist/features/machines/animation.d.ts +64 -0
- package/dist/features/machines/animation.js +55 -0
- package/dist/features/machines/animation.js.map +7 -0
- package/dist/features/machines/animation.mjs +1 -0
- package/dist/features/machines/assign.d.ts +16 -0
- package/dist/features/machines/assign.js +15 -0
- package/dist/features/machines/assign.js.map +7 -0
- package/dist/features/machines/callback.d.ts +9 -0
- package/dist/features/machines/callback.js +7 -0
- package/dist/features/machines/callback.js.map +7 -0
- package/dist/features/machines/hook.d.ts +30 -0
- package/dist/features/machines/hook.js +37 -0
- package/dist/features/machines/hook.js.map +7 -0
- package/dist/features/machines/index.d.ts +6 -0
- package/dist/features/machines/index.js +12 -0
- package/dist/features/machines/index.js.map +7 -0
- package/dist/features/machines/index.mjs +1 -0
- package/dist/features/machines/runtime.d.ts +18 -0
- package/dist/features/machines/runtime.js +363 -0
- package/dist/features/machines/runtime.js.map +7 -0
- package/dist/features/machines/types.d.ts +164 -0
- package/dist/features/physics/2d-geometry.d.ts +3 -3
- package/dist/features/physics/2d-geometry.js.map +1 -1
- package/dist/features/physics/2d-testing.d.ts +1 -1
- package/dist/features/physics/2d-testing.js +2 -2
- package/dist/features/physics/2d-testing.js.map +2 -2
- package/dist/features/physics/2d.d.ts +115 -62
- package/dist/features/physics/2d.js +59 -28
- package/dist/features/physics/2d.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/components.js +25 -21
- package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
- package/dist/features/physics/lib/2d/collision/casts.js +4 -2
- package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
- package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
- package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
- package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
- package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
- package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
- package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
- package/dist/features/physics/lib/2d/shapes.js +8 -9
- package/dist/features/physics/lib/2d/shapes.js.map +2 -2
- package/dist/features/physics/lib/2d/types.d.ts +8 -30
- package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
- package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
- package/dist/features/physics/lib/2d/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/formats/aseprite.d.ts +5 -0
- package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
- package/dist/features/sprites/index.d.ts +6 -0
- package/dist/features/sprites/loader.d.ts +25 -0
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- package/dist/features/sprites/model.d.ts +75 -0
- package/dist/features/sprites/sprite.d.ts +22 -0
- package/dist/features/textures/index.d.ts +12 -2
- package/dist/features/textures/index.js +33 -1
- package/dist/features/textures/index.js.map +2 -2
- package/dist/features/textures/lib/chemical-field.d.ts +56 -0
- package/dist/features/textures/lib/chemical-field.js +154 -0
- package/dist/features/textures/lib/chemical-field.js.map +7 -0
- package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
- package/dist/features/textures/lib/chemical-recipes.js +275 -0
- package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
- package/dist/features/textures/lib/definitions.d.ts +3 -18
- package/dist/features/textures/lib/definitions.js +17 -24
- package/dist/features/textures/lib/definitions.js.map +2 -2
- package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
- package/dist/features/textures/lib/geometric-patterns.js +305 -0
- package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
- package/dist/features/textures/lib/gray-scott.d.ts +55 -0
- package/dist/features/textures/lib/gray-scott.js +37 -0
- package/dist/features/textures/lib/gray-scott.js.map +7 -0
- package/dist/features/textures/lib/palette.js +1 -3
- package/dist/features/textures/lib/palette.js.map +2 -2
- package/dist/features/textures/lib/patterns.d.ts +123 -0
- package/dist/features/textures/lib/patterns.js +344 -0
- package/dist/features/textures/lib/patterns.js.map +7 -0
- package/dist/features/textures/lib/rain-drops.js +2 -1
- package/dist/features/textures/lib/rain-drops.js.map +2 -2
- package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
- package/dist/features/textures/lib/reaction-diffusion.js +9 -20
- package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
- package/dist/features/textures/lib/simulation.d.ts +10 -4
- package/dist/features/textures/lib/simulation.js +23 -13
- package/dist/features/textures/lib/simulation.js.map +2 -2
- package/dist/features/textures/lib/wasm/electric.js +8 -1
- package/dist/features/textures/lib/wasm/electric.js.map +2 -2
- package/dist/features/textures/lib/water-surface.js +1 -3
- package/dist/features/textures/lib/water-surface.js.map +2 -2
- package/dist/features/viz/index.d.ts +92 -5
- package/dist/features/viz/index.js +202 -4
- package/dist/features/viz/index.js.map +2 -2
- package/dist/features/viz/inspection/bar.d.ts +79 -0
- package/dist/features/viz/inspection/bar.js +49 -0
- package/dist/features/viz/inspection/bar.js.map +7 -0
- package/dist/features/viz/inspection/candle.d.ts +156 -0
- package/dist/features/viz/inspection/candle.js +120 -0
- package/dist/features/viz/inspection/candle.js.map +7 -0
- package/dist/features/viz/inspection/capture-types.d.ts +65 -0
- package/dist/features/viz/inspection/capture.d.ts +16 -0
- package/dist/features/viz/inspection/capture.js +49 -0
- package/dist/features/viz/inspection/capture.js.map +7 -0
- package/dist/features/viz/inspection/handler.d.ts +36 -0
- package/dist/features/viz/inspection/handler.js +91 -0
- package/dist/features/viz/inspection/handler.js.map +7 -0
- package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
- package/dist/features/viz/inspection/ohlc-bar.js +118 -0
- package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
- package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
- package/dist/features/viz/inspection/owned-ref.js +99 -0
- package/dist/features/viz/inspection/owned-ref.js.map +7 -0
- package/dist/features/viz/inspection/painted-point.d.ts +22 -0
- package/dist/features/viz/inspection/painted-point.js +29 -0
- package/dist/features/viz/inspection/painted-point.js.map +7 -0
- package/dist/features/viz/inspection/queries.d.ts +100 -0
- package/dist/features/viz/inspection/queries.js +192 -0
- package/dist/features/viz/inspection/queries.js.map +7 -0
- package/dist/features/viz/inspection/query-types.d.ts +177 -0
- package/dist/features/viz/inspection/volume.d.ts +104 -0
- package/dist/features/viz/inspection/volume.js +95 -0
- package/dist/features/viz/inspection/volume.js.map +7 -0
- package/dist/features/viz/inspection.d.ts +19 -0
- package/dist/features/viz/inspection.js +54 -0
- package/dist/features/viz/inspection.js.map +7 -0
- package/dist/features/viz/inspection.mjs +1 -0
- package/dist/features/viz/lib/area-series.d.ts +62 -0
- package/dist/features/viz/lib/area-series.js +120 -0
- package/dist/features/viz/lib/area-series.js.map +7 -0
- package/dist/features/viz/lib/axis-labels.d.ts +2 -0
- package/dist/features/viz/lib/axis-labels.js +41 -0
- package/dist/features/viz/lib/axis-labels.js.map +7 -0
- package/dist/features/viz/lib/axis-title.d.ts +23 -0
- package/dist/features/viz/lib/axis-title.js +24 -0
- package/dist/features/viz/lib/axis-title.js.map +7 -0
- package/dist/features/viz/lib/axis.d.ts +1 -1
- package/dist/features/viz/lib/axis.js +50 -50
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-scale.d.ts +7 -0
- package/dist/features/viz/lib/bar-scale.js +34 -0
- package/dist/features/viz/lib/bar-scale.js.map +7 -0
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +21 -5
- package/dist/features/viz/lib/bar-series.js.map +2 -2
- package/dist/features/viz/lib/baseline-series.d.ts +55 -0
- package/dist/features/viz/lib/baseline-series.js +136 -0
- package/dist/features/viz/lib/baseline-series.js.map +7 -0
- package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
- package/dist/features/viz/lib/candlestick-series.js +150 -0
- package/dist/features/viz/lib/candlestick-series.js.map +7 -0
- package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
- package/dist/features/viz/lib/censored-point-series.js +129 -0
- package/dist/features/viz/lib/censored-point-series.js.map +7 -0
- package/dist/features/viz/lib/chart-lines.d.ts +41 -0
- package/dist/features/viz/lib/chart-lines.js +32 -0
- package/dist/features/viz/lib/chart-lines.js.map +7 -0
- package/dist/features/viz/lib/color-context.d.ts +4 -0
- package/dist/features/viz/lib/color-context.js +41 -0
- package/dist/features/viz/lib/color-context.js.map +7 -0
- package/dist/features/viz/lib/color-math.d.ts +4 -0
- package/dist/features/viz/lib/color-math.js +31 -0
- package/dist/features/viz/lib/color-math.js.map +7 -0
- package/dist/features/viz/lib/color-types.d.ts +53 -0
- package/dist/features/viz/lib/curve-definition.d.ts +49 -0
- package/dist/features/viz/lib/curve-definition.js +142 -0
- package/dist/features/viz/lib/curve-definition.js.map +7 -0
- package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/diverging-color-scale.js +51 -0
- package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
- package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
- package/dist/features/viz/lib/domain-navigation.js +77 -0
- package/dist/features/viz/lib/domain-navigation.js.map +7 -0
- package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
- package/dist/features/viz/lib/editable-chart-elements.js +733 -0
- package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
- package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
- package/dist/features/viz/lib/financial-aggregation.js +116 -0
- package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
- package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
- package/dist/features/viz/lib/financial-autoscale.js +61 -0
- package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
- package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
- package/dist/features/viz/lib/financial-comparison.js +98 -0
- package/dist/features/viz/lib/financial-comparison.js.map +7 -0
- package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
- package/dist/features/viz/lib/financial-geometry.js +67 -0
- package/dist/features/viz/lib/financial-geometry.js.map +7 -0
- package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
- package/dist/features/viz/lib/financial-indicators.js +135 -0
- package/dist/features/viz/lib/financial-indicators.js.map +7 -0
- package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
- package/dist/features/viz/lib/financial-oscillators.js +265 -0
- package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
- package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
- package/dist/features/viz/lib/graph/bipartite.js +250 -0
- package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
- package/dist/features/viz/lib/graph/chord.d.ts +44 -0
- package/dist/features/viz/lib/graph/chord.js +348 -0
- package/dist/features/viz/lib/graph/chord.js.map +7 -0
- package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
- package/dist/features/viz/lib/graph/dependency.js +140 -0
- package/dist/features/viz/lib/graph/dependency.js.map +7 -0
- package/dist/features/viz/lib/graph/force.d.ts +28 -0
- package/dist/features/viz/lib/graph/force.js +580 -0
- package/dist/features/viz/lib/graph/force.js.map +7 -0
- package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
- package/dist/features/viz/lib/graph/hierarchy.js +112 -0
- package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
- package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
- package/dist/features/viz/lib/graph/icicle.js +153 -0
- package/dist/features/viz/lib/graph/icicle.js.map +7 -0
- package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
- package/dist/features/viz/lib/graph/matrix.js +243 -0
- package/dist/features/viz/lib/graph/matrix.js.map +7 -0
- package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
- package/dist/features/viz/lib/graph/neighborhood.js +281 -0
- package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
- package/dist/features/viz/lib/graph/routes.d.ts +35 -0
- package/dist/features/viz/lib/graph/routes.js +101 -0
- package/dist/features/viz/lib/graph/routes.js.map +7 -0
- package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
- package/dist/features/viz/lib/graph/sankey.js +341 -0
- package/dist/features/viz/lib/graph/sankey.js.map +7 -0
- package/dist/features/viz/lib/graph/shared.d.ts +59 -0
- package/dist/features/viz/lib/graph/shared.js +301 -0
- package/dist/features/viz/lib/graph/shared.js.map +7 -0
- package/dist/features/viz/lib/graph/tree.d.ts +11 -0
- package/dist/features/viz/lib/graph/tree.js +232 -0
- package/dist/features/viz/lib/graph/tree.js.map +7 -0
- package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
- package/dist/features/viz/lib/graph/treemap.js +227 -0
- package/dist/features/viz/lib/graph/treemap.js.map +7 -0
- package/dist/features/viz/lib/graph/types.d.ts +1097 -0
- package/dist/features/viz/lib/hover-card.js +8 -9
- package/dist/features/viz/lib/hover-card.js.map +2 -2
- package/dist/features/viz/lib/hover-data.d.ts +1 -1
- package/dist/features/viz/lib/hover-data.js +6 -3
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- package/dist/features/viz/lib/hover-types.d.ts +5 -5
- package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
- package/dist/features/viz/lib/interval-band-series.js +136 -0
- package/dist/features/viz/lib/interval-band-series.js.map +7 -0
- package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
- package/dist/features/viz/lib/interval-diamond-series.js +122 -0
- package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
- package/dist/features/viz/lib/interval-series.d.ts +79 -0
- package/dist/features/viz/lib/interval-series.js +158 -0
- package/dist/features/viz/lib/interval-series.js.map +7 -0
- package/dist/features/viz/lib/layout-pie.js +9 -13
- package/dist/features/viz/lib/layout-pie.js.map +2 -2
- package/dist/features/viz/lib/line-series.d.ts +1 -1
- package/dist/features/viz/lib/line-series.js +47 -28
- package/dist/features/viz/lib/line-series.js.map +2 -2
- package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/linear-scale-component.js +18 -0
- package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
- package/dist/features/viz/lib/linear-scale.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/log-scale-component.js +19 -0
- package/dist/features/viz/lib/log-scale-component.js.map +7 -0
- package/dist/features/viz/lib/log-scale.d.ts +2 -0
- package/dist/features/viz/lib/log-scale.js +53 -0
- package/dist/features/viz/lib/log-scale.js.map +7 -0
- package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
- package/dist/features/viz/lib/monotone-curve.js +63 -0
- package/dist/features/viz/lib/monotone-curve.js.map +7 -0
- package/dist/features/viz/lib/nearest.d.ts +9 -9
- package/dist/features/viz/lib/nearest.js.map +1 -1
- package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
- package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
- package/dist/features/viz/lib/numeric-ticks.js +54 -0
- package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
- package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
- package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
- package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
- package/dist/features/viz/lib/paired-series.d.ts +44 -0
- package/dist/features/viz/lib/paired-series.js +93 -0
- package/dist/features/viz/lib/paired-series.js.map +7 -0
- package/dist/features/viz/lib/pie-layout.js +2 -1
- package/dist/features/viz/lib/pie-layout.js.map +2 -2
- package/dist/features/viz/lib/plot-series.js +11 -6
- package/dist/features/viz/lib/plot-series.js.map +2 -2
- package/dist/features/viz/lib/plot-types.d.ts +4 -3
- package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/point-scale-component.js +19 -0
- package/dist/features/viz/lib/point-scale-component.js.map +7 -0
- package/dist/features/viz/lib/point-scale.d.ts +2 -0
- package/dist/features/viz/lib/point-scale.js +45 -0
- package/dist/features/viz/lib/point-scale.js.map +7 -0
- package/dist/features/viz/lib/point-series.d.ts +1 -1
- package/dist/features/viz/lib/point-series.js +36 -9
- package/dist/features/viz/lib/point-series.js.map +2 -2
- package/dist/features/viz/lib/point-types.d.ts +5 -2
- package/dist/features/viz/lib/reference-band.d.ts +16 -0
- package/dist/features/viz/lib/reference-band.js +30 -0
- package/dist/features/viz/lib/reference-band.js.map +7 -0
- package/dist/features/viz/lib/scale-adjust.js +9 -4
- package/dist/features/viz/lib/scale-adjust.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +5 -4
- package/dist/features/viz/lib/scale-context.js +15 -11
- package/dist/features/viz/lib/scale-context.js.map +2 -2
- package/dist/features/viz/lib/scale-provider.d.ts +2 -0
- package/dist/features/viz/lib/scale-provider.js +13 -0
- package/dist/features/viz/lib/scale-provider.js.map +7 -0
- package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
- package/dist/features/viz/lib/scale-ticks.js +64 -0
- package/dist/features/viz/lib/scale-ticks.js.map +7 -0
- package/dist/features/viz/lib/scale-view.d.ts +4 -0
- package/dist/features/viz/lib/scale-view.js +21 -0
- package/dist/features/viz/lib/scale-view.js.map +7 -0
- package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/sequential-color-scale.js +49 -0
- package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
- package/dist/features/viz/lib/series-position.d.ts +12 -0
- package/dist/features/viz/lib/series-position.js +44 -0
- package/dist/features/viz/lib/series-position.js.map +7 -0
- package/dist/features/viz/lib/step-curves.d.ts +19 -0
- package/dist/features/viz/lib/step-curves.js +53 -0
- package/dist/features/viz/lib/step-curves.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/symlog-scale-component.js +19 -0
- package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
- package/dist/features/viz/lib/symlog-scale.js +38 -0
- package/dist/features/viz/lib/symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
- package/dist/features/viz/lib/threshold-color-scale.js +59 -0
- package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
- package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
- package/dist/features/viz/lib/trading-time-mapping.js +89 -0
- package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
- package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
- package/dist/features/viz/lib/trading-time-scale.js +96 -0
- package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
- package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
- package/dist/features/viz/lib/trajectory-series.js +111 -0
- package/dist/features/viz/lib/trajectory-series.js.map +7 -0
- package/dist/features/viz/lib/types.d.ts +114 -21
- package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-bar-scale.js +9 -0
- package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
- package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-continuous-scale.js +14 -0
- package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
- package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-linear-scale.js +9 -0
- package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
- package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-log-scale.js +9 -0
- package/dist/features/viz/lib/use-log-scale.js.map +7 -0
- package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-point-scale.js +9 -0
- package/dist/features/viz/lib/use-point-scale.js.map +7 -0
- package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-symlog-scale.js +9 -0
- package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-utc-scale.js +9 -0
- package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
- package/dist/features/viz/lib/utc-labels.d.ts +12 -0
- package/dist/features/viz/lib/utc-labels.js +27 -0
- package/dist/features/viz/lib/utc-labels.js.map +7 -0
- package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/utc-scale-component.js +18 -0
- package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
- package/dist/features/viz/lib/utc-scale.d.ts +21 -0
- package/dist/features/viz/lib/utc-scale.js +124 -0
- package/dist/features/viz/lib/utc-scale.js.map +7 -0
- package/dist/features/viz/lib/volume-series.d.ts +59 -0
- package/dist/features/viz/lib/volume-series.js +117 -0
- package/dist/features/viz/lib/volume-series.js.map +7 -0
- package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
- package/dist/features/viz/lib/weighted-point-series.js +169 -0
- package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
- package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
- package/dist/filters/backdrop-contrast-gpu.js +33 -0
- package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
- package/dist/filters/backdrop-contrast.d.ts +21 -0
- package/dist/filters/backdrop-contrast.js +61 -0
- package/dist/filters/backdrop-contrast.js.map +7 -0
- package/dist/filters/displacement.js +1 -1
- package/dist/filters/displacement.js.map +2 -2
- package/dist/filters/emboss-gpu.d.ts +4 -0
- package/dist/filters/emboss-gpu.js +39 -0
- package/dist/filters/emboss-gpu.js.map +7 -0
- package/dist/filters/emboss.d.ts +32 -0
- package/dist/filters/emboss.js +104 -0
- package/dist/filters/emboss.js.map +7 -0
- package/dist/filters/filter-executor.d.ts +11 -4
- package/dist/filters/filter-executor.js +104 -49
- package/dist/filters/filter-executor.js.map +2 -2
- package/dist/filters/reflected-light.js +1 -1
- package/dist/filters/reflected-light.js.map +2 -2
- package/dist/filters/reflection-gpu.d.ts +3 -1
- package/dist/filters/reflection-gpu.js +5 -2
- package/dist/filters/reflection-gpu.js.map +2 -2
- package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
- package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
- package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
- package/dist/filters/render-emboss-boundary.d.ts +13 -0
- package/dist/filters/render-emboss-boundary.js +131 -0
- package/dist/filters/render-emboss-boundary.js.map +7 -0
- package/dist/filters.d.ts +9 -5
- package/dist/filters.js +4 -0
- package/dist/filters.js.map +2 -2
- package/dist/index.d.ts +10 -6
- package/dist/index.js +18 -2
- package/dist/index.js.map +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +2 -2
- package/dist/layout-kernel.d.ts +12 -0
- package/dist/layout-kernel.js +11 -0
- package/dist/layout-kernel.js.map +7 -0
- package/dist/layout-kernel.mjs +1 -0
- package/dist/lib/animation/definition.d.ts +5 -3
- package/dist/lib/animation/definition.js +29 -4
- package/dist/lib/animation/definition.js.map +2 -2
- package/dist/lib/animation/playback.d.ts +8 -0
- package/dist/lib/animation/playback.js +33 -11
- package/dist/lib/animation/playback.js.map +2 -2
- package/dist/lib/animation/spring.d.ts +3 -1
- package/dist/lib/animation/spring.js.map +2 -2
- package/dist/lib/animation/types.d.ts +29 -73
- package/dist/lib/backend/types.d.ts +13 -1
- package/dist/lib/backend/types.js.map +2 -2
- package/dist/lib/components/arc-geometry.js +2 -1
- package/dist/lib/components/arc-geometry.js.map +2 -2
- package/dist/lib/components/g.js +2 -0
- package/dist/lib/components/g.js.map +2 -2
- package/dist/lib/components/html-box.js +2 -1
- package/dist/lib/components/html-box.js.map +2 -2
- package/dist/lib/components/img.js +3 -3
- package/dist/lib/components/img.js.map +2 -2
- package/dist/lib/components/layer.js +98 -16
- package/dist/lib/components/layer.js.map +3 -3
- package/dist/lib/components/text.d.ts +16 -0
- package/dist/lib/components/text.js +131 -24
- package/dist/lib/components/text.js.map +2 -2
- package/dist/lib/define-primitive.d.ts +4 -2
- package/dist/lib/define-primitive.js +3 -1
- package/dist/lib/define-primitive.js.map +2 -2
- package/dist/lib/element/metadata.d.ts +9 -0
- package/dist/lib/element/metadata.js +19 -0
- package/dist/lib/element/metadata.js.map +2 -2
- package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
- package/dist/lib/element/resolve-primitive-inputs.js +17 -4
- package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
- package/dist/lib/events/event-facade.d.ts +18 -0
- package/dist/lib/events/event-facade.js +28 -2
- package/dist/lib/events/event-facade.js.map +2 -2
- package/dist/lib/events/hit-test.js +2 -1
- package/dist/lib/events/hit-test.js.map +2 -2
- package/dist/lib/events/propagation.d.ts +2 -1
- package/dist/lib/events/propagation.js +22 -16
- package/dist/lib/events/propagation.js.map +2 -2
- package/dist/lib/events/registrations.d.ts +10 -0
- package/dist/lib/events/registrations.js +160 -5
- package/dist/lib/events/registrations.js.map +2 -2
- package/dist/lib/execute-render.js +25 -1
- package/dist/lib/execute-render.js.map +2 -2
- package/dist/lib/filter/filter-region.js +3 -10
- package/dist/lib/filter/filter-region.js.map +2 -2
- package/dist/lib/focus/focus-manager.d.ts +8 -1
- package/dist/lib/focus/focus-manager.js +87 -43
- package/dist/lib/focus/focus-manager.js.map +2 -2
- package/dist/lib/focus/geometry.d.ts +2 -0
- package/dist/lib/focus/geometry.js +6 -0
- package/dist/lib/focus/geometry.js.map +2 -2
- package/dist/lib/geometry/path-bend-guide.js +1 -1
- package/dist/lib/geometry/path-bend-guide.js.map +2 -2
- package/dist/lib/geometry/path-geometry.js +12 -11
- package/dist/lib/geometry/path-geometry.js.map +2 -2
- package/dist/lib/geometry/path-transforms.js +17 -21
- package/dist/lib/geometry/path-transforms.js.map +2 -2
- package/dist/lib/geometry/path-warp-bezier.js +3 -1
- package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
- package/dist/lib/geometry/path-warp.js +1 -1
- package/dist/lib/geometry/path-warp.js.map +2 -2
- package/dist/lib/global-state.js +2 -0
- package/dist/lib/global-state.js.map +2 -2
- package/dist/lib/hooks/use-animated-value.d.ts +11 -21
- package/dist/lib/hooks/use-animated-value.js +23 -70
- package/dist/lib/hooks/use-animated-value.js.map +3 -3
- package/dist/lib/hooks/use-playback.js +1 -0
- package/dist/lib/hooks/use-playback.js.map +2 -2
- package/dist/lib/html/html-events.d.ts +32 -0
- package/dist/lib/html/html-events.js +179 -0
- package/dist/lib/html/html-events.js.map +7 -0
- package/dist/lib/html/html-service.d.ts +8 -2
- package/dist/lib/html/html-service.js +198 -65
- package/dist/lib/html/html-service.js.map +2 -2
- package/dist/lib/html/overlay-config.js +7 -6
- package/dist/lib/html/overlay-config.js.map +2 -2
- package/dist/lib/html/types.d.ts +29 -2
- package/dist/lib/layout/absolute.d.ts +11 -5
- package/dist/lib/layout/absolute.js +329 -55
- package/dist/lib/layout/absolute.js.map +3 -3
- package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
- package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
- package/dist/lib/layout/allocation-checkpoint.js +463 -0
- package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
- package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
- package/dist/lib/layout/allocation-dependencies.js +90 -0
- package/dist/lib/layout/allocation-dependencies.js.map +7 -0
- package/dist/lib/layout/allocation-revision.d.ts +13 -0
- package/dist/lib/layout/allocation-revision.js +67 -0
- package/dist/lib/layout/allocation-revision.js.map +7 -0
- package/dist/lib/layout/box-insets.d.ts +17 -0
- package/dist/lib/layout/box-insets.js +138 -0
- package/dist/lib/layout/box-insets.js.map +7 -0
- package/dist/lib/layout/box-sizing.d.ts +16 -0
- package/dist/lib/layout/box-sizing.js +77 -0
- package/dist/lib/layout/box-sizing.js.map +7 -0
- package/dist/lib/layout/box.js +42 -12
- package/dist/lib/layout/box.js.map +2 -2
- package/dist/lib/layout/canvas-measurement.d.ts +13 -0
- package/dist/lib/layout/canvas-measurement.js +57 -0
- package/dist/lib/layout/canvas-measurement.js.map +7 -0
- package/dist/lib/layout/context.d.ts +35 -6
- package/dist/lib/layout/context.js +72 -3
- package/dist/lib/layout/context.js.map +2 -2
- package/dist/lib/layout/define-layout-component.d.ts +23 -0
- package/dist/lib/layout/define-layout-component.js +84 -0
- package/dist/lib/layout/define-layout-component.js.map +7 -0
- package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
- package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
- package/dist/lib/layout/flex-baseline-mode.js +7 -0
- package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
- package/dist/lib/layout/flex.d.ts +50 -15
- package/dist/lib/layout/flex.js +2124 -195
- package/dist/lib/layout/flex.js.map +3 -3
- package/dist/lib/layout/flow.js +225 -49
- package/dist/lib/layout/flow.js.map +2 -2
- package/dist/lib/layout/geometry-publication.d.ts +53 -0
- package/dist/lib/layout/geometry-publication.js +244 -0
- package/dist/lib/layout/geometry-publication.js.map +7 -0
- package/dist/lib/layout/grid-kernel.d.ts +63 -0
- package/dist/lib/layout/grid-kernel.js +168 -0
- package/dist/lib/layout/grid-kernel.js.map +7 -0
- package/dist/lib/layout/grid.d.ts +63 -4
- package/dist/lib/layout/grid.js +767 -171
- package/dist/lib/layout/grid.js.map +3 -3
- package/dist/lib/layout/measure.d.ts +55 -3
- package/dist/lib/layout/measure.js +448 -15
- package/dist/lib/layout/measure.js.map +2 -2
- package/dist/lib/layout/overlay.js +81 -23
- package/dist/lib/layout/overlay.js.map +2 -2
- package/dist/lib/layout/participation.d.ts +27 -0
- package/dist/lib/layout/participation.js +188 -0
- package/dist/lib/layout/participation.js.map +7 -0
- package/dist/lib/layout/place-child.js +1 -1
- package/dist/lib/layout/place-child.js.map +2 -2
- package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
- package/dist/lib/layout/positioning-diagnostics.js +13 -2
- package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
- package/dist/lib/layout/prepared-root.d.ts +121 -0
- package/dist/lib/layout/prepared-root.js +360 -0
- package/dist/lib/layout/prepared-root.js.map +7 -0
- package/dist/lib/layout/standalone-kernel.d.ts +60 -0
- package/dist/lib/layout/standalone-kernel.js +722 -0
- package/dist/lib/layout/standalone-kernel.js.map +7 -0
- package/dist/lib/layout/topology.d.ts +21 -0
- package/dist/lib/layout/topology.js +113 -0
- package/dist/lib/layout/topology.js.map +7 -0
- package/dist/lib/layout/types.d.ts +5 -0
- package/dist/lib/layout/wasm/artifact.d.ts +1 -0
- package/dist/lib/layout/wasm/artifact.js +5 -0
- package/dist/lib/layout/wasm/artifact.js.map +7 -0
- package/dist/lib/layout/wasm/bytes.d.ts +1 -0
- package/dist/lib/layout/wasm/bytes.js +5 -0
- package/dist/lib/layout/wasm/bytes.js.map +7 -0
- package/dist/lib/layout/wasm/embedded.d.ts +2 -0
- package/dist/lib/layout/wasm/embedded.js +12 -0
- package/dist/lib/layout/wasm/embedded.js.map +7 -0
- package/dist/lib/layout/wasm/layout.wasm +0 -0
- package/dist/lib/layout/wasm/module.d.ts +8 -0
- package/dist/lib/layout/wasm/module.js +70 -0
- package/dist/lib/layout/wasm/module.js.map +7 -0
- package/dist/lib/layout/wasm/region.d.ts +267 -0
- package/dist/lib/layout/wasm/region.js +1018 -0
- package/dist/lib/layout/wasm/region.js.map +7 -0
- package/dist/lib/manipulation/controller.js +4 -7
- package/dist/lib/manipulation/controller.js.map +2 -2
- package/dist/lib/manipulation/frame.js +1 -1
- package/dist/lib/manipulation/frame.js.map +2 -2
- package/dist/lib/manipulation/handles.js +32 -33
- package/dist/lib/manipulation/handles.js.map +2 -2
- package/dist/lib/manipulation/solve.js +12 -10
- package/dist/lib/manipulation/solve.js.map +2 -2
- package/dist/lib/mount-pibbl.js +1 -0
- package/dist/lib/mount-pibbl.js.map +2 -2
- package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
- package/dist/lib/mount-prepared-pibbl.js +29 -0
- package/dist/lib/mount-prepared-pibbl.js.map +7 -0
- package/dist/lib/mount-request.d.ts +8 -0
- package/dist/lib/mount-request.js +41 -0
- package/dist/lib/mount-request.js.map +7 -0
- package/dist/lib/pibbl.d.ts +21 -13
- package/dist/lib/pibbl.js +18 -16
- package/dist/lib/pibbl.js.map +2 -2
- package/dist/lib/recording/recording.d.ts +43 -0
- package/dist/lib/recording/recording.js +555 -0
- package/dist/lib/recording/recording.js.map +7 -0
- package/dist/lib/recording/types.d.ts +118 -0
- package/dist/lib/recording/wasm-bytes.d.ts +1 -0
- package/dist/lib/recording/wasm-bytes.js +5 -0
- package/dist/lib/recording/wasm-bytes.js.map +7 -0
- package/dist/lib/recording/worker-source.d.ts +1 -0
- package/dist/lib/recording/worker-source.js +5 -0
- package/dist/lib/recording/worker-source.js.map +7 -0
- package/dist/lib/render-layer/controller.d.ts +9 -3
- package/dist/lib/render-layer/controller.js +259 -110
- package/dist/lib/render-layer/controller.js.map +2 -2
- package/dist/lib/render-transaction.d.ts +12 -2
- package/dist/lib/render-transaction.js +69 -1
- package/dist/lib/render-transaction.js.map +2 -2
- package/dist/lib/render.js +32 -8
- package/dist/lib/render.js.map +2 -2
- package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
- package/dist/lib/scheduler/realm-scheduler.js +55 -26
- package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
- package/dist/lib/scheduler/renderer-participant.js +1 -0
- package/dist/lib/scheduler/renderer-participant.js.map +2 -2
- package/dist/lib/series-inspection-frame.d.ts +18 -0
- package/dist/lib/series-inspection-frame.js +70 -0
- package/dist/lib/series-inspection-frame.js.map +7 -0
- package/dist/lib/signals/edge.d.ts +7 -4
- package/dist/lib/signals/edge.js +25 -3
- package/dist/lib/signals/edge.js.map +2 -2
- package/dist/lib/signals/graph.d.ts +16 -2
- package/dist/lib/signals/graph.js +54 -12
- package/dist/lib/signals/graph.js.map +2 -2
- package/dist/lib/signals/input-provision.d.ts +15 -0
- package/dist/lib/signals/input-provision.js +53 -3
- package/dist/lib/signals/input-provision.js.map +2 -2
- package/dist/lib/signals/render-consumer.d.ts +3 -0
- package/dist/lib/signals/render-consumer.js +22 -14
- package/dist/lib/signals/render-consumer.js.map +2 -2
- package/dist/lib/style/positioning.d.ts +50 -2
- package/dist/lib/style/positioning.js +28 -4
- package/dist/lib/style/positioning.js.map +2 -2
- package/dist/lib/style/resolve-built-in.d.ts +4 -3
- package/dist/lib/style/resolve-built-in.js +17 -3
- package/dist/lib/style/resolve-built-in.js.map +2 -2
- package/dist/lib/style/resolve-dispatch.d.ts +3 -0
- package/dist/lib/style/resolve-dispatch.js +77 -4
- package/dist/lib/style/resolve-dispatch.js.map +2 -2
- package/dist/lib/style/resolve-length.d.ts +2 -0
- package/dist/lib/style/resolve-length.js +13 -9
- package/dist/lib/style/resolve-length.js.map +2 -2
- package/dist/lib/style/sizing-length.d.ts +51 -0
- package/dist/lib/style/sizing-length.js +77 -0
- package/dist/lib/style/sizing-length.js.map +7 -0
- package/dist/lib/style/types.d.ts +63 -25
- package/dist/lib/surface/root-surface.js +10 -6
- package/dist/lib/surface/root-surface.js.map +2 -2
- package/dist/lib/textures/texture.js +10 -8
- package/dist/lib/textures/texture.js.map +2 -2
- package/dist/lib/transitions/capture.js +4 -1
- package/dist/lib/transitions/capture.js.map +2 -2
- package/dist/lib/transitions/embers-physics.js +17 -10
- package/dist/lib/transitions/embers-physics.js.map +2 -2
- package/dist/lib/types.d.ts +110 -1
- package/dist/sync.d.ts +16 -0
- package/dist/sync.js +13 -0
- package/dist/sync.js.map +7 -0
- package/dist/sync.mjs +1 -0
- package/package.json +43 -6
- package/dist/features/viz/lib/scale.d.ts +0 -11
- package/dist/features/viz/lib/scale.js +0 -80
- package/dist/features/viz/lib/scale.js.map +0 -7
- package/dist/features/viz/lib/use-scale.d.ts +0 -20
- package/dist/features/viz/lib/use-scale.js +0 -10
- package/dist/features/viz/lib/use-scale.js.map +0 -7
|
@@ -2,3 +2,5 @@ import type { PibblEventTargetRegistration } from '../events/registrations.js';
|
|
|
2
2
|
import type { LayoutBox } from '../layout/types.js';
|
|
3
3
|
/** Converts one target-local navigation rectangle to root-logical space. */
|
|
4
4
|
export declare function resolveTargetRootBounds(target: PibblEventTargetRegistration): Readonly<LayoutBox> | undefined;
|
|
5
|
+
/** Geometry preparation only; dispatch and navigation use the adopted generation. */
|
|
6
|
+
export declare function resolveStagedTargetRootBounds(target: PibblEventTargetRegistration): Readonly<LayoutBox> | undefined;
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { committedLayoutTargetBounds } from "../layout/geometry-publication.js";
|
|
1
2
|
import { GLOBAL_STATE } from "../global-state.js";
|
|
2
3
|
import {
|
|
3
4
|
PibblPaintEntryKind
|
|
4
5
|
} from "../events/paint-entry.js";
|
|
5
6
|
function resolveTargetRootBounds(target) {
|
|
7
|
+
const committed = committedLayoutTargetBounds(target);
|
|
8
|
+
return committed ? committed.get(target) : resolveStagedTargetRootBounds(target);
|
|
9
|
+
}
|
|
10
|
+
function resolveStagedTargetRootBounds(target) {
|
|
6
11
|
const bounds = target.keyboardNavigationBounds;
|
|
7
12
|
const points = target.keyboardNavigationPoints ?? (bounds ? [
|
|
8
13
|
{ x: bounds.x, y: bounds.y },
|
|
@@ -59,6 +64,7 @@ function findNestedInstanceBridge(parent, child) {
|
|
|
59
64
|
return void 0;
|
|
60
65
|
}
|
|
61
66
|
export {
|
|
67
|
+
resolveStagedTargetRootBounds,
|
|
62
68
|
resolveTargetRootBounds
|
|
63
69
|
};
|
|
64
70
|
//# sourceMappingURL=geometry.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/focus/geometry.ts"],
|
|
4
|
-
"sourcesContent": ["import type { PibblEventTargetRegistration } from '../events/registrations.js';\nimport { GLOBAL_STATE } from '../global-state.js';\nimport type { LayoutBox } from '../layout/types.js';\nimport type { PibblInstance } from '../types.js';\nimport {\n PibblPaintEntryKind,\n type PibblNestedPaintEntry,\n} from '../events/paint-entry.js';\n\n/** Converts one target-local navigation rectangle to root-logical space. */\nexport function resolveTargetRootBounds(\n target: PibblEventTargetRegistration,\n): Readonly<LayoutBox> | undefined {\n const bounds = target.keyboardNavigationBounds;\n const points = target.keyboardNavigationPoints ?? (bounds ? [\n { x: bounds.x, y: bounds.y },\n { x: bounds.x + bounds.width, y: bounds.y },\n { x: bounds.x, y: bounds.y + bounds.height },\n { x: bounds.x + bounds.width, y: bounds.y + bounds.height },\n ] : undefined);\n if (!points?.length) return undefined;\n\n const transform = resolveRootTransform(target);\n if (!transform) return undefined;\n const corners = points.map(point =>\n transform.transformPoint(new DOMPoint(point.x, point.y))\n );\n if (corners.some(point => !Number.isFinite(point.x) || !Number.isFinite(point.y))) {\n return undefined;\n }\n\n const xs = corners.map(point => point.x);\n const ys = corners.map(point => point.y);\n const left = Math.min(...xs);\n const right = Math.max(...xs);\n const top = Math.min(...ys);\n const bottom = Math.max(...ys);\n return Object.freeze({\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n });\n}\n\nfunction resolveRootTransform(\n target: PibblEventTargetRegistration,\n): DOMMatrix | undefined {\n let owner = target.owner;\n // Geometry-independent backend targets publish layer-local focus rectangles.\n // Their initial transform is identity; nested resolver bridges compose the\n // owning layer into root-logical space below.\n let transform = target.paintEntry?.transform ?? new DOMMatrix();\n const root = owner.eventRoot.rootInstance;\n if (!root) return undefined;\n\n while (owner !== root) {\n const parentCanvas = owner.parent;\n if (!parentCanvas) return undefined;\n const parent = GLOBAL_STATE.pibblInstances.get(parentCanvas);\n if (!parent) return undefined;\n const bridge = findNestedInstanceBridge(parent, owner);\n if (!bridge) return undefined;\n transform = bridge.transform.multiply(transform);\n owner = parent;\n }\n return transform;\n}\n\nfunction findNestedInstanceBridge(\n parent: PibblInstance,\n child: PibblInstance,\n): PibblNestedPaintEntry | undefined {\n if (\n parent.mainTeardowns.closed ||\n child.mainTeardowns.closed ||\n child.parent !== parent.canvas ||\n child.eventRoot !== parent.eventRoot\n ) return undefined;\n const focusBridge = child.focusParentBridge;\n if (focusBridge?.instance === child) return focusBridge;\n for (const entry of parent.paintEntries) {\n if (\n (entry.paintKind === PibblPaintEntryKind.NestedInstance ||\n entry.paintKind === PibblPaintEntryKind.Resolver) &&\n entry.instance === child\n ) return entry;\n }\n return undefined;\n}\n"],
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { committedLayoutTargetBounds } from '../layout/geometry-publication.js';\nimport type { PibblEventTargetRegistration } from '../events/registrations.js';\nimport { GLOBAL_STATE } from '../global-state.js';\nimport type { LayoutBox } from '../layout/types.js';\nimport type { PibblInstance } from '../types.js';\nimport {\n PibblPaintEntryKind,\n type PibblNestedPaintEntry,\n} from '../events/paint-entry.js';\n\n/** Converts one target-local navigation rectangle to root-logical space. */\nexport function resolveTargetRootBounds(\n target: PibblEventTargetRegistration,\n): Readonly<LayoutBox> | undefined {\n const committed = committedLayoutTargetBounds(target);\n return committed ? committed.get(target) : resolveStagedTargetRootBounds(target);\n}\n\n/** Geometry preparation only; dispatch and navigation use the adopted generation. */\nexport function resolveStagedTargetRootBounds(\n target: PibblEventTargetRegistration,\n): Readonly<LayoutBox> | undefined {\n const bounds = target.keyboardNavigationBounds;\n const points = target.keyboardNavigationPoints ?? (bounds ? [\n { x: bounds.x, y: bounds.y },\n { x: bounds.x + bounds.width, y: bounds.y },\n { x: bounds.x, y: bounds.y + bounds.height },\n { x: bounds.x + bounds.width, y: bounds.y + bounds.height },\n ] : undefined);\n if (!points?.length) return undefined;\n\n const transform = resolveRootTransform(target);\n if (!transform) return undefined;\n const corners = points.map(point =>\n transform.transformPoint(new DOMPoint(point.x, point.y))\n );\n if (corners.some(point => !Number.isFinite(point.x) || !Number.isFinite(point.y))) {\n return undefined;\n }\n\n const xs = corners.map(point => point.x);\n const ys = corners.map(point => point.y);\n const left = Math.min(...xs);\n const right = Math.max(...xs);\n const top = Math.min(...ys);\n const bottom = Math.max(...ys);\n return Object.freeze({\n x: left,\n y: top,\n width: right - left,\n height: bottom - top,\n });\n}\n\nfunction resolveRootTransform(\n target: PibblEventTargetRegistration,\n): DOMMatrix | undefined {\n let owner = target.owner;\n // Geometry-independent backend targets publish layer-local focus rectangles.\n // Their initial transform is identity; nested resolver bridges compose the\n // owning layer into root-logical space below.\n let transform = target.paintEntry?.transform ?? new DOMMatrix();\n const root = owner.eventRoot.rootInstance;\n if (!root) return undefined;\n\n while (owner !== root) {\n const parentCanvas = owner.parent;\n if (!parentCanvas) return undefined;\n const parent = GLOBAL_STATE.pibblInstances.get(parentCanvas);\n if (!parent) return undefined;\n const bridge = findNestedInstanceBridge(parent, owner);\n if (!bridge) return undefined;\n transform = bridge.transform.multiply(transform);\n owner = parent;\n }\n return transform;\n}\n\nfunction findNestedInstanceBridge(\n parent: PibblInstance,\n child: PibblInstance,\n): PibblNestedPaintEntry | undefined {\n if (\n parent.mainTeardowns.closed ||\n child.mainTeardowns.closed ||\n child.parent !== parent.canvas ||\n child.eventRoot !== parent.eventRoot\n ) return undefined;\n const focusBridge = child.focusParentBridge;\n if (focusBridge?.instance === child) return focusBridge;\n for (const entry of parent.paintEntries) {\n if (\n (entry.paintKind === PibblPaintEntryKind.NestedInstance ||\n entry.paintKind === PibblPaintEntryKind.Resolver) &&\n entry.instance === child\n ) return entry;\n }\n return undefined;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,mCAAmC;AAE5C,SAAS,oBAAoB;AAG7B;AAAA,EACE;AAAA,OAEK;AAGA,SAAS,wBACd,QACiC;AACjC,QAAM,YAAY,4BAA4B,MAAM;AACpD,SAAO,YAAY,UAAU,IAAI,MAAM,IAAI,8BAA8B,MAAM;AACjF;AAGO,SAAS,8BACd,QACiC;AACjC,QAAM,SAAS,OAAO;AACtB,QAAM,SAAS,OAAO,6BAA6B,SAAS;AAAA,IAC1D,EAAE,GAAG,OAAO,GAAG,GAAG,OAAO,EAAE;AAAA,IAC3B,EAAE,GAAG,OAAO,IAAI,OAAO,OAAO,GAAG,OAAO,EAAE;AAAA,IAC1C,EAAE,GAAG,OAAO,GAAG,GAAG,OAAO,IAAI,OAAO,OAAO;AAAA,IAC3C,EAAE,GAAG,OAAO,IAAI,OAAO,OAAO,GAAG,OAAO,IAAI,OAAO,OAAO;AAAA,EAC5D,IAAI;AACJ,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAE5B,QAAM,YAAY,qBAAqB,MAAM;AAC7C,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,UAAU,OAAO;AAAA,IAAI,WACzB,UAAU,eAAe,IAAI,SAAS,MAAM,GAAG,MAAM,CAAC,CAAC;AAAA,EACzD;AACA,MAAI,QAAQ,KAAK,WAAS,CAAC,OAAO,SAAS,MAAM,CAAC,KAAK,CAAC,OAAO,SAAS,MAAM,CAAC,CAAC,GAAG;AACjF,WAAO;AAAA,EACT;AAEA,QAAM,KAAK,QAAQ,IAAI,WAAS,MAAM,CAAC;AACvC,QAAM,KAAK,QAAQ,IAAI,WAAS,MAAM,CAAC;AACvC,QAAM,OAAO,KAAK,IAAI,GAAG,EAAE;AAC3B,QAAM,QAAQ,KAAK,IAAI,GAAG,EAAE;AAC5B,QAAM,MAAM,KAAK,IAAI,GAAG,EAAE;AAC1B,QAAM,SAAS,KAAK,IAAI,GAAG,EAAE;AAC7B,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,OAAO,QAAQ;AAAA,IACf,QAAQ,SAAS;AAAA,EACnB,CAAC;AACH;AAEA,SAAS,qBACP,QACuB;AACvB,MAAI,QAAQ,OAAO;AAInB,MAAI,YAAY,OAAO,YAAY,aAAa,IAAI,UAAU;AAC9D,QAAM,OAAO,MAAM,UAAU;AAC7B,MAAI,CAAC,KAAM,QAAO;AAElB,SAAO,UAAU,MAAM;AACrB,UAAM,eAAe,MAAM;AAC3B,QAAI,CAAC,aAAc,QAAO;AAC1B,UAAM,SAAS,aAAa,eAAe,IAAI,YAAY;AAC3D,QAAI,CAAC,OAAQ,QAAO;AACpB,UAAM,SAAS,yBAAyB,QAAQ,KAAK;AACrD,QAAI,CAAC,OAAQ,QAAO;AACpB,gBAAY,OAAO,UAAU,SAAS,SAAS;AAC/C,YAAQ;AAAA,EACV;AACA,SAAO;AACT;AAEA,SAAS,yBACP,QACA,OACmC;AACnC,MACE,OAAO,cAAc,UACrB,MAAM,cAAc,UACpB,MAAM,WAAW,OAAO,UACxB,MAAM,cAAc,OAAO,UAC3B,QAAO;AACT,QAAM,cAAc,MAAM;AAC1B,MAAI,aAAa,aAAa,MAAO,QAAO;AAC5C,aAAW,SAAS,OAAO,cAAc;AACvC,SACG,MAAM,cAAc,oBAAoB,kBACvC,MAAM,cAAc,oBAAoB,aAC1C,MAAM,aAAa,MACnB,QAAO;AAAA,EACX;AACA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -31,7 +31,7 @@ function prepareBendGuide(path) {
|
|
|
31
31
|
const span = straightSpan(raw);
|
|
32
32
|
const first = tangent(span, false), last = tangent(span, true);
|
|
33
33
|
if (spans.length) sameTangent(tangent(spans.at(-1), true), first);
|
|
34
|
-
if (![
|
|
34
|
+
if (!Number.isFinite(first[0]) || !Number.isFinite(first[1]) || !Number.isFinite(last[0]) || !Number.isFinite(last[1])) throw new RangeError("Guide limiting tangent is not finite.");
|
|
35
35
|
spans.push(span);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/geometry/path-bend-guide.ts"],
|
|
4
|
-
"sourcesContent": ["import { ellipseParameters, singularArcPoints } from './path-arc.js';\nimport { bendSpanBounds, bendSpanPoint, bendSpans, splitBendSpan, type BendPoint, type BendSpan } from './path-bend-spans.js';\nimport { PathGeometry } from './path-geometry.js';\n\ninterface Field { readonly point: BendPoint; readonly normal: BendPoint }\ninterface Leaf {\n readonly span: BendSpan; readonly depth: number;\n readonly first: Field; readonly last: Field;\n readonly chord: number; readonly excess: number;\n readonly sag: number; readonly normalError: number;\n}\ninterface Knot extends Field { readonly distance: number }\nexport interface PreparedBendGuide {\n readonly spans: readonly BendSpan[];\n readonly closed: boolean;\n readonly scale: number;\n}\n\n// Includes failed refinement and field-envelope visits. No resource survives a call.\nconst MAX_GUIDE_WORK = 2_000_000;\nconst MAX_GUIDE_LEAVES = 131_072;\nconst MAX_GUIDE_DEPTH = 48;\nconst JOIN_ROUNDOFF = 512 * Number.EPSILON;\n\n/** Validate all guide contours and joins, even if the source uses only part. */\nexport function prepareBendGuide(path: PathGeometry): PreparedBendGuide {\n const spans: BendSpan[] = [];\n let moves = 0, closed = false, scale = 0;\n for (const item of bendSpans(path)) {\n if (item.type === 'move') {\n if (++moves > 1) throw new RangeError('Along Path requires exactly one guide contour.');\n scale = Math.max(scale, ...item.point.map(Math.abs));\n } else if (item.type === 'close') closed = true;\n else {\n closed = false;\n const bounds = bendSpanBounds(item.span);\n scale = Math.max(scale, Math.abs(bounds.xmin), Math.abs(bounds.xmax), Math.abs(bounds.ymin), Math.abs(bounds.ymax));\n if ('arc' in item.span && !ellipseParameters(item.span.arc)) {\n const points = [bendSpanPoint(item.span, 0), ...singularArcPoints(item.span.arc)];\n for (let i = 1; i < points.length; i++) append({ points: [points[i - 1], points[i]] });\n } else append(item.span);\n }\n }\n if (!spans.length) throw new RangeError('Along Path requires a guide of positive length.');\n if (closed) sameTangent(tangent(spans.at(-1)!, true), tangent(spans[0], false));\n return { spans, closed, scale };\n\n function append(raw: BendSpan) {\n const b = bendSpanBounds(raw);\n // Numerically coincident endpoints/control hulls carry no reliable direction.\n if (Math.hypot(b.xmax - b.xmin, b.ymax - b.ymin) <= scale * Number.EPSILON * 32) return;\n const span = straightSpan(raw);\n const first = tangent(span, false), last = tangent(span, true);\n if (spans.length) sameTangent(tangent(spans.at(-1)!, true), first);\n if (![...first, ...last].every(Number.isFinite)) throw new RangeError('Guide limiting tangent is not finite.');\n spans.push(span);\n }\n}\n\n/**\n * A continuous piecewise-linear position/normal field with a certified error\n * against the true arc-length field. Interpolated normals are deliberately NOT\n * renormalized: this keeps the internal mapping bilinear within each leaf.\n */\nexport function measureBendGuide(\n prepared: PreparedBendGuide,\n tolerance: number,\n maxDisplacement: number,\n distanceFactor: (length: number) => number,\n) {\n let work = 0;\n const charge = () => { if (++work > MAX_GUIDE_WORK) throw new RangeError('Along Path exceeded its guide work budget.'); };\n const roundoff = prepared.scale * Number.EPSILON * 128;\n if (!Number.isFinite(roundoff) || roundoff >= tolerance / 16) throw new RangeError('Guide coordinates cannot support the requested tolerance.');\n let pending = prepared.spans.map(span => ({ span, depth: 0 }));\n let leaves: Leaf[] = [];\n let target = tolerance / 32;\n let length = 0, uncertainty = 0, error = Infinity;\n for (let pass = 0; pass < 24; pass++) {\n leaves = [];\n const stack = [...pending].reverse();\n while (stack.length) {\n charge();\n const { span, depth } = stack.pop()!;\n const leaf = certifyLeaf(span, depth);\n if (leaf && leaf.sag + maxDisplacement * leaf.normalError <= target) {\n if (leaves.length >= MAX_GUIDE_LEAVES) throw new RangeError('Along Path exceeded its guide subdivision budget.');\n leaves.push(leaf);\n } else {\n if (depth >= MAX_GUIDE_DEPTH) throw new RangeError('Guide has a cusp, reversal, or numerically uncertifiable tangent.');\n const [left, right] = splitBendSpan(span);\n stack.push({ span: right, depth: depth + 1 }, { span: left, depth: depth + 1 });\n }\n }\n length = 0; uncertainty = 0;\n let compensation = 0, sag = 0, normalError = 0, normalSlope = 0, joinError = JOIN_ROUNDOFF;\n let previous: Leaf | undefined;\n for (const leaf of leaves) {\n // Original segment joins were validated before subdivision. Inside a\n // polynomial/ellipse, the two limiting tangents at a split must agree or\n // reverse at a cusp. Subtracted tiny control edges amplify roundoff, so\n // do not reuse the original-join angular threshold here. Reject reversals\n // and account for the shared-knot normal replacement in the error bound.\n if (previous) {\n const a = previous.last.normal, b = leaf.first.normal;\n if (a[0] * b[0] + a[1] * b[1] <= 0) throw new RangeError('Along Path guide reverses direction at an internal cusp.');\n joinError = Math.max(joinError, norm(subtract(a, b)));\n }\n previous = leaf;\n // Compensated sums avoid accumulating an O(number-of-leaves) length bias.\n const next = leaf.chord - compensation, sum = length + next;\n compensation = (sum - length) - next; length = sum;\n uncertainty += leaf.excess;\n normalSlope = Math.max(normalSlope, norm(subtract(leaf.last.normal, leaf.first.normal)) / leaf.chord);\n sag = Math.max(sag, leaf.sag); normalError = Math.max(normalError, leaf.normalError);\n }\n if (!(length > 0) || !Number.isFinite(length)) throw new RangeError('Guide length must be finite and positive.');\n uncertainty += roundoff + length * Number.EPSILON * 128;\n // phi maps chord distance to true arc distance and has inverse Lipschitz\n // constant <=1. Its deviation from identity is bounded by total excess.\n // distanceFactor includes fit/alignment and any unwrapped guide laps.\n const distanceError = uncertainty * distanceFactor(length);\n error = sag + maxDisplacement * (normalError + joinError) + (1 + maxDisplacement * normalSlope) * distanceError + roundoff;\n if (Number.isFinite(error) && error <= tolerance / 4) break;\n if (pass === 23) throw new RangeError('Along Path cannot certify its guide-distance and normal error.');\n target /= 2;\n pending = leaves.flatMap(leaf => {\n if (leaf.depth >= MAX_GUIDE_DEPTH) throw new RangeError('Guide measurement reached numerical nonprogress.');\n const [left, right] = splitBendSpan(leaf.span);\n return [{ span: left, depth: leaf.depth + 1 }, { span: right, depth: leaf.depth + 1 }];\n });\n }\n const knots: Knot[] = [{ ...leaves[0].first, distance: 0 }];\n let cumulative = 0, compensation = 0;\n for (const leaf of leaves) {\n const next = leaf.chord - compensation, sum = cumulative + next;\n compensation = (sum - cumulative) - next; cumulative = sum;\n knots.push({ ...leaf.last, distance: cumulative });\n }\n // Joins are already checked. Sharing the endpoint field prevents tiny normal\n // jumps at the closed seam from becoming artificial output edges.\n if (prepared.closed) knots[knots.length - 1] = { ...knots[0], distance: length };\n\n function field(distance: number, wrap: boolean): Field {\n charge();\n if (!Number.isFinite(distance)) throw new RangeError('Mapped guide distance overflowed.');\n if (wrap) distance = ((distance % length) + length) % length;\n if (distance < 0 || distance > length) {\n const end = distance < 0 ? knots[0] : knots.at(-1)!;\n const d = distance - end.distance;\n return { normal: end.normal, point: [end.point[0] + d * end.normal[1], end.point[1] - d * end.normal[0]] };\n }\n if (distance === length) return knots.at(-1)!;\n const i = index(distance), a = knots[i], b = knots[i + 1];\n const u = (distance - a.distance) / (b.distance - a.distance);\n return { point: lerp(a.point, b.point, u), normal: lerp(a.normal, b.normal, u) };\n }\n function index(distance: number): number {\n let low = 0, high = knots.length - 1;\n while (low + 1 < high) {\n const mid = Math.floor((low + high) / 2);\n if (knots[mid].distance <= distance) low = mid; else high = mid;\n }\n return low;\n }\n function envelope(low: number, high: number, wrap: boolean, visit: (distance: number, value: Field) => void) {\n visit(low, field(low, wrap)); visit(high, field(high, wrap));\n if (!wrap) {\n for (let i = index(Math.max(0, low)); i < knots.length && knots[i].distance <= high; i++) {\n if (knots[i].distance >= low) { charge(); visit(knots[i].distance, knots[i]); }\n }\n } else {\n const firstLap = Math.floor(low / length), lastLap = Math.floor(high / length);\n if (!Number.isSafeInteger(firstLap) || !Number.isSafeInteger(lastLap) || lastLap - firstLap > MAX_GUIDE_WORK) throw new RangeError('Too many guide laps to certify.');\n for (let lap = firstLap; lap <= lastLap; lap++) {\n charge();\n const offset = lap * length;\n for (let i = index(Math.max(0, low - offset)); i < knots.length && knots[i].distance + offset <= high; i++) {\n const s = knots[i].distance + offset;\n if (s >= low) { charge(); visit(s, knots[i]); }\n }\n }\n }\n }\n return {\n length, uncertainty, error, field, knots,\n /** Conservative full-field residual, not a sampled flatness heuristic. */\n chordError(low: number, high: number, s0: number, s1: number, d: number, ds: number, dds: number, dy: number, ddy: number, wrap: boolean): number {\n const first = field(s0, wrap), last = field(s1, wrap);\n const delta = s1 - s0;\n const v = delta === 0 ? [0, 0] as const : scaleVector(subtract(last.point, first.point), 1 / delta);\n const q = delta === 0 ? [0, 0] as const : scaleVector(subtract(last.normal, first.normal), 1 / delta);\n const baseNormal = (s: number): BendPoint => add(first.normal, scaleVector(q, s - s0));\n let positionResidual = 0, normalResidual = 0;\n envelope(low, high, wrap, (s, value) => {\n positionResidual = Math.max(positionResidual, norm(subtract(value.point, add(first.point, scaleVector(v, s - s0)))));\n normalResidual = Math.max(normalResidual, norm(subtract(value.normal, baseNormal(s))));\n });\n const baseNormalSize = Math.max(norm(baseNormal(low)), norm(baseNormal(high)));\n const polynomialError = ((norm(v) + d * norm(q)) * dds + baseNormalSize * ddy + 2 * norm(q) * ds * dy) / 8;\n return error + polynomialError + positionResidual + d * normalResidual;\n },\n };\n}\n\nfunction certifyLeaf(span: BendSpan, depth: number): Leaf | undefined {\n if ('arc' in span && Math.abs(span.arc.sweep) > Math.PI / 2) return undefined;\n const a = bendSpanPoint(span, 0), b = bendSpanPoint(span, 1), chordVector = subtract(b, a), chord = norm(chordVector);\n if (!(chord > 0) || !Number.isFinite(chord)) return undefined;\n const axis = scaleVector(chordVector, 1 / chord);\n let ratio = 0, minProjection = Infinity;\n const hull = derivativeHull(span);\n for (const vector of hull) {\n const magnitude = norm(vector);\n if (magnitude === 0) { minProjection = 0; continue; }\n const v = scaleVector(vector, 1 / magnitude);\n const projection = v[0] * axis[0] + v[1] * axis[1];\n if (!(projection > 0)) return undefined;\n minProjection = Math.min(minProjection, projection * magnitude);\n ratio = Math.max(ratio, Math.abs(v[0] * axis[1] - v[1] * axis[0]) / projection);\n }\n const hyp = Math.hypot(1, ratio);\n // All derivatives lie in a directed cone around the chord. Its minimum\n // projection bounds length; its diameter bounds normal interpolation error.\n const excess = chord * ratio * (ratio / (hyp + 1)); // chord*(hyp-1), without cancellation\n const eta = ratio * Math.sqrt(2 / (hyp * (hyp + 1)));\n const first = normal(tangent(span, false)), last = normal(tangent(span, true));\n let normalError = 2 * ratio / hyp;\n // On regular spans use the second derivative of N with respect to arc length.\n // |N''| <= Q/m\u00B3 + 4A\u00B2/m\u2074, where m bounds speed below and A,Q bound the\n // second/third parameter derivatives. The cone remains the fallback at\n // removable stationary endpoints, where m can be zero but the normal exists.\n if (minProjection > 0) {\n let m: number, acceleration: number, jerk: number;\n if ('points' in span) {\n const degree = span.points.length - 1;\n m = minProjection * degree;\n const second = hull.slice(1).map((v, i) => scaleVector(subtract(v, hull[i]), degree * (degree - 1)));\n acceleration = Math.max(0, ...second.map(norm));\n jerk = Math.max(0, ...second.slice(1).map((v, i) => norm(subtract(v, second[i])) * (degree - 2)));\n } else {\n const h = Math.abs(span.arc.sweep), basis = Math.hypot(span.arc.ux, span.arc.uy) + Math.hypot(span.arc.vx, span.arc.vy);\n m = minProjection * h; acceleration = basis * h * h; jerk = acceleration * h;\n }\n const lengthOverSpeed = (chord + excess) / m;\n const error = (jerk / m + 4 * (acceleration / m) ** 2) * lengthOverSpeed ** 2 / 8;\n if (Number.isFinite(error)) normalError = Math.min(normalError, error);\n }\n return { span, depth, first: { point: a, normal: first }, last: { point: b, normal: last }, chord, excess, sag: (chord + excess) * eta / 2, normalError };\n}\n\nfunction derivativeHull(span: BendSpan): readonly BendPoint[] {\n if ('points' in span) return span.points.slice(1).map((point, i) => subtract(point, span.points[i]));\n const a = span.arc;\n return [a.startAngle, a.startAngle + a.sweep].map(theta => [\n Math.sign(a.sweep) * (-a.ux * Math.sin(theta) + a.vx * Math.cos(theta)),\n Math.sign(a.sweep) * (-a.uy * Math.sin(theta) + a.vy * Math.cos(theta)),\n ]);\n}\nfunction tangent(span: BendSpan, end: boolean): BendPoint {\n const vectors = derivativeHull(span);\n const vector = (end ? [...vectors].reverse() : vectors).find(v => norm(v) > 0);\n if (!vector) throw new RangeError('Guide has no limiting tangent.');\n const length = norm(vector);\n return scaleVector(vector, 1 / length);\n}\nfunction sameTangent(a: BendPoint, b: BendPoint) {\n if (norm(subtract(a, b)) > JOIN_ROUNDOFF) throw new RangeError('Along Path requires smooth directed guide joins; corners and cusps are unsupported.');\n}\n\nfunction straightSpan(span: BendSpan): BendSpan {\n if (!('points' in span)) return span;\n const a = span.points[0], b = span.points.at(-1)!, vector = subtract(b, a), length = norm(vector);\n if (!(length > 0) || !Number.isFinite(length)) return span;\n const direction = scaleVector(vector, 1 / length);\n if (!span.points.every(p => {\n const v = subtract(p, a);\n return v[0] * direction[1] - v[1] * direction[0] === 0;\n })) return span;\n const values = derivativeHull(span).map(v => v[0] * direction[0] + v[1] * direction[1]);\n let minimum = Math.min(values[0], values.at(-1)!);\n if (values.length === 3) {\n const denominator = values[0] - 2 * values[1] + values[2];\n const t = (values[0] - values[1]) / denominator;\n if (t > 0 && t < 1) minimum = Math.min(minimum, (1 - t) ** 2 * values[0] + 2 * t * (1 - t) * values[1] + t * t * values[2]);\n }\n if (minimum < -length * Number.EPSILON * 16) throw new RangeError('Guide reverses direction at a cusp.');\n return { points: [a, b] };\n}\nfunction normal(v: BendPoint): BendPoint { return [-v[1], v[0]]; }\nfunction norm(v: BendPoint): number { return Math.hypot(v[0], v[1]); }\nfunction add(a: BendPoint, b: BendPoint): BendPoint { return [a[0] + b[0], a[1] + b[1]]; }\nfunction subtract(a: BendPoint, b: BendPoint): BendPoint { return [a[0] - b[0], a[1] - b[1]]; }\nfunction scaleVector(a: BendPoint, scale: number): BendPoint { return [a[0] * scale, a[1] * scale]; }\nfunction lerp(a: BendPoint, b: BendPoint, t: number): BendPoint { return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]; }\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { ellipseParameters, singularArcPoints } from './path-arc.js';\nimport { bendSpanBounds, bendSpanPoint, bendSpans, splitBendSpan, type BendPoint, type BendSpan } from './path-bend-spans.js';\nimport { PathGeometry } from './path-geometry.js';\n\ninterface Field { readonly point: BendPoint; readonly normal: BendPoint }\ninterface Leaf {\n readonly span: BendSpan; readonly depth: number;\n readonly first: Field; readonly last: Field;\n readonly chord: number; readonly excess: number;\n readonly sag: number; readonly normalError: number;\n}\ninterface Knot extends Field { readonly distance: number }\nexport interface PreparedBendGuide {\n readonly spans: readonly BendSpan[];\n readonly closed: boolean;\n readonly scale: number;\n}\n\n// Includes failed refinement and field-envelope visits. No resource survives a call.\nconst MAX_GUIDE_WORK = 2_000_000;\nconst MAX_GUIDE_LEAVES = 131_072;\nconst MAX_GUIDE_DEPTH = 48;\nconst JOIN_ROUNDOFF = 512 * Number.EPSILON;\n\n/** Validate all guide contours and joins, even if the source uses only part. */\nexport function prepareBendGuide(path: PathGeometry): PreparedBendGuide {\n const spans: BendSpan[] = [];\n let moves = 0, closed = false, scale = 0;\n for (const item of bendSpans(path)) {\n if (item.type === 'move') {\n if (++moves > 1) throw new RangeError('Along Path requires exactly one guide contour.');\n scale = Math.max(scale, ...item.point.map(Math.abs));\n } else if (item.type === 'close') closed = true;\n else {\n closed = false;\n const bounds = bendSpanBounds(item.span);\n scale = Math.max(scale, Math.abs(bounds.xmin), Math.abs(bounds.xmax), Math.abs(bounds.ymin), Math.abs(bounds.ymax));\n if ('arc' in item.span && !ellipseParameters(item.span.arc)) {\n const points = [bendSpanPoint(item.span, 0), ...singularArcPoints(item.span.arc)];\n for (let i = 1; i < points.length; i++) append({ points: [points[i - 1], points[i]] });\n } else append(item.span);\n }\n }\n if (!spans.length) throw new RangeError('Along Path requires a guide of positive length.');\n if (closed) sameTangent(tangent(spans.at(-1)!, true), tangent(spans[0], false));\n return { spans, closed, scale };\n\n function append(raw: BendSpan) {\n const b = bendSpanBounds(raw);\n // Numerically coincident endpoints/control hulls carry no reliable direction.\n if (Math.hypot(b.xmax - b.xmin, b.ymax - b.ymin) <= scale * Number.EPSILON * 32) return;\n const span = straightSpan(raw);\n const first = tangent(span, false), last = tangent(span, true);\n if (spans.length) sameTangent(tangent(spans.at(-1)!, true), first);\n if ((!Number.isFinite(first[0]) || !Number.isFinite(first[1]) || !Number.isFinite(last[0]) || !Number.isFinite(last[1]))) throw new RangeError('Guide limiting tangent is not finite.');\n spans.push(span);\n }\n}\n\n/**\n * A continuous piecewise-linear position/normal field with a certified error\n * against the true arc-length field. Interpolated normals are deliberately NOT\n * renormalized: this keeps the internal mapping bilinear within each leaf.\n */\nexport function measureBendGuide(\n prepared: PreparedBendGuide,\n tolerance: number,\n maxDisplacement: number,\n distanceFactor: (length: number) => number,\n) {\n let work = 0;\n const charge = () => { if (++work > MAX_GUIDE_WORK) throw new RangeError('Along Path exceeded its guide work budget.'); };\n const roundoff = prepared.scale * Number.EPSILON * 128;\n if (!Number.isFinite(roundoff) || roundoff >= tolerance / 16) throw new RangeError('Guide coordinates cannot support the requested tolerance.');\n let pending = prepared.spans.map(span => ({ span, depth: 0 }));\n let leaves: Leaf[] = [];\n let target = tolerance / 32;\n let length = 0, uncertainty = 0, error = Infinity;\n for (let pass = 0; pass < 24; pass++) {\n leaves = [];\n const stack = [...pending].reverse();\n while (stack.length) {\n charge();\n const { span, depth } = stack.pop()!;\n const leaf = certifyLeaf(span, depth);\n if (leaf && leaf.sag + maxDisplacement * leaf.normalError <= target) {\n if (leaves.length >= MAX_GUIDE_LEAVES) throw new RangeError('Along Path exceeded its guide subdivision budget.');\n leaves.push(leaf);\n } else {\n if (depth >= MAX_GUIDE_DEPTH) throw new RangeError('Guide has a cusp, reversal, or numerically uncertifiable tangent.');\n const [left, right] = splitBendSpan(span);\n stack.push({ span: right, depth: depth + 1 }, { span: left, depth: depth + 1 });\n }\n }\n length = 0; uncertainty = 0;\n let compensation = 0, sag = 0, normalError = 0, normalSlope = 0, joinError = JOIN_ROUNDOFF;\n let previous: Leaf | undefined;\n for (const leaf of leaves) {\n // Original segment joins were validated before subdivision. Inside a\n // polynomial/ellipse, the two limiting tangents at a split must agree or\n // reverse at a cusp. Subtracted tiny control edges amplify roundoff, so\n // do not reuse the original-join angular threshold here. Reject reversals\n // and account for the shared-knot normal replacement in the error bound.\n if (previous) {\n const a = previous.last.normal, b = leaf.first.normal;\n if (a[0] * b[0] + a[1] * b[1] <= 0) throw new RangeError('Along Path guide reverses direction at an internal cusp.');\n joinError = Math.max(joinError, norm(subtract(a, b)));\n }\n previous = leaf;\n // Compensated sums avoid accumulating an O(number-of-leaves) length bias.\n const next = leaf.chord - compensation, sum = length + next;\n compensation = (sum - length) - next; length = sum;\n uncertainty += leaf.excess;\n normalSlope = Math.max(normalSlope, norm(subtract(leaf.last.normal, leaf.first.normal)) / leaf.chord);\n sag = Math.max(sag, leaf.sag); normalError = Math.max(normalError, leaf.normalError);\n }\n if (!(length > 0) || !Number.isFinite(length)) throw new RangeError('Guide length must be finite and positive.');\n uncertainty += roundoff + length * Number.EPSILON * 128;\n // phi maps chord distance to true arc distance and has inverse Lipschitz\n // constant <=1. Its deviation from identity is bounded by total excess.\n // distanceFactor includes fit/alignment and any unwrapped guide laps.\n const distanceError = uncertainty * distanceFactor(length);\n error = sag + maxDisplacement * (normalError + joinError) + (1 + maxDisplacement * normalSlope) * distanceError + roundoff;\n if (Number.isFinite(error) && error <= tolerance / 4) break;\n if (pass === 23) throw new RangeError('Along Path cannot certify its guide-distance and normal error.');\n target /= 2;\n pending = leaves.flatMap(leaf => {\n if (leaf.depth >= MAX_GUIDE_DEPTH) throw new RangeError('Guide measurement reached numerical nonprogress.');\n const [left, right] = splitBendSpan(leaf.span);\n return [{ span: left, depth: leaf.depth + 1 }, { span: right, depth: leaf.depth + 1 }];\n });\n }\n const knots: Knot[] = [{ ...leaves[0].first, distance: 0 }];\n let cumulative = 0, compensation = 0;\n for (const leaf of leaves) {\n const next = leaf.chord - compensation, sum = cumulative + next;\n compensation = (sum - cumulative) - next; cumulative = sum;\n knots.push({ ...leaf.last, distance: cumulative });\n }\n // Joins are already checked. Sharing the endpoint field prevents tiny normal\n // jumps at the closed seam from becoming artificial output edges.\n if (prepared.closed) knots[knots.length - 1] = { ...knots[0], distance: length };\n\n function field(distance: number, wrap: boolean): Field {\n charge();\n if (!Number.isFinite(distance)) throw new RangeError('Mapped guide distance overflowed.');\n if (wrap) distance = ((distance % length) + length) % length;\n if (distance < 0 || distance > length) {\n const end = distance < 0 ? knots[0] : knots.at(-1)!;\n const d = distance - end.distance;\n return { normal: end.normal, point: [end.point[0] + d * end.normal[1], end.point[1] - d * end.normal[0]] };\n }\n if (distance === length) return knots.at(-1)!;\n const i = index(distance), a = knots[i], b = knots[i + 1];\n const u = (distance - a.distance) / (b.distance - a.distance);\n return { point: lerp(a.point, b.point, u), normal: lerp(a.normal, b.normal, u) };\n }\n function index(distance: number): number {\n let low = 0, high = knots.length - 1;\n while (low + 1 < high) {\n const mid = Math.floor((low + high) / 2);\n if (knots[mid].distance <= distance) low = mid; else high = mid;\n }\n return low;\n }\n function envelope(low: number, high: number, wrap: boolean, visit: (distance: number, value: Field) => void) {\n visit(low, field(low, wrap)); visit(high, field(high, wrap));\n if (!wrap) {\n for (let i = index(Math.max(0, low)); i < knots.length && knots[i].distance <= high; i++) {\n if (knots[i].distance >= low) { charge(); visit(knots[i].distance, knots[i]); }\n }\n } else {\n const firstLap = Math.floor(low / length), lastLap = Math.floor(high / length);\n if (!Number.isSafeInteger(firstLap) || !Number.isSafeInteger(lastLap) || lastLap - firstLap > MAX_GUIDE_WORK) throw new RangeError('Too many guide laps to certify.');\n for (let lap = firstLap; lap <= lastLap; lap++) {\n charge();\n const offset = lap * length;\n for (let i = index(Math.max(0, low - offset)); i < knots.length && knots[i].distance + offset <= high; i++) {\n const s = knots[i].distance + offset;\n if (s >= low) { charge(); visit(s, knots[i]); }\n }\n }\n }\n }\n return {\n length, uncertainty, error, field, knots,\n /** Conservative full-field residual, not a sampled flatness heuristic. */\n chordError(low: number, high: number, s0: number, s1: number, d: number, ds: number, dds: number, dy: number, ddy: number, wrap: boolean): number {\n const first = field(s0, wrap), last = field(s1, wrap);\n const delta = s1 - s0;\n const v = delta === 0 ? [0, 0] as const : scaleVector(subtract(last.point, first.point), 1 / delta);\n const q = delta === 0 ? [0, 0] as const : scaleVector(subtract(last.normal, first.normal), 1 / delta);\n const baseNormal = (s: number): BendPoint => add(first.normal, scaleVector(q, s - s0));\n let positionResidual = 0, normalResidual = 0;\n envelope(low, high, wrap, (s, value) => {\n positionResidual = Math.max(positionResidual, norm(subtract(value.point, add(first.point, scaleVector(v, s - s0)))));\n normalResidual = Math.max(normalResidual, norm(subtract(value.normal, baseNormal(s))));\n });\n const baseNormalSize = Math.max(norm(baseNormal(low)), norm(baseNormal(high)));\n const polynomialError = ((norm(v) + d * norm(q)) * dds + baseNormalSize * ddy + 2 * norm(q) * ds * dy) / 8;\n return error + polynomialError + positionResidual + d * normalResidual;\n },\n };\n}\n\nfunction certifyLeaf(span: BendSpan, depth: number): Leaf | undefined {\n if ('arc' in span && Math.abs(span.arc.sweep) > Math.PI / 2) return undefined;\n const a = bendSpanPoint(span, 0), b = bendSpanPoint(span, 1), chordVector = subtract(b, a), chord = norm(chordVector);\n if (!(chord > 0) || !Number.isFinite(chord)) return undefined;\n const axis = scaleVector(chordVector, 1 / chord);\n let ratio = 0, minProjection = Infinity;\n const hull = derivativeHull(span);\n for (const vector of hull) {\n const magnitude = norm(vector);\n if (magnitude === 0) { minProjection = 0; continue; }\n const v = scaleVector(vector, 1 / magnitude);\n const projection = v[0] * axis[0] + v[1] * axis[1];\n if (!(projection > 0)) return undefined;\n minProjection = Math.min(minProjection, projection * magnitude);\n ratio = Math.max(ratio, Math.abs(v[0] * axis[1] - v[1] * axis[0]) / projection);\n }\n const hyp = Math.hypot(1, ratio);\n // All derivatives lie in a directed cone around the chord. Its minimum\n // projection bounds length; its diameter bounds normal interpolation error.\n const excess = chord * ratio * (ratio / (hyp + 1)); // chord*(hyp-1), without cancellation\n const eta = ratio * Math.sqrt(2 / (hyp * (hyp + 1)));\n const first = normal(tangent(span, false)), last = normal(tangent(span, true));\n let normalError = 2 * ratio / hyp;\n // On regular spans use the second derivative of N with respect to arc length.\n // |N''| <= Q/m\u00B3 + 4A\u00B2/m\u2074, where m bounds speed below and A,Q bound the\n // second/third parameter derivatives. The cone remains the fallback at\n // removable stationary endpoints, where m can be zero but the normal exists.\n if (minProjection > 0) {\n let m: number, acceleration: number, jerk: number;\n if ('points' in span) {\n const degree = span.points.length - 1;\n m = minProjection * degree;\n const second = hull.slice(1).map((v, i) => scaleVector(subtract(v, hull[i]), degree * (degree - 1)));\n acceleration = Math.max(0, ...second.map(norm));\n jerk = Math.max(0, ...second.slice(1).map((v, i) => norm(subtract(v, second[i])) * (degree - 2)));\n } else {\n const h = Math.abs(span.arc.sweep), basis = Math.hypot(span.arc.ux, span.arc.uy) + Math.hypot(span.arc.vx, span.arc.vy);\n m = minProjection * h; acceleration = basis * h * h; jerk = acceleration * h;\n }\n const lengthOverSpeed = (chord + excess) / m;\n const error = (jerk / m + 4 * (acceleration / m) ** 2) * lengthOverSpeed ** 2 / 8;\n if (Number.isFinite(error)) normalError = Math.min(normalError, error);\n }\n return { span, depth, first: { point: a, normal: first }, last: { point: b, normal: last }, chord, excess, sag: (chord + excess) * eta / 2, normalError };\n}\n\nfunction derivativeHull(span: BendSpan): readonly BendPoint[] {\n if ('points' in span) return span.points.slice(1).map((point, i) => subtract(point, span.points[i]));\n const a = span.arc;\n return [a.startAngle, a.startAngle + a.sweep].map(theta => [\n Math.sign(a.sweep) * (-a.ux * Math.sin(theta) + a.vx * Math.cos(theta)),\n Math.sign(a.sweep) * (-a.uy * Math.sin(theta) + a.vy * Math.cos(theta)),\n ]);\n}\nfunction tangent(span: BendSpan, end: boolean): BendPoint {\n const vectors = derivativeHull(span);\n const vector = (end ? [...vectors].reverse() : vectors).find(v => norm(v) > 0);\n if (!vector) throw new RangeError('Guide has no limiting tangent.');\n const length = norm(vector);\n return scaleVector(vector, 1 / length);\n}\nfunction sameTangent(a: BendPoint, b: BendPoint) {\n if (norm(subtract(a, b)) > JOIN_ROUNDOFF) throw new RangeError('Along Path requires smooth directed guide joins; corners and cusps are unsupported.');\n}\n\nfunction straightSpan(span: BendSpan): BendSpan {\n if (!('points' in span)) return span;\n const a = span.points[0], b = span.points.at(-1)!, vector = subtract(b, a), length = norm(vector);\n if (!(length > 0) || !Number.isFinite(length)) return span;\n const direction = scaleVector(vector, 1 / length);\n if (!span.points.every(p => {\n const v = subtract(p, a);\n return v[0] * direction[1] - v[1] * direction[0] === 0;\n })) return span;\n const values = derivativeHull(span).map(v => v[0] * direction[0] + v[1] * direction[1]);\n let minimum = Math.min(values[0], values.at(-1)!);\n if (values.length === 3) {\n const denominator = values[0] - 2 * values[1] + values[2];\n const t = (values[0] - values[1]) / denominator;\n if (t > 0 && t < 1) minimum = Math.min(minimum, (1 - t) ** 2 * values[0] + 2 * t * (1 - t) * values[1] + t * t * values[2]);\n }\n if (minimum < -length * Number.EPSILON * 16) throw new RangeError('Guide reverses direction at a cusp.');\n return { points: [a, b] };\n}\nfunction normal(v: BendPoint): BendPoint { return [-v[1], v[0]]; }\nfunction norm(v: BendPoint): number { return Math.hypot(v[0], v[1]); }\nfunction add(a: BendPoint, b: BendPoint): BendPoint { return [a[0] + b[0], a[1] + b[1]]; }\nfunction subtract(a: BendPoint, b: BendPoint): BendPoint { return [a[0] - b[0], a[1] - b[1]]; }\nfunction scaleVector(a: BendPoint, scale: number): BendPoint { return [a[0] * scale, a[1] * scale]; }\nfunction lerp(a: BendPoint, b: BendPoint, t: number): BendPoint { return [a[0] + (b[0] - a[0]) * t, a[1] + (b[1] - a[1]) * t]; }\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,mBAAmB,yBAAyB;AACrD,SAAS,gBAAgB,eAAe,WAAW,qBAAoD;AAkBvG,MAAM,iBAAiB;AACvB,MAAM,mBAAmB;AACzB,MAAM,kBAAkB;AACxB,MAAM,gBAAgB,MAAM,OAAO;AAG5B,SAAS,iBAAiB,MAAuC;AACtE,QAAM,QAAoB,CAAC;AAC3B,MAAI,QAAQ,GAAG,SAAS,OAAO,QAAQ;AACvC,aAAW,QAAQ,UAAU,IAAI,GAAG;AAClC,QAAI,KAAK,SAAS,QAAQ;AACxB,UAAI,EAAE,QAAQ,EAAG,OAAM,IAAI,WAAW,gDAAgD;AACtF,cAAQ,KAAK,IAAI,OAAO,GAAG,KAAK,MAAM,IAAI,KAAK,GAAG,CAAC;AAAA,IACrD,WAAW,KAAK,SAAS,QAAS,UAAS;AAAA,SACtC;AACH,eAAS;AACT,YAAM,SAAS,eAAe,KAAK,IAAI;AACvC,cAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,OAAO,IAAI,GAAG,KAAK,IAAI,OAAO,IAAI,GAAG,KAAK,IAAI,OAAO,IAAI,GAAG,KAAK,IAAI,OAAO,IAAI,CAAC;AAClH,UAAI,SAAS,KAAK,QAAQ,CAAC,kBAAkB,KAAK,KAAK,GAAG,GAAG;AAC3D,cAAM,SAAS,CAAC,cAAc,KAAK,MAAM,CAAC,GAAG,GAAG,kBAAkB,KAAK,KAAK,GAAG,CAAC;AAChF,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAK,QAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;AAAA,MACvF,MAAO,QAAO,KAAK,IAAI;AAAA,IACzB;AAAA,EACF;AACA,MAAI,CAAC,MAAM,OAAQ,OAAM,IAAI,WAAW,iDAAiD;AACzF,MAAI,OAAQ,aAAY,QAAQ,MAAM,GAAG,EAAE,GAAI,IAAI,GAAG,QAAQ,MAAM,CAAC,GAAG,KAAK,CAAC;AAC9E,SAAO,EAAE,OAAO,QAAQ,MAAM;AAE9B,WAAS,OAAO,KAAe;AAC7B,UAAM,IAAI,eAAe,GAAG;AAE5B,QAAI,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,KAAK,QAAQ,OAAO,UAAU,GAAI;AACjF,UAAM,OAAO,aAAa,GAAG;AAC7B,UAAM,QAAQ,QAAQ,MAAM,KAAK,GAAG,OAAO,QAAQ,MAAM,IAAI;AAC7D,QAAI,MAAM,OAAQ,aAAY,QAAQ,MAAM,GAAG,EAAE,GAAI,IAAI,GAAG,KAAK;AACjE,QAAK,CAAC,OAAO,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,MAAM,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,SAAS,KAAK,CAAC,CAAC,EAAI,OAAM,IAAI,WAAW,uCAAuC;AACtL,UAAM,KAAK,IAAI;AAAA,EACjB;AACF;AAOO,SAAS,iBACd,UACA,WACA,iBACA,gBACA;AACA,MAAI,OAAO;AACX,QAAM,SAAS,MAAM;AAAE,QAAI,EAAE,OAAO,eAAgB,OAAM,IAAI,WAAW,4CAA4C;AAAA,EAAG;AACxH,QAAM,WAAW,SAAS,QAAQ,OAAO,UAAU;AACnD,MAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,YAAY,YAAY,GAAI,OAAM,IAAI,WAAW,2DAA2D;AAC9I,MAAI,UAAU,SAAS,MAAM,IAAI,WAAS,EAAE,MAAM,OAAO,EAAE,EAAE;AAC7D,MAAI,SAAiB,CAAC;AACtB,MAAI,SAAS,YAAY;AACzB,MAAI,SAAS,GAAG,cAAc,GAAG,QAAQ;AACzC,WAAS,OAAO,GAAG,OAAO,IAAI,QAAQ;AACpC,aAAS,CAAC;AACV,UAAM,QAAQ,CAAC,GAAG,OAAO,EAAE,QAAQ;AACnC,WAAO,MAAM,QAAQ;AACnB,aAAO;AACP,YAAM,EAAE,MAAM,MAAM,IAAI,MAAM,IAAI;AAClC,YAAM,OAAO,YAAY,MAAM,KAAK;AACpC,UAAI,QAAQ,KAAK,MAAM,kBAAkB,KAAK,eAAe,QAAQ;AACnE,YAAI,OAAO,UAAU,iBAAkB,OAAM,IAAI,WAAW,mDAAmD;AAC/G,eAAO,KAAK,IAAI;AAAA,MAClB,OAAO;AACL,YAAI,SAAS,gBAAiB,OAAM,IAAI,WAAW,mEAAmE;AACtH,cAAM,CAAC,MAAM,KAAK,IAAI,cAAc,IAAI;AACxC,cAAM,KAAK,EAAE,MAAM,OAAO,OAAO,QAAQ,EAAE,GAAG,EAAE,MAAM,MAAM,OAAO,QAAQ,EAAE,CAAC;AAAA,MAChF;AAAA,IACF;AACA,aAAS;AAAG,kBAAc;AAC1B,QAAIA,gBAAe,GAAG,MAAM,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY;AAC7E,QAAI;AACJ,eAAW,QAAQ,QAAQ;AAMzB,UAAI,UAAU;AACZ,cAAM,IAAI,SAAS,KAAK,QAAQ,IAAI,KAAK,MAAM;AAC/C,YAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,EAAG,OAAM,IAAI,WAAW,0DAA0D;AACnH,oBAAY,KAAK,IAAI,WAAW,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC;AAAA,MACtD;AACA,iBAAW;AAEX,YAAM,OAAO,KAAK,QAAQA,eAAc,MAAM,SAAS;AACvD,MAAAA,gBAAgB,MAAM,SAAU;AAAM,eAAS;AAC/C,qBAAe,KAAK;AACpB,oBAAc,KAAK,IAAI,aAAa,KAAK,SAAS,KAAK,KAAK,QAAQ,KAAK,MAAM,MAAM,CAAC,IAAI,KAAK,KAAK;AACpG,YAAM,KAAK,IAAI,KAAK,KAAK,GAAG;AAAG,oBAAc,KAAK,IAAI,aAAa,KAAK,WAAW;AAAA,IACrF;AACA,QAAI,EAAE,SAAS,MAAM,CAAC,OAAO,SAAS,MAAM,EAAG,OAAM,IAAI,WAAW,2CAA2C;AAC/G,mBAAe,WAAW,SAAS,OAAO,UAAU;AAIpD,UAAM,gBAAgB,cAAc,eAAe,MAAM;AACzD,YAAQ,MAAM,mBAAmB,cAAc,cAAc,IAAI,kBAAkB,eAAe,gBAAgB;AAClH,QAAI,OAAO,SAAS,KAAK,KAAK,SAAS,YAAY,EAAG;AACtD,QAAI,SAAS,GAAI,OAAM,IAAI,WAAW,gEAAgE;AACtG,cAAU;AACV,cAAU,OAAO,QAAQ,UAAQ;AAC/B,UAAI,KAAK,SAAS,gBAAiB,OAAM,IAAI,WAAW,kDAAkD;AAC1G,YAAM,CAAC,MAAM,KAAK,IAAI,cAAc,KAAK,IAAI;AAC7C,aAAO,CAAC,EAAE,MAAM,MAAM,OAAO,KAAK,QAAQ,EAAE,GAAG,EAAE,MAAM,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;AAAA,IACvF,CAAC;AAAA,EACH;AACA,QAAM,QAAgB,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,UAAU,EAAE,CAAC;AAC1D,MAAI,aAAa,GAAG,eAAe;AACnC,aAAW,QAAQ,QAAQ;AACzB,UAAM,OAAO,KAAK,QAAQ,cAAc,MAAM,aAAa;AAC3D,mBAAgB,MAAM,aAAc;AAAM,iBAAa;AACvD,UAAM,KAAK,EAAE,GAAG,KAAK,MAAM,UAAU,WAAW,CAAC;AAAA,EACnD;AAGA,MAAI,SAAS,OAAQ,OAAM,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,UAAU,OAAO;AAE/E,WAAS,MAAM,UAAkB,MAAsB;AACrD,WAAO;AACP,QAAI,CAAC,OAAO,SAAS,QAAQ,EAAG,OAAM,IAAI,WAAW,mCAAmC;AACxF,QAAI,KAAM,aAAa,WAAW,SAAU,UAAU;AACtD,QAAI,WAAW,KAAK,WAAW,QAAQ;AACrC,YAAM,MAAM,WAAW,IAAI,MAAM,CAAC,IAAI,MAAM,GAAG,EAAE;AACjD,YAAM,IAAI,WAAW,IAAI;AACzB,aAAO,EAAE,QAAQ,IAAI,QAAQ,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE;AAAA,IAC3G;AACA,QAAI,aAAa,OAAQ,QAAO,MAAM,GAAG,EAAE;AAC3C,UAAM,IAAI,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,IAAI,CAAC;AACxD,UAAM,KAAK,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE;AACpD,WAAO,EAAE,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,QAAQ,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAAA,EACjF;AACA,WAAS,MAAM,UAA0B;AACvC,QAAI,MAAM,GAAG,OAAO,MAAM,SAAS;AACnC,WAAO,MAAM,IAAI,MAAM;AACrB,YAAM,MAAM,KAAK,OAAO,MAAM,QAAQ,CAAC;AACvC,UAAI,MAAM,GAAG,EAAE,YAAY,SAAU,OAAM;AAAA,UAAU,QAAO;AAAA,IAC9D;AACA,WAAO;AAAA,EACT;AACA,WAAS,SAAS,KAAa,MAAc,MAAe,OAAiD;AAC3G,UAAM,KAAK,MAAM,KAAK,IAAI,CAAC;AAAG,UAAM,MAAM,MAAM,MAAM,IAAI,CAAC;AAC3D,QAAI,CAAC,MAAM;AACT,eAAS,IAAI,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,YAAY,MAAM,KAAK;AACxF,YAAI,MAAM,CAAC,EAAE,YAAY,KAAK;AAAE,iBAAO;AAAG,gBAAM,MAAM,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC;AAAA,QAAG;AAAA,MAChF;AAAA,IACF,OAAO;AACL,YAAM,WAAW,KAAK,MAAM,MAAM,MAAM,GAAG,UAAU,KAAK,MAAM,OAAO,MAAM;AAC7E,UAAI,CAAC,OAAO,cAAc,QAAQ,KAAK,CAAC,OAAO,cAAc,OAAO,KAAK,UAAU,WAAW,eAAgB,OAAM,IAAI,WAAW,iCAAiC;AACpK,eAAS,MAAM,UAAU,OAAO,SAAS,OAAO;AAC9C,eAAO;AACP,cAAM,SAAS,MAAM;AACrB,iBAAS,IAAI,MAAM,KAAK,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,IAAI,MAAM,UAAU,MAAM,CAAC,EAAE,WAAW,UAAU,MAAM,KAAK;AAC1G,gBAAM,IAAI,MAAM,CAAC,EAAE,WAAW;AAC9B,cAAI,KAAK,KAAK;AAAE,mBAAO;AAAG,kBAAM,GAAG,MAAM,CAAC,CAAC;AAAA,UAAG;AAAA,QAChD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AAAA,IACL;AAAA,IAAQ;AAAA,IAAa;AAAA,IAAO;AAAA,IAAO;AAAA;AAAA,IAEnC,WAAW,KAAa,MAAc,IAAY,IAAY,GAAW,IAAY,KAAa,IAAY,KAAa,MAAuB;AAChJ,YAAM,QAAQ,MAAM,IAAI,IAAI,GAAG,OAAO,MAAM,IAAI,IAAI;AACpD,YAAM,QAAQ,KAAK;AACnB,YAAM,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,IAAa,YAAY,SAAS,KAAK,OAAO,MAAM,KAAK,GAAG,IAAI,KAAK;AAClG,YAAM,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,IAAa,YAAY,SAAS,KAAK,QAAQ,MAAM,MAAM,GAAG,IAAI,KAAK;AACpG,YAAM,aAAa,CAAC,MAAyB,IAAI,MAAM,QAAQ,YAAY,GAAG,IAAI,EAAE,CAAC;AACrF,UAAI,mBAAmB,GAAG,iBAAiB;AAC3C,eAAS,KAAK,MAAM,MAAM,CAAC,GAAG,UAAU;AACtC,2BAAmB,KAAK,IAAI,kBAAkB,KAAK,SAAS,MAAM,OAAO,IAAI,MAAM,OAAO,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACnH,yBAAiB,KAAK,IAAI,gBAAgB,KAAK,SAAS,MAAM,QAAQ,WAAW,CAAC,CAAC,CAAC,CAAC;AAAA,MACvF,CAAC;AACD,YAAM,iBAAiB,KAAK,IAAI,KAAK,WAAW,GAAG,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC;AAC7E,YAAM,oBAAoB,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,MAAM,iBAAiB,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;AACzG,aAAO,QAAQ,kBAAkB,mBAAmB,IAAI;AAAA,IAC1D;AAAA,EACF;AACF;AAEA,SAAS,YAAY,MAAgB,OAAiC;AACpE,MAAI,SAAS,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,EAAG,QAAO;AACpE,QAAM,IAAI,cAAc,MAAM,CAAC,GAAG,IAAI,cAAc,MAAM,CAAC,GAAG,cAAc,SAAS,GAAG,CAAC,GAAG,QAAQ,KAAK,WAAW;AACpH,MAAI,EAAE,QAAQ,MAAM,CAAC,OAAO,SAAS,KAAK,EAAG,QAAO;AACpD,QAAM,OAAO,YAAY,aAAa,IAAI,KAAK;AAC/C,MAAI,QAAQ,GAAG,gBAAgB;AAC/B,QAAM,OAAO,eAAe,IAAI;AAChC,aAAW,UAAU,MAAM;AACzB,UAAM,YAAY,KAAK,MAAM;AAC7B,QAAI,cAAc,GAAG;AAAE,sBAAgB;AAAG;AAAA,IAAU;AACpD,UAAM,IAAI,YAAY,QAAQ,IAAI,SAAS;AAC3C,UAAM,aAAa,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC;AACjD,QAAI,EAAE,aAAa,GAAI,QAAO;AAC9B,oBAAgB,KAAK,IAAI,eAAe,aAAa,SAAS;AAC9D,YAAQ,KAAK,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,UAAU;AAAA,EAChF;AACA,QAAM,MAAM,KAAK,MAAM,GAAG,KAAK;AAG/B,QAAM,SAAS,QAAQ,SAAS,SAAS,MAAM;AAC/C,QAAM,MAAM,QAAQ,KAAK,KAAK,KAAK,OAAO,MAAM,GAAG;AACnD,QAAM,QAAQ,OAAO,QAAQ,MAAM,KAAK,CAAC,GAAG,OAAO,OAAO,QAAQ,MAAM,IAAI,CAAC;AAC7E,MAAI,cAAc,IAAI,QAAQ;AAK9B,MAAI,gBAAgB,GAAG;AACrB,QAAI,GAAW,cAAsB;AACrC,QAAI,YAAY,MAAM;AACpB,YAAM,SAAS,KAAK,OAAO,SAAS;AACpC,UAAI,gBAAgB;AACpB,YAAM,SAAS,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,YAAY,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,UAAU,SAAS,EAAE,CAAC;AACnG,qBAAe,KAAK,IAAI,GAAG,GAAG,OAAO,IAAI,IAAI,CAAC;AAC9C,aAAO,KAAK,IAAI,GAAG,GAAG,OAAO,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,KAAK,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;AAAA,IAClG,OAAO;AACL,YAAM,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,QAAQ,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE,IAAI,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE;AACtH,UAAI,gBAAgB;AAAG,qBAAe,QAAQ,IAAI;AAAG,aAAO,eAAe;AAAA,IAC7E;AACA,UAAM,mBAAmB,QAAQ,UAAU;AAC3C,UAAM,SAAS,OAAO,IAAI,KAAK,eAAe,MAAM,KAAK,mBAAmB,IAAI;AAChF,QAAI,OAAO,SAAS,KAAK,EAAG,eAAc,KAAK,IAAI,aAAa,KAAK;AAAA,EACvE;AACA,SAAO,EAAE,MAAM,OAAO,OAAO,EAAE,OAAO,GAAG,QAAQ,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,QAAQ,KAAK,GAAG,OAAO,QAAQ,MAAM,QAAQ,UAAU,MAAM,GAAG,YAAY;AAC1J;AAEA,SAAS,eAAe,MAAsC;AAC5D,MAAI,YAAY,KAAM,QAAO,KAAK,OAAO,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,MAAM,SAAS,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC;AACnG,QAAM,IAAI,KAAK;AACf,SAAO,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,WAAS;AAAA,IACzD,KAAK,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK;AAAA,IACrE,KAAK,KAAK,EAAE,KAAK,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK;AAAA,EACvE,CAAC;AACH;AACA,SAAS,QAAQ,MAAgB,KAAyB;AACxD,QAAM,UAAU,eAAe,IAAI;AACnC,QAAM,UAAU,MAAM,CAAC,GAAG,OAAO,EAAE,QAAQ,IAAI,SAAS,KAAK,OAAK,KAAK,CAAC,IAAI,CAAC;AAC7E,MAAI,CAAC,OAAQ,OAAM,IAAI,WAAW,gCAAgC;AAClE,QAAM,SAAS,KAAK,MAAM;AAC1B,SAAO,YAAY,QAAQ,IAAI,MAAM;AACvC;AACA,SAAS,YAAY,GAAc,GAAc;AAC/C,MAAI,KAAK,SAAS,GAAG,CAAC,CAAC,IAAI,cAAe,OAAM,IAAI,WAAW,qFAAqF;AACtJ;AAEA,SAAS,aAAa,MAA0B;AAC9C,MAAI,EAAE,YAAY,MAAO,QAAO;AAChC,QAAM,IAAI,KAAK,OAAO,CAAC,GAAG,IAAI,KAAK,OAAO,GAAG,EAAE,GAAI,SAAS,SAAS,GAAG,CAAC,GAAG,SAAS,KAAK,MAAM;AAChG,MAAI,EAAE,SAAS,MAAM,CAAC,OAAO,SAAS,MAAM,EAAG,QAAO;AACtD,QAAM,YAAY,YAAY,QAAQ,IAAI,MAAM;AAChD,MAAI,CAAC,KAAK,OAAO,MAAM,OAAK;AAC1B,UAAM,IAAI,SAAS,GAAG,CAAC;AACvB,WAAO,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM;AAAA,EACvD,CAAC,EAAG,QAAO;AACX,QAAM,SAAS,eAAe,IAAI,EAAE,IAAI,OAAK,EAAE,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC;AACtF,MAAI,UAAU,KAAK,IAAI,OAAO,CAAC,GAAG,OAAO,GAAG,EAAE,CAAE;AAChD,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,cAAc,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC;AACxD,UAAM,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK;AACpC,QAAI,IAAI,KAAK,IAAI,EAAG,WAAU,KAAK,IAAI,UAAU,IAAI,MAAM,IAAI,OAAO,CAAC,IAAI,IAAI,KAAK,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC;AAAA,EAC5H;AACA,MAAI,UAAU,CAAC,SAAS,OAAO,UAAU,GAAI,OAAM,IAAI,WAAW,qCAAqC;AACvG,SAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC1B;AACA,SAAS,OAAO,GAAyB;AAAE,SAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAAG;AACjE,SAAS,KAAK,GAAsB;AAAE,SAAO,KAAK,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAAG;AACrE,SAAS,IAAI,GAAc,GAAyB;AAAE,SAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAAG;AACzF,SAAS,SAAS,GAAc,GAAyB;AAAE,SAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAAG;AAC9F,SAAS,YAAY,GAAc,OAA0B;AAAE,SAAO,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,KAAK;AAAG;AACpG,SAAS,KAAK,GAAc,GAAc,GAAsB;AAAE,SAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;AAAG;",
|
|
6
6
|
"names": ["compensation"]
|
|
7
7
|
}
|
|
@@ -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 (!
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
268
|
-
if (!
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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 (!
|
|
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 (
|
|
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 ||
|
|
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
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
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,
|