@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
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import { attachSlotLayers } from './view/layer/attach.js';
|
|
24
|
-
import { createCustomLayer } from './view/layer/index.js';
|
|
25
|
-
import { DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds } from './view/viewport.js';
|
|
3
|
+
import { createDisplayInteractions } from '../../dataset/interaction.js';
|
|
4
|
+
import { createDatasetManager } from '../../dataset/manager.js';
|
|
5
|
+
import { effectiveZoomForCamera } from '../../dataset/thinning.js';
|
|
6
|
+
import { TriangulationScheduler } from '../../dataset/triangulation.js';
|
|
7
|
+
import { toleranceDegrees } from '../../dispatcher/hit-test/local-frame.js';
|
|
8
|
+
import { createTopmostHitTester } from '../../dispatcher/hit-test/topmost.js';
|
|
9
|
+
import { createInputRouter } from '../../dispatcher/input-router.js';
|
|
10
|
+
import { createInputNormalizer } from '../../dispatcher/normalizer.js';
|
|
11
|
+
import { DrawImageMode, drawCircleMode, drawFreehandMode, drawLineMode, drawPointMode, drawPolygonMode, } from '../../modes/draw/index.js';
|
|
12
|
+
import { SelectMode } from '../../modes/select/mode.js';
|
|
13
|
+
import { SnapIndicatorRenderer } from '../../snapping/indicator.js';
|
|
14
|
+
import { createDisplaySnapProviders } from '../../snapping/providers/display.js';
|
|
15
|
+
import { createRenderCoordinator } from '../../view/coordinator.js';
|
|
16
|
+
import { createFeatureCompanionRegistry } from '../../view/feature-companion.js';
|
|
17
|
+
import { attachSlotLayers } from '../../view/layer/attach.js';
|
|
18
|
+
import { createCustomLayer } from '../../view/layer/index.js';
|
|
19
|
+
import { DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds, } from '../../view/viewport.js';
|
|
20
|
+
import { createContext } from './engine-context.js';
|
|
21
|
+
import { connectEngineEvents, connectStoreEvents, createEventHub } from './events.js';
|
|
22
|
+
import { createExtensionHost } from './extension-host.js';
|
|
26
23
|
/**
|
|
27
24
|
* The releases of one draw instance, run in the reverse order of the acquisitions
|
|
28
25
|
*
|
|
@@ -60,37 +57,11 @@ function createTeardown() {
|
|
|
60
57
|
};
|
|
61
58
|
}
|
|
62
59
|
/**
|
|
63
|
-
*
|
|
64
|
-
* their input handling.
|
|
60
|
+
* Builds the engine of a draw instance on a map
|
|
65
61
|
*
|
|
66
|
-
*
|
|
67
|
-
* as the style accepts layers, and added again after `setStyle`. Unless
|
|
68
|
-
* `initDefaultLayer: false` is given, the document starts with one empty layer. The instance
|
|
69
|
-
* turns off the map's box zoom (Shift + drag selects features instead) and gives it back on
|
|
70
|
-
* {@link MapLibreGLDraw.destroy}. Several instances can share a page, each on its own map.
|
|
71
|
-
*
|
|
72
|
-
* @param map the MapLibre map to draw on
|
|
73
|
-
* @param options the options; every one can be omitted (see {@link Options})
|
|
74
|
-
* @returns the draw instance
|
|
75
|
-
*
|
|
76
|
-
* @example
|
|
77
|
-
* ```typescript
|
|
78
|
-
* import { createMapLibreGLDraw } from '@sakuzu/maplibre-gl-draw';
|
|
79
|
-
* import * as maplibregl from 'maplibre-gl';
|
|
80
|
-
*
|
|
81
|
-
* const map = new maplibregl.Map({
|
|
82
|
-
* container: 'map',
|
|
83
|
-
* style: 'https://demotiles.maplibre.org/style.json',
|
|
84
|
-
* center: [139.767, 35.681],
|
|
85
|
-
* zoom: 12,
|
|
86
|
-
* });
|
|
87
|
-
* const draw = createMapLibreGLDraw(map, { defaultMode: 'select' });
|
|
88
|
-
*
|
|
89
|
-
* draw.setMode('draw_polygon');
|
|
90
|
-
* draw.on('draw.feature.create', ({ feature }) => console.log('Created', feature.id));
|
|
91
|
-
* ```
|
|
62
|
+
* @internal
|
|
92
63
|
*/
|
|
93
|
-
export function
|
|
64
|
+
export function createEngine(map, options = {}, build = {}) {
|
|
94
65
|
// 1. Create the context
|
|
95
66
|
const context = createContext(map, options);
|
|
96
67
|
const { store, modeManager, eventEmitter, spatialIndex, hitTestService, featureStyle, selectionStyle, renderingConfig, topology, trace, snapService, pixelRatioSource, } = context;
|
|
@@ -101,8 +72,8 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
101
72
|
context.selectionScope.clear();
|
|
102
73
|
context.snapTargets.clear();
|
|
103
74
|
});
|
|
104
|
-
|
|
105
|
-
|
|
75
|
+
const triangulationScheduler = new TriangulationScheduler();
|
|
76
|
+
triangulationScheduler.setSlicing(renderingConfig.timeSlicing !== false);
|
|
106
77
|
// 2.5 Create the manager of the datasets.
|
|
107
78
|
// Culls with the same expanded viewport as the rendering loop, and calls the
|
|
108
79
|
// provider on a change of the displayed range (moveend). It never touches the
|
|
@@ -133,12 +104,12 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
133
104
|
// Rendering that draws complete frames (printing, thumbnails) turns off time
|
|
134
105
|
// slicing and triangulates on the spot: setting the threshold to infinity
|
|
135
106
|
// puts every polygon on the synchronous path
|
|
136
|
-
triangulationScheduler
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
//
|
|
107
|
+
triangulationScheduler,
|
|
108
|
+
// Read when a dataset is added, so a change at runtime applies to the datasets added after
|
|
109
|
+
get timeSlicing() {
|
|
110
|
+
return renderingConfig.timeSlicing;
|
|
111
|
+
},
|
|
112
|
+
// Announce the datasets that come and go and their reordering
|
|
142
113
|
onDatasetAdd: (datasetId) => eventEmitter.emit('dataset.add', { datasetId }),
|
|
143
114
|
onDatasetRemove: (datasetId) => eventEmitter.emit('dataset.remove', { datasetId }),
|
|
144
115
|
onDatasetsReorder: (order) => eventEmitter.emit('dataset.reorder', { order }),
|
|
@@ -158,7 +129,7 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
158
129
|
// own Store.
|
|
159
130
|
const featureCompanions = createFeatureCompanionRegistry();
|
|
160
131
|
const unproject = (p) => map.unproject([p.x, p.y]);
|
|
161
|
-
const
|
|
132
|
+
const topmostDeps = {
|
|
162
133
|
store,
|
|
163
134
|
hitTestService,
|
|
164
135
|
unproject,
|
|
@@ -173,9 +144,13 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
173
144
|
return { x: projected.x, y: projected.y };
|
|
174
145
|
},
|
|
175
146
|
getZoom: () => map.getZoom(),
|
|
176
|
-
|
|
147
|
+
// Read at each hit, so a change of the option applies at once
|
|
148
|
+
get clickTolerancePx() {
|
|
149
|
+
return context.options.clickTolerance;
|
|
150
|
+
},
|
|
177
151
|
companions: featureCompanions,
|
|
178
|
-
}
|
|
152
|
+
};
|
|
153
|
+
const hitTestTopmost = createTopmostHitTester(topmostDeps);
|
|
179
154
|
// 2.7 Snapping to data (datasets).
|
|
180
155
|
// Adds the vertices, edges and intersections of the displayed datasets as
|
|
181
156
|
// snapping candidates. The data itself is only read, and whether it is
|
|
@@ -207,16 +182,15 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
207
182
|
// this instance (the modes hit test against the same scope)
|
|
208
183
|
selectionScope: context.selectionScope,
|
|
209
184
|
// The separators of the stacking order (external entries) and the frames.
|
|
210
|
-
// Additions and removals of separators are announced
|
|
211
|
-
// (draw.renderslots.change)
|
|
185
|
+
// Additions and removals of separators are announced (layerStack.changed)
|
|
212
186
|
isExternalEntry: context.isExternalEntry,
|
|
213
|
-
onSlotsChange: (slots) => eventEmitter.emit('
|
|
214
|
-
// The failure to load the image of an Image feature (
|
|
187
|
+
onSlotsChange: (slots) => eventEmitter.emit('layerStack.change', { slots }),
|
|
188
|
+
// The failure to load the image of an Image feature (an error event)
|
|
215
189
|
onImageError: (featureId, error) => eventEmitter.emit('load.error', { source: 'image', featureId, error }),
|
|
216
190
|
});
|
|
217
191
|
// 3.5 Add the snapping indicator as a built-in overlay
|
|
218
192
|
// (it comes in front of the selection UI because order: 'overlay')
|
|
219
|
-
customLayer.
|
|
193
|
+
customLayer.addOverlay(new SnapIndicatorRenderer({ snapService, look: context.snapIndicator }));
|
|
220
194
|
// Repaint when the snapping result changes (the Store does not change, so
|
|
221
195
|
// the RenderCoordinator does not run)
|
|
222
196
|
const repaintOnSnapChange = () => map.triggerRepaint();
|
|
@@ -227,23 +201,39 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
227
201
|
const renderCoordinator = createRenderCoordinator({ map, store });
|
|
228
202
|
// 5. Set up the ModeManager
|
|
229
203
|
modeManager.registerMode('select', () => new SelectMode());
|
|
230
|
-
modeManager.registerMode('draw_point', () => new DrawPointMode());
|
|
231
|
-
modeManager.registerMode('draw_line', () => new DrawLineMode());
|
|
232
|
-
modeManager.registerMode('draw_polygon', () => new DrawPolygonMode());
|
|
233
204
|
modeManager.registerMode('draw_image', () => new DrawImageMode());
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
205
|
+
// 6.5 Create the host of the extensions of the extension contract, and add the built-in
|
|
206
|
+
// modes written to that contract through it
|
|
207
|
+
const extensions = createExtensionHost({
|
|
208
|
+
map,
|
|
209
|
+
context,
|
|
210
|
+
customLayer,
|
|
211
|
+
modeManager,
|
|
212
|
+
featureCompanions,
|
|
213
|
+
hitTestTopmost,
|
|
214
|
+
hitTestTopmostWith: (tolerancePx) => createTopmostHitTester({
|
|
215
|
+
...topmostDeps,
|
|
216
|
+
toleranceLngLat: (point) => toleranceDegrees(unproject, point, tolerancePx),
|
|
217
|
+
clickTolerancePx: tolerancePx,
|
|
218
|
+
}),
|
|
219
|
+
listTraceRows: (bbox) => snapService.isDatasetsEnabled()
|
|
220
|
+
? displaySnap.queryRows(bbox).map(({ datasetId, feature }) => ({
|
|
221
|
+
datasetId,
|
|
222
|
+
rowIndex: datasets.get(datasetId)?.findRow(feature.id) ?? -1,
|
|
223
|
+
feature,
|
|
224
|
+
}))
|
|
225
|
+
: [],
|
|
226
|
+
});
|
|
227
|
+
extensions.collections.modes.addMany([
|
|
228
|
+
{ name: 'draw_point', factory: drawPointMode },
|
|
229
|
+
{ name: 'draw_line', factory: drawLineMode },
|
|
230
|
+
{ name: 'draw_polygon', factory: drawPolygonMode },
|
|
231
|
+
{ name: 'draw_circle', factory: drawCircleMode },
|
|
232
|
+
{ name: 'draw_freehand', factory: drawFreehandMode },
|
|
233
|
+
]);
|
|
234
|
+
// The position of the click being handled, for what a click causes
|
|
235
|
+
let clickPosition = null;
|
|
236
|
+
// 7. The context of the modes of the engine (select and image)
|
|
247
237
|
const modeContext = {
|
|
248
238
|
map,
|
|
249
239
|
store,
|
|
@@ -258,69 +248,20 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
258
248
|
trace,
|
|
259
249
|
autoNameGenerator: context.autoNameGenerator,
|
|
260
250
|
boxSelectionRegistry: context.boxSelectionRegistry,
|
|
261
|
-
|
|
251
|
+
plugins: extensions.interactions,
|
|
262
252
|
generateFeatureId: context.generateFeatureId,
|
|
263
253
|
getCurrentLayerId: context.getWritableLayerId,
|
|
264
|
-
|
|
254
|
+
// Read when a feature is committed, so a change of the option applies at once
|
|
255
|
+
get scaleWithZoom() {
|
|
256
|
+
return context.options.scaleWithZoom;
|
|
257
|
+
},
|
|
265
258
|
setMode: (mode) => modeManager.setMode(mode),
|
|
259
|
+
getClickPosition: () => clickPosition,
|
|
266
260
|
// The key that temporarily disables shared vertices is shared with the
|
|
267
261
|
// disableKey of the snapping
|
|
268
262
|
snapOptions: context.snapOptions,
|
|
269
|
-
// The only opening through which a mode learns about snapping (the
|
|
270
|
-
// SnapService itself is not passed)
|
|
271
|
-
getSnapResult: () => snapService?.getResult() ?? null,
|
|
272
|
-
// The opening that resolves a snap target on data into a feature (read by
|
|
273
|
-
// the tracing)
|
|
274
|
-
getDatasetFeature: (datasetId, featureId) => displaySnap.getFeature(datasetId, featureId),
|
|
275
|
-
// The features of the data put on the edge graph of the tracing (empty
|
|
276
|
-
// when snapping to data is disabled)
|
|
277
|
-
getDatasetTraceFeatures: (bbox) => snapService.isDatasetsEnabled() ? displaySnap.queryFeatures(bbox) : [],
|
|
278
263
|
};
|
|
279
264
|
modeManager.setContext(modeContext);
|
|
280
|
-
// 7. Initialize the PluginContext.
|
|
281
|
-
// Helper function that looks up which layer an item belongs to
|
|
282
|
-
const findLayerForItem = (itemId) => {
|
|
283
|
-
for (const layer of store.getAllLayers()) {
|
|
284
|
-
if (layer.order.includes(itemId)) {
|
|
285
|
-
return layer.id;
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
return undefined;
|
|
289
|
-
};
|
|
290
|
-
// Helper function that looks up which group a feature belongs to
|
|
291
|
-
const findGroupForFeature = (featureId) => {
|
|
292
|
-
for (const group of store.getAllGroups()) {
|
|
293
|
-
if (group.featureIds.includes(featureId)) {
|
|
294
|
-
return group.id;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return undefined;
|
|
298
|
-
};
|
|
299
|
-
// Initialize the PluginContext.
|
|
300
|
-
// The implementations of all PluginContext methods are gathered in
|
|
301
|
-
// createPluginContext.
|
|
302
|
-
// The draw instance is referenced lazily (through the closure, to cope
|
|
303
|
-
// with the circular initialization).
|
|
304
|
-
let drawApi = null;
|
|
305
|
-
pluginContext = createPluginContext({
|
|
306
|
-
store,
|
|
307
|
-
eventEmitter,
|
|
308
|
-
autoNameGenerator: context.autoNameGenerator,
|
|
309
|
-
spatialIndex,
|
|
310
|
-
getActiveLayerId: context.getActiveLayerId,
|
|
311
|
-
findLayerForItem,
|
|
312
|
-
findGroupForFeature,
|
|
313
|
-
getModeManager: () => modeManager,
|
|
314
|
-
// The anchors and the selection extents of this instance (never another instance's)
|
|
315
|
-
terrain: customLayer.getTerrainContext(),
|
|
316
|
-
selectionExtensions: context.selectionScope.extensions,
|
|
317
|
-
getDraw: () => {
|
|
318
|
-
if (!drawApi) {
|
|
319
|
-
throw new Error('MapLibreGLDraw not initialized');
|
|
320
|
-
}
|
|
321
|
-
return drawApi;
|
|
322
|
-
},
|
|
323
|
-
});
|
|
324
265
|
// 7. Create the InputNormalizer and the InputRouter.
|
|
325
266
|
// The hit testing of the datasets comes in as an
|
|
326
267
|
// interception of the InputRouter.
|
|
@@ -343,23 +284,36 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
343
284
|
modeManager,
|
|
344
285
|
context: modeContext,
|
|
345
286
|
map,
|
|
346
|
-
pluginManager,
|
|
347
287
|
displayInteractions,
|
|
348
288
|
// Emit a click in select mode as a public event (draw.map.click)
|
|
349
289
|
notifyMapClick: (payload) => eventEmitter.emit('map.click', payload),
|
|
290
|
+
trackClick: (lngLat) => {
|
|
291
|
+
clickPosition = lngLat;
|
|
292
|
+
},
|
|
350
293
|
snapService,
|
|
294
|
+
extensionInput: extensions.input,
|
|
295
|
+
});
|
|
296
|
+
// 8. Set up
|
|
297
|
+
// The events of the instance follow the Store and the signals of the engine
|
|
298
|
+
const events = createEventHub();
|
|
299
|
+
const stopStoreEvents = connectStoreEvents(events, store);
|
|
300
|
+
const stopEngineEvents = connectEngineEvents(events, eventEmitter, {
|
|
301
|
+
hitAt: (point) => extensions.hitAt(point),
|
|
302
|
+
});
|
|
303
|
+
teardown.add(() => {
|
|
304
|
+
stopStoreEvents();
|
|
305
|
+
stopEngineEvents();
|
|
306
|
+
events.clear();
|
|
351
307
|
});
|
|
352
|
-
// 7. Set up
|
|
353
|
-
eventBridge.start();
|
|
354
308
|
renderCoordinator.start();
|
|
355
|
-
// Keep the
|
|
356
|
-
// accepts layers, whenever the draw instance is created (before, during or
|
|
357
|
-
//
|
|
358
|
-
//
|
|
359
|
-
// which receives 'draw.renderslots.change'
|
|
309
|
+
// Keep the frames of the stacking order on the map. They are added as soon as the style
|
|
310
|
+
// accepts layers, whenever the draw instance is created (before, during or after the map
|
|
311
|
+
// loads), and they are restored after a style change. The native layers of the separators
|
|
312
|
+
// are placed between the frames by the host, which receives layerStack.changed
|
|
360
313
|
teardown.add(attachSlotLayers(map, () => customLayer.getSlotLayers()));
|
|
361
314
|
inputNormalizer.attach();
|
|
362
315
|
inputRouter.start();
|
|
316
|
+
extensions.start();
|
|
363
317
|
modeManager.start();
|
|
364
318
|
// Disable the boxZoom of MapLibre (because Shift + drag is used for box
|
|
365
319
|
// selection), and give it back in the state it was found in: the host or another draw
|
|
@@ -373,35 +327,49 @@ export function createMapLibreGLDraw(map, options = {}) {
|
|
|
373
327
|
else
|
|
374
328
|
map.boxZoom.disable();
|
|
375
329
|
});
|
|
376
|
-
// Set the default mode
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
330
|
+
// Set the default mode (unless the caller attaches the public object of the modes first)
|
|
331
|
+
const enterDefaultMode = () => {
|
|
332
|
+
if (!teardown.done)
|
|
333
|
+
modeManager.setMode(context.options.defaultMode);
|
|
334
|
+
};
|
|
335
|
+
if (!build.deferDefaultMode)
|
|
336
|
+
enterDefaultMode();
|
|
337
|
+
// 9. The release of what was set up above: the input, the modes, the rendering and the
|
|
338
|
+
// layers on the map, then the rest in the reverse order
|
|
339
|
+
teardown.add(() => {
|
|
340
|
+
inputRouter.stop();
|
|
341
|
+
inputNormalizer.detach();
|
|
342
|
+
modeManager.stop();
|
|
343
|
+
renderCoordinator.stop();
|
|
344
|
+
context.autoNameGenerator.dispose();
|
|
345
|
+
// There can be several frames, so remove all of them
|
|
346
|
+
for (const layer of customLayer.getSlotLayers()) {
|
|
347
|
+
if (map.getLayer(layer.id))
|
|
348
|
+
map.removeLayer(layer.id);
|
|
349
|
+
}
|
|
350
|
+
// After the plugins are removed (their onRemove can still read the index)
|
|
351
|
+
spatialIndex.destroy();
|
|
352
|
+
});
|
|
353
|
+
// The extensions go first, while everything they use is there
|
|
354
|
+
teardown.add(() => extensions.destroy());
|
|
355
|
+
return {
|
|
356
|
+
map,
|
|
357
|
+
context,
|
|
358
|
+
customLayer,
|
|
359
|
+
modeManager,
|
|
360
|
+
datasets,
|
|
361
|
+
inputRouter,
|
|
362
|
+
extensions,
|
|
363
|
+
events,
|
|
364
|
+
runtime: {
|
|
365
|
+
setDragThreshold: (px) => inputNormalizer.setDragThreshold(px),
|
|
366
|
+
setTimeSlicing(enabled) {
|
|
367
|
+
renderingConfig.timeSlicing = enabled;
|
|
368
|
+
triangulationScheduler.setSlicing(enabled);
|
|
369
|
+
},
|
|
370
|
+
},
|
|
371
|
+
isDestroyed: () => teardown.done,
|
|
372
|
+
enterDefaultMode,
|
|
373
|
+
destroy: () => teardown.run(),
|
|
399
374
|
};
|
|
400
|
-
draw.addPlugin = guard(draw.addPlugin, noop);
|
|
401
|
-
draw.registerMode = guard(draw.registerMode, noop);
|
|
402
|
-
draw.registerFeatureHandler = guard(draw.registerFeatureHandler, noop);
|
|
403
|
-
draw.addOverlayRenderer = guard(draw.addOverlayRenderer, noop);
|
|
404
|
-
draw.registerAuxiliaryHandleProvider = guard(draw.registerAuxiliaryHandleProvider, noop);
|
|
405
|
-
draw.registerFeatureCompanionProvider = guard(draw.registerFeatureCompanionProvider, noop);
|
|
406
|
-
draw.snapping.register = guard(draw.snapping.register, noop);
|
|
407
375
|
}
|