@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
package/dist/index.d.ts
CHANGED
|
@@ -1,72 +1,72 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* MapLibre
|
|
2
|
+
* Draw and edit points, lines and areas on a MapLibre map, and show large data beside them.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Import from here for everything an application does with a drawing: create the instance,
|
|
5
|
+
* read and change its features, layers and groups, listen to what changes, save and load the
|
|
6
|
+
* document, and add plugins, modes and feature types. Three subpaths cover the rest: geometry
|
|
7
|
+
* that needs no map (`/geometry`), large tables read in a Worker (`/table`) and custom shaders
|
|
8
|
+
* (`/webgl`).
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* docs/reference/README.md):
|
|
10
|
+
* ```ts
|
|
11
|
+
* import { createDraw } from '@sakuzu/maplibre-gl-draw';
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
13
|
+
* const draw = createDraw(map);
|
|
14
|
+
* draw.setMode('draw_polygon');
|
|
15
|
+
* draw.on('feature.created', ({ feature }) => {
|
|
16
|
+
* console.log(feature.id, feature.geometry);
|
|
17
|
+
* });
|
|
18
|
+
* ```
|
|
18
19
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
20
|
+
* Where to find things: every resource of {@link Draw} is a field with its own methods.
|
|
21
|
+
*
|
|
22
|
+
* - `draw.features` (create, update, delete, move, union, split): {@link FeaturesCollection}
|
|
23
|
+
* - `draw.layers` (create, update, reorder, setActive): {@link LayersCollection}
|
|
24
|
+
* - `draw.groups` (create, update, move): {@link GroupsCollection}
|
|
25
|
+
* - `draw.datasets` (add, remove, move): {@link DatasetsCollection}
|
|
26
|
+
* - `draw.selection` (set, add, clear, delete, group): {@link SelectionResource}
|
|
27
|
+
* - `draw.vertexSelection` (set, clear, delete): {@link VertexSelectionResource}
|
|
28
|
+
* - `draw.metadata` and `draw.options` (get, update): {@link MetadataResource}, {@link OptionsResource}
|
|
29
|
+
* - `draw.document` (load, toJSON, toGeoJSON): {@link DocumentResource}
|
|
30
|
+
* - `draw.drawing` (addVertex, finish, cancel): {@link DrawingResource}
|
|
31
|
+
* - `draw.extensions` (plugins, modes, feature types): {@link ExtensionsCollections}
|
|
32
|
+
* - events with `draw.on`: {@link DrawEvents}; errors: {@link DrawError}
|
|
33
|
+
*
|
|
34
|
+
* Read next: [getting started](https://sakuzu.github.io/maplibre-gl-draw/getting-started),
|
|
35
|
+
* then the guides for [drawing](https://sakuzu.github.io/maplibre-gl-draw/guides/drawing) and
|
|
36
|
+
* [saving and loading](https://sakuzu.github.io/maplibre-gl-draw/guides/save-load). The
|
|
37
|
+
* symbols used most are {@link createDraw}, {@link Draw}, {@link Feature} and
|
|
38
|
+
* {@link DrawEvents}.
|
|
39
|
+
*
|
|
40
|
+
* @module maplibre-gl-draw
|
|
22
41
|
*/
|
|
23
|
-
export type {
|
|
24
|
-
export {
|
|
25
|
-
export type {
|
|
26
|
-
export type {
|
|
27
|
-
export type {
|
|
28
|
-
export type {
|
|
29
|
-
export {
|
|
30
|
-
export type {
|
|
31
|
-
export type {
|
|
32
|
-
export type {
|
|
33
|
-
export {
|
|
34
|
-
export type {
|
|
35
|
-
export type {
|
|
36
|
-
export
|
|
37
|
-
export type {
|
|
38
|
-
export type {
|
|
39
|
-
export
|
|
40
|
-
export {
|
|
41
|
-
export type {
|
|
42
|
-
export {
|
|
43
|
-
export
|
|
44
|
-
export {
|
|
45
|
-
export {
|
|
46
|
-
export type {
|
|
47
|
-
export type {
|
|
48
|
-
export type {
|
|
49
|
-
export type {
|
|
50
|
-
export type {
|
|
51
|
-
export type {
|
|
52
|
-
export type {
|
|
53
|
-
export
|
|
54
|
-
export type { BoxSelectionStrategyRegistry, HitTestService, HitTestTopmost, TopHit, TopmostHitTestOptions, UnprojectFunction, } from './dispatcher/index.js';
|
|
55
|
-
export type { HookName, PluginManager } from './plugins/index.js';
|
|
56
|
-
export type { TraceConfig } from './shared/config/index.js';
|
|
57
|
-
export type { AutoNameGenerator, EventEmitter } from './shared/utils/index.js';
|
|
58
|
-
export type { SpatialQuery } from './store/index.js';
|
|
59
|
-
export type { AuxiliaryHandleRegistry, FeatureCompanionHitResult, FeatureCompanionRegistry, FillShaderManager, PointShapeRenderer, SDFLineRenderer, SDFStrokeOptions, SDFStrokeStyle, SelectionExtensionRegistry, SelectionScope, TerrainContext, TerrainRenderState, WidthUnit, } from './view/index.js';
|
|
60
|
-
export type { TerrainDiagnostics, TerrainRenderDiagnostics } from './api/index.js';
|
|
61
|
-
export type { TerrainDrapeDebug } from './view/index.js';
|
|
62
|
-
export { resolvePixelRatio } from './shared/utils/index.js';
|
|
63
|
-
export type { BlendCapableGL, DashSegment, DrapeQuadCorners, OffsetUniforms, ProjectionUniformLocations, QuadDrapeColor, QuadDrapeFill, QuadDrapeSurface, QuadDrapeGlyphs, QuadVertices, ShaderData, } from './view/index.js';
|
|
64
|
-
export { applyDrawBlendState, calculateLngLatOffset, calculateOffsetUniforms, computeQuadVertices, createProgram, drawBillboardsWithoutDepth, drawQuadSurfaceOnTerrain, getProjectionTransitionUniform, getStrokeDashPattern, OFFSET_MODE_GLSL, ProjectionUniformManager, QUAD_GLYPH_STRIDE, QuadShader, splitIntoDashes, } from './view/index.js';
|
|
65
|
-
export type { MercatorRect, TessellationStep, TessellationTiling } from './view/index.js';
|
|
66
|
-
export { anchorElevationMeters, anchorGhostOpacity, densifyPath, getAnchorElevationGeneration, getTerrainTessellationStep, metersToMercatorScale, } from './view/index.js';
|
|
67
|
-
export type { MercatorCoord, OBB, OBBCorners } from './shared/math/index.js';
|
|
68
|
-
export { createOBB, DEFAULT_TILE_SIZE, distanceToOBB, generateCirclePolygon, getOBBAABB, lngLatToMercator, metersToDegreesLat, metersToDegreesLng, pixelsToDegreesLat, pixelsToDegreesLng, rectangleIntersectsOBB, } from './shared/math/index.js';
|
|
69
|
-
export { getContrastColor } from './shared/utils/index.js';
|
|
70
|
-
export { PointHitTestStrategy } from './dispatcher/index.js';
|
|
71
|
-
export { createGeometryApi, type GeometryApi, type GeometryApiDeps } from './api/index.js';
|
|
72
|
-
export { computeBoundingBox, createFeatureCompanionRegistry, createSelectionExtensionRegistry, DEFAULT_POINT_FRAME_SIZE, DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds, getSelectedFeatureIds, hasZeroArea, } from './view/index.js';
|
|
42
|
+
export type { Draw, TransactOptions } from './api/draw.js';
|
|
43
|
+
export { createDraw } from './api/draw.js';
|
|
44
|
+
export type { AutoNameOptions, DrawOptions, OptionsResource, RenderingOptions, RuntimeOptions, SelectionStyleOptions, SnappingOptions, TopologyOptions, TracingOptions, } from './api/options.js';
|
|
45
|
+
export type { Messages } from './messages.js';
|
|
46
|
+
export type { FeaturesCollection } from './api/features.js';
|
|
47
|
+
export type { LayersCollection } from './api/layers.js';
|
|
48
|
+
export type { GroupsCollection } from './api/groups.js';
|
|
49
|
+
export type { HiddenCollection } from './api/hidden.js';
|
|
50
|
+
export type { SelectionResource, VertexSelectionResource } from './api/selection.js';
|
|
51
|
+
export type { MetadataResource } from './api/metadata.js';
|
|
52
|
+
export type { DrawingResource } from './api/drawing.js';
|
|
53
|
+
export type { DocumentResource } from './api/document.js';
|
|
54
|
+
export type { DrawDocument, DrawProperties, Feature, FeatureStyle, FeatureStyleResolved, FeatureType, FileData, Group, Layer, LegendEntry, LineStyle, Metadata, PointShape, StyleRule, } from './api/model.js';
|
|
55
|
+
export { DRAW_PROPERTY_PREFIX, isDrawProperty } from './api/model.js';
|
|
56
|
+
export type { FeatureFilter, FeatureInput, FeaturePatch, GroupFilter, GroupInput, GroupPatch, LayerFilter, LayerInput, LayerPatch, LoadOptions, LoadResult, LoadSource, MoveTarget, SkippedFeature, } from './api/model.js';
|
|
57
|
+
export type { LayerStackEntry, Mode, Selection, SelectionType, SnapPreference, SnapResult, TerrainDiagnostics, VertexRef, VertexSelection, } from './api/state.js';
|
|
58
|
+
export { MODES } from './api/state.js';
|
|
59
|
+
export type { DocumentChange, DrawEventListener, DrawEvents, ScreenPoint } from './api/events.js';
|
|
60
|
+
export type { Position } from 'geojson';
|
|
61
|
+
export type { DrawErrorCode } from './api/errors.js';
|
|
62
|
+
export { DrawError } from './api/errors.js';
|
|
63
|
+
export type { Dataset, DatasetBaseStyle, DatasetCollisionThinning, DatasetEvents, DatasetOptions, DatasetOrder, DatasetPlacement, DatasetProvider, DatasetRow, DatasetsCollection, DatasetThinningStats, DatasetZoomScale, } from './api/datasets.js';
|
|
64
|
+
export type { Store, StoreView, UpdateSource } from './api/extension/store.js';
|
|
65
|
+
export type { ExtensionContext, HitTestContext, ModeContext, NameGenerator, PluginContext, ScreenContext, SnapContext, TerrainAnchors, } from './api/extension/context.js';
|
|
66
|
+
export type { FeatureTypeDefinition, Handle } from './api/extension/feature-type.js';
|
|
67
|
+
export type { DrawKeyEvent, DrawPointerEvent, InputHandlers, ModeFactory, ModeHandler, Modifiers, } from './api/extension/mode.js';
|
|
68
|
+
export type { Plugin } from './api/extension/plugin.js';
|
|
69
|
+
export type { CompanionProvider, HandleProvider, Hit, SnapCandidate, SnapProvider, } from './api/extension/provider.js';
|
|
70
|
+
export type { FeatureRenderer, FillRenderer, LineRenderer, OffsetUniforms, OverlayRenderer, PointRenderer, RenderContext, ShaderData, } from './api/extension/render.js';
|
|
71
|
+
export type { ExtensionsCollections, FeatureTypesCollection, ModesCollection, OverlaysCollection, PluginsCollection, ProvidersCollection, } from './api/extensions.js';
|
|
72
|
+
export { deriveLegend, evaluateStyleRule, getStyleRuleChannel } from './api/model.js';
|
package/dist/index.js
CHANGED
|
@@ -1,20 +1,8 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
export {
|
|
4
|
-
export {
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
|
|
8
|
-
export {
|
|
9
|
-
// Property accessors
|
|
10
|
-
export { getCreatedZoom, getRotation, getScale, setCreatedZoom, setRotation, } from './shared/utils/index.js';
|
|
11
|
-
// WebGL building blocks
|
|
12
|
-
export { resolvePixelRatio } from './shared/utils/index.js';
|
|
13
|
-
export { applyDrawBlendState, calculateLngLatOffset, calculateOffsetUniforms, computeQuadVertices, createProgram, drawBillboardsWithoutDepth, drawQuadSurfaceOnTerrain, getProjectionTransitionUniform, getStrokeDashPattern, OFFSET_MODE_GLSL, ProjectionUniformManager, QUAD_GLYPH_STRIDE, QuadShader, splitIntoDashes, } from './view/index.js';
|
|
14
|
-
export { anchorElevationMeters, anchorGhostOpacity, densifyPath, getAnchorElevationGeneration, getTerrainTessellationStep, metersToMercatorScale, } from './view/index.js';
|
|
15
|
-
export { createOBB, DEFAULT_TILE_SIZE, distanceToOBB, generateCirclePolygon, getOBBAABB, lngLatToMercator, metersToDegreesLat, metersToDegreesLng, pixelsToDegreesLat, pixelsToDegreesLng, rectangleIntersectsOBB, } from './shared/math/index.js';
|
|
16
|
-
export { getContrastColor } from './shared/utils/index.js';
|
|
17
|
-
// Selection UI, hit testing and viewport helpers
|
|
18
|
-
export { PointHitTestStrategy } from './dispatcher/index.js';
|
|
19
|
-
export { createGeometryApi } from './api/index.js';
|
|
20
|
-
export { computeBoundingBox, createFeatureCompanionRegistry, createSelectionExtensionRegistry, DEFAULT_POINT_FRAME_SIZE, DEFAULT_VIEWPORT_EXPANSION_FACTOR, getExpandedViewportBounds, getSelectedFeatureIds, hasZeroArea, } from './view/index.js';
|
|
3
|
+
export { createDraw } from './api/draw.js';
|
|
4
|
+
export { DRAW_PROPERTY_PREFIX, isDrawProperty } from './api/model.js';
|
|
5
|
+
export { MODES } from './api/state.js';
|
|
6
|
+
export { DrawError } from './api/errors.js';
|
|
7
|
+
// Style rule functions
|
|
8
|
+
export { deriveLegend, evaluateStyleRule, getStyleRuleChannel } from './api/model.js';
|
package/dist/messages.d.ts
CHANGED
|
@@ -9,12 +9,12 @@
|
|
|
9
9
|
* - The keys are typed. A value is either a string or a function that formats one (it
|
|
10
10
|
* receives numbers already turned into strings)
|
|
11
11
|
* - `MESSAGES_EN` is the default, in English. The library ships no other language
|
|
12
|
-
* - `
|
|
12
|
+
* - `DrawOptions.messages` overrides part of the table for one instance. The table belongs to
|
|
13
13
|
* the instance and is never module-level state
|
|
14
14
|
* - There is no locale detection and no automatic switching: the host passes the table
|
|
15
15
|
* it wants
|
|
16
16
|
* - The words of the names generated for features, layers and groups are not in this table:
|
|
17
|
-
* they come from the
|
|
17
|
+
* they come from the `autoName` option
|
|
18
18
|
*/
|
|
19
19
|
/**
|
|
20
20
|
* The table of the strings the library returns as values: legend labels and the descriptions
|
|
@@ -22,14 +22,14 @@
|
|
|
22
22
|
*
|
|
23
23
|
* The library builds no such string inline; it reads it from the table of the instance, so
|
|
24
24
|
* the host can show them in its own language. Pass the entries to replace as the `messages`
|
|
25
|
-
* option of `
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
25
|
+
* option of `createDraw`; the entries left out keep the English defaults. A value is a string,
|
|
26
|
+
* or a function that formats one from numbers already turned into strings. There is no locale
|
|
27
|
+
* detection and no other built-in language. The words of generated names ("Layer 1") are
|
|
28
|
+
* translated through the `autoName` option, not here.
|
|
29
29
|
*
|
|
30
30
|
* @example
|
|
31
31
|
* ```ts
|
|
32
|
-
* const draw =
|
|
32
|
+
* const draw = createDraw(map, {
|
|
33
33
|
* messages: {
|
|
34
34
|
* legendOther: 'Sonstige',
|
|
35
35
|
* legendRange: (lower, upper) => `${lower} bis unter ${upper}`,
|
|
@@ -1,222 +1,98 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
import { haversineDistanceMeters, initialBearingDegrees } from '../../geometry/
|
|
4
|
-
import {
|
|
3
|
+
import { haversineDistanceMeters, initialBearingDegrees } from '../../geometry/distance.js';
|
|
4
|
+
import { drawProperties } from '../../shared/properties.js';
|
|
5
5
|
/** Default angle of the radius handle (toward the lower right) */
|
|
6
6
|
const DEFAULT_RADIUS_HANDLE_ANGLE = 135;
|
|
7
7
|
/** Minimum radius (in meters) */
|
|
8
8
|
const MIN_RADIUS_METERS = 1;
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
10
|
+
* The factory of the circle drawing mode
|
|
11
11
|
*
|
|
12
12
|
* @internal
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
enumerable: true,
|
|
30
|
-
configurable: true,
|
|
31
|
-
writable: true,
|
|
32
|
-
value: void 0
|
|
33
|
-
});
|
|
34
|
-
/** Center coordinate of the circle */
|
|
35
|
-
Object.defineProperty(this, "center", {
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true,
|
|
39
|
-
value: null
|
|
40
|
-
});
|
|
41
|
-
/** Radius (in meters) */
|
|
42
|
-
Object.defineProperty(this, "radiusMeters", {
|
|
43
|
-
enumerable: true,
|
|
44
|
-
configurable: true,
|
|
45
|
-
writable: true,
|
|
46
|
-
value: 0
|
|
47
|
-
});
|
|
48
|
-
/** Angle of the radius handle (in degrees) */
|
|
49
|
-
Object.defineProperty(this, "radiusHandleAngle", {
|
|
50
|
-
enumerable: true,
|
|
51
|
-
configurable: true,
|
|
52
|
-
writable: true,
|
|
53
|
-
value: DEFAULT_RADIUS_HANDLE_ANGLE
|
|
54
|
-
});
|
|
55
|
-
/** Drawing phase: 'waiting' = the center is not set yet, 'adjusting' = adjusting the radius */
|
|
56
|
-
Object.defineProperty(this, "phase", {
|
|
57
|
-
enumerable: true,
|
|
58
|
-
configurable: true,
|
|
59
|
-
writable: true,
|
|
60
|
-
value: 'waiting'
|
|
61
|
-
});
|
|
62
|
-
/** The Feature ID that is going to be created */
|
|
63
|
-
Object.defineProperty(this, "pendingFeatureId", {
|
|
64
|
-
enumerable: true,
|
|
65
|
-
configurable: true,
|
|
66
|
-
writable: true,
|
|
67
|
-
value: null
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
onStart(context) {
|
|
71
|
-
this.context = context;
|
|
72
|
-
// Change the cursor to a crosshair
|
|
73
|
-
this.context.map.getCanvas().style.cursor = 'crosshair';
|
|
74
|
-
// Clear the selection (not notified as a change)
|
|
75
|
-
this.context.store.transact(() => {
|
|
76
|
-
this.context.store.setSelection(null, []);
|
|
77
|
-
}, 'silent');
|
|
78
|
-
// Reset the state
|
|
79
|
-
this.reset();
|
|
80
|
-
// Generate the Feature ID in advance
|
|
81
|
-
this.pendingFeatureId = this.context.generateFeatureId();
|
|
82
|
-
}
|
|
83
|
-
onStop() {
|
|
84
|
-
// Restore the cursor
|
|
85
|
-
this.context.map.getCanvas().style.cursor = '';
|
|
86
|
-
// Clear the tentative state
|
|
87
|
-
this.context.store.setTentative(null);
|
|
88
|
-
this.reset();
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* A double click while drawing is two clicks of the drawing; it never zooms the map
|
|
92
|
-
* (consumed by preventing its default action)
|
|
93
|
-
*/
|
|
94
|
-
onDoubleClick(event) {
|
|
95
|
-
event.originalEvent.preventDefault();
|
|
96
|
-
}
|
|
97
|
-
onClick(event) {
|
|
98
|
-
const coord = [event.lngLat.lng, event.lngLat.lat];
|
|
99
|
-
if (this.phase === 'waiting') {
|
|
100
|
-
// Set the center
|
|
101
|
-
this.center = coord;
|
|
102
|
-
this.phase = 'adjusting';
|
|
103
|
-
this.radiusMeters = 0;
|
|
104
|
-
// Update the tentative state
|
|
105
|
-
this.updateTentative();
|
|
106
|
-
}
|
|
107
|
-
else if (this.phase === 'adjusting') {
|
|
108
|
-
// Confirm if the radius is at least the minimum value
|
|
109
|
-
if (this.radiusMeters >= MIN_RADIUS_METERS) {
|
|
110
|
-
this.finishCircle();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
onMouseMove(event) {
|
|
115
|
-
if (this.phase === 'adjusting' && this.center) {
|
|
116
|
-
// Compute the distance from the center to the mouse position
|
|
117
|
-
const mouseCoord = [event.lngLat.lng, event.lngLat.lat];
|
|
118
|
-
this.radiusMeters = haversineDistanceMeters(this.center, mouseCoord);
|
|
119
|
-
// The great-circle bearing from the center to the mouse position. The handle is placed
|
|
120
|
-
// with destinationPoint, the inverse of this bearing, so it lands on the pointer
|
|
121
|
-
this.radiusHandleAngle = initialBearingDegrees(this.center, mouseCoord);
|
|
122
|
-
// Update the tentative state
|
|
123
|
-
this.updateTentative();
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
onKeyDown(event) {
|
|
127
|
-
if (event.key === 'Escape') {
|
|
128
|
-
if (this.phase === 'adjusting') {
|
|
129
|
-
// Cancel if drawing is in progress
|
|
130
|
-
this.reset();
|
|
131
|
-
this.context.store.setTentative(null);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
// Return to the select mode if drawing is not in progress
|
|
135
|
-
this.context.setMode('select');
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Called after an external state change
|
|
141
|
-
*
|
|
142
|
-
* Resets the state of the drawing in progress so that the next drawing operation can start
|
|
143
|
-
* normally.
|
|
144
|
-
*/
|
|
145
|
-
onExternalStateChange() {
|
|
146
|
-
this.reset();
|
|
147
|
-
this.context.store.setTentative(null);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* Confirms the circle
|
|
151
|
-
*/
|
|
152
|
-
finishCircle() {
|
|
153
|
-
if (!this.center || this.radiusMeters < MIN_RADIUS_METERS) {
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
const { store, autoNameGenerator } = this.context;
|
|
157
|
-
// Discard the drawing when no layer can be written any more
|
|
158
|
-
const layerId = resolveCommitLayer(this.context);
|
|
159
|
-
if (layerId === null)
|
|
14
|
+
export const drawCircleMode = (ctx) => {
|
|
15
|
+
/** The center, once the first click set it */
|
|
16
|
+
let center = null;
|
|
17
|
+
let radiusMeters = 0;
|
|
18
|
+
let radiusHandleAngle = DEFAULT_RADIUS_HANDLE_ANGLE;
|
|
19
|
+
/** The values of the circle as it stands */
|
|
20
|
+
const circleProperties = () => drawProperties({ radiusMeters, radiusHandleAngle });
|
|
21
|
+
const reset = () => {
|
|
22
|
+
center = null;
|
|
23
|
+
radiusMeters = 0;
|
|
24
|
+
radiusHandleAngle = DEFAULT_RADIUS_HANDLE_ANGLE;
|
|
25
|
+
ctx.preview.clear();
|
|
26
|
+
};
|
|
27
|
+
const showPreview = () => {
|
|
28
|
+
if (!center)
|
|
160
29
|
return;
|
|
161
|
-
|
|
162
|
-
const autoName = autoNameGenerator.generateName('Circle');
|
|
163
|
-
// Use the ID generated in advance (generate a new one if there is none)
|
|
164
|
-
const featureId = this.pendingFeatureId ?? this.context.generateFeatureId();
|
|
165
|
-
// Create a new circle feature
|
|
166
|
-
const feature = {
|
|
167
|
-
id: featureId,
|
|
30
|
+
ctx.preview.set({
|
|
168
31
|
type: 'Circle',
|
|
169
|
-
coordinates:
|
|
170
|
-
|
|
171
|
-
properties: {
|
|
172
|
-
radiusMeters: this.radiusMeters,
|
|
173
|
-
radiusHandleAngle: this.radiusHandleAngle,
|
|
174
|
-
...createdZoomProperty(this.context),
|
|
175
|
-
// The polygon coordinates for rendering are computed at render time, so they are not saved
|
|
176
|
-
...(autoName !== undefined && { name: autoName }),
|
|
177
|
-
},
|
|
178
|
-
locked: false,
|
|
179
|
-
visible: true,
|
|
180
|
-
};
|
|
181
|
-
// Bundle the feature creation and the selection into a single transaction
|
|
182
|
-
// (so that both are undone at once on undo)
|
|
183
|
-
store.transact(() => {
|
|
184
|
-
store.createFeature(feature);
|
|
185
|
-
// Clear the tentative state
|
|
186
|
-
store.setTentative(null);
|
|
187
|
-
// Select the created feature
|
|
188
|
-
store.setSelection('feature', [feature.id]);
|
|
32
|
+
geometry: { type: 'Point', coordinates: center },
|
|
33
|
+
properties: circleProperties(),
|
|
189
34
|
});
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
this.context.setMode('select');
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Updates the tentative state
|
|
197
|
-
*/
|
|
198
|
-
updateTentative() {
|
|
199
|
-
if (!this.center) {
|
|
200
|
-
this.context.store.setTentative(null);
|
|
35
|
+
};
|
|
36
|
+
const finish = () => {
|
|
37
|
+
if (!center || radiusMeters < MIN_RADIUS_METERS)
|
|
201
38
|
return;
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
39
|
+
const at = center;
|
|
40
|
+
ctx.draw.transact(() => {
|
|
41
|
+
const feature = ctx.commitFeature({
|
|
42
|
+
type: 'Circle',
|
|
43
|
+
geometry: { type: 'Point', coordinates: at },
|
|
44
|
+
properties: circleProperties(),
|
|
45
|
+
});
|
|
46
|
+
if (feature)
|
|
47
|
+
ctx.draw.selection.set('feature', [feature.id]);
|
|
210
48
|
});
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
49
|
+
reset();
|
|
50
|
+
ctx.setMode('select');
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
writes: true,
|
|
54
|
+
onEnter() {
|
|
55
|
+
ctx.cursor.set('crosshair');
|
|
56
|
+
ctx.draw.transact(() => ctx.draw.selection.clear(), { source: 'silent' });
|
|
57
|
+
reset();
|
|
58
|
+
},
|
|
59
|
+
onExit() {
|
|
60
|
+
ctx.cursor.reset();
|
|
61
|
+
reset();
|
|
62
|
+
},
|
|
63
|
+
// What was being drawn is dropped when the state is reset from outside
|
|
64
|
+
onCancel: reset,
|
|
65
|
+
// A double click while drawing is two clicks of the drawing; it never zooms the map
|
|
66
|
+
onDoubleClick: () => true,
|
|
67
|
+
onClick(event) {
|
|
68
|
+
if (!center) {
|
|
69
|
+
center = event.snapped.lngLat;
|
|
70
|
+
radiusMeters = 0;
|
|
71
|
+
showPreview();
|
|
72
|
+
}
|
|
73
|
+
else if (radiusMeters >= MIN_RADIUS_METERS) {
|
|
74
|
+
finish();
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
},
|
|
78
|
+
onPointerMove(event) {
|
|
79
|
+
if (!center)
|
|
80
|
+
return false;
|
|
81
|
+
const from = [center[0], center[1]];
|
|
82
|
+
const to = [event.snapped.lngLat[0], event.snapped.lngLat[1]];
|
|
83
|
+
radiusMeters = haversineDistanceMeters(from, to);
|
|
84
|
+
radiusHandleAngle = initialBearingDegrees(from, to);
|
|
85
|
+
showPreview();
|
|
86
|
+
return false;
|
|
87
|
+
},
|
|
88
|
+
onKeyDown(event) {
|
|
89
|
+
if (event.key !== 'Escape')
|
|
90
|
+
return false;
|
|
91
|
+
if (center)
|
|
92
|
+
reset();
|
|
93
|
+
else
|
|
94
|
+
ctx.setMode('select');
|
|
95
|
+
return true;
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
};
|
|
@@ -1,26 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The layer a drawing mode of the engine commits into
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { EngineModeContext } from '../handler.js';
|
|
5
5
|
/**
|
|
6
6
|
* Resolves the layer a drawing mode commits a new feature into
|
|
7
7
|
*
|
|
8
|
-
* Applies the commit rule of `
|
|
8
|
+
* Applies the commit rule of `EngineModeContext.getCurrentLayerId`: it returns the writable layer,
|
|
9
9
|
* and when no layer can be written any more (the layer was deleted, locked or hidden while
|
|
10
10
|
* drawing), the drawing is discarded instead: the tentative state is cleared and the mode
|
|
11
11
|
* returns to select, which stops the current handler. The caller then returns without
|
|
12
12
|
* creating anything, so no exception reaches the input handling. A plugin mode follows the
|
|
13
|
-
* same rule through the
|
|
13
|
+
* same rule through the EngineModeContext.
|
|
14
14
|
*/
|
|
15
|
-
export declare function resolveCommitLayer(context:
|
|
16
|
-
/**
|
|
17
|
-
* The created zoom a drawing mode writes into the properties of a new feature
|
|
18
|
-
*
|
|
19
|
-
* When the instance lets line widths follow the zoom (`ModeContext.scaleWithZoom`), it is the
|
|
20
|
-
* zoom at the time of the commit, from which the widths grow and shrink with the map. Otherwise
|
|
21
|
-
* nothing is written, and the feature keeps its widths on the screen like one added through
|
|
22
|
-
* the API.
|
|
23
|
-
*/
|
|
24
|
-
export declare function createdZoomProperty(context: ModeContext): {
|
|
25
|
-
createdZoom?: number;
|
|
26
|
-
};
|
|
15
|
+
export declare function resolveCommitLayer(context: EngineModeContext): string | null;
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Resolves the layer a drawing mode commits a new feature into
|
|
5
5
|
*
|
|
6
|
-
* Applies the commit rule of `
|
|
6
|
+
* Applies the commit rule of `EngineModeContext.getCurrentLayerId`: it returns the writable layer,
|
|
7
7
|
* and when no layer can be written any more (the layer was deleted, locked or hidden while
|
|
8
8
|
* drawing), the drawing is discarded instead: the tentative state is cleared and the mode
|
|
9
9
|
* returns to select, which stops the current handler. The caller then returns without
|
|
10
10
|
* creating anything, so no exception reaches the input handling. A plugin mode follows the
|
|
11
|
-
* same rule through the
|
|
11
|
+
* same rule through the EngineModeContext.
|
|
12
12
|
*/
|
|
13
13
|
export function resolveCommitLayer(context) {
|
|
14
14
|
const layerId = context.getCurrentLayerId();
|
|
@@ -18,14 +18,3 @@ export function resolveCommitLayer(context) {
|
|
|
18
18
|
context.setMode('select');
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
22
|
-
* The created zoom a drawing mode writes into the properties of a new feature
|
|
23
|
-
*
|
|
24
|
-
* When the instance lets line widths follow the zoom (`ModeContext.scaleWithZoom`), it is the
|
|
25
|
-
* zoom at the time of the commit, from which the widths grow and shrink with the map. Otherwise
|
|
26
|
-
* nothing is written, and the feature keeps its widths on the screen like one added through
|
|
27
|
-
* the API.
|
|
28
|
-
*/
|
|
29
|
-
export function createdZoomProperty(context) {
|
|
30
|
-
return context.scaleWithZoom ? { createdZoom: context.map.getZoom() } : {};
|
|
31
|
-
}
|