@sakuzu/maplibre-gl-draw 1.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1109 -2
- package/README.ja.md +83 -50
- package/README.md +89 -53
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/api/datasets.d.ts +263 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +137 -0
- package/dist/api/draw.js +20 -0
- package/dist/api/drawing.d.ts +87 -0
- package/dist/api/errors.d.ts +35 -0
- package/dist/api/errors.js +35 -0
- package/dist/api/events.d.ts +316 -0
- package/dist/api/extension/context.d.ts +247 -0
- package/dist/api/extension/feature-type.d.ts +129 -0
- package/dist/api/extension/mode.d.ts +123 -0
- package/dist/api/extension/plugin.d.ts +51 -0
- package/dist/api/extension/plugin.js +3 -0
- package/dist/api/extension/provider.d.ts +119 -0
- package/dist/api/extension/provider.js +3 -0
- package/dist/api/extension/render.d.ts +176 -0
- package/dist/api/extension/render.js +3 -0
- package/dist/api/extension/store.d.ts +190 -0
- package/dist/api/extension/store.js +3 -0
- package/dist/api/extensions.d.ts +306 -0
- package/dist/api/extensions.js +3 -0
- package/dist/api/features.d.ts +188 -0
- package/dist/api/features.js +3 -0
- package/dist/api/groups.d.ts +111 -0
- package/dist/api/groups.js +3 -0
- package/dist/api/hidden.d.ts +45 -0
- package/dist/api/hidden.js +3 -0
- package/dist/api/impl/adapters.js +463 -0
- package/dist/api/impl/contexts.js +466 -0
- package/dist/api/impl/create-draw.js +124 -0
- package/dist/api/impl/datasets.js +405 -0
- package/dist/api/impl/destroy-guard.js +74 -0
- package/dist/api/impl/document.js +280 -0
- package/dist/api/impl/drawing.js +180 -0
- package/dist/api/impl/engine-context.d.ts +7 -0
- package/dist/api/{context.js → impl/engine-context.js} +49 -38
- package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
- package/dist/api/impl/events.js +423 -0
- package/dist/api/impl/extension-host.js +364 -0
- package/dist/api/impl/extensions.js +229 -0
- package/dist/api/impl/features.js +445 -0
- package/dist/api/impl/geometry/apply.d.ts +32 -0
- package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
- package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
- package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/split.js +10 -21
- package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
- package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
- package/dist/api/impl/geometry/types.js +3 -0
- package/dist/api/impl/groups.d.ts +3 -0
- package/dist/api/impl/groups.js +268 -0
- package/dist/api/impl/hidden.js +60 -0
- package/dist/api/impl/import-export/constants.d.ts +22 -0
- package/dist/api/impl/import-export/constants.js +24 -0
- package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
- package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
- package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
- package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
- package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
- package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
- package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
- package/dist/api/impl/import-export/image-import.d.ts +16 -0
- package/dist/api/impl/import-export/image-import.js +73 -0
- package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
- package/dist/api/impl/import-export/legacy-image-style.js +49 -0
- package/dist/api/impl/import-export/native-format.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
- package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
- package/dist/api/impl/import-export/native-upgrade.js +139 -0
- package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
- package/dist/api/impl/import-export/style-validation.d.ts +24 -0
- package/dist/api/impl/import-export/style-validation.js +86 -0
- package/dist/api/impl/import-export/types.d.ts +52 -0
- package/dist/api/impl/import-export/types.js +3 -0
- package/dist/api/impl/input.js +180 -0
- package/dist/api/impl/layers.js +307 -0
- package/dist/api/impl/metadata.d.ts +1 -0
- package/dist/api/impl/metadata.js +22 -0
- package/dist/api/impl/options.d.ts +1 -0
- package/dist/api/impl/options.js +851 -0
- package/dist/api/impl/placement.d.ts +1 -0
- package/dist/api/impl/placement.js +138 -0
- package/dist/api/impl/render-context.d.ts +13 -0
- package/dist/api/impl/render-context.js +272 -0
- package/dist/api/impl/rows.d.ts +1 -0
- package/dist/api/impl/rows.js +46 -0
- package/dist/api/impl/selection.d.ts +1 -0
- package/dist/api/impl/selection.js +186 -0
- package/dist/api/impl/shared.d.ts +64 -0
- package/dist/api/impl/shared.js +178 -0
- package/dist/api/impl/validate-extension.d.ts +1 -0
- package/dist/api/impl/validate-extension.js +159 -0
- package/dist/api/layers.d.ts +130 -0
- package/dist/api/layers.js +3 -0
- package/dist/api/metadata.d.ts +18 -0
- package/dist/api/metadata.js +3 -0
- package/dist/api/model.d.ts +487 -0
- package/dist/api/model.js +47 -0
- package/dist/api/options.d.ts +466 -0
- package/dist/api/options.js +3 -0
- package/dist/api/selection.d.ts +94 -0
- package/dist/api/selection.js +3 -0
- package/dist/api/state.d.ts +155 -0
- package/dist/api/state.js +12 -0
- package/dist/{display → dataset}/chunk.d.ts +1 -1
- package/dist/{display → dataset}/chunk.js +4 -3
- package/dist/{display → dataset}/dataset.js +21 -21
- package/dist/dataset/interaction.d.ts +1 -0
- package/dist/{display → dataset}/interaction.js +18 -6
- package/dist/dataset/manager.d.ts +1 -0
- package/dist/dataset/provider.d.ts +1 -0
- package/dist/{display → dataset}/retained.d.ts +1 -1
- package/dist/{display → dataset}/retained.js +8 -7
- package/dist/dataset/source.d.ts +1 -0
- package/dist/{display → dataset}/source.js +17 -4
- package/dist/dataset/spatial.d.ts +1 -0
- package/dist/{display → dataset}/spatial.js +1 -1
- package/dist/dataset/style.d.ts +1 -0
- package/dist/{display → dataset}/style.js +1 -1
- package/dist/dataset/table-source.d.ts +1 -0
- package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
- package/dist/{display → dataset}/thinning.d.ts +0 -10
- package/dist/{display → dataset}/thinning.js +3 -2
- package/dist/dataset/triangulation.d.ts +1 -0
- package/dist/{display → dataset}/triangulation.js +0 -0
- package/dist/{display → dataset}/types.d.ts +84 -121
- package/dist/dataset/types.js +61 -0
- package/dist/dispatcher/hit-test/box-strategies.js +13 -13
- package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
- package/dist/dispatcher/hit-test/globe-shape.js +5 -4
- package/dist/dispatcher/hit-test/service.d.ts +17 -0
- package/dist/dispatcher/hit-test/service.js +80 -16
- package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
- package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
- package/dist/dispatcher/hit-test/strategies/image.js +6 -18
- package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
- package/dist/dispatcher/hit-test/strategies/line.js +9 -2
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
- package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
- package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
- package/dist/dispatcher/hit-test/strategies/point.js +8 -4
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
- package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
- package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
- package/dist/dispatcher/input-router.js +154 -70
- package/dist/dispatcher/normalizer.js +25 -4
- package/dist/dispatcher/types.d.ts +6 -1
- package/dist/extension/feature-handler.d.ts +1 -182
- package/dist/extension/index.d.ts +4 -7
- package/dist/extension/renderers.d.ts +1 -208
- package/dist/geometry/angle.d.ts +0 -8
- package/dist/geometry/angle.js +0 -8
- package/dist/geometry/bbox.d.ts +4 -12
- package/dist/geometry/bbox.js +4 -12
- package/dist/geometry/boolean.d.ts +0 -51
- package/dist/geometry/boolean.js +0 -51
- package/dist/geometry/buffer.d.ts +0 -26
- package/dist/geometry/buffer.js +0 -26
- package/dist/geometry/circle.d.ts +0 -9
- package/dist/geometry/circle.js +0 -9
- package/dist/geometry/coords.d.ts +0 -16
- package/dist/geometry/coords.js +0 -16
- package/dist/geometry/distance.d.ts +0 -24
- package/dist/geometry/distance.js +0 -24
- package/dist/geometry/errors.d.ts +21 -36
- package/dist/geometry/errors.js +49 -29
- package/dist/geometry/geojson.d.ts +85 -0
- package/dist/geometry/geojson.js +173 -0
- package/dist/geometry/index.d.ts +38 -23
- package/dist/geometry/index.js +43 -31
- package/dist/geometry/measure.d.ts +0 -27
- package/dist/geometry/measure.js +0 -27
- package/dist/geometry/predicates.d.ts +0 -9
- package/dist/geometry/predicates.js +0 -9
- package/dist/geometry/public-bounds.d.ts +26 -0
- package/dist/geometry/public-bounds.js +30 -0
- package/dist/geometry/public-combine.d.ts +78 -0
- package/dist/geometry/public-combine.js +82 -0
- package/dist/geometry/public-create.d.ts +54 -0
- package/dist/geometry/public-create.js +70 -0
- package/dist/geometry/public-measure.d.ts +170 -0
- package/dist/geometry/public-measure.js +283 -0
- package/dist/geometry/public-predicates.d.ts +54 -0
- package/dist/geometry/public-predicates.js +144 -0
- package/dist/geometry/public-repair.d.ts +75 -0
- package/dist/geometry/public-repair.js +77 -0
- package/dist/geometry/simplify.d.ts +0 -7
- package/dist/geometry/simplify.js +0 -7
- package/dist/geometry/split.d.ts +0 -20
- package/dist/geometry/split.js +0 -20
- package/dist/geometry/units.d.ts +20 -12
- package/dist/geometry/units.js +20 -12
- package/dist/index.d.ts +66 -66
- package/dist/index.js +6 -18
- package/dist/messages.d.ts +7 -7
- package/dist/modes/draw/circle.js +83 -207
- package/dist/modes/draw/commit-layer.d.ts +5 -16
- package/dist/modes/draw/commit-layer.js +2 -13
- package/dist/modes/draw/freehand.js +108 -246
- package/dist/modes/draw/image.js +4 -2
- package/dist/modes/draw/index.d.ts +5 -5
- package/dist/modes/draw/index.js +5 -5
- package/dist/modes/draw/line.js +18 -354
- package/dist/modes/draw/point.js +29 -78
- package/dist/modes/draw/polygon.js +23 -368
- package/dist/modes/draw/trace-support.d.ts +43 -36
- package/dist/modes/draw/trace-support.js +95 -98
- package/dist/modes/draw/vertex-drawing.d.ts +1 -0
- package/dist/modes/draw/vertex-drawing.js +176 -0
- package/dist/modes/handler.d.ts +1 -285
- package/dist/modes/manager.d.ts +2 -2
- package/dist/modes/manager.js +3 -0
- package/dist/modes/select/box-selection.d.ts +3 -3
- package/dist/modes/select/box-selection.js +2 -1
- package/dist/modes/select/click-handler.d.ts +5 -5
- package/dist/modes/select/click-handler.js +22 -20
- package/dist/modes/select/cursor-handler.d.ts +2 -2
- package/dist/modes/select/drag/intermediate-writes.js +1 -1
- package/dist/modes/select/drag/move.js +3 -3
- package/dist/modes/select/drag/operation.d.ts +3 -3
- package/dist/modes/select/drag/radius.js +5 -4
- package/dist/modes/select/drag/transform.d.ts +2 -2
- package/dist/modes/select/drag/transform.js +11 -5
- package/dist/modes/select/drag/vertex.d.ts +2 -2
- package/dist/modes/select/drag/vertex.js +13 -8
- package/dist/modes/select/drag-handler.js +44 -25
- package/dist/modes/select/mode.js +17 -17
- package/dist/modes/select/shortcut-handler.d.ts +8 -8
- package/dist/modes/select/shortcut-handler.js +9 -7
- package/dist/operations/layer-operations.js +29 -168
- package/dist/operations/resize.d.ts +2 -2
- package/dist/operations/resize.js +5 -5
- package/dist/operations/rotate.js +5 -5
- package/dist/operations/selection-operations.d.ts +16 -1
- package/dist/operations/selection-operations.js +28 -13
- package/dist/operations/shared-vertex.js +4 -2
- package/dist/operations/trace-graph.d.ts +0 -18
- package/dist/operations/trace-graph.js +0 -18
- package/dist/operations/vertex.js +36 -35
- package/dist/shared/color.d.ts +1 -0
- package/dist/shared/color.js +245 -0
- package/dist/shared/config/constants.d.ts +1 -54
- package/dist/shared/config/constants.js +1 -58
- package/dist/shared/config/feature-style.d.ts +16 -13
- package/dist/shared/config/feature-style.js +9 -0
- package/dist/shared/config/rendering.d.ts +3 -3
- package/dist/shared/config/selection-highlight.d.ts +0 -15
- package/dist/shared/config/selection-highlight.js +4 -7
- package/dist/shared/config/selection.d.ts +2 -32
- package/dist/shared/config/selection.js +0 -18
- package/dist/shared/config/topology.d.ts +2 -2
- package/dist/shared/config/trace.d.ts +4 -4
- package/dist/shared/math/angle.d.ts +1 -1
- package/dist/shared/math/angle.js +1 -1
- package/dist/shared/math/circle.d.ts +1 -1
- package/dist/shared/math/circle.js +1 -1
- package/dist/shared/math/distance.d.ts +2 -1
- package/dist/shared/math/distance.js +3 -2
- package/dist/shared/math/index.d.ts +1 -1
- package/dist/shared/math/index.js +1 -1
- package/dist/shared/math/transform.d.ts +23 -0
- package/dist/shared/math/transform.js +47 -28
- package/dist/shared/properties.d.ts +18 -0
- package/dist/shared/properties.js +129 -0
- package/dist/shared/types/events.d.ts +15 -7
- package/dist/shared/types/model.d.ts +109 -159
- package/dist/shared/types/style.d.ts +1 -1
- package/dist/shared/utils/color.d.ts +2 -36
- package/dist/shared/utils/color.js +13 -70
- package/dist/shared/utils/coordinates.d.ts +30 -4
- package/dist/shared/utils/coordinates.js +56 -10
- package/dist/shared/utils/event-emitter.d.ts +1 -262
- package/dist/shared/utils/event-emitter.js +4 -3
- package/dist/shared/utils/feature-bbox.js +8 -7
- package/dist/shared/utils/feature-segments.js +5 -4
- package/dist/shared/utils/image.d.ts +0 -4
- package/dist/shared/utils/image.js +0 -6
- package/dist/shared/utils/name-generator.d.ts +14 -20
- package/dist/shared/utils/name-generator.js +20 -3
- package/dist/shared/utils/pixel-ratio.d.ts +9 -3
- package/dist/shared/utils/pixel-ratio.js +13 -4
- package/dist/shared/utils/property.d.ts +7 -50
- package/dist/shared/utils/property.js +22 -87
- package/dist/snapping/custom-targets.js +21 -4
- package/dist/snapping/indicator.js +20 -11
- package/dist/snapping/providers/display.d.ts +6 -1
- package/dist/snapping/providers/display.js +2 -1
- package/dist/snapping/providers/guide.d.ts +3 -43
- package/dist/snapping/providers/guide.js +1 -44
- package/dist/snapping/providers/intersection.js +1 -1
- package/dist/snapping/providers/store.js +3 -3
- package/dist/snapping/service.js +18 -7
- package/dist/snapping/types.d.ts +9 -35
- package/dist/store/draw-store.js +233 -142
- package/dist/store/local-visibility.d.ts +11 -6
- package/dist/store/local-visibility.js +38 -7
- package/dist/store/lock.d.ts +0 -6
- package/dist/store/lock.js +0 -6
- package/dist/store/memory/change-bus.d.ts +3 -3
- package/dist/store/memory/change-bus.js +12 -0
- package/dist/store/memory/file-store.d.ts +2 -2
- package/dist/store/memory/ui-state.d.ts +1 -51
- package/dist/store/memory/ui-state.js +122 -134
- package/dist/store/memory.d.ts +1 -8
- package/dist/store/memory.js +249 -45
- package/dist/store/ordering.d.ts +9 -0
- package/dist/store/ordering.js +17 -0
- package/dist/store/spatial/spatial-index.d.ts +1 -1
- package/dist/store/spatial/spatial-index.js +1 -1
- package/dist/store/spatial/store-spatial-index.d.ts +3 -1
- package/dist/store/spatial/store-spatial-index.js +9 -3
- package/dist/store/store.d.ts +66 -107
- package/dist/store/types.d.ts +1 -1
- package/dist/store/writable-layer.d.ts +1 -1
- package/dist/store/writable-layer.js +2 -2
- package/dist/table/builder.d.ts +83 -0
- package/dist/table/builder.js +381 -0
- package/dist/table/index.d.ts +37 -0
- package/dist/table/index.js +5 -0
- package/dist/table/packed-rtree.d.ts +1 -0
- package/dist/{display → table}/packed-rtree.js +1 -1
- package/dist/table/partition.d.ts +1 -0
- package/dist/{display → table}/partition.js +3 -3
- package/dist/table/prepare.d.ts +44 -0
- package/dist/table/prepare.js +136 -0
- package/dist/table/table.d.ts +1 -0
- package/dist/{display/columnar → table}/table.js +29 -25
- package/dist/{display/columnar → table}/types.d.ts +68 -72
- package/dist/table/types.js +3 -0
- package/dist/view/coordinator.js +4 -3
- package/dist/view/feature-companion.d.ts +13 -7
- package/dist/view/feature-companion.js +11 -3
- package/dist/view/globe-subdivision.js +3 -3
- package/dist/view/layer/attach.d.ts +12 -6
- package/dist/view/layer/attach.js +86 -10
- package/dist/view/layer/custom-layer.js +40 -11
- package/dist/view/layer/display-list.js +2 -1
- package/dist/view/layer/drape-planner.d.ts +2 -2
- package/dist/view/layer/frame-render.d.ts +3 -3
- package/dist/view/layer/frame-render.js +7 -2
- package/dist/view/layer/frame-state.d.ts +6 -6
- package/dist/view/layer/index.d.ts +2 -2
- package/dist/view/layer/index.js +1 -1
- package/dist/view/layer/render.d.ts +4 -4
- package/dist/view/layer/render.js +3 -8
- package/dist/view/layer/renderers.d.ts +2 -2
- package/dist/view/layer/renderers.js +1 -1
- package/dist/view/layer/slot-manager.d.ts +2 -2
- package/dist/view/layer/slot-manager.js +4 -4
- package/dist/view/layer/slots.d.ts +2 -2
- package/dist/view/layer/slots.js +1 -1
- package/dist/view/layer/store-retained-bbox.js +3 -2
- package/dist/view/layer/store-retained-classify.d.ts +5 -7
- package/dist/view/layer/store-retained-classify.js +19 -7
- package/dist/view/layer/store-retained-collect.js +8 -7
- package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
- package/dist/view/layer/store-retained-coord-patch.js +13 -4
- package/dist/view/layer/store-retained-immediate.d.ts +3 -3
- package/dist/view/layer/store-retained-immediate.js +3 -8
- package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
- package/dist/view/layer/store-retained.d.ts +2 -2
- package/dist/view/layer/store-retained.js +1 -1
- package/dist/view/renderers/batch-manager.js +8 -7
- package/dist/view/renderers/drawer.js +21 -15
- package/dist/view/renderers/image.js +13 -39
- package/dist/view/renderers/line/line-types.d.ts +3 -3
- package/dist/view/renderers/line/sdf-line.js +3 -1
- package/dist/view/renderers/point/billboard-depth.js +1 -1
- package/dist/view/renderers/point/point-instance.js +1 -1
- package/dist/view/renderers/point/point-shape.js +2 -2
- package/dist/view/renderers/point/point-style.js +48 -4
- package/dist/view/renderers/polygon/batch.js +1 -2
- package/dist/view/renderers/polygon/fill.js +3 -1
- package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
- package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
- package/dist/view/renderers/stroke.js +3 -1
- package/dist/view/shaders/helpers.d.ts +2 -42
- package/dist/view/shaders/helpers.js +0 -6
- package/dist/view/shaders/projection.d.ts +15 -7
- package/dist/view/shaders/projection.js +23 -6
- package/dist/view/shaders/quad.d.ts +16 -12
- package/dist/view/shaders/quad.js +34 -13
- package/dist/view/style-rule.d.ts +5 -42
- package/dist/view/style-rule.js +20 -44
- package/dist/view/terrain/binding.d.ts +1 -0
- package/dist/view/terrain/binding.js +29 -0
- package/dist/view/terrain/context.d.ts +3 -4
- package/dist/view/terrain/context.js +4 -5
- package/dist/view/terrain/drape/geometry.js +1 -1
- package/dist/view/terrain/drape/pass.d.ts +1 -1
- package/dist/view/terrain/drape/pass.js +8 -7
- package/dist/view/terrain/polygon.d.ts +9 -5
- package/dist/view/terrain/polygon.js +16 -2
- package/dist/view/terrain/state.d.ts +1 -1
- package/dist/view/terrain/state.js +1 -1
- package/dist/view/terrain/tessellation.d.ts +2 -2
- package/dist/view/terrain/tessellation.js +1 -1
- package/dist/view/ui/auxiliary-handles.d.ts +6 -29
- package/dist/view/ui/bounds.js +8 -12
- package/dist/view/ui/handle-test.js +2 -2
- package/dist/view/ui/handle-thinning.js +17 -17
- package/dist/view/ui/handles.js +21 -13
- package/dist/view/ui/helper.d.ts +1 -1
- package/dist/view/ui/helper.js +1 -1
- package/dist/view/ui/index.d.ts +1 -1
- package/dist/view/ui/selection-scope.js +4 -2
- package/dist/view/ui/selection-ui/bounding-box.js +6 -6
- package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
- package/dist/view/ui/selection-ui/extension-registry.js +70 -7
- package/dist/view/ui/selection-ui/index.d.ts +2 -2
- package/dist/view/ui/selection-ui/index.js +1 -1
- package/dist/view/ui/selection-ui/renderer.js +15 -38
- package/dist/view/ui/selection-ui/types.d.ts +17 -2
- package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
- package/dist/view/ui/selection-ui-drawer.js +63 -2
- package/dist/view/ui/tentative.js +1 -1
- package/dist/webgl/index.d.ts +65 -0
- package/dist/webgl/index.js +62 -0
- package/package.json +38 -15
- package/dist/api/api.d.ts +0 -1259
- package/dist/api/api.js +0 -86
- package/dist/api/context.d.ts +0 -173
- package/dist/api/display-api.js +0 -23
- package/dist/api/event-api.d.ts +0 -13
- package/dist/api/event-api.js +0 -17
- package/dist/api/extension-api.d.ts +0 -46
- package/dist/api/extension-api.js +0 -85
- package/dist/api/feature-api.d.ts +0 -11
- package/dist/api/feature-api.js +0 -101
- package/dist/api/geometry/apply.d.ts +0 -51
- package/dist/api/geometry/boolean.d.ts +0 -28
- package/dist/api/geometry/boolean.js +0 -65
- package/dist/api/geometry/types.d.ts +0 -31
- package/dist/api/geometry-operations.d.ts +0 -162
- package/dist/api/geometry-operations.js +0 -94
- package/dist/api/group-api.d.ts +0 -10
- package/dist/api/group-api.js +0 -78
- package/dist/api/import-export/constants.d.ts +0 -29
- package/dist/api/import-export/constants.js +0 -40
- package/dist/api/import-export/file-name.d.ts +0 -10
- package/dist/api/import-export/file-name.js +0 -20
- package/dist/api/import-export/geojson-export.d.ts +0 -19
- package/dist/api/import-export/image-import.d.ts +0 -12
- package/dist/api/import-export/image-import.js +0 -53
- package/dist/api/import-export/index.d.ts +0 -9
- package/dist/api/import-export/index.js +0 -107
- package/dist/api/import-export/native-format.d.ts +0 -15
- package/dist/api/import-export/style-validation.d.ts +0 -27
- package/dist/api/import-export/style-validation.js +0 -49
- package/dist/api/import-export/types.d.ts +0 -26
- package/dist/api/index.d.ts +0 -15
- package/dist/api/index.js +0 -3
- package/dist/api/input-api.d.ts +0 -158
- package/dist/api/input-api.js +0 -144
- package/dist/api/instance-api.d.ts +0 -38
- package/dist/api/instance-api.js +0 -136
- package/dist/api/layer-api.d.ts +0 -12
- package/dist/api/layer-api.js +0 -62
- package/dist/api/selection-api.d.ts +0 -7
- package/dist/api/selection-api.js +0 -78
- package/dist/api/snapping-api.d.ts +0 -125
- package/dist/api/snapping-api.js +0 -50
- package/dist/api/topology-api.d.ts +0 -30
- package/dist/api/topology-api.js +0 -16
- package/dist/api/tracing-api.d.ts +0 -31
- package/dist/api/tracing-api.js +0 -16
- package/dist/dispatcher/hit-test/index.d.ts +0 -14
- package/dist/dispatcher/hit-test/index.js +0 -9
- package/dist/dispatcher/index.d.ts +0 -15
- package/dist/dispatcher/index.js +0 -3
- package/dist/display/columnar/index.d.ts +0 -12
- package/dist/display/columnar/index.js +0 -13
- package/dist/display/columnar/prepare.d.ts +0 -42
- package/dist/display/columnar/prepare.js +0 -116
- package/dist/display/index.d.ts +0 -13
- package/dist/display/types.js +0 -43
- package/dist/maplibre-gl-draw.d.ts +0 -47
- package/dist/modes/cursor.js +0 -72
- package/dist/modes/index.d.ts +0 -7
- package/dist/operations/index.d.ts +0 -9
- package/dist/operations/index.js +0 -3
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/mutation-hooks.d.ts +0 -28
- package/dist/plugins/mutation-hooks.js +0 -84
- package/dist/plugins/plugin-context.js +0 -367
- package/dist/plugins/plugin-manager.d.ts +0 -103
- package/dist/plugins/plugin-manager.js +0 -316
- package/dist/plugins/plugin.d.ts +0 -529
- package/dist/shared/config/index.d.ts +0 -17
- package/dist/shared/config/index.js +0 -8
- package/dist/shared/utils/index.d.ts +0 -15
- package/dist/shared/utils/index.js +0 -24
- package/dist/snapping/index.d.ts +0 -14
- package/dist/snapping/index.js +0 -4
- package/dist/store/change-merger.js +0 -102
- package/dist/store/event-bridge.js +0 -161
- package/dist/store/index.d.ts +0 -12
- package/dist/store/index.js +0 -4
- package/dist/view/index.d.ts +0 -47
- package/dist/view/index.js +0 -20
- /package/dist/api/{geometry/types.js → datasets.js} +0 -0
- /package/dist/api/{import-export/types.js → document.js} +0 -0
- /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
- /package/dist/{display/index.js → api/events.js} +0 -0
- /package/dist/{modes/index.js → api/extension/context.js} +0 -0
- /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
- /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
- /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
- /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
- /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
- /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
- /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
- /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
- /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
- /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
- /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
- /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
- /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
- /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
- /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
- /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
- /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
- /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
- /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
- /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
- /package/dist/{display → dataset}/chunk-set.js +0 -0
- /package/dist/{display → dataset}/dataset.d.ts +0 -0
- /package/dist/{display → dataset}/manager.js +0 -0
- /package/dist/{display → dataset}/provider.js +0 -0
- /package/dist/{display → dataset}/selection.d.ts +0 -0
- /package/dist/{display → dataset}/selection.js +0 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The events: one list, `DrawEvents`, that applications and extensions subscribe to alike
|
|
3
|
+
*
|
|
4
|
+
* An event is named `resource.pastParticiple`. A change of the document carries its source,
|
|
5
|
+
* and `document.changed` arrives once per transaction with every change of it.
|
|
6
|
+
*/
|
|
7
|
+
import type { Position } from 'geojson';
|
|
8
|
+
import type { Dataset, DatasetRow } from './datasets.js';
|
|
9
|
+
import type { DrawError } from './errors.js';
|
|
10
|
+
import type { Hit } from './extension/provider.js';
|
|
11
|
+
import type { UpdateSource } from './extension/store.js';
|
|
12
|
+
import type { Feature, FeatureInput, FileData, Group, Layer, LoadResult, Metadata, MoveTarget } from './model.js';
|
|
13
|
+
import type { RuntimeOptions } from './options.js';
|
|
14
|
+
import type { LayerStackEntry, Mode, Selection, SelectionType, SnapResult, VertexSelection } from './state.js';
|
|
15
|
+
/** A point on the screen, as `[x, y]` in CSS pixels. */
|
|
16
|
+
export type ScreenPoint = [number, number];
|
|
17
|
+
/**
|
|
18
|
+
* Everything one transaction changed, as `document.changed` and the subscribers of the Store
|
|
19
|
+
* receive it. It arrives once per transaction, and each category is present only when the
|
|
20
|
+
* transaction changed it.
|
|
21
|
+
*
|
|
22
|
+
* `document.changed` fires only for a transaction that changed the document (features, layers,
|
|
23
|
+
* groups, metadata or files); the selection, the editing and the mode are carried along when
|
|
24
|
+
* the same transaction changed them. A change of the state of this client alone has its own
|
|
25
|
+
* event (`selection.changed`, `mode.changed` and so on).
|
|
26
|
+
*/
|
|
27
|
+
export interface DocumentChange {
|
|
28
|
+
/** Where the writes came from */
|
|
29
|
+
source?: UpdateSource;
|
|
30
|
+
/**
|
|
31
|
+
* True when the notification replaces the whole document at once, as a Store given in the
|
|
32
|
+
* `store` option does when it takes a document from elsewhere. The current mode drops what
|
|
33
|
+
* it was drawing then (`ModeHandler.onCancel`), because the shape it holds may refer to
|
|
34
|
+
* what is gone. A Store sets it; the changes that come with it list what was replaced.
|
|
35
|
+
*/
|
|
36
|
+
reset?: boolean;
|
|
37
|
+
/** The features created, updated and deleted */
|
|
38
|
+
features?: {
|
|
39
|
+
created?: Feature[];
|
|
40
|
+
updated?: Array<{
|
|
41
|
+
id: string;
|
|
42
|
+
feature: Feature;
|
|
43
|
+
previous: Feature;
|
|
44
|
+
/** True while a drag or a drawing is in progress; a final update always follows */
|
|
45
|
+
isIntermediate?: boolean;
|
|
46
|
+
}>;
|
|
47
|
+
deleted?: Feature[];
|
|
48
|
+
};
|
|
49
|
+
/** The layers created, updated and deleted, and the change of their stacking order */
|
|
50
|
+
layers?: {
|
|
51
|
+
created?: Layer[];
|
|
52
|
+
updated?: Array<{
|
|
53
|
+
id: string;
|
|
54
|
+
layer: Layer;
|
|
55
|
+
previous: Layer;
|
|
56
|
+
}>;
|
|
57
|
+
deleted?: Layer[];
|
|
58
|
+
orderChanged?: {
|
|
59
|
+
order: string[];
|
|
60
|
+
previous: string[];
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/** The groups created, updated and deleted */
|
|
64
|
+
groups?: {
|
|
65
|
+
created?: Group[];
|
|
66
|
+
updated?: Array<{
|
|
67
|
+
id: string;
|
|
68
|
+
group: Group;
|
|
69
|
+
previous: Group;
|
|
70
|
+
}>;
|
|
71
|
+
deleted?: Group[];
|
|
72
|
+
};
|
|
73
|
+
/** The new order of the items of a layer */
|
|
74
|
+
layerReorder?: {
|
|
75
|
+
layerId: string;
|
|
76
|
+
order: string[];
|
|
77
|
+
previous: string[];
|
|
78
|
+
};
|
|
79
|
+
/** The new order of the features of a group */
|
|
80
|
+
groupReorder?: {
|
|
81
|
+
groupId: string;
|
|
82
|
+
featureIds: string[];
|
|
83
|
+
previous: string[];
|
|
84
|
+
};
|
|
85
|
+
/** The new selection and the one before it */
|
|
86
|
+
selection?: {
|
|
87
|
+
type: SelectionType | null;
|
|
88
|
+
ids: string[];
|
|
89
|
+
previousType: SelectionType | null;
|
|
90
|
+
previousIds: string[];
|
|
91
|
+
};
|
|
92
|
+
/** The IDs of the features whose editing started and ended */
|
|
93
|
+
editing?: {
|
|
94
|
+
started?: string[];
|
|
95
|
+
ended?: string[];
|
|
96
|
+
};
|
|
97
|
+
/** The new mode and the one before it */
|
|
98
|
+
mode?: {
|
|
99
|
+
mode: Mode;
|
|
100
|
+
previous: Mode;
|
|
101
|
+
};
|
|
102
|
+
/** The new metadata and the one before it */
|
|
103
|
+
metadata?: {
|
|
104
|
+
metadata: Metadata;
|
|
105
|
+
previous: Metadata;
|
|
106
|
+
};
|
|
107
|
+
/** The embedded files created and deleted */
|
|
108
|
+
files?: {
|
|
109
|
+
created?: FileData[];
|
|
110
|
+
deleted?: FileData[];
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* The events, by name, with their payloads.
|
|
115
|
+
*/
|
|
116
|
+
export interface DrawEvents {
|
|
117
|
+
/** A feature was created */
|
|
118
|
+
'feature.created': {
|
|
119
|
+
feature: Feature;
|
|
120
|
+
source: string;
|
|
121
|
+
};
|
|
122
|
+
/** A feature changed; `intermediate` is true while a drag is in progress */
|
|
123
|
+
'feature.updated': {
|
|
124
|
+
feature: Feature;
|
|
125
|
+
previous: Feature;
|
|
126
|
+
source: string;
|
|
127
|
+
intermediate: boolean;
|
|
128
|
+
};
|
|
129
|
+
/** A feature was deleted */
|
|
130
|
+
'feature.deleted': {
|
|
131
|
+
feature: Feature;
|
|
132
|
+
source: string;
|
|
133
|
+
};
|
|
134
|
+
/** A feature moved between layers or groups */
|
|
135
|
+
'feature.moved': {
|
|
136
|
+
feature: Feature;
|
|
137
|
+
from: MoveTarget;
|
|
138
|
+
to: MoveTarget;
|
|
139
|
+
source: string;
|
|
140
|
+
};
|
|
141
|
+
/** A layer was created */
|
|
142
|
+
'layer.created': {
|
|
143
|
+
layer: Layer;
|
|
144
|
+
source: string;
|
|
145
|
+
};
|
|
146
|
+
/** A layer changed */
|
|
147
|
+
'layer.updated': {
|
|
148
|
+
layer: Layer;
|
|
149
|
+
previous: Layer;
|
|
150
|
+
source: string;
|
|
151
|
+
};
|
|
152
|
+
/** A layer was deleted */
|
|
153
|
+
'layer.deleted': {
|
|
154
|
+
layer: Layer;
|
|
155
|
+
source: string;
|
|
156
|
+
};
|
|
157
|
+
/** The stacking order of the layers changed */
|
|
158
|
+
'layer.reordered': {
|
|
159
|
+
order: readonly string[];
|
|
160
|
+
previous: readonly string[];
|
|
161
|
+
source: string;
|
|
162
|
+
};
|
|
163
|
+
/** A group was created */
|
|
164
|
+
'group.created': {
|
|
165
|
+
group: Group;
|
|
166
|
+
source: string;
|
|
167
|
+
};
|
|
168
|
+
/** A group changed */
|
|
169
|
+
'group.updated': {
|
|
170
|
+
group: Group;
|
|
171
|
+
previous: Group;
|
|
172
|
+
source: string;
|
|
173
|
+
};
|
|
174
|
+
/** A group was ungrouped */
|
|
175
|
+
'group.deleted': {
|
|
176
|
+
group: Group;
|
|
177
|
+
source: string;
|
|
178
|
+
};
|
|
179
|
+
/** The title or the description changed */
|
|
180
|
+
'metadata.updated': {
|
|
181
|
+
metadata: Metadata;
|
|
182
|
+
previous: Metadata;
|
|
183
|
+
source: string;
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* Every change of one transaction that changed the document (features, layers, groups,
|
|
187
|
+
* metadata or files); it arrives once per such transaction, after the events of the
|
|
188
|
+
* resources. A change of the selection, the mode or another state of this client alone does
|
|
189
|
+
* not fire it.
|
|
190
|
+
*/
|
|
191
|
+
'document.changed': DocumentChange;
|
|
192
|
+
/** A document was loaded */
|
|
193
|
+
'document.loaded': {
|
|
194
|
+
result: LoadResult;
|
|
195
|
+
source: string;
|
|
196
|
+
};
|
|
197
|
+
/** The selection changed */
|
|
198
|
+
'selection.changed': {
|
|
199
|
+
selection: Selection;
|
|
200
|
+
previous: Selection;
|
|
201
|
+
};
|
|
202
|
+
/** The vertex selection changed */
|
|
203
|
+
'vertexSelection.changed': {
|
|
204
|
+
selection: VertexSelection | null;
|
|
205
|
+
previous: VertexSelection | null;
|
|
206
|
+
};
|
|
207
|
+
/** A drag started */
|
|
208
|
+
'drag.started': {
|
|
209
|
+
kind: 'feature' | 'vertex' | 'handle';
|
|
210
|
+
featureIds: string[];
|
|
211
|
+
};
|
|
212
|
+
/** A drag ended; `cancelled` is true when it was cancelled */
|
|
213
|
+
'drag.ended': {
|
|
214
|
+
kind: 'feature' | 'vertex' | 'handle';
|
|
215
|
+
featureIds: string[];
|
|
216
|
+
cancelled: boolean;
|
|
217
|
+
};
|
|
218
|
+
/** The mode changed */
|
|
219
|
+
'mode.changed': {
|
|
220
|
+
mode: Mode;
|
|
221
|
+
previous: Mode;
|
|
222
|
+
};
|
|
223
|
+
/** The items this client hides changed; `ids` is the whole set after the change */
|
|
224
|
+
'hidden.changed': {
|
|
225
|
+
ids: readonly string[];
|
|
226
|
+
};
|
|
227
|
+
/** Read-only was turned on or off */
|
|
228
|
+
'readOnly.changed': {
|
|
229
|
+
readOnly: boolean;
|
|
230
|
+
};
|
|
231
|
+
/** The interaction lock was turned on or off */
|
|
232
|
+
'interactionLock.changed': {
|
|
233
|
+
locked: boolean;
|
|
234
|
+
};
|
|
235
|
+
/**
|
|
236
|
+
* `draw.options.update` changed the options; `options` and `previous` are what
|
|
237
|
+
* `draw.options.get()` returns after and before the change. An update that leaves every
|
|
238
|
+
* value as it was does not fire it
|
|
239
|
+
*/
|
|
240
|
+
'options.changed': {
|
|
241
|
+
options: Readonly<RuntimeOptions>;
|
|
242
|
+
previous: Readonly<RuntimeOptions>;
|
|
243
|
+
};
|
|
244
|
+
/** The snapping target changed */
|
|
245
|
+
'snap.changed': {
|
|
246
|
+
result: SnapResult | null;
|
|
247
|
+
};
|
|
248
|
+
/**
|
|
249
|
+
* The shape being drawn changed, or was cleared (`feature` is `null`). It fires once per
|
|
250
|
+
* change, with no throttling: at each vertex, at each move of the pointer that moves the
|
|
251
|
+
* shape, and when the shape is created, cancelled or left. `feature` has the type, the
|
|
252
|
+
* geometry and the layer of the shape, the ID it will be created with, and the radius of a
|
|
253
|
+
* circle; it is a copy that the drawing does not change afterwards. `confirmedVertices` and
|
|
254
|
+
* `highlightVertex` are the options the shape was shown with (`ModeContext.preview.set`):
|
|
255
|
+
* each is left out when it was not given, and both when the shape is cleared.
|
|
256
|
+
*/
|
|
257
|
+
'preview.changed': {
|
|
258
|
+
feature: FeatureInput | null;
|
|
259
|
+
confirmedVertices?: number;
|
|
260
|
+
highlightVertex?: number;
|
|
261
|
+
};
|
|
262
|
+
/**
|
|
263
|
+
* A click on the map in the select mode, whether it hit something or not. `lngLat` is the
|
|
264
|
+
* position of the pointer before snapping, and `hit` the frontmost thing under it (a feature,
|
|
265
|
+
* a row of a dataset, a companion), or `null` when the click hit nothing
|
|
266
|
+
*/
|
|
267
|
+
'map.clicked': {
|
|
268
|
+
lngLat: Position;
|
|
269
|
+
point: ScreenPoint;
|
|
270
|
+
hit: Hit | null;
|
|
271
|
+
};
|
|
272
|
+
/** A row of a dataset was clicked */
|
|
273
|
+
'dataset.clicked': {
|
|
274
|
+
datasetId: string;
|
|
275
|
+
rowIndex: number;
|
|
276
|
+
row: DatasetRow;
|
|
277
|
+
lngLat: Position;
|
|
278
|
+
point: ScreenPoint;
|
|
279
|
+
};
|
|
280
|
+
/** A dataset was added */
|
|
281
|
+
'dataset.added': {
|
|
282
|
+
dataset: Dataset;
|
|
283
|
+
};
|
|
284
|
+
/** A dataset was removed */
|
|
285
|
+
'dataset.removed': {
|
|
286
|
+
datasetId: string;
|
|
287
|
+
};
|
|
288
|
+
/** The stacking order of the datasets changed */
|
|
289
|
+
'dataset.reordered': {
|
|
290
|
+
order: readonly string[];
|
|
291
|
+
previous: readonly string[];
|
|
292
|
+
};
|
|
293
|
+
/**
|
|
294
|
+
* The image mode asks for an image to place at a position: the application picks a file
|
|
295
|
+
* and loads it with `document.load(file, { coordinate: lngLat, zoom, layerId })`. `lngLat` is
|
|
296
|
+
* the clicked position when a click led to the mode (a listener of `map.clicked` entered it),
|
|
297
|
+
* and the center of the map when the mode was entered otherwise
|
|
298
|
+
*/
|
|
299
|
+
'image.requested': {
|
|
300
|
+
lngLat: Position;
|
|
301
|
+
zoom: number;
|
|
302
|
+
layerId: string;
|
|
303
|
+
};
|
|
304
|
+
/** The divisions of the stacking order changed */
|
|
305
|
+
'layerStack.changed': {
|
|
306
|
+
entries: readonly LayerStackEntry[];
|
|
307
|
+
};
|
|
308
|
+
/** Loading or reading an image failed */
|
|
309
|
+
error: {
|
|
310
|
+
error: DrawError;
|
|
311
|
+
source: string;
|
|
312
|
+
featureId?: string;
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/** A function that receives the payload of an event. */
|
|
316
|
+
export type DrawEventListener<K extends keyof DrawEvents = keyof DrawEvents> = (payload: DrawEvents[K]) => void;
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The contexts an extension works through
|
|
3
|
+
*
|
|
4
|
+
* Each kind of extension receives one narrow context with only what that kind needs. Every
|
|
5
|
+
* type a context holds is part of the public API and follows semver.
|
|
6
|
+
*/
|
|
7
|
+
import type { Position } from 'geojson';
|
|
8
|
+
import type { BBox } from '../../geometry/types.js';
|
|
9
|
+
import type { DatasetRow } from '../datasets.js';
|
|
10
|
+
import type { Draw } from '../draw.js';
|
|
11
|
+
import type { DrawingResource } from '../drawing.js';
|
|
12
|
+
import type { DrawEvents, ScreenPoint } from '../events.js';
|
|
13
|
+
import type { ExtensionsCollections } from '../extensions.js';
|
|
14
|
+
import type { Feature, FeatureInput, FeatureType, Layer } from '../model.js';
|
|
15
|
+
import type { SelectionStyleOptions } from '../options.js';
|
|
16
|
+
import type { Mode, SnapResult } from '../state.js';
|
|
17
|
+
import type { Hit } from './provider.js';
|
|
18
|
+
import type { StoreView } from './store.js';
|
|
19
|
+
/** The positions and the heights on the terrain, for placing things on it. */
|
|
20
|
+
export interface TerrainAnchors {
|
|
21
|
+
/**
|
|
22
|
+
* The point on the screen of a position lifted to the ground.
|
|
23
|
+
*
|
|
24
|
+
* @returns The point, or `null` when the terrain is off or not ready
|
|
25
|
+
*/
|
|
26
|
+
project(lngLat: Position): ScreenPoint | null;
|
|
27
|
+
/**
|
|
28
|
+
* The height of the ground at a position.
|
|
29
|
+
*
|
|
30
|
+
* @returns The height in meters; 0 when the terrain is off
|
|
31
|
+
*/
|
|
32
|
+
elevation(lngLat: Position): number;
|
|
33
|
+
/**
|
|
34
|
+
* The opacity for a mark at a position: lower when the terrain hides it from the camera.
|
|
35
|
+
*
|
|
36
|
+
* @returns A value from 0 to 1; 1 when the terrain is off
|
|
37
|
+
*/
|
|
38
|
+
ghostOpacity(lngLat: Position): number;
|
|
39
|
+
/** A number that changes whenever the heights `elevation` returns may have changed. */
|
|
40
|
+
generation(): number;
|
|
41
|
+
}
|
|
42
|
+
/** The automatic names of new features, layers and groups. */
|
|
43
|
+
export interface NameGenerator {
|
|
44
|
+
/**
|
|
45
|
+
* The next name for a type.
|
|
46
|
+
*
|
|
47
|
+
* @returns The name, or `undefined` for a feature when automatic names are off
|
|
48
|
+
*/
|
|
49
|
+
next(type: FeatureType | 'Layer' | 'Group'): string | undefined;
|
|
50
|
+
}
|
|
51
|
+
/** The conversion between positions on the map and points on the screen. */
|
|
52
|
+
export interface ScreenContext {
|
|
53
|
+
/** The point on the screen of a position. */
|
|
54
|
+
project(lngLat: Position): ScreenPoint;
|
|
55
|
+
/** The position on the map of a point on the screen. */
|
|
56
|
+
unproject(point: ScreenPoint): Position;
|
|
57
|
+
/**
|
|
58
|
+
* The extent of a feature on the screen, in pixels; a feature off the screen still has
|
|
59
|
+
* one.
|
|
60
|
+
*
|
|
61
|
+
* @returns The corners of the extent, or `null` when the feature has nothing to draw
|
|
62
|
+
*/
|
|
63
|
+
bounds(feature: Feature): {
|
|
64
|
+
min: ScreenPoint;
|
|
65
|
+
max: ScreenPoint;
|
|
66
|
+
} | null;
|
|
67
|
+
/**
|
|
68
|
+
* The outline of the selection frame of a feature on the screen, in pixels, without the
|
|
69
|
+
* margin the frame is drawn with (`selectionStyle.boundingBox.margin`): its four corners in
|
|
70
|
+
* the order top left, top right, bottom right, bottom left of the shape as it stands
|
|
71
|
+
* unturned. It answers for every type: an image and any other turned shape give the turned
|
|
72
|
+
* corners, a line or an area the corners of its extent, a point the square its marker
|
|
73
|
+
* spans (its radius and its outline), and a custom type the corners of its `outline`, or of
|
|
74
|
+
* its `bounds` when it has none. A feature
|
|
75
|
+
* off the screen still has one. The engine draws the frame with every edge moved the margin
|
|
76
|
+
* outward from these corners.
|
|
77
|
+
*
|
|
78
|
+
* A custom type must not call it for its own features from its `outline` or `bounds`, which
|
|
79
|
+
* it calls.
|
|
80
|
+
*
|
|
81
|
+
* @returns The four corners, or an empty array when the feature has nothing to draw
|
|
82
|
+
*/
|
|
83
|
+
outline(feature: Feature): ScreenPoint[];
|
|
84
|
+
/** The zoom of the map */
|
|
85
|
+
readonly zoom: number;
|
|
86
|
+
/** The pixel ratio the drawing uses */
|
|
87
|
+
readonly pixelRatio: number;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* What every context of an extension has: the public API, the Store, the events, the
|
|
91
|
+
* terrain, the automatic names, the screen and a way to redraw, and the shape being drawn.
|
|
92
|
+
*/
|
|
93
|
+
export interface ExtensionContext {
|
|
94
|
+
/** The whole public API; an extension reads and writes the document through it */
|
|
95
|
+
readonly draw: Draw;
|
|
96
|
+
/** The Store, to read the document and the state and to subscribe to their changes */
|
|
97
|
+
readonly store: StoreView;
|
|
98
|
+
/**
|
|
99
|
+
* Subscribes to an event, with the same names as `draw.on`. The subscription ends by itself
|
|
100
|
+
* when the extension is removed.
|
|
101
|
+
*
|
|
102
|
+
* @returns The function that unsubscribes
|
|
103
|
+
*/
|
|
104
|
+
on<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): () => void;
|
|
105
|
+
/** Unsubscribes from an event. */
|
|
106
|
+
off<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): void;
|
|
107
|
+
/**
|
|
108
|
+
* Subscribes to the next occurrence of an event only.
|
|
109
|
+
*
|
|
110
|
+
* @returns The function that unsubscribes before it occurs
|
|
111
|
+
*/
|
|
112
|
+
once<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): () => void;
|
|
113
|
+
/** The positions and the heights on the terrain */
|
|
114
|
+
readonly terrain: TerrainAnchors;
|
|
115
|
+
/** The automatic names of new features, layers and groups */
|
|
116
|
+
readonly names: NameGenerator;
|
|
117
|
+
/** The conversion between the map and the screen */
|
|
118
|
+
readonly screen: ScreenContext;
|
|
119
|
+
/**
|
|
120
|
+
* Asks for the features to be drawn again.
|
|
121
|
+
*
|
|
122
|
+
* @param filter - Only the features of this type, or with these IDs; every feature when it
|
|
123
|
+
* is left out
|
|
124
|
+
*/
|
|
125
|
+
invalidate(filter?: {
|
|
126
|
+
type?: string;
|
|
127
|
+
ids?: string[];
|
|
128
|
+
}): void;
|
|
129
|
+
/**
|
|
130
|
+
* The shape the current drawing mode is drawing: the same object as `draw.drawing`, to place,
|
|
131
|
+
* finish, cancel, undo and redo its vertices
|
|
132
|
+
*/
|
|
133
|
+
readonly drawing: DrawingResource;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* The context of a plugin.
|
|
137
|
+
*/
|
|
138
|
+
export interface PluginContext extends ExtensionContext {
|
|
139
|
+
/**
|
|
140
|
+
* The same collections as `draw.extensions`. What a plugin adds through them is removed by
|
|
141
|
+
* itself when the plugin is removed.
|
|
142
|
+
*/
|
|
143
|
+
readonly extensions: ExtensionsCollections;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* The context of a mode.
|
|
147
|
+
*/
|
|
148
|
+
export interface ModeContext extends ExtensionContext {
|
|
149
|
+
/**
|
|
150
|
+
* Changes the mode.
|
|
151
|
+
*
|
|
152
|
+
* @returns False when the mode cannot be entered now
|
|
153
|
+
*/
|
|
154
|
+
setMode(mode: Mode): boolean;
|
|
155
|
+
/**
|
|
156
|
+
* The topmost feature or dataset row at a point on the screen.
|
|
157
|
+
*
|
|
158
|
+
* @param options - `tolerancePx` is how far from the point a hit may be, in pixels
|
|
159
|
+
* @returns What was hit, or `null`
|
|
160
|
+
*/
|
|
161
|
+
hitTest(point: ScreenPoint, options?: {
|
|
162
|
+
tolerancePx?: number;
|
|
163
|
+
}): Hit | null;
|
|
164
|
+
/** Where a point on the screen snaps to; its own position when nothing is snapped to. */
|
|
165
|
+
snap(point: ScreenPoint): SnapResult;
|
|
166
|
+
/**
|
|
167
|
+
* Creates a feature the way the built-in modes do: the writable layer, the ID, the
|
|
168
|
+
* automatic name and the reference zoom follow the same rules.
|
|
169
|
+
*
|
|
170
|
+
* @returns The new feature, or `null` when it is refused (read-only, a lock)
|
|
171
|
+
*/
|
|
172
|
+
commitFeature(input: FeatureInput): Feature | null;
|
|
173
|
+
/** Shows the shape being drawn before it is created. */
|
|
174
|
+
readonly preview: {
|
|
175
|
+
/**
|
|
176
|
+
* Shows this shape as the one being drawn.
|
|
177
|
+
*
|
|
178
|
+
* @param options - `confirmedVertices` is how many vertices from the start are placed:
|
|
179
|
+
* the line up to them is drawn solid and the rest, up to the pointer, dashed (every
|
|
180
|
+
* vertex when it is left out); `highlightVertex` is the index of a vertex drawn
|
|
181
|
+
* highlighted, such as the first vertex of an area the next click would close
|
|
182
|
+
*/
|
|
183
|
+
set(feature: FeatureInput, options?: {
|
|
184
|
+
confirmedVertices?: number;
|
|
185
|
+
highlightVertex?: number;
|
|
186
|
+
}): void;
|
|
187
|
+
/** Stops showing it */
|
|
188
|
+
clear(): void;
|
|
189
|
+
};
|
|
190
|
+
/** The cursor of the map. */
|
|
191
|
+
readonly cursor: {
|
|
192
|
+
/** Sets the cursor, as a CSS cursor value */
|
|
193
|
+
set(cursor: string): void;
|
|
194
|
+
/**
|
|
195
|
+
* Goes back to the cursor of the mode: the one it set in `onEnter`, or the cursor of the
|
|
196
|
+
* map when it set none there. The cursor the mode set is taken back when it is left.
|
|
197
|
+
*/
|
|
198
|
+
reset(): void;
|
|
199
|
+
};
|
|
200
|
+
/** The look of the selected features. */
|
|
201
|
+
readonly selectionStyle: Required<SelectionStyleOptions>;
|
|
202
|
+
/**
|
|
203
|
+
* The layer a new feature goes into: the active layer when it can be written (it exists,
|
|
204
|
+
* is visible, is not locked and not hidden on this client), otherwise the first layer that
|
|
205
|
+
* can.
|
|
206
|
+
*
|
|
207
|
+
* @returns The layer, or `null` when no layer can be written
|
|
208
|
+
*/
|
|
209
|
+
writableLayer(): Layer | null;
|
|
210
|
+
/**
|
|
211
|
+
* The rows of the datasets that a shape can trace along, within an extent. Empty when
|
|
212
|
+
* snapping to the datasets is off.
|
|
213
|
+
*
|
|
214
|
+
* @param bbox - The extent, as `[west, south, east, north]` in degrees
|
|
215
|
+
* @returns The rows, each with the ID of its dataset and its index there; the dataset finds
|
|
216
|
+
* a row by the ID of a snapping target with `draw.datasets.get(datasetId).findRow(id)`
|
|
217
|
+
*/
|
|
218
|
+
listTraceRows(bbox: BBox): {
|
|
219
|
+
datasetId: string;
|
|
220
|
+
rowIndex: number;
|
|
221
|
+
row: DatasetRow;
|
|
222
|
+
}[];
|
|
223
|
+
}
|
|
224
|
+
/** What a hit test of a custom feature type or a companion receives. */
|
|
225
|
+
export interface HitTestContext {
|
|
226
|
+
/** The point on the screen */
|
|
227
|
+
point: ScreenPoint;
|
|
228
|
+
/** The position on the map */
|
|
229
|
+
lngLat: Position;
|
|
230
|
+
/** How far from the point a hit may be, in pixels */
|
|
231
|
+
tolerancePx: number;
|
|
232
|
+
/** The conversion between the map and the screen */
|
|
233
|
+
screen: ScreenContext;
|
|
234
|
+
}
|
|
235
|
+
/** What a provider of snapping candidates receives. */
|
|
236
|
+
export interface SnapContext {
|
|
237
|
+
/** The point on the screen */
|
|
238
|
+
point: ScreenPoint;
|
|
239
|
+
/** The position on the map */
|
|
240
|
+
lngLat: Position;
|
|
241
|
+
/** How far from the point a candidate may be, in pixels */
|
|
242
|
+
tolerancePx: number;
|
|
243
|
+
/** The conversion between the map and the screen */
|
|
244
|
+
screen: ScreenContext;
|
|
245
|
+
/** The IDs of the features that must not be snapped to, such as the one being drawn */
|
|
246
|
+
excludeIds: ReadonlySet<string>;
|
|
247
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom feature types: the one definition that says how a type is drawn, hit, selected and
|
|
3
|
+
* resized
|
|
4
|
+
*/
|
|
5
|
+
import type { Geometry, Position } from 'geojson';
|
|
6
|
+
import type { BBox } from '../../geometry/types.js';
|
|
7
|
+
import type { ScreenPoint } from '../events.js';
|
|
8
|
+
import type { Feature, FeaturePatch } from '../model.js';
|
|
9
|
+
import type { HitTestContext, ScreenContext, SnapContext } from './context.js';
|
|
10
|
+
import type { DrawPointerEvent } from './mode.js';
|
|
11
|
+
import type { Hit, SnapCandidate } from './provider.js';
|
|
12
|
+
import type { FeatureRenderer } from './render.js';
|
|
13
|
+
/** One handle on a selected feature. */
|
|
14
|
+
export interface Handle {
|
|
15
|
+
/** The ID of the handle, unique within the feature */
|
|
16
|
+
id: string;
|
|
17
|
+
/** The position of the handle */
|
|
18
|
+
position: Position;
|
|
19
|
+
/** The kind of handle, as its provider names it */
|
|
20
|
+
kind: string;
|
|
21
|
+
/** The CSS cursor over the handle */
|
|
22
|
+
cursor?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The definition of a custom feature type. Its handles and snapping candidates are written
|
|
26
|
+
* here; a provider is only for the types an extension does not define.
|
|
27
|
+
*/
|
|
28
|
+
export interface FeatureTypeDefinition {
|
|
29
|
+
/** The name of the type; it is registered under this name */
|
|
30
|
+
readonly type: string;
|
|
31
|
+
/** The kind of GeoJSON geometry the features of this type have; one kind per type */
|
|
32
|
+
readonly geometry: Geometry['type'];
|
|
33
|
+
/**
|
|
34
|
+
* How far beyond its geometry a feature of this type can be hit, in pixels, such as the
|
|
35
|
+
* half size of an icon drawn on a point. The candidates of a hit test are gathered this much
|
|
36
|
+
* farther out; 0 when it is left out.
|
|
37
|
+
*/
|
|
38
|
+
readonly hitPaddingPx?: number;
|
|
39
|
+
/** How the features of this type are drawn */
|
|
40
|
+
readonly renderer: FeatureRenderer;
|
|
41
|
+
/**
|
|
42
|
+
* Which features of the type the definition takes, for a definition that overrides a
|
|
43
|
+
* built-in type (`extensions.featureTypes.override`). A feature for which it returns false
|
|
44
|
+
* keeps the built-in type: its built-in drawing (drawn in batches with the other features),
|
|
45
|
+
* hit test, box selection, selection frame, handles, snapping candidates and extent. The
|
|
46
|
+
* others are drawn, hit and framed by this definition. Every feature of the type is taken
|
|
47
|
+
* when it is left out.
|
|
48
|
+
*
|
|
49
|
+
* It is asked again whenever a feature changes, so its answer must follow from the feature
|
|
50
|
+
* (its properties, its geometry, its style) and nothing outside it. It is ignored in a
|
|
51
|
+
* definition given to `add`: a custom type takes every feature of its type.
|
|
52
|
+
*/
|
|
53
|
+
appliesTo?(feature: Feature): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* The extent of a feature on the map, `[west, south, east, north]` in degrees, for a type
|
|
56
|
+
* that draws beyond its geometry by a distance on the ground. The spatial index takes it:
|
|
57
|
+
* it gathers the candidates of a hit test and of a box selection, answers
|
|
58
|
+
* `features.list({ bbox })`, and decides which features are near enough to the view to be
|
|
59
|
+
* drawn. The extent of the geometry is used when it is left out, and when it returns an
|
|
60
|
+
* extent that is not four finite numbers from the west and south to the east and north.
|
|
61
|
+
*
|
|
62
|
+
* It is measured when a feature changes; call `invalidate({ type })` when it depends on
|
|
63
|
+
* something outside the document. A reach in pixels belongs in `hitPaddingPx`.
|
|
64
|
+
*/
|
|
65
|
+
bbox?(feature: Feature): BBox;
|
|
66
|
+
/**
|
|
67
|
+
* Hit tests a feature of this type; the geometry is hit tested when it is left out.
|
|
68
|
+
*
|
|
69
|
+
* @returns What was hit, or `null`
|
|
70
|
+
*/
|
|
71
|
+
hitTest?(feature: Feature, ctx: HitTestContext): Hit | null;
|
|
72
|
+
/**
|
|
73
|
+
* Whether a box selection takes a feature of this type.
|
|
74
|
+
*
|
|
75
|
+
* @param box - The corners of the box on the screen, in pixels
|
|
76
|
+
*/
|
|
77
|
+
boxSelect?(feature: Feature, box: {
|
|
78
|
+
min: ScreenPoint;
|
|
79
|
+
max: ScreenPoint;
|
|
80
|
+
}, ctx: HitTestContext): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* The extent of the selection box of a feature on the screen, in pixels.
|
|
83
|
+
*
|
|
84
|
+
* @returns The corners of the extent, or `null` when the feature has nothing to draw
|
|
85
|
+
*/
|
|
86
|
+
bounds?(feature: Feature, ctx: ScreenContext): {
|
|
87
|
+
min: ScreenPoint;
|
|
88
|
+
max: ScreenPoint;
|
|
89
|
+
} | null;
|
|
90
|
+
/**
|
|
91
|
+
* The outline of the selection frame of a feature on the screen, in pixels, for a type whose
|
|
92
|
+
* shape turns: its four corners in the order top left, top right, bottom right, bottom left
|
|
93
|
+
* of the shape as it stands unturned, without the margin of the frame
|
|
94
|
+
* (`selectionStyle.boundingBox.margin`). The engine draws the selection frame along it when
|
|
95
|
+
* it is given, and from `bounds` otherwise, with every edge moved the margin outward. For a
|
|
96
|
+
* type of any geometry but `Point`, the resize and rotate handles sit on the corners of that
|
|
97
|
+
* frame too; a `Point` type keeps a frame with no such handles.
|
|
98
|
+
*
|
|
99
|
+
* @returns The four corners; anything else (or an empty array) gives the frame of `bounds`
|
|
100
|
+
*/
|
|
101
|
+
outline?(feature: Feature, ctx: ScreenContext): ScreenPoint[];
|
|
102
|
+
/**
|
|
103
|
+
* The handles that resize or reshape a selected feature. The engine draws them with the
|
|
104
|
+
* look of the vertex handles, hit tests them at the same size, and gives their drags to
|
|
105
|
+
* `onHandleDrag`.
|
|
106
|
+
*/
|
|
107
|
+
handles?(feature: Feature, ctx: ScreenContext): Handle[];
|
|
108
|
+
/**
|
|
109
|
+
* The change a drag of one of its handles makes.
|
|
110
|
+
*
|
|
111
|
+
* @returns The patch to apply to the feature, or `null` for no change
|
|
112
|
+
*/
|
|
113
|
+
onHandleDrag?(feature: Feature, handle: Handle, event: DrawPointerEvent): FeaturePatch | null;
|
|
114
|
+
/**
|
|
115
|
+
* A drag of one of its handles is about to start, before the first `onHandleDrag`.
|
|
116
|
+
*
|
|
117
|
+
* @returns False to refuse the drag; no `onHandleDrag` nor `onHandleDragEnd` follows then
|
|
118
|
+
*/
|
|
119
|
+
onHandleDragStart?(feature: Feature, handle: Handle, event: DrawPointerEvent): boolean;
|
|
120
|
+
/**
|
|
121
|
+
* A drag of one of its handles ended, after the last `onHandleDrag` and its patch. It is
|
|
122
|
+
* called once for every drag that started, also when the drag is cut short.
|
|
123
|
+
*
|
|
124
|
+
* @param feature - The feature as it is now, or `null` when it is gone
|
|
125
|
+
*/
|
|
126
|
+
onHandleDragEnd?(feature: Feature | null, handle: Handle, event: DrawPointerEvent): void;
|
|
127
|
+
/** The snapping candidates a feature of this type offers. */
|
|
128
|
+
snapCandidates?(feature: Feature, ctx: SnapContext): SnapCandidate[];
|
|
129
|
+
}
|