@sakuzu/maplibre-gl-draw 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1016 -2
- package/README.ja.md +39 -19
- package/README.md +41 -21
- package/dist/api/datasets.d.ts +258 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +135 -0
- package/dist/api/draw.js +18 -0
- package/dist/api/drawing.d.ts +87 -0
- package/dist/api/errors.d.ts +35 -0
- package/dist/api/errors.js +35 -0
- package/dist/api/events.d.ts +306 -0
- package/dist/api/extension/context.d.ts +247 -0
- package/dist/api/extension/feature-type.d.ts +129 -0
- package/dist/api/extension/mode.d.ts +123 -0
- package/dist/api/extension/plugin.d.ts +51 -0
- package/dist/api/extension/plugin.js +3 -0
- package/dist/api/extension/provider.d.ts +119 -0
- package/dist/api/extension/provider.js +3 -0
- package/dist/api/extension/render.d.ts +176 -0
- package/dist/api/extension/render.js +3 -0
- package/dist/api/extension/store.d.ts +190 -0
- package/dist/api/extension/store.js +3 -0
- package/dist/api/extensions.d.ts +306 -0
- package/dist/api/extensions.js +3 -0
- package/dist/api/features.d.ts +188 -0
- package/dist/api/features.js +3 -0
- package/dist/api/groups.d.ts +111 -0
- package/dist/api/groups.js +3 -0
- package/dist/api/hidden.d.ts +45 -0
- package/dist/api/hidden.js +3 -0
- package/dist/api/impl/adapters.js +463 -0
- package/dist/api/impl/contexts.js +466 -0
- package/dist/api/impl/create-draw.js +124 -0
- package/dist/api/impl/datasets.js +404 -0
- package/dist/api/impl/destroy-guard.js +74 -0
- package/dist/api/impl/document.js +280 -0
- package/dist/api/impl/drawing.js +180 -0
- package/dist/api/impl/engine-context.d.ts +7 -0
- package/dist/api/{context.js → impl/engine-context.js} +49 -38
- package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
- package/dist/api/impl/events.js +422 -0
- package/dist/api/impl/extension-host.js +361 -0
- package/dist/api/impl/extensions.js +229 -0
- package/dist/api/impl/features.js +445 -0
- package/dist/api/impl/geometry/apply.d.ts +32 -0
- package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
- package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
- package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/split.js +10 -21
- package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
- package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
- package/dist/api/impl/geometry/types.js +3 -0
- package/dist/api/impl/groups.d.ts +3 -0
- package/dist/api/impl/groups.js +268 -0
- package/dist/api/impl/hidden.js +60 -0
- package/dist/api/impl/import-export/constants.d.ts +22 -0
- package/dist/api/impl/import-export/constants.js +24 -0
- package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
- package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
- package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
- package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
- package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
- package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
- package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
- package/dist/api/impl/import-export/image-import.d.ts +16 -0
- package/dist/api/impl/import-export/image-import.js +73 -0
- package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
- package/dist/api/impl/import-export/legacy-image-style.js +49 -0
- package/dist/api/impl/import-export/native-format.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
- package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
- package/dist/api/impl/import-export/native-upgrade.js +139 -0
- package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
- package/dist/api/impl/import-export/style-validation.d.ts +24 -0
- package/dist/api/impl/import-export/style-validation.js +86 -0
- package/dist/api/impl/import-export/types.d.ts +52 -0
- package/dist/api/impl/import-export/types.js +3 -0
- package/dist/api/impl/input.js +180 -0
- package/dist/api/impl/layers.js +307 -0
- package/dist/api/impl/metadata.d.ts +1 -0
- package/dist/api/impl/metadata.js +22 -0
- package/dist/api/impl/options.d.ts +1 -0
- package/dist/api/impl/options.js +822 -0
- package/dist/api/impl/placement.d.ts +1 -0
- package/dist/api/impl/placement.js +138 -0
- package/dist/api/impl/render-context.d.ts +13 -0
- package/dist/api/impl/render-context.js +272 -0
- package/dist/api/impl/rows.d.ts +1 -0
- package/dist/api/impl/rows.js +46 -0
- package/dist/api/impl/selection.d.ts +1 -0
- package/dist/api/impl/selection.js +186 -0
- package/dist/api/impl/shared.d.ts +64 -0
- package/dist/api/impl/shared.js +178 -0
- package/dist/api/impl/validate-extension.d.ts +1 -0
- package/dist/api/impl/validate-extension.js +159 -0
- package/dist/api/layers.d.ts +130 -0
- package/dist/api/layers.js +3 -0
- package/dist/api/metadata.d.ts +18 -0
- package/dist/api/metadata.js +3 -0
- package/dist/api/model.d.ts +487 -0
- package/dist/api/model.js +47 -0
- package/dist/api/options.d.ts +466 -0
- package/dist/api/options.js +3 -0
- package/dist/api/selection.d.ts +94 -0
- package/dist/api/selection.js +3 -0
- package/dist/api/state.d.ts +155 -0
- package/dist/api/state.js +12 -0
- package/dist/{display → dataset}/chunk.d.ts +1 -1
- package/dist/{display → dataset}/chunk.js +4 -3
- package/dist/{display → dataset}/dataset.js +18 -21
- package/dist/dataset/interaction.d.ts +1 -0
- package/dist/{display → dataset}/interaction.js +18 -6
- package/dist/dataset/manager.d.ts +1 -0
- package/dist/dataset/provider.d.ts +1 -0
- package/dist/{display → dataset}/retained.d.ts +1 -1
- package/dist/{display → dataset}/retained.js +8 -7
- package/dist/dataset/source.d.ts +1 -0
- package/dist/{display → dataset}/source.js +17 -4
- package/dist/dataset/spatial.d.ts +1 -0
- package/dist/{display → dataset}/spatial.js +1 -1
- package/dist/dataset/style.d.ts +1 -0
- package/dist/{display → dataset}/style.js +1 -1
- package/dist/dataset/table-source.d.ts +1 -0
- package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
- package/dist/{display → dataset}/thinning.d.ts +0 -10
- package/dist/{display → dataset}/thinning.js +3 -2
- package/dist/dataset/triangulation.d.ts +1 -0
- package/dist/{display → dataset}/triangulation.js +0 -0
- package/dist/{display → dataset}/types.d.ts +82 -121
- package/dist/dataset/types.js +61 -0
- package/dist/dispatcher/hit-test/box-strategies.js +13 -13
- package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
- package/dist/dispatcher/hit-test/globe-shape.js +5 -4
- package/dist/dispatcher/hit-test/service.d.ts +17 -0
- package/dist/dispatcher/hit-test/service.js +80 -16
- package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
- package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
- package/dist/dispatcher/hit-test/strategies/image.js +6 -18
- package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
- package/dist/dispatcher/hit-test/strategies/line.js +9 -2
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
- package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
- package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
- package/dist/dispatcher/hit-test/strategies/point.js +8 -4
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
- package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
- package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
- package/dist/dispatcher/input-router.js +152 -69
- package/dist/dispatcher/normalizer.js +6 -2
- package/dist/dispatcher/types.d.ts +6 -1
- package/dist/extension/feature-handler.d.ts +1 -182
- package/dist/extension/index.d.ts +4 -7
- package/dist/extension/renderers.d.ts +1 -208
- package/dist/geometry/angle.d.ts +0 -8
- package/dist/geometry/angle.js +0 -8
- package/dist/geometry/bbox.d.ts +4 -12
- package/dist/geometry/bbox.js +4 -12
- package/dist/geometry/boolean.d.ts +0 -51
- package/dist/geometry/boolean.js +0 -51
- package/dist/geometry/buffer.d.ts +0 -26
- package/dist/geometry/buffer.js +0 -26
- package/dist/geometry/circle.d.ts +0 -9
- package/dist/geometry/circle.js +0 -9
- package/dist/geometry/coords.d.ts +0 -16
- package/dist/geometry/coords.js +0 -16
- package/dist/geometry/distance.d.ts +0 -24
- package/dist/geometry/distance.js +0 -24
- package/dist/geometry/errors.d.ts +21 -36
- package/dist/geometry/errors.js +49 -29
- package/dist/geometry/geojson.d.ts +81 -0
- package/dist/geometry/geojson.js +164 -0
- package/dist/geometry/index.d.ts +38 -23
- package/dist/geometry/index.js +43 -31
- package/dist/geometry/measure.d.ts +0 -27
- package/dist/geometry/measure.js +0 -27
- package/dist/geometry/predicates.d.ts +0 -9
- package/dist/geometry/predicates.js +0 -9
- package/dist/geometry/public-bounds.d.ts +26 -0
- package/dist/geometry/public-bounds.js +30 -0
- package/dist/geometry/public-combine.d.ts +78 -0
- package/dist/geometry/public-combine.js +82 -0
- package/dist/geometry/public-create.d.ts +54 -0
- package/dist/geometry/public-create.js +70 -0
- package/dist/geometry/public-measure.d.ts +170 -0
- package/dist/geometry/public-measure.js +283 -0
- package/dist/geometry/public-predicates.d.ts +54 -0
- package/dist/geometry/public-predicates.js +144 -0
- package/dist/geometry/public-repair.d.ts +75 -0
- package/dist/geometry/public-repair.js +77 -0
- package/dist/geometry/simplify.d.ts +0 -7
- package/dist/geometry/simplify.js +0 -7
- package/dist/geometry/split.d.ts +0 -20
- package/dist/geometry/split.js +0 -20
- package/dist/geometry/units.d.ts +20 -12
- package/dist/geometry/units.js +20 -12
- package/dist/index.d.ts +52 -66
- package/dist/index.js +6 -18
- package/dist/messages.d.ts +7 -7
- package/dist/modes/draw/circle.js +83 -207
- package/dist/modes/draw/commit-layer.d.ts +5 -16
- package/dist/modes/draw/commit-layer.js +2 -13
- package/dist/modes/draw/freehand.js +108 -246
- package/dist/modes/draw/image.js +4 -2
- package/dist/modes/draw/index.d.ts +5 -5
- package/dist/modes/draw/index.js +5 -5
- package/dist/modes/draw/line.js +18 -354
- package/dist/modes/draw/point.js +29 -78
- package/dist/modes/draw/polygon.js +23 -368
- package/dist/modes/draw/trace-support.d.ts +43 -36
- package/dist/modes/draw/trace-support.js +95 -98
- package/dist/modes/draw/vertex-drawing.d.ts +1 -0
- package/dist/modes/draw/vertex-drawing.js +176 -0
- package/dist/modes/handler.d.ts +1 -285
- package/dist/modes/manager.d.ts +2 -2
- package/dist/modes/manager.js +3 -0
- package/dist/modes/select/box-selection.d.ts +3 -3
- package/dist/modes/select/box-selection.js +2 -1
- package/dist/modes/select/click-handler.d.ts +5 -5
- package/dist/modes/select/click-handler.js +22 -20
- package/dist/modes/select/cursor-handler.d.ts +2 -2
- package/dist/modes/select/drag/intermediate-writes.js +1 -1
- package/dist/modes/select/drag/move.js +3 -3
- package/dist/modes/select/drag/operation.d.ts +3 -3
- package/dist/modes/select/drag/radius.js +5 -4
- package/dist/modes/select/drag/transform.d.ts +2 -2
- package/dist/modes/select/drag/transform.js +11 -5
- package/dist/modes/select/drag/vertex.d.ts +2 -2
- package/dist/modes/select/drag/vertex.js +13 -8
- package/dist/modes/select/drag-handler.js +44 -25
- package/dist/modes/select/mode.js +17 -17
- package/dist/modes/select/shortcut-handler.d.ts +8 -8
- package/dist/modes/select/shortcut-handler.js +9 -7
- package/dist/operations/layer-operations.js +29 -168
- package/dist/operations/resize.d.ts +2 -2
- package/dist/operations/resize.js +5 -5
- package/dist/operations/rotate.js +5 -5
- package/dist/operations/selection-operations.d.ts +16 -1
- package/dist/operations/selection-operations.js +28 -13
- package/dist/operations/shared-vertex.js +4 -2
- package/dist/operations/trace-graph.d.ts +0 -18
- package/dist/operations/trace-graph.js +0 -18
- package/dist/operations/vertex.js +36 -35
- package/dist/shared/color.d.ts +1 -0
- package/dist/shared/color.js +245 -0
- package/dist/shared/config/constants.d.ts +1 -54
- package/dist/shared/config/constants.js +1 -58
- package/dist/shared/config/feature-style.d.ts +16 -13
- package/dist/shared/config/feature-style.js +9 -0
- package/dist/shared/config/rendering.d.ts +3 -3
- package/dist/shared/config/selection-highlight.d.ts +0 -15
- package/dist/shared/config/selection-highlight.js +4 -7
- package/dist/shared/config/selection.d.ts +2 -32
- package/dist/shared/config/selection.js +0 -18
- package/dist/shared/config/topology.d.ts +2 -2
- package/dist/shared/config/trace.d.ts +4 -4
- package/dist/shared/math/angle.d.ts +1 -1
- package/dist/shared/math/angle.js +1 -1
- package/dist/shared/math/circle.d.ts +1 -1
- package/dist/shared/math/circle.js +1 -1
- package/dist/shared/math/distance.d.ts +2 -1
- package/dist/shared/math/distance.js +3 -2
- package/dist/shared/math/index.d.ts +1 -1
- package/dist/shared/math/index.js +1 -1
- package/dist/shared/math/transform.d.ts +23 -0
- package/dist/shared/math/transform.js +47 -28
- package/dist/shared/properties.d.ts +18 -0
- package/dist/shared/properties.js +129 -0
- package/dist/shared/types/events.d.ts +15 -7
- package/dist/shared/types/model.d.ts +109 -159
- package/dist/shared/types/style.d.ts +1 -1
- package/dist/shared/utils/color.d.ts +2 -36
- package/dist/shared/utils/color.js +13 -70
- package/dist/shared/utils/coordinates.d.ts +30 -4
- package/dist/shared/utils/coordinates.js +56 -10
- package/dist/shared/utils/event-emitter.d.ts +1 -262
- package/dist/shared/utils/event-emitter.js +4 -3
- package/dist/shared/utils/feature-bbox.js +8 -7
- package/dist/shared/utils/feature-segments.js +5 -4
- package/dist/shared/utils/image.d.ts +0 -4
- package/dist/shared/utils/image.js +0 -6
- package/dist/shared/utils/name-generator.d.ts +14 -20
- package/dist/shared/utils/name-generator.js +20 -3
- package/dist/shared/utils/pixel-ratio.d.ts +9 -3
- package/dist/shared/utils/pixel-ratio.js +13 -4
- package/dist/shared/utils/property.d.ts +7 -50
- package/dist/shared/utils/property.js +22 -87
- package/dist/snapping/custom-targets.js +21 -4
- package/dist/snapping/indicator.js +20 -11
- package/dist/snapping/providers/display.d.ts +6 -1
- package/dist/snapping/providers/display.js +2 -1
- package/dist/snapping/providers/guide.d.ts +3 -43
- package/dist/snapping/providers/guide.js +1 -44
- package/dist/snapping/providers/intersection.js +1 -1
- package/dist/snapping/providers/store.js +3 -3
- package/dist/snapping/service.js +18 -7
- package/dist/snapping/types.d.ts +9 -35
- package/dist/store/draw-store.js +233 -142
- package/dist/store/local-visibility.d.ts +11 -6
- package/dist/store/local-visibility.js +38 -7
- package/dist/store/lock.d.ts +0 -6
- package/dist/store/lock.js +0 -6
- package/dist/store/memory/change-bus.d.ts +3 -3
- package/dist/store/memory/change-bus.js +12 -0
- package/dist/store/memory/file-store.d.ts +2 -2
- package/dist/store/memory/ui-state.d.ts +1 -51
- package/dist/store/memory/ui-state.js +122 -134
- package/dist/store/memory.d.ts +1 -8
- package/dist/store/memory.js +249 -45
- package/dist/store/ordering.d.ts +9 -0
- package/dist/store/ordering.js +17 -0
- package/dist/store/spatial/spatial-index.d.ts +1 -1
- package/dist/store/spatial/spatial-index.js +1 -1
- package/dist/store/spatial/store-spatial-index.d.ts +3 -1
- package/dist/store/spatial/store-spatial-index.js +9 -3
- package/dist/store/store.d.ts +66 -107
- package/dist/store/types.d.ts +1 -1
- package/dist/store/writable-layer.d.ts +1 -1
- package/dist/store/writable-layer.js +2 -2
- package/dist/table/builder.d.ts +83 -0
- package/dist/table/builder.js +381 -0
- package/dist/table/index.d.ts +37 -0
- package/dist/table/index.js +5 -0
- package/dist/table/packed-rtree.d.ts +1 -0
- package/dist/{display → table}/packed-rtree.js +1 -1
- package/dist/table/partition.d.ts +1 -0
- package/dist/{display → table}/partition.js +3 -3
- package/dist/table/prepare.d.ts +44 -0
- package/dist/table/prepare.js +136 -0
- package/dist/table/table.d.ts +1 -0
- package/dist/{display/columnar → table}/table.js +29 -25
- package/dist/{display/columnar → table}/types.d.ts +68 -72
- package/dist/table/types.js +3 -0
- package/dist/view/coordinator.js +4 -3
- package/dist/view/feature-companion.d.ts +13 -7
- package/dist/view/feature-companion.js +11 -3
- package/dist/view/globe-subdivision.js +3 -3
- package/dist/view/layer/attach.d.ts +1 -1
- package/dist/view/layer/attach.js +1 -1
- package/dist/view/layer/custom-layer.js +40 -11
- package/dist/view/layer/display-list.js +2 -1
- package/dist/view/layer/drape-planner.d.ts +2 -2
- package/dist/view/layer/frame-render.d.ts +3 -3
- package/dist/view/layer/frame-render.js +7 -2
- package/dist/view/layer/frame-state.d.ts +6 -6
- package/dist/view/layer/index.d.ts +2 -2
- package/dist/view/layer/index.js +1 -1
- package/dist/view/layer/render.d.ts +4 -4
- package/dist/view/layer/render.js +3 -8
- package/dist/view/layer/renderers.d.ts +2 -2
- package/dist/view/layer/renderers.js +1 -1
- package/dist/view/layer/slot-manager.d.ts +2 -2
- package/dist/view/layer/slot-manager.js +4 -4
- package/dist/view/layer/slots.d.ts +2 -2
- package/dist/view/layer/slots.js +1 -1
- package/dist/view/layer/store-retained-bbox.js +3 -2
- package/dist/view/layer/store-retained-classify.d.ts +5 -7
- package/dist/view/layer/store-retained-classify.js +19 -7
- package/dist/view/layer/store-retained-collect.js +8 -7
- package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
- package/dist/view/layer/store-retained-coord-patch.js +13 -4
- package/dist/view/layer/store-retained-immediate.d.ts +3 -3
- package/dist/view/layer/store-retained-immediate.js +3 -8
- package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
- package/dist/view/layer/store-retained.d.ts +2 -2
- package/dist/view/layer/store-retained.js +1 -1
- package/dist/view/renderers/batch-manager.js +8 -7
- package/dist/view/renderers/drawer.js +21 -15
- package/dist/view/renderers/image.js +13 -39
- package/dist/view/renderers/line/line-types.d.ts +3 -3
- package/dist/view/renderers/line/sdf-line.js +3 -1
- package/dist/view/renderers/point/billboard-depth.js +1 -1
- package/dist/view/renderers/point/point-instance.js +1 -1
- package/dist/view/renderers/point/point-shape.js +2 -2
- package/dist/view/renderers/point/point-style.js +48 -4
- package/dist/view/renderers/polygon/batch.js +1 -2
- package/dist/view/renderers/polygon/fill.js +3 -1
- package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
- package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
- package/dist/view/renderers/stroke.js +3 -1
- package/dist/view/shaders/helpers.d.ts +2 -42
- package/dist/view/shaders/helpers.js +0 -6
- package/dist/view/shaders/projection.d.ts +15 -7
- package/dist/view/shaders/projection.js +23 -6
- package/dist/view/shaders/quad.d.ts +16 -12
- package/dist/view/shaders/quad.js +34 -13
- package/dist/view/style-rule.d.ts +5 -42
- package/dist/view/style-rule.js +20 -44
- package/dist/view/terrain/binding.d.ts +1 -0
- package/dist/view/terrain/binding.js +29 -0
- package/dist/view/terrain/context.d.ts +3 -4
- package/dist/view/terrain/context.js +4 -5
- package/dist/view/terrain/drape/geometry.js +1 -1
- package/dist/view/terrain/drape/pass.d.ts +1 -1
- package/dist/view/terrain/drape/pass.js +8 -7
- package/dist/view/terrain/polygon.d.ts +9 -5
- package/dist/view/terrain/polygon.js +16 -2
- package/dist/view/terrain/state.d.ts +1 -1
- package/dist/view/terrain/state.js +1 -1
- package/dist/view/terrain/tessellation.d.ts +2 -2
- package/dist/view/terrain/tessellation.js +1 -1
- package/dist/view/ui/auxiliary-handles.d.ts +6 -29
- package/dist/view/ui/bounds.js +8 -12
- package/dist/view/ui/handle-test.js +2 -2
- package/dist/view/ui/handle-thinning.js +17 -17
- package/dist/view/ui/handles.js +21 -13
- package/dist/view/ui/helper.d.ts +1 -1
- package/dist/view/ui/helper.js +1 -1
- package/dist/view/ui/index.d.ts +1 -1
- package/dist/view/ui/selection-scope.js +4 -2
- package/dist/view/ui/selection-ui/bounding-box.js +6 -6
- package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
- package/dist/view/ui/selection-ui/extension-registry.js +70 -7
- package/dist/view/ui/selection-ui/index.d.ts +2 -2
- package/dist/view/ui/selection-ui/index.js +1 -1
- package/dist/view/ui/selection-ui/renderer.js +15 -38
- package/dist/view/ui/selection-ui/types.d.ts +17 -2
- package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
- package/dist/view/ui/selection-ui-drawer.js +63 -2
- package/dist/view/ui/tentative.js +1 -1
- package/dist/webgl/index.d.ts +65 -0
- package/dist/webgl/index.js +62 -0
- package/package.json +20 -9
- package/dist/api/api.d.ts +0 -1259
- package/dist/api/api.js +0 -86
- package/dist/api/context.d.ts +0 -173
- package/dist/api/display-api.js +0 -23
- package/dist/api/event-api.d.ts +0 -13
- package/dist/api/event-api.js +0 -17
- package/dist/api/extension-api.d.ts +0 -46
- package/dist/api/extension-api.js +0 -85
- package/dist/api/feature-api.d.ts +0 -11
- package/dist/api/feature-api.js +0 -101
- package/dist/api/geometry/apply.d.ts +0 -51
- package/dist/api/geometry/boolean.d.ts +0 -28
- package/dist/api/geometry/boolean.js +0 -65
- package/dist/api/geometry/types.d.ts +0 -31
- package/dist/api/geometry-operations.d.ts +0 -162
- package/dist/api/geometry-operations.js +0 -94
- package/dist/api/group-api.d.ts +0 -10
- package/dist/api/group-api.js +0 -78
- package/dist/api/import-export/constants.d.ts +0 -29
- package/dist/api/import-export/constants.js +0 -40
- package/dist/api/import-export/file-name.d.ts +0 -10
- package/dist/api/import-export/file-name.js +0 -20
- package/dist/api/import-export/geojson-export.d.ts +0 -19
- package/dist/api/import-export/image-import.d.ts +0 -12
- package/dist/api/import-export/image-import.js +0 -53
- package/dist/api/import-export/index.d.ts +0 -9
- package/dist/api/import-export/index.js +0 -107
- package/dist/api/import-export/native-format.d.ts +0 -15
- package/dist/api/import-export/style-validation.d.ts +0 -27
- package/dist/api/import-export/style-validation.js +0 -49
- package/dist/api/import-export/types.d.ts +0 -26
- package/dist/api/index.d.ts +0 -15
- package/dist/api/index.js +0 -3
- package/dist/api/input-api.d.ts +0 -158
- package/dist/api/input-api.js +0 -144
- package/dist/api/instance-api.d.ts +0 -38
- package/dist/api/instance-api.js +0 -136
- package/dist/api/layer-api.d.ts +0 -12
- package/dist/api/layer-api.js +0 -62
- package/dist/api/selection-api.d.ts +0 -7
- package/dist/api/selection-api.js +0 -78
- package/dist/api/snapping-api.d.ts +0 -125
- package/dist/api/snapping-api.js +0 -50
- package/dist/api/topology-api.d.ts +0 -30
- package/dist/api/topology-api.js +0 -16
- package/dist/api/tracing-api.d.ts +0 -31
- package/dist/api/tracing-api.js +0 -16
- package/dist/dispatcher/hit-test/index.d.ts +0 -14
- package/dist/dispatcher/hit-test/index.js +0 -9
- package/dist/dispatcher/index.d.ts +0 -15
- package/dist/dispatcher/index.js +0 -3
- package/dist/display/columnar/index.d.ts +0 -12
- package/dist/display/columnar/index.js +0 -13
- package/dist/display/columnar/prepare.d.ts +0 -42
- package/dist/display/columnar/prepare.js +0 -116
- package/dist/display/index.d.ts +0 -13
- package/dist/display/types.js +0 -43
- package/dist/maplibre-gl-draw.d.ts +0 -47
- package/dist/modes/cursor.js +0 -72
- package/dist/modes/index.d.ts +0 -7
- package/dist/operations/index.d.ts +0 -9
- package/dist/operations/index.js +0 -3
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/mutation-hooks.d.ts +0 -28
- package/dist/plugins/mutation-hooks.js +0 -84
- package/dist/plugins/plugin-context.js +0 -367
- package/dist/plugins/plugin-manager.d.ts +0 -103
- package/dist/plugins/plugin-manager.js +0 -316
- package/dist/plugins/plugin.d.ts +0 -529
- package/dist/shared/config/index.d.ts +0 -17
- package/dist/shared/config/index.js +0 -8
- package/dist/shared/utils/index.d.ts +0 -15
- package/dist/shared/utils/index.js +0 -24
- package/dist/snapping/index.d.ts +0 -14
- package/dist/snapping/index.js +0 -4
- package/dist/store/change-merger.js +0 -102
- package/dist/store/event-bridge.js +0 -161
- package/dist/store/index.d.ts +0 -12
- package/dist/store/index.js +0 -4
- package/dist/view/index.d.ts +0 -47
- package/dist/view/index.js +0 -20
- /package/dist/api/{geometry/types.js → datasets.js} +0 -0
- /package/dist/api/{import-export/types.js → document.js} +0 -0
- /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
- /package/dist/{display/index.js → api/events.js} +0 -0
- /package/dist/{modes/index.js → api/extension/context.js} +0 -0
- /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
- /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
- /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
- /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
- /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
- /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
- /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
- /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
- /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
- /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
- /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
- /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
- /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
- /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
- /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
- /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
- /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
- /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
- /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
- /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
- /package/dist/{display → dataset}/chunk-set.js +0 -0
- /package/dist/{display → dataset}/dataset.d.ts +0 -0
- /package/dist/{display → dataset}/manager.js +0 -0
- /package/dist/{display → dataset}/provider.js +0 -0
- /package/dist/{display → dataset}/selection.d.ts +0 -0
- /package/dist/{display → dataset}/selection.js +0 -0
|
@@ -150,5 +150,14 @@ export function mergeFeatureStyleConfig(base, override) {
|
|
|
150
150
|
...override.tentative?.circleRadiusHandle,
|
|
151
151
|
},
|
|
152
152
|
},
|
|
153
|
+
...mergeOptionalPart('circle', base, override),
|
|
154
|
+
...mergeOptionalPart('image', base, override),
|
|
153
155
|
};
|
|
154
156
|
}
|
|
157
|
+
/** An optional part of the configuration: the override over the base, when either has it */
|
|
158
|
+
function mergeOptionalPart(key, base, override) {
|
|
159
|
+
const value = override[key] ?? base[key];
|
|
160
|
+
return value === undefined
|
|
161
|
+
? {}
|
|
162
|
+
: { [key]: structuredClone(value) };
|
|
163
|
+
}
|
|
@@ -43,8 +43,8 @@ export interface BoxSelectionStyleConfig {
|
|
|
43
43
|
/**
|
|
44
44
|
* Rendering settings: the look of the box selection and two switches of the renderer
|
|
45
45
|
*
|
|
46
|
-
*
|
|
47
|
-
* the ones left out keep their defaults.
|
|
46
|
+
* The engine reads them from the `rendering` and `selectionStyle` options of `createDraw`,
|
|
47
|
+
* translated to this shape; the ones left out keep their defaults.
|
|
48
48
|
*/
|
|
49
49
|
export interface RenderingConfig {
|
|
50
50
|
/**
|
|
@@ -85,7 +85,7 @@ export interface RenderingConfig {
|
|
|
85
85
|
*
|
|
86
86
|
* A complete frame is not yet a complete picture: the map's tiles and the DEM arrive
|
|
87
87
|
* asynchronously. Wait for the map's `idle`, then for
|
|
88
|
-
*
|
|
88
|
+
* `draw.hasPendingWork()` to return false, which also covers the work that no
|
|
89
89
|
* setting can make synchronous (the responses of a provider, an overlay renderer that
|
|
90
90
|
* prepares resources over several frames).
|
|
91
91
|
*
|
|
@@ -1,18 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* How the selection highlight of datasets looks
|
|
3
|
-
*
|
|
4
|
-
* Two rendering paths read the same values.
|
|
5
|
-
*
|
|
6
|
-
* - Immediate mode (`highlightFeature` in `display/selection.ts`). Draws points, and the
|
|
7
|
-
* polygons and lines that do not go through the analysis drape (dashed outlines and so on)
|
|
8
|
-
* - Analysis drape (`view/terrain/drape/renderer.ts`). Draws the selection highlight for the
|
|
9
|
-
* band (z > 11) that draws polygons and lines as pixels of the ground surface
|
|
10
|
-
*
|
|
11
|
-
* Putting separate constants in the two places would make the color or the width change when
|
|
12
|
-
* crossing a band. This single file owns the values.
|
|
13
|
-
*
|
|
14
|
-
* This file imports nothing, so that it depends on neither path.
|
|
15
|
-
*/
|
|
16
1
|
/** Base color of the selection highlight (#FF2D55, the same as the selection UI) */
|
|
17
2
|
export declare const SELECTION_HIGHLIGHT_COLOR = "#FF2D55";
|
|
18
3
|
/** Opacity of the polygon fill of the selection highlight */
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Two rendering paths read the same values.
|
|
7
7
|
*
|
|
8
|
-
* - Immediate mode (`highlightFeature` in `
|
|
8
|
+
* - Immediate mode (`highlightFeature` in `dataset/selection.ts`). Draws points, and the
|
|
9
9
|
* polygons and lines that do not go through the analysis drape (dashed outlines and so on)
|
|
10
10
|
* - Analysis drape (`view/terrain/drape/renderer.ts`). Draws the selection highlight for the
|
|
11
11
|
* band (z > 11) that draws polygons and lines as pixels of the ground surface
|
|
@@ -13,8 +13,9 @@
|
|
|
13
13
|
* Putting separate constants in the two places would make the color or the width change when
|
|
14
14
|
* crossing a band. This single file owns the values.
|
|
15
15
|
*
|
|
16
|
-
* This file imports
|
|
16
|
+
* This file imports only the color parser, so that it depends on neither path.
|
|
17
17
|
*/
|
|
18
|
+
import { toColor } from '../color.js';
|
|
18
19
|
/** Base color of the selection highlight (#FF2D55, the same as the selection UI) */
|
|
19
20
|
export const SELECTION_HIGHLIGHT_COLOR = '#FF2D55';
|
|
20
21
|
/** Opacity of the polygon fill of the selection highlight */
|
|
@@ -28,8 +29,4 @@ export const SELECTION_HIGHLIGHT_RING_EXTRA = 3;
|
|
|
28
29
|
*
|
|
29
30
|
* Used to pass it to a shader uniform (the color is a constant, so it is parsed only once).
|
|
30
31
|
*/
|
|
31
|
-
export const SELECTION_HIGHLIGHT_RGB =
|
|
32
|
-
Number.parseInt(SELECTION_HIGHLIGHT_COLOR.slice(1, 3), 16) / 255,
|
|
33
|
-
Number.parseInt(SELECTION_HIGHLIGHT_COLOR.slice(3, 5), 16) / 255,
|
|
34
|
-
Number.parseInt(SELECTION_HIGHLIGHT_COLOR.slice(5, 7), 16) / 255,
|
|
35
|
-
];
|
|
32
|
+
export const SELECTION_HIGHLIGHT_RGB = toColor(SELECTION_HIGHLIGHT_COLOR).slice(0, 3);
|
|
@@ -137,8 +137,8 @@ export interface RadiusLineStyle {
|
|
|
137
137
|
/**
|
|
138
138
|
* How the selection UI looks: the box around the selection and its handles
|
|
139
139
|
*
|
|
140
|
-
*
|
|
141
|
-
* the parts left out keep their defaults. Sizes and widths are in CSS pixels and stay the
|
|
140
|
+
* The engine reads it from the `selectionStyle` option of `createDraw`, translated to this
|
|
141
|
+
* shape; the parts left out keep their defaults. Sizes and widths are in CSS pixels and stay the
|
|
142
142
|
* same at every zoom.
|
|
143
143
|
*
|
|
144
144
|
* A single selection shows the box with the resize handles at its corners and the rotate
|
|
@@ -146,18 +146,6 @@ export interface RadiusLineStyle {
|
|
|
146
146
|
* its center marker, radius line and radius handle. A multiple selection shows one box around
|
|
147
147
|
* every selected feature, with the resize and rotate handles, and a box without handles around
|
|
148
148
|
* each feature. A locked feature shows the box without handles.
|
|
149
|
-
*
|
|
150
|
-
* @example
|
|
151
|
-
* ```ts
|
|
152
|
-
* const draw = createMapLibreGLDraw(map, {
|
|
153
|
-
* selectionStyle: {
|
|
154
|
-
* boundingBox: {
|
|
155
|
-
* stroke: { width: 1, color: [0, 0.4, 1, 1], opacity: 1, lineStyle: 'solid' },
|
|
156
|
-
* margin: 6,
|
|
157
|
-
* },
|
|
158
|
-
* },
|
|
159
|
-
* });
|
|
160
|
-
* ```
|
|
161
149
|
*/
|
|
162
150
|
export interface SelectionUIConfig {
|
|
163
151
|
/**
|
|
@@ -213,24 +201,6 @@ export interface SelectionUIConfig {
|
|
|
213
201
|
* Default selection UI configuration
|
|
214
202
|
*/
|
|
215
203
|
export declare const DEFAULT_SELECTION_CONFIG: SelectionUIConfig;
|
|
216
|
-
/**
|
|
217
|
-
* Style changes on hover
|
|
218
|
-
*/
|
|
219
|
-
export declare const HOVER_STYLE_MODIFIERS: {
|
|
220
|
-
/** Enlargement factor for the size */
|
|
221
|
-
sizeMultiplier: number;
|
|
222
|
-
/** Increase in opacity */
|
|
223
|
-
opacityIncrease: number;
|
|
224
|
-
};
|
|
225
|
-
/**
|
|
226
|
-
* Style changes while dragging
|
|
227
|
-
*/
|
|
228
|
-
export declare const DRAGGING_STYLE_MODIFIERS: {
|
|
229
|
-
/** Reduction factor for the size */
|
|
230
|
-
sizeMultiplier: number;
|
|
231
|
-
/** Opacity */
|
|
232
|
-
opacity: number;
|
|
233
|
-
};
|
|
234
204
|
/**
|
|
235
205
|
* Threshold at which handle thinning kicks in
|
|
236
206
|
*
|
|
@@ -127,24 +127,6 @@ export const DEFAULT_SELECTION_CONFIG = {
|
|
|
127
127
|
},
|
|
128
128
|
},
|
|
129
129
|
};
|
|
130
|
-
/**
|
|
131
|
-
* Style changes on hover
|
|
132
|
-
*/
|
|
133
|
-
export const HOVER_STYLE_MODIFIERS = {
|
|
134
|
-
/** Enlargement factor for the size */
|
|
135
|
-
sizeMultiplier: 1.2,
|
|
136
|
-
/** Increase in opacity */
|
|
137
|
-
opacityIncrease: 0.2,
|
|
138
|
-
};
|
|
139
|
-
/**
|
|
140
|
-
* Style changes while dragging
|
|
141
|
-
*/
|
|
142
|
-
export const DRAGGING_STYLE_MODIFIERS = {
|
|
143
|
-
/** Reduction factor for the size */
|
|
144
|
-
sizeMultiplier: 0.9,
|
|
145
|
-
/** Opacity */
|
|
146
|
-
opacity: 0.8,
|
|
147
|
-
};
|
|
148
130
|
/**
|
|
149
131
|
* Threshold at which handle thinning kicks in
|
|
150
132
|
*
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
/**
|
|
9
9
|
* Settings that keep a boundary shared by adjacent features intact while it is edited
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* The engine reads them from the `topology` option of `createDraw`, which
|
|
12
|
+
* `draw.options.update` changes later. Everything is off by default.
|
|
13
13
|
*/
|
|
14
14
|
export interface TopologyConfig {
|
|
15
15
|
/**
|
|
@@ -5,15 +5,15 @@
|
|
|
5
5
|
* and takes in its vertex sequence (edge tracing). It is enabled by default; when disabled,
|
|
6
6
|
* drawing behaves exactly as it did before tracing was introduced.
|
|
7
7
|
*
|
|
8
|
-
* The configuration object is shared as the same instance between
|
|
9
|
-
* When `draw.
|
|
8
|
+
* The configuration object is shared as the same instance between the context of the engine
|
|
9
|
+
* and the modes. When `draw.options.update` rewrites this object, the drawing modes run with the new
|
|
10
10
|
* value from the next click or move onward.
|
|
11
11
|
*/
|
|
12
12
|
/**
|
|
13
13
|
* The setting of edge tracing: following the boundary of an existing feature while drawing
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
* `draw.
|
|
15
|
+
* The engine reads it from the `tracing` option of `createDraw`, which
|
|
16
|
+
* `draw.options.update` changes later.
|
|
17
17
|
*/
|
|
18
18
|
export interface TraceOptions {
|
|
19
19
|
/**
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* radius handle.
|
|
6
6
|
*/
|
|
7
7
|
import type { Coordinate } from '../types/model.js';
|
|
8
|
-
export { getPointAtAngle } from '../../geometry/
|
|
8
|
+
export { getPointAtAngle } from '../../geometry/angle.js';
|
|
9
9
|
/**
|
|
10
10
|
* Computes the angle between two points (the bearing as seen from the center)
|
|
11
11
|
*
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { toRadians } from './distance.js';
|
|
4
4
|
// The actual generation of a coordinate from a bearing lives in the geometry module (single
|
|
5
5
|
// implementation)
|
|
6
|
-
export { getPointAtAngle } from '../../geometry/
|
|
6
|
+
export { getPointAtAngle } from '../../geometry/angle.js';
|
|
7
7
|
/**
|
|
8
8
|
* Computes the angle between two points (the bearing as seen from the center)
|
|
9
9
|
*
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Coordinate } from '../types/model.js';
|
|
2
|
-
export { haversineDistanceMeters
|
|
2
|
+
export { haversineDistanceMeters } from '../../geometry/distance.js';
|
|
3
|
+
export { toDegrees, toRadians } from '../../geometry/units.js';
|
|
3
4
|
/**
|
|
4
5
|
* Distance between two points (a simple version that returns a distance in degrees from
|
|
5
6
|
* coordinates in degrees)
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Distance computation utilities
|
|
5
5
|
*/
|
|
6
|
-
import { toRadians } from '../../geometry/
|
|
6
|
+
import { toRadians } from '../../geometry/units.js';
|
|
7
7
|
import { DEFAULT_TILE_SIZE, EARTH } from './constants.js';
|
|
8
8
|
// The actual angle conversion and geodesic distance live in the geometry module (single
|
|
9
9
|
// implementation)
|
|
10
|
-
export { haversineDistanceMeters
|
|
10
|
+
export { haversineDistanceMeters } from '../../geometry/distance.js';
|
|
11
|
+
export { toDegrees, toRadians } from '../../geometry/units.js';
|
|
11
12
|
/**
|
|
12
13
|
* Distance between two points (a simple version that returns a distance in degrees from
|
|
13
14
|
* coordinates in degrees)
|
|
@@ -14,4 +14,4 @@ export type { OBB } from './obb.js';
|
|
|
14
14
|
export { createOBB, distanceToOBB, getOBBAABB, getOBBCorners, pointInOBB } from './obb.js';
|
|
15
15
|
export { computeRotatedQuadCorners, ecefToWGS84, kmToDegrees, pixelsToDegrees, rotateCoordinateOnSphere, rotateCoordinatesOnSphere, wgs84ToECEF, } from './rotation.js';
|
|
16
16
|
export type { AnchorProjector, CoordinateTransform, LngLat, MercatorCoord, ScreenPoint, } from './transform.js';
|
|
17
|
-
export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
|
|
17
|
+
export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, expandQuad, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
|
|
@@ -18,4 +18,4 @@ export { pointInRectangle, rectangleIntersectsCircle, rectangleIntersectsLineStr
|
|
|
18
18
|
export { createOBB, distanceToOBB, getOBBAABB, getOBBCorners, pointInOBB } from './obb.js';
|
|
19
19
|
// Rotation computation
|
|
20
20
|
export { computeRotatedQuadCorners, ecefToWGS84, kmToDegrees, pixelsToDegrees, rotateCoordinateOnSphere, rotateCoordinatesOnSphere, wgs84ToECEF, } from './rotation.js';
|
|
21
|
-
export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
|
|
21
|
+
export { applyMarginToBoundingBox, clampCoordinate, clampLatitude, createCoordinateTransform, expandQuad, getAnchorProjector, lngLatToMercator, setAnchorProjector, } from './transform.js';
|
|
@@ -109,9 +109,32 @@ export declare function getAnchorProjector(map: MapLibreMap): AnchorProjector |
|
|
|
109
109
|
* @returns A CoordinateTransform instance
|
|
110
110
|
*/
|
|
111
111
|
export declare function createCoordinateTransform(map: MapLibreMap): CoordinateTransform;
|
|
112
|
+
/**
|
|
113
|
+
* Moves every edge of a four-cornered outline outward by a margin
|
|
114
|
+
*
|
|
115
|
+
* The corners are in the order top left, top right, bottom right, bottom left of the shape as
|
|
116
|
+
* it stands unturned, in a space whose y axis points down (the screen). Each corner moves by
|
|
117
|
+
* the margin along both edges that meet at it, so the frame keeps the margin on every side and
|
|
118
|
+
* its corners stay on the diagonals of the outline turned as it is. An edge of no length (the
|
|
119
|
+
* outline of a straight horizontal or vertical line) takes the direction square to the other
|
|
120
|
+
* one, and an outline of no size is widened as an unturned square.
|
|
121
|
+
*
|
|
122
|
+
* @param corners The four corners
|
|
123
|
+
* @param margin The margin, in the unit of the corners
|
|
124
|
+
* @returns The four corners moved outward, in the same order
|
|
125
|
+
*/
|
|
126
|
+
export declare function expandQuad(corners: readonly {
|
|
127
|
+
x: number;
|
|
128
|
+
y: number;
|
|
129
|
+
}[], margin: number): {
|
|
130
|
+
x: number;
|
|
131
|
+
y: number;
|
|
132
|
+
}[];
|
|
112
133
|
/**
|
|
113
134
|
* Applies a margin in pixels to a bounding box
|
|
114
135
|
*
|
|
136
|
+
* Every edge moves outward by the margin ({@link expandQuad}).
|
|
137
|
+
*
|
|
115
138
|
* When zoom is passed, the expansion is done on the map plane. When it is not passed, the
|
|
116
139
|
* expansion round-trips through screen coordinates. It must not round-trip when there is
|
|
117
140
|
* terrain: with terrain enabled, project projects a point at the height of the ground surface
|
|
@@ -90,9 +90,48 @@ export function createCoordinateTransform(map) {
|
|
|
90
90
|
},
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Moves every edge of a four-cornered outline outward by a margin
|
|
95
|
+
*
|
|
96
|
+
* The corners are in the order top left, top right, bottom right, bottom left of the shape as
|
|
97
|
+
* it stands unturned, in a space whose y axis points down (the screen). Each corner moves by
|
|
98
|
+
* the margin along both edges that meet at it, so the frame keeps the margin on every side and
|
|
99
|
+
* its corners stay on the diagonals of the outline turned as it is. An edge of no length (the
|
|
100
|
+
* outline of a straight horizontal or vertical line) takes the direction square to the other
|
|
101
|
+
* one, and an outline of no size is widened as an unturned square.
|
|
102
|
+
*
|
|
103
|
+
* @param corners The four corners
|
|
104
|
+
* @param margin The margin, in the unit of the corners
|
|
105
|
+
* @returns The four corners moved outward, in the same order
|
|
106
|
+
*/
|
|
107
|
+
export function expandQuad(corners, margin) {
|
|
108
|
+
const [tl, tr, br, bl] = corners;
|
|
109
|
+
const unit = (from, to) => {
|
|
110
|
+
const dx = to.x - from.x;
|
|
111
|
+
const dy = to.y - from.y;
|
|
112
|
+
const length = Math.hypot(dx, dy);
|
|
113
|
+
return length > 0 ? { x: dx / length, y: dy / length } : null;
|
|
114
|
+
};
|
|
115
|
+
let u = unit(tl, tr) ?? unit(bl, br);
|
|
116
|
+
let v = unit(tl, bl) ?? unit(tr, br);
|
|
117
|
+
// With y pointing down, the bottom direction is the right direction turned clockwise
|
|
118
|
+
if (!u && v)
|
|
119
|
+
u = { x: v.y, y: -v.x };
|
|
120
|
+
if (u && !v)
|
|
121
|
+
v = { x: -u.y, y: u.x };
|
|
122
|
+
const right = u ?? { x: 1, y: 0 };
|
|
123
|
+
const down = v ?? { x: 0, y: 1 };
|
|
124
|
+
const at = (corner, alongRight, alongDown) => ({
|
|
125
|
+
x: corner.x + (right.x * alongRight + down.x * alongDown) * margin,
|
|
126
|
+
y: corner.y + (right.y * alongRight + down.y * alongDown) * margin,
|
|
127
|
+
});
|
|
128
|
+
return [at(tl, -1, -1), at(tr, 1, -1), at(br, 1, 1), at(bl, -1, 1)];
|
|
129
|
+
}
|
|
93
130
|
/**
|
|
94
131
|
* Applies a margin in pixels to a bounding box
|
|
95
132
|
*
|
|
133
|
+
* Every edge moves outward by the margin ({@link expandQuad}).
|
|
134
|
+
*
|
|
96
135
|
* When zoom is passed, the expansion is done on the map plane. When it is not passed, the
|
|
97
136
|
* expansion round-trips through screen coordinates. It must not round-trip when there is
|
|
98
137
|
* terrain: with terrain enabled, project projects a point at the height of the ground surface
|
|
@@ -119,23 +158,8 @@ export function applyMarginToBoundingBox(coords, margin, transform, zoom) {
|
|
|
119
158
|
transform.project(clampCoordinate(coords.bottomRight)),
|
|
120
159
|
transform.project(clampCoordinate(coords.bottomLeft)),
|
|
121
160
|
];
|
|
122
|
-
//
|
|
123
|
-
const
|
|
124
|
-
const centerY = (corners[0].y + corners[1].y + corners[2].y + corners[3].y) / 4;
|
|
125
|
-
// Expand each vertex outward from the center
|
|
126
|
-
const expandedCorners = corners.map((corner) => {
|
|
127
|
-
const dx = corner.x - centerX;
|
|
128
|
-
const dy = corner.y - centerY;
|
|
129
|
-
const dist = Math.sqrt(dx * dx + dy * dy);
|
|
130
|
-
if (dist === 0)
|
|
131
|
-
return corner;
|
|
132
|
-
// Extend by the margin while keeping the direction of the vector
|
|
133
|
-
const scale = (dist + margin) / dist;
|
|
134
|
-
return {
|
|
135
|
-
x: centerX + dx * scale,
|
|
136
|
-
y: centerY + dy * scale,
|
|
137
|
-
};
|
|
138
|
-
});
|
|
161
|
+
// Move every edge outward by the margin
|
|
162
|
+
const expandedCorners = expandQuad(corners, margin);
|
|
139
163
|
// Convert into geographic coordinates
|
|
140
164
|
const topLeftResult = transform.unproject(expandedCorners[0]);
|
|
141
165
|
const topRightResult = transform.unproject(expandedCorners[1]);
|
|
@@ -169,17 +193,12 @@ function marginOnMapPlane(coords, margin, zoom) {
|
|
|
169
193
|
bottomLeft: coords.bottomLeft,
|
|
170
194
|
};
|
|
171
195
|
}
|
|
172
|
-
// The vertical and horizontal scales differ, so convert into
|
|
173
|
-
// first and then widen
|
|
174
|
-
const expanded = corners.map(([lng, lat]) => {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (dist === 0)
|
|
179
|
-
return [lng, lat];
|
|
180
|
-
const scale = (dist + margin) / dist;
|
|
181
|
-
return [centerLng + dx * scale * degPerPxLng, centerLat + dy * scale * degPerPxLat];
|
|
182
|
-
});
|
|
196
|
+
// The vertical and horizontal scales differ, so convert into pixels (y down, as on the
|
|
197
|
+
// screen) first and then widen
|
|
198
|
+
const expanded = expandQuad(corners.map(([lng, lat]) => ({
|
|
199
|
+
x: (lng - centerLng) / degPerPxLng,
|
|
200
|
+
y: -(lat - centerLat) / degPerPxLat,
|
|
201
|
+
})), margin).map(({ x, y }) => [centerLng + x * degPerPxLng, centerLat - y * degPerPxLat]);
|
|
183
202
|
return {
|
|
184
203
|
topLeft: expanded[0],
|
|
185
204
|
topRight: expanded[1],
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The values the library keeps in the `properties` of a feature
|
|
3
|
+
*
|
|
4
|
+
* Every value the library owns is stored under a key that starts with
|
|
5
|
+
* {@link DRAW_PROPERTY_PREFIX}; every other key is an attribute of the user. The code reads and
|
|
6
|
+
* writes these values only through the accessors of this module, never through string
|
|
7
|
+
* literals, so that the keys are spelled in one place.
|
|
8
|
+
*/
|
|
9
|
+
/** The prefix of the keys of `properties` that hold the values of the library. */
|
|
10
|
+
export declare const DRAW_PROPERTY_PREFIX: "maplibre-gl-draw:";
|
|
11
|
+
/**
|
|
12
|
+
* Whether a key of `properties` holds a value of the library, so that an attribute panel can
|
|
13
|
+
* leave it out.
|
|
14
|
+
*
|
|
15
|
+
* @param key - A key of `properties`
|
|
16
|
+
* @returns True when the key starts with {@link DRAW_PROPERTY_PREFIX}
|
|
17
|
+
*/
|
|
18
|
+
export declare function isDrawProperty(key: string): boolean;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The values the library keeps in the `properties` of a feature
|
|
5
|
+
*
|
|
6
|
+
* Every value the library owns is stored under a key that starts with
|
|
7
|
+
* {@link DRAW_PROPERTY_PREFIX}; every other key is an attribute of the user. The code reads and
|
|
8
|
+
* writes these values only through the accessors of this module, never through string
|
|
9
|
+
* literals, so that the keys are spelled in one place.
|
|
10
|
+
*/
|
|
11
|
+
/** The prefix of the keys of `properties` that hold the values of the library. */
|
|
12
|
+
export const DRAW_PROPERTY_PREFIX = 'maplibre-gl-draw:';
|
|
13
|
+
/**
|
|
14
|
+
* The key of `properties` that holds each value of the library
|
|
15
|
+
*
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export const DRAW_PROPERTY_KEYS = {
|
|
19
|
+
createdZoom: `${DRAW_PROPERTY_PREFIX}createdZoom`,
|
|
20
|
+
rotation: `${DRAW_PROPERTY_PREFIX}rotation`,
|
|
21
|
+
scale: `${DRAW_PROPERTY_PREFIX}scale`,
|
|
22
|
+
radiusMeters: `${DRAW_PROPERTY_PREFIX}radiusMeters`,
|
|
23
|
+
radiusHandleAngle: `${DRAW_PROPERTY_PREFIX}radiusHandleAngle`,
|
|
24
|
+
imageFileId: `${DRAW_PROPERTY_PREFIX}imageFileId`,
|
|
25
|
+
imageWidth: `${DRAW_PROPERTY_PREFIX}imageWidth`,
|
|
26
|
+
imageHeight: `${DRAW_PROPERTY_PREFIX}imageHeight`,
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* The names of the values of the library, in a stable order
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export const DRAW_PROPERTY_NAMES = Object.keys(DRAW_PROPERTY_KEYS);
|
|
34
|
+
/** The type each value must have to be read */
|
|
35
|
+
const VALUE_TYPES = {
|
|
36
|
+
createdZoom: 'number',
|
|
37
|
+
rotation: 'number',
|
|
38
|
+
scale: 'number',
|
|
39
|
+
radiusMeters: 'number',
|
|
40
|
+
radiusHandleAngle: 'number',
|
|
41
|
+
imageFileId: 'string',
|
|
42
|
+
imageWidth: 'number',
|
|
43
|
+
imageHeight: 'number',
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Whether a key of `properties` holds a value of the library, so that an attribute panel can
|
|
47
|
+
* leave it out.
|
|
48
|
+
*
|
|
49
|
+
* @param key - A key of `properties`
|
|
50
|
+
* @returns True when the key starts with {@link DRAW_PROPERTY_PREFIX}
|
|
51
|
+
*/
|
|
52
|
+
export function isDrawProperty(key) {
|
|
53
|
+
return key.startsWith(DRAW_PROPERTY_PREFIX);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* The key of `properties` that holds a value of the library
|
|
57
|
+
*
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
export function drawPropertyKey(name) {
|
|
61
|
+
return DRAW_PROPERTY_KEYS[name];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Reads a value of the library from `properties`
|
|
65
|
+
*
|
|
66
|
+
* @param properties - The `properties` of a feature
|
|
67
|
+
* @param name - The name of the value
|
|
68
|
+
* @returns The value, or undefined when it is absent or not of its type
|
|
69
|
+
* @internal
|
|
70
|
+
*/
|
|
71
|
+
export function readDrawProperty(properties, name) {
|
|
72
|
+
const value = properties?.[DRAW_PROPERTY_KEYS[name]];
|
|
73
|
+
return typeof value === VALUE_TYPES[name] ? value : undefined;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Reads a value of the library from the `properties` of a feature
|
|
77
|
+
*
|
|
78
|
+
* @param feature - The feature
|
|
79
|
+
* @param name - The name of the value
|
|
80
|
+
* @returns The value, or undefined when it is absent or not of its type
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
export function getDrawProperty(feature, name) {
|
|
84
|
+
return readDrawProperty(feature.properties, name);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Whether `properties` has a key for a value of the library (whatever its value)
|
|
88
|
+
*
|
|
89
|
+
* @internal
|
|
90
|
+
*/
|
|
91
|
+
export function hasDrawProperty(properties, name) {
|
|
92
|
+
return properties != null && DRAW_PROPERTY_KEYS[name] in properties;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Writes a value of the library into a `properties` object; `undefined` removes the key
|
|
96
|
+
*
|
|
97
|
+
* @param properties - The `properties` object to write into (changed in place)
|
|
98
|
+
* @param name - The name of the value
|
|
99
|
+
* @param value - The value
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
export function setDrawProperty(properties, name, value) {
|
|
103
|
+
const key = DRAW_PROPERTY_KEYS[name];
|
|
104
|
+
if (value === undefined) {
|
|
105
|
+
delete properties[key];
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
properties[key] = value;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* The entries of `properties` for some values of the library, to spread into a new
|
|
113
|
+
* `properties` object (a value given as `undefined` is left out)
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* ```ts
|
|
117
|
+
* const properties = { ...feature.properties, ...drawProperties({ scale: 2 }) };
|
|
118
|
+
* ```
|
|
119
|
+
* @internal
|
|
120
|
+
*/
|
|
121
|
+
export function drawProperties(values) {
|
|
122
|
+
const result = {};
|
|
123
|
+
for (const name of Object.keys(values)) {
|
|
124
|
+
const value = values[name];
|
|
125
|
+
if (value !== undefined)
|
|
126
|
+
result[DRAW_PROPERTY_KEYS[name]] = value;
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
@@ -38,12 +38,17 @@ export interface DatasetClickEventPayload {
|
|
|
38
38
|
/** The feature that was hit. null when there was no hit */
|
|
39
39
|
feature: Feature | null;
|
|
40
40
|
/**
|
|
41
|
-
* The row of the feature in its dataset (its index in the
|
|
42
|
-
* dataset, or its row in a
|
|
41
|
+
* The row of the feature in its dataset (its index in the rows given to the
|
|
42
|
+
* dataset, or its row in a table). null when there was no hit
|
|
43
43
|
*/
|
|
44
44
|
row: number | null;
|
|
45
45
|
/** Map coordinate [lng, lat] */
|
|
46
46
|
lngLat: Coordinate;
|
|
47
|
+
/** The point on the screen, in CSS pixels */
|
|
48
|
+
point?: {
|
|
49
|
+
x: number;
|
|
50
|
+
y: number;
|
|
51
|
+
};
|
|
47
52
|
}
|
|
48
53
|
/**
|
|
49
54
|
* A geographic coordinate (the same shape as the lngLat of a normalized event)
|
|
@@ -81,8 +86,11 @@ export interface SnapTargetSegment {
|
|
|
81
86
|
* by the rendering of the guide line.
|
|
82
87
|
*/
|
|
83
88
|
export interface SnapTarget {
|
|
84
|
-
/**
|
|
85
|
-
|
|
89
|
+
/**
|
|
90
|
+
* The kind of the target: one of the engine, or the kind of its own a provider of the
|
|
91
|
+
* extension contract gave its candidate (ranked as a vertex)
|
|
92
|
+
*/
|
|
93
|
+
kind: SnapTargetKind | (string & Record<never, never>);
|
|
86
94
|
/** The feature ID of the target (only for candidates originating from the Store) */
|
|
87
95
|
featureId?: string;
|
|
88
96
|
/**
|
|
@@ -115,10 +123,10 @@ export interface SnapResult {
|
|
|
115
123
|
*
|
|
116
124
|
* When the `isExternalEntry` option marks entries of the layer order as external, the draw
|
|
117
125
|
* instance draws each run between them in a maplibre custom layer of its own, so the host can
|
|
118
|
-
* place its own maplibre layers between the frames. `
|
|
119
|
-
* the `
|
|
126
|
+
* place its own maplibre layers between the frames. `draw.getLayerStack()` lists the frames,
|
|
127
|
+
* and the `layerStack.changed` event announces a change of them.
|
|
120
128
|
*/
|
|
121
|
-
export interface
|
|
129
|
+
export interface StackSlot {
|
|
122
130
|
/** The maplibre layer ID of the custom layer that draws this run */
|
|
123
131
|
readonly layerId: string;
|
|
124
132
|
/** The index in the layer order where the run starts (inclusive) */
|