@neural-charts/native 0.0.0-stage → 0.1.0-beta.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 +58 -2
- package/THIRD-PARTY-NOTICES.md +15 -0
- package/docs/guide.md +783 -0
- package/library/annular-hit.d.ts +10 -0
- package/library/annular-hit.d.ts.map +1 -0
- package/library/annular-hit.js +43 -0
- package/library/annular-hit.js.map +1 -0
- package/library/chart-capabilities.d.ts +326 -0
- package/library/chart-capabilities.d.ts.map +1 -0
- package/library/chart-capabilities.js +39 -0
- package/library/chart-capabilities.js.map +1 -0
- package/library/circular-scene.d.ts +55 -0
- package/library/circular-scene.d.ts.map +1 -0
- package/library/circular-scene.js +39 -0
- package/library/circular-scene.js.map +1 -0
- package/library/comparison-render.d.ts +18 -0
- package/library/comparison-render.d.ts.map +1 -0
- package/library/comparison-render.js +33 -0
- package/library/comparison-render.js.map +1 -0
- package/library/comparison-scene.d.ts +40 -0
- package/library/comparison-scene.d.ts.map +1 -0
- package/library/comparison-scene.js +77 -0
- package/library/comparison-scene.js.map +1 -0
- package/library/composition-scene.d.ts +35 -0
- package/library/composition-scene.d.ts.map +1 -0
- package/library/composition-scene.js +55 -0
- package/library/composition-scene.js.map +1 -0
- package/library/contour-hit-index.d.ts +15 -0
- package/library/contour-hit-index.d.ts.map +1 -0
- package/library/contour-hit-index.js +75 -0
- package/library/contour-hit-index.js.map +1 -0
- package/library/contour-label-anchors.d.ts +9 -0
- package/library/contour-label-anchors.d.ts.map +1 -0
- package/library/contour-label-anchors.js +20 -0
- package/library/contour-label-anchors.js.map +1 -0
- package/library/contour-scene.d.ts +10 -0
- package/library/contour-scene.d.ts.map +1 -0
- package/library/contour-scene.js +76 -0
- package/library/contour-scene.js.map +1 -0
- package/library/contracts.d.ts +445 -0
- package/library/contracts.d.ts.map +1 -0
- package/library/contracts.js +2 -0
- package/library/contracts.js.map +1 -0
- package/library/dendrogram-scene.d.ts +7 -0
- package/library/dendrogram-scene.d.ts.map +1 -0
- package/library/dendrogram-scene.js +28 -0
- package/library/dendrogram-scene.js.map +1 -0
- package/library/empty-state.d.ts +8 -0
- package/library/empty-state.d.ts.map +1 -0
- package/library/empty-state.js +30 -0
- package/library/empty-state.js.map +1 -0
- package/library/heatmap-hit.d.ts +27 -0
- package/library/heatmap-hit.d.ts.map +1 -0
- package/library/heatmap-hit.js +56 -0
- package/library/heatmap-hit.js.map +1 -0
- package/library/heatmap-scene.d.ts +17 -0
- package/library/heatmap-scene.d.ts.map +1 -0
- package/library/heatmap-scene.js +85 -0
- package/library/heatmap-scene.js.map +1 -0
- package/library/index.d.ts +14 -0
- package/library/index.d.ts.map +1 -0
- package/library/index.js +4 -0
- package/library/index.js.map +1 -0
- package/library/interaction-content.d.ts +4 -0
- package/library/interaction-content.d.ts.map +1 -0
- package/library/interaction-content.js +28 -0
- package/library/interaction-content.js.map +1 -0
- package/library/interaction.d.ts +75 -0
- package/library/interaction.d.ts.map +1 -0
- package/library/interaction.js +523 -0
- package/library/interaction.js.map +1 -0
- package/library/marker-style.d.ts +24 -0
- package/library/marker-style.d.ts.map +1 -0
- package/library/marker-style.js +43 -0
- package/library/marker-style.js.map +1 -0
- package/library/parallel-scene.d.ts +11 -0
- package/library/parallel-scene.d.ts.map +1 -0
- package/library/parallel-scene.js +44 -0
- package/library/parallel-scene.js.map +1 -0
- package/library/path-validation.d.ts +3 -0
- package/library/path-validation.d.ts.map +1 -0
- package/library/path-validation.js +78 -0
- package/library/path-validation.js.map +1 -0
- package/library/pictorial-hit.d.ts +19 -0
- package/library/pictorial-hit.d.ts.map +1 -0
- package/library/pictorial-hit.js +73 -0
- package/library/pictorial-hit.js.map +1 -0
- package/library/pictorial-scene.d.ts +16 -0
- package/library/pictorial-scene.d.ts.map +1 -0
- package/library/pictorial-scene.js +73 -0
- package/library/pictorial-scene.js.map +1 -0
- package/library/point-label-placement.d.ts +34 -0
- package/library/point-label-placement.d.ts.map +1 -0
- package/library/point-label-placement.js +24 -0
- package/library/point-label-placement.js.map +1 -0
- package/library/polar-grid.d.ts +5 -0
- package/library/polar-grid.d.ts.map +1 -0
- package/library/polar-grid.js +28 -0
- package/library/polar-grid.js.map +1 -0
- package/library/polygon-hit.d.ts +18 -0
- package/library/polygon-hit.d.ts.map +1 -0
- package/library/polygon-hit.js +98 -0
- package/library/polygon-hit.js.map +1 -0
- package/library/profile-scene.d.ts +11 -0
- package/library/profile-scene.d.ts.map +1 -0
- package/library/profile-scene.js +51 -0
- package/library/profile-scene.js.map +1 -0
- package/library/relationship-hit-index.d.ts +12 -0
- package/library/relationship-hit-index.d.ts.map +1 -0
- package/library/relationship-hit-index.js +87 -0
- package/library/relationship-hit-index.js.map +1 -0
- package/library/relationship-scene.d.ts +12 -0
- package/library/relationship-scene.d.ts.map +1 -0
- package/library/relationship-scene.js +62 -0
- package/library/relationship-scene.js.map +1 -0
- package/library/scene-paint.d.ts +29 -0
- package/library/scene-paint.d.ts.map +1 -0
- package/library/scene-paint.js +123 -0
- package/library/scene-paint.js.map +1 -0
- package/library/scene-styles.d.ts +13 -0
- package/library/scene-styles.d.ts.map +1 -0
- package/library/scene-styles.js +135 -0
- package/library/scene-styles.js.map +1 -0
- package/library/scene.d.ts +49 -0
- package/library/scene.d.ts.map +1 -0
- package/library/scene.js +533 -0
- package/library/scene.js.map +1 -0
- package/library/temporal-hit-index.d.ts +13 -0
- package/library/temporal-hit-index.d.ts.map +1 -0
- package/library/temporal-hit-index.js +71 -0
- package/library/temporal-hit-index.js.map +1 -0
- package/library/temporal-scene.d.ts +6 -0
- package/library/temporal-scene.d.ts.map +1 -0
- package/library/temporal-scene.js +70 -0
- package/library/temporal-scene.js.map +1 -0
- package/library/tile-index.d.ts +11 -0
- package/library/tile-index.d.ts.map +1 -0
- package/library/tile-index.js +37 -0
- package/library/tile-index.js.map +1 -0
- package/library/tilemap-hit.d.ts +11 -0
- package/library/tilemap-hit.d.ts.map +1 -0
- package/library/tilemap-hit.js +63 -0
- package/library/tilemap-hit.js.map +1 -0
- package/library/tilemap-scene.d.ts +24 -0
- package/library/tilemap-scene.d.ts.map +1 -0
- package/library/tilemap-scene.js +125 -0
- package/library/tilemap-scene.js.map +1 -0
- package/library/uncertainty-scene.d.ts +11 -0
- package/library/uncertainty-scene.d.ts.map +1 -0
- package/library/uncertainty-scene.js +61 -0
- package/library/uncertainty-scene.js.map +1 -0
- package/library/venn-hit.d.ts +21 -0
- package/library/venn-hit.d.ts.map +1 -0
- package/library/venn-hit.js +37 -0
- package/library/venn-hit.js.map +1 -0
- package/library/venn-scene.d.ts +14 -0
- package/library/venn-scene.d.ts.map +1 -0
- package/library/venn-scene.js +84 -0
- package/library/venn-scene.js.map +1 -0
- package/library/wordcloud-scene.d.ts +19 -0
- package/library/wordcloud-scene.d.ts.map +1 -0
- package/library/wordcloud-scene.js +58 -0
- package/library/wordcloud-scene.js.map +1 -0
- package/native/activity.d.ts +14 -0
- package/native/activity.d.ts.map +1 -0
- package/native/activity.js +31 -0
- package/native/activity.js.map +1 -0
- package/native/bar-labels.d.ts +4 -0
- package/native/bar-labels.d.ts.map +1 -0
- package/native/bar-labels.js +16 -0
- package/native/bar-labels.js.map +1 -0
- package/native/bubble-entrance.d.ts +15 -0
- package/native/bubble-entrance.d.ts.map +1 -0
- package/native/bubble-entrance.js +27 -0
- package/native/bubble-entrance.js.map +1 -0
- package/native/chart-drilldown.d.ts +57 -0
- package/native/chart-drilldown.d.ts.map +1 -0
- package/native/chart-drilldown.js +118 -0
- package/native/chart-drilldown.js.map +1 -0
- package/native/chart-motion.d.ts +69 -0
- package/native/chart-motion.d.ts.map +1 -0
- package/native/chart-motion.js +165 -0
- package/native/chart-motion.js.map +1 -0
- package/native/chart-panels-options.d.ts +77 -0
- package/native/chart-panels-options.d.ts.map +1 -0
- package/native/chart-panels-options.js +2 -0
- package/native/chart-panels-options.js.map +1 -0
- package/native/chart-panels-state.d.ts +34 -0
- package/native/chart-panels-state.d.ts.map +1 -0
- package/native/chart-panels-state.js +198 -0
- package/native/chart-panels-state.js.map +1 -0
- package/native/chart-panels.d.ts +43 -0
- package/native/chart-panels.d.ts.map +1 -0
- package/native/chart-panels.js +107 -0
- package/native/chart-panels.js.map +1 -0
- package/native/chart-presentation.d.ts +40 -0
- package/native/chart-presentation.d.ts.map +1 -0
- package/native/chart-presentation.js +16 -0
- package/native/chart-presentation.js.map +1 -0
- package/native/chart-type.d.ts +65 -0
- package/native/chart-type.d.ts.map +1 -0
- package/native/chart-type.js +66 -0
- package/native/chart-type.js.map +1 -0
- package/native/chart.d.ts +571 -0
- package/native/chart.d.ts.map +1 -0
- package/native/chart.js +1417 -0
- package/native/chart.js.map +1 -0
- package/native/circular-options.d.ts +17 -0
- package/native/circular-options.d.ts.map +1 -0
- package/native/circular-options.js +2 -0
- package/native/circular-options.js.map +1 -0
- package/native/comparison-data.d.ts +64 -0
- package/native/comparison-data.d.ts.map +1 -0
- package/native/comparison-data.js +2 -0
- package/native/comparison-data.js.map +1 -0
- package/native/comparison-format.d.ts +16 -0
- package/native/comparison-format.d.ts.map +1 -0
- package/native/comparison-format.js +26 -0
- package/native/comparison-format.js.map +1 -0
- package/native/composition-options.d.ts +18 -0
- package/native/composition-options.d.ts.map +1 -0
- package/native/composition-options.js +2 -0
- package/native/composition-options.js.map +1 -0
- package/native/contour-data.d.ts +48 -0
- package/native/contour-data.d.ts.map +1 -0
- package/native/contour-data.js +2 -0
- package/native/contour-data.js.map +1 -0
- package/native/contour-format.d.ts +3 -0
- package/native/contour-format.d.ts.map +1 -0
- package/native/contour-format.js +11 -0
- package/native/contour-format.js.map +1 -0
- package/native/control-accessibility.d.ts +7 -0
- package/native/control-accessibility.d.ts.map +1 -0
- package/native/control-accessibility.js +9 -0
- package/native/control-accessibility.js.map +1 -0
- package/native/data-chart.d.ts +179 -0
- package/native/data-chart.d.ts.map +1 -0
- package/native/data-chart.js +415 -0
- package/native/data-chart.js.map +1 -0
- package/native/data-identities.d.ts +10 -0
- package/native/data-identities.d.ts.map +1 -0
- package/native/data-identities.js +50 -0
- package/native/data-identities.js.map +1 -0
- package/native/data-options.d.ts +566 -0
- package/native/data-options.d.ts.map +1 -0
- package/native/data-options.js +2 -0
- package/native/data-options.js.map +1 -0
- package/native/data-planning.d.ts +84 -0
- package/native/data-planning.d.ts.map +1 -0
- package/native/data-planning.js +174 -0
- package/native/data-planning.js.map +1 -0
- package/native/dendrogram-data.d.ts +27 -0
- package/native/dendrogram-data.d.ts.map +1 -0
- package/native/dendrogram-data.js +2 -0
- package/native/dendrogram-data.js.map +1 -0
- package/native/dendrogram-labels.d.ts +13 -0
- package/native/dendrogram-labels.d.ts.map +1 -0
- package/native/dendrogram-labels.js +12 -0
- package/native/dendrogram-labels.js.map +1 -0
- package/native/drilldown-options.d.ts +62 -0
- package/native/drilldown-options.d.ts.map +1 -0
- package/native/drilldown-options.js +2 -0
- package/native/drilldown-options.js.map +1 -0
- package/native/drilldown-state.d.ts +18 -0
- package/native/drilldown-state.d.ts.map +1 -0
- package/native/drilldown-state.js +130 -0
- package/native/drilldown-state.js.map +1 -0
- package/native/gauge-entrance.d.ts +8 -0
- package/native/gauge-entrance.d.ts.map +1 -0
- package/native/gauge-entrance.js +42 -0
- package/native/gauge-entrance.js.map +1 -0
- package/native/haptics.d.ts +21 -0
- package/native/haptics.d.ts.map +1 -0
- package/native/haptics.js +66 -0
- package/native/haptics.js.map +1 -0
- package/native/heatmap-data.d.ts +56 -0
- package/native/heatmap-data.d.ts.map +1 -0
- package/native/heatmap-data.js +2 -0
- package/native/heatmap-data.js.map +1 -0
- package/native/index.d.ts +26 -0
- package/native/index.d.ts.map +1 -0
- package/native/index.js +11 -0
- package/native/index.js.map +1 -0
- package/native/input-bridge.d.ts +32 -0
- package/native/input-bridge.d.ts.map +1 -0
- package/native/input-bridge.js +3 -0
- package/native/input-bridge.js.map +1 -0
- package/native/input-lease.d.ts +23 -0
- package/native/input-lease.d.ts.map +1 -0
- package/native/input-lease.js +28 -0
- package/native/input-lease.js.map +1 -0
- package/native/label-contrast.d.ts +7 -0
- package/native/label-contrast.d.ts.map +1 -0
- package/native/label-contrast.js +33 -0
- package/native/label-contrast.js.map +1 -0
- package/native/label-halo.d.ts +9 -0
- package/native/label-halo.d.ts.map +1 -0
- package/native/label-halo.js +23 -0
- package/native/label-halo.js.map +1 -0
- package/native/label-ink.d.ts +3 -0
- package/native/label-ink.d.ts.map +1 -0
- package/native/label-ink.js +6 -0
- package/native/label-ink.js.map +1 -0
- package/native/legend.d.ts +21 -0
- package/native/legend.d.ts.map +1 -0
- package/native/legend.js +66 -0
- package/native/legend.js.map +1 -0
- package/native/log-axis-labels.d.ts +6 -0
- package/native/log-axis-labels.d.ts.map +1 -0
- package/native/log-axis-labels.js +16 -0
- package/native/log-axis-labels.js.map +1 -0
- package/native/log-options.d.ts +5 -0
- package/native/log-options.d.ts.map +1 -0
- package/native/log-options.js +6 -0
- package/native/log-options.js.map +1 -0
- package/native/number-format.d.ts +5 -0
- package/native/number-format.d.ts.map +1 -0
- package/native/number-format.js +24 -0
- package/native/number-format.js.map +1 -0
- package/native/observation-format.d.ts +8 -0
- package/native/observation-format.d.ts.map +1 -0
- package/native/observation-format.js +80 -0
- package/native/observation-format.js.map +1 -0
- package/native/options-validation.d.ts +8 -0
- package/native/options-validation.d.ts.map +1 -0
- package/native/options-validation.js +612 -0
- package/native/options-validation.js.map +1 -0
- package/native/panel-viewport-contract.d.ts +15 -0
- package/native/panel-viewport-contract.d.ts.map +1 -0
- package/native/panel-viewport-contract.js +86 -0
- package/native/panel-viewport-contract.js.map +1 -0
- package/native/panel-viewport-sync.d.ts +27 -0
- package/native/panel-viewport-sync.d.ts.map +1 -0
- package/native/panel-viewport-sync.js +96 -0
- package/native/panel-viewport-sync.js.map +1 -0
- package/native/parallel-data.d.ts +49 -0
- package/native/parallel-data.d.ts.map +1 -0
- package/native/parallel-data.js +2 -0
- package/native/parallel-data.js.map +1 -0
- package/native/parallel-labels.d.ts +20 -0
- package/native/parallel-labels.d.ts.map +1 -0
- package/native/parallel-labels.js +54 -0
- package/native/parallel-labels.js.map +1 -0
- package/native/pictorial-data.d.ts +78 -0
- package/native/pictorial-data.d.ts.map +1 -0
- package/native/pictorial-data.js +2 -0
- package/native/pictorial-data.js.map +1 -0
- package/native/pictorial-format.d.ts +8 -0
- package/native/pictorial-format.d.ts.map +1 -0
- package/native/pictorial-format.js +14 -0
- package/native/pictorial-format.js.map +1 -0
- package/native/pictorial-options.d.ts +2 -0
- package/native/pictorial-options.d.ts.map +1 -0
- package/native/pictorial-options.js +61 -0
- package/native/pictorial-options.js.map +1 -0
- package/native/pictorial-paint.d.ts +19 -0
- package/native/pictorial-paint.d.ts.map +1 -0
- package/native/pictorial-paint.js +31 -0
- package/native/pictorial-paint.js.map +1 -0
- package/native/plan.d.ts +45 -0
- package/native/plan.d.ts.map +1 -0
- package/native/plan.js +109 -0
- package/native/plan.js.map +1 -0
- package/native/profile-data.d.ts +82 -0
- package/native/profile-data.d.ts.map +1 -0
- package/native/profile-data.js +2 -0
- package/native/profile-data.js.map +1 -0
- package/native/profile-labels.d.ts +5 -0
- package/native/profile-labels.d.ts.map +1 -0
- package/native/profile-labels.js +19 -0
- package/native/profile-labels.js.map +1 -0
- package/native/radial-entrance.d.ts +24 -0
- package/native/radial-entrance.d.ts.map +1 -0
- package/native/radial-entrance.js +25 -0
- package/native/radial-entrance.js.map +1 -0
- package/native/radial-layer.d.ts +26 -0
- package/native/radial-layer.d.ts.map +1 -0
- package/native/radial-layer.js +76 -0
- package/native/radial-layer.js.map +1 -0
- package/native/reference-labels.d.ts +21 -0
- package/native/reference-labels.d.ts.map +1 -0
- package/native/reference-labels.js +36 -0
- package/native/reference-labels.js.map +1 -0
- package/native/reference-options.d.ts +23 -0
- package/native/reference-options.d.ts.map +1 -0
- package/native/reference-options.js +58 -0
- package/native/reference-options.js.map +1 -0
- package/native/relationship-data.d.ts +63 -0
- package/native/relationship-data.d.ts.map +1 -0
- package/native/relationship-data.js +2 -0
- package/native/relationship-data.js.map +1 -0
- package/native/relationship-format.d.ts +13 -0
- package/native/relationship-format.d.ts.map +1 -0
- package/native/relationship-format.js +26 -0
- package/native/relationship-format.js.map +1 -0
- package/native/selection-outlines.d.ts +12 -0
- package/native/selection-outlines.d.ts.map +1 -0
- package/native/selection-outlines.js +20 -0
- package/native/selection-outlines.js.map +1 -0
- package/native/temporal-format.d.ts +29 -0
- package/native/temporal-format.d.ts.map +1 -0
- package/native/temporal-format.js +41 -0
- package/native/temporal-format.js.map +1 -0
- package/native/text-style.d.ts +16 -0
- package/native/text-style.d.ts.map +1 -0
- package/native/text-style.js +14 -0
- package/native/text-style.js.map +1 -0
- package/native/tilemap-color-axis.d.ts +23 -0
- package/native/tilemap-color-axis.d.ts.map +1 -0
- package/native/tilemap-color-axis.js +77 -0
- package/native/tilemap-color-axis.js.map +1 -0
- package/native/tilemap-data.d.ts +71 -0
- package/native/tilemap-data.d.ts.map +1 -0
- package/native/tilemap-data.js +2 -0
- package/native/tilemap-data.js.map +1 -0
- package/native/tilemap-format.d.ts +3 -0
- package/native/tilemap-format.d.ts.map +1 -0
- package/native/tilemap-format.js +14 -0
- package/native/tilemap-format.js.map +1 -0
- package/native/tilemap-selection.d.ts +12 -0
- package/native/tilemap-selection.d.ts.map +1 -0
- package/native/tilemap-selection.js +8 -0
- package/native/tilemap-selection.js.map +1 -0
- package/native/time-axis-labels.d.ts +5 -0
- package/native/time-axis-labels.d.ts.map +1 -0
- package/native/time-axis-labels.js +38 -0
- package/native/time-axis-labels.js.map +1 -0
- package/native/tooltip-layout.d.ts +16 -0
- package/native/tooltip-layout.d.ts.map +1 -0
- package/native/tooltip-layout.js +33 -0
- package/native/tooltip-layout.js.map +1 -0
- package/native/tooltip-metrics.d.ts +4 -0
- package/native/tooltip-metrics.d.ts.map +1 -0
- package/native/tooltip-metrics.js +11 -0
- package/native/tooltip-metrics.js.map +1 -0
- package/native/tooltip-motion.d.ts +35 -0
- package/native/tooltip-motion.d.ts.map +1 -0
- package/native/tooltip-motion.js +36 -0
- package/native/tooltip-motion.js.map +1 -0
- package/native/tooltip-occupancy.d.ts +21 -0
- package/native/tooltip-occupancy.d.ts.map +1 -0
- package/native/tooltip-occupancy.js +67 -0
- package/native/tooltip-occupancy.js.map +1 -0
- package/native/tooltip.d.ts +144 -0
- package/native/tooltip.d.ts.map +1 -0
- package/native/tooltip.js +146 -0
- package/native/tooltip.js.map +1 -0
- package/native/uncertainty-data.d.ts +110 -0
- package/native/uncertainty-data.d.ts.map +1 -0
- package/native/uncertainty-data.js +2 -0
- package/native/uncertainty-data.js.map +1 -0
- package/native/uncertainty-format.d.ts +3 -0
- package/native/uncertainty-format.d.ts.map +1 -0
- package/native/uncertainty-format.js +10 -0
- package/native/uncertainty-format.js.map +1 -0
- package/native/value-labels.d.ts +30 -0
- package/native/value-labels.d.ts.map +1 -0
- package/native/value-labels.js +206 -0
- package/native/value-labels.js.map +1 -0
- package/native/variwide-labels.d.ts +14 -0
- package/native/variwide-labels.d.ts.map +1 -0
- package/native/variwide-labels.js +22 -0
- package/native/variwide-labels.js.map +1 -0
- package/native/venn-data.d.ts +29 -0
- package/native/venn-data.d.ts.map +1 -0
- package/native/venn-data.js +2 -0
- package/native/venn-data.js.map +1 -0
- package/native/viewport-gestures.d.ts +32 -0
- package/native/viewport-gestures.d.ts.map +1 -0
- package/native/viewport-gestures.js +43 -0
- package/native/viewport-gestures.js.map +1 -0
- package/native/viewport-motion.d.ts +67 -0
- package/native/viewport-motion.d.ts.map +1 -0
- package/native/viewport-motion.js +182 -0
- package/native/viewport-motion.js.map +1 -0
- package/native/viewport-state.d.ts +20 -0
- package/native/viewport-state.d.ts.map +1 -0
- package/native/viewport-state.js +14 -0
- package/native/viewport-state.js.map +1 -0
- package/native/waterfall-appearance.d.ts +8 -0
- package/native/waterfall-appearance.d.ts.map +1 -0
- package/native/waterfall-appearance.js +18 -0
- package/native/waterfall-appearance.js.map +1 -0
- package/native/wordcloud-data.d.ts +40 -0
- package/native/wordcloud-data.d.ts.map +1 -0
- package/native/wordcloud-data.js +2 -0
- package/native/wordcloud-data.js.map +1 -0
- package/native/wordcloud-layer.d.ts +29 -0
- package/native/wordcloud-layer.d.ts.map +1 -0
- package/native/wordcloud-layer.js +58 -0
- package/native/wordcloud-layer.js.map +1 -0
- package/native/wordcloud-measurements.d.ts +47 -0
- package/native/wordcloud-measurements.d.ts.map +1 -0
- package/native/wordcloud-measurements.js +137 -0
- package/native/wordcloud-measurements.js.map +1 -0
- package/native/wordcloud-planning.d.ts +23 -0
- package/native/wordcloud-planning.d.ts.map +1 -0
- package/native/wordcloud-planning.js +25 -0
- package/native/wordcloud-planning.js.map +1 -0
- package/native/wordcloud-probes.d.ts +48 -0
- package/native/wordcloud-probes.d.ts.map +1 -0
- package/native/wordcloud-probes.js +111 -0
- package/native/wordcloud-probes.js.map +1 -0
- package/native/wordcloud-text-backend.d.ts +16 -0
- package/native/wordcloud-text-backend.d.ts.map +1 -0
- package/native/wordcloud-text-backend.js +3 -0
- package/native/wordcloud-text-backend.js.map +1 -0
- package/package.json +58 -4
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
const shapes = ['circle', 'square', 'diamond', 'triangle'];
|
|
2
|
+
const color = /^#[\da-f]{6}$/i;
|
|
3
|
+
/** Constant-size presentation validation. It never projects data or changes hit targets. */
|
|
4
|
+
export function resolveMarkerStyle(input) {
|
|
5
|
+
if (input !== undefined && (!input || typeof input !== 'object' || Array.isArray(input)))
|
|
6
|
+
throw Error('Invalid marker style');
|
|
7
|
+
const descriptors = input ? Object.getOwnPropertyDescriptors(input) : {};
|
|
8
|
+
for (const key of Reflect.ownKeys(descriptors)) {
|
|
9
|
+
if (typeof key !== 'string' || !['shape', 'fillColor', 'borderColor', 'borderWidth'].includes(key) || descriptors[key]?.get || descriptors[key]?.set)
|
|
10
|
+
throw Error('Invalid marker style property');
|
|
11
|
+
}
|
|
12
|
+
const shape = descriptors['shape']?.value ?? 'circle', fillColor = descriptors['fillColor']?.value, borderColor = descriptors['borderColor']?.value, borderWidth = descriptors['borderWidth']?.value ?? 0;
|
|
13
|
+
if (!shapes.includes(shape) || fillColor !== undefined && (typeof fillColor !== 'string' || !color.test(fillColor)) || borderColor !== undefined && (typeof borderColor !== 'string' || !color.test(borderColor)) || typeof borderWidth !== 'number' || !Number.isFinite(borderWidth) || borderWidth < 0 || borderWidth > 6)
|
|
14
|
+
throw Error('Invalid marker style value');
|
|
15
|
+
return { shape, fillColor, borderColor, borderWidth };
|
|
16
|
+
}
|
|
17
|
+
export function sameMarkerStyle(a, b) {
|
|
18
|
+
return a.shape === b.shape && a.fillColor === b.fillColor && a.borderColor === b.borderColor && a.borderWidth === b.borderWidth;
|
|
19
|
+
}
|
|
20
|
+
/** Geometry here is the display symbol around an already projected point. */
|
|
21
|
+
export function markerSvg(x, y, diameter, pointColor, style) {
|
|
22
|
+
const radius = diameter / 2, paint = `fill="${style.fillColor ?? pointColor}"${style.borderWidth ? ` stroke="${style.borderColor ?? pointColor}" stroke-width="${style.borderWidth}" stroke-linejoin="round"` : ''}`;
|
|
23
|
+
if (style.shape === 'square')
|
|
24
|
+
return `<rect x="${x - radius}" y="${y - radius}" width="${diameter}" height="${diameter}" ${paint}/>`;
|
|
25
|
+
if (style.shape === 'diamond')
|
|
26
|
+
return `<path d="M${x} ${y - radius}L${x + radius} ${y}L${x} ${y + radius}L${x - radius} ${y}Z" ${paint}/>`;
|
|
27
|
+
if (style.shape === 'triangle')
|
|
28
|
+
return `<path d="M${x} ${y - radius}L${x + radius} ${y + radius}L${x - radius} ${y + radius}Z" ${paint}/>`;
|
|
29
|
+
return `<circle cx="${x}" cy="${y}" r="${radius}" ${paint}/>`;
|
|
30
|
+
}
|
|
31
|
+
/** Bounded point clouds keep every source symbol while batching by paint, not by SVG node. */
|
|
32
|
+
export function markerBatchSvg(points, transform, diameter, style) {
|
|
33
|
+
const paths = new Map(), r = diameter / 2;
|
|
34
|
+
for (const p of points) {
|
|
35
|
+
const x = transform.x + p.x * transform.sx, y = transform.y + p.y * transform.sy, color = style.fillColor ?? p.color;
|
|
36
|
+
const contour = style.shape === 'square' ? `M${x - r} ${y - r}h${diameter}v${diameter}h${-diameter}Z` : style.shape === 'diamond' ? `M${x} ${y - r}L${x + r} ${y}L${x} ${y + r}L${x - r} ${y}Z` : style.shape === 'triangle' ? `M${x} ${y - r}L${x + r} ${y + r}L${x - r} ${y + r}Z` : `M${x - r} ${y}A${r} ${r} 0 1 0 ${x + r} ${y}A${r} ${r} 0 1 0 ${x - r} ${y}Z`;
|
|
37
|
+
const key = color + ':' + (style.borderColor ?? p.color), segments = paths.get(key) ?? [];
|
|
38
|
+
segments.push(contour);
|
|
39
|
+
paths.set(key, segments);
|
|
40
|
+
}
|
|
41
|
+
return [...paths].map(([key, segments]) => { const [fill, border] = key.split(':'); return `<path d="${segments.join('')}" fill="${fill}"${style.borderWidth ? ` stroke="${border}" stroke-width="${style.borderWidth}" stroke-linejoin="round"` : ''}/>`; }).join('');
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=marker-style.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marker-style.js","sourceRoot":"","sources":["../../src/library/marker-style.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PlanParallelLayout, PlanParallelValue } from '@neural-charts/core/plan';
|
|
2
|
+
import type { NativeScene } from './contracts.js';
|
|
3
|
+
export type NativeParallelValue = PlanParallelValue;
|
|
4
|
+
export interface NativeParallelLayout extends Omit<PlanParallelLayout, 'commands'> {
|
|
5
|
+
readonly path: string;
|
|
6
|
+
}
|
|
7
|
+
/** Own the projected roles only; independent-axis scales remain exclusively in Core. */
|
|
8
|
+
export declare function ownParallel(value: NativeParallelLayout, scene: Pick<NativeScene, 'family' | 'width' | 'height' | 'observations' | 'polarGrid'>): NativeParallelLayout;
|
|
9
|
+
export declare function ownParallelValue(value: NativeParallelValue): NativeParallelValue;
|
|
10
|
+
export declare function parallelGridSvg(layout: NativeParallelLayout, color: string, ticks?: boolean): string;
|
|
11
|
+
//# sourceMappingURL=parallel-scene.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-scene.d.ts","sourceRoot":"","sources":["../../src/library/parallel-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,iBAAiB,EAAC,MAAM,0BAA0B,CAAC;AACnF,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,mBAAmB,GAAC,iBAAiB,CAAC;AAClD,MAAM,WAAW,oBAAqB,SAAQ,IAAI,CAAC,kBAAkB,EAAC,UAAU,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAC,MAAM,CAAC;CAAC;AAEzG,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAC,oBAAoB,EAAC,KAAK,EAAC,IAAI,CAAC,WAAW,EAAC,QAAQ,GAAC,OAAO,GAAC,QAAQ,GAAC,cAAc,GAAC,WAAW,CAAC,GAAE,oBAAoB,CAoBxJ;AACD,wBAAgB,gBAAgB,CAAC,KAAK,EAAC,mBAAmB,GAAE,mBAAmB,CAE9E;AACD,wBAAgB,eAAe,CAAC,MAAM,EAAC,oBAAoB,EAAC,KAAK,EAAC,MAAM,EAAC,KAAK,UAAK,GAAE,MAAM,CAAgN"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { validateNativePath } from './path-validation.js';
|
|
2
|
+
const text = (v, max) => typeof v === 'string' && v.length <= max;
|
|
3
|
+
/** Own the projected roles only; independent-axis scales remain exclusively in Core. */
|
|
4
|
+
export function ownParallel(value, scene) {
|
|
5
|
+
const point = (p) => p && typeof p === 'object' && Number.isFinite(p.x) && Number.isFinite(p.y) && p.x >= -1e-8 && p.y >= -1e-8 && p.x <= scene.width + 1e-8 && p.y <= scene.height + 1e-8;
|
|
6
|
+
if (scene.family !== 'parallel' || !value || !['cartesian', 'polar'].includes(value.coordinates) || !Array.isArray(value.axes) || value.axes.length < (value.coordinates === 'polar' ? 3 : 2) || value.axes.length > 16 || !text(value.path, 32000))
|
|
7
|
+
throw Error('Invalid parallel layout');
|
|
8
|
+
if (value.coordinates === 'polar' && !scene.polarGrid || value.coordinates === 'cartesian' && scene.polarGrid)
|
|
9
|
+
throw Error('Invalid parallel coordinate pivot');
|
|
10
|
+
validateNativePath(value.path, scene.width, scene.height);
|
|
11
|
+
const ids = new Set();
|
|
12
|
+
const axes = value.axes.map(a => {
|
|
13
|
+
if (!a || !text(a.id, 128) || !a.id || ids.has(a.id) || !text(a.label, 200) || !text(a.unit, 64) || !Number.isInteger(a.sourceCount) || a.sourceCount < 0 || a.sourceCount > 16 || !point(a.from) || !point(a.to) || !point(a.labelAnchor) || !Array.isArray(a.ticks) || a.ticks.length > 32)
|
|
14
|
+
throw Error('Invalid parallel dimension');
|
|
15
|
+
if (a.domain && (!Array.isArray(a.domain) || a.domain.length !== 2 || !a.domain.every(Number.isFinite) || a.domain[0] >= a.domain[1]))
|
|
16
|
+
throw Error('Invalid parallel domain');
|
|
17
|
+
if (!a.domain && a.ticks.length)
|
|
18
|
+
throw Error('Unscaled dimension cannot invent ticks');
|
|
19
|
+
ids.add(a.id);
|
|
20
|
+
const ticks = a.ticks.map((t) => { if (!Number.isFinite(t.value) || !text(t.label, 64) || !point(t) || !a.domain || t.value < a.domain[0] || t.value > a.domain[1])
|
|
21
|
+
throw Error('Invalid parallel tick'); return Object.freeze({ value: t.value, label: t.label, x: t.x, y: t.y }); });
|
|
22
|
+
return Object.freeze({ id: a.id, label: a.label, unit: a.unit, sourceCount: a.sourceCount, ...(a.domain ? { domain: Object.freeze([...a.domain]) } : {}), from: Object.freeze({ ...a.from }), to: Object.freeze({ ...a.to }), labelAnchor: Object.freeze({ ...a.labelAnchor }), ticks: Object.freeze(ticks) });
|
|
23
|
+
});
|
|
24
|
+
const expectedPath = axes.map(a => 'M' + a.from.x + ' ' + a.from.y + 'L' + a.to.x + ' ' + a.to.y).join('');
|
|
25
|
+
if (value.path !== expectedPath)
|
|
26
|
+
throw Error('Parallel grid does not match its dimension endpoints');
|
|
27
|
+
const byId = new Map(axes.map(a => [a.id, a]));
|
|
28
|
+
for (const p of scene.observations) {
|
|
29
|
+
const role = p.parallel, a = role ? byId.get(role.axisId) : undefined;
|
|
30
|
+
if (!role || !a || role.axisLabel !== a.label || role.unit !== a.unit || !a.domain || p.value < a.domain[0] || p.value > a.domain[1])
|
|
31
|
+
throw Error('Invalid parallel observation ownership');
|
|
32
|
+
const dx = a.to.x - a.from.x, dy = a.to.y - a.from.y, length = dx * dx + dy * dy, px = p.x - a.from.x, py = p.y - a.from.y, dot = px * dx + py * dy;
|
|
33
|
+
if (length <= 0 || Math.abs(px * dy - py * dx) > Math.sqrt(length) * 1e-7 || dot < -1e-7 || dot > length + 1e-7 || p.hit?.type !== 'circle' || p.hit.cx !== p.x || p.hit.cy !== p.y)
|
|
34
|
+
throw Error('Parallel observation is not on its declared dimension');
|
|
35
|
+
}
|
|
36
|
+
return Object.freeze({ coordinates: value.coordinates, path: value.path, axes: Object.freeze(axes) });
|
|
37
|
+
}
|
|
38
|
+
export function ownParallelValue(value) {
|
|
39
|
+
if (!value || !text(value.axisId, 128) || !value.axisId || !text(value.axisLabel, 200) || !text(value.unit, 64))
|
|
40
|
+
throw Error('Invalid parallel observation');
|
|
41
|
+
return { axisId: value.axisId, axisLabel: value.axisLabel, unit: value.unit };
|
|
42
|
+
}
|
|
43
|
+
export function parallelGridSvg(layout, color, ticks = true) { return `<path d="${layout.path}" fill="none" stroke="${color}" stroke-width="1.25"/>` + (ticks ? layout.axes.flatMap(a => a.ticks.map(t => `<circle cx="${t.x}" cy="${t.y}" r="1.4" fill="${color}"/>`)).join('') : ''); }
|
|
44
|
+
//# sourceMappingURL=parallel-scene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parallel-scene.js","sourceRoot":"","sources":["../../src/library/parallel-scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-validation.d.ts","sourceRoot":"","sources":["../../src/library/path-validation.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmCpF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/** Bounded SVG grammar. Geometry may exceed the plot for clipping of explicit domains. */
|
|
2
|
+
export function validateNativePath(path, width, height) {
|
|
3
|
+
const number = /[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/y;
|
|
4
|
+
const arity = { M: 2, L: 2, H: 1, V: 1, C: 6, S: 4, Q: 4, T: 2, A: 7 };
|
|
5
|
+
const values = new Array(7);
|
|
6
|
+
const space = /\s/;
|
|
7
|
+
const letter = /[a-z]/i;
|
|
8
|
+
const coordinateLimit = Math.max(width, height) * 1024;
|
|
9
|
+
let index = 0, command = '', x = 0, y = 0, startX = 0, startY = 0, started = false, commaAllowed = false;
|
|
10
|
+
const fail = () => { throw new Error('Invalid native path geometry'); };
|
|
11
|
+
const whitespace = () => { while (index < path.length && space.test(path[index]))
|
|
12
|
+
index++; };
|
|
13
|
+
const read = () => {
|
|
14
|
+
whitespace();
|
|
15
|
+
if (path[index] === ',') {
|
|
16
|
+
if (!commaAllowed)
|
|
17
|
+
fail();
|
|
18
|
+
index++;
|
|
19
|
+
whitespace();
|
|
20
|
+
}
|
|
21
|
+
number.lastIndex = index;
|
|
22
|
+
const match = number.exec(path);
|
|
23
|
+
if (!match)
|
|
24
|
+
fail();
|
|
25
|
+
index = number.lastIndex;
|
|
26
|
+
commaAllowed = true;
|
|
27
|
+
const value = Number(match[0]);
|
|
28
|
+
if (!Number.isFinite(value))
|
|
29
|
+
throw new Error('Nonfinite native path geometry');
|
|
30
|
+
if (Math.abs(value) > coordinateLimit)
|
|
31
|
+
fail();
|
|
32
|
+
return value;
|
|
33
|
+
};
|
|
34
|
+
while (index < path.length) {
|
|
35
|
+
whitespace();
|
|
36
|
+
if (index === path.length)
|
|
37
|
+
break;
|
|
38
|
+
const token = path[index];
|
|
39
|
+
if (letter.test(token)) {
|
|
40
|
+
command = token;
|
|
41
|
+
index++;
|
|
42
|
+
commaAllowed = false;
|
|
43
|
+
if (!started && command.toUpperCase() !== 'M')
|
|
44
|
+
fail();
|
|
45
|
+
if (command.toUpperCase() === 'Z') {
|
|
46
|
+
x = startX;
|
|
47
|
+
y = startY;
|
|
48
|
+
command = '';
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const upper = command.toUpperCase(), count = arity[upper];
|
|
53
|
+
if (!count)
|
|
54
|
+
fail();
|
|
55
|
+
for (let i = 0; i < count; i++)
|
|
56
|
+
values[i] = read();
|
|
57
|
+
const relative = command !== upper, baseX = relative ? x : 0, baseY = relative ? y : 0;
|
|
58
|
+
if (upper === 'A' && (values[0] < 0 || values[1] < 0 || ![0, 1].includes(values[3]) || ![0, 1].includes(values[4])))
|
|
59
|
+
fail();
|
|
60
|
+
if (upper === 'H')
|
|
61
|
+
x = baseX + values[0];
|
|
62
|
+
else if (upper === 'V')
|
|
63
|
+
y = baseY + values[0];
|
|
64
|
+
else {
|
|
65
|
+
x = baseX + values[count - 2];
|
|
66
|
+
y = baseY + values[count - 1];
|
|
67
|
+
}
|
|
68
|
+
if (!Number.isFinite(x) || !Number.isFinite(y) || Math.abs(x) > coordinateLimit || Math.abs(y) > coordinateLimit)
|
|
69
|
+
fail();
|
|
70
|
+
if (upper === 'M') {
|
|
71
|
+
started = true;
|
|
72
|
+
startX = x;
|
|
73
|
+
startY = y;
|
|
74
|
+
command = relative ? 'l' : 'L';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=path-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-validation.js","sourceRoot":"","sources":["../../src/library/path-validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PlanCompoundPolygonHit } from '@neural-charts/core/plan';
|
|
2
|
+
type HitPoint = Readonly<{
|
|
3
|
+
hit?: PlanCompoundPolygonHit;
|
|
4
|
+
}>;
|
|
5
|
+
/** Defensive ownership precedes indexing; consumer arrays never become cached geometry. */
|
|
6
|
+
export declare function ownPictorialHit(hit: PlanCompoundPolygonHit, width: number, height: number): PlanCompoundPolygonHit;
|
|
7
|
+
/** Construct once per immutable scene. No candidate arrays or polygon wrappers are
|
|
8
|
+
* allocated during a move. Only actual filled pieces participate, never holes,
|
|
9
|
+
* empty silhouettes or bounding-box fallback hits. */
|
|
10
|
+
export declare class PictorialHitIndex<T extends HitPoint> {
|
|
11
|
+
private readonly width;
|
|
12
|
+
private readonly height;
|
|
13
|
+
private readonly cells;
|
|
14
|
+
constructor(points: readonly T[], width: number, height: number);
|
|
15
|
+
private cell;
|
|
16
|
+
pick(x: number, y: number): T | null;
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=pictorial-hit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pictorial-hit.d.ts","sourceRoot":"","sources":["../../src/library/pictorial-hit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,0BAA0B,CAAC;AAIrE,KAAK,QAAQ,GAAC,QAAQ,CAAC;IAAC,GAAG,CAAC,EAAC,sBAAsB,CAAA;CAAC,CAAC,CAAC;AAKtD,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,GAAG,EAAC,sBAAsB,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,GAAE,sBAAsB,CAW5G;AAED;;sDAEsD;AACtD,qBAAa,iBAAiB,CAAC,CAAC,SAAS,QAAQ;IAEf,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAQ,OAAO,CAAC,QAAQ,CAAC,MAAM;IADrF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;gBACxD,MAAM,EAAC,SAAS,CAAC,EAAE,EAAkB,KAAK,EAAC,MAAM,EAAkB,MAAM,EAAC,MAAM;IAmB5F,OAAO,CAAC,IAAI;IACZ,IAAI,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,GAAE,CAAC,GAAC,IAAI;CAU/B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { containsPolygon, ownPolygon } from './polygon-hit.js';
|
|
2
|
+
const owned = new WeakSet();
|
|
3
|
+
/** Defensive ownership precedes indexing; consumer arrays never become cached geometry. */
|
|
4
|
+
export function ownPictorialHit(hit, width, height) {
|
|
5
|
+
if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0 || width > 10000 || height > 10000)
|
|
6
|
+
throw Error('Invalid pictorial hit frame');
|
|
7
|
+
if (!hit || hit.type !== 'compoundPolygon' || !Array.isArray(hit.polygons) || hit.polygons.length < 1 || hit.polygons.length > 64)
|
|
8
|
+
throw Error('Invalid compound pictorial hit');
|
|
9
|
+
// Revalidate extents even for an already owned hit: it may come from another scene.
|
|
10
|
+
const polygons = hit.polygons.map(vertices => {
|
|
11
|
+
const polygon = ownPolygon({ type: 'polygon', vertices }, { family: 'pictorial', width, height });
|
|
12
|
+
return Object.freeze(polygon.vertices.map(vertex => Object.freeze(vertex)));
|
|
13
|
+
});
|
|
14
|
+
const result = Object.freeze({ type: 'compoundPolygon', polygons: Object.freeze(polygons) });
|
|
15
|
+
owned.add(result);
|
|
16
|
+
return result;
|
|
17
|
+
}
|
|
18
|
+
/** Construct once per immutable scene. No candidate arrays or polygon wrappers are
|
|
19
|
+
* allocated during a move. Only actual filled pieces participate, never holes,
|
|
20
|
+
* empty silhouettes or bounding-box fallback hits. */
|
|
21
|
+
export class PictorialHitIndex {
|
|
22
|
+
width;
|
|
23
|
+
height;
|
|
24
|
+
cells = Array.from({ length: 144 }, () => []);
|
|
25
|
+
constructor(points, width, height) {
|
|
26
|
+
this.width = width;
|
|
27
|
+
this.height = height;
|
|
28
|
+
if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0 || width > 10000 || height > 10000 || points.length > 64)
|
|
29
|
+
throw Error('Invalid pictorial hit frame');
|
|
30
|
+
let polygonCount = 0;
|
|
31
|
+
for (const point of points) {
|
|
32
|
+
const hit = point.hit;
|
|
33
|
+
if (!hit)
|
|
34
|
+
continue;
|
|
35
|
+
if (!owned.has(hit))
|
|
36
|
+
throw Error('Pictorial hit must be owned before indexing');
|
|
37
|
+
let left = Infinity, right = -Infinity, top = Infinity, bottom = -Infinity;
|
|
38
|
+
const polygons = hit.polygons.map(vertices => {
|
|
39
|
+
if (++polygonCount > 4096)
|
|
40
|
+
throw Error('Pictorial polygon budget exceeded');
|
|
41
|
+
for (const vertex of vertices) {
|
|
42
|
+
if (vertex.x < 0 || vertex.x > width || vertex.y < 0 || vertex.y > height)
|
|
43
|
+
throw Error('Pictorial hit belongs to another frame');
|
|
44
|
+
left = Math.min(left, vertex.x);
|
|
45
|
+
right = Math.max(right, vertex.x);
|
|
46
|
+
top = Math.min(top, vertex.y);
|
|
47
|
+
bottom = Math.max(bottom, vertex.y);
|
|
48
|
+
}
|
|
49
|
+
return { type: 'polygon', vertices };
|
|
50
|
+
});
|
|
51
|
+
const entry = { point, polygons, left, right, top, bottom };
|
|
52
|
+
for (let cy = this.cell(top, height); cy <= this.cell(bottom, height); cy++)
|
|
53
|
+
for (let cx = this.cell(left, width); cx <= this.cell(right, width); cx++)
|
|
54
|
+
this.cells[cy * 12 + cx].push(entry);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
cell(value, extent) { return Math.max(0, Math.min(11, Math.floor(value / extent * 12))); }
|
|
58
|
+
pick(x, y) {
|
|
59
|
+
if (!Number.isFinite(x) || !Number.isFinite(y) || x < 0 || y < 0 || x > this.width || y > this.height)
|
|
60
|
+
return null;
|
|
61
|
+
const entries = this.cells[this.cell(y, this.height) * 12 + this.cell(x, this.width)];
|
|
62
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
63
|
+
const entry = entries[i];
|
|
64
|
+
if (x < entry.left || x > entry.right || y < entry.top || y > entry.bottom)
|
|
65
|
+
continue;
|
|
66
|
+
for (const polygon of entry.polygons)
|
|
67
|
+
if (containsPolygon(polygon, x, y))
|
|
68
|
+
return entry.point;
|
|
69
|
+
}
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=pictorial-hit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pictorial-hit.js","sourceRoot":"","sources":["../../src/library/pictorial-hit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { PlanPictorialGlyph, PlanPictorialSummary, PlanPictorialLayoutSummary, PlanPictorialValue } from '@neural-charts/core/plan';
|
|
2
|
+
import type { NativeScene, Observation, ChartFamily } from './contracts.js';
|
|
3
|
+
export interface NativePictorialGeometry {
|
|
4
|
+
readonly backgroundPath: string;
|
|
5
|
+
readonly glyphs: readonly Omit<PlanPictorialGlyph, 'backgroundCommands'>[];
|
|
6
|
+
readonly data: readonly PlanPictorialSummary[];
|
|
7
|
+
readonly layout: PlanPictorialLayoutSummary;
|
|
8
|
+
}
|
|
9
|
+
export declare function ownPictorialPoint(point: Observation, family: ChartFamily): Readonly<{
|
|
10
|
+
pictorial?: PlanPictorialValue;
|
|
11
|
+
}>;
|
|
12
|
+
/** Own bounded public roles without retaining the Core's command arrays twice. */
|
|
13
|
+
export declare function ownPictorialScene(scene: NativeScene): Readonly<{
|
|
14
|
+
pictorial?: NativePictorialGeometry;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=pictorial-scene.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pictorial-scene.d.ts","sourceRoot":"","sources":["../../src/library/pictorial-scene.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAsB,oBAAoB,EAAC,0BAA0B,EAAC,kBAAkB,EAAC,MAAM,0BAA0B,CAAC;AACzJ,OAAO,KAAK,EAAC,WAAW,EAAC,WAAW,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAGxE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,cAAc,EAAC,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAC,SAAS,IAAI,CAAC,kBAAkB,EAAC,oBAAoB,CAAC,EAAE,CAAC;IACzE,QAAQ,CAAC,IAAI,EAAC,SAAS,oBAAoB,EAAE,CAAC;IAC9C,QAAQ,CAAC,MAAM,EAAC,0BAA0B,CAAC;CAC5C;AAcD,wBAAgB,iBAAiB,CAAC,KAAK,EAAC,WAAW,EAAC,MAAM,EAAC,WAAW,GAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAC,kBAAkB,CAAA;CAAC,CAAC,CAWhH;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,KAAK,EAAC,WAAW,GAAE,QAAQ,CAAC;IAAC,SAAS,CAAC,EAAC,uBAAuB,CAAA;CAAC,CAAC,CA6BlG"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { validateNativePath } from './path-validation.js';
|
|
2
|
+
const finite = (value) => typeof value === 'number' && Number.isFinite(value);
|
|
3
|
+
const nonnegative = (value) => finite(value) && value >= 0;
|
|
4
|
+
const nullable = (value) => value === null || nonnegative(value);
|
|
5
|
+
const text = (value) => typeof value === 'string' && value.length > 0 && value.length <= 256;
|
|
6
|
+
const validPath = /^[MLZmlz\d.,+\-\seE]*$/;
|
|
7
|
+
function glyphId(id) {
|
|
8
|
+
if (!id || !text(id.categoryId))
|
|
9
|
+
throw Error('Invalid pictorial glyph identity');
|
|
10
|
+
if (id.type === 'stacked')
|
|
11
|
+
return { type: 'stacked', categoryId: id.categoryId };
|
|
12
|
+
if (id.type === 'grouped' && text(id.seriesId))
|
|
13
|
+
return { type: 'grouped', categoryId: id.categoryId, seriesId: id.seriesId };
|
|
14
|
+
throw Error('Invalid pictorial glyph identity');
|
|
15
|
+
}
|
|
16
|
+
export function ownPictorialPoint(point, family) {
|
|
17
|
+
const p = point.pictorial;
|
|
18
|
+
if (family !== 'pictorial') {
|
|
19
|
+
if (p !== undefined || point.hit?.type === 'compoundPolygon')
|
|
20
|
+
throw Error('Pictorial roles require pictorial family');
|
|
21
|
+
return {};
|
|
22
|
+
}
|
|
23
|
+
if (!p || !text(p.categoryId) || !text(p.shapeId) || !['displayed', 'zero', 'noInk'].includes(p.status) || !nonnegative(p.low) || !nonnegative(p.high) || p.low > p.high || !nullable(p.capacity) || !nullable(p.total) || !['known', 'overflow'].includes(p.totalStatus) || typeof p.incomplete !== 'boolean')
|
|
24
|
+
throw Error('Invalid pictorial observation');
|
|
25
|
+
if (p.status === 'zero' && point.value !== 0 || p.status !== 'zero' && !(point.value > 0) || p.status === 'displayed' && point.hit?.type !== 'compoundPolygon' || p.status !== 'displayed' && point.hit !== undefined)
|
|
26
|
+
throw Error('Invalid pictorial value/hit state');
|
|
27
|
+
const id = glyphId(p.glyphId);
|
|
28
|
+
if (id.categoryId !== p.categoryId || id.type === 'grouped' && id.seriesId !== point.id.seriesId)
|
|
29
|
+
throw Error('Pictorial glyph/source identity mismatch');
|
|
30
|
+
return { pictorial: { categoryId: p.categoryId, glyphId: id, shapeId: p.shapeId, status: p.status, low: p.low, high: p.high, capacity: p.capacity, total: p.total, totalStatus: p.totalStatus, incomplete: p.incomplete } };
|
|
31
|
+
}
|
|
32
|
+
/** Own bounded public roles without retaining the Core's command arrays twice. */
|
|
33
|
+
export function ownPictorialScene(scene) {
|
|
34
|
+
const source = scene.pictorial;
|
|
35
|
+
if (scene.family !== 'pictorial') {
|
|
36
|
+
if (source !== undefined)
|
|
37
|
+
throw Error('Unexpected pictorial scene metadata');
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
if (!source || typeof source.backgroundPath !== 'string' || source.backgroundPath.length > 1_000_000 || !validPath.test(source.backgroundPath) || !Array.isArray(source.glyphs) || source.glyphs.length > 256 || !Array.isArray(source.data) || source.data.length > 64 || scene.observations.length > 64 || scene.series.length > 8)
|
|
41
|
+
throw Error('Invalid or unbounded pictorial scene');
|
|
42
|
+
validateNativePath(source.backgroundPath, scene.width, scene.height);
|
|
43
|
+
const ids = new Set();
|
|
44
|
+
const glyphs = source.glyphs.map(g => {
|
|
45
|
+
const id = glyphId(g.id), key = JSON.stringify(id), b = g.bounds;
|
|
46
|
+
if (ids.has(key) || !text(g.categoryId) || !text(g.shapeId) || g.categoryId !== id.categoryId || !b || ![b.x, b.y, b.width, b.height].every(nonnegative) || b.x + b.width > scene.width + 1e-8 || b.y + b.height > scene.height + 1e-8)
|
|
47
|
+
throw Error('Invalid pictorial glyph');
|
|
48
|
+
ids.add(key);
|
|
49
|
+
return { id, categoryId: g.categoryId, shapeId: g.shapeId, bounds: { x: b.x, y: b.y, width: b.width, height: b.height } };
|
|
50
|
+
});
|
|
51
|
+
const sourceIds = new Set();
|
|
52
|
+
const data = source.data.map(p => {
|
|
53
|
+
if (!p || !p.id || !text(p.id.seriesId) || !text(p.id.pointId) || !text(p.categoryId) || !nullable(p.y) || !nullable(p.low) || !nullable(p.high) || !nullable(p.total) || !['known', 'overflow'].includes(p.totalStatus) || typeof p.visible !== 'boolean' || typeof p.incomplete !== 'boolean' || !['displayed', 'zero', 'null', 'hidden', 'noInk'].includes(p.status) || p.percentage !== undefined && (!nonnegative(p.percentage) || p.percentage > 100 + 1e-8))
|
|
54
|
+
throw Error('Invalid pictorial source summary');
|
|
55
|
+
const key = JSON.stringify([p.id.seriesId, p.id.pointId]);
|
|
56
|
+
if (sourceIds.has(key))
|
|
57
|
+
throw Error('Duplicate pictorial source identity');
|
|
58
|
+
sourceIds.add(key);
|
|
59
|
+
if (p.y === null && p.status !== 'null' && p.status !== 'hidden' || p.status === 'zero' && p.y !== 0 || p.status === 'null' && p.y !== null)
|
|
60
|
+
throw Error('Invalid pictorial summary state');
|
|
61
|
+
return { id: { seriesId: p.id.seriesId, pointId: p.id.pointId }, categoryId: p.categoryId, y: p.y, visible: p.visible, status: p.status, low: p.low, high: p.high, total: p.total, totalStatus: p.totalStatus, incomplete: p.incomplete, ...(p.percentage === undefined ? {} : { percentage: p.percentage }) };
|
|
62
|
+
});
|
|
63
|
+
const l = source.layout;
|
|
64
|
+
if (!l || !['grouped', 'sum', 'percent'].includes(l.mode) || !nullable(l.capacity) || !nonnegative(l.layoutCapacity) || !['domain', 'source', 'none'].includes(l.capacitySource) || l.emptyReason !== undefined && !['noSource', 'noPositiveValues', 'hidden'].includes(l.emptyReason) || l.capacityRoundoff !== undefined && (!nonnegative(l.capacityRoundoff.maxExcess) || !nonnegative(l.capacityRoundoff.tolerance)))
|
|
65
|
+
throw Error('Invalid pictorial layout summary');
|
|
66
|
+
for (const p of scene.observations) {
|
|
67
|
+
const owned = ownPictorialPoint(p, 'pictorial').pictorial;
|
|
68
|
+
if (!sourceIds.has(JSON.stringify([p.id.seriesId, p.id.pointId])) || !ids.has(JSON.stringify(owned.glyphId)))
|
|
69
|
+
throw Error('Unmatched pictorial observation identity');
|
|
70
|
+
}
|
|
71
|
+
return { pictorial: { backgroundPath: source.backgroundPath, glyphs, data, layout: { mode: l.mode, capacity: l.capacity, layoutCapacity: l.layoutCapacity, capacitySource: l.capacitySource, ...(l.emptyReason === undefined ? {} : { emptyReason: l.emptyReason }), ...(l.capacityRoundoff ? { capacityRoundoff: { maxExcess: l.capacityRoundoff.maxExcess, tolerance: l.capacityRoundoff.tolerance } } : {}) } } };
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=pictorial-scene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pictorial-scene.js","sourceRoot":"","sources":["../../src/library/pictorial-scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { NativeScene } from './contracts.js';
|
|
2
|
+
export interface LabelPoint {
|
|
3
|
+
readonly x: number;
|
|
4
|
+
readonly y: number;
|
|
5
|
+
readonly radius: number;
|
|
6
|
+
}
|
|
7
|
+
export interface LabelBounds {
|
|
8
|
+
readonly left: number;
|
|
9
|
+
readonly right: number;
|
|
10
|
+
readonly height: number;
|
|
11
|
+
}
|
|
12
|
+
/** Paint geometry, never the larger invisible touch target. Work is bounded by
|
|
13
|
+
* the label budget; dense charts keep their values in the tooltip. */
|
|
14
|
+
export declare function labelPoints(scene: NativeScene, t: Readonly<{
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
sx: number;
|
|
18
|
+
sy: number;
|
|
19
|
+
}>, diameter?: number): readonly LabelPoint[];
|
|
20
|
+
export declare function labelCoversPoint(box: Readonly<{
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
}>, points: readonly LabelPoint[]): boolean;
|
|
26
|
+
/** Keep the complete text above its mark. Omit it when headroom runs out rather
|
|
27
|
+
* than clamping it back over the point. */
|
|
28
|
+
export declare function labelAbovePoint(x: number, y: number, width: number, height: number, bounds: LabelBounds, points?: readonly LabelPoint[]): {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
width: number;
|
|
32
|
+
height: number;
|
|
33
|
+
} | undefined;
|
|
34
|
+
//# sourceMappingURL=point-label-placement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"point-label-placement.d.ts","sourceRoot":"","sources":["../../src/library/point-label-placement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,UAAU;IAAE,QAAQ,CAAC,CAAC,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,CAAC,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,MAAM,EAAC,MAAM,CAAC;CAAC;AACzF,MAAM,WAAW,WAAW;IAAE,QAAQ,CAAC,IAAI,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,KAAK,EAAC,MAAM,CAAC;IAAA,QAAQ,CAAC,MAAM,EAAC,MAAM,CAAC;CAAC;AACjG;sEACsE;AACtE,wBAAgB,WAAW,CAAC,KAAK,EAAC,WAAW,EAAC,CAAC,EAAC,QAAQ,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,EAAE,EAAC,MAAM,CAAC;IAAA,EAAE,EAAC,MAAM,CAAA;CAAC,CAAC,EAAC,QAAQ,SAAE,GAAE,SAAS,UAAU,EAAE,CAKlI;AACD,wBAAgB,gBAAgB,CAAC,GAAG,EAAC,QAAQ,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAA,CAAC,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAA;CAAC,CAAC,EAAC,MAAM,EAAC,SAAS,UAAU,EAAE,GAAE,OAAO,CAElI;AACD;2CAC2C;AAC3C,wBAAgB,eAAe,CAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,EAAC,WAAW,EAAC,MAAM,GAAC,SAAS,UAAU,EAAK;;;;;cAK9H"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Paint geometry, never the larger invisible touch target. Work is bounded by
|
|
2
|
+
* the label budget; dense charts keep their values in the tooltip. */
|
|
3
|
+
export function labelPoints(scene, t, diameter = 6) {
|
|
4
|
+
if (scene.observations.length > 64)
|
|
5
|
+
return [];
|
|
6
|
+
if (scene.family === 'bubble' || scene.family === 'scatter')
|
|
7
|
+
return scene.series.flatMap(s => (s.circles ?? []).map(c => ({ x: t.x + c.cx * t.sx, y: t.y + c.cy * t.sy, radius: c.radius * Math.max(t.sx, t.sy) + 1 })));
|
|
8
|
+
if (!['line', 'spline', 'area', 'areaspline', 'mixed', 'radar', 'fan', 'regression', 'pareto', 'lollipop', 'dumbbell'].includes(scene.family))
|
|
9
|
+
return [];
|
|
10
|
+
return scene.observations.map(p => ({ x: t.x + p.x * t.sx, y: t.y + p.y * t.sy, radius: Math.max(0, diameter) / 2 + 1 }));
|
|
11
|
+
}
|
|
12
|
+
export function labelCoversPoint(box, points) {
|
|
13
|
+
return points.some(p => Math.hypot(p.x - Math.max(box.x, Math.min(box.x + box.width, p.x)), p.y - Math.max(box.y, Math.min(box.y + box.height, p.y))) < p.radius + 2);
|
|
14
|
+
}
|
|
15
|
+
/** Keep the complete text above its mark. Omit it when headroom runs out rather
|
|
16
|
+
* than clamping it back over the point. */
|
|
17
|
+
export function labelAbovePoint(x, y, width, height, bounds, points = []) {
|
|
18
|
+
const radius = points.reduce((r, p) => Math.abs(p.x - x) < .01 && Math.abs(p.y - y) < .01 ? Math.max(r, p.radius) : r, 0);
|
|
19
|
+
const box = { x: Math.max(bounds.left + 2, Math.min(bounds.right - width - 2, x - width / 2)), y: y - radius - 4 - height, width, height };
|
|
20
|
+
if (box.x < bounds.left || box.x + width > bounds.right || box.y < 2 || box.y + height > bounds.height - 2 || labelCoversPoint(box, points))
|
|
21
|
+
return undefined;
|
|
22
|
+
return box;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=point-label-placement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"point-label-placement.js","sourceRoot":"","sources":["../../src/library/point-label-placement.ts"],"names":[],"mappings":"AAIA;sEACsE;AACtE,MAAM,UAAU,WAAW,CAAC,KAAiB,EAAC,CAAmD,EAAC,QAAQ,GAAC,CAAC;IAC1G,IAAG,KAAK,CAAC,YAAY,CAAC,MAAM,GAAC,EAAE;QAAC,OAAO,EAAE,CAAC;IAC1C,IAAG,KAAK,CAAC,MAAM,KAAG,QAAQ,IAAE,KAAK,CAAC,MAAM,KAAG,SAAS;QAAC,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,CAAC,OAAO,IAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,GAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,GAAC,CAAC,CAAC,EAAE,EAAC,MAAM,EAAC,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,EAAE,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;IACvL,IAAG,CAAC,CAAC,MAAM,EAAC,QAAQ,EAAC,MAAM,EAAC,YAAY,EAAC,OAAO,EAAC,OAAO,EAAC,KAAK,EAAC,YAAY,EAAC,QAAQ,EAAC,UAAU,EAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAC7I,OAAO,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,EAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,EAAE,EAAC,MAAM,EAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,QAAQ,CAAC,GAAC,CAAC,GAAC,CAAC,EAAC,CAAC,CAAC,CAAC;AACtG,CAAC;AACD,MAAM,UAAU,gBAAgB,CAAC,GAA4D,EAAC,MAA4B;IACxH,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAC,GAAG,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,GAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAC,GAAG,CAAC,MAAM,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,CAAC;AACrJ,CAAC;AACD;2CAC2C;AAC3C,MAAM,UAAU,eAAe,CAAC,CAAQ,EAAC,CAAQ,EAAC,KAAY,EAAC,MAAa,EAAC,MAAkB,EAAC,SAA6B,EAAE;IAC7H,MAAM,MAAM,GAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,GAAG,IAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,GAAC,GAAG,CAAA,CAAC,CAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,CAAA,CAAC,CAAA,CAAC,EAAC,CAAC,CAAC,CAAC;IACrG,MAAM,GAAG,GAAC,EAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAC,CAAC,EAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,GAAC,KAAK,GAAC,CAAC,EAAC,CAAC,GAAC,KAAK,GAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,GAAC,MAAM,GAAC,CAAC,GAAC,MAAM,EAAC,KAAK,EAAC,MAAM,EAAC,CAAC;IAChH,IAAG,GAAG,CAAC,CAAC,GAAC,MAAM,CAAC,IAAI,IAAE,GAAG,CAAC,CAAC,GAAC,KAAK,GAAC,MAAM,CAAC,KAAK,IAAE,GAAG,CAAC,CAAC,GAAC,CAAC,IAAE,GAAG,CAAC,CAAC,GAAC,MAAM,GAAC,MAAM,CAAC,MAAM,GAAC,CAAC,IAAE,gBAAgB,CAAC,GAAG,EAAC,MAAM,CAAC;QAAC,OAAO,SAAS,CAAC;IACrI,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { NativeScene } from './contracts.js';
|
|
2
|
+
/** Own the small, bounded radial grid produced by Core. No projection occurs here. */
|
|
3
|
+
export declare function ownPolarGrid(scene: NativeScene): NonNullable<NativeScene['polarGrid']>;
|
|
4
|
+
export declare function polarGridSvg(g: NonNullable<NativeScene['polarGrid']>, color: string): string;
|
|
5
|
+
//# sourceMappingURL=polar-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polar-grid.d.ts","sourceRoot":"","sources":["../../src/library/polar-grid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAGhD,sFAAsF;AACtF,wBAAgB,YAAY,CAAC,KAAK,EAAC,WAAW,GAAE,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAgBpF;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAC,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,EAAC,KAAK,EAAC,MAAM,GAAE,MAAM,CAExF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { validateNativePath } from './path-validation.js';
|
|
2
|
+
/** Own the small, bounded radial grid produced by Core. No projection occurs here. */
|
|
3
|
+
export function ownPolarGrid(scene) {
|
|
4
|
+
const g = scene.polarGrid;
|
|
5
|
+
const finite = (v) => typeof v === 'number' && Number.isFinite(v);
|
|
6
|
+
const label = (v) => typeof v === 'string' && v.length <= 200;
|
|
7
|
+
if (!['parallel', 'radar', 'polar', 'windrose', 'radialbar'].includes(scene.family) || !g || ![g.cx, g.cy, g.radius].every(finite) || g.radius <= 0 || g.cx - g.radius < 0 || g.cy - g.radius < 0 || g.cx + g.radius > scene.width || g.cy + g.radius > scene.height || !Array.isArray(g.rings) || g.rings.length > 32 || !Array.isArray(g.spokes) || g.spokes.length > 32)
|
|
8
|
+
throw Error('Invalid polar grid');
|
|
9
|
+
const ids = new Set();
|
|
10
|
+
const rings = g.rings.map(r => {
|
|
11
|
+
if (!finite(r.radius) || r.radius < 0 || r.radius > g.radius + 1e-8 || !label(r.label) || r.path !== undefined && (typeof r.path !== 'string' || r.path.length > 16000))
|
|
12
|
+
throw Error('Invalid polar ring');
|
|
13
|
+
if (r.path !== undefined)
|
|
14
|
+
validateNativePath(r.path, scene.width, scene.height);
|
|
15
|
+
return { radius: r.radius, label: r.label, ...(r.path === undefined ? {} : { path: r.path }) };
|
|
16
|
+
});
|
|
17
|
+
const spokes = g.spokes.map(s => {
|
|
18
|
+
if (typeof s.id !== 'string' || !s.id || s.id.length > 128 || ids.has(s.id) || !label(s.label) || ![s.x, s.y].every(finite) || s.x < 0 || s.x > scene.width || s.y < 0 || s.y > scene.height)
|
|
19
|
+
throw Error('Invalid polar spoke');
|
|
20
|
+
ids.add(s.id);
|
|
21
|
+
return { id: s.id, label: s.label, x: s.x, y: s.y };
|
|
22
|
+
});
|
|
23
|
+
return { cx: g.cx, cy: g.cy, radius: g.radius, rings, spokes };
|
|
24
|
+
}
|
|
25
|
+
export function polarGridSvg(g, color) {
|
|
26
|
+
return g.rings.filter(r => r.radius > 0).map(r => r.path ? `<path d="${r.path}" fill="none" stroke="${color}" stroke-width="1"/>` : `<circle cx="${g.cx}" cy="${g.cy}" r="${r.radius}" fill="none" stroke="${color}" stroke-width="1"/>`).join('') + g.spokes.map(s => `<path d="M${g.cx} ${g.cy}L${s.x} ${s.y}" stroke="${color}" stroke-width="1"/>`).join('');
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=polar-grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polar-grid.js","sourceRoot":"","sources":["../../src/library/polar-grid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { HitRegion, NativeScene, Observation } from './contracts.js';
|
|
2
|
+
type Polygon = Extract<HitRegion, {
|
|
3
|
+
type: 'polygon';
|
|
4
|
+
}>;
|
|
5
|
+
/** Bounded ownership/validation. Neck-crossing funnel polygons may be concave. */
|
|
6
|
+
export declare function ownPolygon(hit: Polygon, scene: Readonly<{
|
|
7
|
+
family: NativeScene['family'] | 'pictorial';
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
stackGroups?: NativeScene['stackGroups'];
|
|
11
|
+
}>): Polygon;
|
|
12
|
+
export declare function containsPolygon(hit: Polygon, x: number, y: number): boolean;
|
|
13
|
+
/** Each candidate has at most six edges; callers bound the candidate set. */
|
|
14
|
+
export declare function polygonObservation(points: readonly Observation[], x: number, y: number): Observation | null;
|
|
15
|
+
/** Cache bounds on immutable scene polygons; no arrays are allocated per move. */
|
|
16
|
+
export declare function sankeyObservation(points: readonly Observation[], x: number, y: number): Observation | null;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=polygon-hit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"polygon-hit.d.ts","sourceRoot":"","sources":["../../src/library/polygon-hit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,SAAS,EAAC,WAAW,EAAC,WAAW,EAAC,MAAM,gBAAgB,CAAC;AACtE,KAAK,OAAO,GAAC,OAAO,CAAC,SAAS,EAAC;IAAC,IAAI,EAAC,SAAS,CAAA;CAAC,CAAC,CAAC;AAYjD,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,GAAG,EAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,CAAC;IAAC,MAAM,EAAC,WAAW,CAAC,QAAQ,CAAC,GAAC,WAAW,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,WAAW,CAAC,EAAC,WAAW,CAAC,aAAa,CAAC,CAAA;CAAC,CAAC,GAAE,OAAO,CAqB5K;AACD,wBAAgB,eAAe,CAAC,GAAG,EAAC,OAAO,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,GAAE,OAAO,CAOrE;AACD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,MAAM,EAAC,SAAS,WAAW,EAAE,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,GAAE,WAAW,GAAC,IAAI,CAEnG;AAGD,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,MAAM,EAAC,SAAS,WAAW,EAAE,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,MAAM,GAAE,WAAW,GAAC,IAAI,CAWlG"}
|