@pibbl/core 0.0.2 → 0.0.3-alpha.109.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRD_PARTY_NOTICES.txt +81 -0
- 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/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/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/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- 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 +68 -6
- package/dist/features/viz/index.js +164 -2
- 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-title.js +2 -1
- package/dist/features/viz/lib/axis-title.js.map +2 -2
- package/dist/features/viz/lib/axis.js +1 -1
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +16 -1
- 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/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 +5 -2
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- 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.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- 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/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/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-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.js +4 -1
- package/dist/features/viz/lib/reference-band.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +1 -1
- package/dist/features/viz/lib/scale-ticks.js +21 -6
- package/dist/features/viz/lib/scale-ticks.js.map +2 -2
- 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/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 +20 -4
- package/dist/features/viz/lib/use-continuous-scale.js +6 -1
- package/dist/features/viz/lib/use-continuous-scale.js.map +2 -2
- package/dist/features/viz/lib/utc-scale.js +11 -10
- package/dist/features/viz/lib/utc-scale.js.map +2 -2
- 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 +9 -5
- 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/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/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 +26 -3
|
@@ -179,7 +179,7 @@ class PathGeometry {
|
|
|
179
179
|
* @param counterclockwise - Whether the arc runs counterclockwise; defaults to false.
|
|
180
180
|
*/
|
|
181
181
|
ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, counterclockwise = false) {
|
|
182
|
-
if (!
|
|
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": "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",
|
|
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,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/lib/geometry/path-transforms.ts"],
|
|
4
|
-
"sourcesContent": ["import { PathGeometry } from './path-geometry.js';\nimport {\n bendSpans,\n bendSpanBounds,\n splitBendSpan,\n type BendSpan,\n} from './path-bend-spans.js';\nimport {\n absI,\n constant,\n add,\n sub,\n scale,\n mul,\n lerp,\n reciprocal,\n type Pair,\n} from './transform-math.js';\nimport {\n snapshotGuide,\n sampleGuide,\n type PathGuide,\n} from './transform-guide.js';\nimport {\n warpPath,\n type PathWarpCorners,\n type PathWarpMode,\n} from './path-warp.js';\n\n/**\n * A point in source or destination path coordinates.\n *\n * @see {@link PathTransform}\n * @see {@link PathRect}\n */\nexport interface PathPoint {\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathPoint}.\n */\n readonly x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See {@link PathPoint}\n * .\n */\n readonly y: number;\n}\n/**\n * A source rectangle with an origin and finite positive dimensions.\n *\n * @see {@link PathPoint}\n * @see {@link QuadTransformOptions}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface PathRect extends PathPoint {\n /** Horizontal extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly width: number;\n /** Vertical extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly height: number;\n}\ndeclare const transformBrand: unique symbol;\n/**\n * A constructor-created, reusable coordinate mapping for path transformation.\n *\n * @see {@link PathPoint}\n * @see {@link transformPath}\n * @see {@link composeTransforms}\n * @see {@link affineTransform}\n */\nexport interface PathTransform {\n readonly [transformBrand]: true;\n /**\n * Evaluate in ordinary source/destination coordinates. Guide approximation is bounded by\n * tolerance.\n * @param point - Source point in the transform's input coordinate system. See {@link PathPoint}.\n * @param options - Optional approximation tolerance for evaluating the mapping.\n * @returns The mapped point in the transform's output coordinate system. See {@link PathPoint}.\n */\n mapPoint(\n point: PathPoint,\n options?: {\n /** Positive maximum geometric approximation error. See {@link PathTransform}. */\n readonly tolerance?: number;\n },\n ): PathPoint;\n}\n/**\n * Accuracy and output-segment limits for applying a path transform.\n *\n * @see {@link transformPath}\n */\nexport interface TransformPathOptions {\n /** Positive maximum geometric approximation error. See {@link TransformPathOptions}. */\n readonly tolerance: number;\n /** Upper bound on the number of output path segments. See {@link TransformPathOptions}. */\n readonly maxSegments?: number;\n}\n/**\n * The four destination corners used by a quadrilateral path transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadCorners = PathWarpCorners;\n/**\n * Selects bilinear or perspective interpolation for a quadrilateral transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadMode = PathWarpMode;\n/**\n * Source rectangle, destination corners, and interpolation mode for a quadrilateral transform.\n *\n * @see {@link PathRect}\n * @see {@link PathQuadCorners}\n * @see {@link PathQuadMode}\n * @see {@link quadTransform}\n */\nexport interface QuadTransformOptions {\n /** Source rectangle mapped to the destination quadrilateral. See {@link PathRect}. */\n readonly source: PathRect;\n /** Destination corners into which the source rectangle maps. See {@link PathQuadCorners}. */\n readonly destination: PathQuadCorners;\n /** Selects the supported mapping, placement, or result policy. See {@link PathQuadMode}. */\n readonly mode?: PathQuadMode;\n}\n/**\n * A guide path positioned at a normalized station across an envelope.\n *\n * @see {@link PathGuide}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface EnvelopeGuide {\n /** Normalized station position. See {@link EnvelopeGuide}. */\n readonly at: number;\n /** Path geometry used by this operation. See {@link PathGuide}. */\n readonly path: PathGuide;\n}\n/**\n * Source rectangle and either a top/bottom pair or ordered envelope guides.\n *\n * @see {@link PathRect}\n * @see {@link PathGuide}\n * @see {@link EnvelopeGuide}\n * @see {@link envelopeTransform}\n */\nexport type EnvelopeTransformOptions = {\n /** Source rectangle mapped between the envelope guides. See {@link PathRect}. */\n readonly source: PathRect;\n /** Interpolation between successive guide paths; only linear interpolation is supported. See {@link EnvelopeTransformOptions}. */\n readonly interpolation?: 'linear';\n} & (\n | {\n /** Top edge value or top envelope guide. See {@link PathGuide}. */\n readonly top: PathGuide;\n /** Bottom edge value or bottom envelope guide. See {@link PathGuide}. */\n readonly bottom: PathGuide;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly guides?: never;\n }\n | {\n /**\n * Ordered guide paths defining the envelope from its first to last station. See\n * {@link EnvelopeGuide}.\n */\n readonly guides: readonly EnvelopeGuide[];\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly top?: never;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly bottom?: never;\n }\n);\nexport type {\n PathGuide,\n PathGuideOptions,\n PathGuideStation,\n} from './transform-guide.js';\n\nexport interface Stage {\n apply?(path: PathGeometry, options: TransformPathOptions): PathGeometry;\n evaluate(input: Pair): Pair;\n error(input: Pair): number;\n domain?(point: Pair, margin: number): boolean;\n affine?: Affine;\n}\nexport type Factory = (accuracy: number) => Stage;\nconst definitions = new WeakMap<PathTransform, readonly Factory[]>();\nconst MAX_WORK = 2_000_000;\nexport const coordinate = (value: number, label = 'coordinate') => {\n if (typeof value !== 'number')\n throw new TypeError(`${label} must be a number.`);\n if (!Number.isFinite(value)) throw new RangeError(`${label} must be finite.`);\n return value;\n};\nexport const positive = (value: number, label: string) => {\n coordinate(value, label);\n if (value <= 0) throw new RangeError(`${label} must be positive.`);\n return value;\n};\nexport function rectangle(input: PathRect): PathRect {\n return {\n x: coordinate(input?.x),\n y: coordinate(input?.y),\n width: positive(input?.width, 'source.width'),\n height: positive(input?.height, 'source.height'),\n };\n}\nexport const normalize = (input: Pair, r: PathRect): Pair => [\n scale(sub(input[0], constant(r.x)), 1 / r.width),\n scale(sub(input[1], constant(r.y)), 1 / r.height),\n];\nexport function make(factories: readonly Factory[]): PathTransform {\n // One cached preparation only; drag sessions cannot grow a tolerance cache indefinitely.\n let cachedAccuracy = NaN,\n cached: readonly Stage[] = [];\n const prepare = (accuracy: number) => {\n if (accuracy !== cachedAccuracy) {\n cached = factories.map((f) => f(accuracy));\n cachedAccuracy = accuracy;\n }\n return cached;\n };\n const value = Object.freeze({\n mapPoint(point: PathPoint, options: { tolerance?: number } = {}) {\n const tolerance = positive(options.tolerance ?? 0.0001, 'tolerance');\n const input: Pair = [\n constant(coordinate(point?.x)),\n constant(coordinate(point?.y)),\n ];\n for (\n let accuracy = tolerance / 16, attempt = 0;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const result = evaluate(prepare(accuracy), input);\n const x = result.value[0].v[0],\n y = result.value[1].v[0];\n if (!result.domain)\n throw new RangeError(\n 'Point lies outside a transformation source rectangle.',\n );\n if (result.error + roundoff(result.value) <= tolerance)\n return { x: coordinate(x), y: coordinate(y) };\n }\n throw new RangeError(\n 'Cannot certify point accuracy at available precision.',\n );\n },\n }) as PathTransform;\n definitions.set(value, factories);\n return value;\n}\nfunction definition(value: PathTransform): readonly Factory[] {\n const result = definitions.get(value);\n if (!result)\n throw new TypeError('Expected a constructor-created PathTransform.');\n return result;\n}\n/**\n * Apply mappings in the order written. Empty composition is identity.\n *\n * @param transforms - Point mappings in the order they should be applied. See\n * {@link PathTransform} .\n * @returns One mapping that applies each supplied transform in order. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function composeTransforms(\n ...transforms: readonly PathTransform[]\n): PathTransform {\n return make(transforms.flatMap((t) => [...definition(t)]));\n}\n/**\n * Creates a reusable 2D affine mapping; an omitted matrix produces identity.\n *\n * @param matrix - Affine matrix coefficients; omitted coefficients use the identity matrix.\n * @returns A point mapping applying the matrix. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function affineTransform(matrix: DOMMatrix2DInit = {}): PathTransform {\n const m = affineMatrix(matrix);\n return make([\n () => ({\n affine: m,\n error: () => 0,\n evaluate: ([x, y]) => [\n add(add(scale(x, m.a), scale(y, m.c)), constant(m.e)),\n add(add(scale(x, m.b), scale(y, m.d)), constant(m.f)),\n ],\n }),\n ]);\n}\n/**\n * Maps a source rectangle into four destination corners using bilinear or perspective\n * interpolation.\n *\n * @param options - Source rectangle and destination corner positions. See\n * {@link QuadTransformOptions} .\n * @returns A point mapping from the source rectangle to the destination quadrilateral. See\n * {@link PathTransform} .\n *\n * @see {@link QuadTransformOptions}\n * @see {@link PathTransform}\n */\nexport function quadTransform(options: QuadTransformOptions): PathTransform {\n const source = rectangle(options.source),\n mode = options.mode === undefined ? 'bilinear' : options.mode;\n const names = ['topLeft', 'topRight', 'bottomLeft', 'bottomRight'] as const;\n const corners = names.map((n) => ({\n x: coordinate(options.destination?.[n]?.x),\n y: coordinate(options.destination?.[n]?.y),\n }));\n const destination = Object.fromEntries(\n names.map((n, i) => [n, corners[i]]),\n ) as unknown as PathWarpCorners;\n // Reuse the existing convexity/pole validation, including empty geometry validation.\n warpPath(new PathGeometry(), { source, destination, mode, tolerance: 1 });\n const [a, b, c, d] = corners;\n const dx1 = b.x - d.x,\n dx2 = c.x - d.x,\n dx3 = a.x - b.x - c.x + d.x;\n const dy1 = b.y - d.y,\n dy2 = c.y - d.y,\n dy3 = a.y - b.y - c.y + d.y;\n const det = dx1 * dy2 - dx2 * dy1;\n const g = mode === 'perspective' ? (dx3 * dy2 - dx2 * dy3) / det : 0;\n const h = mode === 'perspective' ? (dx1 * dy3 - dx3 * dy1) / det : 0;\n return make([\n () => ({\n apply: (path, quality) =>\n warpPath(path, {\n source,\n destination,\n mode,\n tolerance: quality.tolerance,\n maxSegments: quality.maxSegments,\n }),\n error: () => 0,\n evaluate: (input) => {\n const [u, v] = normalize(input, source);\n if (mode === 'bilinear')\n return [\n lerp(\n lerp(constant(a.x), constant(b.x), u),\n lerp(constant(c.x), constant(d.x), u),\n v,\n ),\n lerp(\n lerp(constant(a.y), constant(b.y), u),\n lerp(constant(c.y), constant(d.y), u),\n v,\n ),\n ];\n const w = reciprocal(add(add(scale(u, g), scale(v, h)), constant(1)));\n return [\n mul(\n add(\n add(scale(u, b.x - a.x + g * b.x), scale(v, c.x - a.x + h * c.x)),\n constant(a.x),\n ),\n w,\n ),\n mul(\n add(\n add(scale(u, b.y - a.y + g * b.y), scale(v, c.y - a.y + h * c.y)),\n constant(a.y),\n ),\n w,\n ),\n ];\n },\n }),\n ]);\n}\n/**\n * Maps a source rectangle between ordered guide paths using linear interpolation.\n *\n * @param options - Source bounds and envelope guides defining the deformation. See\n * {@link EnvelopeTransformOptions} .\n * @returns A point mapping that deforms the source into the envelope. See {@link PathTransform}.\n *\n * @see {@link EnvelopeTransformOptions}\n * @see {@link PathTransform}\n */\nexport function envelopeTransform(\n options: EnvelopeTransformOptions,\n): PathTransform {\n const source = rectangle(options.source);\n if (options.interpolation !== undefined && options.interpolation !== 'linear')\n throw new TypeError('Unsupported envelope interpolation.');\n if (options.guides && (options.top || options.bottom))\n throw new TypeError('Specify guides or top/bottom, not both.');\n const guides = (\n options.guides ?? [\n { at: 0, path: options.top! },\n { at: 1, path: options.bottom! },\n ]\n ).map((g) => ({ at: coordinate(g.at), guide: snapshotGuide(g.path) }));\n if (\n guides.length < 2 ||\n guides[0].at !== 0 ||\n guides.at(-1)!.at !== 1 ||\n guides.some((g, i) => i > 0 && g.at <= guides[i - 1].at)\n )\n throw new RangeError('Envelope guides must strictly increase from 0 to 1.');\n return make([\n (accuracy) => {\n const sampled = guides.map((g) => sampleGuide(g.guide, accuracy));\n const error = Math.max(...sampled.map((g) => g.error));\n const evaluateBand = (input: Pair, i: number): Pair => {\n const [u, v] = normalize(input, source),\n a = sampled[i].evaluate(u),\n b = sampled[i + 1].evaluate(u);\n const t = scale(\n sub(v, constant(guides[i].at)),\n 1 / (guides[i + 1].at - guides[i].at),\n );\n return [lerp(a[0], b[0], t), lerp(a[1], b[1], t)];\n };\n return {\n error: () => error,\n domain: (input, margin) =>\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin,\n evaluate: (input) => {\n const v0 = (input[1].v[0] - source.y) / source.height,\n v1 = (input[1].v[1] - source.y) / source.height;\n let first = 0;\n while (first < guides.length - 2 && guides[first + 1].at <= v0)\n first++;\n let last = first;\n while (last < guides.length - 2 && guides[last + 1].at < v1) last++;\n if (first === last) return evaluateBand(input, first);\n const outputs: Pair[] = [];\n for (let i = first; i <= last; i++) {\n const y = {\n ...input[1],\n v: [\n Math.max(\n input[1].v[0],\n source.y + guides[i].at * source.height,\n ),\n Math.min(\n input[1].v[1],\n source.y + guides[i + 1].at * source.height,\n ),\n ] as const,\n };\n outputs.push(evaluateBand([input[0], y], i));\n }\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n },\n };\n },\n ]);\n}\nfunction roundoff(pair: Pair): number {\n return Number.EPSILON * 512 * Math.max(1, ...pair.map((p) => absI(p.v)));\n}\nfunction evaluate(\n stages: readonly Stage[],\n input: Pair,\n): { value: Pair; error: number; domain: boolean } {\n let value = input,\n error = 0,\n domain = true;\n for (const stage of stages) {\n // Bound propagation of guide approximation through every later map via its Jacobian.\n if (error > 0) {\n const box = value.map((p) => ({\n v: [p.v[0] - error, p.v[1] + error] as const,\n d: [0, 0] as const,\n dd: [0, 0] as const,\n })) as unknown as Pair;\n const dx = stage.evaluate([{ ...box[0], d: [1, 1] }, box[1]]);\n const dy = stage.evaluate([box[0], { ...box[1], d: [1, 1] }]);\n error *= Math.hypot(\n absI(dx[0].d),\n absI(dx[1].d),\n absI(dy[0].d),\n absI(dy[1].d),\n );\n }\n domain &&= stage.domain?.(value, roundoff(value)) ?? true;\n error += stage.error(value);\n value = stage.evaluate(value);\n }\n return { value, error, domain };\n}\n/**\n * Return independent geometry. Nonlinear mappings approximate the final composed curve once.\n *\n * @param path - Source geometry; it is not modified. See {@link PathGeometry}.\n * @param transform - Point mapping to apply to the source. See {@link PathTransform}.\n * @param options - Approximation tolerance and work limits for transformed curves. See\n * {@link TransformPathOptions} .\n * @returns Independent geometry containing the transformed path. See {@link PathGeometry}.\n *\n * @see {@link PathGeometry}\n * @see {@link PathTransform}\n * @see {@link TransformPathOptions}\n */\nexport function transformPath(\n path: PathGeometry,\n transform: PathTransform,\n options: TransformPathOptions,\n): PathGeometry {\n if (!(path instanceof PathGeometry))\n throw new TypeError('transformPath requires PathGeometry.');\n const factories = definition(transform),\n tolerance = positive(options?.tolerance, 'tolerance');\n const maxSegments = positive(\n options.maxSegments === undefined ? 1_000_000 : options.maxSegments,\n 'maxSegments',\n );\n if (!Number.isSafeInteger(maxSegments))\n throw new RangeError('maxSegments must be a safe integer.');\n let work = 0;\n for (\n let attempt = 0, accuracy = tolerance / 32;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const stages = factories.map((f) => f(accuracy));\n if (stages.length === 1 && stages[0].apply)\n return stages[0].apply(path, options);\n if (stages.every((s) => s.affine)) {\n if (path.segmentCount > maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n let result = path.clone();\n for (const s of stages) result = applyAffine(result, s.affine!);\n return result;\n }\n const output = new PathGeometry();\n let retry = false;\n const reserve = () => {\n if (output.segmentCount >= maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n };\n for (const item of bendSpans(path)) {\n if (item.type === 'close') {\n reserve();\n output.closePath();\n continue;\n }\n if (item.type === 'move') {\n const r = evaluate(stages, [\n constant(item.point[0]),\n constant(item.point[1]),\n ]);\n if (!r.domain)\n throw new RangeError(\n 'Path lies outside a transformation source rectangle.',\n );\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n if (r.error + roundoff(r.value) > tolerance)\n throw new RangeError('Cannot certify transform precision.');\n reserve();\n output.moveTo(coordinate(r.value[0].v[0]), coordinate(r.value[1].v[0]));\n continue;\n }\n const stack: { span: BendSpan; depth: number }[] = [\n { span: item.span, depth: 0 },\n ];\n while (stack.length) {\n if (++work > MAX_WORK)\n throw new RangeError('transformPath exceeded its work limit.');\n const { span, depth } = stack.pop()!,\n b = bendSpanBounds(span);\n const r = evaluate(stages, [\n { v: [b.xmin, b.xmax], d: [-b.dx, b.dx], dd: [-b.ddx, b.ddx] },\n { v: [b.ymin, b.ymax], d: [-b.dy, b.dy], dd: [-b.ddy, b.ddy] },\n ]);\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n const second = Math.hypot(absI(r.value[0].dd), absI(r.value[1].dd)) / 8;\n // A Lipschitz bound also covers piecewise-smooth guides and crossed cell boundaries.\n const first = Math.hypot(absI(r.value[0].d), absI(r.value[1].d)) / 2;\n const bound = Math.min(second, first) + 2 * r.error + roundoff(r.value);\n if (r.domain && bound <= tolerance) {\n const end =\n 'points' in span\n ? span.points.at(-1)!\n : [\n span.arc.cx +\n span.arc.ux *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vx *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n span.arc.cy +\n span.arc.uy *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vy *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n ];\n const p = evaluate(stages, [constant(end[0]), constant(end[1])]);\n reserve();\n output.lineTo(\n coordinate(p.value[0].v[0]),\n coordinate(p.value[1].v[0]),\n );\n } else {\n if (depth >= 52)\n throw new RangeError(\n 'Cannot certify transform tolerance or source domain.',\n );\n const [left, right] = splitBendSpan(span);\n stack.push(\n { span: right, depth: depth + 1 },\n { span: left, depth: depth + 1 },\n );\n }\n }\n if (retry) break;\n }\n if (!retry) return output;\n }\n throw new RangeError('Cannot certify composed guide accuracy.');\n}\n\n/** @internal Merge cell enclosures; derivatives may jump at the shared edge. */\nexport function mergePairs(outputs: readonly Pair[]): Pair {\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n}\nexport function sourceDomain(\n input: Pair,\n source: PathRect,\n margin: number,\n): boolean {\n return (\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin\n );\n}\nexport { meshTransform, type MeshTransformOptions } from './transform-mesh.js';\nexport {\n arcBendTransform,\n pathBendTransform,\n type ArcBendTransformOptions,\n type PathBendTransformOptions,\n type BendTransformOptions,\n} from './transform-bend.js';\n\ninterface Affine {\n readonly a: number;\n readonly b: number;\n readonly c: number;\n readonly d: number;\n readonly e: number;\n readonly f: number;\n}\nfunction affineMatrix(matrix: DOMMatrix2DInit): Affine {\n if (!matrix || typeof matrix !== 'object')\n throw new TypeError('Expected a finite 2D affine matrix.');\n const value = matrix as DOMMatrixInit;\n if (\n value.is2D === false ||\n ['m13', 'm14', 'm23', 'm24', 'm31', 'm32', 'm34', 'm43'].some(\n (k) =>\n value[k as keyof DOMMatrixInit] !== undefined &&\n value[k as keyof DOMMatrixInit] !== 0,\n ) ||\n [value.m33, value.m44].some((n) => n !== undefined && n !== 1)\n )\n throw new RangeError('Expected a finite 2D affine matrix.');\n const pairs = [\n ['a', 'm11', 1],\n ['b', 'm12', 0],\n ['c', 'm21', 0],\n ['d', 'm22', 1],\n ['e', 'm41', 0],\n ['f', 'm42', 0],\n ] as const;\n const result = {} as Record<string, number>;\n for (const [key, alias, fallback] of pairs) {\n const a = value[key],\n b = value[alias];\n if (a !== undefined && b !== undefined && a !== b)\n throw new TypeError('Conflicting affine matrix aliases.');\n result[key] = coordinate(\n a === undefined ? (b === undefined ? fallback : b) : a,\n );\n }\n return result as unknown as Affine;\n}\nfunction applyAffine(path: PathGeometry, m: Affine): PathGeometry {\n const p = (x: number, y: number, vector = false) => ({\n x: coordinate(m.a * x + m.c * y + (vector ? 0 : m.e)),\n y: coordinate(m.b * x + m.d * y + (vector ? 0 : m.f)),\n });\n const segments = Array.from(path, (segment) => {\n switch (segment.type) {\n case 'close':\n return segment;\n case 'move':\n case 'line':\n return { ...segment, ...p(segment.x, segment.y) };\n case 'quadratic': {\n const control = p(segment.cpx, segment.cpy);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cpx: control.x,\n cpy: control.y,\n };\n }\n case 'cubic': {\n const a = p(segment.cp1x, segment.cp1y),\n b = p(segment.cp2x, segment.cp2y);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cp1x: a.x,\n cp1y: a.y,\n cp2x: b.x,\n cp2y: b.y,\n };\n }\n case 'arc': {\n const center = p(segment.cx, segment.cy),\n u = p(segment.ux, segment.uy, true),\n v = p(segment.vx, segment.vy, true);\n return {\n ...segment,\n cx: center.x,\n cy: center.y,\n ux: u.x,\n uy: u.y,\n vx: v.x,\n vy: v.y,\n };\n }\n }\n });\n const result = new PathGeometry();\n result.spliceSegments(0, 0, segments);\n return result;\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { PathGeometry } from './path-geometry.js';\nimport {\n bendSpans,\n bendSpanBounds,\n splitBendSpan,\n type BendSpan,\n} from './path-bend-spans.js';\nimport {\n absI,\n constant,\n add,\n sub,\n scale,\n mul,\n lerp,\n reciprocal,\n type Pair,\n} from './transform-math.js';\nimport {\n snapshotGuide,\n sampleGuide,\n type PathGuide,\n} from './transform-guide.js';\nimport {\n warpPath,\n type PathWarpCorners,\n type PathWarpMode,\n} from './path-warp.js';\n\n/**\n * A point in source or destination path coordinates.\n *\n * @see {@link PathTransform}\n * @see {@link PathRect}\n */\nexport interface PathPoint {\n /**\n * Horizontal coordinate or displacement in the containing coordinate system. See\n * {@link PathPoint}.\n */\n readonly x: number;\n /**\n * Vertical coordinate or displacement in the containing coordinate system. See {@link PathPoint}\n * .\n */\n readonly y: number;\n}\n/**\n * A source rectangle with an origin and finite positive dimensions.\n *\n * @see {@link PathPoint}\n * @see {@link QuadTransformOptions}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface PathRect extends PathPoint {\n /** Horizontal extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly width: number;\n /** Vertical extent in the units of the containing geometry or surface. See {@link PathRect}. */\n readonly height: number;\n}\ndeclare const transformBrand: unique symbol;\n/**\n * A constructor-created, reusable coordinate mapping for path transformation.\n *\n * @see {@link PathPoint}\n * @see {@link transformPath}\n * @see {@link composeTransforms}\n * @see {@link affineTransform}\n */\nexport interface PathTransform {\n readonly [transformBrand]: true;\n /**\n * Evaluate in ordinary source/destination coordinates. Guide approximation is bounded by\n * tolerance.\n * @param point - Source point in the transform's input coordinate system. See {@link PathPoint}.\n * @param options - Optional approximation tolerance for evaluating the mapping.\n * @returns The mapped point in the transform's output coordinate system. See {@link PathPoint}.\n */\n mapPoint(\n point: PathPoint,\n options?: {\n /** Positive maximum geometric approximation error. See {@link PathTransform}. */\n readonly tolerance?: number;\n },\n ): PathPoint;\n}\n/**\n * Accuracy and output-segment limits for applying a path transform.\n *\n * @see {@link transformPath}\n */\nexport interface TransformPathOptions {\n /** Positive maximum geometric approximation error. See {@link TransformPathOptions}. */\n readonly tolerance: number;\n /** Upper bound on the number of output path segments. See {@link TransformPathOptions}. */\n readonly maxSegments?: number;\n}\n/**\n * The four destination corners used by a quadrilateral path transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadCorners = PathWarpCorners;\n/**\n * Selects bilinear or perspective interpolation for a quadrilateral transform.\n *\n * @see {@link QuadTransformOptions}\n */\nexport type PathQuadMode = PathWarpMode;\n/**\n * Source rectangle, destination corners, and interpolation mode for a quadrilateral transform.\n *\n * @see {@link PathRect}\n * @see {@link PathQuadCorners}\n * @see {@link PathQuadMode}\n * @see {@link quadTransform}\n */\nexport interface QuadTransformOptions {\n /** Source rectangle mapped to the destination quadrilateral. See {@link PathRect}. */\n readonly source: PathRect;\n /** Destination corners into which the source rectangle maps. See {@link PathQuadCorners}. */\n readonly destination: PathQuadCorners;\n /** Selects the supported mapping, placement, or result policy. See {@link PathQuadMode}. */\n readonly mode?: PathQuadMode;\n}\n/**\n * A guide path positioned at a normalized station across an envelope.\n *\n * @see {@link PathGuide}\n * @see {@link EnvelopeTransformOptions}\n */\nexport interface EnvelopeGuide {\n /** Normalized station position. See {@link EnvelopeGuide}. */\n readonly at: number;\n /** Path geometry used by this operation. See {@link PathGuide}. */\n readonly path: PathGuide;\n}\n/**\n * Source rectangle and either a top/bottom pair or ordered envelope guides.\n *\n * @see {@link PathRect}\n * @see {@link PathGuide}\n * @see {@link EnvelopeGuide}\n * @see {@link envelopeTransform}\n */\nexport type EnvelopeTransformOptions = {\n /** Source rectangle mapped between the envelope guides. See {@link PathRect}. */\n readonly source: PathRect;\n /** Interpolation between successive guide paths; only linear interpolation is supported. See {@link EnvelopeTransformOptions}. */\n readonly interpolation?: 'linear';\n} & (\n | {\n /** Top edge value or top envelope guide. See {@link PathGuide}. */\n readonly top: PathGuide;\n /** Bottom edge value or bottom envelope guide. See {@link PathGuide}. */\n readonly bottom: PathGuide;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly guides?: never;\n }\n | {\n /**\n * Ordered guide paths defining the envelope from its first to last station. See\n * {@link EnvelopeGuide}.\n */\n readonly guides: readonly EnvelopeGuide[];\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly top?: never;\n /**\n * Not accepted in this variant; use the alternative fields instead. See\n * {@link EnvelopeTransformOptions}.\n */\n readonly bottom?: never;\n }\n);\nexport type {\n PathGuide,\n PathGuideOptions,\n PathGuideStation,\n} from './transform-guide.js';\n\nexport interface Stage {\n apply?(path: PathGeometry, options: TransformPathOptions): PathGeometry;\n evaluate(input: Pair): Pair;\n error(input: Pair): number;\n domain?(point: Pair, margin: number): boolean;\n affine?: Affine;\n}\nexport type Factory = (accuracy: number) => Stage;\nconst definitions = new WeakMap<PathTransform, readonly Factory[]>();\nconst MAX_WORK = 2_000_000;\nexport const coordinate = (value: number, label = 'coordinate') => {\n if (typeof value !== 'number')\n throw new TypeError(`${label} must be a number.`);\n if (!Number.isFinite(value)) throw new RangeError(`${label} must be finite.`);\n return value;\n};\nexport const positive = (value: number, label: string) => {\n coordinate(value, label);\n if (value <= 0) throw new RangeError(`${label} must be positive.`);\n return value;\n};\nexport function rectangle(input: PathRect): PathRect {\n return {\n x: coordinate(input?.x),\n y: coordinate(input?.y),\n width: positive(input?.width, 'source.width'),\n height: positive(input?.height, 'source.height'),\n };\n}\nexport const normalize = (input: Pair, r: PathRect): Pair => [\n scale(sub(input[0], constant(r.x)), 1 / r.width),\n scale(sub(input[1], constant(r.y)), 1 / r.height),\n];\nexport function make(factories: readonly Factory[]): PathTransform {\n // One cached preparation only; drag sessions cannot grow a tolerance cache indefinitely.\n let cachedAccuracy = NaN,\n cached: readonly Stage[] = [];\n const prepare = (accuracy: number) => {\n if (accuracy !== cachedAccuracy) {\n cached = factories.map((f) => f(accuracy));\n cachedAccuracy = accuracy;\n }\n return cached;\n };\n const value = Object.freeze({\n mapPoint(point: PathPoint, options: { tolerance?: number } = {}) {\n const tolerance = positive(options.tolerance ?? 0.0001, 'tolerance');\n const input: Pair = [\n constant(coordinate(point?.x)),\n constant(coordinate(point?.y)),\n ];\n for (\n let accuracy = tolerance / 16, attempt = 0;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const result = evaluate(prepare(accuracy), input);\n const x = result.value[0].v[0],\n y = result.value[1].v[0];\n if (!result.domain)\n throw new RangeError(\n 'Point lies outside a transformation source rectangle.',\n );\n if (result.error + roundoff(result.value) <= tolerance)\n return { x: coordinate(x), y: coordinate(y) };\n }\n throw new RangeError(\n 'Cannot certify point accuracy at available precision.',\n );\n },\n }) as PathTransform;\n definitions.set(value, factories);\n return value;\n}\nfunction definition(value: PathTransform): readonly Factory[] {\n const result = definitions.get(value);\n if (!result)\n throw new TypeError('Expected a constructor-created PathTransform.');\n return result;\n}\n/**\n * Apply mappings in the order written. Empty composition is identity.\n *\n * @param transforms - Point mappings in the order they should be applied. See\n * {@link PathTransform} .\n * @returns One mapping that applies each supplied transform in order. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function composeTransforms(\n ...transforms: readonly PathTransform[]\n): PathTransform {\n return make(transforms.flatMap((t) => [...definition(t)]));\n}\n/**\n * Creates a reusable 2D affine mapping; an omitted matrix produces identity.\n *\n * @param matrix - Affine matrix coefficients; omitted coefficients use the identity matrix.\n * @returns A point mapping applying the matrix. See {@link PathTransform}.\n *\n * @see {@link PathTransform}\n */\nexport function affineTransform(matrix: DOMMatrix2DInit = {}): PathTransform {\n const m = affineMatrix(matrix);\n return make([\n () => ({\n affine: m,\n error: () => 0,\n evaluate: ([x, y]) => [\n add(add(scale(x, m.a), scale(y, m.c)), constant(m.e)),\n add(add(scale(x, m.b), scale(y, m.d)), constant(m.f)),\n ],\n }),\n ]);\n}\n/**\n * Maps a source rectangle into four destination corners using bilinear or perspective\n * interpolation.\n *\n * @param options - Source rectangle and destination corner positions. See\n * {@link QuadTransformOptions} .\n * @returns A point mapping from the source rectangle to the destination quadrilateral. See\n * {@link PathTransform} .\n *\n * @see {@link QuadTransformOptions}\n * @see {@link PathTransform}\n */\nexport function quadTransform(options: QuadTransformOptions): PathTransform {\n const source = rectangle(options.source),\n mode = options.mode === undefined ? 'bilinear' : options.mode;\n const names = ['topLeft', 'topRight', 'bottomLeft', 'bottomRight'] as const;\n const corners = names.map((n) => ({\n x: coordinate(options.destination?.[n]?.x),\n y: coordinate(options.destination?.[n]?.y),\n }));\n const destination = Object.fromEntries(\n names.map((n, i) => [n, corners[i]]),\n ) as unknown as PathWarpCorners;\n // Reuse the existing convexity/pole validation, including empty geometry validation.\n warpPath(new PathGeometry(), { source, destination, mode, tolerance: 1 });\n const [a, b, c, d] = corners;\n const dx1 = b.x - d.x,\n dx2 = c.x - d.x,\n dx3 = a.x - b.x - c.x + d.x;\n const dy1 = b.y - d.y,\n dy2 = c.y - d.y,\n dy3 = a.y - b.y - c.y + d.y;\n const det = dx1 * dy2 - dx2 * dy1;\n const g = mode === 'perspective' ? (dx3 * dy2 - dx2 * dy3) / det : 0;\n const h = mode === 'perspective' ? (dx1 * dy3 - dx3 * dy1) / det : 0;\n return make([\n () => ({\n apply: (path, quality) =>\n warpPath(path, {\n source,\n destination,\n mode,\n tolerance: quality.tolerance,\n maxSegments: quality.maxSegments,\n }),\n error: () => 0,\n evaluate: (input) => {\n const [u, v] = normalize(input, source);\n if (mode === 'bilinear')\n return [\n lerp(\n lerp(constant(a.x), constant(b.x), u),\n lerp(constant(c.x), constant(d.x), u),\n v,\n ),\n lerp(\n lerp(constant(a.y), constant(b.y), u),\n lerp(constant(c.y), constant(d.y), u),\n v,\n ),\n ];\n const w = reciprocal(add(add(scale(u, g), scale(v, h)), constant(1)));\n return [\n mul(\n add(\n add(scale(u, b.x - a.x + g * b.x), scale(v, c.x - a.x + h * c.x)),\n constant(a.x),\n ),\n w,\n ),\n mul(\n add(\n add(scale(u, b.y - a.y + g * b.y), scale(v, c.y - a.y + h * c.y)),\n constant(a.y),\n ),\n w,\n ),\n ];\n },\n }),\n ]);\n}\n/**\n * Maps a source rectangle between ordered guide paths using linear interpolation.\n *\n * @param options - Source bounds and envelope guides defining the deformation. See\n * {@link EnvelopeTransformOptions} .\n * @returns A point mapping that deforms the source into the envelope. See {@link PathTransform}.\n *\n * @see {@link EnvelopeTransformOptions}\n * @see {@link PathTransform}\n */\nexport function envelopeTransform(\n options: EnvelopeTransformOptions,\n): PathTransform {\n const source = rectangle(options.source);\n if (options.interpolation !== undefined && options.interpolation !== 'linear')\n throw new TypeError('Unsupported envelope interpolation.');\n if (options.guides && (options.top || options.bottom))\n throw new TypeError('Specify guides or top/bottom, not both.');\n const guides = (\n options.guides ?? [\n { at: 0, path: options.top! },\n { at: 1, path: options.bottom! },\n ]\n ).map((g) => ({ at: coordinate(g.at), guide: snapshotGuide(g.path) }));\n if (\n guides.length < 2 ||\n guides[0].at !== 0 ||\n guides.at(-1)!.at !== 1 ||\n guides.some((g, i) => i > 0 && g.at <= guides[i - 1].at)\n )\n throw new RangeError('Envelope guides must strictly increase from 0 to 1.');\n return make([\n (accuracy) => {\n const sampled = guides.map((g) => sampleGuide(g.guide, accuracy));\n const error = Math.max(...sampled.map((g) => g.error));\n const evaluateBand = (input: Pair, i: number): Pair => {\n const [u, v] = normalize(input, source),\n a = sampled[i].evaluate(u),\n b = sampled[i + 1].evaluate(u);\n const t = scale(\n sub(v, constant(guides[i].at)),\n 1 / (guides[i + 1].at - guides[i].at),\n );\n return [lerp(a[0], b[0], t), lerp(a[1], b[1], t)];\n };\n return {\n error: () => error,\n domain: (input, margin) =>\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin,\n evaluate: (input) => {\n const v0 = (input[1].v[0] - source.y) / source.height,\n v1 = (input[1].v[1] - source.y) / source.height;\n let first = 0;\n while (first < guides.length - 2 && guides[first + 1].at <= v0)\n first++;\n let last = first;\n while (last < guides.length - 2 && guides[last + 1].at < v1) last++;\n if (first === last) return evaluateBand(input, first);\n const outputs: Pair[] = [];\n for (let i = first; i <= last; i++) {\n const y = {\n ...input[1],\n v: [\n Math.max(\n input[1].v[0],\n source.y + guides[i].at * source.height,\n ),\n Math.min(\n input[1].v[1],\n source.y + guides[i + 1].at * source.height,\n ),\n ] as const,\n };\n outputs.push(evaluateBand([input[0], y], i));\n }\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n },\n };\n },\n ]);\n}\nfunction roundoff(pair: Pair): number {\n return Number.EPSILON * 512 * Math.max(1, ...pair.map((p) => absI(p.v)));\n}\nfunction evaluate(\n stages: readonly Stage[],\n input: Pair,\n): { value: Pair; error: number; domain: boolean } {\n let value = input,\n error = 0,\n domain = true;\n for (const stage of stages) {\n // Bound propagation of guide approximation through every later map via its Jacobian.\n if (error > 0) {\n const box = value.map((p) => ({\n v: [p.v[0] - error, p.v[1] + error] as const,\n d: [0, 0] as const,\n dd: [0, 0] as const,\n })) as unknown as Pair;\n const dx = stage.evaluate([{ ...box[0], d: [1, 1] }, box[1]]);\n const dy = stage.evaluate([box[0], { ...box[1], d: [1, 1] }]);\n error *= Math.hypot(\n absI(dx[0].d),\n absI(dx[1].d),\n absI(dy[0].d),\n absI(dy[1].d),\n );\n }\n domain &&= stage.domain?.(value, roundoff(value)) ?? true;\n error += stage.error(value);\n value = stage.evaluate(value);\n }\n return { value, error, domain };\n}\n/**\n * Return independent geometry. Nonlinear mappings approximate the final composed curve once.\n *\n * @param path - Source geometry; it is not modified. See {@link PathGeometry}.\n * @param transform - Point mapping to apply to the source. See {@link PathTransform}.\n * @param options - Approximation tolerance and work limits for transformed curves. See\n * {@link TransformPathOptions} .\n * @returns Independent geometry containing the transformed path. See {@link PathGeometry}.\n *\n * @see {@link PathGeometry}\n * @see {@link PathTransform}\n * @see {@link TransformPathOptions}\n */\nexport function transformPath(\n path: PathGeometry,\n transform: PathTransform,\n options: TransformPathOptions,\n): PathGeometry {\n if (!(path instanceof PathGeometry))\n throw new TypeError('transformPath requires PathGeometry.');\n const factories = definition(transform),\n tolerance = positive(options?.tolerance, 'tolerance');\n const maxSegments = positive(\n options.maxSegments === undefined ? 1_000_000 : options.maxSegments,\n 'maxSegments',\n );\n if (!Number.isSafeInteger(maxSegments))\n throw new RangeError('maxSegments must be a safe integer.');\n let work = 0;\n for (\n let attempt = 0, accuracy = tolerance / 32;\n attempt < 9;\n attempt++, accuracy /= 16\n ) {\n const stages = factories.map((f) => f(accuracy));\n if (stages.length === 1 && stages[0].apply)\n return stages[0].apply(path, options);\n if (stages.every((s) => s.affine)) {\n if (path.segmentCount > maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n let result = path.clone();\n for (const s of stages) result = applyAffine(result, s.affine!);\n return result;\n }\n const output = new PathGeometry();\n let retry = false;\n const reserve = () => {\n if (output.segmentCount >= maxSegments)\n throw new RangeError('transformPath exceeded maxSegments.');\n };\n for (const item of bendSpans(path)) {\n if (item.type === 'close') {\n reserve();\n output.closePath();\n continue;\n }\n if (item.type === 'move') {\n const r = evaluate(stages, [\n constant(item.point[0]),\n constant(item.point[1]),\n ]);\n if (!r.domain)\n throw new RangeError(\n 'Path lies outside a transformation source rectangle.',\n );\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n if (r.error + roundoff(r.value) > tolerance)\n throw new RangeError('Cannot certify transform precision.');\n reserve();\n output.moveTo(coordinate(r.value[0].v[0]), coordinate(r.value[1].v[0]));\n continue;\n }\n const stack: { span: BendSpan; depth: number }[] = [\n { span: item.span, depth: 0 },\n ];\n while (stack.length) {\n if (++work > MAX_WORK)\n throw new RangeError('transformPath exceeded its work limit.');\n const { span, depth } = stack.pop()!,\n b = bendSpanBounds(span);\n const r = evaluate(stages, [\n { v: [b.xmin, b.xmax], d: [-b.dx, b.dx], dd: [-b.ddx, b.ddx] },\n { v: [b.ymin, b.ymax], d: [-b.dy, b.dy], dd: [-b.ddy, b.ddy] },\n ]);\n if (r.error > tolerance / 4) {\n retry = true;\n break;\n }\n const second = Math.hypot(absI(r.value[0].dd), absI(r.value[1].dd)) / 8;\n // A Lipschitz bound also covers piecewise-smooth guides and crossed cell boundaries.\n const first = Math.hypot(absI(r.value[0].d), absI(r.value[1].d)) / 2;\n const bound = Math.min(second, first) + 2 * r.error + roundoff(r.value);\n if (r.domain && bound <= tolerance) {\n const end =\n 'points' in span\n ? span.points.at(-1)!\n : [\n span.arc.cx +\n span.arc.ux *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vx *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n span.arc.cy +\n span.arc.uy *\n Math.cos(span.arc.startAngle + span.arc.sweep) +\n span.arc.vy *\n Math.sin(span.arc.startAngle + span.arc.sweep),\n ];\n const p = evaluate(stages, [constant(end[0]), constant(end[1])]);\n reserve();\n output.lineTo(\n coordinate(p.value[0].v[0]),\n coordinate(p.value[1].v[0]),\n );\n } else {\n if (depth >= 52)\n throw new RangeError(\n 'Cannot certify transform tolerance or source domain.',\n );\n const [left, right] = splitBendSpan(span);\n stack.push(\n { span: right, depth: depth + 1 },\n { span: left, depth: depth + 1 },\n );\n }\n }\n if (retry) break;\n }\n if (!retry) return output;\n }\n throw new RangeError('Cannot certify composed guide accuracy.');\n}\n\n/** @internal Merge cell enclosures; derivatives may jump at the shared edge. */\nexport function mergePairs(outputs: readonly Pair[]): Pair {\n return [0, 1].map((axis) => ({\n v: [\n Math.min(...outputs.map((p) => p[axis].v[0])),\n Math.max(...outputs.map((p) => p[axis].v[1])),\n ],\n d: [\n Math.min(...outputs.map((p) => p[axis].d[0])),\n Math.max(...outputs.map((p) => p[axis].d[1])),\n ],\n dd: [-Infinity, Infinity],\n })) as unknown as Pair;\n}\nexport function sourceDomain(\n input: Pair,\n source: PathRect,\n margin: number,\n): boolean {\n return (\n input[0].v[0] >= source.x - margin &&\n input[0].v[1] <= source.x + source.width + margin &&\n input[1].v[0] >= source.y - margin &&\n input[1].v[1] <= source.y + source.height + margin\n );\n}\nexport { meshTransform, type MeshTransformOptions } from './transform-mesh.js';\nexport {\n arcBendTransform,\n pathBendTransform,\n type ArcBendTransformOptions,\n type PathBendTransformOptions,\n type BendTransformOptions,\n} from './transform-bend.js';\n\ninterface Affine {\n readonly a: number;\n readonly b: number;\n readonly c: number;\n readonly d: number;\n readonly e: number;\n readonly f: number;\n}\nfunction affineMatrix(matrix: DOMMatrix2DInit): Affine {\n if (!matrix || typeof matrix !== 'object')\n throw new TypeError('Expected a finite 2D affine matrix.');\n const value = matrix as DOMMatrixInit;\n if (\n value.is2D === false ||\n nonzeroMatrixValue(value.m13) || nonzeroMatrixValue(value.m14) ||\n nonzeroMatrixValue(value.m23) || nonzeroMatrixValue(value.m24) ||\n nonzeroMatrixValue(value.m31) || nonzeroMatrixValue(value.m32) ||\n nonzeroMatrixValue(value.m34) || nonzeroMatrixValue(value.m43) ||\n (value.m33 !== undefined && value.m33 !== 1) ||\n (value.m44 !== undefined && value.m44 !== 1)\n )\n throw new RangeError('Expected a finite 2D affine matrix.');\n return {\n a: affineValue(value.a, value.m11, 1),\n b: affineValue(value.b, value.m12, 0),\n c: affineValue(value.c, value.m21, 0),\n d: affineValue(value.d, value.m22, 1),\n e: affineValue(value.e, value.m41, 0),\n f: affineValue(value.f, value.m42, 0),\n };\n}\nfunction affineValue(value: number | undefined, alias: number | undefined, fallback: number): number {\n if (value !== undefined && alias !== undefined && value !== alias)\n throw new TypeError('Conflicting affine matrix aliases.');\n return coordinate(value === undefined ? (alias === undefined ? fallback : alias) : value);\n}\n\nfunction applyAffine(path: PathGeometry, m: Affine): PathGeometry {\n const p = (x: number, y: number, vector = false) => ({\n x: coordinate(m.a * x + m.c * y + (vector ? 0 : m.e)),\n y: coordinate(m.b * x + m.d * y + (vector ? 0 : m.f)),\n });\n const segments = Array.from(path, (segment) => {\n switch (segment.type) {\n case 'close':\n return segment;\n case 'move':\n case 'line':\n return { ...segment, ...p(segment.x, segment.y) };\n case 'quadratic': {\n const control = p(segment.cpx, segment.cpy);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cpx: control.x,\n cpy: control.y,\n };\n }\n case 'cubic': {\n const a = p(segment.cp1x, segment.cp1y),\n b = p(segment.cp2x, segment.cp2y);\n return {\n ...segment,\n ...p(segment.x, segment.y),\n cp1x: a.x,\n cp1y: a.y,\n cp2x: b.x,\n cp2y: b.y,\n };\n }\n case 'arc': {\n const center = p(segment.cx, segment.cy),\n u = p(segment.ux, segment.uy, true),\n v = p(segment.vx, segment.vy, true);\n return {\n ...segment,\n cx: center.x,\n cy: center.y,\n ux: u.x,\n uy: u.y,\n vx: v.x,\n vy: v.y,\n };\n }\n }\n });\n const result = new PathGeometry();\n result.spliceSegments(0, 0, segments);\n return result;\n}\n\nfunction nonzeroMatrixValue(value: number | undefined): boolean {\n return value !== undefined && value !== 0;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const homogeneousCoordinateKeys = ["x", "y", "w"];
|
|
1
2
|
const choose = Array.from({ length: 8 }, (_, n) => {
|
|
2
3
|
const row = [1];
|
|
3
4
|
for (let i = 1; i <= n; i++) row[i] = row[i - 1] * (n - i + 1) / i;
|
|
@@ -64,7 +65,8 @@ function frame(work, index) {
|
|
|
64
65
|
}
|
|
65
66
|
function emitSpan(span, tolerance, work, emit) {
|
|
66
67
|
const first = frame(work, 0);
|
|
67
|
-
for (
|
|
68
|
+
for (let keyIndex = 0; keyIndex < homogeneousCoordinateKeys.length; keyIndex++) {
|
|
69
|
+
const key = homogeneousCoordinateKeys[keyIndex];
|
|
68
70
|
first[key].length = span[key].length;
|
|
69
71
|
for (let i = 0; i < span[key].length; i++) {
|
|
70
72
|
const value = span[key][i];
|