@pibbl/core 0.0.1 → 0.0.3-alpha.109.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/THIRD_PARTY_NOTICES.txt +81 -0
- package/dist/features/machines/animation.d.ts +64 -0
- package/dist/features/machines/animation.js +55 -0
- package/dist/features/machines/animation.js.map +7 -0
- package/dist/features/machines/animation.mjs +1 -0
- package/dist/features/machines/assign.d.ts +16 -0
- package/dist/features/machines/assign.js +15 -0
- package/dist/features/machines/assign.js.map +7 -0
- package/dist/features/machines/callback.d.ts +9 -0
- package/dist/features/machines/callback.js +7 -0
- package/dist/features/machines/callback.js.map +7 -0
- package/dist/features/machines/hook.d.ts +30 -0
- package/dist/features/machines/hook.js +37 -0
- package/dist/features/machines/hook.js.map +7 -0
- package/dist/features/machines/index.d.ts +6 -0
- package/dist/features/machines/index.js +12 -0
- package/dist/features/machines/index.js.map +7 -0
- package/dist/features/machines/index.mjs +1 -0
- package/dist/features/machines/runtime.d.ts +18 -0
- package/dist/features/machines/runtime.js +363 -0
- package/dist/features/machines/runtime.js.map +7 -0
- package/dist/features/machines/types.d.ts +164 -0
- package/dist/features/physics/2d-geometry.d.ts +3 -3
- package/dist/features/physics/2d-geometry.js.map +1 -1
- package/dist/features/physics/2d-testing.d.ts +1 -1
- package/dist/features/physics/2d-testing.js +2 -2
- package/dist/features/physics/2d-testing.js.map +2 -2
- package/dist/features/physics/2d.d.ts +115 -62
- package/dist/features/physics/2d.js +59 -28
- package/dist/features/physics/2d.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/components.js +25 -21
- package/dist/features/physics/lib/2d/canvas/components.js.map +2 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js +1 -2
- package/dist/features/physics/lib/2d/canvas/presentation.js.map +2 -2
- package/dist/features/physics/lib/2d/collision/casts.js +4 -2
- package/dist/features/physics/lib/2d/collision/casts.js.map +2 -2
- package/dist/features/physics/lib/2d/query-types.d.ts +6 -0
- package/dist/features/physics/lib/2d/runtime/controller.d.ts +7 -6
- package/dist/features/physics/lib/2d/runtime/controller.js +1 -1
- package/dist/features/physics/lib/2d/runtime/controller.js.map +2 -2
- package/dist/features/physics/lib/2d/runtime/obstacles.js +9 -11
- package/dist/features/physics/lib/2d/runtime/obstacles.js.map +2 -2
- package/dist/features/physics/lib/2d/shapes.js +8 -9
- package/dist/features/physics/lib/2d/shapes.js.map +2 -2
- package/dist/features/physics/lib/2d/types.d.ts +8 -30
- package/dist/features/physics/lib/2d/world/queries.d.ts +7 -6
- package/dist/features/physics/lib/2d/world/queries.js.map +2 -2
- package/dist/features/physics/lib/2d/world/rapier.js +22 -26
- package/dist/features/physics/lib/2d/world/rapier.js.map +2 -2
- package/dist/features/sprites/formats/aseprite.d.ts +5 -0
- package/dist/features/sprites/formats/texture-packer.d.ts +5 -0
- package/dist/features/sprites/index.d.ts +6 -0
- package/dist/features/sprites/loader.d.ts +25 -0
- package/dist/features/sprites/loader.js +6 -3
- package/dist/features/sprites/loader.js.map +2 -2
- package/dist/features/sprites/model.d.ts +75 -0
- package/dist/features/sprites/sprite.d.ts +22 -0
- package/dist/features/textures/index.d.ts +12 -2
- package/dist/features/textures/index.js +33 -1
- package/dist/features/textures/index.js.map +2 -2
- package/dist/features/textures/lib/chemical-field.d.ts +56 -0
- package/dist/features/textures/lib/chemical-field.js +154 -0
- package/dist/features/textures/lib/chemical-field.js.map +7 -0
- package/dist/features/textures/lib/chemical-recipes.d.ts +119 -0
- package/dist/features/textures/lib/chemical-recipes.js +275 -0
- package/dist/features/textures/lib/chemical-recipes.js.map +7 -0
- package/dist/features/textures/lib/definitions.d.ts +3 -18
- package/dist/features/textures/lib/definitions.js +17 -24
- package/dist/features/textures/lib/definitions.js.map +2 -2
- package/dist/features/textures/lib/geometric-patterns.d.ts +149 -0
- package/dist/features/textures/lib/geometric-patterns.js +305 -0
- package/dist/features/textures/lib/geometric-patterns.js.map +7 -0
- package/dist/features/textures/lib/gray-scott.d.ts +55 -0
- package/dist/features/textures/lib/gray-scott.js +37 -0
- package/dist/features/textures/lib/gray-scott.js.map +7 -0
- package/dist/features/textures/lib/palette.js +1 -3
- package/dist/features/textures/lib/palette.js.map +2 -2
- package/dist/features/textures/lib/patterns.d.ts +123 -0
- package/dist/features/textures/lib/patterns.js +344 -0
- package/dist/features/textures/lib/patterns.js.map +7 -0
- package/dist/features/textures/lib/rain-drops.js +2 -1
- package/dist/features/textures/lib/rain-drops.js.map +2 -2
- package/dist/features/textures/lib/reaction-diffusion.d.ts +3 -2
- package/dist/features/textures/lib/reaction-diffusion.js +9 -20
- package/dist/features/textures/lib/reaction-diffusion.js.map +2 -2
- package/dist/features/textures/lib/simulation.d.ts +10 -4
- package/dist/features/textures/lib/simulation.js +23 -13
- package/dist/features/textures/lib/simulation.js.map +2 -2
- package/dist/features/textures/lib/wasm/electric.js +8 -1
- package/dist/features/textures/lib/wasm/electric.js.map +2 -2
- package/dist/features/textures/lib/water-surface.js +1 -3
- package/dist/features/textures/lib/water-surface.js.map +2 -2
- package/dist/features/viz/index.d.ts +92 -5
- package/dist/features/viz/index.js +202 -4
- package/dist/features/viz/index.js.map +2 -2
- package/dist/features/viz/inspection/bar.d.ts +79 -0
- package/dist/features/viz/inspection/bar.js +49 -0
- package/dist/features/viz/inspection/bar.js.map +7 -0
- package/dist/features/viz/inspection/candle.d.ts +156 -0
- package/dist/features/viz/inspection/candle.js +120 -0
- package/dist/features/viz/inspection/candle.js.map +7 -0
- package/dist/features/viz/inspection/capture-types.d.ts +65 -0
- package/dist/features/viz/inspection/capture.d.ts +16 -0
- package/dist/features/viz/inspection/capture.js +49 -0
- package/dist/features/viz/inspection/capture.js.map +7 -0
- package/dist/features/viz/inspection/handler.d.ts +36 -0
- package/dist/features/viz/inspection/handler.js +91 -0
- package/dist/features/viz/inspection/handler.js.map +7 -0
- package/dist/features/viz/inspection/ohlc-bar.d.ts +132 -0
- package/dist/features/viz/inspection/ohlc-bar.js +118 -0
- package/dist/features/viz/inspection/ohlc-bar.js.map +7 -0
- package/dist/features/viz/inspection/owned-ref.d.ts +16 -0
- package/dist/features/viz/inspection/owned-ref.js +99 -0
- package/dist/features/viz/inspection/owned-ref.js.map +7 -0
- package/dist/features/viz/inspection/painted-point.d.ts +22 -0
- package/dist/features/viz/inspection/painted-point.js +29 -0
- package/dist/features/viz/inspection/painted-point.js.map +7 -0
- package/dist/features/viz/inspection/queries.d.ts +100 -0
- package/dist/features/viz/inspection/queries.js +192 -0
- package/dist/features/viz/inspection/queries.js.map +7 -0
- package/dist/features/viz/inspection/query-types.d.ts +177 -0
- package/dist/features/viz/inspection/volume.d.ts +104 -0
- package/dist/features/viz/inspection/volume.js +95 -0
- package/dist/features/viz/inspection/volume.js.map +7 -0
- package/dist/features/viz/inspection.d.ts +19 -0
- package/dist/features/viz/inspection.js +54 -0
- package/dist/features/viz/inspection.js.map +7 -0
- package/dist/features/viz/inspection.mjs +1 -0
- package/dist/features/viz/lib/area-series.d.ts +62 -0
- package/dist/features/viz/lib/area-series.js +120 -0
- package/dist/features/viz/lib/area-series.js.map +7 -0
- package/dist/features/viz/lib/axis-labels.d.ts +2 -0
- package/dist/features/viz/lib/axis-labels.js +41 -0
- package/dist/features/viz/lib/axis-labels.js.map +7 -0
- package/dist/features/viz/lib/axis-title.d.ts +23 -0
- package/dist/features/viz/lib/axis-title.js +24 -0
- package/dist/features/viz/lib/axis-title.js.map +7 -0
- package/dist/features/viz/lib/axis.d.ts +1 -1
- package/dist/features/viz/lib/axis.js +50 -50
- package/dist/features/viz/lib/axis.js.map +2 -2
- package/dist/features/viz/lib/bar-scale.d.ts +7 -0
- package/dist/features/viz/lib/bar-scale.js +34 -0
- package/dist/features/viz/lib/bar-scale.js.map +7 -0
- package/dist/features/viz/lib/bar-series.d.ts +3 -1
- package/dist/features/viz/lib/bar-series.js +21 -5
- package/dist/features/viz/lib/bar-series.js.map +2 -2
- package/dist/features/viz/lib/baseline-series.d.ts +55 -0
- package/dist/features/viz/lib/baseline-series.js +136 -0
- package/dist/features/viz/lib/baseline-series.js.map +7 -0
- package/dist/features/viz/lib/candlestick-series.d.ts +62 -0
- package/dist/features/viz/lib/candlestick-series.js +150 -0
- package/dist/features/viz/lib/candlestick-series.js.map +7 -0
- package/dist/features/viz/lib/censored-point-series.d.ts +71 -0
- package/dist/features/viz/lib/censored-point-series.js +129 -0
- package/dist/features/viz/lib/censored-point-series.js.map +7 -0
- package/dist/features/viz/lib/chart-lines.d.ts +41 -0
- package/dist/features/viz/lib/chart-lines.js +32 -0
- package/dist/features/viz/lib/chart-lines.js.map +7 -0
- package/dist/features/viz/lib/color-context.d.ts +4 -0
- package/dist/features/viz/lib/color-context.js +41 -0
- package/dist/features/viz/lib/color-context.js.map +7 -0
- package/dist/features/viz/lib/color-math.d.ts +4 -0
- package/dist/features/viz/lib/color-math.js +31 -0
- package/dist/features/viz/lib/color-math.js.map +7 -0
- package/dist/features/viz/lib/color-types.d.ts +53 -0
- package/dist/features/viz/lib/curve-definition.d.ts +49 -0
- package/dist/features/viz/lib/curve-definition.js +142 -0
- package/dist/features/viz/lib/curve-definition.js.map +7 -0
- package/dist/features/viz/lib/diverging-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/diverging-color-scale.js +51 -0
- package/dist/features/viz/lib/diverging-color-scale.js.map +7 -0
- package/dist/features/viz/lib/domain-navigation.d.ts +40 -0
- package/dist/features/viz/lib/domain-navigation.js +77 -0
- package/dist/features/viz/lib/domain-navigation.js.map +7 -0
- package/dist/features/viz/lib/editable-chart-elements.d.ts +178 -0
- package/dist/features/viz/lib/editable-chart-elements.js +733 -0
- package/dist/features/viz/lib/editable-chart-elements.js.map +7 -0
- package/dist/features/viz/lib/financial-aggregation.d.ts +127 -0
- package/dist/features/viz/lib/financial-aggregation.js +116 -0
- package/dist/features/viz/lib/financial-aggregation.js.map +7 -0
- package/dist/features/viz/lib/financial-autoscale.d.ts +64 -0
- package/dist/features/viz/lib/financial-autoscale.js +61 -0
- package/dist/features/viz/lib/financial-autoscale.js.map +7 -0
- package/dist/features/viz/lib/financial-comparison.d.ts +62 -0
- package/dist/features/viz/lib/financial-comparison.js +98 -0
- package/dist/features/viz/lib/financial-comparison.js.map +7 -0
- package/dist/features/viz/lib/financial-geometry.d.ts +77 -0
- package/dist/features/viz/lib/financial-geometry.js +67 -0
- package/dist/features/viz/lib/financial-geometry.js.map +7 -0
- package/dist/features/viz/lib/financial-indicators.d.ts +114 -0
- package/dist/features/viz/lib/financial-indicators.js +135 -0
- package/dist/features/viz/lib/financial-indicators.js.map +7 -0
- package/dist/features/viz/lib/financial-oscillators.d.ts +171 -0
- package/dist/features/viz/lib/financial-oscillators.js +265 -0
- package/dist/features/viz/lib/financial-oscillators.js.map +7 -0
- package/dist/features/viz/lib/graph/bipartite.d.ts +14 -0
- package/dist/features/viz/lib/graph/bipartite.js +250 -0
- package/dist/features/viz/lib/graph/bipartite.js.map +7 -0
- package/dist/features/viz/lib/graph/chord.d.ts +44 -0
- package/dist/features/viz/lib/graph/chord.js +348 -0
- package/dist/features/viz/lib/graph/chord.js.map +7 -0
- package/dist/features/viz/lib/graph/dependency.d.ts +26 -0
- package/dist/features/viz/lib/graph/dependency.js +140 -0
- package/dist/features/viz/lib/graph/dependency.js.map +7 -0
- package/dist/features/viz/lib/graph/force.d.ts +28 -0
- package/dist/features/viz/lib/graph/force.js +580 -0
- package/dist/features/viz/lib/graph/force.js.map +7 -0
- package/dist/features/viz/lib/graph/hierarchy.d.ts +21 -0
- package/dist/features/viz/lib/graph/hierarchy.js +112 -0
- package/dist/features/viz/lib/graph/hierarchy.js.map +7 -0
- package/dist/features/viz/lib/graph/icicle.d.ts +16 -0
- package/dist/features/viz/lib/graph/icicle.js +153 -0
- package/dist/features/viz/lib/graph/icicle.js.map +7 -0
- package/dist/features/viz/lib/graph/matrix.d.ts +30 -0
- package/dist/features/viz/lib/graph/matrix.js +243 -0
- package/dist/features/viz/lib/graph/matrix.js.map +7 -0
- package/dist/features/viz/lib/graph/neighborhood.d.ts +11 -0
- package/dist/features/viz/lib/graph/neighborhood.js +281 -0
- package/dist/features/viz/lib/graph/neighborhood.js.map +7 -0
- package/dist/features/viz/lib/graph/routes.d.ts +35 -0
- package/dist/features/viz/lib/graph/routes.js +101 -0
- package/dist/features/viz/lib/graph/routes.js.map +7 -0
- package/dist/features/viz/lib/graph/sankey.d.ts +44 -0
- package/dist/features/viz/lib/graph/sankey.js +341 -0
- package/dist/features/viz/lib/graph/sankey.js.map +7 -0
- package/dist/features/viz/lib/graph/shared.d.ts +59 -0
- package/dist/features/viz/lib/graph/shared.js +301 -0
- package/dist/features/viz/lib/graph/shared.js.map +7 -0
- package/dist/features/viz/lib/graph/tree.d.ts +11 -0
- package/dist/features/viz/lib/graph/tree.js +232 -0
- package/dist/features/viz/lib/graph/tree.js.map +7 -0
- package/dist/features/viz/lib/graph/treemap.d.ts +20 -0
- package/dist/features/viz/lib/graph/treemap.js +227 -0
- package/dist/features/viz/lib/graph/treemap.js.map +7 -0
- package/dist/features/viz/lib/graph/types.d.ts +1097 -0
- package/dist/features/viz/lib/hover-card.js +8 -9
- package/dist/features/viz/lib/hover-card.js.map +2 -2
- package/dist/features/viz/lib/hover-data.d.ts +1 -1
- package/dist/features/viz/lib/hover-data.js +6 -3
- package/dist/features/viz/lib/hover-data.js.map +2 -2
- package/dist/features/viz/lib/hover-types.d.ts +5 -5
- package/dist/features/viz/lib/interval-band-series.d.ts +49 -0
- package/dist/features/viz/lib/interval-band-series.js +136 -0
- package/dist/features/viz/lib/interval-band-series.js.map +7 -0
- package/dist/features/viz/lib/interval-diamond-series.d.ts +43 -0
- package/dist/features/viz/lib/interval-diamond-series.js +122 -0
- package/dist/features/viz/lib/interval-diamond-series.js.map +7 -0
- package/dist/features/viz/lib/interval-series.d.ts +79 -0
- package/dist/features/viz/lib/interval-series.js +158 -0
- package/dist/features/viz/lib/interval-series.js.map +7 -0
- package/dist/features/viz/lib/layout-pie.js +9 -13
- package/dist/features/viz/lib/layout-pie.js.map +2 -2
- package/dist/features/viz/lib/line-series.d.ts +1 -1
- package/dist/features/viz/lib/line-series.js +47 -28
- package/dist/features/viz/lib/line-series.js.map +2 -2
- package/dist/features/viz/lib/linear-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/linear-scale-component.js +18 -0
- package/dist/features/viz/lib/linear-scale-component.js.map +7 -0
- package/dist/features/viz/lib/linear-scale.js +1 -1
- package/dist/features/viz/lib/linear-scale.js.map +2 -2
- package/dist/features/viz/lib/log-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/log-scale-component.js +19 -0
- package/dist/features/viz/lib/log-scale-component.js.map +7 -0
- package/dist/features/viz/lib/log-scale.d.ts +2 -0
- package/dist/features/viz/lib/log-scale.js +53 -0
- package/dist/features/viz/lib/log-scale.js.map +7 -0
- package/dist/features/viz/lib/monotone-curve.d.ts +11 -0
- package/dist/features/viz/lib/monotone-curve.js +63 -0
- package/dist/features/viz/lib/monotone-curve.js.map +7 -0
- package/dist/features/viz/lib/nearest.d.ts +9 -9
- package/dist/features/viz/lib/nearest.js.map +1 -1
- package/dist/features/viz/lib/numeric-range-interpolation.d.ts +15 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js +36 -0
- package/dist/features/viz/lib/numeric-range-interpolation.js.map +7 -0
- package/dist/features/viz/lib/numeric-ticks.d.ts +38 -0
- package/dist/features/viz/lib/numeric-ticks.js +54 -0
- package/dist/features/viz/lib/numeric-ticks.js.map +7 -0
- package/dist/features/viz/lib/ohlc-bar-series.d.ts +55 -0
- package/dist/features/viz/lib/ohlc-bar-series.js +168 -0
- package/dist/features/viz/lib/ohlc-bar-series.js.map +7 -0
- package/dist/features/viz/lib/paired-series.d.ts +44 -0
- package/dist/features/viz/lib/paired-series.js +93 -0
- package/dist/features/viz/lib/paired-series.js.map +7 -0
- package/dist/features/viz/lib/pie-layout.js +2 -1
- package/dist/features/viz/lib/pie-layout.js.map +2 -2
- package/dist/features/viz/lib/plot-series.js +11 -6
- package/dist/features/viz/lib/plot-series.js.map +2 -2
- package/dist/features/viz/lib/plot-types.d.ts +4 -3
- package/dist/features/viz/lib/point-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/point-scale-component.js +19 -0
- package/dist/features/viz/lib/point-scale-component.js.map +7 -0
- package/dist/features/viz/lib/point-scale.d.ts +2 -0
- package/dist/features/viz/lib/point-scale.js +45 -0
- package/dist/features/viz/lib/point-scale.js.map +7 -0
- package/dist/features/viz/lib/point-series.d.ts +1 -1
- package/dist/features/viz/lib/point-series.js +36 -9
- package/dist/features/viz/lib/point-series.js.map +2 -2
- package/dist/features/viz/lib/point-types.d.ts +5 -2
- package/dist/features/viz/lib/reference-band.d.ts +16 -0
- package/dist/features/viz/lib/reference-band.js +30 -0
- package/dist/features/viz/lib/reference-band.js.map +7 -0
- package/dist/features/viz/lib/scale-adjust.js +9 -4
- package/dist/features/viz/lib/scale-adjust.js.map +2 -2
- package/dist/features/viz/lib/scale-context.d.ts +5 -4
- package/dist/features/viz/lib/scale-context.js +15 -11
- package/dist/features/viz/lib/scale-context.js.map +2 -2
- package/dist/features/viz/lib/scale-provider.d.ts +2 -0
- package/dist/features/viz/lib/scale-provider.js +13 -0
- package/dist/features/viz/lib/scale-provider.js.map +7 -0
- package/dist/features/viz/lib/scale-ticks.d.ts +5 -0
- package/dist/features/viz/lib/scale-ticks.js +64 -0
- package/dist/features/viz/lib/scale-ticks.js.map +7 -0
- package/dist/features/viz/lib/scale-view.d.ts +4 -0
- package/dist/features/viz/lib/scale-view.js +21 -0
- package/dist/features/viz/lib/scale-view.js.map +7 -0
- package/dist/features/viz/lib/sequential-color-scale.d.ts +11 -0
- package/dist/features/viz/lib/sequential-color-scale.js +49 -0
- package/dist/features/viz/lib/sequential-color-scale.js.map +7 -0
- package/dist/features/viz/lib/series-position.d.ts +12 -0
- package/dist/features/viz/lib/series-position.js +44 -0
- package/dist/features/viz/lib/series-position.js.map +7 -0
- package/dist/features/viz/lib/step-curves.d.ts +19 -0
- package/dist/features/viz/lib/step-curves.js +53 -0
- package/dist/features/viz/lib/step-curves.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/symlog-scale-component.js +19 -0
- package/dist/features/viz/lib/symlog-scale-component.js.map +7 -0
- package/dist/features/viz/lib/symlog-scale.d.ts +2 -0
- package/dist/features/viz/lib/symlog-scale.js +38 -0
- package/dist/features/viz/lib/symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/threshold-color-scale.d.ts +43 -0
- package/dist/features/viz/lib/threshold-color-scale.js +59 -0
- package/dist/features/viz/lib/threshold-color-scale.js.map +7 -0
- package/dist/features/viz/lib/trading-time-mapping.d.ts +32 -0
- package/dist/features/viz/lib/trading-time-mapping.js +89 -0
- package/dist/features/viz/lib/trading-time-mapping.js.map +7 -0
- package/dist/features/viz/lib/trading-time-scale.d.ts +83 -0
- package/dist/features/viz/lib/trading-time-scale.js +96 -0
- package/dist/features/viz/lib/trading-time-scale.js.map +7 -0
- package/dist/features/viz/lib/trajectory-series.d.ts +71 -0
- package/dist/features/viz/lib/trajectory-series.js +111 -0
- package/dist/features/viz/lib/trajectory-series.js.map +7 -0
- package/dist/features/viz/lib/types.d.ts +114 -21
- package/dist/features/viz/lib/use-bar-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-bar-scale.js +9 -0
- package/dist/features/viz/lib/use-bar-scale.js.map +7 -0
- package/dist/features/viz/lib/use-continuous-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-continuous-scale.js +14 -0
- package/dist/features/viz/lib/use-continuous-scale.js.map +7 -0
- package/dist/features/viz/lib/use-linear-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-linear-scale.js +9 -0
- package/dist/features/viz/lib/use-linear-scale.js.map +7 -0
- package/dist/features/viz/lib/use-log-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-log-scale.js +9 -0
- package/dist/features/viz/lib/use-log-scale.js.map +7 -0
- package/dist/features/viz/lib/use-point-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-point-scale.js +9 -0
- package/dist/features/viz/lib/use-point-scale.js.map +7 -0
- package/dist/features/viz/lib/use-symlog-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-symlog-scale.js +9 -0
- package/dist/features/viz/lib/use-symlog-scale.js.map +7 -0
- package/dist/features/viz/lib/use-utc-scale.d.ts +8 -0
- package/dist/features/viz/lib/use-utc-scale.js +9 -0
- package/dist/features/viz/lib/use-utc-scale.js.map +7 -0
- package/dist/features/viz/lib/utc-labels.d.ts +12 -0
- package/dist/features/viz/lib/utc-labels.js +27 -0
- package/dist/features/viz/lib/utc-labels.js.map +7 -0
- package/dist/features/viz/lib/utc-scale-component.d.ts +7 -0
- package/dist/features/viz/lib/utc-scale-component.js +18 -0
- package/dist/features/viz/lib/utc-scale-component.js.map +7 -0
- package/dist/features/viz/lib/utc-scale.d.ts +21 -0
- package/dist/features/viz/lib/utc-scale.js +124 -0
- package/dist/features/viz/lib/utc-scale.js.map +7 -0
- package/dist/features/viz/lib/volume-series.d.ts +59 -0
- package/dist/features/viz/lib/volume-series.js +117 -0
- package/dist/features/viz/lib/volume-series.js.map +7 -0
- package/dist/features/viz/lib/weighted-point-series.d.ts +71 -0
- package/dist/features/viz/lib/weighted-point-series.js +169 -0
- package/dist/features/viz/lib/weighted-point-series.js.map +7 -0
- package/dist/filters/backdrop-contrast-gpu.d.ts +5 -0
- package/dist/filters/backdrop-contrast-gpu.js +33 -0
- package/dist/filters/backdrop-contrast-gpu.js.map +7 -0
- package/dist/filters/backdrop-contrast.d.ts +21 -0
- package/dist/filters/backdrop-contrast.js +61 -0
- package/dist/filters/backdrop-contrast.js.map +7 -0
- package/dist/filters/displacement.js +1 -1
- package/dist/filters/displacement.js.map +2 -2
- package/dist/filters/emboss-gpu.d.ts +4 -0
- package/dist/filters/emboss-gpu.js +39 -0
- package/dist/filters/emboss-gpu.js.map +7 -0
- package/dist/filters/emboss.d.ts +32 -0
- package/dist/filters/emboss.js +104 -0
- package/dist/filters/emboss.js.map +7 -0
- package/dist/filters/filter-executor.d.ts +11 -4
- package/dist/filters/filter-executor.js +104 -49
- package/dist/filters/filter-executor.js.map +2 -2
- package/dist/filters/reflected-light.js +1 -1
- package/dist/filters/reflected-light.js.map +2 -2
- package/dist/filters/reflection-gpu.d.ts +3 -1
- package/dist/filters/reflection-gpu.js +5 -2
- package/dist/filters/reflection-gpu.js.map +2 -2
- package/dist/filters/render-backdrop-contrast-boundary.d.ts +31 -0
- package/dist/filters/render-backdrop-contrast-boundary.js +116 -0
- package/dist/filters/render-backdrop-contrast-boundary.js.map +7 -0
- package/dist/filters/render-emboss-boundary.d.ts +13 -0
- package/dist/filters/render-emboss-boundary.js +131 -0
- package/dist/filters/render-emboss-boundary.js.map +7 -0
- package/dist/filters.d.ts +9 -5
- package/dist/filters.js +4 -0
- package/dist/filters.js.map +2 -2
- package/dist/index.d.ts +10 -6
- package/dist/index.js +18 -2
- package/dist/index.js.map +2 -2
- package/dist/internal.d.ts +4 -0
- package/dist/internal.js +6 -0
- package/dist/internal.js.map +2 -2
- package/dist/layout-kernel.d.ts +12 -0
- package/dist/layout-kernel.js +11 -0
- package/dist/layout-kernel.js.map +7 -0
- package/dist/layout-kernel.mjs +1 -0
- package/dist/lib/animation/definition.d.ts +5 -3
- package/dist/lib/animation/definition.js +29 -4
- package/dist/lib/animation/definition.js.map +2 -2
- package/dist/lib/animation/playback.d.ts +8 -0
- package/dist/lib/animation/playback.js +33 -11
- package/dist/lib/animation/playback.js.map +2 -2
- package/dist/lib/animation/spring.d.ts +3 -1
- package/dist/lib/animation/spring.js.map +2 -2
- package/dist/lib/animation/types.d.ts +29 -73
- package/dist/lib/backend/types.d.ts +13 -1
- package/dist/lib/backend/types.js.map +2 -2
- package/dist/lib/components/arc-geometry.js +2 -1
- package/dist/lib/components/arc-geometry.js.map +2 -2
- package/dist/lib/components/g.js +2 -0
- package/dist/lib/components/g.js.map +2 -2
- package/dist/lib/components/html-box.js +2 -1
- package/dist/lib/components/html-box.js.map +2 -2
- package/dist/lib/components/img.js +3 -3
- package/dist/lib/components/img.js.map +2 -2
- package/dist/lib/components/layer.js +98 -16
- package/dist/lib/components/layer.js.map +3 -3
- package/dist/lib/components/text.d.ts +16 -0
- package/dist/lib/components/text.js +131 -24
- package/dist/lib/components/text.js.map +2 -2
- package/dist/lib/define-primitive.d.ts +4 -2
- package/dist/lib/define-primitive.js +3 -1
- package/dist/lib/define-primitive.js.map +2 -2
- package/dist/lib/element/metadata.d.ts +9 -0
- package/dist/lib/element/metadata.js +19 -0
- package/dist/lib/element/metadata.js.map +2 -2
- package/dist/lib/element/resolve-primitive-inputs.d.ts +2 -0
- package/dist/lib/element/resolve-primitive-inputs.js +17 -4
- package/dist/lib/element/resolve-primitive-inputs.js.map +2 -2
- package/dist/lib/events/event-facade.d.ts +18 -0
- package/dist/lib/events/event-facade.js +28 -2
- package/dist/lib/events/event-facade.js.map +2 -2
- package/dist/lib/events/hit-test.js +2 -1
- package/dist/lib/events/hit-test.js.map +2 -2
- package/dist/lib/events/propagation.d.ts +2 -1
- package/dist/lib/events/propagation.js +22 -16
- package/dist/lib/events/propagation.js.map +2 -2
- package/dist/lib/events/registrations.d.ts +10 -0
- package/dist/lib/events/registrations.js +160 -5
- package/dist/lib/events/registrations.js.map +2 -2
- package/dist/lib/execute-render.js +25 -1
- package/dist/lib/execute-render.js.map +2 -2
- package/dist/lib/filter/filter-region.js +3 -10
- package/dist/lib/filter/filter-region.js.map +2 -2
- package/dist/lib/focus/focus-manager.d.ts +8 -1
- package/dist/lib/focus/focus-manager.js +87 -43
- package/dist/lib/focus/focus-manager.js.map +2 -2
- package/dist/lib/focus/geometry.d.ts +2 -0
- package/dist/lib/focus/geometry.js +6 -0
- package/dist/lib/focus/geometry.js.map +2 -2
- package/dist/lib/geometry/path-bend-guide.js +1 -1
- package/dist/lib/geometry/path-bend-guide.js.map +2 -2
- package/dist/lib/geometry/path-geometry.js +12 -11
- package/dist/lib/geometry/path-geometry.js.map +2 -2
- package/dist/lib/geometry/path-transforms.js +17 -21
- package/dist/lib/geometry/path-transforms.js.map +2 -2
- package/dist/lib/geometry/path-warp-bezier.js +3 -1
- package/dist/lib/geometry/path-warp-bezier.js.map +2 -2
- package/dist/lib/geometry/path-warp.js +1 -1
- package/dist/lib/geometry/path-warp.js.map +2 -2
- package/dist/lib/global-state.js +2 -0
- package/dist/lib/global-state.js.map +2 -2
- package/dist/lib/hooks/use-animated-value.d.ts +11 -21
- package/dist/lib/hooks/use-animated-value.js +23 -70
- package/dist/lib/hooks/use-animated-value.js.map +3 -3
- package/dist/lib/hooks/use-playback.js +1 -0
- package/dist/lib/hooks/use-playback.js.map +2 -2
- package/dist/lib/html/html-events.d.ts +32 -0
- package/dist/lib/html/html-events.js +179 -0
- package/dist/lib/html/html-events.js.map +7 -0
- package/dist/lib/html/html-service.d.ts +8 -2
- package/dist/lib/html/html-service.js +198 -65
- package/dist/lib/html/html-service.js.map +2 -2
- package/dist/lib/html/overlay-config.js +7 -6
- package/dist/lib/html/overlay-config.js.map +2 -2
- package/dist/lib/html/types.d.ts +29 -2
- package/dist/lib/layout/absolute.d.ts +11 -5
- package/dist/lib/layout/absolute.js +329 -55
- package/dist/lib/layout/absolute.js.map +3 -3
- package/dist/lib/layout/allocation-checkpoint-owner.d.ts +11 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js +86 -0
- package/dist/lib/layout/allocation-checkpoint-owner.js.map +7 -0
- package/dist/lib/layout/allocation-checkpoint.d.ts +53 -0
- package/dist/lib/layout/allocation-checkpoint.js +463 -0
- package/dist/lib/layout/allocation-checkpoint.js.map +7 -0
- package/dist/lib/layout/allocation-dependencies.d.ts +30 -0
- package/dist/lib/layout/allocation-dependencies.js +90 -0
- package/dist/lib/layout/allocation-dependencies.js.map +7 -0
- package/dist/lib/layout/allocation-revision.d.ts +13 -0
- package/dist/lib/layout/allocation-revision.js +67 -0
- package/dist/lib/layout/allocation-revision.js.map +7 -0
- package/dist/lib/layout/box-insets.d.ts +17 -0
- package/dist/lib/layout/box-insets.js +138 -0
- package/dist/lib/layout/box-insets.js.map +7 -0
- package/dist/lib/layout/box-sizing.d.ts +16 -0
- package/dist/lib/layout/box-sizing.js +77 -0
- package/dist/lib/layout/box-sizing.js.map +7 -0
- package/dist/lib/layout/box.js +42 -12
- package/dist/lib/layout/box.js.map +2 -2
- package/dist/lib/layout/canvas-measurement.d.ts +13 -0
- package/dist/lib/layout/canvas-measurement.js +57 -0
- package/dist/lib/layout/canvas-measurement.js.map +7 -0
- package/dist/lib/layout/context.d.ts +35 -6
- package/dist/lib/layout/context.js +72 -3
- package/dist/lib/layout/context.js.map +2 -2
- package/dist/lib/layout/define-layout-component.d.ts +23 -0
- package/dist/lib/layout/define-layout-component.js +84 -0
- package/dist/lib/layout/define-layout-component.js.map +7 -0
- package/dist/lib/layout/flex-allocation-cache.d.ts +42 -0
- package/dist/lib/layout/flex-baseline-mode.d.ts +2 -0
- package/dist/lib/layout/flex-baseline-mode.js +7 -0
- package/dist/lib/layout/flex-baseline-mode.js.map +7 -0
- package/dist/lib/layout/flex.d.ts +50 -15
- package/dist/lib/layout/flex.js +2124 -195
- package/dist/lib/layout/flex.js.map +3 -3
- package/dist/lib/layout/flow.js +225 -49
- package/dist/lib/layout/flow.js.map +2 -2
- package/dist/lib/layout/geometry-publication.d.ts +53 -0
- package/dist/lib/layout/geometry-publication.js +244 -0
- package/dist/lib/layout/geometry-publication.js.map +7 -0
- package/dist/lib/layout/grid-kernel.d.ts +63 -0
- package/dist/lib/layout/grid-kernel.js +168 -0
- package/dist/lib/layout/grid-kernel.js.map +7 -0
- package/dist/lib/layout/grid.d.ts +63 -4
- package/dist/lib/layout/grid.js +767 -171
- package/dist/lib/layout/grid.js.map +3 -3
- package/dist/lib/layout/measure.d.ts +55 -3
- package/dist/lib/layout/measure.js +448 -15
- package/dist/lib/layout/measure.js.map +2 -2
- package/dist/lib/layout/overlay.js +81 -23
- package/dist/lib/layout/overlay.js.map +2 -2
- package/dist/lib/layout/participation.d.ts +27 -0
- package/dist/lib/layout/participation.js +188 -0
- package/dist/lib/layout/participation.js.map +7 -0
- package/dist/lib/layout/place-child.js +1 -1
- package/dist/lib/layout/place-child.js.map +2 -2
- package/dist/lib/layout/positioning-diagnostics.d.ts +1 -1
- package/dist/lib/layout/positioning-diagnostics.js +13 -2
- package/dist/lib/layout/positioning-diagnostics.js.map +2 -2
- package/dist/lib/layout/prepared-root.d.ts +121 -0
- package/dist/lib/layout/prepared-root.js +360 -0
- package/dist/lib/layout/prepared-root.js.map +7 -0
- package/dist/lib/layout/standalone-kernel.d.ts +60 -0
- package/dist/lib/layout/standalone-kernel.js +722 -0
- package/dist/lib/layout/standalone-kernel.js.map +7 -0
- package/dist/lib/layout/topology.d.ts +21 -0
- package/dist/lib/layout/topology.js +113 -0
- package/dist/lib/layout/topology.js.map +7 -0
- package/dist/lib/layout/types.d.ts +5 -0
- package/dist/lib/layout/wasm/artifact.d.ts +1 -0
- package/dist/lib/layout/wasm/artifact.js +5 -0
- package/dist/lib/layout/wasm/artifact.js.map +7 -0
- package/dist/lib/layout/wasm/bytes.d.ts +1 -0
- package/dist/lib/layout/wasm/bytes.js +5 -0
- package/dist/lib/layout/wasm/bytes.js.map +7 -0
- package/dist/lib/layout/wasm/embedded.d.ts +2 -0
- package/dist/lib/layout/wasm/embedded.js +12 -0
- package/dist/lib/layout/wasm/embedded.js.map +7 -0
- package/dist/lib/layout/wasm/layout.wasm +0 -0
- package/dist/lib/layout/wasm/module.d.ts +8 -0
- package/dist/lib/layout/wasm/module.js +70 -0
- package/dist/lib/layout/wasm/module.js.map +7 -0
- package/dist/lib/layout/wasm/region.d.ts +267 -0
- package/dist/lib/layout/wasm/region.js +1018 -0
- package/dist/lib/layout/wasm/region.js.map +7 -0
- package/dist/lib/manipulation/controller.js +4 -7
- package/dist/lib/manipulation/controller.js.map +2 -2
- package/dist/lib/manipulation/frame.js +1 -1
- package/dist/lib/manipulation/frame.js.map +2 -2
- package/dist/lib/manipulation/handles.js +32 -33
- package/dist/lib/manipulation/handles.js.map +2 -2
- package/dist/lib/manipulation/solve.js +12 -10
- package/dist/lib/manipulation/solve.js.map +2 -2
- package/dist/lib/mount-pibbl.js +1 -0
- package/dist/lib/mount-pibbl.js.map +2 -2
- package/dist/lib/mount-prepared-pibbl.d.ts +5 -0
- package/dist/lib/mount-prepared-pibbl.js +29 -0
- package/dist/lib/mount-prepared-pibbl.js.map +7 -0
- package/dist/lib/mount-request.d.ts +8 -0
- package/dist/lib/mount-request.js +41 -0
- package/dist/lib/mount-request.js.map +7 -0
- package/dist/lib/pibbl.d.ts +21 -13
- package/dist/lib/pibbl.js +18 -16
- package/dist/lib/pibbl.js.map +2 -2
- package/dist/lib/recording/recording.d.ts +43 -0
- package/dist/lib/recording/recording.js +555 -0
- package/dist/lib/recording/recording.js.map +7 -0
- package/dist/lib/recording/types.d.ts +118 -0
- package/dist/lib/recording/wasm-bytes.d.ts +1 -0
- package/dist/lib/recording/wasm-bytes.js +5 -0
- package/dist/lib/recording/wasm-bytes.js.map +7 -0
- package/dist/lib/recording/worker-source.d.ts +1 -0
- package/dist/lib/recording/worker-source.js +5 -0
- package/dist/lib/recording/worker-source.js.map +7 -0
- package/dist/lib/render-layer/controller.d.ts +9 -3
- package/dist/lib/render-layer/controller.js +259 -110
- package/dist/lib/render-layer/controller.js.map +2 -2
- package/dist/lib/render-transaction.d.ts +12 -2
- package/dist/lib/render-transaction.js +69 -1
- package/dist/lib/render-transaction.js.map +2 -2
- package/dist/lib/render.js +32 -8
- package/dist/lib/render.js.map +2 -2
- package/dist/lib/scheduler/realm-scheduler.d.ts +2 -0
- package/dist/lib/scheduler/realm-scheduler.js +55 -26
- package/dist/lib/scheduler/realm-scheduler.js.map +2 -2
- package/dist/lib/scheduler/renderer-participant.js +1 -0
- package/dist/lib/scheduler/renderer-participant.js.map +2 -2
- package/dist/lib/series-inspection-frame.d.ts +18 -0
- package/dist/lib/series-inspection-frame.js +70 -0
- package/dist/lib/series-inspection-frame.js.map +7 -0
- package/dist/lib/signals/edge.d.ts +7 -4
- package/dist/lib/signals/edge.js +25 -3
- package/dist/lib/signals/edge.js.map +2 -2
- package/dist/lib/signals/graph.d.ts +16 -2
- package/dist/lib/signals/graph.js +54 -12
- package/dist/lib/signals/graph.js.map +2 -2
- package/dist/lib/signals/input-provision.d.ts +15 -0
- package/dist/lib/signals/input-provision.js +53 -3
- package/dist/lib/signals/input-provision.js.map +2 -2
- package/dist/lib/signals/render-consumer.d.ts +3 -0
- package/dist/lib/signals/render-consumer.js +22 -14
- package/dist/lib/signals/render-consumer.js.map +2 -2
- package/dist/lib/style/positioning.d.ts +50 -2
- package/dist/lib/style/positioning.js +28 -4
- package/dist/lib/style/positioning.js.map +2 -2
- package/dist/lib/style/resolve-built-in.d.ts +4 -3
- package/dist/lib/style/resolve-built-in.js +17 -3
- package/dist/lib/style/resolve-built-in.js.map +2 -2
- package/dist/lib/style/resolve-dispatch.d.ts +3 -0
- package/dist/lib/style/resolve-dispatch.js +77 -4
- package/dist/lib/style/resolve-dispatch.js.map +2 -2
- package/dist/lib/style/resolve-length.d.ts +2 -0
- package/dist/lib/style/resolve-length.js +13 -9
- package/dist/lib/style/resolve-length.js.map +2 -2
- package/dist/lib/style/sizing-length.d.ts +51 -0
- package/dist/lib/style/sizing-length.js +77 -0
- package/dist/lib/style/sizing-length.js.map +7 -0
- package/dist/lib/style/types.d.ts +63 -25
- package/dist/lib/surface/root-surface.js +10 -6
- package/dist/lib/surface/root-surface.js.map +2 -2
- package/dist/lib/textures/texture.js +10 -8
- package/dist/lib/textures/texture.js.map +2 -2
- package/dist/lib/transitions/capture.js +4 -1
- package/dist/lib/transitions/capture.js.map +2 -2
- package/dist/lib/transitions/embers-physics.js +17 -10
- package/dist/lib/transitions/embers-physics.js.map +2 -2
- package/dist/lib/types.d.ts +110 -1
- package/dist/sync.d.ts +16 -0
- package/dist/sync.js +13 -0
- package/dist/sync.js.map +7 -0
- package/dist/sync.mjs +1 -0
- package/package.json +43 -6
- package/dist/features/viz/lib/scale.d.ts +0 -11
- package/dist/features/viz/lib/scale.js +0 -80
- package/dist/features/viz/lib/scale.js.map +0 -7
- package/dist/features/viz/lib/use-scale.d.ts +0 -20
- package/dist/features/viz/lib/use-scale.js +0 -10
- package/dist/features/viz/lib/use-scale.js.map +0 -7
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { jsx } from "@pibbl/core/jsx-runtime";
|
|
2
|
+
import { useNumericPosition } from "./series-position.js";
|
|
3
|
+
import {
|
|
4
|
+
Group,
|
|
5
|
+
Path,
|
|
6
|
+
resolveSignalValue
|
|
7
|
+
} from "@pibbl/core";
|
|
8
|
+
import { withHooksForbidden } from "@pibbl/core/internal";
|
|
9
|
+
import { useContinuousScale } from "./use-continuous-scale.js";
|
|
10
|
+
import { pointAccessor, pointData, finiteCoordinate } from "./point-data.js";
|
|
11
|
+
import { financialMarkWidth, volumeGeometry } from "./financial-geometry.js";
|
|
12
|
+
import { opacity, width } from "./paint.js";
|
|
13
|
+
function VolumeSeries({
|
|
14
|
+
data: input,
|
|
15
|
+
time: timeInput,
|
|
16
|
+
volume: volumeInput,
|
|
17
|
+
xScale,
|
|
18
|
+
yScale,
|
|
19
|
+
defined,
|
|
20
|
+
style: styleInput,
|
|
21
|
+
inspection,
|
|
22
|
+
pointerEvents,
|
|
23
|
+
...events
|
|
24
|
+
}) {
|
|
25
|
+
const xs = useNumericPosition(xScale), ys = useContinuousScale(yScale).get();
|
|
26
|
+
const data = pointData(resolveSignalValue(input), "VolumeSeries");
|
|
27
|
+
const time = pointAccessor(timeInput), volume = pointAccessor(volumeInput);
|
|
28
|
+
const rows = [];
|
|
29
|
+
for (let i = 0; i < data.length; i++) {
|
|
30
|
+
const datum = data[i];
|
|
31
|
+
if (defined && !defined(datum, i, data)) continue;
|
|
32
|
+
const t = time(datum, i, data), v = volume(datum, i, data);
|
|
33
|
+
if (!finiteCoordinate(t) || !finiteCoordinate(v)) continue;
|
|
34
|
+
if (v < 0)
|
|
35
|
+
throw new RangeError(
|
|
36
|
+
`VolumeSeries: negative volume at source index ${i}.`
|
|
37
|
+
);
|
|
38
|
+
rows.push({
|
|
39
|
+
datum,
|
|
40
|
+
sourceIndex: i,
|
|
41
|
+
time: t,
|
|
42
|
+
volume: v,
|
|
43
|
+
x: xs.map(t),
|
|
44
|
+
y: ys.map(v)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const positions = rows.map((row) => row.x), baselineY = ys.map(0), defaultWidth = financialMarkWidth(positions);
|
|
48
|
+
const specified = typeof styleInput === "function" ? styleInput : resolveSignalValue(styleInput);
|
|
49
|
+
const marks = inspection ? [] : void 0;
|
|
50
|
+
const batches = [];
|
|
51
|
+
for (const row of rows) {
|
|
52
|
+
const style = typeof specified === "function" ? withHooksForbidden(
|
|
53
|
+
"VolumeSeries style callback",
|
|
54
|
+
() => specified(row.datum, row.sourceIndex, data)
|
|
55
|
+
) : specified ?? {};
|
|
56
|
+
const markWidth = style.width === void 0 ? defaultWidth : financialMarkWidth([], { width: style.width });
|
|
57
|
+
const b = volumeGeometry({
|
|
58
|
+
centerX: row.x,
|
|
59
|
+
valueY: row.y,
|
|
60
|
+
baselineY,
|
|
61
|
+
width: markWidth
|
|
62
|
+
});
|
|
63
|
+
const fill = style.fill ?? "#087f8c", stroke = style.stroke, strokeWidth = width(style.strokeWidth ?? 1, "VolumeSeries"), alpha = opacity(style.opacity ?? 1, "VolumeSeries");
|
|
64
|
+
marks?.push(
|
|
65
|
+
Object.freeze({
|
|
66
|
+
datum: row.datum,
|
|
67
|
+
sourceIndex: row.sourceIndex,
|
|
68
|
+
time: row.time,
|
|
69
|
+
volume: row.volume,
|
|
70
|
+
baseline: 0,
|
|
71
|
+
anchorLocal: Object.freeze({ x: row.x, y: row.y }),
|
|
72
|
+
boundsLocal: b,
|
|
73
|
+
fill: !!fill && alpha > 0,
|
|
74
|
+
strokeWidthLocal: stroke && alpha > 0 ? strokeWidth : 0
|
|
75
|
+
})
|
|
76
|
+
);
|
|
77
|
+
if (b.height === 0 || alpha === 0) continue;
|
|
78
|
+
let batch = batches.at(-1);
|
|
79
|
+
const half = stroke ? strokeWidth / 2 : 0, minX = b.x - half, maxX = b.x + b.width + half;
|
|
80
|
+
if (!batch || minX < batch.maxX && maxX > batch.minX || batch.fill !== fill || batch.stroke !== stroke || batch.strokeWidth !== strokeWidth || batch.opacity !== alpha || batch.cursor !== style.cursor) {
|
|
81
|
+
batch = {
|
|
82
|
+
path: new Path2D(),
|
|
83
|
+
fill,
|
|
84
|
+
stroke,
|
|
85
|
+
strokeWidth,
|
|
86
|
+
opacity: alpha,
|
|
87
|
+
cursor: style.cursor,
|
|
88
|
+
minX,
|
|
89
|
+
maxX
|
|
90
|
+
};
|
|
91
|
+
batches.push(batch);
|
|
92
|
+
}
|
|
93
|
+
batch.minX = Math.min(batch.minX, minX);
|
|
94
|
+
batch.maxX = Math.max(batch.maxX, maxX);
|
|
95
|
+
batch.path.rect(b.x, b.y, b.width, b.height);
|
|
96
|
+
}
|
|
97
|
+
inspection?.capture({ marks, xScale: xs, yScale: ys });
|
|
98
|
+
return /* @__PURE__ */ jsx(Group, { ...events, children: batches.map((batch, index) => /* @__PURE__ */ jsx(
|
|
99
|
+
Path,
|
|
100
|
+
{
|
|
101
|
+
pointerEvents,
|
|
102
|
+
style: {
|
|
103
|
+
d: batch.path,
|
|
104
|
+
fill: batch.fill,
|
|
105
|
+
stroke: batch.stroke,
|
|
106
|
+
strokeWidth: batch.strokeWidth,
|
|
107
|
+
opacity: batch.opacity,
|
|
108
|
+
cursor: batch.cursor
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
index
|
|
112
|
+
)) });
|
|
113
|
+
}
|
|
114
|
+
export {
|
|
115
|
+
VolumeSeries
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=volume-series.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/features/viz/lib/volume-series.tsx"],
|
|
4
|
+
"sourcesContent": ["import { useNumericPosition } from \"./series-position.js\";\nimport {\n Group,\n Path,\n resolveSignalValue,\n type FillStyle,\n type StrokeStyle,\n type SignalValue,\n type PibblEventHandlers,\n type PibblEventParticipationOptions,\n type PibblNode,\n} from \"@pibbl/core\";\nimport { withHooksForbidden } from \"@pibbl/core/internal\";\nimport type { LineAccessor, ScaleId } from \"./types.js\";\nimport type {\n VolumeInspectionRef,\n CapturedVolumeMark,\n} from \"../inspection/volume.js\";\nimport { useContinuousScale } from \"./use-continuous-scale.js\";\nimport { pointAccessor, pointData, finiteCoordinate } from \"./point-data.js\";\nimport { financialMarkWidth, volumeGeometry } from \"./financial-geometry.js\";\nimport { opacity, width } from \"./paint.js\";\n\n/** Local column presentation; color meaning is supplied by the application.\n * @see {@link VolumeSeries}\n */\nexport interface VolumeSeriesStyle {\n /** Positive column width in local logical units; default 70% spacing capped at 12. */\n readonly width?: number;\n /** Interior paint; defaults to teal. */\n readonly fill?: FillStyle;\n /** Optional column outline paint. */\n readonly stroke?: StrokeStyle;\n /** Nonnegative outline width in local units; default 1. */\n readonly strokeWidth?: number;\n /** Paint opacity from zero through one; default 1. */\n readonly opacity?: number;\n /** Cursor when the series owns coordinate targeting. */\n readonly cursor?: string;\n}\n/** Time-aligned volume columns with an independent numeric y-scale.\n * @see {@link VolumeSeries}\n */\nexport interface VolumeSeriesProps<D>\n extends PibblEventHandlers, PibblEventParticipationOptions {\n /** Original records or a signal of records; never sorted or mutated. */\n readonly data: SignalValue<readonly D[]>;\n /** UTC-millisecond property or callback; missing/nonfinite values skip the row. */\n readonly time: LineAccessor<D>;\n /** Nonnegative volume property or callback; missing/nonfinite values skip the row. */\n readonly volume: LineAccessor<D>;\n /** Selects source records before evaluating accessors.\n * @param datum - Original record.\n * @param index - Original source index.\n * @param data - Complete source array.\n * @returns Whether the row participates.\n */\n readonly defined?: (datum: D, index: number, data: readonly D[]) => boolean;\n /** Numeric time scale identity. */\n readonly xScale: ScaleId;\n /** Independent numeric volume scale identity; the baseline is zero. */\n readonly yScale: ScaleId;\n /** Constant presentation or a hook-free per-record resolver.\n * @param datum - Original record.\n * @param index - Original source index.\n * @param data - Complete source array.\n * @returns Column presentation.\n */\n readonly style?:\n | SignalValue<VolumeSeriesStyle>\n | ((datum: D, index: number, data: readonly D[]) => VolumeSeriesStyle);\n /** Optional committed capture; importing the renderer does not import inspection queries. */\n readonly inspection?: VolumeInspectionRef<D>;\n}\n/**\n * Paints source-ordered time-aligned volume columns, batching adjacent equal styles.\n * Zero volume is recorded but has no painted coverage. Finite negative volume rejects.\n * @param props - Original records, numeric scales, accessors and optional capture.\n * @returns Ordinary Pibbl paint/event composition.\n * @see {@link VolumeSeriesProps}\n */\nexport function VolumeSeries<D>({\n data: input,\n time: timeInput,\n volume: volumeInput,\n xScale,\n yScale,\n defined,\n style: styleInput,\n inspection,\n pointerEvents,\n ...events\n}: VolumeSeriesProps<D>): PibblNode {\n const xs = useNumericPosition(xScale),\n ys = useContinuousScale(yScale).get();\n const data = pointData(resolveSignalValue(input), \"VolumeSeries\");\n const time = pointAccessor(timeInput),\n volume = pointAccessor(volumeInput);\n const rows: {\n datum: D;\n sourceIndex: number;\n time: number;\n volume: number;\n x: number;\n y: number;\n }[] = [];\n for (let i = 0; i < data.length; i++) {\n const datum = data[i];\n if (defined && !defined(datum, i, data)) continue;\n const t = time(datum, i, data),\n v = volume(datum, i, data);\n if (!finiteCoordinate(t) || !finiteCoordinate(v)) continue;\n if (v < 0)\n throw new RangeError(\n `VolumeSeries: negative volume at source index ${i}.`,\n );\n rows.push({\n datum,\n sourceIndex: i,\n time: t,\n volume: v,\n x: xs.map(t),\n y: ys.map(v),\n });\n }\n const positions = rows.map((row) => row.x),\n baselineY = ys.map(0),\n defaultWidth = financialMarkWidth(positions);\n const specified =\n typeof styleInput === \"function\"\n ? styleInput\n : resolveSignalValue(styleInput);\n const marks: CapturedVolumeMark<D>[] | undefined = inspection\n ? []\n : undefined;\n const batches: {\n path: Path2D;\n fill: FillStyle;\n stroke: StrokeStyle | undefined;\n strokeWidth: number;\n opacity: number;\n cursor: string | undefined;\n minX: number;\n maxX: number;\n }[] = [];\n for (const row of rows) {\n const style =\n typeof specified === \"function\"\n ? withHooksForbidden(\"VolumeSeries style callback\", () =>\n specified(row.datum, row.sourceIndex, data),\n )\n : (specified ?? {});\n const markWidth =\n style.width === undefined\n ? defaultWidth\n : financialMarkWidth([], { width: style.width });\n const b = volumeGeometry({\n centerX: row.x,\n valueY: row.y,\n baselineY,\n width: markWidth,\n });\n const fill = style.fill ?? \"#087f8c\",\n stroke = style.stroke,\n strokeWidth = width(style.strokeWidth ?? 1, \"VolumeSeries\"),\n alpha = opacity(style.opacity ?? 1, \"VolumeSeries\");\n marks?.push(\n Object.freeze({\n datum: row.datum,\n sourceIndex: row.sourceIndex,\n time: row.time,\n volume: row.volume,\n baseline: 0,\n anchorLocal: Object.freeze({ x: row.x, y: row.y }),\n boundsLocal: b,\n fill: !!fill && alpha > 0,\n strokeWidthLocal: stroke && alpha > 0 ? strokeWidth : 0,\n }),\n );\n if (b.height === 0 || alpha === 0) continue;\n let batch = batches.at(-1);\n const half = stroke ? strokeWidth / 2 : 0,\n minX = b.x - half,\n maxX = b.x + b.width + half;\n if (\n !batch ||\n (minX < batch.maxX && maxX > batch.minX) ||\n batch.fill !== fill ||\n batch.stroke !== stroke ||\n batch.strokeWidth !== strokeWidth ||\n batch.opacity !== alpha ||\n batch.cursor !== style.cursor\n ) {\n batch = {\n path: new Path2D(),\n fill,\n stroke,\n strokeWidth,\n opacity: alpha,\n cursor: style.cursor,\n minX,\n maxX,\n };\n batches.push(batch);\n }\n batch.minX = Math.min(batch.minX, minX);\n batch.maxX = Math.max(batch.maxX, maxX);\n batch.path.rect(b.x, b.y, b.width, b.height);\n }\n inspection?.capture({ marks: marks!, xScale: xs, yScale: ys });\n return (\n <Group {...events}>\n {batches.map((batch, index) => (\n <Path\n key={index}\n pointerEvents={pointerEvents}\n style={{\n d: batch.path,\n fill: batch.fill,\n stroke: batch.stroke,\n strokeWidth: batch.strokeWidth,\n opacity: batch.opacity,\n cursor: batch.cursor,\n }}\n />\n ))}\n </Group>\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { FillStyle, PibblEventHandlers, PibblEventParticipationOptions, SignalValue, StrokeStyle } from "@pibbl/core";
|
|
2
|
+
import type { SignalStyle } from "@pibbl/core/internal";
|
|
3
|
+
import type { LineAccessor, ScaleId, SeriesAccessor } from "./types.js";
|
|
4
|
+
/**
|
|
5
|
+
* A data property or callback extracting a nonnegative research weight.
|
|
6
|
+
*
|
|
7
|
+
* @see {@link WeightedPointSeriesProps}
|
|
8
|
+
*/
|
|
9
|
+
export type WeightAccessor<D> = LineAccessor<D>;
|
|
10
|
+
/** Shared presentation for {@link WeightedPointSeries}. */
|
|
11
|
+
export interface WeightedPointSeriesStyle {
|
|
12
|
+
/** Paint used for point interiors. Defaults to `#087f8c`. */
|
|
13
|
+
readonly fill?: FillStyle;
|
|
14
|
+
/** Paint used for point outlines. Defaults to no outline. */
|
|
15
|
+
readonly stroke?: StrokeStyle;
|
|
16
|
+
/** Outline width in local coordinate units. Defaults to 1. */
|
|
17
|
+
readonly strokeWidth?: number;
|
|
18
|
+
/** Opacity in the inclusive range [0, 1]. Defaults to 1. */
|
|
19
|
+
readonly opacity?: number;
|
|
20
|
+
/** Pointer cursor while the series owns a target. */
|
|
21
|
+
readonly cursor?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Authored inputs for {@link WeightedPointSeries}.
|
|
25
|
+
*
|
|
26
|
+
* Weights are supplied data, not calculated precision, sample size, or evidence.
|
|
27
|
+
* The zero baseline and squared-radius interpolation make displayed area linear in
|
|
28
|
+
* the supplied weight.
|
|
29
|
+
*/
|
|
30
|
+
export interface WeightedPointSeriesProps<D> extends PibblEventHandlers, PibblEventParticipationOptions {
|
|
31
|
+
/** Readonly data or a signal containing it. */
|
|
32
|
+
readonly data: SignalValue<readonly D[]>;
|
|
33
|
+
/** Horizontal coordinate property or synchronous accessor. */
|
|
34
|
+
readonly x: SeriesAccessor<D>;
|
|
35
|
+
/** Vertical coordinate property or synchronous accessor. */
|
|
36
|
+
readonly y: SeriesAccessor<D>;
|
|
37
|
+
/** Nonnegative supplied weight property or synchronous accessor. */
|
|
38
|
+
readonly weight: WeightAccessor<D>;
|
|
39
|
+
/** Scale used to map x coordinates. */
|
|
40
|
+
readonly xScale: ScaleId;
|
|
41
|
+
/** Scale used to map y coordinates. */
|
|
42
|
+
readonly yScale: ScaleId;
|
|
43
|
+
/** Supplied inclusive weight extent. The lower bound must be zero. */
|
|
44
|
+
readonly weightDomain: readonly [0, number];
|
|
45
|
+
/** Radius extent `[0, maximumRadius]`; defaults to `[0, 6]`. */
|
|
46
|
+
readonly radiusRange?: readonly [0, number];
|
|
47
|
+
/**
|
|
48
|
+
* Excludes a datum before coordinate and weight accessors run.
|
|
49
|
+
* @param datum - Candidate source datum.
|
|
50
|
+
* @param index - Zero-based source index.
|
|
51
|
+
* @param data - Complete source data array.
|
|
52
|
+
* @returns Whether this datum contributes a mark.
|
|
53
|
+
*/
|
|
54
|
+
readonly defined?: (datum: D, index: number, data: readonly D[]) => boolean;
|
|
55
|
+
/** Shared presentation. Whole-object and shallow field signals are supported. */
|
|
56
|
+
readonly style?: SignalValue<SignalStyle<WeightedPointSeriesStyle>>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Draws batched circles whose visible area is proportional to supplied weights.
|
|
60
|
+
*
|
|
61
|
+
* Nullish weights and zero weights omit their marks. Finite positive weights must
|
|
62
|
+
* fall inside `weightDomain`; the component never clamps or infers weights.
|
|
63
|
+
* `data` and shared style signals schedule ordinary Pibbl updates. The component
|
|
64
|
+
* owns no retained resources and returns one ordinary Pibbl pointer target.
|
|
65
|
+
*
|
|
66
|
+
* @param props - Supplied observations, coordinate and weight accessors, scales, and paint.
|
|
67
|
+
* See {@link WeightedPointSeriesProps}.
|
|
68
|
+
* @returns One batched Pibbl Path whose mark area is proportional to each supplied weight.
|
|
69
|
+
* @see {@link WeightedPointSeriesProps}
|
|
70
|
+
*/
|
|
71
|
+
export declare function WeightedPointSeries<D>({ data: input, x: xInput, y: yInput, weight: weightInput, xScale: xId, yScale: yId, weightDomain, radiusRange, defined, style: styleInput, ...events }: WeightedPointSeriesProps<D>): import("../../../jsx-runtime.js").JSX.Element;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { jsx } from "@pibbl/core/jsx-runtime";
|
|
2
|
+
import { resolveTexturePaint } from "@pibbl/core/internal";
|
|
3
|
+
import { Path, resolveSignalValue, useCanvasContext } from "@pibbl/core";
|
|
4
|
+
import { validateTexturePaint, withHooksForbidden } from "@pibbl/core/internal";
|
|
5
|
+
import { pointAccessor, pointData } from "./point-data.js";
|
|
6
|
+
import { appendPointTarget, pointPath } from "./point-geometry.js";
|
|
7
|
+
import { opacity, width } from "./paint.js";
|
|
8
|
+
import {
|
|
9
|
+
mapSeriesPosition,
|
|
10
|
+
seriesAccessor,
|
|
11
|
+
useSeriesPosition
|
|
12
|
+
} from "./series-position.js";
|
|
13
|
+
const fields = ["fill", "stroke", "strokeWidth", "opacity", "cursor"];
|
|
14
|
+
function paint(value, name) {
|
|
15
|
+
if (value === void 0 || typeof value === "string" || value instanceof CanvasGradient || value instanceof CanvasPattern)
|
|
16
|
+
return value;
|
|
17
|
+
try {
|
|
18
|
+
validateTexturePaint(value);
|
|
19
|
+
return value;
|
|
20
|
+
} catch {
|
|
21
|
+
}
|
|
22
|
+
throw new TypeError(`WeightedPointSeries: invalid ${name}.`);
|
|
23
|
+
}
|
|
24
|
+
function styleObject(input) {
|
|
25
|
+
if (input === null || typeof input !== "object" || Array.isArray(input))
|
|
26
|
+
throw new TypeError("WeightedPointSeries: style must be an object.");
|
|
27
|
+
const result = {};
|
|
28
|
+
for (const key of Object.keys(input)) {
|
|
29
|
+
if (!fields.includes(key))
|
|
30
|
+
throw new TypeError(
|
|
31
|
+
`WeightedPointSeries: unsupported style field ${key}.`
|
|
32
|
+
);
|
|
33
|
+
result[key] = resolveSignalValue(input[key]);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
function normalized(style) {
|
|
38
|
+
if (style.cursor !== void 0 && typeof style.cursor !== "string")
|
|
39
|
+
throw new TypeError("WeightedPointSeries: cursor must be a string.");
|
|
40
|
+
return {
|
|
41
|
+
fill: paint(style.fill ?? "#087f8c", "fill"),
|
|
42
|
+
stroke: paint(style.stroke, "stroke"),
|
|
43
|
+
strokeWidth: width(
|
|
44
|
+
style.strokeWidth ?? 1,
|
|
45
|
+
"WeightedPointSeries strokeWidth"
|
|
46
|
+
),
|
|
47
|
+
opacity: opacity(style.opacity ?? 1, "WeightedPointSeries opacity"),
|
|
48
|
+
cursor: style.cursor
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function range(value) {
|
|
52
|
+
const actual = value ?? [0, 6];
|
|
53
|
+
if (!Array.isArray(actual) || actual.length !== 2 || actual[0] !== 0 || !Number.isFinite(actual[1]) || actual[1] < 0)
|
|
54
|
+
throw new RangeError(
|
|
55
|
+
"WeightedPointSeries: radiusRange must be [0, a finite nonnegative maximum]."
|
|
56
|
+
);
|
|
57
|
+
return actual;
|
|
58
|
+
}
|
|
59
|
+
function domain(value) {
|
|
60
|
+
if (!Array.isArray(value) || value.length !== 2 || value[0] !== 0 || !Number.isFinite(value[1]) || value[1] <= 0)
|
|
61
|
+
throw new RangeError(
|
|
62
|
+
"WeightedPointSeries: weightDomain must be [0, a finite positive maximum]."
|
|
63
|
+
);
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
function WeightedPointSeries({
|
|
67
|
+
data: input,
|
|
68
|
+
x: xInput,
|
|
69
|
+
y: yInput,
|
|
70
|
+
weight: weightInput,
|
|
71
|
+
xScale: xId,
|
|
72
|
+
yScale: yId,
|
|
73
|
+
weightDomain,
|
|
74
|
+
radiusRange,
|
|
75
|
+
defined,
|
|
76
|
+
style: styleInput,
|
|
77
|
+
...events
|
|
78
|
+
}) {
|
|
79
|
+
const xs = useSeriesPosition(xId);
|
|
80
|
+
const ys = useSeriesPosition(yId);
|
|
81
|
+
const data = pointData(resolveSignalValue(input), "WeightedPointSeries");
|
|
82
|
+
const x = seriesAccessor(xInput);
|
|
83
|
+
const y = seriesAccessor(yInput);
|
|
84
|
+
const weight = pointAccessor(weightInput);
|
|
85
|
+
const [, maximumWeight] = domain(weightDomain);
|
|
86
|
+
const [, maximumRadius] = range(radiusRange);
|
|
87
|
+
const style = normalized(styleObject(resolveSignalValue(styleInput) ?? {}));
|
|
88
|
+
const ctx = useCanvasContext();
|
|
89
|
+
const target = new Path2D();
|
|
90
|
+
const marks = [];
|
|
91
|
+
for (let i = 0; i < data.length; i++) {
|
|
92
|
+
const datum = data[i];
|
|
93
|
+
const values = withHooksForbidden(
|
|
94
|
+
"WeightedPointSeries: accessors cannot call hooks.",
|
|
95
|
+
() => {
|
|
96
|
+
if (defined && !defined(datum, i, data)) return void 0;
|
|
97
|
+
return {
|
|
98
|
+
x: x(datum, i, data),
|
|
99
|
+
y: y(datum, i, data),
|
|
100
|
+
weight: weight(datum, i, data)
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
if (!values) continue;
|
|
105
|
+
const mappedX = mapSeriesPosition(xs, values.x);
|
|
106
|
+
const mappedY = mapSeriesPosition(ys, values.y);
|
|
107
|
+
if (mappedX === void 0 || mappedY === void 0) continue;
|
|
108
|
+
const supplied = values.weight;
|
|
109
|
+
if (supplied == null) continue;
|
|
110
|
+
if (typeof supplied !== "number" || !Number.isFinite(supplied))
|
|
111
|
+
throw new TypeError(
|
|
112
|
+
"WeightedPointSeries: weight must be a finite number."
|
|
113
|
+
);
|
|
114
|
+
if (supplied < 0)
|
|
115
|
+
throw new RangeError("WeightedPointSeries: weight must be nonnegative.");
|
|
116
|
+
if (supplied > maximumWeight)
|
|
117
|
+
throw new RangeError("WeightedPointSeries: weight exceeds weightDomain.");
|
|
118
|
+
if (supplied === 0 || maximumRadius === 0) continue;
|
|
119
|
+
const radius = maximumRadius * Math.sqrt(supplied / maximumWeight);
|
|
120
|
+
marks.push({ x: mappedX, y: mappedY, radius });
|
|
121
|
+
}
|
|
122
|
+
for (const { x: x2, y: y2, radius } of marks) {
|
|
123
|
+
appendPointTarget(
|
|
124
|
+
target,
|
|
125
|
+
x2,
|
|
126
|
+
y2,
|
|
127
|
+
radius,
|
|
128
|
+
!!style.fill,
|
|
129
|
+
style.stroke ? style.strokeWidth : 0
|
|
130
|
+
);
|
|
131
|
+
const path = pointPath(x2, y2, radius);
|
|
132
|
+
ctx.save();
|
|
133
|
+
try {
|
|
134
|
+
ctx.globalAlpha *= style.opacity;
|
|
135
|
+
if (style.fill) {
|
|
136
|
+
ctx.fillStyle = resolveTexturePaint(style.fill, ctx, {
|
|
137
|
+
x: x2 - radius,
|
|
138
|
+
y: y2 - radius,
|
|
139
|
+
width: radius * 2,
|
|
140
|
+
height: radius * 2
|
|
141
|
+
});
|
|
142
|
+
ctx.fill(path);
|
|
143
|
+
}
|
|
144
|
+
if (style.stroke && style.strokeWidth > 0) {
|
|
145
|
+
ctx.strokeStyle = resolveTexturePaint(style.stroke, ctx, {
|
|
146
|
+
x: x2 - radius,
|
|
147
|
+
y: y2 - radius,
|
|
148
|
+
width: radius * 2,
|
|
149
|
+
height: radius * 2
|
|
150
|
+
});
|
|
151
|
+
ctx.lineWidth = style.strokeWidth;
|
|
152
|
+
ctx.stroke(path);
|
|
153
|
+
}
|
|
154
|
+
} finally {
|
|
155
|
+
ctx.restore();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return /* @__PURE__ */ jsx(
|
|
159
|
+
Path,
|
|
160
|
+
{
|
|
161
|
+
...events,
|
|
162
|
+
style: { d: target, fill: "transparent", cursor: style.cursor }
|
|
163
|
+
}
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
export {
|
|
167
|
+
WeightedPointSeries
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=weighted-point-series.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/features/viz/lib/weighted-point-series.tsx"],
|
|
4
|
+
"sourcesContent": ["import { resolveTexturePaint } from \"@pibbl/core/internal\";\nimport { Path, resolveSignalValue, useCanvasContext } from \"@pibbl/core\";\nimport type {\n FillStyle,\n PibblEventHandlers,\n PibblEventParticipationOptions,\n SignalValue,\n StrokeStyle,\n} from \"@pibbl/core\";\nimport type { SignalStyle } from \"@pibbl/core/internal\";\nimport { validateTexturePaint, withHooksForbidden } from \"@pibbl/core/internal\";\nimport type { LineAccessor, ScaleId, SeriesAccessor } from \"./types.js\";\nimport { pointAccessor, pointData } from \"./point-data.js\";\nimport { appendPointTarget, pointPath } from \"./point-geometry.js\";\nimport { opacity, width } from \"./paint.js\";\nimport {\n mapSeriesPosition,\n seriesAccessor,\n useSeriesPosition,\n} from \"./series-position.js\";\n\nconst fields = [\"fill\", \"stroke\", \"strokeWidth\", \"opacity\", \"cursor\"];\n\n/**\n * A data property or callback extracting a nonnegative research weight.\n *\n * @see {@link WeightedPointSeriesProps}\n */\nexport type WeightAccessor<D> = LineAccessor<D>;\n\n/** Shared presentation for {@link WeightedPointSeries}. */\nexport interface WeightedPointSeriesStyle {\n /** Paint used for point interiors. Defaults to `#087f8c`. */\n readonly fill?: FillStyle;\n /** Paint used for point outlines. Defaults to no outline. */\n readonly stroke?: StrokeStyle;\n /** Outline width in local coordinate units. Defaults to 1. */\n readonly strokeWidth?: number;\n /** Opacity in the inclusive range [0, 1]. Defaults to 1. */\n readonly opacity?: number;\n /** Pointer cursor while the series owns a target. */\n readonly cursor?: string;\n}\n\n/**\n * Authored inputs for {@link WeightedPointSeries}.\n *\n * Weights are supplied data, not calculated precision, sample size, or evidence.\n * The zero baseline and squared-radius interpolation make displayed area linear in\n * the supplied weight.\n */\nexport interface WeightedPointSeriesProps<D>\n extends PibblEventHandlers, PibblEventParticipationOptions {\n /** Readonly data or a signal containing it. */\n readonly data: SignalValue<readonly D[]>;\n /** Horizontal coordinate property or synchronous accessor. */\n readonly x: SeriesAccessor<D>;\n /** Vertical coordinate property or synchronous accessor. */\n readonly y: SeriesAccessor<D>;\n /** Nonnegative supplied weight property or synchronous accessor. */\n readonly weight: WeightAccessor<D>;\n /** Scale used to map x coordinates. */\n readonly xScale: ScaleId;\n /** Scale used to map y coordinates. */\n readonly yScale: ScaleId;\n /** Supplied inclusive weight extent. The lower bound must be zero. */\n readonly weightDomain: readonly [0, number];\n /** Radius extent `[0, maximumRadius]`; defaults to `[0, 6]`. */\n readonly radiusRange?: readonly [0, number];\n /**\n * Excludes a datum before coordinate and weight accessors run.\n * @param datum - Candidate source datum.\n * @param index - Zero-based source index.\n * @param data - Complete source data array.\n * @returns Whether this datum contributes a mark.\n */\n readonly defined?: (datum: D, index: number, data: readonly D[]) => boolean;\n /** Shared presentation. Whole-object and shallow field signals are supported. */\n readonly style?: SignalValue<SignalStyle<WeightedPointSeriesStyle>>;\n}\n\nfunction paint(\n value: unknown,\n name: string,\n): FillStyle | StrokeStyle | undefined {\n if (\n value === undefined ||\n typeof value === \"string\" ||\n value instanceof CanvasGradient ||\n value instanceof CanvasPattern\n )\n return value;\n try {\n validateTexturePaint(value as never);\n return value as FillStyle | StrokeStyle;\n } catch {\n // Normalize all unsupported public paint values to the series error.\n }\n throw new TypeError(`WeightedPointSeries: invalid ${name}.`);\n}\n\nfunction styleObject(input: unknown): WeightedPointSeriesStyle {\n if (input === null || typeof input !== \"object\" || Array.isArray(input))\n throw new TypeError(\"WeightedPointSeries: style must be an object.\");\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(input)) {\n if (!fields.includes(key))\n throw new TypeError(\n `WeightedPointSeries: unsupported style field ${key}.`,\n );\n result[key] = resolveSignalValue((input as Record<string, unknown>)[key]);\n }\n return result as WeightedPointSeriesStyle;\n}\n\nfunction normalized(style: WeightedPointSeriesStyle) {\n if (style.cursor !== undefined && typeof style.cursor !== \"string\")\n throw new TypeError(\"WeightedPointSeries: cursor must be a string.\");\n return {\n fill: paint(style.fill ?? \"#087f8c\", \"fill\"),\n stroke: paint(style.stroke, \"stroke\"),\n strokeWidth: width(\n style.strokeWidth ?? 1,\n \"WeightedPointSeries strokeWidth\",\n ),\n opacity: opacity(style.opacity ?? 1, \"WeightedPointSeries opacity\"),\n cursor: style.cursor,\n };\n}\n\nfunction range(\n value: readonly [number, number] | undefined,\n): readonly [number, number] {\n const actual: readonly [number, number] = value ?? [0, 6];\n if (\n !Array.isArray(actual) ||\n actual.length !== 2 ||\n actual[0] !== 0 ||\n !Number.isFinite(actual[1]) ||\n actual[1] < 0\n )\n throw new RangeError(\n \"WeightedPointSeries: radiusRange must be [0, a finite nonnegative maximum].\",\n );\n return actual;\n}\n\nfunction domain(value: readonly [0, number]): readonly [number, number] {\n if (\n !Array.isArray(value) ||\n value.length !== 2 ||\n value[0] !== 0 ||\n !Number.isFinite(value[1]) ||\n value[1] <= 0\n )\n throw new RangeError(\n \"WeightedPointSeries: weightDomain must be [0, a finite positive maximum].\",\n );\n return value;\n}\n\n/**\n * Draws batched circles whose visible area is proportional to supplied weights.\n *\n * Nullish weights and zero weights omit their marks. Finite positive weights must\n * fall inside `weightDomain`; the component never clamps or infers weights.\n * `data` and shared style signals schedule ordinary Pibbl updates. The component\n * owns no retained resources and returns one ordinary Pibbl pointer target.\n *\n * @param props - Supplied observations, coordinate and weight accessors, scales, and paint.\n * See {@link WeightedPointSeriesProps}.\n * @returns One batched Pibbl Path whose mark area is proportional to each supplied weight.\n * @see {@link WeightedPointSeriesProps}\n */\nexport function WeightedPointSeries<D>({\n data: input,\n x: xInput,\n y: yInput,\n weight: weightInput,\n xScale: xId,\n yScale: yId,\n weightDomain,\n radiusRange,\n defined,\n style: styleInput,\n ...events\n}: WeightedPointSeriesProps<D>) {\n const xs = useSeriesPosition(xId);\n const ys = useSeriesPosition(yId);\n const data = pointData(resolveSignalValue(input), \"WeightedPointSeries\");\n const x = seriesAccessor(xInput);\n const y = seriesAccessor(yInput);\n const weight = pointAccessor(weightInput);\n const [, maximumWeight] = domain(weightDomain);\n const [, maximumRadius] = range(radiusRange);\n const style = normalized(styleObject(resolveSignalValue(styleInput) ?? {}));\n const ctx = useCanvasContext();\n const target = new Path2D();\n const marks: {\n readonly x: number;\n readonly y: number;\n readonly radius: number;\n }[] = [];\n for (let i = 0; i < data.length; i++) {\n const datum = data[i];\n const values = withHooksForbidden(\n \"WeightedPointSeries: accessors cannot call hooks.\",\n () => {\n if (defined && !defined(datum, i, data)) return undefined;\n return {\n x: x(datum, i, data),\n y: y(datum, i, data),\n weight: weight(datum, i, data),\n };\n },\n );\n if (!values) continue;\n const mappedX = mapSeriesPosition(xs, values.x);\n const mappedY = mapSeriesPosition(ys, values.y);\n if (mappedX === undefined || mappedY === undefined) continue;\n const supplied = values.weight;\n if (supplied == null) continue;\n if (typeof supplied !== \"number\" || !Number.isFinite(supplied))\n throw new TypeError(\n \"WeightedPointSeries: weight must be a finite number.\",\n );\n if (supplied < 0)\n throw new RangeError(\"WeightedPointSeries: weight must be nonnegative.\");\n if (supplied > maximumWeight)\n throw new RangeError(\"WeightedPointSeries: weight exceeds weightDomain.\");\n if (supplied === 0 || maximumRadius === 0) continue;\n const radius = maximumRadius * Math.sqrt(supplied / maximumWeight);\n marks.push({ x: mappedX, y: mappedY, radius });\n }\n for (const { x, y, radius } of marks) {\n appendPointTarget(\n target,\n x,\n y,\n radius,\n !!style.fill,\n style.stroke ? style.strokeWidth : 0,\n );\n const path = pointPath(x, y, radius);\n ctx.save();\n try {\n ctx.globalAlpha *= style.opacity;\n if (style.fill) {\n ctx.fillStyle = resolveTexturePaint(style.fill, ctx, {\n x: x - radius,\n y: y - radius,\n width: radius * 2,\n height: radius * 2,\n });\n ctx.fill(path);\n }\n if (style.stroke && style.strokeWidth > 0) {\n ctx.strokeStyle = resolveTexturePaint(style.stroke, ctx, {\n x: x - radius,\n y: y - radius,\n width: radius * 2,\n height: radius * 2,\n });\n ctx.lineWidth = style.strokeWidth;\n ctx.stroke(path);\n }\n } finally {\n ctx.restore();\n }\n }\n return (\n <Path\n {...events}\n style={{ d: target, fill: \"transparent\", cursor: style.cursor }}\n />\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["x", "y"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ReflectionGpu, type ReflectionGpuCallbacks } from "./reflection-gpu.js";
|
|
2
|
+
/** Shares the existing private GPU resource/context-loss implementation. */
|
|
3
|
+
export declare class BackdropContrastGpu extends ReflectionGpu {
|
|
4
|
+
constructor(callbacks?: Readonly<ReflectionGpuCallbacks>);
|
|
5
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ReflectionGpu
|
|
3
|
+
} from "./reflection-gpu.js";
|
|
4
|
+
const fragment = `#version 300 es
|
|
5
|
+
precision highp float;
|
|
6
|
+
uniform sampler2D scene, map, lightMap;
|
|
7
|
+
in vec2 uv;
|
|
8
|
+
out vec4 outputColor;
|
|
9
|
+
vec3 linearRgb(vec3 c) {
|
|
10
|
+
return mix(c/12.92,pow((c+.055)/1.055,vec3(2.4)),step(vec3(.04045),c));
|
|
11
|
+
}
|
|
12
|
+
void main() {
|
|
13
|
+
float coverage=texture(scene,uv).a;
|
|
14
|
+
vec4 backdrop=texture(map,uv);
|
|
15
|
+
// A transparent current target is evaluated over white; DOM pixels are unavailable.
|
|
16
|
+
vec3 background=mix(vec3(1),backdrop.rgb,backdrop.a);
|
|
17
|
+
float luminance=dot(linearRgb(background),vec3(.2126,.7152,.0722));
|
|
18
|
+
// Equal black/white contrast occurs at sqrt(.05*1.05)-.05.
|
|
19
|
+
int choice=luminance<.179128784747792?0:1;
|
|
20
|
+
vec4 color=texelFetch(lightMap,ivec2(choice,0),0);
|
|
21
|
+
float alpha=coverage*color.a;
|
|
22
|
+
outputColor=vec4(color.rgb*alpha,alpha);
|
|
23
|
+
}
|
|
24
|
+
`;
|
|
25
|
+
class BackdropContrastGpu extends ReflectionGpu {
|
|
26
|
+
constructor(callbacks = {}) {
|
|
27
|
+
super(callbacks, fragment);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export {
|
|
31
|
+
BackdropContrastGpu
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=backdrop-contrast-gpu.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/filters/backdrop-contrast-gpu.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n ReflectionGpu,\n type ReflectionGpuCallbacks,\n} from \"./reflection-gpu.js\";\n\nconst fragment = `#version 300 es\nprecision highp float;\nuniform sampler2D scene, map, lightMap;\nin vec2 uv;\nout vec4 outputColor;\nvec3 linearRgb(vec3 c) {\n return mix(c/12.92,pow((c+.055)/1.055,vec3(2.4)),step(vec3(.04045),c));\n}\nvoid main() {\n float coverage=texture(scene,uv).a;\n vec4 backdrop=texture(map,uv);\n // A transparent current target is evaluated over white; DOM pixels are unavailable.\n vec3 background=mix(vec3(1),backdrop.rgb,backdrop.a);\n float luminance=dot(linearRgb(background),vec3(.2126,.7152,.0722));\n // Equal black/white contrast occurs at sqrt(.05*1.05)-.05.\n int choice=luminance<.179128784747792?0:1;\n vec4 color=texelFetch(lightMap,ivec2(choice,0),0);\n float alpha=coverage*color.a;\n outputColor=vec4(color.rgb*alpha,alpha);\n}\n`;\n/** Shares the existing private GPU resource/context-loss implementation. */\nexport class BackdropContrastGpu extends ReflectionGpu {\n constructor(callbacks: Readonly<ReflectionGpuCallbacks> = {}) {\n super(callbacks, fragment);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACE;AAAA,OAEK;AAEP,MAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBV,MAAM,4BAA4B,cAAc;AAAA,EACrD,YAAY,YAA8C,CAAC,GAAG;AAC5D,UAAM,WAAW,QAAQ;AAAA,EAC3B;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SignalValue } from "../lib/signals/types.js";
|
|
2
|
+
import { type PibblFilter } from "../lib/style/filter-types.js";
|
|
3
|
+
/** Two foreground colors selected per backdrop pixel. See {@link backdropContrast}. */
|
|
4
|
+
export interface PibblBackdropContrastFilterOptions {
|
|
5
|
+
/** Color drawn over dark backdrop pixels; defaults to white. See {@link SignalValue}. */
|
|
6
|
+
readonly light?: SignalValue<string>;
|
|
7
|
+
/** Color drawn over light backdrop pixels; defaults to black. See {@link SignalValue}. */
|
|
8
|
+
readonly dark?: SignalValue<string>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Recolors a receiving primitive and its descendants per pixel, using their combined alpha
|
|
12
|
+
* as a mask. Chooses light below relative backdrop luminance 0.179129 and dark otherwise.
|
|
13
|
+
* Samples already-painted content in the current Canvas target; transparent backdrop is
|
|
14
|
+
* evaluated over white. Isolated/cached layers see their own local backdrop, not outer paint.
|
|
15
|
+
* Requires OffscreenCanvas and WebGL2; performs no scene pixel readback. Geometry is unchanged.
|
|
16
|
+
*
|
|
17
|
+
* @param options - Optional signal-capable foreground colors; white and black by default.
|
|
18
|
+
* See {@link PibblBackdropContrastFilterOptions}.
|
|
19
|
+
* @returns An immutable descriptor for style.filter. See {@link PibblFilter}.
|
|
20
|
+
*/
|
|
21
|
+
export declare function backdropContrast(options?: PibblBackdropContrastFilterOptions): PibblFilter;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { isSignal } from "../lib/signals/graph.js";
|
|
2
|
+
import { layoutDiagnostic } from "../lib/style/diagnostics.js";
|
|
3
|
+
import {
|
|
4
|
+
PIBBL_FILTER_EXECUTOR
|
|
5
|
+
} from "../lib/style/filter-types.js";
|
|
6
|
+
import { concreteColor } from "./native-color.js";
|
|
7
|
+
import {
|
|
8
|
+
filterBoundaryExecutor
|
|
9
|
+
} from "./filter-executor.js";
|
|
10
|
+
import { processBackdropContrast } from "./render-backdrop-contrast-boundary.js";
|
|
11
|
+
const definitions = /* @__PURE__ */ new WeakMap();
|
|
12
|
+
const executor = {
|
|
13
|
+
prepare(value, property, context) {
|
|
14
|
+
const options = definitions.get(value);
|
|
15
|
+
if (!options)
|
|
16
|
+
throw new Error(
|
|
17
|
+
"A backdropContrast filter was created by an incompatible Pibbl runtime."
|
|
18
|
+
);
|
|
19
|
+
const color = (key, fallback) => {
|
|
20
|
+
const input = options[key];
|
|
21
|
+
const value2 = input === void 0 ? fallback : isSignal(input) ? input.get() : input;
|
|
22
|
+
const result = concreteColor(value2, `${property}.${key}`, context);
|
|
23
|
+
if (typeof CSS === "undefined" || !CSS.supports("color", result))
|
|
24
|
+
throw layoutDiagnostic({
|
|
25
|
+
component: context.component,
|
|
26
|
+
property: `${property}.${key}`,
|
|
27
|
+
value: value2,
|
|
28
|
+
algorithm: context.algorithm,
|
|
29
|
+
constraints: context.constraints,
|
|
30
|
+
reason: "must be a supported concrete CSS color"
|
|
31
|
+
});
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
const light = color("light", "white"), dark = color("dark", "black");
|
|
35
|
+
return Object.freeze({
|
|
36
|
+
executor: filterBoundaryExecutor,
|
|
37
|
+
needsBackdrop: true,
|
|
38
|
+
reverseInfluence: (output) => ({ ...output }),
|
|
39
|
+
process: (source, windows, backdrop) => {
|
|
40
|
+
if (!backdrop)
|
|
41
|
+
throw new Error(
|
|
42
|
+
"backdropContrast requires the current Canvas backdrop."
|
|
43
|
+
);
|
|
44
|
+
return processBackdropContrast(source, windows, backdrop, {
|
|
45
|
+
light,
|
|
46
|
+
dark
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
render: filterBoundaryExecutor.render
|
|
52
|
+
};
|
|
53
|
+
function backdropContrast(options = {}) {
|
|
54
|
+
const value = Object.freeze({ [PIBBL_FILTER_EXECUTOR]: executor });
|
|
55
|
+
definitions.set(value, Object.freeze({ ...options }));
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
export {
|
|
59
|
+
backdropContrast
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=backdrop-contrast.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/filters/backdrop-contrast.ts"],
|
|
4
|
+
"sourcesContent": ["import { isSignal } from \"../lib/signals/graph.js\";\nimport type { SignalValue } from \"../lib/signals/types.js\";\nimport { layoutDiagnostic } from \"../lib/style/diagnostics.js\";\nimport {\n PIBBL_FILTER_EXECUTOR,\n type PibblFilter,\n type PibblFilterExecutor,\n} from \"../lib/style/filter-types.js\";\nimport { concreteColor } from \"./native-color.js\";\nimport {\n filterBoundaryExecutor,\n type CustomPreparedFilter,\n} from \"./filter-executor.js\";\nimport { processBackdropContrast } from \"./render-backdrop-contrast-boundary.js\";\n\n/** Two foreground colors selected per backdrop pixel. See {@link backdropContrast}. */\nexport interface PibblBackdropContrastFilterOptions {\n /** Color drawn over dark backdrop pixels; defaults to white. See {@link SignalValue}. */\n readonly light?: SignalValue<string>;\n /** Color drawn over light backdrop pixels; defaults to black. See {@link SignalValue}. */\n readonly dark?: SignalValue<string>;\n}\nconst definitions = new WeakMap<\n PibblFilter,\n Readonly<PibblBackdropContrastFilterOptions>\n>();\nconst executor: PibblFilterExecutor = {\n prepare(value, property, context) {\n const options = definitions.get(value);\n if (!options)\n throw new Error(\n \"A backdropContrast filter was created by an incompatible Pibbl runtime.\",\n );\n const color = (key: \"light\" | \"dark\", fallback: string) => {\n const input = options[key];\n const value =\n input === undefined ? fallback : isSignal(input) ? input.get() : input;\n const result = concreteColor(value, `${property}.${key}`, context);\n if (typeof CSS === \"undefined\" || !CSS.supports(\"color\", result))\n throw layoutDiagnostic({\n component: context.component,\n property: `${property}.${key}`,\n value,\n algorithm: context.algorithm,\n constraints: context.constraints,\n reason: \"must be a supported concrete CSS color\",\n });\n return result;\n };\n const light = color(\"light\", \"white\"),\n dark = color(\"dark\", \"black\");\n return Object.freeze({\n executor: filterBoundaryExecutor,\n needsBackdrop: true,\n reverseInfluence: (output) => ({ ...output }),\n process: (source, windows, backdrop) => {\n if (!backdrop)\n throw new Error(\n \"backdropContrast requires the current Canvas backdrop.\",\n );\n return processBackdropContrast(source, windows, backdrop, {\n light,\n dark,\n });\n },\n } satisfies CustomPreparedFilter);\n },\n render: filterBoundaryExecutor.render,\n};\n/**\n * Recolors a receiving primitive and its descendants per pixel, using their combined alpha\n * as a mask. Chooses light below relative backdrop luminance 0.179129 and dark otherwise.\n * Samples already-painted content in the current Canvas target; transparent backdrop is\n * evaluated over white. Isolated/cached layers see their own local backdrop, not outer paint.\n * Requires OffscreenCanvas and WebGL2; performs no scene pixel readback. Geometry is unchanged.\n *\n * @param options - Optional signal-capable foreground colors; white and black by default.\n * See {@link PibblBackdropContrastFilterOptions}.\n * @returns An immutable descriptor for style.filter. See {@link PibblFilter}.\n */\nexport function backdropContrast(\n options: PibblBackdropContrastFilterOptions = {},\n): PibblFilter {\n const value = Object.freeze({ [PIBBL_FILTER_EXECUTOR]: executor });\n definitions.set(value, Object.freeze({ ...options }));\n return value;\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AACjC;AAAA,EACE;AAAA,OAGK;AACP,SAAS,qBAAqB;AAC9B;AAAA,EACE;AAAA,OAEK;AACP,SAAS,+BAA+B;AASxC,MAAM,cAAc,oBAAI,QAGtB;AACF,MAAM,WAAgC;AAAA,EACpC,QAAQ,OAAO,UAAU,SAAS;AAChC,UAAM,UAAU,YAAY,IAAI,KAAK;AACrC,QAAI,CAAC;AACH,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AACF,UAAM,QAAQ,CAAC,KAAuB,aAAqB;AACzD,YAAM,QAAQ,QAAQ,GAAG;AACzB,YAAMA,SACJ,UAAU,SAAY,WAAW,SAAS,KAAK,IAAI,MAAM,IAAI,IAAI;AACnE,YAAM,SAAS,cAAcA,QAAO,GAAG,QAAQ,IAAI,GAAG,IAAI,OAAO;AACjE,UAAI,OAAO,QAAQ,eAAe,CAAC,IAAI,SAAS,SAAS,MAAM;AAC7D,cAAM,iBAAiB;AAAA,UACrB,WAAW,QAAQ;AAAA,UACnB,UAAU,GAAG,QAAQ,IAAI,GAAG;AAAA,UAC5B,OAAAA;AAAA,UACA,WAAW,QAAQ;AAAA,UACnB,aAAa,QAAQ;AAAA,UACrB,QAAQ;AAAA,QACV,CAAC;AACH,aAAO;AAAA,IACT;AACA,UAAM,QAAQ,MAAM,SAAS,OAAO,GAClC,OAAO,MAAM,QAAQ,OAAO;AAC9B,WAAO,OAAO,OAAO;AAAA,MACnB,UAAU;AAAA,MACV,eAAe;AAAA,MACf,kBAAkB,CAAC,YAAY,EAAE,GAAG,OAAO;AAAA,MAC3C,SAAS,CAAC,QAAQ,SAAS,aAAa;AACtC,YAAI,CAAC;AACH,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AACF,eAAO,wBAAwB,QAAQ,SAAS,UAAU;AAAA,UACxD;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAgC;AAAA,EAClC;AAAA,EACA,QAAQ,uBAAuB;AACjC;AAYO,SAAS,iBACd,UAA8C,CAAC,GAClC;AACb,QAAM,QAAQ,OAAO,OAAO,EAAE,CAAC,qBAAqB,GAAG,SAAS,CAAC;AACjE,cAAY,IAAI,OAAO,OAAO,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;AACpD,SAAO;AACT;",
|
|
6
|
+
"names": ["value"]
|
|
7
|
+
}
|
|
@@ -22,7 +22,7 @@ const displacementExecutor = {
|
|
|
22
22
|
}
|
|
23
23
|
const identity = strengthValue === 0 && blurRadius === 0;
|
|
24
24
|
const { x, y, width, height } = options.region;
|
|
25
|
-
if (!
|
|
25
|
+
if (!(Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(width) && Number.isFinite(height)) || width <= 0 || height <= 0) {
|
|
26
26
|
throw diagnostic(`${property}.region`, options.region, "must have finite coordinates and positive finite dimensions", context);
|
|
27
27
|
}
|
|
28
28
|
const map = isSignal(options.map) ? options.map.get() : options.map;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/filters/displacement.ts"],
|
|
4
|
-
"sourcesContent": ["import { isSignal } from '../lib/signals/graph.js';\nimport { layoutDiagnostic } from '../lib/style/diagnostics.js';\nimport {\n PIBBL_FILTER_EXECUTOR,\n type PibblDisplacementFilterOptions,\n type PibblFilter,\n type PibblFilterExecutor,\n type PreparedPibblFilter,\n} from '../lib/style/filter-types.js';\nimport type { StyleResolutionContext } from '../lib/types.js';\nimport { borrowTextureRaster, validateTexturePaint } from '../lib/textures/texture-protocol.js';\nimport { processDisplacement } from './render-displacement-boundary.js';\nimport { filterBoundaryExecutor, type CustomPreparedFilter } from './filter-executor.js';\nimport { expandDisplacementInput } from './displacement-math.js';\n\nconst definitions = new WeakMap<PibblFilter, Readonly<PibblDisplacementFilterOptions>>();\nconst displacementExecutor: PibblFilterExecutor = {\n prepare(value, property, context): PreparedPibblFilter {\n const options = definitions.get(value);\n if (!options) throw new Error('A displacement filter value was created by an incompatible Pibbl runtime.');\n const strengthValue = isSignal(options.strength) ? options.strength.get() : options.strength;\n if (typeof strengthValue !== 'number' || !Number.isFinite(strengthValue) || strengthValue < 0) {\n throw diagnostic(`${property}.strength`, strengthValue, 'must be a finite nonnegative number', context);\n }\n const blurRadius = isSignal(options.blurRadius) ? options.blurRadius.get() : options.blurRadius ?? 0;\n if (typeof blurRadius !== 'number' || !Number.isFinite(blurRadius) || blurRadius < 0) {\n throw diagnostic(`${property}.blurRadius`, blurRadius, 'must be a finite nonnegative number', context);\n }\n const identity = strengthValue === 0 && blurRadius === 0;\n const { x, y, width, height } = options.region;\n if (!
|
|
5
|
-
"mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AACjC;AAAA,EACE;AAAA,OAKK;AAEP,SAAS,qBAAqB,4BAA4B;AAC1D,SAAS,2BAA2B;AACpC,SAAS,8BAAyD;AAClE,SAAS,+BAA+B;AAExC,MAAM,cAAc,oBAAI,QAA+D;AACvF,MAAM,uBAA4C;AAAA,EAChD,QAAQ,OAAO,UAAU,SAA8B;AACrD,UAAM,UAAU,YAAY,IAAI,KAAK;AACrC,QAAI,CAAC,QAAS,OAAM,IAAI,MAAM,2EAA2E;AACzG,UAAM,gBAAgB,SAAS,QAAQ,QAAQ,IAAI,QAAQ,SAAS,IAAI,IAAI,QAAQ;AACpF,QAAI,OAAO,kBAAkB,YAAY,CAAC,OAAO,SAAS,aAAa,KAAK,gBAAgB,GAAG;AAC7F,YAAM,WAAW,GAAG,QAAQ,aAAa,eAAe,uCAAuC,OAAO;AAAA,IACxG;AACA,UAAM,aAAa,SAAS,QAAQ,UAAU,IAAI,QAAQ,WAAW,IAAI,IAAI,QAAQ,cAAc;AACnG,QAAI,OAAO,eAAe,YAAY,CAAC,OAAO,SAAS,UAAU,KAAK,aAAa,GAAG;AACpF,YAAM,WAAW,GAAG,QAAQ,eAAe,YAAY,uCAAuC,OAAO;AAAA,IACvG;AACA,UAAM,WAAW,kBAAkB,KAAK,eAAe;AACvD,UAAM,EAAE,GAAG,GAAG,OAAO,OAAO,IAAI,QAAQ;AACxC,
|
|
4
|
+
"sourcesContent": ["import { isSignal } from '../lib/signals/graph.js';\nimport { layoutDiagnostic } from '../lib/style/diagnostics.js';\nimport {\n PIBBL_FILTER_EXECUTOR,\n type PibblDisplacementFilterOptions,\n type PibblFilter,\n type PibblFilterExecutor,\n type PreparedPibblFilter,\n} from '../lib/style/filter-types.js';\nimport type { StyleResolutionContext } from '../lib/types.js';\nimport { borrowTextureRaster, validateTexturePaint } from '../lib/textures/texture-protocol.js';\nimport { processDisplacement } from './render-displacement-boundary.js';\nimport { filterBoundaryExecutor, type CustomPreparedFilter } from './filter-executor.js';\nimport { expandDisplacementInput } from './displacement-math.js';\n\nconst definitions = new WeakMap<PibblFilter, Readonly<PibblDisplacementFilterOptions>>();\nconst displacementExecutor: PibblFilterExecutor = {\n prepare(value, property, context): PreparedPibblFilter {\n const options = definitions.get(value);\n if (!options) throw new Error('A displacement filter value was created by an incompatible Pibbl runtime.');\n const strengthValue = isSignal(options.strength) ? options.strength.get() : options.strength;\n if (typeof strengthValue !== 'number' || !Number.isFinite(strengthValue) || strengthValue < 0) {\n throw diagnostic(`${property}.strength`, strengthValue, 'must be a finite nonnegative number', context);\n }\n const blurRadius = isSignal(options.blurRadius) ? options.blurRadius.get() : options.blurRadius ?? 0;\n if (typeof blurRadius !== 'number' || !Number.isFinite(blurRadius) || blurRadius < 0) {\n throw diagnostic(`${property}.blurRadius`, blurRadius, 'must be a finite nonnegative number', context);\n }\n const identity = strengthValue === 0 && blurRadius === 0;\n const { x, y, width, height } = options.region;\n if (\n !(\n Number.isFinite(x) &&\n Number.isFinite(y) &&\n Number.isFinite(width) &&\n Number.isFinite(height)\n ) ||\n width <= 0 ||\n height <= 0\n ) {\n throw diagnostic(`${property}.region`, options.region, 'must have finite coordinates and positive finite dimensions', context);\n }\n const map = isSignal(options.map) ? options.map.get() : options.map;\n try {\n validateTexturePaint(map);\n // Receiver preparation owns revision dependencies, before subtree execution\n // changes signal tracking to descendant consumers.\n if (!identity) borrowTextureRaster(map, () => undefined);\n }\n catch (error) {\n throw diagnostic(`${property}.map`, map, error instanceof Error ? error.message : String(error), context);\n }\n const region = Object.freeze({ x, y, width, height });\n return Object.freeze({\n executor: filterBoundaryExecutor,\n textureWarp: blurRadius === 0 ? Object.freeze({ map, strength: strengthValue, region }) : undefined,\n reverseInfluence: (output, density) => expandDisplacementInput(output, strengthValue + blurRadius, density),\n process: identity ? undefined : (source, windows) => {\n try { return processDisplacement(source, windows, map, strengthValue, region, blurRadius); }\n catch (error) {\n const failure = diagnostic(property, { strength: strengthValue, region }, `displacement processing failed: ${error instanceof Error ? error.message : String(error)}`, context);\n Object.defineProperty(failure, 'cause', { value: error });\n throw failure;\n }\n },\n } satisfies CustomPreparedFilter);\n },\n render: filterBoundaryExecutor.render,\n};\n\n/**\n * Creates a displacement filter descriptor for a primitive's style.filter list. Filtering changes\n * pixels without changing layout or hit geometry.\n *\n * @param options - Displacement texture, channel selection, and displacement scale. See\n * {@link PibblDisplacementFilterOptions} .\n * @returns A displacement filter descriptor for style.filter. See {@link PibblFilter}.\n *\n * @see {@link PibblDisplacementFilterOptions}\n * @see {@link PibblFilter}\n */\nexport function displacement(options: PibblDisplacementFilterOptions): PibblFilter {\n const definition = Object.freeze({ map: options.map, strength: options.strength, blurRadius: options.blurRadius, region: Object.freeze({ ...options.region }) });\n const value = Object.freeze({ [PIBBL_FILTER_EXECUTOR]: displacementExecutor });\n definitions.set(value, definition);\n return value;\n}\n\nfunction diagnostic(property: string, value: unknown, reason: string, context: Readonly<StyleResolutionContext>): Error {\n return layoutDiagnostic({ component: context.component, property, value, algorithm: context.algorithm, constraints: context.constraints, reason });\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|