@sakuzu/maplibre-gl-draw 1.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1109 -2
- package/README.ja.md +83 -50
- package/README.md +89 -53
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/api/datasets.d.ts +263 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +137 -0
- package/dist/api/draw.js +20 -0
- package/dist/api/drawing.d.ts +87 -0
- package/dist/api/errors.d.ts +35 -0
- package/dist/api/errors.js +35 -0
- package/dist/api/events.d.ts +316 -0
- package/dist/api/extension/context.d.ts +247 -0
- package/dist/api/extension/feature-type.d.ts +129 -0
- package/dist/api/extension/mode.d.ts +123 -0
- package/dist/api/extension/plugin.d.ts +51 -0
- package/dist/api/extension/plugin.js +3 -0
- package/dist/api/extension/provider.d.ts +119 -0
- package/dist/api/extension/provider.js +3 -0
- package/dist/api/extension/render.d.ts +176 -0
- package/dist/api/extension/render.js +3 -0
- package/dist/api/extension/store.d.ts +190 -0
- package/dist/api/extension/store.js +3 -0
- package/dist/api/extensions.d.ts +306 -0
- package/dist/api/extensions.js +3 -0
- package/dist/api/features.d.ts +188 -0
- package/dist/api/features.js +3 -0
- package/dist/api/groups.d.ts +111 -0
- package/dist/api/groups.js +3 -0
- package/dist/api/hidden.d.ts +45 -0
- package/dist/api/hidden.js +3 -0
- package/dist/api/impl/adapters.js +463 -0
- package/dist/api/impl/contexts.js +466 -0
- package/dist/api/impl/create-draw.js +124 -0
- package/dist/api/impl/datasets.js +405 -0
- package/dist/api/impl/destroy-guard.js +74 -0
- package/dist/api/impl/document.js +280 -0
- package/dist/api/impl/drawing.js +180 -0
- package/dist/api/impl/engine-context.d.ts +7 -0
- package/dist/api/{context.js → impl/engine-context.js} +49 -38
- package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
- package/dist/api/impl/events.js +423 -0
- package/dist/api/impl/extension-host.js +364 -0
- package/dist/api/impl/extensions.js +229 -0
- package/dist/api/impl/features.js +445 -0
- package/dist/api/impl/geometry/apply.d.ts +32 -0
- package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
- package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
- package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/split.js +10 -21
- package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
- package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
- package/dist/api/impl/geometry/types.js +3 -0
- package/dist/api/impl/groups.d.ts +3 -0
- package/dist/api/impl/groups.js +268 -0
- package/dist/api/impl/hidden.js +60 -0
- package/dist/api/impl/import-export/constants.d.ts +22 -0
- package/dist/api/impl/import-export/constants.js +24 -0
- package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
- package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
- package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
- package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
- package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
- package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
- package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
- package/dist/api/impl/import-export/image-import.d.ts +16 -0
- package/dist/api/impl/import-export/image-import.js +73 -0
- package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
- package/dist/api/impl/import-export/legacy-image-style.js +49 -0
- package/dist/api/impl/import-export/native-format.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
- package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
- package/dist/api/impl/import-export/native-upgrade.js +139 -0
- package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
- package/dist/api/impl/import-export/style-validation.d.ts +24 -0
- package/dist/api/impl/import-export/style-validation.js +86 -0
- package/dist/api/impl/import-export/types.d.ts +52 -0
- package/dist/api/impl/import-export/types.js +3 -0
- package/dist/api/impl/input.js +180 -0
- package/dist/api/impl/layers.js +307 -0
- package/dist/api/impl/metadata.d.ts +1 -0
- package/dist/api/impl/metadata.js +22 -0
- package/dist/api/impl/options.d.ts +1 -0
- package/dist/api/impl/options.js +851 -0
- package/dist/api/impl/placement.d.ts +1 -0
- package/dist/api/impl/placement.js +138 -0
- package/dist/api/impl/render-context.d.ts +13 -0
- package/dist/api/impl/render-context.js +272 -0
- package/dist/api/impl/rows.d.ts +1 -0
- package/dist/api/impl/rows.js +46 -0
- package/dist/api/impl/selection.d.ts +1 -0
- package/dist/api/impl/selection.js +186 -0
- package/dist/api/impl/shared.d.ts +64 -0
- package/dist/api/impl/shared.js +178 -0
- package/dist/api/impl/validate-extension.d.ts +1 -0
- package/dist/api/impl/validate-extension.js +159 -0
- package/dist/api/layers.d.ts +130 -0
- package/dist/api/layers.js +3 -0
- package/dist/api/metadata.d.ts +18 -0
- package/dist/api/metadata.js +3 -0
- package/dist/api/model.d.ts +487 -0
- package/dist/api/model.js +47 -0
- package/dist/api/options.d.ts +466 -0
- package/dist/api/options.js +3 -0
- package/dist/api/selection.d.ts +94 -0
- package/dist/api/selection.js +3 -0
- package/dist/api/state.d.ts +155 -0
- package/dist/api/state.js +12 -0
- package/dist/{display → dataset}/chunk.d.ts +1 -1
- package/dist/{display → dataset}/chunk.js +4 -3
- package/dist/{display → dataset}/dataset.js +21 -21
- package/dist/dataset/interaction.d.ts +1 -0
- package/dist/{display → dataset}/interaction.js +18 -6
- package/dist/dataset/manager.d.ts +1 -0
- package/dist/dataset/provider.d.ts +1 -0
- package/dist/{display → dataset}/retained.d.ts +1 -1
- package/dist/{display → dataset}/retained.js +8 -7
- package/dist/dataset/source.d.ts +1 -0
- package/dist/{display → dataset}/source.js +17 -4
- package/dist/dataset/spatial.d.ts +1 -0
- package/dist/{display → dataset}/spatial.js +1 -1
- package/dist/dataset/style.d.ts +1 -0
- package/dist/{display → dataset}/style.js +1 -1
- package/dist/dataset/table-source.d.ts +1 -0
- package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
- package/dist/{display → dataset}/thinning.d.ts +0 -10
- package/dist/{display → dataset}/thinning.js +3 -2
- package/dist/dataset/triangulation.d.ts +1 -0
- package/dist/{display → dataset}/triangulation.js +0 -0
- package/dist/{display → dataset}/types.d.ts +84 -121
- package/dist/dataset/types.js +61 -0
- package/dist/dispatcher/hit-test/box-strategies.js +13 -13
- package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
- package/dist/dispatcher/hit-test/globe-shape.js +5 -4
- package/dist/dispatcher/hit-test/service.d.ts +17 -0
- package/dist/dispatcher/hit-test/service.js +80 -16
- package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
- package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
- package/dist/dispatcher/hit-test/strategies/image.js +6 -18
- package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
- package/dist/dispatcher/hit-test/strategies/line.js +9 -2
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
- package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
- package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
- package/dist/dispatcher/hit-test/strategies/point.js +8 -4
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
- package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
- package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
- package/dist/dispatcher/input-router.js +154 -70
- package/dist/dispatcher/normalizer.js +25 -4
- package/dist/dispatcher/types.d.ts +6 -1
- package/dist/extension/feature-handler.d.ts +1 -182
- package/dist/extension/index.d.ts +4 -7
- package/dist/extension/renderers.d.ts +1 -208
- package/dist/geometry/angle.d.ts +0 -8
- package/dist/geometry/angle.js +0 -8
- package/dist/geometry/bbox.d.ts +4 -12
- package/dist/geometry/bbox.js +4 -12
- package/dist/geometry/boolean.d.ts +0 -51
- package/dist/geometry/boolean.js +0 -51
- package/dist/geometry/buffer.d.ts +0 -26
- package/dist/geometry/buffer.js +0 -26
- package/dist/geometry/circle.d.ts +0 -9
- package/dist/geometry/circle.js +0 -9
- package/dist/geometry/coords.d.ts +0 -16
- package/dist/geometry/coords.js +0 -16
- package/dist/geometry/distance.d.ts +0 -24
- package/dist/geometry/distance.js +0 -24
- package/dist/geometry/errors.d.ts +21 -36
- package/dist/geometry/errors.js +49 -29
- package/dist/geometry/geojson.d.ts +85 -0
- package/dist/geometry/geojson.js +173 -0
- package/dist/geometry/index.d.ts +38 -23
- package/dist/geometry/index.js +43 -31
- package/dist/geometry/measure.d.ts +0 -27
- package/dist/geometry/measure.js +0 -27
- package/dist/geometry/predicates.d.ts +0 -9
- package/dist/geometry/predicates.js +0 -9
- package/dist/geometry/public-bounds.d.ts +26 -0
- package/dist/geometry/public-bounds.js +30 -0
- package/dist/geometry/public-combine.d.ts +78 -0
- package/dist/geometry/public-combine.js +82 -0
- package/dist/geometry/public-create.d.ts +54 -0
- package/dist/geometry/public-create.js +70 -0
- package/dist/geometry/public-measure.d.ts +170 -0
- package/dist/geometry/public-measure.js +283 -0
- package/dist/geometry/public-predicates.d.ts +54 -0
- package/dist/geometry/public-predicates.js +144 -0
- package/dist/geometry/public-repair.d.ts +75 -0
- package/dist/geometry/public-repair.js +77 -0
- package/dist/geometry/simplify.d.ts +0 -7
- package/dist/geometry/simplify.js +0 -7
- package/dist/geometry/split.d.ts +0 -20
- package/dist/geometry/split.js +0 -20
- package/dist/geometry/units.d.ts +20 -12
- package/dist/geometry/units.js +20 -12
- package/dist/index.d.ts +66 -66
- package/dist/index.js +6 -18
- package/dist/messages.d.ts +7 -7
- package/dist/modes/draw/circle.js +83 -207
- package/dist/modes/draw/commit-layer.d.ts +5 -16
- package/dist/modes/draw/commit-layer.js +2 -13
- package/dist/modes/draw/freehand.js +108 -246
- package/dist/modes/draw/image.js +4 -2
- package/dist/modes/draw/index.d.ts +5 -5
- package/dist/modes/draw/index.js +5 -5
- package/dist/modes/draw/line.js +18 -354
- package/dist/modes/draw/point.js +29 -78
- package/dist/modes/draw/polygon.js +23 -368
- package/dist/modes/draw/trace-support.d.ts +43 -36
- package/dist/modes/draw/trace-support.js +95 -98
- package/dist/modes/draw/vertex-drawing.d.ts +1 -0
- package/dist/modes/draw/vertex-drawing.js +176 -0
- package/dist/modes/handler.d.ts +1 -285
- package/dist/modes/manager.d.ts +2 -2
- package/dist/modes/manager.js +3 -0
- package/dist/modes/select/box-selection.d.ts +3 -3
- package/dist/modes/select/box-selection.js +2 -1
- package/dist/modes/select/click-handler.d.ts +5 -5
- package/dist/modes/select/click-handler.js +22 -20
- package/dist/modes/select/cursor-handler.d.ts +2 -2
- package/dist/modes/select/drag/intermediate-writes.js +1 -1
- package/dist/modes/select/drag/move.js +3 -3
- package/dist/modes/select/drag/operation.d.ts +3 -3
- package/dist/modes/select/drag/radius.js +5 -4
- package/dist/modes/select/drag/transform.d.ts +2 -2
- package/dist/modes/select/drag/transform.js +11 -5
- package/dist/modes/select/drag/vertex.d.ts +2 -2
- package/dist/modes/select/drag/vertex.js +13 -8
- package/dist/modes/select/drag-handler.js +44 -25
- package/dist/modes/select/mode.js +17 -17
- package/dist/modes/select/shortcut-handler.d.ts +8 -8
- package/dist/modes/select/shortcut-handler.js +9 -7
- package/dist/operations/layer-operations.js +29 -168
- package/dist/operations/resize.d.ts +2 -2
- package/dist/operations/resize.js +5 -5
- package/dist/operations/rotate.js +5 -5
- package/dist/operations/selection-operations.d.ts +16 -1
- package/dist/operations/selection-operations.js +28 -13
- package/dist/operations/shared-vertex.js +4 -2
- package/dist/operations/trace-graph.d.ts +0 -18
- package/dist/operations/trace-graph.js +0 -18
- package/dist/operations/vertex.js +36 -35
- package/dist/shared/color.d.ts +1 -0
- package/dist/shared/color.js +245 -0
- package/dist/shared/config/constants.d.ts +1 -54
- package/dist/shared/config/constants.js +1 -58
- package/dist/shared/config/feature-style.d.ts +16 -13
- package/dist/shared/config/feature-style.js +9 -0
- package/dist/shared/config/rendering.d.ts +3 -3
- package/dist/shared/config/selection-highlight.d.ts +0 -15
- package/dist/shared/config/selection-highlight.js +4 -7
- package/dist/shared/config/selection.d.ts +2 -32
- package/dist/shared/config/selection.js +0 -18
- package/dist/shared/config/topology.d.ts +2 -2
- package/dist/shared/config/trace.d.ts +4 -4
- package/dist/shared/math/angle.d.ts +1 -1
- package/dist/shared/math/angle.js +1 -1
- package/dist/shared/math/circle.d.ts +1 -1
- package/dist/shared/math/circle.js +1 -1
- package/dist/shared/math/distance.d.ts +2 -1
- package/dist/shared/math/distance.js +3 -2
- package/dist/shared/math/index.d.ts +1 -1
- package/dist/shared/math/index.js +1 -1
- package/dist/shared/math/transform.d.ts +23 -0
- package/dist/shared/math/transform.js +47 -28
- package/dist/shared/properties.d.ts +18 -0
- package/dist/shared/properties.js +129 -0
- package/dist/shared/types/events.d.ts +15 -7
- package/dist/shared/types/model.d.ts +109 -159
- package/dist/shared/types/style.d.ts +1 -1
- package/dist/shared/utils/color.d.ts +2 -36
- package/dist/shared/utils/color.js +13 -70
- package/dist/shared/utils/coordinates.d.ts +30 -4
- package/dist/shared/utils/coordinates.js +56 -10
- package/dist/shared/utils/event-emitter.d.ts +1 -262
- package/dist/shared/utils/event-emitter.js +4 -3
- package/dist/shared/utils/feature-bbox.js +8 -7
- package/dist/shared/utils/feature-segments.js +5 -4
- package/dist/shared/utils/image.d.ts +0 -4
- package/dist/shared/utils/image.js +0 -6
- package/dist/shared/utils/name-generator.d.ts +14 -20
- package/dist/shared/utils/name-generator.js +20 -3
- package/dist/shared/utils/pixel-ratio.d.ts +9 -3
- package/dist/shared/utils/pixel-ratio.js +13 -4
- package/dist/shared/utils/property.d.ts +7 -50
- package/dist/shared/utils/property.js +22 -87
- package/dist/snapping/custom-targets.js +21 -4
- package/dist/snapping/indicator.js +20 -11
- package/dist/snapping/providers/display.d.ts +6 -1
- package/dist/snapping/providers/display.js +2 -1
- package/dist/snapping/providers/guide.d.ts +3 -43
- package/dist/snapping/providers/guide.js +1 -44
- package/dist/snapping/providers/intersection.js +1 -1
- package/dist/snapping/providers/store.js +3 -3
- package/dist/snapping/service.js +18 -7
- package/dist/snapping/types.d.ts +9 -35
- package/dist/store/draw-store.js +233 -142
- package/dist/store/local-visibility.d.ts +11 -6
- package/dist/store/local-visibility.js +38 -7
- package/dist/store/lock.d.ts +0 -6
- package/dist/store/lock.js +0 -6
- package/dist/store/memory/change-bus.d.ts +3 -3
- package/dist/store/memory/change-bus.js +12 -0
- package/dist/store/memory/file-store.d.ts +2 -2
- package/dist/store/memory/ui-state.d.ts +1 -51
- package/dist/store/memory/ui-state.js +122 -134
- package/dist/store/memory.d.ts +1 -8
- package/dist/store/memory.js +249 -45
- package/dist/store/ordering.d.ts +9 -0
- package/dist/store/ordering.js +17 -0
- package/dist/store/spatial/spatial-index.d.ts +1 -1
- package/dist/store/spatial/spatial-index.js +1 -1
- package/dist/store/spatial/store-spatial-index.d.ts +3 -1
- package/dist/store/spatial/store-spatial-index.js +9 -3
- package/dist/store/store.d.ts +66 -107
- package/dist/store/types.d.ts +1 -1
- package/dist/store/writable-layer.d.ts +1 -1
- package/dist/store/writable-layer.js +2 -2
- package/dist/table/builder.d.ts +83 -0
- package/dist/table/builder.js +381 -0
- package/dist/table/index.d.ts +37 -0
- package/dist/table/index.js +5 -0
- package/dist/table/packed-rtree.d.ts +1 -0
- package/dist/{display → table}/packed-rtree.js +1 -1
- package/dist/table/partition.d.ts +1 -0
- package/dist/{display → table}/partition.js +3 -3
- package/dist/table/prepare.d.ts +44 -0
- package/dist/table/prepare.js +136 -0
- package/dist/table/table.d.ts +1 -0
- package/dist/{display/columnar → table}/table.js +29 -25
- package/dist/{display/columnar → table}/types.d.ts +68 -72
- package/dist/table/types.js +3 -0
- package/dist/view/coordinator.js +4 -3
- package/dist/view/feature-companion.d.ts +13 -7
- package/dist/view/feature-companion.js +11 -3
- package/dist/view/globe-subdivision.js +3 -3
- package/dist/view/layer/attach.d.ts +12 -6
- package/dist/view/layer/attach.js +86 -10
- package/dist/view/layer/custom-layer.js +40 -11
- package/dist/view/layer/display-list.js +2 -1
- package/dist/view/layer/drape-planner.d.ts +2 -2
- package/dist/view/layer/frame-render.d.ts +3 -3
- package/dist/view/layer/frame-render.js +7 -2
- package/dist/view/layer/frame-state.d.ts +6 -6
- package/dist/view/layer/index.d.ts +2 -2
- package/dist/view/layer/index.js +1 -1
- package/dist/view/layer/render.d.ts +4 -4
- package/dist/view/layer/render.js +3 -8
- package/dist/view/layer/renderers.d.ts +2 -2
- package/dist/view/layer/renderers.js +1 -1
- package/dist/view/layer/slot-manager.d.ts +2 -2
- package/dist/view/layer/slot-manager.js +4 -4
- package/dist/view/layer/slots.d.ts +2 -2
- package/dist/view/layer/slots.js +1 -1
- package/dist/view/layer/store-retained-bbox.js +3 -2
- package/dist/view/layer/store-retained-classify.d.ts +5 -7
- package/dist/view/layer/store-retained-classify.js +19 -7
- package/dist/view/layer/store-retained-collect.js +8 -7
- package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
- package/dist/view/layer/store-retained-coord-patch.js +13 -4
- package/dist/view/layer/store-retained-immediate.d.ts +3 -3
- package/dist/view/layer/store-retained-immediate.js +3 -8
- package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
- package/dist/view/layer/store-retained.d.ts +2 -2
- package/dist/view/layer/store-retained.js +1 -1
- package/dist/view/renderers/batch-manager.js +8 -7
- package/dist/view/renderers/drawer.js +21 -15
- package/dist/view/renderers/image.js +13 -39
- package/dist/view/renderers/line/line-types.d.ts +3 -3
- package/dist/view/renderers/line/sdf-line.js +3 -1
- package/dist/view/renderers/point/billboard-depth.js +1 -1
- package/dist/view/renderers/point/point-instance.js +1 -1
- package/dist/view/renderers/point/point-shape.js +2 -2
- package/dist/view/renderers/point/point-style.js +48 -4
- package/dist/view/renderers/polygon/batch.js +1 -2
- package/dist/view/renderers/polygon/fill.js +3 -1
- package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
- package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
- package/dist/view/renderers/stroke.js +3 -1
- package/dist/view/shaders/helpers.d.ts +2 -42
- package/dist/view/shaders/helpers.js +0 -6
- package/dist/view/shaders/projection.d.ts +15 -7
- package/dist/view/shaders/projection.js +23 -6
- package/dist/view/shaders/quad.d.ts +16 -12
- package/dist/view/shaders/quad.js +34 -13
- package/dist/view/style-rule.d.ts +5 -42
- package/dist/view/style-rule.js +20 -44
- package/dist/view/terrain/binding.d.ts +1 -0
- package/dist/view/terrain/binding.js +29 -0
- package/dist/view/terrain/context.d.ts +3 -4
- package/dist/view/terrain/context.js +4 -5
- package/dist/view/terrain/drape/geometry.js +1 -1
- package/dist/view/terrain/drape/pass.d.ts +1 -1
- package/dist/view/terrain/drape/pass.js +8 -7
- package/dist/view/terrain/polygon.d.ts +9 -5
- package/dist/view/terrain/polygon.js +16 -2
- package/dist/view/terrain/state.d.ts +1 -1
- package/dist/view/terrain/state.js +1 -1
- package/dist/view/terrain/tessellation.d.ts +2 -2
- package/dist/view/terrain/tessellation.js +1 -1
- package/dist/view/ui/auxiliary-handles.d.ts +6 -29
- package/dist/view/ui/bounds.js +8 -12
- package/dist/view/ui/handle-test.js +2 -2
- package/dist/view/ui/handle-thinning.js +17 -17
- package/dist/view/ui/handles.js +21 -13
- package/dist/view/ui/helper.d.ts +1 -1
- package/dist/view/ui/helper.js +1 -1
- package/dist/view/ui/index.d.ts +1 -1
- package/dist/view/ui/selection-scope.js +4 -2
- package/dist/view/ui/selection-ui/bounding-box.js +6 -6
- package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
- package/dist/view/ui/selection-ui/extension-registry.js +70 -7
- package/dist/view/ui/selection-ui/index.d.ts +2 -2
- package/dist/view/ui/selection-ui/index.js +1 -1
- package/dist/view/ui/selection-ui/renderer.js +15 -38
- package/dist/view/ui/selection-ui/types.d.ts +17 -2
- package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
- package/dist/view/ui/selection-ui-drawer.js +63 -2
- package/dist/view/ui/tentative.js +1 -1
- package/dist/webgl/index.d.ts +65 -0
- package/dist/webgl/index.js +62 -0
- package/package.json +38 -15
- package/dist/api/api.d.ts +0 -1259
- package/dist/api/api.js +0 -86
- package/dist/api/context.d.ts +0 -173
- package/dist/api/display-api.js +0 -23
- package/dist/api/event-api.d.ts +0 -13
- package/dist/api/event-api.js +0 -17
- package/dist/api/extension-api.d.ts +0 -46
- package/dist/api/extension-api.js +0 -85
- package/dist/api/feature-api.d.ts +0 -11
- package/dist/api/feature-api.js +0 -101
- package/dist/api/geometry/apply.d.ts +0 -51
- package/dist/api/geometry/boolean.d.ts +0 -28
- package/dist/api/geometry/boolean.js +0 -65
- package/dist/api/geometry/types.d.ts +0 -31
- package/dist/api/geometry-operations.d.ts +0 -162
- package/dist/api/geometry-operations.js +0 -94
- package/dist/api/group-api.d.ts +0 -10
- package/dist/api/group-api.js +0 -78
- package/dist/api/import-export/constants.d.ts +0 -29
- package/dist/api/import-export/constants.js +0 -40
- package/dist/api/import-export/file-name.d.ts +0 -10
- package/dist/api/import-export/file-name.js +0 -20
- package/dist/api/import-export/geojson-export.d.ts +0 -19
- package/dist/api/import-export/image-import.d.ts +0 -12
- package/dist/api/import-export/image-import.js +0 -53
- package/dist/api/import-export/index.d.ts +0 -9
- package/dist/api/import-export/index.js +0 -107
- package/dist/api/import-export/native-format.d.ts +0 -15
- package/dist/api/import-export/style-validation.d.ts +0 -27
- package/dist/api/import-export/style-validation.js +0 -49
- package/dist/api/import-export/types.d.ts +0 -26
- package/dist/api/index.d.ts +0 -15
- package/dist/api/index.js +0 -3
- package/dist/api/input-api.d.ts +0 -158
- package/dist/api/input-api.js +0 -144
- package/dist/api/instance-api.d.ts +0 -38
- package/dist/api/instance-api.js +0 -136
- package/dist/api/layer-api.d.ts +0 -12
- package/dist/api/layer-api.js +0 -62
- package/dist/api/selection-api.d.ts +0 -7
- package/dist/api/selection-api.js +0 -78
- package/dist/api/snapping-api.d.ts +0 -125
- package/dist/api/snapping-api.js +0 -50
- package/dist/api/topology-api.d.ts +0 -30
- package/dist/api/topology-api.js +0 -16
- package/dist/api/tracing-api.d.ts +0 -31
- package/dist/api/tracing-api.js +0 -16
- package/dist/dispatcher/hit-test/index.d.ts +0 -14
- package/dist/dispatcher/hit-test/index.js +0 -9
- package/dist/dispatcher/index.d.ts +0 -15
- package/dist/dispatcher/index.js +0 -3
- package/dist/display/columnar/index.d.ts +0 -12
- package/dist/display/columnar/index.js +0 -13
- package/dist/display/columnar/prepare.d.ts +0 -42
- package/dist/display/columnar/prepare.js +0 -116
- package/dist/display/index.d.ts +0 -13
- package/dist/display/types.js +0 -43
- package/dist/maplibre-gl-draw.d.ts +0 -47
- package/dist/modes/cursor.js +0 -72
- package/dist/modes/index.d.ts +0 -7
- package/dist/operations/index.d.ts +0 -9
- package/dist/operations/index.js +0 -3
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/mutation-hooks.d.ts +0 -28
- package/dist/plugins/mutation-hooks.js +0 -84
- package/dist/plugins/plugin-context.js +0 -367
- package/dist/plugins/plugin-manager.d.ts +0 -103
- package/dist/plugins/plugin-manager.js +0 -316
- package/dist/plugins/plugin.d.ts +0 -529
- package/dist/shared/config/index.d.ts +0 -17
- package/dist/shared/config/index.js +0 -8
- package/dist/shared/utils/index.d.ts +0 -15
- package/dist/shared/utils/index.js +0 -24
- package/dist/snapping/index.d.ts +0 -14
- package/dist/snapping/index.js +0 -4
- package/dist/store/change-merger.js +0 -102
- package/dist/store/event-bridge.js +0 -161
- package/dist/store/index.d.ts +0 -12
- package/dist/store/index.js +0 -4
- package/dist/view/index.d.ts +0 -47
- package/dist/view/index.js +0 -20
- /package/dist/api/{geometry/types.js → datasets.js} +0 -0
- /package/dist/api/{import-export/types.js → document.js} +0 -0
- /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
- /package/dist/{display/index.js → api/events.js} +0 -0
- /package/dist/{modes/index.js → api/extension/context.js} +0 -0
- /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
- /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
- /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
- /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
- /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
- /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
- /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
- /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
- /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
- /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
- /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
- /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
- /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
- /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
- /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
- /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
- /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
- /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
- /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
- /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
- /package/dist/{display → dataset}/chunk-set.js +0 -0
- /package/dist/{display → dataset}/dataset.d.ts +0 -0
- /package/dist/{display → dataset}/manager.js +0 -0
- /package/dist/{display → dataset}/provider.js +0 -0
- /package/dist/{display → dataset}/selection.d.ts +0 -0
- /package/dist/{display → dataset}/selection.js +0 -0
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
/**
|
|
4
|
-
* Orchestrator of the Import/Export API
|
|
5
|
-
*
|
|
6
|
-
* createImportExportAPI is a thin orchestrator that detects the format and then delegates
|
|
7
|
-
* to each import/export function. The implementation is spread across format-detection /
|
|
8
|
-
* geojson-import / geojson-export / native-format / image-import / file-name.
|
|
9
|
-
*/
|
|
10
|
-
import { isImageFile } from '../../shared/utils/image.js';
|
|
11
|
-
import { buildExportFileName } from './file-name.js';
|
|
12
|
-
import { isGeoJSONFeatureCollection, isNativeFormat } from './format-detection.js';
|
|
13
|
-
import { exportGeoJSON } from './geojson-export.js';
|
|
14
|
-
import { loadGeoJSON } from './geojson-import.js';
|
|
15
|
-
import { loadImage } from './image-import.js';
|
|
16
|
-
import { exportNative, loadNative } from './native-format.js';
|
|
17
|
-
/**
|
|
18
|
-
* Creates the Import/Export API
|
|
19
|
-
*
|
|
20
|
-
* @internal
|
|
21
|
-
*/
|
|
22
|
-
export function createImportExportAPI(context) {
|
|
23
|
-
const { store, generateFeatureId, getCurrentLayerId, autoNameGenerator } = context;
|
|
24
|
-
const importDeps = {
|
|
25
|
-
store,
|
|
26
|
-
autoNameGenerator,
|
|
27
|
-
generateFeatureId,
|
|
28
|
-
getCurrentLayerId,
|
|
29
|
-
};
|
|
30
|
-
const api = {
|
|
31
|
-
/**
|
|
32
|
-
* Loads data or a file.
|
|
33
|
-
*
|
|
34
|
-
* Detects the kind of source automatically and handles it accordingly:
|
|
35
|
-
* - File: detects the file kind automatically (image / .json / .geojson)
|
|
36
|
-
* - object: detects the data format automatically (native format /
|
|
37
|
-
* GeoJSON FeatureCollection)
|
|
38
|
-
*/
|
|
39
|
-
async load(source, options) {
|
|
40
|
-
if (source instanceof File) {
|
|
41
|
-
if (isImageFile(source)) {
|
|
42
|
-
return loadImage(source, options || {}, importDeps);
|
|
43
|
-
}
|
|
44
|
-
const fileName = source.name.toLowerCase();
|
|
45
|
-
const mimeType = source.type;
|
|
46
|
-
const isJsonFile = fileName.endsWith('.json') ||
|
|
47
|
-
fileName.endsWith('.geojson') ||
|
|
48
|
-
mimeType === 'application/json' ||
|
|
49
|
-
mimeType === 'application/geo+json';
|
|
50
|
-
if (isJsonFile) {
|
|
51
|
-
const text = await source.text();
|
|
52
|
-
let data;
|
|
53
|
-
try {
|
|
54
|
-
data = JSON.parse(text);
|
|
55
|
-
}
|
|
56
|
-
catch (error) {
|
|
57
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
58
|
-
throw new Error(`Invalid JSON file "${source.name}": ${detail}`);
|
|
59
|
-
}
|
|
60
|
-
return api.load(data, options);
|
|
61
|
-
}
|
|
62
|
-
throw new Error(`Unsupported file type: ${source.type || source.name}`);
|
|
63
|
-
}
|
|
64
|
-
if (isNativeFormat(source)) {
|
|
65
|
-
return loadNative(source, { store });
|
|
66
|
-
}
|
|
67
|
-
if (isGeoJSONFeatureCollection(source)) {
|
|
68
|
-
return loadGeoJSON(source, importDeps, { flattenMulti: options?.flattenMulti });
|
|
69
|
-
}
|
|
70
|
-
throw new Error('Unsupported data format. Expected native format or GeoJSON FeatureCollection.');
|
|
71
|
-
},
|
|
72
|
-
/**
|
|
73
|
-
* Exports the data
|
|
74
|
-
*/
|
|
75
|
-
export(format, options) {
|
|
76
|
-
const metadata = store.getMetadata();
|
|
77
|
-
if (format === 'native') {
|
|
78
|
-
const data = exportNative(store, options);
|
|
79
|
-
const fileName = options?.fileName || buildExportFileName(metadata, '.maplibre-gl-draw.json');
|
|
80
|
-
return {
|
|
81
|
-
format: 'native',
|
|
82
|
-
data: JSON.stringify(data, null, 2),
|
|
83
|
-
mimeType: 'application/json',
|
|
84
|
-
fileName,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
if (format === 'geojson') {
|
|
88
|
-
const data = exportGeoJSON(store, options);
|
|
89
|
-
const fileName = options?.fileName || buildExportFileName(metadata, '.geojson');
|
|
90
|
-
return {
|
|
91
|
-
format: 'geojson',
|
|
92
|
-
data: JSON.stringify(data, null, 2),
|
|
93
|
-
mimeType: 'application/geo+json',
|
|
94
|
-
fileName,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
throw new Error(`Unsupported export format: ${format}`);
|
|
98
|
-
},
|
|
99
|
-
/**
|
|
100
|
-
* Generates a suggested export file name
|
|
101
|
-
*/
|
|
102
|
-
getSuggestedFileName() {
|
|
103
|
-
return buildExportFileName(store.getMetadata(), '.maplibre-gl-draw.json');
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
return api;
|
|
107
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Import / export of the native format
|
|
3
|
-
*/
|
|
4
|
-
import type { Store } from '../../store/store.js';
|
|
5
|
-
import type { Data, ExportOptions, LoadResult } from '../../store/types.js';
|
|
6
|
-
/**
|
|
7
|
-
* Exports the current data in the native format
|
|
8
|
-
*/
|
|
9
|
-
export declare function exportNative(store: Store, options?: ExportOptions): Data;
|
|
10
|
-
/**
|
|
11
|
-
* Imports the native format (replaces the existing data)
|
|
12
|
-
*/
|
|
13
|
-
export declare function loadNative(data: Data, deps: {
|
|
14
|
-
store: Store;
|
|
15
|
-
}): Promise<LoadResult>;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validation of an imported feature style
|
|
3
|
-
*
|
|
4
|
-
* A style arrives from a file (the maplibre-gl-draw:style property of GeoJSON, the style of a
|
|
5
|
-
* native feature, the simplestyle-spec keys) and reaches the renderer, which parses the
|
|
6
|
-
* colors as #rgb / #rrggbb and uses the numbers as they are. A value of the wrong type or
|
|
7
|
-
* form (a number or null for a color, `red`, an opacity of 5) would make the parsing throw or
|
|
8
|
-
* produce NaN, so each known key is checked here and a key that fails is dropped. Keys this
|
|
9
|
-
* library does not define are kept unchanged, whatever their value: they belong to the host or
|
|
10
|
-
* to an extension, which gives features keys of its own and checks their values where it reads
|
|
11
|
-
* them (values reach the Store through updateFeature and a replaced store as well, without
|
|
12
|
-
* passing here).
|
|
13
|
-
*/
|
|
14
|
-
import type { FeatureStyle } from '../../store/types.js';
|
|
15
|
-
type Check = (value: unknown) => boolean;
|
|
16
|
-
/** A #rgb or #rrggbb color */
|
|
17
|
-
export declare const isHexColor: Check;
|
|
18
|
-
/**
|
|
19
|
-
* Returns the usable part of an imported style
|
|
20
|
-
*
|
|
21
|
-
* A key of FeatureStyle whose value fails its check is dropped; every other key is kept.
|
|
22
|
-
*
|
|
23
|
-
* @param value The style as read from the file
|
|
24
|
-
* @returns The style, or undefined when the value is not an object or nothing is left
|
|
25
|
-
*/
|
|
26
|
-
export declare function sanitizeFeatureStyle(value: unknown): FeatureStyle | undefined;
|
|
27
|
-
export {};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
import { setOwnProperty } from './own-property.js';
|
|
4
|
-
const HEX_COLOR = /^#(?:[0-9a-f]{3}|[0-9a-f]{6})$/i;
|
|
5
|
-
/** A #rgb or #rrggbb color */
|
|
6
|
-
export const isHexColor = (value) => typeof value === 'string' && HEX_COLOR.test(value);
|
|
7
|
-
const isFiniteNumber = (value) => typeof value === 'number' && Number.isFinite(value);
|
|
8
|
-
const isOpacity = (value) => isFiniteNumber(value) && value >= 0 && value <= 1;
|
|
9
|
-
const isNonNegative = (value) => isFiniteNumber(value) && value >= 0;
|
|
10
|
-
const oneOf = (...values) => (value) => typeof value === 'string' && values.includes(value);
|
|
11
|
-
/** The check of every key of FeatureStyle */
|
|
12
|
-
const STYLE_CHECK_TABLE = {
|
|
13
|
-
fillColor: isHexColor,
|
|
14
|
-
fillOpacity: isOpacity,
|
|
15
|
-
strokeColor: isHexColor,
|
|
16
|
-
strokeWidth: isNonNegative,
|
|
17
|
-
strokeOpacity: isOpacity,
|
|
18
|
-
lineStyle: oneOf('solid', 'dashed', 'dotted'),
|
|
19
|
-
pointRadius: isNonNegative,
|
|
20
|
-
pointColor: isHexColor,
|
|
21
|
-
pointShape: oneOf('circle', 'square', 'triangle', 'star'),
|
|
22
|
-
imageOpacity: isOpacity,
|
|
23
|
-
};
|
|
24
|
-
const STYLE_CHECKS = new Map(Object.entries(STYLE_CHECK_TABLE));
|
|
25
|
-
function isRecord(value) {
|
|
26
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Returns the usable part of an imported style
|
|
30
|
-
*
|
|
31
|
-
* A key of FeatureStyle whose value fails its check is dropped; every other key is kept.
|
|
32
|
-
*
|
|
33
|
-
* @param value The style as read from the file
|
|
34
|
-
* @returns The style, or undefined when the value is not an object or nothing is left
|
|
35
|
-
*/
|
|
36
|
-
export function sanitizeFeatureStyle(value) {
|
|
37
|
-
if (!isRecord(value))
|
|
38
|
-
return undefined;
|
|
39
|
-
const style = {};
|
|
40
|
-
let kept = 0;
|
|
41
|
-
for (const [key, entry] of Object.entries(value)) {
|
|
42
|
-
const check = STYLE_CHECKS.get(key);
|
|
43
|
-
if (check && !check(entry))
|
|
44
|
-
continue;
|
|
45
|
-
setOwnProperty(style, key, entry);
|
|
46
|
-
kept++;
|
|
47
|
-
}
|
|
48
|
-
return kept > 0 ? style : undefined;
|
|
49
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Types internal to the Import/Export module
|
|
3
|
-
*/
|
|
4
|
-
import type { Feature, FileData } from '../../store/types.js';
|
|
5
|
-
/**
|
|
6
|
-
* GeoJSON import result (internal use).
|
|
7
|
-
*
|
|
8
|
-
* For a feature that contains image data, fileData is returned alongside it.
|
|
9
|
-
*/
|
|
10
|
-
export interface ConvertedFeatureResult {
|
|
11
|
-
feature: Feature;
|
|
12
|
-
fileData?: FileData;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Options for GeoJSON import
|
|
16
|
-
*/
|
|
17
|
-
export interface GeoJSONImportOptions {
|
|
18
|
-
/**
|
|
19
|
-
* Whether to expand Multi* geometries into features with a single geometry
|
|
20
|
-
*
|
|
21
|
-
* The default is false, which keeps MultiPoint / MultiLineString / MultiPolygon
|
|
22
|
-
* as Multi features as they are (so properties are not duplicated).
|
|
23
|
-
* Setting it to true expands them as before, assigning a new ID to each part.
|
|
24
|
-
*/
|
|
25
|
-
flattenMulti?: boolean;
|
|
26
|
-
}
|
package/dist/api/index.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* API module
|
|
3
|
-
*
|
|
4
|
-
* Only the symbols that src/index.ts publishes are listed here (see "The public
|
|
5
|
-
* surface" in CONTRIBUTING.md). Internal code imports from the defining file.
|
|
6
|
-
*/
|
|
7
|
-
export type { CustomFeatureHandler, CustomFeatureRenderer, CustomOverlayRenderer, CustomRendererDrawContext, CustomResizeResult, LayerAwareOverlayRenderer, } from '../extension/index.js';
|
|
8
|
-
export type { EventPayloads, MapLibreGLDraw, TerrainDiagnostics, TerrainRenderDiagnostics, } from './api.js';
|
|
9
|
-
export type { Options } from './context.js';
|
|
10
|
-
export type { GeometryApi, GeometryApiDeps, GeometryBufferOptions, GeometryOperations, } from './geometry-operations.js';
|
|
11
|
-
export { createGeometryApi } from './geometry-operations.js';
|
|
12
|
-
export type { InputOperations, SyntheticInputOptions, SyntheticKeyOptions, SyntheticLngLat, SyntheticModifiers, } from './input-api.js';
|
|
13
|
-
export type { SnappingOperations } from './snapping-api.js';
|
|
14
|
-
export type { TopologyOperations } from './topology-api.js';
|
|
15
|
-
export type { TracingOperations } from './tracing-api.js';
|
package/dist/api/index.js
DELETED
package/dist/api/input-api.d.ts
DELETED
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import type { Coordinate } from '../store/types.js';
|
|
2
|
-
/**
|
|
3
|
-
* The coordinate of a synthetic input
|
|
4
|
-
*
|
|
5
|
-
* Either `{ lng, lat }` or `[lng, lat]` (Coordinate) can be passed. The screen position is
|
|
6
|
-
* computed with `map.project`, so the caller does not prepare it.
|
|
7
|
-
*/
|
|
8
|
-
export type SyntheticLngLat = {
|
|
9
|
-
lng: number;
|
|
10
|
-
lat: number;
|
|
11
|
-
} | Coordinate;
|
|
12
|
-
/**
|
|
13
|
-
* The modifier keys of a synthetic input (an omitted key is false)
|
|
14
|
-
*/
|
|
15
|
-
export interface SyntheticModifiers {
|
|
16
|
-
/** Whether Shift is held */
|
|
17
|
-
shift?: boolean;
|
|
18
|
-
/** Whether Alt (Option) is held; by default it releases snapping */
|
|
19
|
-
alt?: boolean;
|
|
20
|
-
/** Whether Ctrl is held */
|
|
21
|
-
ctrl?: boolean;
|
|
22
|
-
/** Whether Meta (Cmd) is held */
|
|
23
|
-
meta?: boolean;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* The options of a synthetic input (click / move)
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```typescript
|
|
30
|
-
* // Place the point exactly where the numbers say, without snapping
|
|
31
|
-
* draw.input.click([139.7, 35.68], { snap: false });
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
34
|
-
export interface SyntheticInputOptions {
|
|
35
|
-
/** The modifier keys. When omitted, they are all false */
|
|
36
|
-
modifiers?: SyntheticModifiers;
|
|
37
|
-
/**
|
|
38
|
-
* Whether to pass through snapping (default true)
|
|
39
|
-
*
|
|
40
|
-
* Setting it to false raises `snap: false` on the normalized event, and the InputRouter
|
|
41
|
-
* distributes the raw coordinate to the modes without going through the SnapService. Use it
|
|
42
|
-
* when an exact coordinate is to be given numerically.
|
|
43
|
-
*/
|
|
44
|
-
snap?: boolean;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* The options of a synthetic key input
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* ```typescript
|
|
51
|
-
* draw.input.key('g', { modifiers: { ctrl: true } }); // groups the selection in select mode
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
export interface SyntheticKeyOptions {
|
|
55
|
-
/** The modifier keys. When omitted, they are all false */
|
|
56
|
-
modifiers?: SyntheticModifiers;
|
|
57
|
-
/**
|
|
58
|
-
* The value equivalent to KeyboardEvent.code
|
|
59
|
-
*
|
|
60
|
-
* When omitted, it is inferred from key (alphanumerics become KeyA / Digit1, anything else
|
|
61
|
-
* is the same as key).
|
|
62
|
-
*/
|
|
63
|
-
code?: string;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* The synthetic input of a draw instance, reached as `draw.input`: clicks, moves and keys
|
|
67
|
-
* given to the modes from code.
|
|
68
|
-
*
|
|
69
|
-
* It is the path for giving points to a drawing mode from numeric input (a distance and a
|
|
70
|
-
* bearing, absolute coordinates), from tests and from automation. The events enter where
|
|
71
|
-
* real input is dispatched, so snapping and the plugins see them as usual and a mode needs
|
|
72
|
-
* no special branch. The thresholds of real input (the click / drag distinction) are not
|
|
73
|
-
* involved. A synthetic event counts as mouse input, and its `originalEvent` is a stand-in
|
|
74
|
-
* marked with `synthetic: true`. The input fields of a numeric input UI are not part of the
|
|
75
|
-
* library.
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* ```typescript
|
|
79
|
-
* draw.setMode('draw_line');
|
|
80
|
-
* draw.input.click([139.7, 35.68]);
|
|
81
|
-
* draw.input.click([139.71, 35.68]);
|
|
82
|
-
* draw.input.click([139.71, 35.69]);
|
|
83
|
-
* draw.input.key('Enter');
|
|
84
|
-
* // Finishing returns to select mode with the new feature selected
|
|
85
|
-
* const [line] = draw.getSelectedFeatures();
|
|
86
|
-
* ```
|
|
87
|
-
*/
|
|
88
|
-
export interface InputOperations {
|
|
89
|
-
/**
|
|
90
|
-
* Synthesizes a click.
|
|
91
|
-
*
|
|
92
|
-
* So that the order matches that of a real cursor, it distributes a `mousemove` at the same
|
|
93
|
-
* coordinate and then distributes a `click`. The drawing modes interpret a click by looking
|
|
94
|
-
* at the state built up by the movement (the radius of a circle, the proximity test of the
|
|
95
|
-
* start and end points of a line or polygon), so these two are the minimal sequence that
|
|
96
|
-
* advances the drawing. Clicking the first point of a polygon again closes it; a circle takes
|
|
97
|
-
* a click on its center and one on its edge.
|
|
98
|
-
*
|
|
99
|
-
* @param lngLat where to click
|
|
100
|
-
* @param options the modifier keys and whether to snap
|
|
101
|
-
*
|
|
102
|
-
* @example
|
|
103
|
-
* ```typescript
|
|
104
|
-
* draw.setMode('draw_circle');
|
|
105
|
-
* draw.input.click([139.7, 35.68]); // the center
|
|
106
|
-
* draw.input.click([139.71, 35.68]); // sets the radius and finishes
|
|
107
|
-
* ```
|
|
108
|
-
*/
|
|
109
|
-
click(lngLat: SyntheticLngLat, options?: SyntheticInputOptions): void;
|
|
110
|
-
/**
|
|
111
|
-
* Synthesizes a mouse move.
|
|
112
|
-
*
|
|
113
|
-
* It moves the preview while drawing (the tentative geometry) without adding a point.
|
|
114
|
-
*
|
|
115
|
-
* @param lngLat where the pointer moves to
|
|
116
|
-
* @param options the modifier keys and whether to snap
|
|
117
|
-
*/
|
|
118
|
-
move(lngLat: SyntheticLngLat, options?: SyntheticInputOptions): void;
|
|
119
|
-
/**
|
|
120
|
-
* Synthesizes a key input (keydown).
|
|
121
|
-
*
|
|
122
|
-
* Enter finishes the drawing, Escape cancels it, and Backspace / Delete removes the last
|
|
123
|
-
* vertex. There is no path in the library that reads keyup, so only keydown is
|
|
124
|
-
* distributed.
|
|
125
|
-
*
|
|
126
|
-
* @param key the value of `KeyboardEvent.key` (`Enter`, `Escape`, `a` and so on)
|
|
127
|
-
* @param options the modifier keys and the `KeyboardEvent.code`
|
|
128
|
-
*
|
|
129
|
-
* @example
|
|
130
|
-
* ```typescript
|
|
131
|
-
* draw.input.key('Backspace'); // remove the last vertex
|
|
132
|
-
* draw.input.key('Escape'); // cancel the drawing
|
|
133
|
-
* ```
|
|
134
|
-
*/
|
|
135
|
-
key(key: string, options?: SyntheticKeyOptions): void;
|
|
136
|
-
/**
|
|
137
|
-
* Switches the holding of pointer-originated input.
|
|
138
|
-
*
|
|
139
|
-
* It is the entry point for stopping pointer interruptions while the keyboard is deciding
|
|
140
|
-
* the coordinate, such as in a numeric input panel. While it is held, the click / dblclick /
|
|
141
|
-
* mousemove of the real pointer no longer reach the modes, and only synthetic input (click /
|
|
142
|
-
* move / key) moves the coordinate. Panning and zooming the map (mousedown / drag events)
|
|
143
|
-
* keep working while it is held.
|
|
144
|
-
*
|
|
145
|
-
* Be sure to set it back to false once the panel is closed.
|
|
146
|
-
*
|
|
147
|
-
* @param held true to hold the pointer input, false to release it
|
|
148
|
-
*
|
|
149
|
-
* @example
|
|
150
|
-
* ```typescript
|
|
151
|
-
* numericPanel.onopen = () => draw.input.setPointerHold(true);
|
|
152
|
-
* numericPanel.onclose = () => draw.input.setPointerHold(false);
|
|
153
|
-
* ```
|
|
154
|
-
*/
|
|
155
|
-
setPointerHold(held: boolean): void;
|
|
156
|
-
/** Whether pointer-originated input is being held */
|
|
157
|
-
isPointerHeld(): boolean;
|
|
158
|
-
}
|
package/dist/api/input-api.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
-
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
/** The state in which no modifier key is pressed */
|
|
4
|
-
const NO_MODIFIERS = { shift: false, ctrl: false, alt: false, meta: false };
|
|
5
|
-
/**
|
|
6
|
-
* The marker that indicates a synthetic event
|
|
7
|
-
*
|
|
8
|
-
* Attaching it to originalEvent makes it distinguishable from a real event in plugins and
|
|
9
|
-
* while debugging.
|
|
10
|
-
*
|
|
11
|
-
* @internal
|
|
12
|
-
*/
|
|
13
|
-
export const SYNTHETIC_EVENT_MARKER = 'synthetic';
|
|
14
|
-
function toLngLat(lngLat) {
|
|
15
|
-
return Array.isArray(lngLat) ? { lng: lngLat[0], lat: lngLat[1] } : lngLat;
|
|
16
|
-
}
|
|
17
|
-
function toModifiers(modifiers) {
|
|
18
|
-
if (!modifiers)
|
|
19
|
-
return { ...NO_MODIFIERS };
|
|
20
|
-
return {
|
|
21
|
-
shift: modifiers.shift ?? false,
|
|
22
|
-
ctrl: modifiers.ctrl ?? false,
|
|
23
|
-
alt: modifiers.alt ?? false,
|
|
24
|
-
meta: modifiers.meta ?? false,
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Infers the equivalent of KeyboardEvent.code from key
|
|
29
|
-
*/
|
|
30
|
-
function inferCode(key) {
|
|
31
|
-
if (/^[a-zA-Z]$/.test(key))
|
|
32
|
-
return `Key${key.toUpperCase()}`;
|
|
33
|
-
if (/^[0-9]$/.test(key))
|
|
34
|
-
return `Digit${key}`;
|
|
35
|
-
if (key === ' ')
|
|
36
|
-
return 'Space';
|
|
37
|
-
return key;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* A synthetic originalEvent (the equivalent of a MouseEvent)
|
|
41
|
-
*
|
|
42
|
-
* It is a minimal dummy that has only the members the InputRouter and the modes touch.
|
|
43
|
-
* What the implementation touches is only preventDefault / stopPropagation (when the
|
|
44
|
-
* InputRouter consumes onMouseDown, and the shortcuts of the select mode) and target (the
|
|
45
|
-
* container test of the plugin interactions), so it is given those plus the fields for
|
|
46
|
-
* reading the modifier keys and the coordinate.
|
|
47
|
-
*/
|
|
48
|
-
function createSyntheticMouseEvent(type, point, modifiers) {
|
|
49
|
-
return {
|
|
50
|
-
type,
|
|
51
|
-
[SYNTHETIC_EVENT_MARKER]: true,
|
|
52
|
-
button: 0,
|
|
53
|
-
buttons: 0,
|
|
54
|
-
// A synthetic input has no offset on the page, so put in the canvas-relative coordinate as is
|
|
55
|
-
clientX: point.x,
|
|
56
|
-
clientY: point.y,
|
|
57
|
-
target: null,
|
|
58
|
-
currentTarget: null,
|
|
59
|
-
shiftKey: modifiers.shift,
|
|
60
|
-
ctrlKey: modifiers.ctrl,
|
|
61
|
-
altKey: modifiers.alt,
|
|
62
|
-
metaKey: modifiers.meta,
|
|
63
|
-
defaultPrevented: false,
|
|
64
|
-
preventDefault() { },
|
|
65
|
-
stopPropagation() { },
|
|
66
|
-
stopImmediatePropagation() { },
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* A synthetic originalEvent (the equivalent of a KeyboardEvent)
|
|
71
|
-
*/
|
|
72
|
-
function createSyntheticKeyboardEvent(key, code, modifiers) {
|
|
73
|
-
return {
|
|
74
|
-
type: 'keydown',
|
|
75
|
-
[SYNTHETIC_EVENT_MARKER]: true,
|
|
76
|
-
key,
|
|
77
|
-
code,
|
|
78
|
-
repeat: false,
|
|
79
|
-
target: null,
|
|
80
|
-
currentTarget: null,
|
|
81
|
-
shiftKey: modifiers.shift,
|
|
82
|
-
ctrlKey: modifiers.ctrl,
|
|
83
|
-
altKey: modifiers.alt,
|
|
84
|
-
metaKey: modifiers.meta,
|
|
85
|
-
defaultPrevented: false,
|
|
86
|
-
preventDefault() { },
|
|
87
|
-
stopPropagation() { },
|
|
88
|
-
stopImmediatePropagation() { },
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
/** @internal */
|
|
92
|
-
export function createInputApi(deps) {
|
|
93
|
-
const { map, inputRouter } = deps;
|
|
94
|
-
/**
|
|
95
|
-
* Builds a normalized mouse event
|
|
96
|
-
*
|
|
97
|
-
* The screen point is computed with map.project (a value with the same meaning as the point
|
|
98
|
-
* the InputNormalizer receives from MapLibre).
|
|
99
|
-
*/
|
|
100
|
-
function buildMouseEvent(type, lngLat, options) {
|
|
101
|
-
const resolved = toLngLat(lngLat);
|
|
102
|
-
const projected = map.project([resolved.lng, resolved.lat]);
|
|
103
|
-
const point = { x: projected.x, y: projected.y };
|
|
104
|
-
const modifiers = toModifiers(options?.modifiers);
|
|
105
|
-
return {
|
|
106
|
-
type,
|
|
107
|
-
point,
|
|
108
|
-
lngLat: { lng: resolved.lng, lat: resolved.lat },
|
|
109
|
-
originalEvent: createSyntheticMouseEvent(type, point, modifiers),
|
|
110
|
-
modifiers,
|
|
111
|
-
snap: options?.snap ?? true,
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return {
|
|
115
|
-
input: {
|
|
116
|
-
click(lngLat, options) {
|
|
117
|
-
// Use the same order as a real cursor (move, then click).
|
|
118
|
-
inputRouter.dispatch(buildMouseEvent('mousemove', lngLat, options));
|
|
119
|
-
inputRouter.dispatch(buildMouseEvent('click', lngLat, options));
|
|
120
|
-
},
|
|
121
|
-
move(lngLat, options) {
|
|
122
|
-
inputRouter.dispatch(buildMouseEvent('mousemove', lngLat, options));
|
|
123
|
-
},
|
|
124
|
-
setPointerHold(held) {
|
|
125
|
-
inputRouter.setPointerHold(held);
|
|
126
|
-
},
|
|
127
|
-
isPointerHeld() {
|
|
128
|
-
return inputRouter.isPointerHeld();
|
|
129
|
-
},
|
|
130
|
-
key(key, options) {
|
|
131
|
-
const modifiers = toModifiers(options?.modifiers);
|
|
132
|
-
const code = options?.code ?? inferCode(key);
|
|
133
|
-
const event = {
|
|
134
|
-
type: 'keydown',
|
|
135
|
-
key,
|
|
136
|
-
code,
|
|
137
|
-
modifiers,
|
|
138
|
-
originalEvent: createSyntheticKeyboardEvent(key, code, modifiers),
|
|
139
|
-
};
|
|
140
|
-
inputRouter.dispatch(event);
|
|
141
|
-
},
|
|
142
|
-
},
|
|
143
|
-
};
|
|
144
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Instance API
|
|
3
|
-
*
|
|
4
|
-
* Provides the basic operations of a MapLibreGLDraw instance (getting the Map / Store,
|
|
5
|
-
* switching the Mode, Metadata, destroy). It gathers the related methods that are small and
|
|
6
|
-
* not large enough to deserve a file of their own.
|
|
7
|
-
*/
|
|
8
|
-
import type { CustomLayerInterface as MapLibreCustomLayerInterface, Map as MapLibreMap } from 'maplibre-gl';
|
|
9
|
-
import type { InputRouter } from '../dispatcher/input-router.js';
|
|
10
|
-
import type { InputNormalizer } from '../dispatcher/normalizer.js';
|
|
11
|
-
import type { ModeManager } from '../modes/manager.js';
|
|
12
|
-
import type { PluginManager } from '../plugins/plugin-manager.js';
|
|
13
|
-
import type { AutoNameGenerator } from '../shared/utils/name-generator.js';
|
|
14
|
-
import type { PixelRatioSource } from '../shared/utils/pixel-ratio.js';
|
|
15
|
-
import type { EventBridge } from '../store/event-bridge.js';
|
|
16
|
-
import type { Store } from '../store/store.js';
|
|
17
|
-
import type { RenderCoordinator } from '../view/coordinator.js';
|
|
18
|
-
import type { CustomLayerInterface } from '../view/layer/index.js';
|
|
19
|
-
import type { MapLibreGLDraw } from './api.js';
|
|
20
|
-
export type InstanceApi = Pick<MapLibreGLDraw, 'getMap' | 'getStore' | 'getMode' | 'setMode' | 'getMetadata' | 'setMetadata' | 'isReadOnly' | 'setReadOnly' | 'isInteractionLocked' | 'setInteractionLock' | 'getRenderSlots' | 'getRenderScale' | 'setRenderScale' | 'getPixelRatio' | 'getTerrainDiagnostics' | 'hasPendingWork' | 'isLocallyHidden' | 'getLocallyHidden' | 'setLocallyHidden' | 'destroy'>;
|
|
21
|
-
export interface InstanceApiDeps {
|
|
22
|
-
map: MapLibreMap;
|
|
23
|
-
store: Store;
|
|
24
|
-
modeManager: ModeManager;
|
|
25
|
-
eventBridge: EventBridge;
|
|
26
|
-
renderCoordinator: RenderCoordinator;
|
|
27
|
-
inputRouter: InputRouter;
|
|
28
|
-
inputNormalizer: InputNormalizer;
|
|
29
|
-
customLayer: MapLibreCustomLayerInterface | CustomLayerInterface;
|
|
30
|
-
autoNameGenerator: AutoNameGenerator;
|
|
31
|
-
/** Needed in order to unregister the plugins on destroy (releasing the extension point
|
|
32
|
-
* registries) */
|
|
33
|
-
pluginManager: PluginManager;
|
|
34
|
-
/** The source of the render scale (the actual object held by the Context; setRenderScale
|
|
35
|
-
* rewrites it) */
|
|
36
|
-
pixelRatioSource: PixelRatioSource;
|
|
37
|
-
}
|
|
38
|
-
export declare function createInstanceApi(deps: InstanceApiDeps): InstanceApi;
|