@sakuzu/maplibre-gl-draw 1.0.0 → 2.1.0
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/CHANGELOG.md +1109 -2
- package/README.ja.md +83 -50
- package/README.md +89 -53
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/api/datasets.d.ts +263 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +137 -0
- package/dist/api/draw.js +20 -0
- package/dist/api/drawing.d.ts +87 -0
- package/dist/api/errors.d.ts +35 -0
- package/dist/api/errors.js +35 -0
- package/dist/api/events.d.ts +316 -0
- package/dist/api/extension/context.d.ts +247 -0
- package/dist/api/extension/feature-type.d.ts +129 -0
- package/dist/api/extension/mode.d.ts +123 -0
- package/dist/api/extension/plugin.d.ts +51 -0
- package/dist/api/extension/plugin.js +3 -0
- package/dist/api/extension/provider.d.ts +119 -0
- package/dist/api/extension/provider.js +3 -0
- package/dist/api/extension/render.d.ts +176 -0
- package/dist/api/extension/render.js +3 -0
- package/dist/api/extension/store.d.ts +190 -0
- package/dist/api/extension/store.js +3 -0
- package/dist/api/extensions.d.ts +306 -0
- package/dist/api/extensions.js +3 -0
- package/dist/api/features.d.ts +188 -0
- package/dist/api/features.js +3 -0
- package/dist/api/groups.d.ts +111 -0
- package/dist/api/groups.js +3 -0
- package/dist/api/hidden.d.ts +45 -0
- package/dist/api/hidden.js +3 -0
- package/dist/api/impl/adapters.js +463 -0
- package/dist/api/impl/contexts.js +466 -0
- package/dist/api/impl/create-draw.js +124 -0
- package/dist/api/impl/datasets.js +405 -0
- package/dist/api/impl/destroy-guard.js +74 -0
- package/dist/api/impl/document.js +280 -0
- package/dist/api/impl/drawing.js +180 -0
- package/dist/api/impl/engine-context.d.ts +7 -0
- package/dist/api/{context.js → impl/engine-context.js} +49 -38
- package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
- package/dist/api/impl/events.js +423 -0
- package/dist/api/impl/extension-host.js +364 -0
- package/dist/api/impl/extensions.js +229 -0
- package/dist/api/impl/features.js +445 -0
- package/dist/api/impl/geometry/apply.d.ts +32 -0
- package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
- package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
- package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/split.js +10 -21
- package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
- package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
- package/dist/api/impl/geometry/types.js +3 -0
- package/dist/api/impl/groups.d.ts +3 -0
- package/dist/api/impl/groups.js +268 -0
- package/dist/api/impl/hidden.js +60 -0
- package/dist/api/impl/import-export/constants.d.ts +22 -0
- package/dist/api/impl/import-export/constants.js +24 -0
- package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
- package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
- package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
- package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
- package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
- package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
- package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
- package/dist/api/impl/import-export/image-import.d.ts +16 -0
- package/dist/api/impl/import-export/image-import.js +73 -0
- package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
- package/dist/api/impl/import-export/legacy-image-style.js +49 -0
- package/dist/api/impl/import-export/native-format.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
- package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
- package/dist/api/impl/import-export/native-upgrade.js +139 -0
- package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
- package/dist/api/impl/import-export/style-validation.d.ts +24 -0
- package/dist/api/impl/import-export/style-validation.js +86 -0
- package/dist/api/impl/import-export/types.d.ts +52 -0
- package/dist/api/impl/import-export/types.js +3 -0
- package/dist/api/impl/input.js +180 -0
- package/dist/api/impl/layers.js +307 -0
- package/dist/api/impl/metadata.d.ts +1 -0
- package/dist/api/impl/metadata.js +22 -0
- package/dist/api/impl/options.d.ts +1 -0
- package/dist/api/impl/options.js +851 -0
- package/dist/api/impl/placement.d.ts +1 -0
- package/dist/api/impl/placement.js +138 -0
- package/dist/api/impl/render-context.d.ts +13 -0
- package/dist/api/impl/render-context.js +272 -0
- package/dist/api/impl/rows.d.ts +1 -0
- package/dist/api/impl/rows.js +46 -0
- package/dist/api/impl/selection.d.ts +1 -0
- package/dist/api/impl/selection.js +186 -0
- package/dist/api/impl/shared.d.ts +64 -0
- package/dist/api/impl/shared.js +178 -0
- package/dist/api/impl/validate-extension.d.ts +1 -0
- package/dist/api/impl/validate-extension.js +159 -0
- package/dist/api/layers.d.ts +130 -0
- package/dist/api/layers.js +3 -0
- package/dist/api/metadata.d.ts +18 -0
- package/dist/api/metadata.js +3 -0
- package/dist/api/model.d.ts +487 -0
- package/dist/api/model.js +47 -0
- package/dist/api/options.d.ts +466 -0
- package/dist/api/options.js +3 -0
- package/dist/api/selection.d.ts +94 -0
- package/dist/api/selection.js +3 -0
- package/dist/api/state.d.ts +155 -0
- package/dist/api/state.js +12 -0
- package/dist/{display → dataset}/chunk.d.ts +1 -1
- package/dist/{display → dataset}/chunk.js +4 -3
- package/dist/{display → dataset}/dataset.js +21 -21
- package/dist/dataset/interaction.d.ts +1 -0
- package/dist/{display → dataset}/interaction.js +18 -6
- package/dist/dataset/manager.d.ts +1 -0
- package/dist/dataset/provider.d.ts +1 -0
- package/dist/{display → dataset}/retained.d.ts +1 -1
- package/dist/{display → dataset}/retained.js +8 -7
- package/dist/dataset/source.d.ts +1 -0
- package/dist/{display → dataset}/source.js +17 -4
- package/dist/dataset/spatial.d.ts +1 -0
- package/dist/{display → dataset}/spatial.js +1 -1
- package/dist/dataset/style.d.ts +1 -0
- package/dist/{display → dataset}/style.js +1 -1
- package/dist/dataset/table-source.d.ts +1 -0
- package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
- package/dist/{display → dataset}/thinning.d.ts +0 -10
- package/dist/{display → dataset}/thinning.js +3 -2
- package/dist/dataset/triangulation.d.ts +1 -0
- package/dist/{display → dataset}/triangulation.js +0 -0
- package/dist/{display → dataset}/types.d.ts +84 -121
- package/dist/dataset/types.js +61 -0
- package/dist/dispatcher/hit-test/box-strategies.js +13 -13
- package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
- package/dist/dispatcher/hit-test/globe-shape.js +5 -4
- package/dist/dispatcher/hit-test/service.d.ts +17 -0
- package/dist/dispatcher/hit-test/service.js +80 -16
- package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
- package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
- package/dist/dispatcher/hit-test/strategies/image.js +6 -18
- package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
- package/dist/dispatcher/hit-test/strategies/line.js +9 -2
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
- package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
- package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
- package/dist/dispatcher/hit-test/strategies/point.js +8 -4
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
- package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
- package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
- package/dist/dispatcher/input-router.js +154 -70
- package/dist/dispatcher/normalizer.js +25 -4
- package/dist/dispatcher/types.d.ts +6 -1
- package/dist/extension/feature-handler.d.ts +1 -182
- package/dist/extension/index.d.ts +4 -7
- package/dist/extension/renderers.d.ts +1 -208
- package/dist/geometry/angle.d.ts +0 -8
- package/dist/geometry/angle.js +0 -8
- package/dist/geometry/bbox.d.ts +4 -12
- package/dist/geometry/bbox.js +4 -12
- package/dist/geometry/boolean.d.ts +0 -51
- package/dist/geometry/boolean.js +0 -51
- package/dist/geometry/buffer.d.ts +0 -26
- package/dist/geometry/buffer.js +0 -26
- package/dist/geometry/circle.d.ts +0 -9
- package/dist/geometry/circle.js +0 -9
- package/dist/geometry/coords.d.ts +0 -16
- package/dist/geometry/coords.js +0 -16
- package/dist/geometry/distance.d.ts +0 -24
- package/dist/geometry/distance.js +0 -24
- package/dist/geometry/errors.d.ts +21 -36
- package/dist/geometry/errors.js +49 -29
- package/dist/geometry/geojson.d.ts +85 -0
- package/dist/geometry/geojson.js +173 -0
- package/dist/geometry/index.d.ts +38 -23
- package/dist/geometry/index.js +43 -31
- package/dist/geometry/measure.d.ts +0 -27
- package/dist/geometry/measure.js +0 -27
- package/dist/geometry/predicates.d.ts +0 -9
- package/dist/geometry/predicates.js +0 -9
- package/dist/geometry/public-bounds.d.ts +26 -0
- package/dist/geometry/public-bounds.js +30 -0
- package/dist/geometry/public-combine.d.ts +78 -0
- package/dist/geometry/public-combine.js +82 -0
- package/dist/geometry/public-create.d.ts +54 -0
- package/dist/geometry/public-create.js +70 -0
- package/dist/geometry/public-measure.d.ts +170 -0
- package/dist/geometry/public-measure.js +283 -0
- package/dist/geometry/public-predicates.d.ts +54 -0
- package/dist/geometry/public-predicates.js +144 -0
- package/dist/geometry/public-repair.d.ts +75 -0
- package/dist/geometry/public-repair.js +77 -0
- package/dist/geometry/simplify.d.ts +0 -7
- package/dist/geometry/simplify.js +0 -7
- package/dist/geometry/split.d.ts +0 -20
- package/dist/geometry/split.js +0 -20
- package/dist/geometry/units.d.ts +20 -12
- package/dist/geometry/units.js +20 -12
- package/dist/index.d.ts +66 -66
- package/dist/index.js +6 -18
- package/dist/messages.d.ts +7 -7
- package/dist/modes/draw/circle.js +83 -207
- package/dist/modes/draw/commit-layer.d.ts +5 -16
- package/dist/modes/draw/commit-layer.js +2 -13
- package/dist/modes/draw/freehand.js +108 -246
- package/dist/modes/draw/image.js +4 -2
- package/dist/modes/draw/index.d.ts +5 -5
- package/dist/modes/draw/index.js +5 -5
- package/dist/modes/draw/line.js +18 -354
- package/dist/modes/draw/point.js +29 -78
- package/dist/modes/draw/polygon.js +23 -368
- package/dist/modes/draw/trace-support.d.ts +43 -36
- package/dist/modes/draw/trace-support.js +95 -98
- package/dist/modes/draw/vertex-drawing.d.ts +1 -0
- package/dist/modes/draw/vertex-drawing.js +176 -0
- package/dist/modes/handler.d.ts +1 -285
- package/dist/modes/manager.d.ts +2 -2
- package/dist/modes/manager.js +3 -0
- package/dist/modes/select/box-selection.d.ts +3 -3
- package/dist/modes/select/box-selection.js +2 -1
- package/dist/modes/select/click-handler.d.ts +5 -5
- package/dist/modes/select/click-handler.js +22 -20
- package/dist/modes/select/cursor-handler.d.ts +2 -2
- package/dist/modes/select/drag/intermediate-writes.js +1 -1
- package/dist/modes/select/drag/move.js +3 -3
- package/dist/modes/select/drag/operation.d.ts +3 -3
- package/dist/modes/select/drag/radius.js +5 -4
- package/dist/modes/select/drag/transform.d.ts +2 -2
- package/dist/modes/select/drag/transform.js +11 -5
- package/dist/modes/select/drag/vertex.d.ts +2 -2
- package/dist/modes/select/drag/vertex.js +13 -8
- package/dist/modes/select/drag-handler.js +44 -25
- package/dist/modes/select/mode.js +17 -17
- package/dist/modes/select/shortcut-handler.d.ts +8 -8
- package/dist/modes/select/shortcut-handler.js +9 -7
- package/dist/operations/layer-operations.js +29 -168
- package/dist/operations/resize.d.ts +2 -2
- package/dist/operations/resize.js +5 -5
- package/dist/operations/rotate.js +5 -5
- package/dist/operations/selection-operations.d.ts +16 -1
- package/dist/operations/selection-operations.js +28 -13
- package/dist/operations/shared-vertex.js +4 -2
- package/dist/operations/trace-graph.d.ts +0 -18
- package/dist/operations/trace-graph.js +0 -18
- package/dist/operations/vertex.js +36 -35
- package/dist/shared/color.d.ts +1 -0
- package/dist/shared/color.js +245 -0
- package/dist/shared/config/constants.d.ts +1 -54
- package/dist/shared/config/constants.js +1 -58
- package/dist/shared/config/feature-style.d.ts +16 -13
- package/dist/shared/config/feature-style.js +9 -0
- package/dist/shared/config/rendering.d.ts +3 -3
- package/dist/shared/config/selection-highlight.d.ts +0 -15
- package/dist/shared/config/selection-highlight.js +4 -7
- package/dist/shared/config/selection.d.ts +2 -32
- package/dist/shared/config/selection.js +0 -18
- package/dist/shared/config/topology.d.ts +2 -2
- package/dist/shared/config/trace.d.ts +4 -4
- package/dist/shared/math/angle.d.ts +1 -1
- package/dist/shared/math/angle.js +1 -1
- package/dist/shared/math/circle.d.ts +1 -1
- package/dist/shared/math/circle.js +1 -1
- package/dist/shared/math/distance.d.ts +2 -1
- package/dist/shared/math/distance.js +3 -2
- package/dist/shared/math/index.d.ts +1 -1
- package/dist/shared/math/index.js +1 -1
- package/dist/shared/math/transform.d.ts +23 -0
- package/dist/shared/math/transform.js +47 -28
- package/dist/shared/properties.d.ts +18 -0
- package/dist/shared/properties.js +129 -0
- package/dist/shared/types/events.d.ts +15 -7
- package/dist/shared/types/model.d.ts +109 -159
- package/dist/shared/types/style.d.ts +1 -1
- package/dist/shared/utils/color.d.ts +2 -36
- package/dist/shared/utils/color.js +13 -70
- package/dist/shared/utils/coordinates.d.ts +30 -4
- package/dist/shared/utils/coordinates.js +56 -10
- package/dist/shared/utils/event-emitter.d.ts +1 -262
- package/dist/shared/utils/event-emitter.js +4 -3
- package/dist/shared/utils/feature-bbox.js +8 -7
- package/dist/shared/utils/feature-segments.js +5 -4
- package/dist/shared/utils/image.d.ts +0 -4
- package/dist/shared/utils/image.js +0 -6
- package/dist/shared/utils/name-generator.d.ts +14 -20
- package/dist/shared/utils/name-generator.js +20 -3
- package/dist/shared/utils/pixel-ratio.d.ts +9 -3
- package/dist/shared/utils/pixel-ratio.js +13 -4
- package/dist/shared/utils/property.d.ts +7 -50
- package/dist/shared/utils/property.js +22 -87
- package/dist/snapping/custom-targets.js +21 -4
- package/dist/snapping/indicator.js +20 -11
- package/dist/snapping/providers/display.d.ts +6 -1
- package/dist/snapping/providers/display.js +2 -1
- package/dist/snapping/providers/guide.d.ts +3 -43
- package/dist/snapping/providers/guide.js +1 -44
- package/dist/snapping/providers/intersection.js +1 -1
- package/dist/snapping/providers/store.js +3 -3
- package/dist/snapping/service.js +18 -7
- package/dist/snapping/types.d.ts +9 -35
- package/dist/store/draw-store.js +233 -142
- package/dist/store/local-visibility.d.ts +11 -6
- package/dist/store/local-visibility.js +38 -7
- package/dist/store/lock.d.ts +0 -6
- package/dist/store/lock.js +0 -6
- package/dist/store/memory/change-bus.d.ts +3 -3
- package/dist/store/memory/change-bus.js +12 -0
- package/dist/store/memory/file-store.d.ts +2 -2
- package/dist/store/memory/ui-state.d.ts +1 -51
- package/dist/store/memory/ui-state.js +122 -134
- package/dist/store/memory.d.ts +1 -8
- package/dist/store/memory.js +249 -45
- package/dist/store/ordering.d.ts +9 -0
- package/dist/store/ordering.js +17 -0
- package/dist/store/spatial/spatial-index.d.ts +1 -1
- package/dist/store/spatial/spatial-index.js +1 -1
- package/dist/store/spatial/store-spatial-index.d.ts +3 -1
- package/dist/store/spatial/store-spatial-index.js +9 -3
- package/dist/store/store.d.ts +66 -107
- package/dist/store/types.d.ts +1 -1
- package/dist/store/writable-layer.d.ts +1 -1
- package/dist/store/writable-layer.js +2 -2
- package/dist/table/builder.d.ts +83 -0
- package/dist/table/builder.js +381 -0
- package/dist/table/index.d.ts +37 -0
- package/dist/table/index.js +5 -0
- package/dist/table/packed-rtree.d.ts +1 -0
- package/dist/{display → table}/packed-rtree.js +1 -1
- package/dist/table/partition.d.ts +1 -0
- package/dist/{display → table}/partition.js +3 -3
- package/dist/table/prepare.d.ts +44 -0
- package/dist/table/prepare.js +136 -0
- package/dist/table/table.d.ts +1 -0
- package/dist/{display/columnar → table}/table.js +29 -25
- package/dist/{display/columnar → table}/types.d.ts +68 -72
- package/dist/table/types.js +3 -0
- package/dist/view/coordinator.js +4 -3
- package/dist/view/feature-companion.d.ts +13 -7
- package/dist/view/feature-companion.js +11 -3
- package/dist/view/globe-subdivision.js +3 -3
- package/dist/view/layer/attach.d.ts +12 -6
- package/dist/view/layer/attach.js +86 -10
- package/dist/view/layer/custom-layer.js +40 -11
- package/dist/view/layer/display-list.js +2 -1
- package/dist/view/layer/drape-planner.d.ts +2 -2
- package/dist/view/layer/frame-render.d.ts +3 -3
- package/dist/view/layer/frame-render.js +7 -2
- package/dist/view/layer/frame-state.d.ts +6 -6
- package/dist/view/layer/index.d.ts +2 -2
- package/dist/view/layer/index.js +1 -1
- package/dist/view/layer/render.d.ts +4 -4
- package/dist/view/layer/render.js +3 -8
- package/dist/view/layer/renderers.d.ts +2 -2
- package/dist/view/layer/renderers.js +1 -1
- package/dist/view/layer/slot-manager.d.ts +2 -2
- package/dist/view/layer/slot-manager.js +4 -4
- package/dist/view/layer/slots.d.ts +2 -2
- package/dist/view/layer/slots.js +1 -1
- package/dist/view/layer/store-retained-bbox.js +3 -2
- package/dist/view/layer/store-retained-classify.d.ts +5 -7
- package/dist/view/layer/store-retained-classify.js +19 -7
- package/dist/view/layer/store-retained-collect.js +8 -7
- package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
- package/dist/view/layer/store-retained-coord-patch.js +13 -4
- package/dist/view/layer/store-retained-immediate.d.ts +3 -3
- package/dist/view/layer/store-retained-immediate.js +3 -8
- package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
- package/dist/view/layer/store-retained.d.ts +2 -2
- package/dist/view/layer/store-retained.js +1 -1
- package/dist/view/renderers/batch-manager.js +8 -7
- package/dist/view/renderers/drawer.js +21 -15
- package/dist/view/renderers/image.js +13 -39
- package/dist/view/renderers/line/line-types.d.ts +3 -3
- package/dist/view/renderers/line/sdf-line.js +3 -1
- package/dist/view/renderers/point/billboard-depth.js +1 -1
- package/dist/view/renderers/point/point-instance.js +1 -1
- package/dist/view/renderers/point/point-shape.js +2 -2
- package/dist/view/renderers/point/point-style.js +48 -4
- package/dist/view/renderers/polygon/batch.js +1 -2
- package/dist/view/renderers/polygon/fill.js +3 -1
- package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
- package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
- package/dist/view/renderers/stroke.js +3 -1
- package/dist/view/shaders/helpers.d.ts +2 -42
- package/dist/view/shaders/helpers.js +0 -6
- package/dist/view/shaders/projection.d.ts +15 -7
- package/dist/view/shaders/projection.js +23 -6
- package/dist/view/shaders/quad.d.ts +16 -12
- package/dist/view/shaders/quad.js +34 -13
- package/dist/view/style-rule.d.ts +5 -42
- package/dist/view/style-rule.js +20 -44
- package/dist/view/terrain/binding.d.ts +1 -0
- package/dist/view/terrain/binding.js +29 -0
- package/dist/view/terrain/context.d.ts +3 -4
- package/dist/view/terrain/context.js +4 -5
- package/dist/view/terrain/drape/geometry.js +1 -1
- package/dist/view/terrain/drape/pass.d.ts +1 -1
- package/dist/view/terrain/drape/pass.js +8 -7
- package/dist/view/terrain/polygon.d.ts +9 -5
- package/dist/view/terrain/polygon.js +16 -2
- package/dist/view/terrain/state.d.ts +1 -1
- package/dist/view/terrain/state.js +1 -1
- package/dist/view/terrain/tessellation.d.ts +2 -2
- package/dist/view/terrain/tessellation.js +1 -1
- package/dist/view/ui/auxiliary-handles.d.ts +6 -29
- package/dist/view/ui/bounds.js +8 -12
- package/dist/view/ui/handle-test.js +2 -2
- package/dist/view/ui/handle-thinning.js +17 -17
- package/dist/view/ui/handles.js +21 -13
- package/dist/view/ui/helper.d.ts +1 -1
- package/dist/view/ui/helper.js +1 -1
- package/dist/view/ui/index.d.ts +1 -1
- package/dist/view/ui/selection-scope.js +4 -2
- package/dist/view/ui/selection-ui/bounding-box.js +6 -6
- package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
- package/dist/view/ui/selection-ui/extension-registry.js +70 -7
- package/dist/view/ui/selection-ui/index.d.ts +2 -2
- package/dist/view/ui/selection-ui/index.js +1 -1
- package/dist/view/ui/selection-ui/renderer.js +15 -38
- package/dist/view/ui/selection-ui/types.d.ts +17 -2
- package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
- package/dist/view/ui/selection-ui-drawer.js +63 -2
- package/dist/view/ui/tentative.js +1 -1
- package/dist/webgl/index.d.ts +65 -0
- package/dist/webgl/index.js +62 -0
- package/package.json +38 -15
- package/dist/api/api.d.ts +0 -1259
- package/dist/api/api.js +0 -86
- package/dist/api/context.d.ts +0 -173
- package/dist/api/display-api.js +0 -23
- package/dist/api/event-api.d.ts +0 -13
- package/dist/api/event-api.js +0 -17
- package/dist/api/extension-api.d.ts +0 -46
- package/dist/api/extension-api.js +0 -85
- package/dist/api/feature-api.d.ts +0 -11
- package/dist/api/feature-api.js +0 -101
- package/dist/api/geometry/apply.d.ts +0 -51
- package/dist/api/geometry/boolean.d.ts +0 -28
- package/dist/api/geometry/boolean.js +0 -65
- package/dist/api/geometry/types.d.ts +0 -31
- package/dist/api/geometry-operations.d.ts +0 -162
- package/dist/api/geometry-operations.js +0 -94
- package/dist/api/group-api.d.ts +0 -10
- package/dist/api/group-api.js +0 -78
- package/dist/api/import-export/constants.d.ts +0 -29
- package/dist/api/import-export/constants.js +0 -40
- package/dist/api/import-export/file-name.d.ts +0 -10
- package/dist/api/import-export/file-name.js +0 -20
- package/dist/api/import-export/geojson-export.d.ts +0 -19
- package/dist/api/import-export/image-import.d.ts +0 -12
- package/dist/api/import-export/image-import.js +0 -53
- package/dist/api/import-export/index.d.ts +0 -9
- package/dist/api/import-export/index.js +0 -107
- package/dist/api/import-export/native-format.d.ts +0 -15
- package/dist/api/import-export/style-validation.d.ts +0 -27
- package/dist/api/import-export/style-validation.js +0 -49
- package/dist/api/import-export/types.d.ts +0 -26
- package/dist/api/index.d.ts +0 -15
- package/dist/api/index.js +0 -3
- package/dist/api/input-api.d.ts +0 -158
- package/dist/api/input-api.js +0 -144
- package/dist/api/instance-api.d.ts +0 -38
- package/dist/api/instance-api.js +0 -136
- package/dist/api/layer-api.d.ts +0 -12
- package/dist/api/layer-api.js +0 -62
- package/dist/api/selection-api.d.ts +0 -7
- package/dist/api/selection-api.js +0 -78
- package/dist/api/snapping-api.d.ts +0 -125
- package/dist/api/snapping-api.js +0 -50
- package/dist/api/topology-api.d.ts +0 -30
- package/dist/api/topology-api.js +0 -16
- package/dist/api/tracing-api.d.ts +0 -31
- package/dist/api/tracing-api.js +0 -16
- package/dist/dispatcher/hit-test/index.d.ts +0 -14
- package/dist/dispatcher/hit-test/index.js +0 -9
- package/dist/dispatcher/index.d.ts +0 -15
- package/dist/dispatcher/index.js +0 -3
- package/dist/display/columnar/index.d.ts +0 -12
- package/dist/display/columnar/index.js +0 -13
- package/dist/display/columnar/prepare.d.ts +0 -42
- package/dist/display/columnar/prepare.js +0 -116
- package/dist/display/index.d.ts +0 -13
- package/dist/display/types.js +0 -43
- package/dist/maplibre-gl-draw.d.ts +0 -47
- package/dist/modes/cursor.js +0 -72
- package/dist/modes/index.d.ts +0 -7
- package/dist/operations/index.d.ts +0 -9
- package/dist/operations/index.js +0 -3
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/mutation-hooks.d.ts +0 -28
- package/dist/plugins/mutation-hooks.js +0 -84
- package/dist/plugins/plugin-context.js +0 -367
- package/dist/plugins/plugin-manager.d.ts +0 -103
- package/dist/plugins/plugin-manager.js +0 -316
- package/dist/plugins/plugin.d.ts +0 -529
- package/dist/shared/config/index.d.ts +0 -17
- package/dist/shared/config/index.js +0 -8
- package/dist/shared/utils/index.d.ts +0 -15
- package/dist/shared/utils/index.js +0 -24
- package/dist/snapping/index.d.ts +0 -14
- package/dist/snapping/index.js +0 -4
- package/dist/store/change-merger.js +0 -102
- package/dist/store/event-bridge.js +0 -161
- package/dist/store/index.d.ts +0 -12
- package/dist/store/index.js +0 -4
- package/dist/view/index.d.ts +0 -47
- package/dist/view/index.js +0 -20
- /package/dist/api/{geometry/types.js → datasets.js} +0 -0
- /package/dist/api/{import-export/types.js → document.js} +0 -0
- /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
- /package/dist/{display/index.js → api/events.js} +0 -0
- /package/dist/{modes/index.js → api/extension/context.js} +0 -0
- /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
- /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
- /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
- /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
- /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
- /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
- /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
- /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
- /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
- /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
- /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
- /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
- /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
- /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
- /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
- /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
- /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
- /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
- /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
- /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
- /package/dist/{display → dataset}/chunk-set.js +0 -0
- /package/dist/{display → dataset}/dataset.d.ts +0 -0
- /package/dist/{display → dataset}/manager.js +0 -0
- /package/dist/{display → dataset}/provider.js +0 -0
- /package/dist/{display → dataset}/selection.d.ts +0 -0
- /package/dist/{display → dataset}/selection.js +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The state of this client: the mode, the selection, the vertex selection, the snapping
|
|
3
|
+
* result, the stacking order and the terrain diagnostics
|
|
4
|
+
*/
|
|
5
|
+
import type { Position } from 'geojson';
|
|
6
|
+
/** The names of the built-in modes. */
|
|
7
|
+
export declare const MODES: readonly ["select", "draw_point", "draw_line", "draw_polygon", "draw_image", "draw_circle", "draw_freehand"];
|
|
8
|
+
/**
|
|
9
|
+
* The name of a mode: how the input is received. One of {@link MODES}, or the name of a mode
|
|
10
|
+
* added with `draw.extensions.modes.add`.
|
|
11
|
+
*/
|
|
12
|
+
export type Mode = (typeof MODES)[number] | (string & {});
|
|
13
|
+
/** What the selection holds: features, groups or layers. */
|
|
14
|
+
export type SelectionType = 'feature' | 'group' | 'layer';
|
|
15
|
+
/** What this client has selected: the type and the IDs. The selection holds one type at a time. */
|
|
16
|
+
export interface Selection {
|
|
17
|
+
/** The type of the selected items, or `null` when nothing is selected */
|
|
18
|
+
type: SelectionType | null;
|
|
19
|
+
/** The IDs of the selected items */
|
|
20
|
+
ids: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A vertex of a feature, as the part, the ring and the index within the ring.
|
|
24
|
+
*/
|
|
25
|
+
export interface VertexRef {
|
|
26
|
+
/** The part of a Multi geometry; 0 when it is left out */
|
|
27
|
+
part?: number;
|
|
28
|
+
/** The ring of a polygon, 0 for the outer ring; 0 for lines and points */
|
|
29
|
+
ring: number;
|
|
30
|
+
/** The index of the vertex within the ring */
|
|
31
|
+
index: number;
|
|
32
|
+
}
|
|
33
|
+
/** The selected vertices of one feature. */
|
|
34
|
+
export interface VertexSelection {
|
|
35
|
+
/** The ID of the feature */
|
|
36
|
+
featureId: string;
|
|
37
|
+
/** The selected vertices */
|
|
38
|
+
vertices: readonly VertexRef[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Where the pointer snapped to. When nothing was snapped to, `lngLat` is the position of the
|
|
42
|
+
* pointer and `target` is absent.
|
|
43
|
+
*/
|
|
44
|
+
export interface SnapResult {
|
|
45
|
+
/** The position after snapping */
|
|
46
|
+
lngLat: Position;
|
|
47
|
+
/** What was snapped to */
|
|
48
|
+
target?: {
|
|
49
|
+
/**
|
|
50
|
+
* The kind of the target; a kind of its own that a snap provider gave its candidate is
|
|
51
|
+
* kept as it is
|
|
52
|
+
*/
|
|
53
|
+
kind: 'vertex' | 'edge' | 'intersection' | 'guide' | (string & {});
|
|
54
|
+
/** The ID of the feature, for a target of the document */
|
|
55
|
+
featureId?: string;
|
|
56
|
+
/** The ID of the dataset, for a target of a dataset */
|
|
57
|
+
datasetId?: string;
|
|
58
|
+
/** A description to show */
|
|
59
|
+
description?: string;
|
|
60
|
+
/** The vertex, for a vertex target */
|
|
61
|
+
vertex?: VertexRef;
|
|
62
|
+
/** The segment, for an edge or a guide */
|
|
63
|
+
segment?: {
|
|
64
|
+
start: Position;
|
|
65
|
+
end: Position;
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* How a mode wants the positions of its input snapped, as `ModeHandler.snapPreference` declares
|
|
71
|
+
* it. It is read before every input is snapped, so a mode whose preference changes
|
|
72
|
+
* while it draws declares it as a getter.
|
|
73
|
+
*/
|
|
74
|
+
export interface SnapPreference {
|
|
75
|
+
/**
|
|
76
|
+
* The feature to prefer when snapping candidates are at the same distance, such as the
|
|
77
|
+
* boundary a trace started along; none when it is left out or `null`
|
|
78
|
+
*/
|
|
79
|
+
prefer?: {
|
|
80
|
+
featureId: string;
|
|
81
|
+
datasetId?: string;
|
|
82
|
+
} | null;
|
|
83
|
+
/**
|
|
84
|
+
* The inputs whose position is not snapped, by the name of their receiver; every input is
|
|
85
|
+
* snapped when it is left out. A stroke drawn by dragging leaves out `onDrag`, so that its
|
|
86
|
+
* inner points follow the pointer while its ends still snap.
|
|
87
|
+
*/
|
|
88
|
+
unsnapped?: readonly ('onClick' | 'onPointerMove' | 'onDragStart' | 'onDrag' | 'onDragEnd')[];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* One division of the stacking order: the map layer that draws one run of the layer order
|
|
92
|
+
* between two entries that come from outside the document.
|
|
93
|
+
*/
|
|
94
|
+
export interface LayerStackEntry {
|
|
95
|
+
/** The ID of the map layer that draws the run */
|
|
96
|
+
readonly layerId: string;
|
|
97
|
+
/** The index in the layer order where the run starts (inclusive) */
|
|
98
|
+
readonly from: number;
|
|
99
|
+
/** The index in the layer order where the run ends (exclusive) */
|
|
100
|
+
readonly to: number;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The state the terrain was drawn with, for diagnostics. Its fields follow the drawing and
|
|
104
|
+
* carry a weaker promise than the rest of the API.
|
|
105
|
+
*/
|
|
106
|
+
export interface TerrainDiagnostics {
|
|
107
|
+
/** The terrain state of the last drawing */
|
|
108
|
+
readonly render: {
|
|
109
|
+
/** Whether the terrain was on and its elevation data usable */
|
|
110
|
+
readonly active: boolean;
|
|
111
|
+
/** The Mercator rectangle the elevation data covers, `[x0, y0, 1 / width, 1 / height]` */
|
|
112
|
+
readonly atlasRect: readonly [number, number, number, number];
|
|
113
|
+
/** The size of the elevation data in texels, `[width, height]` */
|
|
114
|
+
readonly atlasSize: readonly [number, number];
|
|
115
|
+
/** The factor from meters to Mercator z at the latitude of the center of the screen */
|
|
116
|
+
readonly elevationScale: number;
|
|
117
|
+
/** The lift above the ground in meters */
|
|
118
|
+
readonly liftMeters: number;
|
|
119
|
+
/** The subdivision step in meters (0 means no subdivision) */
|
|
120
|
+
readonly stepMeters: number;
|
|
121
|
+
/** The grid spacing of the subdivision, in Mercator units */
|
|
122
|
+
readonly stepGrid: number;
|
|
123
|
+
/** The generation of the subdivision; it counts the changes of the step */
|
|
124
|
+
readonly generation: number;
|
|
125
|
+
};
|
|
126
|
+
/** How the areas were laid on the terrain in the last drawing */
|
|
127
|
+
readonly drape: {
|
|
128
|
+
/** Whether the analytic drape was used */
|
|
129
|
+
readonly used: boolean;
|
|
130
|
+
/** Why it was not used */
|
|
131
|
+
readonly reason: string;
|
|
132
|
+
/** The number of features laid on the drape */
|
|
133
|
+
readonly featureCount: number;
|
|
134
|
+
/** The number of edges */
|
|
135
|
+
readonly edgeCount: number;
|
|
136
|
+
/** The number of tiles drawn */
|
|
137
|
+
readonly tileCount: number;
|
|
138
|
+
/** The largest number of runs in one cell */
|
|
139
|
+
readonly maxRunsPerCell: number;
|
|
140
|
+
/** The largest number of edges in one cell */
|
|
141
|
+
readonly maxEdgesPerCell: number;
|
|
142
|
+
/** The largest number of edges in one tile of the view */
|
|
143
|
+
readonly maxTileEdges: number;
|
|
144
|
+
/** The number of cells cut short for going over the budget */
|
|
145
|
+
readonly truncatedCells: number;
|
|
146
|
+
/** The number of tiles that could not be evaluated and were not drawn */
|
|
147
|
+
readonly unfitTiles: number;
|
|
148
|
+
/** The number of runs whose cell origin was inside the feature */
|
|
149
|
+
readonly insideRuns: number;
|
|
150
|
+
/** The number of features left off the drape */
|
|
151
|
+
readonly excluded: number;
|
|
152
|
+
/** The number of features drawn without the drape */
|
|
153
|
+
readonly immediate: number;
|
|
154
|
+
};
|
|
155
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** The names of the built-in modes. */
|
|
4
|
+
export const MODES = [
|
|
5
|
+
'select',
|
|
6
|
+
'draw_point',
|
|
7
|
+
'draw_line',
|
|
8
|
+
'draw_polygon',
|
|
9
|
+
'draw_image',
|
|
10
|
+
'draw_circle',
|
|
11
|
+
'draw_freehand',
|
|
12
|
+
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { CHUNK_TARGET_SIZE, CHUNK_TARGET_VERTICES, chunkTargetSizeFor, LARGE_CHUNK_TARGET_SIZE, LARGE_DATASET_THRESHOLD, } from '
|
|
1
|
+
export { CHUNK_TARGET_SIZE, CHUNK_TARGET_VERTICES, chunkTargetSizeFor, LARGE_CHUNK_TARGET_SIZE, LARGE_DATASET_THRESHOLD, } from '../table/partition.js';
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { coordinatesOf } from '../shared/utils/coordinates.js';
|
|
3
4
|
import { getBoundingBox } from '../shared/utils/feature-bbox.js';
|
|
4
|
-
import { CHUNK_TARGET_SIZE, partitionRows } from '
|
|
5
|
-
export { CHUNK_TARGET_SIZE, CHUNK_TARGET_VERTICES, chunkTargetSizeFor, LARGE_CHUNK_TARGET_SIZE, LARGE_DATASET_THRESHOLD, } from '
|
|
5
|
+
import { CHUNK_TARGET_SIZE, partitionRows } from '../table/partition.js';
|
|
6
|
+
export { CHUNK_TARGET_SIZE, CHUNK_TARGET_VERTICES, chunkTargetSizeFor, LARGE_CHUNK_TARGET_SIZE, LARGE_DATASET_THRESHOLD, } from '../table/partition.js';
|
|
6
7
|
/**
|
|
7
8
|
* Whether two bboxes intersect
|
|
8
9
|
*
|
|
@@ -17,7 +18,7 @@ export function boundsIntersect(a, b) {
|
|
|
17
18
|
* @internal
|
|
18
19
|
*/
|
|
19
20
|
export function countVertices(feature) {
|
|
20
|
-
const geometry = feature;
|
|
21
|
+
const geometry = { type: feature.type, coordinates: coordinatesOf(feature) };
|
|
21
22
|
const walk = (value, depth) => {
|
|
22
23
|
if (!Array.isArray(value))
|
|
23
24
|
return 0;
|
|
@@ -4,11 +4,11 @@ import { DEFAULT_FEATURE_STYLE_CONFIG } from '../shared/config/feature-style.js'
|
|
|
4
4
|
import { sanitizeDrawFactors } from '../view/renderers/draw-factors.js';
|
|
5
5
|
import { TerrainContext } from '../view/terrain/context.js';
|
|
6
6
|
import { DisplayChunkSet } from './chunk-set.js';
|
|
7
|
-
import { ColumnarSource } from './columnar/source.js';
|
|
8
7
|
import { DisplayProviderLoader } from './provider.js';
|
|
9
8
|
import { drawSelectionHighlight, hitTestDisplayFeatures, sameFeatureIds, } from './selection.js';
|
|
10
9
|
import { FeatureArraySource } from './source.js';
|
|
11
10
|
import { DisplayFeatureStyler } from './style.js';
|
|
11
|
+
import { TableSource } from './table-source.js';
|
|
12
12
|
import { CollisionThinningState, pointMarkerRadiusPx } from './thinning.js';
|
|
13
13
|
import { normalizeDisplayFeature } from './types.js';
|
|
14
14
|
// The importers of these moved names keep their path (the definitions live in the parts)
|
|
@@ -218,12 +218,9 @@ export class DatasetImpl {
|
|
|
218
218
|
writable: true,
|
|
219
219
|
value: (feature) => feature.type === 'Point' && this.externalPointRender?.(feature) === true
|
|
220
220
|
});
|
|
221
|
-
const given = [options.
|
|
221
|
+
const given = [options.rows, options.table, options.provider].filter((input) => input !== undefined);
|
|
222
222
|
if (given.length > 1) {
|
|
223
|
-
throw new Error(`Dataset "${options.id}": only one of
|
|
224
|
-
}
|
|
225
|
-
if (options.prepared && !options.columnar) {
|
|
226
|
-
throw new Error(`Dataset "${options.id}": prepared is given without columnar`);
|
|
223
|
+
throw new Error(`Dataset "${options.id}": only one of rows, table and provider can be given`);
|
|
227
224
|
}
|
|
228
225
|
this.id = options.id;
|
|
229
226
|
this.currentOrder = options.order ?? 'below-store';
|
|
@@ -267,11 +264,11 @@ export class DatasetImpl {
|
|
|
267
264
|
},
|
|
268
265
|
})
|
|
269
266
|
: null;
|
|
270
|
-
if (options.
|
|
271
|
-
this.
|
|
267
|
+
if (options.rows) {
|
|
268
|
+
this.setRows(options.rows);
|
|
272
269
|
}
|
|
273
|
-
else if (options.
|
|
274
|
-
this.
|
|
270
|
+
else if (options.table) {
|
|
271
|
+
this.setTable(options.table);
|
|
275
272
|
}
|
|
276
273
|
}
|
|
277
274
|
/** Draw order (the current side) */
|
|
@@ -307,12 +304,12 @@ export class DatasetImpl {
|
|
|
307
304
|
this.emit('change', { reason: 'visibility' });
|
|
308
305
|
this.deps.requestRepaint();
|
|
309
306
|
}
|
|
310
|
-
|
|
311
|
-
this.applySource(new FeatureArraySource(
|
|
307
|
+
setRows(rows) {
|
|
308
|
+
this.applySource(new FeatureArraySource(rows.map(normalizeDisplayFeature)));
|
|
312
309
|
this.deps.requestRepaint();
|
|
313
310
|
}
|
|
314
|
-
|
|
315
|
-
this.applySource(new
|
|
311
|
+
setTable(table) {
|
|
312
|
+
this.applySource(new TableSource(table));
|
|
316
313
|
this.deps.requestRepaint();
|
|
317
314
|
}
|
|
318
315
|
setStyleRule(rule) {
|
|
@@ -350,6 +347,9 @@ export class DatasetImpl {
|
|
|
350
347
|
getBaseStyle() {
|
|
351
348
|
return this.styler.base;
|
|
352
349
|
}
|
|
350
|
+
getStyleRule() {
|
|
351
|
+
return this.styler.rule;
|
|
352
|
+
}
|
|
353
353
|
getFeatures() {
|
|
354
354
|
return this.source.features();
|
|
355
355
|
}
|
|
@@ -472,7 +472,7 @@ export class DatasetImpl {
|
|
|
472
472
|
const source = this.source;
|
|
473
473
|
// A table of points has nothing for it (and its rows are not built into features for
|
|
474
474
|
// nothing)
|
|
475
|
-
if (source instanceof
|
|
475
|
+
if (source instanceof TableSource && source.table.onlyPoints)
|
|
476
476
|
return [];
|
|
477
477
|
const features = [];
|
|
478
478
|
for (let row = 0; row < source.length; row++) {
|
|
@@ -515,10 +515,10 @@ export class DatasetImpl {
|
|
|
515
515
|
// hidden rows)
|
|
516
516
|
return source.index.searchWhere(bounds, (row) => thinning.isDrawnRow(row) && source.thinningRole(row) !== 'skip');
|
|
517
517
|
}
|
|
518
|
-
|
|
519
|
-
if (!this.hasRow(
|
|
520
|
-
return
|
|
521
|
-
return this.styler.prepareIfStyled(this.source.featureAt(
|
|
518
|
+
getRow(index) {
|
|
519
|
+
if (!this.hasRow(index))
|
|
520
|
+
return undefined;
|
|
521
|
+
return this.styler.prepareIfStyled(this.source.featureAt(index));
|
|
522
522
|
}
|
|
523
523
|
getRowId(row) {
|
|
524
524
|
return this.hasRow(row) ? this.source.idOf(row) : null;
|
|
@@ -731,8 +731,8 @@ export class DatasetImpl {
|
|
|
731
731
|
/**
|
|
732
732
|
* Applies new contents (the chunks, the index and the caches come with them)
|
|
733
733
|
*
|
|
734
|
-
* The only triggers for rebuilding the retained batches are this path (
|
|
735
|
-
*
|
|
734
|
+
* The only triggers for rebuilding the retained batches are this path (setRows,
|
|
735
|
+
* setTable and applying a provider result) and setStyleRule / setBaseStyle.
|
|
736
736
|
*/
|
|
737
737
|
applySource(source) {
|
|
738
738
|
this.source = source;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -13,7 +13,10 @@ export function createDisplayInteractions(deps) {
|
|
|
13
13
|
function toCoordinate(event) {
|
|
14
14
|
return [event.lngLat.lng, event.lngLat.lat];
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function toPoint(event) {
|
|
17
|
+
return { x: event.point.x, y: event.point.y };
|
|
18
|
+
}
|
|
19
|
+
function clearHover(lngLat, point) {
|
|
17
20
|
if (hoveredDatasetId === null)
|
|
18
21
|
return;
|
|
19
22
|
const previous = manager.getInternal(hoveredDatasetId);
|
|
@@ -21,7 +24,7 @@ export function createDisplayInteractions(deps) {
|
|
|
21
24
|
hoveredDatasetId = null;
|
|
22
25
|
hoveredFeatureId = null;
|
|
23
26
|
// Report with feature: null that it left the target
|
|
24
|
-
previous?.emit('hover', { datasetId, feature: null, row: null, lngLat });
|
|
27
|
+
previous?.emit('hover', { datasetId, feature: null, row: null, lngLat, point });
|
|
25
28
|
}
|
|
26
29
|
return {
|
|
27
30
|
handleClick(event) {
|
|
@@ -44,35 +47,43 @@ export function createDisplayInteractions(deps) {
|
|
|
44
47
|
feature: top.feature,
|
|
45
48
|
row,
|
|
46
49
|
lngLat: coordinate,
|
|
50
|
+
point: toPoint(event),
|
|
47
51
|
});
|
|
48
52
|
notifyClick?.({
|
|
49
53
|
datasetId: top.dataset.id,
|
|
50
54
|
feature: top.feature,
|
|
51
55
|
row,
|
|
52
56
|
lngLat: coordinate,
|
|
57
|
+
point: toPoint(event),
|
|
53
58
|
});
|
|
54
59
|
return;
|
|
55
60
|
}
|
|
56
61
|
// Nothing was there, or a non-interactive dataset merely blocked it: it is reported as
|
|
57
62
|
// a no-hit (the source of "click on empty space to deselect" on the host side)
|
|
58
|
-
notifyClick?.({
|
|
63
|
+
notifyClick?.({
|
|
64
|
+
datasetId: null,
|
|
65
|
+
feature: null,
|
|
66
|
+
row: null,
|
|
67
|
+
lngLat: coordinate,
|
|
68
|
+
point: toPoint(event),
|
|
69
|
+
});
|
|
59
70
|
},
|
|
60
71
|
handleMouseMove(event) {
|
|
61
72
|
const coordinate = toCoordinate(event);
|
|
62
73
|
if (!manager.hasAny()) {
|
|
63
|
-
clearHover(coordinate);
|
|
74
|
+
clearHover(coordinate, toPoint(event));
|
|
64
75
|
return;
|
|
65
76
|
}
|
|
66
77
|
const top = hitTestTopmost(event);
|
|
67
78
|
if (top?.kind !== 'dataset' || !top.feature) {
|
|
68
|
-
clearHover(coordinate);
|
|
79
|
+
clearHover(coordinate, toPoint(event));
|
|
69
80
|
return;
|
|
70
81
|
}
|
|
71
82
|
if (top.dataset.id === hoveredDatasetId && top.feature.id === hoveredFeatureId) {
|
|
72
83
|
// Nothing fires while the pointer only moves over the same feature
|
|
73
84
|
return;
|
|
74
85
|
}
|
|
75
|
-
clearHover(coordinate);
|
|
86
|
+
clearHover(coordinate, toPoint(event));
|
|
76
87
|
hoveredDatasetId = top.dataset.id;
|
|
77
88
|
hoveredFeatureId = top.feature.id;
|
|
78
89
|
manager.getInternal(top.dataset.id)?.emit('hover', {
|
|
@@ -80,6 +91,7 @@ export function createDisplayInteractions(deps) {
|
|
|
80
91
|
feature: top.feature,
|
|
81
92
|
row: top.row ?? null,
|
|
82
93
|
lngLat: coordinate,
|
|
94
|
+
point: toPoint(event),
|
|
83
95
|
});
|
|
84
96
|
},
|
|
85
97
|
reset() {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -4,7 +4,7 @@ import type { RetainedRendererSet } from '../view/renderers/retained.js';
|
|
|
4
4
|
*
|
|
5
5
|
* What cannot be finished in one frame is advanced by the budget of the frame and handed on. The
|
|
6
6
|
* caller keeps drawing the batches of the previous version until it is finished
|
|
7
|
-
* (`
|
|
7
|
+
* (`dataset/chunk-set.ts`). It is built the same way as the one-shot build
|
|
8
8
|
* (`buildChunkBatches`); only the unit of bundling differs.
|
|
9
9
|
*/
|
|
10
10
|
export interface ChunkBuildJob {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
import { generateCirclePolygon } from '../shared/math/index.js';
|
|
4
|
+
import { coordinatesOf } from '../shared/utils/coordinates.js';
|
|
4
5
|
import { getCircleRadius, getCreatedZoom } from '../shared/utils/property.js';
|
|
5
6
|
import { toLineBatchItem, toPointInstanceData } from '../view/renderers/batch-manager.js';
|
|
6
7
|
import { NEUTRAL_DRAW_FACTORS } from '../view/renderers/draw-factors.js';
|
|
@@ -741,29 +742,29 @@ export function collectFeature(feature, draft, styles, isExternallyRenderedPoint
|
|
|
741
742
|
const skipSolid = skipDrapedFills && isDrapedGeometry(feature);
|
|
742
743
|
switch (feature.type) {
|
|
743
744
|
case 'Point':
|
|
744
|
-
collectPoint(feature, feature
|
|
745
|
+
collectPoint(feature, coordinatesOf(feature), draft, styles, isExternallyRenderedPoint);
|
|
745
746
|
return;
|
|
746
747
|
case 'MultiPoint':
|
|
747
748
|
// Whether the predicate applies to Point alone is up to the predicate itself (the test is
|
|
748
749
|
// in one place)
|
|
749
|
-
for (const coord of feature
|
|
750
|
+
for (const coord of coordinatesOf(feature)) {
|
|
750
751
|
collectPoint(feature, coord, draft, styles, isExternallyRenderedPoint);
|
|
751
752
|
}
|
|
752
753
|
return;
|
|
753
754
|
case 'LineString':
|
|
754
755
|
case 'Freehand':
|
|
755
|
-
collectLine(feature, feature
|
|
756
|
+
collectLine(feature, coordinatesOf(feature), draft, styles, skipSolid);
|
|
756
757
|
return;
|
|
757
758
|
case 'MultiLineString':
|
|
758
|
-
for (const coords of feature
|
|
759
|
+
for (const coords of coordinatesOf(feature)) {
|
|
759
760
|
collectLine(feature, coords, draft, styles, skipSolid);
|
|
760
761
|
}
|
|
761
762
|
return;
|
|
762
763
|
case 'Polygon':
|
|
763
|
-
collectPolygon(feature, feature
|
|
764
|
+
collectPolygon(feature, coordinatesOf(feature), draft, styles, 0, skipSolid);
|
|
764
765
|
return;
|
|
765
766
|
case 'MultiPolygon': {
|
|
766
|
-
const parts = feature
|
|
767
|
+
const parts = coordinatesOf(feature);
|
|
767
768
|
for (let i = 0; i < parts.length; i++) {
|
|
768
769
|
collectPolygon(feature, parts[i], draft, styles, i, skipSolid);
|
|
769
770
|
}
|
|
@@ -773,7 +774,7 @@ export function collectFeature(feature, draft, styles, isExternallyRenderedPoint
|
|
|
773
774
|
const radiusMeters = getCircleRadius(feature);
|
|
774
775
|
if (!radiusMeters || radiusMeters <= 0)
|
|
775
776
|
return;
|
|
776
|
-
const center = feature
|
|
777
|
+
const center = coordinatesOf(feature);
|
|
777
778
|
collectPolygon(feature, [generateCirclePolygon(center, radiusMeters)], draft, styles);
|
|
778
779
|
return;
|
|
779
780
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { coordinatesOf } from '../shared/utils/coordinates.js';
|
|
4
|
+
import { chunkTargetSizeFor } from '../table/partition.js';
|
|
3
5
|
import { computeFeatureBounds, partitionIntoChunks } from './chunk.js';
|
|
4
|
-
import { chunkTargetSizeFor } from './partition.js';
|
|
5
6
|
import { collectFeatures } from './retained.js';
|
|
6
7
|
import { maxStylePointRadiusOf } from './selection.js';
|
|
7
8
|
import { DisplaySpatialIndex } from './spatial.js';
|
|
@@ -59,6 +60,13 @@ export class FeatureArraySource {
|
|
|
59
60
|
writable: true,
|
|
60
61
|
value: null
|
|
61
62
|
});
|
|
63
|
+
/** The features of the rows with a geometry, found on the first request */
|
|
64
|
+
Object.defineProperty(this, "withGeometry", {
|
|
65
|
+
enumerable: true,
|
|
66
|
+
configurable: true,
|
|
67
|
+
writable: true,
|
|
68
|
+
value: null
|
|
69
|
+
});
|
|
62
70
|
this.length = list.length;
|
|
63
71
|
// The bboxes are shared by the spatial index and the chunk splitting (not computed twice)
|
|
64
72
|
this.bounds = computeFeatureBounds(list);
|
|
@@ -83,7 +91,7 @@ export class FeatureArraySource {
|
|
|
83
91
|
if (ids.size === 0)
|
|
84
92
|
return rows;
|
|
85
93
|
for (let row = 0; row < this.list.length; row++) {
|
|
86
|
-
if (ids.has(this.list[row].id))
|
|
94
|
+
if (ids.has(this.list[row].id) && this.hasGeometry(row))
|
|
87
95
|
rows.push(row);
|
|
88
96
|
}
|
|
89
97
|
return rows;
|
|
@@ -98,13 +106,18 @@ export class FeatureArraySource {
|
|
|
98
106
|
return this.rowById.get(id) ?? -1;
|
|
99
107
|
}
|
|
100
108
|
features() {
|
|
101
|
-
|
|
109
|
+
if (!this.withGeometry) {
|
|
110
|
+
// The rows without a geometry (NaN coordinates) are left out, as a table leaves them out
|
|
111
|
+
const all = this.list.every((_, row) => this.hasGeometry(row));
|
|
112
|
+
this.withGeometry = all ? this.list : this.list.filter((_, row) => this.hasGeometry(row));
|
|
113
|
+
}
|
|
114
|
+
return this.withGeometry;
|
|
102
115
|
}
|
|
103
116
|
thinningRole(row) {
|
|
104
117
|
return featureThinningRole(this.list[row]);
|
|
105
118
|
}
|
|
106
119
|
pointOf(row) {
|
|
107
|
-
return this.list[row]
|
|
120
|
+
return coordinatesOf(this.list[row]);
|
|
108
121
|
}
|
|
109
122
|
styleRadiusOf(row) {
|
|
110
123
|
return this.list[row].style?.pointRadius;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
import { buildPackedRTree, searchPackedRTree } from '
|
|
3
|
+
import { buildPackedRTree, searchPackedRTree } from '../table/packed-rtree.js';
|
|
4
4
|
/**
|
|
5
5
|
* Spatial index of a dataset
|
|
6
6
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -89,7 +89,7 @@ export class DisplayFeatureStyler {
|
|
|
89
89
|
const channel = getStyleRuleChannel(feature.type);
|
|
90
90
|
const ruleColor = this.styleCache.resolve(feature, this.styleRule);
|
|
91
91
|
const style = this.effectiveStyle(feature.style, ruleColor, channel);
|
|
92
|
-
const prepared = style === feature.style ? feature : { ...feature, style };
|
|
92
|
+
const prepared = style === feature.style ? feature : { ...feature, style: style ?? {} };
|
|
93
93
|
this.preparedCache.set(feature.id, prepared);
|
|
94
94
|
return prepared;
|
|
95
95
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|