@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
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* the host's `typeNames`, or from the English defaults below. Nothing else in the library
|
|
9
9
|
* writes such a word inline.
|
|
10
10
|
*/
|
|
11
|
-
import type { Feature, FeatureType, Group, Layer,
|
|
11
|
+
import type { Feature, FeatureType, Group, Layer, StoreChange } from '../types/model.js';
|
|
12
12
|
/**
|
|
13
13
|
* What automatic naming names: a feature type, a layer or a group
|
|
14
14
|
*/
|
|
@@ -16,8 +16,8 @@ export type AutoNameType = FeatureType | 'Layer' | 'Group';
|
|
|
16
16
|
/**
|
|
17
17
|
* How new features, layers and groups are named automatically ("Point 1", "Layer 2")
|
|
18
18
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
19
|
+
* The engine reads it from the `autoName` option of `createDraw` (left out, it is on with
|
|
20
|
+
* these defaults, and `false` turns it off). Each type counts on its own, and a
|
|
21
21
|
* number is never reused: after "Point 1" and "Point 2" are created and "Point 2" is deleted,
|
|
22
22
|
* the next point is "Point 3". Existing names of the form "<word> <number>" move the count on
|
|
23
23
|
* as well, however they arrived (a load, an import).
|
|
@@ -32,18 +32,6 @@ export type AutoNameType = FeatureType | 'Layer' | 'Group';
|
|
|
32
32
|
* A layer or a group always has a name. When one is created without a name while `enabled`
|
|
33
33
|
* is false, it gets the word of its type alone, without a number ("Layer", or the
|
|
34
34
|
* `typeNames.Layer` of the host); features get no name then.
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* ```ts
|
|
38
|
-
* const draw = createMapLibreGLDraw(map, {
|
|
39
|
-
* autoName: {
|
|
40
|
-
* enabled: true,
|
|
41
|
-
* typeNames: { Point: 'Pin', Layer: 'Sheet' },
|
|
42
|
-
* formatter: (typeName, n) => `${typeName} #${n}`,
|
|
43
|
-
* },
|
|
44
|
-
* });
|
|
45
|
-
* // The first point is named "Pin #1"
|
|
46
|
-
* ```
|
|
47
35
|
*/
|
|
48
36
|
export interface AutoNameConfig {
|
|
49
37
|
/**
|
|
@@ -90,7 +78,7 @@ export declare function normalizeAutoNameConfig(config: AutoNameConfig | boolean
|
|
|
90
78
|
*/
|
|
91
79
|
export declare class AutoNameGenerator {
|
|
92
80
|
private readonly store;
|
|
93
|
-
private
|
|
81
|
+
private config;
|
|
94
82
|
/** Counter that remembers the largest number already generated per type */
|
|
95
83
|
private readonly counters;
|
|
96
84
|
/** Counter keys whose full scan is done (Layer/Group go into the same Set) */
|
|
@@ -98,15 +86,21 @@ export declare class AutoNameGenerator {
|
|
|
98
86
|
/** Unsubscribe function of the Store subscription (null when not subscribed) */
|
|
99
87
|
private unsubscribe;
|
|
100
88
|
constructor(store: {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
subscribe(listener: (changes:
|
|
89
|
+
listFeatures(): Feature[];
|
|
90
|
+
listLayers(): Layer[];
|
|
91
|
+
listGroups(): Group[];
|
|
92
|
+
subscribe(listener: (changes: StoreChange) => void): () => void;
|
|
105
93
|
}, config?: AutoNameConfig | boolean);
|
|
106
94
|
/**
|
|
107
95
|
* Returns whether it is enabled
|
|
108
96
|
*/
|
|
109
97
|
isEnabled(): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Replaces the configuration: whether names are generated, the words of the types and the
|
|
100
|
+
* format. The numbers already used are not used again; the names already in the document
|
|
101
|
+
* are read again in the new words.
|
|
102
|
+
*/
|
|
103
|
+
configure(config: AutoNameConfig | boolean): void;
|
|
110
104
|
/**
|
|
111
105
|
* Unsubscribes from the Store
|
|
112
106
|
*/
|
|
@@ -117,6 +117,23 @@ export class AutoNameGenerator {
|
|
|
117
117
|
isEnabled() {
|
|
118
118
|
return this.config.enabled;
|
|
119
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* Replaces the configuration: whether names are generated, the words of the types and the
|
|
122
|
+
* format. The numbers already used are not used again; the names already in the document
|
|
123
|
+
* are read again in the new words.
|
|
124
|
+
*/
|
|
125
|
+
configure(config) {
|
|
126
|
+
this.config = normalizeAutoNameConfig(config);
|
|
127
|
+
this.scannedTypes.clear();
|
|
128
|
+
if (this.config.enabled && !this.unsubscribe) {
|
|
129
|
+
this.unsubscribe = this.store.subscribe((changes) => {
|
|
130
|
+
this.observeChanges(changes);
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
else if (!this.config.enabled) {
|
|
134
|
+
this.dispose();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
120
137
|
/**
|
|
121
138
|
* Unsubscribes from the Store
|
|
122
139
|
*/
|
|
@@ -244,7 +261,7 @@ export class AutoNameGenerator {
|
|
|
244
261
|
* Gets the largest number from the existing Features
|
|
245
262
|
*/
|
|
246
263
|
getMaxNumberFromFeatures(featureType, typeName) {
|
|
247
|
-
const features = this.store.
|
|
264
|
+
const features = this.store.listFeatures();
|
|
248
265
|
let maxNumber = 0;
|
|
249
266
|
for (const feature of features) {
|
|
250
267
|
// Only features of the same type are considered
|
|
@@ -287,7 +304,7 @@ export class AutoNameGenerator {
|
|
|
287
304
|
findNextLayerNumber(typeName) {
|
|
288
305
|
this.scanOnce(LAYER_COUNTER_KEY, () => {
|
|
289
306
|
let maxNumber = 0;
|
|
290
|
-
for (const layer of this.store.
|
|
307
|
+
for (const layer of this.store.listLayers()) {
|
|
291
308
|
const number = extractNumberFromName(layer.name, typeName);
|
|
292
309
|
if (number !== null && number > maxNumber) {
|
|
293
310
|
maxNumber = number;
|
|
@@ -322,7 +339,7 @@ export class AutoNameGenerator {
|
|
|
322
339
|
findNextGroupNumber(typeName) {
|
|
323
340
|
this.scanOnce(GROUP_COUNTER_KEY, () => {
|
|
324
341
|
let maxNumber = 0;
|
|
325
|
-
for (const group of this.store.
|
|
342
|
+
for (const group of this.store.listGroups()) {
|
|
326
343
|
const number = extractNumberFromName(group.name, typeName);
|
|
327
344
|
if (number !== null && number > maxNumber) {
|
|
328
345
|
maxNumber = number;
|
|
@@ -46,7 +46,7 @@ export interface PixelRatioProvider {
|
|
|
46
46
|
/** The current rendering pixel ratio (the injected value or window x renderScale) */
|
|
47
47
|
resolve: () => number;
|
|
48
48
|
/** The factor of the current rendering pixel ratio (default 1) */
|
|
49
|
-
|
|
49
|
+
getScaleFactor: () => number;
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
52
|
* The rendering pixel ratio that can be injected
|
|
@@ -88,9 +88,15 @@ export declare function resolveContentPixelRatio(pixelRatio?: PixelRatioInput):
|
|
|
88
88
|
*
|
|
89
89
|
* The read side (`PixelRatioProvider`) plus a socket for rewriting the factor.
|
|
90
90
|
* Handing the source itself out to each renderer as the `PixelRatioInput` makes a change from
|
|
91
|
-
* `
|
|
91
|
+
* `setScaleFactor` propagate from the next frame to every place that reads it directly.
|
|
92
92
|
*/
|
|
93
93
|
export interface PixelRatioSource extends PixelRatioProvider {
|
|
94
|
+
/**
|
|
95
|
+
* Replaces the pixel ratio given at creation; `undefined` goes back to the ratio of the map
|
|
96
|
+
*
|
|
97
|
+
* @returns Whether the value changed
|
|
98
|
+
*/
|
|
99
|
+
setPixelRatio: (pixelRatio: number | undefined) => boolean;
|
|
94
100
|
/**
|
|
95
101
|
* Sets the factor of the rendering pixel ratio
|
|
96
102
|
*
|
|
@@ -98,7 +104,7 @@ export interface PixelRatioSource extends PixelRatioProvider {
|
|
|
98
104
|
* when the value changed, so the caller can trigger a redraw or a rebuild of the batches
|
|
99
105
|
* only at that point.
|
|
100
106
|
*/
|
|
101
|
-
|
|
107
|
+
setScaleFactor: (scale: number) => boolean;
|
|
102
108
|
}
|
|
103
109
|
/**
|
|
104
110
|
* Creates a source of the rendering pixel ratio
|
|
@@ -53,7 +53,7 @@ export function resolvePixelRatio(pixelRatio) {
|
|
|
53
53
|
export function resolveContentPixelRatio(pixelRatio) {
|
|
54
54
|
if (!isProvider(pixelRatio))
|
|
55
55
|
return resolvePixelRatio(pixelRatio);
|
|
56
|
-
const scale = pixelRatio.
|
|
56
|
+
const scale = pixelRatio.getScaleFactor();
|
|
57
57
|
const resolved = resolvePixelRatio(pixelRatio);
|
|
58
58
|
if (!usable(scale))
|
|
59
59
|
return resolved;
|
|
@@ -69,11 +69,20 @@ export function resolveContentPixelRatio(pixelRatio) {
|
|
|
69
69
|
*/
|
|
70
70
|
export function createPixelRatioSource(pixelRatio, fallback) {
|
|
71
71
|
let renderScale = 1;
|
|
72
|
-
|
|
72
|
+
let given = usable(pixelRatio) ? pixelRatio : undefined;
|
|
73
|
+
let input = given ?? fallback;
|
|
73
74
|
return {
|
|
75
|
+
setPixelRatio: (value) => {
|
|
76
|
+
const next = usable(value) ? value : undefined;
|
|
77
|
+
if (next === given)
|
|
78
|
+
return false;
|
|
79
|
+
given = next;
|
|
80
|
+
input = given ?? fallback;
|
|
81
|
+
return true;
|
|
82
|
+
},
|
|
74
83
|
resolve: () => resolvePixelRatio(input) * renderScale,
|
|
75
|
-
|
|
76
|
-
|
|
84
|
+
getScaleFactor: () => renderScale,
|
|
85
|
+
setScaleFactor: (scale) => {
|
|
77
86
|
if (!Number.isFinite(scale) || scale <= 0)
|
|
78
87
|
return false;
|
|
79
88
|
if (scale === renderScale)
|
|
@@ -1,75 +1,32 @@
|
|
|
1
1
|
import type { Feature, ImageProperties } from '../types/model.js';
|
|
2
2
|
/**
|
|
3
|
-
* Gets the zoom at which the feature was created (`
|
|
3
|
+
* Gets the zoom at which the feature was created (`maplibre-gl-draw:createdZoom` in
|
|
4
|
+
* `properties`)
|
|
4
5
|
*
|
|
5
6
|
* The drawing modes record it. Line widths follow the map from that zoom, and an Image is
|
|
6
7
|
* drawn at its size in pixels at that zoom (see {@link FeatureStyle.strokeWidth}).
|
|
7
8
|
*
|
|
8
9
|
* @returns The zoom, or undefined when the feature has none (it then keeps the same width on
|
|
9
10
|
* the screen)
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```ts
|
|
13
|
-
* const feature = draw.getFeature(id);
|
|
14
|
-
* const zoom = feature ? getCreatedZoom(feature) : undefined;
|
|
15
|
-
* ```
|
|
16
11
|
*/
|
|
17
12
|
export declare function getCreatedZoom(feature: Feature): number | undefined;
|
|
18
13
|
/**
|
|
19
14
|
* Sets the zoom at which a feature was created, in a `properties` object
|
|
20
15
|
*
|
|
21
|
-
* Use it on the properties of a {@link FeatureInput} before
|
|
16
|
+
* Use it on the properties of a {@link FeatureInput} before it is created, so that the new
|
|
22
17
|
* feature scales with the map from the current zoom like a drawn one.
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```ts
|
|
26
|
-
* const properties: Record<string, unknown> = {};
|
|
27
|
-
* setCreatedZoom(properties, map.getZoom());
|
|
28
|
-
* draw.addFeature({
|
|
29
|
-
* type: 'LineString',
|
|
30
|
-
* coordinates: [
|
|
31
|
-
* [139.76, 35.68],
|
|
32
|
-
* [139.78, 35.69],
|
|
33
|
-
* ],
|
|
34
|
-
* properties,
|
|
35
|
-
* });
|
|
36
|
-
* ```
|
|
37
18
|
*/
|
|
38
19
|
export declare function setCreatedZoom(properties: Record<string, unknown>, zoom: number): void;
|
|
39
20
|
/**
|
|
40
|
-
* Gets the rotation of the feature in degrees (`properties
|
|
21
|
+
* Gets the rotation of the feature in degrees (`maplibre-gl-draw:rotation` in `properties`, 0
|
|
22
|
+
* when unset)
|
|
41
23
|
*/
|
|
42
24
|
export declare function getRotation(feature: Feature): number;
|
|
43
25
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*/
|
|
47
|
-
export declare function setRotation(properties: Record<string, unknown>, rotation: number): void;
|
|
48
|
-
/**
|
|
49
|
-
* Gets the scale of the feature (`properties.scale`, 1 when unset), which resizing an Image
|
|
50
|
-
* changes
|
|
26
|
+
* Gets the scale of the feature (`maplibre-gl-draw:scale` in `properties`, 1 when unset),
|
|
27
|
+
* which resizing an Image changes
|
|
51
28
|
*/
|
|
52
29
|
export declare function getScale(feature: Feature): number;
|
|
53
|
-
/**
|
|
54
|
-
* Sets the scale of the feature
|
|
55
|
-
*/
|
|
56
|
-
export declare function setScale(properties: Record<string, unknown>, scale: number): void;
|
|
57
|
-
/**
|
|
58
|
-
* Gets the name of the feature
|
|
59
|
-
*/
|
|
60
|
-
export declare function getFeatureName(feature: Feature): string | undefined;
|
|
61
|
-
/**
|
|
62
|
-
* Sets the name of the feature
|
|
63
|
-
*/
|
|
64
|
-
export declare function setFeatureName(properties: Record<string, unknown>, name: string): void;
|
|
65
|
-
/**
|
|
66
|
-
* Gets the description of the feature
|
|
67
|
-
*/
|
|
68
|
-
export declare function getFeatureDescription(feature: Feature): string | undefined;
|
|
69
|
-
/**
|
|
70
|
-
* Sets the description of the feature
|
|
71
|
-
*/
|
|
72
|
-
export declare function setFeatureDescription(properties: Record<string, unknown>, description: string): void;
|
|
73
30
|
/**
|
|
74
31
|
* Gets the properties of an Image feature in a type-safe way.
|
|
75
32
|
*
|
|
@@ -4,107 +4,45 @@
|
|
|
4
4
|
* Property helpers
|
|
5
5
|
*
|
|
6
6
|
* Utilities for handling the properties of a feature (feature.properties) in a type-safe way.
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* GeoJSON with the maplibre-gl-draw: prefix, so it is held inside feature.properties under
|
|
10
|
-
* keys without the prefix.
|
|
7
|
+
* The values of the library are read and written through the accessors of
|
|
8
|
+
* shared/properties.ts, which own their keys.
|
|
11
9
|
*/
|
|
12
|
-
import {
|
|
10
|
+
import { getDrawProperty, setDrawProperty } from '../properties.js';
|
|
13
11
|
/**
|
|
14
|
-
* Gets the zoom at which the feature was created (`
|
|
12
|
+
* Gets the zoom at which the feature was created (`maplibre-gl-draw:createdZoom` in
|
|
13
|
+
* `properties`)
|
|
15
14
|
*
|
|
16
15
|
* The drawing modes record it. Line widths follow the map from that zoom, and an Image is
|
|
17
16
|
* drawn at its size in pixels at that zoom (see {@link FeatureStyle.strokeWidth}).
|
|
18
17
|
*
|
|
19
18
|
* @returns The zoom, or undefined when the feature has none (it then keeps the same width on
|
|
20
19
|
* the screen)
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```ts
|
|
24
|
-
* const feature = draw.getFeature(id);
|
|
25
|
-
* const zoom = feature ? getCreatedZoom(feature) : undefined;
|
|
26
|
-
* ```
|
|
27
20
|
*/
|
|
28
21
|
export function getCreatedZoom(feature) {
|
|
29
|
-
|
|
30
|
-
return typeof value === 'number' ? value : undefined;
|
|
22
|
+
return getDrawProperty(feature, 'createdZoom');
|
|
31
23
|
}
|
|
32
24
|
/**
|
|
33
25
|
* Sets the zoom at which a feature was created, in a `properties` object
|
|
34
26
|
*
|
|
35
|
-
* Use it on the properties of a {@link FeatureInput} before
|
|
27
|
+
* Use it on the properties of a {@link FeatureInput} before it is created, so that the new
|
|
36
28
|
* feature scales with the map from the current zoom like a drawn one.
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```ts
|
|
40
|
-
* const properties: Record<string, unknown> = {};
|
|
41
|
-
* setCreatedZoom(properties, map.getZoom());
|
|
42
|
-
* draw.addFeature({
|
|
43
|
-
* type: 'LineString',
|
|
44
|
-
* coordinates: [
|
|
45
|
-
* [139.76, 35.68],
|
|
46
|
-
* [139.78, 35.69],
|
|
47
|
-
* ],
|
|
48
|
-
* properties,
|
|
49
|
-
* });
|
|
50
|
-
* ```
|
|
51
29
|
*/
|
|
52
30
|
export function setCreatedZoom(properties, zoom) {
|
|
53
|
-
properties
|
|
31
|
+
setDrawProperty(properties, 'createdZoom', zoom);
|
|
54
32
|
}
|
|
55
33
|
/**
|
|
56
|
-
* Gets the rotation of the feature in degrees (`properties
|
|
34
|
+
* Gets the rotation of the feature in degrees (`maplibre-gl-draw:rotation` in `properties`, 0
|
|
35
|
+
* when unset)
|
|
57
36
|
*/
|
|
58
37
|
export function getRotation(feature) {
|
|
59
|
-
|
|
60
|
-
return typeof value === 'number' ? value : 0;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Sets the rotation in degrees, in a `properties` object (the properties of a
|
|
64
|
-
* {@link FeatureInput} before `addFeature`, say)
|
|
65
|
-
*/
|
|
66
|
-
export function setRotation(properties, rotation) {
|
|
67
|
-
properties[INTERNAL_PROPERTIES.ROTATION] = rotation;
|
|
38
|
+
return getDrawProperty(feature, 'rotation') ?? 0;
|
|
68
39
|
}
|
|
69
40
|
/**
|
|
70
|
-
* Gets the scale of the feature (`properties
|
|
71
|
-
* changes
|
|
41
|
+
* Gets the scale of the feature (`maplibre-gl-draw:scale` in `properties`, 1 when unset),
|
|
42
|
+
* which resizing an Image changes
|
|
72
43
|
*/
|
|
73
44
|
export function getScale(feature) {
|
|
74
|
-
|
|
75
|
-
return typeof value === 'number' ? value : 1;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Sets the scale of the feature
|
|
79
|
-
*/
|
|
80
|
-
export function setScale(properties, scale) {
|
|
81
|
-
properties[INTERNAL_PROPERTIES.SCALE] = scale;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Gets the name of the feature
|
|
85
|
-
*/
|
|
86
|
-
export function getFeatureName(feature) {
|
|
87
|
-
const value = feature.properties.name;
|
|
88
|
-
return typeof value === 'string' ? value : undefined;
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Sets the name of the feature
|
|
92
|
-
*/
|
|
93
|
-
export function setFeatureName(properties, name) {
|
|
94
|
-
properties.name = name;
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Gets the description of the feature
|
|
98
|
-
*/
|
|
99
|
-
export function getFeatureDescription(feature) {
|
|
100
|
-
const value = feature.properties.description;
|
|
101
|
-
return typeof value === 'string' ? value : undefined;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Sets the description of the feature
|
|
105
|
-
*/
|
|
106
|
-
export function setFeatureDescription(properties, description) {
|
|
107
|
-
properties.description = description;
|
|
45
|
+
return getDrawProperty(feature, 'scale') ?? 1;
|
|
108
46
|
}
|
|
109
47
|
/**
|
|
110
48
|
* Gets the properties of an Image feature in a type-safe way.
|
|
@@ -113,28 +51,25 @@ export function setFeatureDescription(properties, description) {
|
|
|
113
51
|
* Use it instead of a dangerous cast such as `as unknown as ImageProperties`.
|
|
114
52
|
*/
|
|
115
53
|
export function getImageProperties(feature) {
|
|
116
|
-
const p = feature.properties;
|
|
117
54
|
return {
|
|
118
|
-
imageFileId:
|
|
119
|
-
imageWidth:
|
|
120
|
-
imageHeight:
|
|
121
|
-
createdZoom:
|
|
122
|
-
rotation:
|
|
123
|
-
scale:
|
|
55
|
+
imageFileId: getDrawProperty(feature, 'imageFileId') ?? '',
|
|
56
|
+
imageWidth: getDrawProperty(feature, 'imageWidth') ?? 0,
|
|
57
|
+
imageHeight: getDrawProperty(feature, 'imageHeight') ?? 0,
|
|
58
|
+
createdZoom: getDrawProperty(feature, 'createdZoom') ?? 0,
|
|
59
|
+
rotation: getDrawProperty(feature, 'rotation'),
|
|
60
|
+
scale: getDrawProperty(feature, 'scale'),
|
|
124
61
|
};
|
|
125
62
|
}
|
|
126
63
|
/**
|
|
127
64
|
* Gets the radius (meters) of a Circle feature. undefined when it is unset or invalid.
|
|
128
65
|
*/
|
|
129
66
|
export function getCircleRadius(feature) {
|
|
130
|
-
|
|
131
|
-
return typeof value === 'number' ? value : undefined;
|
|
67
|
+
return getDrawProperty(feature, 'radiusMeters');
|
|
132
68
|
}
|
|
133
69
|
/**
|
|
134
70
|
* Gets the angle (degrees) of the radius handle of a Circle feature. The default is 135
|
|
135
71
|
* (toward the southwest).
|
|
136
72
|
*/
|
|
137
73
|
export function getRadiusHandleAngle(feature) {
|
|
138
|
-
|
|
139
|
-
return typeof value === 'number' ? value : 135;
|
|
74
|
+
return getDrawProperty(feature, 'radiusHandleAngle') ?? 135;
|
|
140
75
|
}
|
|
@@ -7,15 +7,32 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export function createSnapTargetsRegistry() {
|
|
9
9
|
const providers = new Map();
|
|
10
|
+
const narrowed = new Map();
|
|
10
11
|
return {
|
|
11
|
-
register(type, provider) {
|
|
12
|
+
register(type, provider, appliesTo) {
|
|
12
13
|
providers.set(type, provider);
|
|
14
|
+
if (appliesTo)
|
|
15
|
+
narrowed.set(type, appliesTo);
|
|
16
|
+
else
|
|
17
|
+
narrowed.delete(type);
|
|
13
18
|
return () => {
|
|
14
|
-
if (providers.get(type)
|
|
15
|
-
|
|
19
|
+
if (providers.get(type) !== provider)
|
|
20
|
+
return;
|
|
21
|
+
providers.delete(type);
|
|
22
|
+
narrowed.delete(type);
|
|
16
23
|
};
|
|
17
24
|
},
|
|
18
25
|
get: (type) => providers.get(type),
|
|
19
|
-
|
|
26
|
+
forFeature(feature) {
|
|
27
|
+
const provider = providers.get(feature.type);
|
|
28
|
+
if (!provider)
|
|
29
|
+
return undefined;
|
|
30
|
+
const appliesTo = narrowed.get(feature.type);
|
|
31
|
+
return appliesTo && !appliesTo(feature) ? undefined : provider;
|
|
32
|
+
},
|
|
33
|
+
clear() {
|
|
34
|
+
providers.clear();
|
|
35
|
+
narrowed.clear();
|
|
36
|
+
},
|
|
20
37
|
};
|
|
21
38
|
}
|
|
@@ -78,6 +78,17 @@ export const DEFAULT_SNAP_INDICATOR_STYLES = {
|
|
|
78
78
|
intersection: INTERSECTION_STYLE,
|
|
79
79
|
guide: GUIDE_STYLE,
|
|
80
80
|
};
|
|
81
|
+
/**
|
|
82
|
+
* A look of the indicator with the defaults, which the caller may change in place
|
|
83
|
+
*
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
export function createSnapIndicatorLook() {
|
|
87
|
+
return structuredClone({
|
|
88
|
+
styles: DEFAULT_SNAP_INDICATOR_STYLES,
|
|
89
|
+
guideLine: DEFAULT_SNAP_GUIDE_LINE_STYLE,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
81
92
|
/**
|
|
82
93
|
* The renderer of the snapping indicator
|
|
83
94
|
*
|
|
@@ -103,21 +114,17 @@ export class SnapIndicatorRenderer {
|
|
|
103
114
|
writable: true,
|
|
104
115
|
value: void 0
|
|
105
116
|
});
|
|
106
|
-
Object.defineProperty(this, "
|
|
107
|
-
enumerable: true,
|
|
108
|
-
configurable: true,
|
|
109
|
-
writable: true,
|
|
110
|
-
value: void 0
|
|
111
|
-
});
|
|
112
|
-
Object.defineProperty(this, "guideLineStyle", {
|
|
117
|
+
Object.defineProperty(this, "look", {
|
|
113
118
|
enumerable: true,
|
|
114
119
|
configurable: true,
|
|
115
120
|
writable: true,
|
|
116
121
|
value: void 0
|
|
117
122
|
});
|
|
118
123
|
this.snapService = deps.snapService;
|
|
119
|
-
this.
|
|
120
|
-
|
|
124
|
+
this.look = deps.look ?? {
|
|
125
|
+
styles: { ...DEFAULT_SNAP_INDICATOR_STYLES, ...deps.styles },
|
|
126
|
+
guideLine: deps.guideLineStyle ?? DEFAULT_SNAP_GUIDE_LINE_STYLE,
|
|
127
|
+
};
|
|
121
128
|
}
|
|
122
129
|
onAdd(_gl, _map) {
|
|
123
130
|
// It uses the existing drawing primitives, so it holds no GPU resources of its own
|
|
@@ -134,9 +141,11 @@ export class SnapIndicatorRenderer {
|
|
|
134
141
|
[target.segment.start[0], target.segment.start[1]],
|
|
135
142
|
[target.segment.end[0], target.segment.end[1]],
|
|
136
143
|
];
|
|
137
|
-
context.sdfLineRenderer.draw(line, this.
|
|
144
|
+
context.sdfLineRenderer.draw(line, this.look.guideLine, { widthUnit: 'pixels', closed: false }, zoom, projectionData);
|
|
138
145
|
}
|
|
139
|
-
|
|
146
|
+
// A kind of a provider's own is shown as a vertex
|
|
147
|
+
const { styles } = this.look;
|
|
148
|
+
const style = styles[target.kind] ?? styles.vertex;
|
|
140
149
|
context.pointShapeRenderer.draw([result.lngLat.lng, result.lngLat.lat], style, zoom);
|
|
141
150
|
}
|
|
142
151
|
onRemove() {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* "display x Store" are computed (Store x Store is the responsibility of
|
|
19
19
|
* providers/intersection.ts).
|
|
20
20
|
*/
|
|
21
|
-
import type { DatasetManager } from '../../
|
|
21
|
+
import type { DatasetManager } from '../../dataset/manager.js';
|
|
22
22
|
import { type Messages } from '../../messages.js';
|
|
23
23
|
import type { SpatialIndex } from '../../store/spatial/spatial-index.js';
|
|
24
24
|
import type { Store } from '../../store/store.js';
|
|
@@ -65,6 +65,11 @@ export interface DisplaySnapProviders {
|
|
|
65
65
|
* of edges (it is wired to ModeContext.getDatasetTraceFeatures).
|
|
66
66
|
*/
|
|
67
67
|
queryFeatures(bbox: BoundingBox): Feature[];
|
|
68
|
+
/** The same features as `queryFeatures`, each with the ID of its dataset */
|
|
69
|
+
queryRows(bbox: BoundingBox): Array<{
|
|
70
|
+
datasetId: string;
|
|
71
|
+
feature: Feature;
|
|
72
|
+
}>;
|
|
68
73
|
}
|
|
69
74
|
/**
|
|
70
75
|
* Builds the snapping providers for datasets
|
|
@@ -132,7 +132,7 @@ export function createDisplaySnapProviders(deps) {
|
|
|
132
132
|
for (const feature of queryFeatures({ store: deps.store, spatialIndex: deps.spatialIndex, snapTargets: deps.snapTargets }, bbox, ctx)) {
|
|
133
133
|
// The candidates of a custom type are returned by the vertex provider
|
|
134
134
|
// (getSnapTargets)
|
|
135
|
-
if (deps.snapTargets?.
|
|
135
|
+
if (deps.snapTargets?.forFeature(feature))
|
|
136
136
|
continue;
|
|
137
137
|
if (!hasSnapEdges(feature.type))
|
|
138
138
|
continue;
|
|
@@ -254,6 +254,7 @@ export function createDisplaySnapProviders(deps) {
|
|
|
254
254
|
queryFeatures(bbox) {
|
|
255
255
|
return nearbyFeatures(bbox).map((entry) => entry.feature);
|
|
256
256
|
},
|
|
257
|
+
queryRows: (bbox) => nearbyFeatures(bbox),
|
|
257
258
|
getFeature(datasetId, featureId) {
|
|
258
259
|
const dataset = deps.datasets.get(datasetId);
|
|
259
260
|
if (!dataset) {
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import { type Messages } from '../../messages.js';
|
|
2
2
|
import type { Store } from '../../store/store.js';
|
|
3
|
-
import { type SnapProvider } from '../types.js';
|
|
4
3
|
/**
|
|
5
|
-
* The dependencies of {@link
|
|
4
|
+
* The dependencies of {@link createSteppedGuideSnapProvider}.
|
|
6
5
|
*
|
|
7
6
|
* The guides are built from the vertices committed so far in the drawing in progress, so the
|
|
8
7
|
* Store alone is enough.
|
|
9
8
|
*/
|
|
10
9
|
export interface GuideSnapProviderDeps {
|
|
11
|
-
/** The Store of the draw instance
|
|
10
|
+
/** The Store of the draw instance */
|
|
12
11
|
store: Store;
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
|
-
* The options of {@link
|
|
14
|
+
* The options of {@link createSteppedGuideSnapProvider}.
|
|
16
15
|
*/
|
|
17
16
|
export interface GuideSnapProviderOptions {
|
|
18
17
|
/**
|
|
@@ -28,42 +27,3 @@ export interface GuideSnapProviderOptions {
|
|
|
28
27
|
*/
|
|
29
28
|
messages?: Partial<Messages>;
|
|
30
29
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Creates a snapping provider of construction guides for `draw_line` and `draw_polygon`.
|
|
33
|
-
*
|
|
34
|
-
* The guides start at the last committed vertex (the anchor): the north-based guides at every
|
|
35
|
-
* `northStepDegrees` from true north (from the first vertex on), and the extension and the
|
|
36
|
-
* perpendiculars of the previous segment (from the second vertex on). Each guide is a
|
|
37
|
-
* segment 4096 screen px long, returned as a candidate of kind `'guide'` whose description
|
|
38
|
-
* comes from `messages` (`snapNorth`, `snapExtension`, `snapPerpendicular`). Outside those
|
|
39
|
-
* two modes it returns no candidates.
|
|
40
|
-
*
|
|
41
|
-
* The draw instance already registers a built-in one, whose step is set with
|
|
42
|
-
* `options.snap.guideStepDegrees` and changed at runtime with `draw.snapping.setGuideStep`.
|
|
43
|
-
* Register another one to add guides at a second step on top of the built-in ones.
|
|
44
|
-
*
|
|
45
|
-
* @param deps The Store to read the drawing in progress from
|
|
46
|
-
* @param options The step angle, the tile size and the messages
|
|
47
|
-
* @returns A provider to pass to `draw.snapping.register`
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* ```ts
|
|
51
|
-
* import { createGuideSnapProvider, type Plugin } from '@sakuzu/maplibre-gl-draw';
|
|
52
|
-
*
|
|
53
|
-
* // Guides every 15 degrees from north, in addition to the built-in ones
|
|
54
|
-
* let unregister: (() => void) | undefined;
|
|
55
|
-
* const fineGuides: Plugin = {
|
|
56
|
-
* name: 'fine-guides',
|
|
57
|
-
* onInstall(ctx) {
|
|
58
|
-
* unregister = draw.snapping.register(
|
|
59
|
-
* createGuideSnapProvider({ store: ctx.getStore() }, { northStepDegrees: 15 }),
|
|
60
|
-
* );
|
|
61
|
-
* },
|
|
62
|
-
* onUninstall() {
|
|
63
|
-
* unregister?.();
|
|
64
|
-
* },
|
|
65
|
-
* };
|
|
66
|
-
* draw.addPlugin(fineGuides);
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
export declare function createGuideSnapProvider(deps: GuideSnapProviderDeps, options?: GuideSnapProviderOptions): SnapProvider;
|