@sakuzu/maplibre-gl-draw 1.0.0 → 2.0.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 +1016 -2
- package/README.ja.md +39 -19
- package/README.md +41 -21
- package/dist/api/datasets.d.ts +258 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +135 -0
- package/dist/api/draw.js +18 -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 +306 -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 +404 -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 +422 -0
- package/dist/api/impl/extension-host.js +361 -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 +822 -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 +18 -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 +82 -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 +152 -69
- package/dist/dispatcher/normalizer.js +6 -2
- 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 +81 -0
- package/dist/geometry/geojson.js +164 -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 +52 -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 +1 -1
- package/dist/view/layer/attach.js +1 -1
- 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 +20 -9
- 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
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
|
|
5
5
|
import type { VertexRef } from '../../../store/types.js';
|
|
6
|
-
import type {
|
|
6
|
+
import type { EngineModeContext } from '../../handler.js';
|
|
7
7
|
import type { DragStore } from './operation.js';
|
|
8
8
|
/**
|
|
9
9
|
* Start a vertex drag, and set the DragState and the followed vertices it draws from. Returns
|
|
10
10
|
* null when the feature or the vertex is gone
|
|
11
11
|
*/
|
|
12
|
-
export declare function startVertexDrag(event: DragNormalizedEvent, featureId: string, vertexRef: VertexRef, context:
|
|
12
|
+
export declare function startVertexDrag(event: DragNormalizedEvent, featureId: string, vertexRef: VertexRef, context: EngineModeContext): VertexDrag | null;
|
|
13
13
|
/**
|
|
14
14
|
* Start a midpoint drag: insert a vertex at the midpoint and continue as a move of that
|
|
15
15
|
* vertex. Returns null when the feature is gone
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
import { collectSharedVertexMoves } from '../../../operations/shared-vertex.js';
|
|
4
4
|
import { addVertex, computeVertexMove, startVertexMove } from '../../../operations/vertex.js';
|
|
5
|
+
import { geometryFromCoordinates } from '../../../shared/utils/coordinates.js';
|
|
5
6
|
import { hasVertexRef } from '../../../shared/utils/vertex-ref.js';
|
|
6
7
|
import { dragStartLngLat } from './operation.js';
|
|
7
8
|
/**
|
|
8
9
|
* Whether the modifier key that temporarily disables shared-vertex following is held down
|
|
9
10
|
*
|
|
10
|
-
* The temporary-disable key is shared with snapping (
|
|
11
|
+
* The temporary-disable key is shared with snapping (`snapping.disableKey` of the options, 'alt' by default).
|
|
11
12
|
* Holding it down when starting a drag escapes to a solitary move for that one drag only.
|
|
12
13
|
*
|
|
13
14
|
* The decision looks only at the normalized modifier keys of the drag start event (core does not
|
|
@@ -29,7 +30,9 @@ function applyVertexMove(state, lngLat, store, writes) {
|
|
|
29
30
|
if (!feature)
|
|
30
31
|
return;
|
|
31
32
|
const newCoords = computeVertexMove(state, lngLat, feature);
|
|
32
|
-
writes.write(store, state.featureId, {
|
|
33
|
+
writes.write(store, state.featureId, {
|
|
34
|
+
geometry: geometryFromCoordinates(feature.type, newCoords),
|
|
35
|
+
});
|
|
33
36
|
}
|
|
34
37
|
/**
|
|
35
38
|
* A vertex move. A midpoint drag continues as a vertex move of the vertex it added, and is
|
|
@@ -71,7 +74,9 @@ export class VertexDrag {
|
|
|
71
74
|
if (!feature)
|
|
72
75
|
return;
|
|
73
76
|
const newCoords = computeVertexMove(this.state, event.lngLat, feature);
|
|
74
|
-
writes.write(store, this.state.featureId, {
|
|
77
|
+
writes.write(store, this.state.featureId, {
|
|
78
|
+
geometry: geometryFromCoordinates(feature.type, newCoords),
|
|
79
|
+
});
|
|
75
80
|
// Preview update for the features following along through a shared vertex. They are written
|
|
76
81
|
// one at a time in the same manner as the main one (an intermediate updateFeature).
|
|
77
82
|
// The commit is the single transaction at the end of the drag.
|
|
@@ -91,14 +96,14 @@ export function startVertexDrag(event, featureId, vertexRef, context) {
|
|
|
91
96
|
return null;
|
|
92
97
|
const startLngLat = dragStartLngLat(event);
|
|
93
98
|
// Check the currently selected vertices
|
|
94
|
-
const selectedVertices = store.
|
|
99
|
+
const selectedVertices = store.getVertexSelection();
|
|
95
100
|
let vertexRefsToMove;
|
|
96
101
|
if (selectedVertices &&
|
|
97
102
|
selectedVertices.featureId === featureId &&
|
|
98
|
-
hasVertexRef(selectedVertices.
|
|
103
|
+
hasVertexRef(selectedVertices.vertices, vertexRef)) {
|
|
99
104
|
// If the vertex being dragged is one of the selected vertices, move every selected vertex
|
|
100
105
|
// (a multiple selection spanning rings and parts can be moved as-is too)
|
|
101
|
-
vertexRefsToMove = selectedVertices.
|
|
106
|
+
vertexRefsToMove = selectedVertices.vertices;
|
|
102
107
|
}
|
|
103
108
|
else {
|
|
104
109
|
// Otherwise move only the vertex being dragged
|
|
@@ -127,7 +132,7 @@ export function startVertexDrag(event, featureId, vertexRef, context) {
|
|
|
127
132
|
// the selected vertices. They are set back to null when the drag ends (endDrag / reset).
|
|
128
133
|
store.setFollowedVertices?.(sharedVertexStates.map((followerState) => ({
|
|
129
134
|
featureId: followerState.featureId,
|
|
130
|
-
|
|
135
|
+
vertices: followerState.vertices,
|
|
131
136
|
})));
|
|
132
137
|
// Set the DragState (activeVertex is the vertex the drag started from)
|
|
133
138
|
store.setDragState({
|
|
@@ -149,7 +154,7 @@ export function startMidpointDrag(event, featureId, after, store) {
|
|
|
149
154
|
// Add the position of the midpoint as a new vertex
|
|
150
155
|
const newCoord = [startLngLat.lng, startLngLat.lat];
|
|
151
156
|
const newCoords = addVertex(feature, after, newCoord);
|
|
152
|
-
store.updateFeature(featureId, {
|
|
157
|
+
store.updateFeature(featureId, { geometry: geometryFromCoordinates(feature.type, newCoords) });
|
|
153
158
|
// The added vertex is afterIndex + 1 in the same part and same ring
|
|
154
159
|
const newVertexRef = { ...after, index: after.index + 1 };
|
|
155
160
|
// Continue as a move operation on the added vertex
|
|
@@ -32,18 +32,25 @@ export class SelectModeDragHandler {
|
|
|
32
32
|
value: new IntermediateWrites()
|
|
33
33
|
});
|
|
34
34
|
/**
|
|
35
|
-
* The features announced by drag
|
|
35
|
+
* The features announced by drag.started, while drag.ended has not been sent for them
|
|
36
36
|
*
|
|
37
|
-
* drag
|
|
38
|
-
*
|
|
37
|
+
* drag.ended always follows, with the same IDs, whether the drag is committed or aborted, so
|
|
38
|
+
* a listener that opens a scope on drag.started always closes it.
|
|
39
39
|
*/
|
|
40
|
-
Object.defineProperty(this, "
|
|
40
|
+
Object.defineProperty(this, "announcedFeatureIds", {
|
|
41
41
|
enumerable: true,
|
|
42
42
|
configurable: true,
|
|
43
43
|
writable: true,
|
|
44
44
|
value: null
|
|
45
45
|
});
|
|
46
|
-
|
|
46
|
+
/** What the announced drag grabbed, and the emitter its end is announced on */
|
|
47
|
+
Object.defineProperty(this, "announcedKind", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
configurable: true,
|
|
50
|
+
writable: true,
|
|
51
|
+
value: null
|
|
52
|
+
});
|
|
53
|
+
Object.defineProperty(this, "announcer", {
|
|
47
54
|
enumerable: true,
|
|
48
55
|
configurable: true,
|
|
49
56
|
writable: true,
|
|
@@ -64,7 +71,7 @@ export class SelectModeDragHandler {
|
|
|
64
71
|
* Start a drag operation
|
|
65
72
|
*/
|
|
66
73
|
startDrag(hitResult, event, context, bbox) {
|
|
67
|
-
const { store
|
|
74
|
+
const { store } = context;
|
|
68
75
|
this.scope = context.selectionScope;
|
|
69
76
|
// Selection-independent auxiliary handles (getGlobalHandles) have no feature they sit on,
|
|
70
77
|
// so they cannot pass the selection-bound gates (existence of a selection / bbox / feature
|
|
@@ -111,14 +118,12 @@ export class SelectModeDragHandler {
|
|
|
111
118
|
if (!auxiliaryDrag)
|
|
112
119
|
return;
|
|
113
120
|
}
|
|
114
|
-
//
|
|
121
|
+
// Announce that the drag has started. Auxiliary handles are excluded: core writes no
|
|
115
122
|
// intermediate updates to the Store and the provider commits through its own transaction, so
|
|
116
|
-
// putting them on the editing scope of drag
|
|
123
|
+
// putting them on the editing scope of drag.started / drag.ended would
|
|
117
124
|
// have the record of the commit transaction swallowed by that scope.
|
|
118
125
|
if (hitResult.type !== 'auxiliary') {
|
|
119
|
-
|
|
120
|
-
this.hookedFeatureIds = [...selectedIds];
|
|
121
|
-
this.hookPluginManager = pluginManager ?? null;
|
|
126
|
+
this.announce(hitResult.type, [...selectedIds], context.eventEmitter);
|
|
122
127
|
}
|
|
123
128
|
// Disable MapLibre's map dragging
|
|
124
129
|
context.map.dragPan.disable();
|
|
@@ -192,7 +197,7 @@ export class SelectModeDragHandler {
|
|
|
192
197
|
* the last move / start event that was forwarded is used)
|
|
193
198
|
*/
|
|
194
199
|
endDrag(context, event) {
|
|
195
|
-
const { store
|
|
200
|
+
const { store } = context;
|
|
196
201
|
const wasAuxiliary = this.operation?.type === 'auxiliary';
|
|
197
202
|
// The drag always ends: whatever the delegate, the commit or a plugin throws, map dragging
|
|
198
203
|
// is re-enabled and the drag state is cleared, so that the UI never stays stuck in a drag.
|
|
@@ -201,13 +206,13 @@ export class SelectModeDragHandler {
|
|
|
201
206
|
// nothing to the Store)
|
|
202
207
|
this.operation?.finish?.(event);
|
|
203
208
|
// Commit the intermediate updates made during the drag in a single transaction before
|
|
204
|
-
//
|
|
205
|
-
// do nothing.
|
|
209
|
+
// announcing drag.ended (listeners see the state after the commit). If no feature was
|
|
210
|
+
// touched, do nothing.
|
|
206
211
|
this.writes.commit(store);
|
|
207
|
-
//
|
|
212
|
+
// Announce that the drag has ended (paired with drag.started, with the same IDs even
|
|
208
213
|
// when the selection changed during the drag; auxiliary handles are excluded)
|
|
209
214
|
if (!wasAuxiliary)
|
|
210
|
-
this.
|
|
215
|
+
this.announceEnd(false);
|
|
211
216
|
}
|
|
212
217
|
finally {
|
|
213
218
|
// Re-enable MapLibre's map dragging
|
|
@@ -231,19 +236,33 @@ export class SelectModeDragHandler {
|
|
|
231
236
|
this.operation = null;
|
|
232
237
|
this.writes.discard(store);
|
|
233
238
|
store?.setFollowedVertices?.(null);
|
|
234
|
-
// An aborted drag still closes what drag
|
|
235
|
-
this.
|
|
239
|
+
// An aborted drag still closes what drag.started opened (after the features are restored)
|
|
240
|
+
this.announceEnd(true);
|
|
236
241
|
}
|
|
237
242
|
/**
|
|
238
|
-
* Sends the drag
|
|
243
|
+
* Sends the drag.ended that pairs with the drag.started of the current drag, once
|
|
239
244
|
*/
|
|
240
|
-
|
|
241
|
-
const featureIds = this.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
+
announceEnd(cancelled) {
|
|
246
|
+
const featureIds = this.announcedFeatureIds;
|
|
247
|
+
const kind = this.announcedKind;
|
|
248
|
+
const announcer = this.announcer;
|
|
249
|
+
this.announcedFeatureIds = null;
|
|
250
|
+
this.announcedKind = null;
|
|
251
|
+
this.announcer = null;
|
|
252
|
+
if (!featureIds || !kind)
|
|
245
253
|
return;
|
|
246
|
-
|
|
254
|
+
announcer?.emit('drag.ended', { kind, featureIds: [...featureIds], cancelled });
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Announces the start of a drag on the emitter of the instance; its end is announced with
|
|
258
|
+
* the same IDs, committed or cancelled
|
|
259
|
+
*/
|
|
260
|
+
announce(type, featureIds, emitter) {
|
|
261
|
+
const kind = type === 'move' ? 'feature' : type === 'vertex' || type === 'midpoint' ? 'vertex' : 'handle';
|
|
262
|
+
this.announcedFeatureIds = [...featureIds];
|
|
263
|
+
this.announcedKind = kind;
|
|
264
|
+
this.announcer = emitter ?? null;
|
|
265
|
+
emitter?.emit('drag.started', { kind, featureIds: [...featureIds] });
|
|
247
266
|
}
|
|
248
267
|
/**
|
|
249
268
|
* Whether a drag operation is active
|
|
@@ -59,19 +59,19 @@ export class SelectMode {
|
|
|
59
59
|
for (const id of editingIds) {
|
|
60
60
|
const feature = context.store.getFeature(id);
|
|
61
61
|
if (feature) {
|
|
62
|
-
context.
|
|
62
|
+
context.plugins?.notifyFeatureCreated(feature.id);
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
context.store.endEditing([...editingIds]);
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
onStop() {
|
|
69
|
-
const { store, map,
|
|
70
|
-
|
|
69
|
+
const { store, map, plugins } = __classPrivateFieldGet(this, _SelectMode_context, "f");
|
|
70
|
+
plugins?.finishPluginInteraction();
|
|
71
71
|
__classPrivateFieldGet(this, _SelectMode_dragHandler, "f").reset(store);
|
|
72
72
|
if (store.getBoxSelection())
|
|
73
73
|
store.setBoxSelection(null);
|
|
74
|
-
if (store.
|
|
74
|
+
if (store.getVertexSelection())
|
|
75
75
|
store.setSelectedVertices(null);
|
|
76
76
|
if (!map.dragPan.isEnabled())
|
|
77
77
|
map.dragPan.enable();
|
|
@@ -102,10 +102,10 @@ export class SelectMode {
|
|
|
102
102
|
* @returns true when there was a hit (the event is consumed)
|
|
103
103
|
*/
|
|
104
104
|
onMouseDown(event) {
|
|
105
|
-
const {
|
|
105
|
+
const { plugins, map, store } = __classPrivateFieldGet(this, _SelectMode_context, "f");
|
|
106
106
|
// During a plugin interaction: consume clicks inside the container
|
|
107
|
-
if (
|
|
108
|
-
const container =
|
|
107
|
+
if (plugins?.isPluginInteracting()) {
|
|
108
|
+
const container = plugins.getPluginInteractionContainer();
|
|
109
109
|
if (container) {
|
|
110
110
|
const target = event.originalEvent.target;
|
|
111
111
|
if (container.contains(target))
|
|
@@ -194,7 +194,7 @@ export class SelectMode {
|
|
|
194
194
|
// Drag
|
|
195
195
|
// ============================================================================
|
|
196
196
|
onDragStart(event) {
|
|
197
|
-
if (__classPrivateFieldGet(this, _SelectMode_context, "f").
|
|
197
|
+
if (__classPrivateFieldGet(this, _SelectMode_context, "f").plugins?.isPluginInteracting())
|
|
198
198
|
return;
|
|
199
199
|
const { store, map } = __classPrivateFieldGet(this, _SelectMode_context, "f");
|
|
200
200
|
// Group / layer selections are also resolved to their members (so dragging the selection box
|
|
@@ -255,7 +255,7 @@ export class SelectMode {
|
|
|
255
255
|
return;
|
|
256
256
|
const hitFeatureId = top.feature.id;
|
|
257
257
|
if (!selectedIds.includes(hitFeatureId)) {
|
|
258
|
-
const filtered = __classPrivateFieldGet(this, _SelectMode_context, "f").
|
|
258
|
+
const filtered = __classPrivateFieldGet(this, _SelectMode_context, "f").plugins?.filterSelectionCandidates([hitFeatureId]) ?? [
|
|
259
259
|
hitFeatureId,
|
|
260
260
|
];
|
|
261
261
|
if (filtered.length === 0)
|
|
@@ -268,7 +268,7 @@ export class SelectMode {
|
|
|
268
268
|
__classPrivateFieldGet(this, _SelectMode_dragHandler, "f").startDrag(moveHit, event, __classPrivateFieldGet(this, _SelectMode_context, "f"), bbox);
|
|
269
269
|
}
|
|
270
270
|
onDragMove(event) {
|
|
271
|
-
const { store, map,
|
|
271
|
+
const { store, map, plugins } = __classPrivateFieldGet(this, _SelectMode_context, "f");
|
|
272
272
|
const boxSelection = store.getBoxSelection();
|
|
273
273
|
// Update the box selection
|
|
274
274
|
if (boxSelection) {
|
|
@@ -278,7 +278,7 @@ export class SelectMode {
|
|
|
278
278
|
store.setBoxSelection(updatedBoxSelection);
|
|
279
279
|
// Live selection preview (a frame that selects the same features changes nothing)
|
|
280
280
|
const hitIds = queryFeaturesInBox(updatedBoxSelection, __classPrivateFieldGet(this, _SelectMode_context, "f"));
|
|
281
|
-
const filtered = hitIds.length > 0 ? (
|
|
281
|
+
const filtered = hitIds.length > 0 ? (plugins?.filterSelectionCandidates(hitIds) ?? hitIds) : hitIds;
|
|
282
282
|
if (!selectsExactly(store.getSelection(), filtered)) {
|
|
283
283
|
if (filtered.length === 0) {
|
|
284
284
|
store.setSelection(null, []);
|
|
@@ -294,12 +294,12 @@ export class SelectMode {
|
|
|
294
294
|
}
|
|
295
295
|
}
|
|
296
296
|
onDragEnd(event) {
|
|
297
|
-
const { store, map,
|
|
297
|
+
const { store, map, plugins } = __classPrivateFieldGet(this, _SelectMode_context, "f");
|
|
298
298
|
const boxSelection = store.getBoxSelection();
|
|
299
299
|
// Commit the box selection
|
|
300
300
|
if (boxSelection) {
|
|
301
301
|
const hitIds = queryFeaturesInBox(boxSelection, __classPrivateFieldGet(this, _SelectMode_context, "f"));
|
|
302
|
-
const filtered = hitIds.length > 0 ? (
|
|
302
|
+
const filtered = hitIds.length > 0 ? (plugins?.filterSelectionCandidates(hitIds) ?? hitIds) : hitIds;
|
|
303
303
|
if (filtered.length === 0) {
|
|
304
304
|
store.setSelection(null, []);
|
|
305
305
|
}
|
|
@@ -345,11 +345,11 @@ export class SelectMode {
|
|
|
345
345
|
// Keyboard / MouseMove
|
|
346
346
|
// ============================================================================
|
|
347
347
|
onKeyDown(event) {
|
|
348
|
-
const {
|
|
348
|
+
const { plugins, store } = __classPrivateFieldGet(this, _SelectMode_context, "f");
|
|
349
349
|
// Skip destructive key operations during a plugin interaction
|
|
350
|
-
if (
|
|
350
|
+
if (plugins?.isPluginInteracting()) {
|
|
351
351
|
if (event.key === 'Escape') {
|
|
352
|
-
|
|
352
|
+
plugins.cancelPluginInteraction();
|
|
353
353
|
}
|
|
354
354
|
return;
|
|
355
355
|
}
|
|
@@ -388,7 +388,7 @@ export class SelectMode {
|
|
|
388
388
|
}
|
|
389
389
|
}
|
|
390
390
|
onMouseMove(event) {
|
|
391
|
-
if (__classPrivateFieldGet(this, _SelectMode_dragHandler, "f").isActive() || __classPrivateFieldGet(this, _SelectMode_context, "f").
|
|
391
|
+
if (__classPrivateFieldGet(this, _SelectMode_dragHandler, "f").isActive() || __classPrivateFieldGet(this, _SelectMode_context, "f").plugins?.isPluginInteracting()) {
|
|
392
392
|
return;
|
|
393
393
|
}
|
|
394
394
|
updateCursorForSelection(event, __classPrivateFieldGet(this, _SelectMode_context, "f"), __classPrivateFieldGet(this, _SelectMode_config, "f"));
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { EngineModeContext } from '../handler.js';
|
|
2
2
|
/**
|
|
3
3
|
* Handling of the group shortcut (Cmd+G / Ctrl+G).
|
|
4
4
|
*
|
|
5
5
|
* The behavior is identical to the API's groupSelection (the key, the menu and the API place the
|
|
6
6
|
* new group at the same position).
|
|
7
7
|
*/
|
|
8
|
-
export declare function handleGroupShortcut(context:
|
|
8
|
+
export declare function handleGroupShortcut(context: EngineModeContext): void;
|
|
9
9
|
/**
|
|
10
10
|
* Handling of the ungroup shortcut (Shift+Cmd+G / Shift+Ctrl+G).
|
|
11
11
|
*
|
|
@@ -13,12 +13,12 @@ export declare function handleGroupShortcut(context: ModeContext): void;
|
|
|
13
13
|
* consistent): a group selection is dissolved, and for a member feature selection only that
|
|
14
14
|
* member leaves.
|
|
15
15
|
*/
|
|
16
|
-
export declare function handleUngroupShortcut(context:
|
|
16
|
+
export declare function handleUngroupShortcut(context: EngineModeContext): void;
|
|
17
17
|
/**
|
|
18
|
-
* Handling of the Delete / Backspace key: deletes what is selected,
|
|
19
|
-
*
|
|
18
|
+
* Handling of the Delete / Backspace key: deletes what is selected (vertices, features, groups
|
|
19
|
+
* or layers; locked items are kept) with `deleteSelection` of `operations/`.
|
|
20
20
|
*/
|
|
21
|
-
export declare function handleDeleteShortcut(context:
|
|
21
|
+
export declare function handleDeleteShortcut(context: EngineModeContext): void;
|
|
22
22
|
/**
|
|
23
23
|
* Handling of the arrow keys: moves the selected features by a few pixels on the screen
|
|
24
24
|
*
|
|
@@ -28,7 +28,7 @@ export declare function handleDeleteShortcut(context: ModeContext): void;
|
|
|
28
28
|
* @returns whether the key was used (a selection was moved); otherwise the key is left to
|
|
29
29
|
* the map (MapLibre pans with it)
|
|
30
30
|
*/
|
|
31
|
-
export declare function handleNudgeShortcut(context:
|
|
31
|
+
export declare function handleNudgeShortcut(context: EngineModeContext, key: string, modifiers: {
|
|
32
32
|
shift: boolean;
|
|
33
33
|
ctrl: boolean;
|
|
34
34
|
alt: boolean;
|
|
@@ -37,4 +37,4 @@ export declare function handleNudgeShortcut(context: ModeContext, key: string, m
|
|
|
37
37
|
/**
|
|
38
38
|
* Handling of the Escape key
|
|
39
39
|
*/
|
|
40
|
-
export declare function handleEscapeShortcut(context:
|
|
40
|
+
export declare function handleEscapeShortcut(context: EngineModeContext): void;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { groupSelection, ungroupSelection } from '../../operations/layer-operations.js';
|
|
9
9
|
import { deleteSelection } from '../../operations/selection-operations.js';
|
|
10
|
-
import { mapCoordinatesDeep } from '../../shared/utils/coordinates.js';
|
|
10
|
+
import { coordinatesOf, geometryFromCoordinates, mapCoordinatesDeep, } from '../../shared/utils/coordinates.js';
|
|
11
11
|
import { isInteractionBlocked } from '../../store/lock.js';
|
|
12
12
|
import { getSelectedFeatureIds } from '../../view/ui/helper.js';
|
|
13
13
|
/** The distance an arrow key moves the selection (pixels; with Shift, NUDGE_LARGE) */
|
|
@@ -46,8 +46,8 @@ export function handleUngroupShortcut(context) {
|
|
|
46
46
|
ungroupSelection(store);
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
* Handling of the Delete / Backspace key: deletes what is selected,
|
|
50
|
-
*
|
|
49
|
+
* Handling of the Delete / Backspace key: deletes what is selected (vertices, features, groups
|
|
50
|
+
* or layers; locked items are kept) with `deleteSelection` of `operations/`.
|
|
51
51
|
*/
|
|
52
52
|
export function handleDeleteShortcut(context) {
|
|
53
53
|
deleteSelection(context.store);
|
|
@@ -75,7 +75,7 @@ export function handleNudgeShortcut(context, key, modifiers) {
|
|
|
75
75
|
return false;
|
|
76
76
|
// One offset in degrees for every feature, taken at a point of the selection, so the
|
|
77
77
|
// features keep their relative placement (the same translation as a move drag)
|
|
78
|
-
const reference = firstCoordinate(features[0]
|
|
78
|
+
const reference = firstCoordinate(coordinatesOf(features[0]));
|
|
79
79
|
if (!reference)
|
|
80
80
|
return false;
|
|
81
81
|
const step = modifiers.shift ? NUDGE_LARGE : NUDGE_SMALL;
|
|
@@ -85,8 +85,10 @@ export function handleNudgeShortcut(context, key, modifiers) {
|
|
|
85
85
|
const dy = to.lat - reference[1];
|
|
86
86
|
store.transact(() => {
|
|
87
87
|
for (const feature of features) {
|
|
88
|
-
const coordinates = mapCoordinatesDeep(feature
|
|
89
|
-
store.updateFeature(feature.id, {
|
|
88
|
+
const coordinates = mapCoordinatesDeep(coordinatesOf(feature), (c) => [c[0] + dx, c[1] + dy]);
|
|
89
|
+
store.updateFeature(feature.id, {
|
|
90
|
+
geometry: geometryFromCoordinates(feature.type, coordinates),
|
|
91
|
+
});
|
|
90
92
|
}
|
|
91
93
|
});
|
|
92
94
|
return true;
|
|
@@ -118,7 +120,7 @@ export function handleEscapeShortcut(context) {
|
|
|
118
120
|
return;
|
|
119
121
|
}
|
|
120
122
|
// Clear the vertex selection when vertices are selected
|
|
121
|
-
const selectedVertices = store.
|
|
123
|
+
const selectedVertices = store.getVertexSelection();
|
|
122
124
|
if (selectedVertices) {
|
|
123
125
|
store.setSelectedVertices(null);
|
|
124
126
|
return;
|