@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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { LineAccessor } from "./types.js";
|
|
2
|
+
/** Inputs for a fixed-base financial comparison. See {@link percentageReturns}. */
|
|
3
|
+
export interface ComparisonBaseOptions<D> {
|
|
4
|
+
/** UTC-millisecond property or callback that identifies the common base observation. */
|
|
5
|
+
readonly time: LineAccessor<D>;
|
|
6
|
+
/** Numeric property or callback that supplies each instrument's observed value. */
|
|
7
|
+
readonly value: LineAccessor<D>;
|
|
8
|
+
/** Safe UTC-millisecond timestamp that must match exactly one eligible complete observation. */
|
|
9
|
+
readonly baseTime: number;
|
|
10
|
+
/**
|
|
11
|
+
* Excludes a row before either accessor runs and produces a derived gap.
|
|
12
|
+
* @param datum - Original source observation.
|
|
13
|
+
* @param index - Original source index.
|
|
14
|
+
* @param data - Complete original source array.
|
|
15
|
+
* @returns Whether this observation is eligible for the base and derived points.
|
|
16
|
+
*/
|
|
17
|
+
readonly defined?: (datum: D, index: number, data: readonly D[]) => boolean;
|
|
18
|
+
}
|
|
19
|
+
/** One source-ordered cumulative simple-return observation. See {@link percentageReturns}. */
|
|
20
|
+
export interface PercentageReturnPoint<D> {
|
|
21
|
+
/** Caller-owned original observation. */
|
|
22
|
+
readonly datum: D;
|
|
23
|
+
/** Original index, including rows that become gaps. */
|
|
24
|
+
readonly sourceIndex: number;
|
|
25
|
+
/** Evaluated finite timestamp, or null for a missing, invalid, or excluded row. */
|
|
26
|
+
readonly time: number | null;
|
|
27
|
+
/** Percentage change from the common base, or null for a gap. */
|
|
28
|
+
readonly returnPercent: number | null;
|
|
29
|
+
}
|
|
30
|
+
/** One source-ordered base-100 indexed observation. See {@link indexTo100}. */
|
|
31
|
+
export interface IndexedValuePoint<D> {
|
|
32
|
+
/** Caller-owned original observation. */
|
|
33
|
+
readonly datum: D;
|
|
34
|
+
/** Original index, including rows that become gaps. */
|
|
35
|
+
readonly sourceIndex: number;
|
|
36
|
+
/** Evaluated finite timestamp, or null for a missing, invalid, or excluded row. */
|
|
37
|
+
readonly time: number | null;
|
|
38
|
+
/** Value indexed to 100 at the common base, or null for a gap. */
|
|
39
|
+
readonly indexValue: number | null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Derives source-ordered cumulative simple percentage returns from one exact positive base.
|
|
43
|
+
*
|
|
44
|
+
* Each defined finite observation becomes `(value / baseValue - 1) * 100`, expressed in
|
|
45
|
+
* percentage points. This is a fixed-base return series, not a period-over-period return.
|
|
46
|
+
* Missing/nonfinite values become explicit gaps; a missing exact base returns undefined.
|
|
47
|
+
* @param data - Caller-owned source observations in presentation order.
|
|
48
|
+
* @param options - Time/value accessors, exact common base, and optional eligibility predicate.
|
|
49
|
+
* @returns Frozen points, or undefined when no eligible complete exact base exists.
|
|
50
|
+
* @see {@link ComparisonBaseOptions}
|
|
51
|
+
*/
|
|
52
|
+
export declare function percentageReturns<D>(data: readonly D[], options: ComparisonBaseOptions<D>): readonly PercentageReturnPoint<D>[] | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Derives source-ordered values indexed to 100 at one exact positive base observation.
|
|
55
|
+
*
|
|
56
|
+
* Missing/nonfinite values become explicit gaps; a missing exact base returns undefined.
|
|
57
|
+
* @param data - Caller-owned source observations in presentation order.
|
|
58
|
+
* @param options - Time/value accessors, exact common base, and optional eligibility predicate.
|
|
59
|
+
* @returns Frozen points, or undefined when no eligible complete exact base exists.
|
|
60
|
+
* @see {@link ComparisonBaseOptions}
|
|
61
|
+
*/
|
|
62
|
+
export declare function indexTo100<D>(data: readonly D[], options: ComparisonBaseOptions<D>): readonly IndexedValuePoint<D>[] | undefined;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { finiteCoordinate, pointAccessor, pointData } from "./point-data.js";
|
|
2
|
+
const DATE_LIMIT = 864e13;
|
|
3
|
+
function validBaseTime(value) {
|
|
4
|
+
if (!Number.isSafeInteger(value) || Math.abs(value) > DATE_LIMIT)
|
|
5
|
+
throw new RangeError(
|
|
6
|
+
"comparison baseTime must be a safe integer UTC millisecond within Date range."
|
|
7
|
+
);
|
|
8
|
+
}
|
|
9
|
+
function percentageOf(value, base) {
|
|
10
|
+
return Math.abs(value) <= Number.MAX_VALUE / 100 ? value * 100 / base : value / base * 100;
|
|
11
|
+
}
|
|
12
|
+
function returnPercent(value, base) {
|
|
13
|
+
if (value === base) return 0;
|
|
14
|
+
const difference = value - base;
|
|
15
|
+
return Number.isFinite(difference) ? difference / base * 100 : percentageOf(value, base) - 100;
|
|
16
|
+
}
|
|
17
|
+
function comparisonBase(rows, baseTime) {
|
|
18
|
+
let matches = 0;
|
|
19
|
+
let baseValue;
|
|
20
|
+
for (const row of rows) {
|
|
21
|
+
if (!row.eligible || row.time !== baseTime || row.value === null) continue;
|
|
22
|
+
matches++;
|
|
23
|
+
baseValue = row.value;
|
|
24
|
+
}
|
|
25
|
+
if (matches === 0) return void 0;
|
|
26
|
+
if (matches > 1)
|
|
27
|
+
throw new RangeError(
|
|
28
|
+
"comparison baseTime matches multiple eligible complete observations and is ambiguous."
|
|
29
|
+
);
|
|
30
|
+
if (baseValue <= 0)
|
|
31
|
+
throw new RangeError("comparison base observation must be positive.");
|
|
32
|
+
return baseValue;
|
|
33
|
+
}
|
|
34
|
+
function comparisonPoints(data, options, derived, point) {
|
|
35
|
+
const rows = pointData(data, "comparison");
|
|
36
|
+
validBaseTime(options.baseTime);
|
|
37
|
+
const time = pointAccessor(options.time);
|
|
38
|
+
const value = pointAccessor(options.value);
|
|
39
|
+
const evaluated = rows.map((datum, index) => {
|
|
40
|
+
const eligible = options.defined?.(datum, index, rows) ?? true;
|
|
41
|
+
if (!eligible) return Object.freeze({ eligible, time: null, value: null });
|
|
42
|
+
const timestamp = time(datum, index, rows);
|
|
43
|
+
if (!finiteCoordinate(timestamp))
|
|
44
|
+
return Object.freeze({ eligible, time: null, value: null });
|
|
45
|
+
const observed = value(datum, index, rows);
|
|
46
|
+
return Object.freeze({
|
|
47
|
+
eligible,
|
|
48
|
+
time: timestamp,
|
|
49
|
+
value: finiteCoordinate(observed) ? observed : null
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
const base = comparisonBase(evaluated, options.baseTime);
|
|
53
|
+
if (base === void 0) return void 0;
|
|
54
|
+
return Object.freeze(rows.map((datum, sourceIndex) => {
|
|
55
|
+
const row = evaluated[sourceIndex];
|
|
56
|
+
if (!row.eligible || row.time === null)
|
|
57
|
+
return Object.freeze(point(datum, sourceIndex, null, null));
|
|
58
|
+
if (row.value === null)
|
|
59
|
+
return Object.freeze(point(datum, sourceIndex, row.time, null));
|
|
60
|
+
const result = derived(row.value, base);
|
|
61
|
+
if (!Number.isFinite(result))
|
|
62
|
+
throw new RangeError(
|
|
63
|
+
`comparison derived value at source index ${sourceIndex} must be finite.`
|
|
64
|
+
);
|
|
65
|
+
return Object.freeze(point(datum, sourceIndex, row.time, result));
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
function percentageReturns(data, options) {
|
|
69
|
+
return comparisonPoints(
|
|
70
|
+
data,
|
|
71
|
+
options,
|
|
72
|
+
returnPercent,
|
|
73
|
+
(datum, sourceIndex, time, returnPercent2) => ({
|
|
74
|
+
datum,
|
|
75
|
+
sourceIndex,
|
|
76
|
+
time,
|
|
77
|
+
returnPercent: returnPercent2
|
|
78
|
+
})
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
function indexTo100(data, options) {
|
|
82
|
+
return comparisonPoints(
|
|
83
|
+
data,
|
|
84
|
+
options,
|
|
85
|
+
(value, base) => value === base ? 100 : percentageOf(value, base),
|
|
86
|
+
(datum, sourceIndex, time, indexValue) => ({
|
|
87
|
+
datum,
|
|
88
|
+
sourceIndex,
|
|
89
|
+
time,
|
|
90
|
+
indexValue
|
|
91
|
+
})
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
export {
|
|
95
|
+
indexTo100,
|
|
96
|
+
percentageReturns
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=financial-comparison.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/features/viz/lib/financial-comparison.ts"],
|
|
4
|
+
"sourcesContent": ["import type { LineAccessor } from \"./types.js\";\nimport { finiteCoordinate, pointAccessor, pointData } from \"./point-data.js\";\n\n/** Inputs for a fixed-base financial comparison. See {@link percentageReturns}. */\nexport interface ComparisonBaseOptions<D> {\n /** UTC-millisecond property or callback that identifies the common base observation. */\n readonly time: LineAccessor<D>;\n /** Numeric property or callback that supplies each instrument's observed value. */\n readonly value: LineAccessor<D>;\n /** Safe UTC-millisecond timestamp that must match exactly one eligible complete observation. */\n readonly baseTime: number;\n /**\n * Excludes a row before either accessor runs and produces a derived gap.\n * @param datum - Original source observation.\n * @param index - Original source index.\n * @param data - Complete original source array.\n * @returns Whether this observation is eligible for the base and derived points.\n */\n readonly defined?: (datum: D, index: number, data: readonly D[]) => boolean;\n}\n\n/** One source-ordered cumulative simple-return observation. See {@link percentageReturns}. */\nexport interface PercentageReturnPoint<D> {\n /** Caller-owned original observation. */\n readonly datum: D;\n /** Original index, including rows that become gaps. */\n readonly sourceIndex: number;\n /** Evaluated finite timestamp, or null for a missing, invalid, or excluded row. */\n readonly time: number | null;\n /** Percentage change from the common base, or null for a gap. */\n readonly returnPercent: number | null;\n}\n\n/** One source-ordered base-100 indexed observation. See {@link indexTo100}. */\nexport interface IndexedValuePoint<D> {\n /** Caller-owned original observation. */\n readonly datum: D;\n /** Original index, including rows that become gaps. */\n readonly sourceIndex: number;\n /** Evaluated finite timestamp, or null for a missing, invalid, or excluded row. */\n readonly time: number | null;\n /** Value indexed to 100 at the common base, or null for a gap. */\n readonly indexValue: number | null;\n}\n\nconst DATE_LIMIT = 8_640_000_000_000_000;\n\nfunction validBaseTime(value: number): void {\n if (!Number.isSafeInteger(value) || Math.abs(value) > DATE_LIMIT)\n throw new RangeError(\n \"comparison baseTime must be a safe integer UTC millisecond within Date range.\",\n );\n}\n\nfunction percentageOf(value: number, base: number): number {\n // Multiplying first preserves tiny finite indexed values; dividing first preserves\n // large finite ratios whose multiplication would otherwise overflow unnecessarily.\n return Math.abs(value) <= Number.MAX_VALUE / 100\n ? (value * 100) / base\n : (value / base) * 100;\n}\n\nfunction returnPercent(value: number, base: number): number {\n if (value === base) return 0;\n const difference = value - base;\n return Number.isFinite(difference)\n ? (difference / base) * 100\n : percentageOf(value, base) - 100;\n}\n\ninterface EvaluatedComparisonRow {\n readonly eligible: boolean;\n readonly time: number | null;\n readonly value: number | null;\n}\n\nfunction comparisonBase(\n rows: readonly EvaluatedComparisonRow[],\n baseTime: number,\n): number | undefined {\n let matches = 0;\n let baseValue: number | undefined;\n for (const row of rows) {\n if (!row.eligible || row.time !== baseTime || row.value === null) continue;\n matches++;\n baseValue = row.value;\n }\n if (matches === 0) return undefined;\n if (matches > 1)\n throw new RangeError(\n \"comparison baseTime matches multiple eligible complete observations and is ambiguous.\",\n );\n if (baseValue! <= 0)\n throw new RangeError(\"comparison base observation must be positive.\");\n return baseValue;\n}\n\nfunction comparisonPoints<D, P>(\n data: readonly D[],\n options: ComparisonBaseOptions<D>,\n derived: (value: number, base: number) => number,\n point: (datum: D, sourceIndex: number, time: number | null, value: number | null) => P,\n): readonly P[] | undefined {\n const rows = pointData(data, \"comparison\");\n validBaseTime(options.baseTime);\n const time = pointAccessor(options.time);\n const value = pointAccessor(options.value);\n const evaluated = rows.map((datum, index): EvaluatedComparisonRow => {\n const eligible = options.defined?.(datum, index, rows) ?? true;\n if (!eligible) return Object.freeze({ eligible, time: null, value: null });\n const timestamp = time(datum, index, rows);\n if (!finiteCoordinate(timestamp))\n return Object.freeze({ eligible, time: null, value: null });\n const observed = value(datum, index, rows);\n return Object.freeze({\n eligible,\n time: timestamp,\n value: finiteCoordinate(observed) ? observed : null,\n });\n });\n const base = comparisonBase(evaluated, options.baseTime);\n if (base === undefined) return undefined;\n return Object.freeze(rows.map((datum, sourceIndex) => {\n const row = evaluated[sourceIndex]!;\n if (!row.eligible || row.time === null)\n return Object.freeze(point(datum, sourceIndex, null, null));\n if (row.value === null)\n return Object.freeze(point(datum, sourceIndex, row.time, null));\n const result = derived(row.value, base);\n if (!Number.isFinite(result))\n throw new RangeError(\n `comparison derived value at source index ${sourceIndex} must be finite.`,\n );\n return Object.freeze(point(datum, sourceIndex, row.time, result));\n }));\n}\n\n/**\n * Derives source-ordered cumulative simple percentage returns from one exact positive base.\n *\n * Each defined finite observation becomes `(value / baseValue - 1) * 100`, expressed in\n * percentage points. This is a fixed-base return series, not a period-over-period return.\n * Missing/nonfinite values become explicit gaps; a missing exact base returns undefined.\n * @param data - Caller-owned source observations in presentation order.\n * @param options - Time/value accessors, exact common base, and optional eligibility predicate.\n * @returns Frozen points, or undefined when no eligible complete exact base exists.\n * @see {@link ComparisonBaseOptions}\n */\nexport function percentageReturns<D>(\n data: readonly D[],\n options: ComparisonBaseOptions<D>,\n): readonly PercentageReturnPoint<D>[] | undefined {\n return comparisonPoints(\n data,\n options,\n returnPercent,\n (datum, sourceIndex, time, returnPercent) => ({\n datum,\n sourceIndex,\n time,\n returnPercent,\n }),\n );\n}\n\n/**\n * Derives source-ordered values indexed to 100 at one exact positive base observation.\n *\n * Missing/nonfinite values become explicit gaps; a missing exact base returns undefined.\n * @param data - Caller-owned source observations in presentation order.\n * @param options - Time/value accessors, exact common base, and optional eligibility predicate.\n * @returns Frozen points, or undefined when no eligible complete exact base exists.\n * @see {@link ComparisonBaseOptions}\n */\nexport function indexTo100<D>(\n data: readonly D[],\n options: ComparisonBaseOptions<D>,\n): readonly IndexedValuePoint<D>[] | undefined {\n return comparisonPoints(\n data,\n options,\n (value, base) => value === base ? 100 : percentageOf(value, base),\n (datum, sourceIndex, time, indexValue) => ({\n datum,\n sourceIndex,\n time,\n indexValue,\n }),\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["returnPercent"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/** Local coordinates for one candle body and wick. */
|
|
2
|
+
export interface CandleGeometry {
|
|
3
|
+
/** Normalized rectangle that paints the open/close body. */
|
|
4
|
+
readonly bodyBoundsLocal: Readonly<{
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
}>;
|
|
10
|
+
/** Vertical wick endpoints in the caller's high/low coordinate order. */
|
|
11
|
+
readonly wickLocal: Readonly<{
|
|
12
|
+
x: number;
|
|
13
|
+
lowY: number;
|
|
14
|
+
highY: number;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
/** Inputs already mapped into a series' local coordinate system. */
|
|
18
|
+
export interface CandleGeometryInput {
|
|
19
|
+
readonly centerX: number;
|
|
20
|
+
readonly openY: number;
|
|
21
|
+
readonly closeY: number;
|
|
22
|
+
readonly highY: number;
|
|
23
|
+
readonly lowY: number;
|
|
24
|
+
readonly width: number;
|
|
25
|
+
readonly dojiHeight: number;
|
|
26
|
+
}
|
|
27
|
+
/** Inputs already mapped into a volume series' local coordinate system. */
|
|
28
|
+
export interface VolumeGeometryInput {
|
|
29
|
+
readonly centerX: number;
|
|
30
|
+
readonly valueY: number;
|
|
31
|
+
readonly baselineY: number;
|
|
32
|
+
readonly width: number;
|
|
33
|
+
}
|
|
34
|
+
/** Options for the common financial mark width calculation. */
|
|
35
|
+
export interface FinancialMarkWidthOptions {
|
|
36
|
+
/** A caller-selected local mark width. */
|
|
37
|
+
readonly width?: number;
|
|
38
|
+
/** Width to use when fewer than two distinct local x positions are available. */
|
|
39
|
+
readonly fallbackWidth?: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Calculates local, paint-ready candle geometry without consulting a scale.
|
|
43
|
+
*
|
|
44
|
+
* The body spans the mapped open and close coordinates. Equal values produce a
|
|
45
|
+
* centered doji whose height is at least one local unit.
|
|
46
|
+
*
|
|
47
|
+
* @param input - Already-mapped candle coordinates and local dimensions.
|
|
48
|
+
* @returns Frozen normalized body bounds and source-ordered wick endpoints.
|
|
49
|
+
*/
|
|
50
|
+
export declare function candleGeometry(input: CandleGeometryInput): CandleGeometry;
|
|
51
|
+
/**
|
|
52
|
+
* Calculates the local rectangle for a volume column without consulting a scale.
|
|
53
|
+
*
|
|
54
|
+
* @param input - Mapped column center, mapped value and baseline, and local width.
|
|
55
|
+
* @returns Frozen rectangle with a nonnegative height; equal endpoints return height zero.
|
|
56
|
+
*/
|
|
57
|
+
export declare function volumeGeometry(input: VolumeGeometryInput): Readonly<{
|
|
58
|
+
x: number;
|
|
59
|
+
y: number;
|
|
60
|
+
width: number;
|
|
61
|
+
height: number;
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Finds the smallest positive separation of adjacent mapped local x positions.
|
|
65
|
+
*
|
|
66
|
+
* @param positions - Mapped positions in source order.
|
|
67
|
+
* @returns The smallest positive adjacent separation, or undefined when none exists.
|
|
68
|
+
*/
|
|
69
|
+
export declare function smallestAdjacentSpacing(positions: readonly number[]): number | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Computes a shared local mark width from mapped x spacing.
|
|
72
|
+
*
|
|
73
|
+
* @param positions - Mapped positions in source order.
|
|
74
|
+
* @param options - Optional explicit or singleton fallback width.
|
|
75
|
+
* @returns Explicit width, or 70% of the smallest spacing capped at 12 local units.
|
|
76
|
+
*/
|
|
77
|
+
export declare function financialMarkWidth(positions: readonly number[], options?: FinancialMarkWidthOptions): number;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
function finite(value, name) {
|
|
2
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
3
|
+
throw new RangeError(`${name} must be finite.`);
|
|
4
|
+
return value;
|
|
5
|
+
}
|
|
6
|
+
function positive(value, name) {
|
|
7
|
+
finite(value, name);
|
|
8
|
+
if (value <= 0) throw new RangeError(`${name} must be greater than zero.`);
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
function candleGeometry(input) {
|
|
12
|
+
const centerX = finite(input.centerX, "centerX");
|
|
13
|
+
const openY = finite(input.openY, "openY");
|
|
14
|
+
const closeY = finite(input.closeY, "closeY");
|
|
15
|
+
const highY = finite(input.highY, "highY");
|
|
16
|
+
const lowY = finite(input.lowY, "lowY");
|
|
17
|
+
const markWidth = positive(input.width, "width");
|
|
18
|
+
const dojiHeight = finite(input.dojiHeight, "dojiHeight");
|
|
19
|
+
if (dojiHeight < 0) throw new RangeError("dojiHeight must be nonnegative.");
|
|
20
|
+
const height = openY === closeY ? Math.max(1, dojiHeight) : Math.abs(closeY - openY);
|
|
21
|
+
const y = openY === closeY ? openY - height / 2 : Math.min(openY, closeY);
|
|
22
|
+
return Object.freeze({
|
|
23
|
+
bodyBoundsLocal: Object.freeze({
|
|
24
|
+
x: centerX - markWidth / 2,
|
|
25
|
+
y,
|
|
26
|
+
width: markWidth,
|
|
27
|
+
height
|
|
28
|
+
}),
|
|
29
|
+
wickLocal: Object.freeze({ x: centerX, lowY, highY })
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
function volumeGeometry(input) {
|
|
33
|
+
const centerX = finite(input.centerX, "centerX");
|
|
34
|
+
const valueY = finite(input.valueY, "valueY");
|
|
35
|
+
const baselineY = finite(input.baselineY, "baselineY");
|
|
36
|
+
const width = positive(input.width, "width");
|
|
37
|
+
return Object.freeze({
|
|
38
|
+
x: centerX - width / 2,
|
|
39
|
+
y: Math.min(valueY, baselineY),
|
|
40
|
+
width,
|
|
41
|
+
height: Math.abs(valueY - baselineY)
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
function smallestAdjacentSpacing(positions) {
|
|
45
|
+
let smallest = Infinity;
|
|
46
|
+
for (let index = 0; index < positions.length; index++) {
|
|
47
|
+
finite(positions[index], `positions[${index}]`);
|
|
48
|
+
if (index > 0) {
|
|
49
|
+
const separation = Math.abs(positions[index] - positions[index - 1]);
|
|
50
|
+
if (separation > 0) smallest = Math.min(smallest, separation);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return smallest === Infinity ? void 0 : smallest;
|
|
54
|
+
}
|
|
55
|
+
function financialMarkWidth(positions, options = {}) {
|
|
56
|
+
if (options.width !== void 0) return positive(options.width, "width");
|
|
57
|
+
const spacing = smallestAdjacentSpacing(positions);
|
|
58
|
+
if (spacing !== void 0) return Math.min(12, spacing * 0.7);
|
|
59
|
+
return positive(options.fallbackWidth ?? 8, "fallbackWidth");
|
|
60
|
+
}
|
|
61
|
+
export {
|
|
62
|
+
candleGeometry,
|
|
63
|
+
financialMarkWidth,
|
|
64
|
+
smallestAdjacentSpacing,
|
|
65
|
+
volumeGeometry
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=financial-geometry.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/features/viz/lib/financial-geometry.ts"],
|
|
4
|
+
"sourcesContent": ["/** Local coordinates for one candle body and wick. */\nexport interface CandleGeometry {\n /** Normalized rectangle that paints the open/close body. */\n readonly bodyBoundsLocal: Readonly<{\n x: number;\n y: number;\n width: number;\n height: number;\n }>;\n /** Vertical wick endpoints in the caller's high/low coordinate order. */\n readonly wickLocal: Readonly<{ x: number; lowY: number; highY: number }>;\n}\n\n/** Inputs already mapped into a series' local coordinate system. */\nexport interface CandleGeometryInput {\n readonly centerX: number;\n readonly openY: number;\n readonly closeY: number;\n readonly highY: number;\n readonly lowY: number;\n readonly width: number;\n readonly dojiHeight: number;\n}\n\n/** Inputs already mapped into a volume series' local coordinate system. */\nexport interface VolumeGeometryInput {\n readonly centerX: number;\n readonly valueY: number;\n readonly baselineY: number;\n readonly width: number;\n}\n\n/** Options for the common financial mark width calculation. */\nexport interface FinancialMarkWidthOptions {\n /** A caller-selected local mark width. */\n readonly width?: number;\n /** Width to use when fewer than two distinct local x positions are available. */\n readonly fallbackWidth?: number;\n}\n\nfunction finite(value: number, name: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value))\n throw new RangeError(`${name} must be finite.`);\n return value;\n}\n\nfunction positive(value: number, name: string): number {\n finite(value, name);\n if (value <= 0) throw new RangeError(`${name} must be greater than zero.`);\n return value;\n}\n\n/**\n * Calculates local, paint-ready candle geometry without consulting a scale.\n *\n * The body spans the mapped open and close coordinates. Equal values produce a\n * centered doji whose height is at least one local unit.\n *\n * @param input - Already-mapped candle coordinates and local dimensions.\n * @returns Frozen normalized body bounds and source-ordered wick endpoints.\n */\nexport function candleGeometry(input: CandleGeometryInput): CandleGeometry {\n const centerX = finite(input.centerX, \"centerX\");\n const openY = finite(input.openY, \"openY\");\n const closeY = finite(input.closeY, \"closeY\");\n const highY = finite(input.highY, \"highY\");\n const lowY = finite(input.lowY, \"lowY\");\n const markWidth = positive(input.width, \"width\");\n const dojiHeight = finite(input.dojiHeight, \"dojiHeight\");\n if (dojiHeight < 0) throw new RangeError(\"dojiHeight must be nonnegative.\");\n const height =\n openY === closeY ? Math.max(1, dojiHeight) : Math.abs(closeY - openY);\n const y = openY === closeY ? openY - height / 2 : Math.min(openY, closeY);\n return Object.freeze({\n bodyBoundsLocal: Object.freeze({\n x: centerX - markWidth / 2,\n y,\n width: markWidth,\n height,\n }),\n wickLocal: Object.freeze({ x: centerX, lowY, highY }),\n });\n}\n\n/**\n * Calculates the local rectangle for a volume column without consulting a scale.\n *\n * @param input - Mapped column center, mapped value and baseline, and local width.\n * @returns Frozen rectangle with a nonnegative height; equal endpoints return height zero.\n */\nexport function volumeGeometry(\n input: VolumeGeometryInput,\n): Readonly<{ x: number; y: number; width: number; height: number }> {\n const centerX = finite(input.centerX, \"centerX\");\n const valueY = finite(input.valueY, \"valueY\");\n const baselineY = finite(input.baselineY, \"baselineY\");\n const width = positive(input.width, \"width\");\n return Object.freeze({\n x: centerX - width / 2,\n y: Math.min(valueY, baselineY),\n width,\n height: Math.abs(valueY - baselineY),\n });\n}\n\n/**\n * Finds the smallest positive separation of adjacent mapped local x positions.\n *\n * @param positions - Mapped positions in source order.\n * @returns The smallest positive adjacent separation, or undefined when none exists.\n */\nexport function smallestAdjacentSpacing(\n positions: readonly number[],\n): number | undefined {\n let smallest = Infinity;\n for (let index = 0; index < positions.length; index++) {\n finite(positions[index]!, `positions[${index}]`);\n if (index > 0) {\n const separation = Math.abs(positions[index]! - positions[index - 1]!);\n if (separation > 0) smallest = Math.min(smallest, separation);\n }\n }\n return smallest === Infinity ? undefined : smallest;\n}\n\n/**\n * Computes a shared local mark width from mapped x spacing.\n *\n * @param positions - Mapped positions in source order.\n * @param options - Optional explicit or singleton fallback width.\n * @returns Explicit width, or 70% of the smallest spacing capped at 12 local units.\n */\nexport function financialMarkWidth(\n positions: readonly number[],\n options: FinancialMarkWidthOptions = {},\n): number {\n if (options.width !== undefined) return positive(options.width, \"width\");\n const spacing = smallestAdjacentSpacing(positions);\n if (spacing !== undefined) return Math.min(12, spacing * 0.7);\n return positive(options.fallbackWidth ?? 8, \"fallbackWidth\");\n}\n"],
|
|
5
|
+
"mappings": "AAwCA,SAAS,OAAO,OAAe,MAAsB;AACnD,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK;AACrD,UAAM,IAAI,WAAW,GAAG,IAAI,kBAAkB;AAChD,SAAO;AACT;AAEA,SAAS,SAAS,OAAe,MAAsB;AACrD,SAAO,OAAO,IAAI;AAClB,MAAI,SAAS,EAAG,OAAM,IAAI,WAAW,GAAG,IAAI,6BAA6B;AACzE,SAAO;AACT;AAWO,SAAS,eAAe,OAA4C;AACzE,QAAM,UAAU,OAAO,MAAM,SAAS,SAAS;AAC/C,QAAM,QAAQ,OAAO,MAAM,OAAO,OAAO;AACzC,QAAM,SAAS,OAAO,MAAM,QAAQ,QAAQ;AAC5C,QAAM,QAAQ,OAAO,MAAM,OAAO,OAAO;AACzC,QAAM,OAAO,OAAO,MAAM,MAAM,MAAM;AACtC,QAAM,YAAY,SAAS,MAAM,OAAO,OAAO;AAC/C,QAAM,aAAa,OAAO,MAAM,YAAY,YAAY;AACxD,MAAI,aAAa,EAAG,OAAM,IAAI,WAAW,iCAAiC;AAC1E,QAAM,SACJ,UAAU,SAAS,KAAK,IAAI,GAAG,UAAU,IAAI,KAAK,IAAI,SAAS,KAAK;AACtE,QAAM,IAAI,UAAU,SAAS,QAAQ,SAAS,IAAI,KAAK,IAAI,OAAO,MAAM;AACxE,SAAO,OAAO,OAAO;AAAA,IACnB,iBAAiB,OAAO,OAAO;AAAA,MAC7B,GAAG,UAAU,YAAY;AAAA,MACzB;AAAA,MACA,OAAO;AAAA,MACP;AAAA,IACF,CAAC;AAAA,IACD,WAAW,OAAO,OAAO,EAAE,GAAG,SAAS,MAAM,MAAM,CAAC;AAAA,EACtD,CAAC;AACH;AAQO,SAAS,eACd,OACmE;AACnE,QAAM,UAAU,OAAO,MAAM,SAAS,SAAS;AAC/C,QAAM,SAAS,OAAO,MAAM,QAAQ,QAAQ;AAC5C,QAAM,YAAY,OAAO,MAAM,WAAW,WAAW;AACrD,QAAM,QAAQ,SAAS,MAAM,OAAO,OAAO;AAC3C,SAAO,OAAO,OAAO;AAAA,IACnB,GAAG,UAAU,QAAQ;AAAA,IACrB,GAAG,KAAK,IAAI,QAAQ,SAAS;AAAA,IAC7B;AAAA,IACA,QAAQ,KAAK,IAAI,SAAS,SAAS;AAAA,EACrC,CAAC;AACH;AAQO,SAAS,wBACd,WACoB;AACpB,MAAI,WAAW;AACf,WAAS,QAAQ,GAAG,QAAQ,UAAU,QAAQ,SAAS;AACrD,WAAO,UAAU,KAAK,GAAI,aAAa,KAAK,GAAG;AAC/C,QAAI,QAAQ,GAAG;AACb,YAAM,aAAa,KAAK,IAAI,UAAU,KAAK,IAAK,UAAU,QAAQ,CAAC,CAAE;AACrE,UAAI,aAAa,EAAG,YAAW,KAAK,IAAI,UAAU,UAAU;AAAA,IAC9D;AAAA,EACF;AACA,SAAO,aAAa,WAAW,SAAY;AAC7C;AASO,SAAS,mBACd,WACA,UAAqC,CAAC,GAC9B;AACR,MAAI,QAAQ,UAAU,OAAW,QAAO,SAAS,QAAQ,OAAO,OAAO;AACvE,QAAM,UAAU,wBAAwB,SAAS;AACjD,MAAI,YAAY,OAAW,QAAO,KAAK,IAAI,IAAI,UAAU,GAAG;AAC5D,SAAO,SAAS,QAAQ,iBAAiB,GAAG,eAAe;AAC7D;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { LineAccessor } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Inputs shared by source-aligned moving-average indicators.
|
|
4
|
+
*
|
|
5
|
+
* @see {@link MovingAveragePoint}
|
|
6
|
+
* @see {@link LineAccessor}
|
|
7
|
+
*/
|
|
8
|
+
export interface MovingAverageOptions<D> {
|
|
9
|
+
/**
|
|
10
|
+
* Numeric property or callback that supplies each observation.
|
|
11
|
+
*
|
|
12
|
+
* @see {@link LineAccessor}
|
|
13
|
+
*/
|
|
14
|
+
readonly value: LineAccessor<D>;
|
|
15
|
+
/**
|
|
16
|
+
* Required number of consecutive complete observations in each window.
|
|
17
|
+
*
|
|
18
|
+
* @see {@link MovingAveragePoint}
|
|
19
|
+
*/
|
|
20
|
+
readonly period: number;
|
|
21
|
+
/**
|
|
22
|
+
* Excludes a row before its value accessor runs and resets the current window.
|
|
23
|
+
*
|
|
24
|
+
* @param datum - Source observation under consideration.
|
|
25
|
+
* @param index - Zero-based source index.
|
|
26
|
+
* @param data - Complete caller-supplied source data.
|
|
27
|
+
* @returns Whether the observation participates in the current consecutive window.
|
|
28
|
+
* @see {@link LineAccessor}
|
|
29
|
+
*/
|
|
30
|
+
readonly defined?: (datum: D, index: number, data: readonly D[]) => boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Inputs for source-aligned population-standard-deviation Bollinger bands.
|
|
34
|
+
*
|
|
35
|
+
* @see {@link MovingAverageOptions}
|
|
36
|
+
* @see {@link BollingerBandPoint}
|
|
37
|
+
*/
|
|
38
|
+
export interface BollingerBandsOptions<D> extends MovingAverageOptions<D> {
|
|
39
|
+
/**
|
|
40
|
+
* Number of population standard deviations from the mean; defaults to 2.
|
|
41
|
+
*
|
|
42
|
+
* @see {@link BollingerBandPoint}
|
|
43
|
+
*/
|
|
44
|
+
readonly multiplier?: number;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* One source-aligned simple or exponential moving-average observation.
|
|
48
|
+
*
|
|
49
|
+
* @see {@link MovingAverageOptions}
|
|
50
|
+
*/
|
|
51
|
+
export interface MovingAveragePoint<D> {
|
|
52
|
+
/** Caller-owned original observation. */
|
|
53
|
+
readonly datum: D;
|
|
54
|
+
/** Original source index, including rows that become gaps. */
|
|
55
|
+
readonly sourceIndex: number;
|
|
56
|
+
/** Average after a complete consecutive window, or null during warmup/a gap. */
|
|
57
|
+
readonly average: number | null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* One source-aligned population-standard-deviation Bollinger-band observation.
|
|
61
|
+
*
|
|
62
|
+
* @see {@link BollingerBandsOptions}
|
|
63
|
+
*/
|
|
64
|
+
export interface BollingerBandPoint<D> {
|
|
65
|
+
/** Caller-owned original observation. */
|
|
66
|
+
readonly datum: D;
|
|
67
|
+
/** Original source index, including rows that become gaps. */
|
|
68
|
+
readonly sourceIndex: number;
|
|
69
|
+
/** Window mean, or null during warmup/a gap. */
|
|
70
|
+
readonly mean: number | null;
|
|
71
|
+
/** Mean minus multiplier population standard deviations, or null during warmup/a gap. */
|
|
72
|
+
readonly lower: number | null;
|
|
73
|
+
/** Mean plus multiplier population standard deviations, or null during warmup/a gap. */
|
|
74
|
+
readonly upper: number | null;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Derives a source-aligned simple moving average from consecutive finite observations.
|
|
78
|
+
*
|
|
79
|
+
* Missing, nonfinite, and excluded observations produce null and reset warmup. Results are
|
|
80
|
+
* population-neutral arithmetic means; no timestamps are inferred or changed.
|
|
81
|
+
*
|
|
82
|
+
* @param data - Source observations, retained in their original order.
|
|
83
|
+
* @param options - Value accessor, consecutive period, and optional participation callback.
|
|
84
|
+
* @returns Frozen source-aligned average observations, with null during warmup and gaps.
|
|
85
|
+
* @see {@link MovingAverageOptions}
|
|
86
|
+
* @see {@link MovingAveragePoint}
|
|
87
|
+
*/
|
|
88
|
+
export declare function simpleMovingAverage<D>(data: readonly D[], options: MovingAverageOptions<D>): readonly MovingAveragePoint<D>[];
|
|
89
|
+
/**
|
|
90
|
+
* Derives a source-aligned exponential moving average seeded by the first complete SMA window.
|
|
91
|
+
*
|
|
92
|
+
* Its smoothing factor is `2 / (period + 1)`. Missing, nonfinite, and excluded observations
|
|
93
|
+
* produce null and reset the seed window.
|
|
94
|
+
*
|
|
95
|
+
* @param data - Source observations, retained in their original order.
|
|
96
|
+
* @param options - Value accessor, consecutive seed period, and optional participation callback.
|
|
97
|
+
* @returns Frozen source-aligned average observations, with null during warmup and gaps.
|
|
98
|
+
* @see {@link MovingAverageOptions}
|
|
99
|
+
* @see {@link MovingAveragePoint}
|
|
100
|
+
*/
|
|
101
|
+
export declare function exponentialMovingAverage<D>(data: readonly D[], options: MovingAverageOptions<D>): readonly MovingAveragePoint<D>[];
|
|
102
|
+
/**
|
|
103
|
+
* Derives source-aligned Bollinger bands from trailing consecutive population-standard-deviation windows.
|
|
104
|
+
*
|
|
105
|
+
* Missing, nonfinite, and excluded observations produce null bands and reset warmup. The multiplier
|
|
106
|
+
* defaults to 2; caller-owned data are neither sorted nor mutated.
|
|
107
|
+
*
|
|
108
|
+
* @param data - Source observations, retained in their original order.
|
|
109
|
+
* @param options - Value accessor, period, participation callback, and optional band multiplier.
|
|
110
|
+
* @returns Frozen source-aligned population-standard-deviation band observations.
|
|
111
|
+
* @see {@link BollingerBandsOptions}
|
|
112
|
+
* @see {@link BollingerBandPoint}
|
|
113
|
+
*/
|
|
114
|
+
export declare function bollingerBands<D>(data: readonly D[], options: BollingerBandsOptions<D>): readonly BollingerBandPoint<D>[];
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { finiteCoordinate, pointAccessor, pointData } from "./point-data.js";
|
|
2
|
+
function validatePeriod(period) {
|
|
3
|
+
if (!Number.isSafeInteger(period) || period <= 0)
|
|
4
|
+
throw new RangeError(
|
|
5
|
+
"moving-average period must be a positive safe integer."
|
|
6
|
+
);
|
|
7
|
+
}
|
|
8
|
+
function validateMultiplier(multiplier) {
|
|
9
|
+
if (!Number.isFinite(multiplier) || multiplier < 0)
|
|
10
|
+
throw new RangeError(
|
|
11
|
+
"Bollinger multiplier must be finite and non-negative."
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
function values(data, options) {
|
|
15
|
+
const rows = pointData(data, "moving average");
|
|
16
|
+
validatePeriod(options.period);
|
|
17
|
+
const value = pointAccessor(options.value);
|
|
18
|
+
return Object.freeze(
|
|
19
|
+
rows.map((datum, index) => {
|
|
20
|
+
if (!(options.defined?.(datum, index, rows) ?? true)) return null;
|
|
21
|
+
const observed = value(datum, index, rows);
|
|
22
|
+
return finiteCoordinate(observed) ? observed : null;
|
|
23
|
+
})
|
|
24
|
+
);
|
|
25
|
+
}
|
|
26
|
+
function summary(window) {
|
|
27
|
+
let scale = 0;
|
|
28
|
+
for (const value of window) scale = Math.max(scale, Math.abs(value));
|
|
29
|
+
if (scale === 0) return [0, 0];
|
|
30
|
+
let normalizedSum = 0;
|
|
31
|
+
for (const value of window) normalizedSum += value / scale;
|
|
32
|
+
const meanNormalized = normalizedSum / window.length;
|
|
33
|
+
let squaredDifferenceSum = 0;
|
|
34
|
+
for (const value of window) {
|
|
35
|
+
const difference = value / scale - meanNormalized;
|
|
36
|
+
squaredDifferenceSum += difference * difference;
|
|
37
|
+
}
|
|
38
|
+
const varianceNormalized = squaredDifferenceSum / window.length;
|
|
39
|
+
const mean = meanNormalized * scale;
|
|
40
|
+
const deviation = Math.sqrt(varianceNormalized) * scale;
|
|
41
|
+
if (!Number.isFinite(mean) || !Number.isFinite(deviation))
|
|
42
|
+
throw new RangeError("moving-average derived value must be finite.");
|
|
43
|
+
return [mean, deviation];
|
|
44
|
+
}
|
|
45
|
+
function weighted(previous, next, alpha) {
|
|
46
|
+
const scale = Math.max(Math.abs(previous), Math.abs(next));
|
|
47
|
+
if (scale === 0) return 0;
|
|
48
|
+
const result = (previous / scale * (1 - alpha) + next / scale * alpha) * scale;
|
|
49
|
+
if (!Number.isFinite(result))
|
|
50
|
+
throw new RangeError("moving-average derived value must be finite.");
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
function simpleMovingAverage(data, options) {
|
|
54
|
+
const observed = values(data, options);
|
|
55
|
+
const window = [];
|
|
56
|
+
return Object.freeze(
|
|
57
|
+
data.map((datum, sourceIndex) => {
|
|
58
|
+
const value = observed[sourceIndex];
|
|
59
|
+
if (value === null) {
|
|
60
|
+
window.length = 0;
|
|
61
|
+
return Object.freeze({ datum, sourceIndex, average: null });
|
|
62
|
+
}
|
|
63
|
+
window.push(value);
|
|
64
|
+
if (window.length > options.period) window.shift();
|
|
65
|
+
const average = window.length === options.period ? summary(window)[0] : null;
|
|
66
|
+
return Object.freeze({ datum, sourceIndex, average });
|
|
67
|
+
})
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
function exponentialMovingAverage(data, options) {
|
|
71
|
+
const observed = values(data, options);
|
|
72
|
+
const seed = [];
|
|
73
|
+
const alpha = 2 / (options.period + 1);
|
|
74
|
+
let average;
|
|
75
|
+
return Object.freeze(
|
|
76
|
+
data.map((datum, sourceIndex) => {
|
|
77
|
+
const value = observed[sourceIndex];
|
|
78
|
+
if (value === null) {
|
|
79
|
+
seed.length = 0;
|
|
80
|
+
average = void 0;
|
|
81
|
+
return Object.freeze({ datum, sourceIndex, average: null });
|
|
82
|
+
}
|
|
83
|
+
if (average === void 0) {
|
|
84
|
+
seed.push(value);
|
|
85
|
+
if (seed.length < options.period)
|
|
86
|
+
return Object.freeze({ datum, sourceIndex, average: null });
|
|
87
|
+
average = summary(seed)[0];
|
|
88
|
+
} else average = weighted(average, value, alpha);
|
|
89
|
+
return Object.freeze({ datum, sourceIndex, average });
|
|
90
|
+
})
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
function bollingerBands(data, options) {
|
|
94
|
+
const multiplier = options.multiplier ?? 2;
|
|
95
|
+
validateMultiplier(multiplier);
|
|
96
|
+
const observed = values(data, options);
|
|
97
|
+
const window = [];
|
|
98
|
+
return Object.freeze(
|
|
99
|
+
data.map((datum, sourceIndex) => {
|
|
100
|
+
const value = observed[sourceIndex];
|
|
101
|
+
if (value === null) {
|
|
102
|
+
window.length = 0;
|
|
103
|
+
return Object.freeze({
|
|
104
|
+
datum,
|
|
105
|
+
sourceIndex,
|
|
106
|
+
mean: null,
|
|
107
|
+
lower: null,
|
|
108
|
+
upper: null
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
window.push(value);
|
|
112
|
+
if (window.length > options.period) window.shift();
|
|
113
|
+
if (window.length < options.period)
|
|
114
|
+
return Object.freeze({
|
|
115
|
+
datum,
|
|
116
|
+
sourceIndex,
|
|
117
|
+
mean: null,
|
|
118
|
+
lower: null,
|
|
119
|
+
upper: null
|
|
120
|
+
});
|
|
121
|
+
const [mean, deviation] = summary(window);
|
|
122
|
+
const lower = mean - multiplier * deviation;
|
|
123
|
+
const upper = mean + multiplier * deviation;
|
|
124
|
+
if (!Number.isFinite(lower) || !Number.isFinite(upper))
|
|
125
|
+
throw new RangeError("Bollinger derived value must be finite.");
|
|
126
|
+
return Object.freeze({ datum, sourceIndex, mean, lower, upper });
|
|
127
|
+
})
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
export {
|
|
131
|
+
bollingerBands,
|
|
132
|
+
exponentialMovingAverage,
|
|
133
|
+
simpleMovingAverage
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=financial-indicators.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/features/viz/lib/financial-indicators.ts"],
|
|
4
|
+
"sourcesContent": ["import type { LineAccessor } from \"./types.js\";\nimport { finiteCoordinate, pointAccessor, pointData } from \"./point-data.js\";\n\n/**\n * Inputs shared by source-aligned moving-average indicators.\n *\n * @see {@link MovingAveragePoint}\n * @see {@link LineAccessor}\n */\nexport interface MovingAverageOptions<D> {\n /**\n * Numeric property or callback that supplies each observation.\n *\n * @see {@link LineAccessor}\n */\n readonly value: LineAccessor<D>;\n /**\n * Required number of consecutive complete observations in each window.\n *\n * @see {@link MovingAveragePoint}\n */\n readonly period: number;\n /**\n * Excludes a row before its value accessor runs and resets the current window.\n *\n * @param datum - Source observation under consideration.\n * @param index - Zero-based source index.\n * @param data - Complete caller-supplied source data.\n * @returns Whether the observation participates in the current consecutive window.\n * @see {@link LineAccessor}\n */\n readonly defined?: (datum: D, index: number, data: readonly D[]) => boolean;\n}\n\n/**\n * Inputs for source-aligned population-standard-deviation Bollinger bands.\n *\n * @see {@link MovingAverageOptions}\n * @see {@link BollingerBandPoint}\n */\nexport interface BollingerBandsOptions<D> extends MovingAverageOptions<D> {\n /**\n * Number of population standard deviations from the mean; defaults to 2.\n *\n * @see {@link BollingerBandPoint}\n */\n readonly multiplier?: number;\n}\n\n/**\n * One source-aligned simple or exponential moving-average observation.\n *\n * @see {@link MovingAverageOptions}\n */\nexport interface MovingAveragePoint<D> {\n /** Caller-owned original observation. */\n readonly datum: D;\n /** Original source index, including rows that become gaps. */\n readonly sourceIndex: number;\n /** Average after a complete consecutive window, or null during warmup/a gap. */\n readonly average: number | null;\n}\n\n/**\n * One source-aligned population-standard-deviation Bollinger-band observation.\n *\n * @see {@link BollingerBandsOptions}\n */\nexport interface BollingerBandPoint<D> {\n /** Caller-owned original observation. */\n readonly datum: D;\n /** Original source index, including rows that become gaps. */\n readonly sourceIndex: number;\n /** Window mean, or null during warmup/a gap. */\n readonly mean: number | null;\n /** Mean minus multiplier population standard deviations, or null during warmup/a gap. */\n readonly lower: number | null;\n /** Mean plus multiplier population standard deviations, or null during warmup/a gap. */\n readonly upper: number | null;\n}\n\nfunction validatePeriod(period: number): void {\n if (!Number.isSafeInteger(period) || period <= 0)\n throw new RangeError(\n \"moving-average period must be a positive safe integer.\",\n );\n}\n\nfunction validateMultiplier(multiplier: number): void {\n if (!Number.isFinite(multiplier) || multiplier < 0)\n throw new RangeError(\n \"Bollinger multiplier must be finite and non-negative.\",\n );\n}\n\nfunction values<D>(\n data: readonly D[],\n options: MovingAverageOptions<D>,\n): readonly (number | null)[] {\n const rows = pointData(data, \"moving average\");\n validatePeriod(options.period);\n const value = pointAccessor(options.value);\n return Object.freeze(\n rows.map((datum, index) => {\n if (!(options.defined?.(datum, index, rows) ?? true)) return null;\n const observed = value(datum, index, rows);\n return finiteCoordinate(observed) ? observed : null;\n }),\n );\n}\n\nfunction summary(window: readonly number[]): readonly [number, number] {\n let scale = 0;\n for (const value of window) scale = Math.max(scale, Math.abs(value));\n if (scale === 0) return [0, 0];\n let normalizedSum = 0;\n for (const value of window) normalizedSum += value / scale;\n const meanNormalized = normalizedSum / window.length;\n let squaredDifferenceSum = 0;\n for (const value of window) {\n const difference = value / scale - meanNormalized;\n squaredDifferenceSum += difference * difference;\n }\n const varianceNormalized = squaredDifferenceSum / window.length;\n const mean = meanNormalized * scale;\n const deviation = Math.sqrt(varianceNormalized) * scale;\n if (!Number.isFinite(mean) || !Number.isFinite(deviation))\n throw new RangeError(\"moving-average derived value must be finite.\");\n return [mean, deviation];\n}\n\nfunction weighted(previous: number, next: number, alpha: number): number {\n const scale = Math.max(Math.abs(previous), Math.abs(next));\n if (scale === 0) return 0;\n const result =\n ((previous / scale) * (1 - alpha) + (next / scale) * alpha) * scale;\n if (!Number.isFinite(result))\n throw new RangeError(\"moving-average derived value must be finite.\");\n return result;\n}\n\n/**\n * Derives a source-aligned simple moving average from consecutive finite observations.\n *\n * Missing, nonfinite, and excluded observations produce null and reset warmup. Results are\n * population-neutral arithmetic means; no timestamps are inferred or changed.\n *\n * @param data - Source observations, retained in their original order.\n * @param options - Value accessor, consecutive period, and optional participation callback.\n * @returns Frozen source-aligned average observations, with null during warmup and gaps.\n * @see {@link MovingAverageOptions}\n * @see {@link MovingAveragePoint}\n */\nexport function simpleMovingAverage<D>(\n data: readonly D[],\n options: MovingAverageOptions<D>,\n): readonly MovingAveragePoint<D>[] {\n const observed = values(data, options);\n const window: number[] = [];\n return Object.freeze(\n data.map((datum, sourceIndex) => {\n const value = observed[sourceIndex];\n if (value === null) {\n window.length = 0;\n return Object.freeze({ datum, sourceIndex, average: null });\n }\n window.push(value);\n if (window.length > options.period) window.shift();\n const average =\n window.length === options.period ? summary(window)[0] : null;\n return Object.freeze({ datum, sourceIndex, average });\n }),\n );\n}\n\n/**\n * Derives a source-aligned exponential moving average seeded by the first complete SMA window.\n *\n * Its smoothing factor is `2 / (period + 1)`. Missing, nonfinite, and excluded observations\n * produce null and reset the seed window.\n *\n * @param data - Source observations, retained in their original order.\n * @param options - Value accessor, consecutive seed period, and optional participation callback.\n * @returns Frozen source-aligned average observations, with null during warmup and gaps.\n * @see {@link MovingAverageOptions}\n * @see {@link MovingAveragePoint}\n */\nexport function exponentialMovingAverage<D>(\n data: readonly D[],\n options: MovingAverageOptions<D>,\n): readonly MovingAveragePoint<D>[] {\n const observed = values(data, options);\n const seed: number[] = [];\n const alpha = 2 / (options.period + 1);\n let average: number | undefined;\n return Object.freeze(\n data.map((datum, sourceIndex) => {\n const value = observed[sourceIndex];\n if (value === null) {\n seed.length = 0;\n average = undefined;\n return Object.freeze({ datum, sourceIndex, average: null });\n }\n if (average === undefined) {\n seed.push(value);\n if (seed.length < options.period)\n return Object.freeze({ datum, sourceIndex, average: null });\n average = summary(seed)[0];\n } else average = weighted(average, value, alpha);\n return Object.freeze({ datum, sourceIndex, average });\n }),\n );\n}\n\n/**\n * Derives source-aligned Bollinger bands from trailing consecutive population-standard-deviation windows.\n *\n * Missing, nonfinite, and excluded observations produce null bands and reset warmup. The multiplier\n * defaults to 2; caller-owned data are neither sorted nor mutated.\n *\n * @param data - Source observations, retained in their original order.\n * @param options - Value accessor, period, participation callback, and optional band multiplier.\n * @returns Frozen source-aligned population-standard-deviation band observations.\n * @see {@link BollingerBandsOptions}\n * @see {@link BollingerBandPoint}\n */\nexport function bollingerBands<D>(\n data: readonly D[],\n options: BollingerBandsOptions<D>,\n): readonly BollingerBandPoint<D>[] {\n const multiplier = options.multiplier ?? 2;\n validateMultiplier(multiplier);\n const observed = values(data, options);\n const window: number[] = [];\n return Object.freeze(\n data.map((datum, sourceIndex) => {\n const value = observed[sourceIndex];\n if (value === null) {\n window.length = 0;\n return Object.freeze({\n datum,\n sourceIndex,\n mean: null,\n lower: null,\n upper: null,\n });\n }\n window.push(value);\n if (window.length > options.period) window.shift();\n if (window.length < options.period)\n return Object.freeze({\n datum,\n sourceIndex,\n mean: null,\n lower: null,\n upper: null,\n });\n const [mean, deviation] = summary(window);\n const lower = mean - multiplier * deviation;\n const upper = mean + multiplier * deviation;\n if (!Number.isFinite(lower) || !Number.isFinite(upper))\n throw new RangeError(\"Bollinger derived value must be finite.\");\n return Object.freeze({ datum, sourceIndex, mean, lower, upper });\n }),\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|