@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
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Draw`: the draw instance, its resources and the members that belong to no resource
|
|
3
|
+
*/
|
|
4
|
+
import type { Map as MaplibreMap } from 'maplibre-gl';
|
|
5
|
+
import type { DatasetsCollection } from './datasets.js';
|
|
6
|
+
import type { DocumentResource } from './document.js';
|
|
7
|
+
import type { DrawingResource } from './drawing.js';
|
|
8
|
+
import type { DrawEvents } from './events.js';
|
|
9
|
+
import type { StoreView, UpdateSource } from './extension/store.js';
|
|
10
|
+
import type { ExtensionsCollections } from './extensions.js';
|
|
11
|
+
import type { FeaturesCollection } from './features.js';
|
|
12
|
+
import type { GroupsCollection } from './groups.js';
|
|
13
|
+
import type { HiddenCollection } from './hidden.js';
|
|
14
|
+
import type { LayersCollection } from './layers.js';
|
|
15
|
+
import type { MetadataResource } from './metadata.js';
|
|
16
|
+
import type { DrawOptions, OptionsResource } from './options.js';
|
|
17
|
+
import type { SelectionResource, VertexSelectionResource } from './selection.js';
|
|
18
|
+
import type { LayerStackEntry, Mode, TerrainDiagnostics } from './state.js';
|
|
19
|
+
/** The options of {@link Draw.transact} */
|
|
20
|
+
export interface TransactOptions {
|
|
21
|
+
/** Where the writes come from; `'local'` when left out */
|
|
22
|
+
source?: UpdateSource;
|
|
23
|
+
/**
|
|
24
|
+
* Whether the writes ignore the locks of the features, groups and layers; read-only still
|
|
25
|
+
* refuses them. False when left out.
|
|
26
|
+
*/
|
|
27
|
+
ignoreLocks?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A draw instance on a map: the collections and resources of the document and of this
|
|
31
|
+
* client, and the members that belong to no resource.
|
|
32
|
+
*/
|
|
33
|
+
export interface Draw {
|
|
34
|
+
/** The features of the document */
|
|
35
|
+
readonly features: FeaturesCollection;
|
|
36
|
+
/** The layers of the document */
|
|
37
|
+
readonly layers: LayersCollection;
|
|
38
|
+
/** The groups of the document */
|
|
39
|
+
readonly groups: GroupsCollection;
|
|
40
|
+
/** The large data that is drawn but not edited, outside the document */
|
|
41
|
+
readonly datasets: DatasetsCollection;
|
|
42
|
+
/** What this client hides without changing the document */
|
|
43
|
+
readonly hidden: HiddenCollection;
|
|
44
|
+
/** What this client has selected */
|
|
45
|
+
readonly selection: SelectionResource;
|
|
46
|
+
/** The selected vertices of one feature in this client */
|
|
47
|
+
readonly vertexSelection: VertexSelectionResource;
|
|
48
|
+
/** The shape the current drawing mode is drawing, to drive it from code */
|
|
49
|
+
readonly drawing: DrawingResource;
|
|
50
|
+
/** The title and the description of the document */
|
|
51
|
+
readonly metadata: MetadataResource;
|
|
52
|
+
/** The options that can change while the instance runs */
|
|
53
|
+
readonly options: OptionsResource;
|
|
54
|
+
/** The whole document, to load and to write out */
|
|
55
|
+
readonly document: DocumentResource;
|
|
56
|
+
/** The plugins, modes, feature types, overlays and providers */
|
|
57
|
+
readonly extensions: ExtensionsCollections;
|
|
58
|
+
/** The map the instance draws on. */
|
|
59
|
+
getMap(): MaplibreMap;
|
|
60
|
+
/** The Store, to read the document and the state and to subscribe to their changes. */
|
|
61
|
+
getStore(): StoreView;
|
|
62
|
+
/** The current mode. */
|
|
63
|
+
getMode(): Mode;
|
|
64
|
+
/**
|
|
65
|
+
* Changes the mode.
|
|
66
|
+
*
|
|
67
|
+
* @returns False when the mode cannot be entered now
|
|
68
|
+
* @throws `DrawError` with the code `not-found` when there is no mode with this name
|
|
69
|
+
*/
|
|
70
|
+
setMode(mode: Mode): boolean;
|
|
71
|
+
/** Whether the document is read-only. */
|
|
72
|
+
isReadOnly(): boolean;
|
|
73
|
+
/** Turns read-only on or off. */
|
|
74
|
+
setReadOnly(value: boolean): void;
|
|
75
|
+
/** Whether the interaction lock is on. */
|
|
76
|
+
isInteractionLocked(): boolean;
|
|
77
|
+
/** Turns the interaction lock on or off. */
|
|
78
|
+
setInteractionLocked(value: boolean): void;
|
|
79
|
+
/**
|
|
80
|
+
* Runs `fn` as one transaction: its writes arrive as one `document.changed`.
|
|
81
|
+
*
|
|
82
|
+
* In nested calls the source of the outermost call wins. With `ignoreLocks`, the writes of
|
|
83
|
+
* `fn` through the resources of this instance ignore the locks of the features, groups and
|
|
84
|
+
* layers, as a change applied again from a record needs; read-only still refuses them, and
|
|
85
|
+
* what the user does with the pointer and the keys still respects the locks. A nested call
|
|
86
|
+
* inside such a call ignores them as well.
|
|
87
|
+
*
|
|
88
|
+
* @param options - `source` names where the writes come from; `ignoreLocks` lets them
|
|
89
|
+
* change locked features, groups and layers
|
|
90
|
+
* @returns What `fn` returns
|
|
91
|
+
*/
|
|
92
|
+
transact<T>(fn: () => T, options?: TransactOptions): T;
|
|
93
|
+
/**
|
|
94
|
+
* Subscribes to an event.
|
|
95
|
+
*
|
|
96
|
+
* @returns The function that unsubscribes
|
|
97
|
+
*/
|
|
98
|
+
on<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): () => void;
|
|
99
|
+
/** Unsubscribes from an event. */
|
|
100
|
+
off<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): void;
|
|
101
|
+
/**
|
|
102
|
+
* Subscribes to the next occurrence of an event only.
|
|
103
|
+
*
|
|
104
|
+
* @returns The function that unsubscribes before it occurs
|
|
105
|
+
*/
|
|
106
|
+
once<K extends keyof DrawEvents>(event: K, listener: (payload: DrawEvents[K]) => void): () => void;
|
|
107
|
+
/** Whether some drawing work has not finished yet. */
|
|
108
|
+
hasPendingWork(): boolean;
|
|
109
|
+
/** The divisions of the stacking order, one per run of layers. */
|
|
110
|
+
getLayerStack(): readonly LayerStackEntry[];
|
|
111
|
+
/** Diagnostics; their fields follow the drawing and carry a weaker promise. */
|
|
112
|
+
readonly debug: {
|
|
113
|
+
/** The state the terrain was drawn with. */
|
|
114
|
+
terrain(): TerrainDiagnostics;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Removes the instance from the map and releases everything it holds. A second call does
|
|
118
|
+
* nothing; every other method of the instance and of its collections then throws `DrawError`
|
|
119
|
+
* with the code `invalid-state` (`document.load` rejects with it).
|
|
120
|
+
*/
|
|
121
|
+
destroy(): void;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Puts a draw instance on a map and returns it.
|
|
125
|
+
*
|
|
126
|
+
* It can be called before, while or after the map loads. The layers are added as soon as the
|
|
127
|
+
* style accepts them, and added again after `setStyle`. Unless `initDefaultLayer: false` is
|
|
128
|
+
* given, the document starts with one empty layer. Several instances can share a page, each on
|
|
129
|
+
* its own map.
|
|
130
|
+
*
|
|
131
|
+
* @param map - The map to draw on
|
|
132
|
+
* @param options - The options; every one can be omitted
|
|
133
|
+
* @returns The draw instance
|
|
134
|
+
*/
|
|
135
|
+
export declare function createDraw(map: MaplibreMap, options?: DrawOptions): Draw;
|
package/dist/api/draw.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { createDraw as createDrawInstance } from './impl/create-draw.js';
|
|
4
|
+
/**
|
|
5
|
+
* Puts a draw instance on a map and returns it.
|
|
6
|
+
*
|
|
7
|
+
* It can be called before, while or after the map loads. The layers are added as soon as the
|
|
8
|
+
* style accepts them, and added again after `setStyle`. Unless `initDefaultLayer: false` is
|
|
9
|
+
* given, the document starts with one empty layer. Several instances can share a page, each on
|
|
10
|
+
* its own map.
|
|
11
|
+
*
|
|
12
|
+
* @param map - The map to draw on
|
|
13
|
+
* @param options - The options; every one can be omitted
|
|
14
|
+
* @returns The draw instance
|
|
15
|
+
*/
|
|
16
|
+
export function createDraw(map, options) {
|
|
17
|
+
return createDrawInstance(map, options);
|
|
18
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `draw.drawing`: the shape the current drawing mode is drawing, driven from outside the
|
|
3
|
+
* pointer and the keys
|
|
4
|
+
*/
|
|
5
|
+
import type { Position } from 'geojson';
|
|
6
|
+
/**
|
|
7
|
+
* The shape the current drawing mode is drawing, driven from code: to draw from typed
|
|
8
|
+
* coordinates, from another input device, or in an automated run.
|
|
9
|
+
*
|
|
10
|
+
* `addVertex`, `moveTo` and `finish` act as the input they stand for would: they are made into
|
|
11
|
+
* the same pointer and key events the map gives, at the point of the screen the position
|
|
12
|
+
* projects to, and go the same way as that input, through the `input` receivers of the plugins
|
|
13
|
+
* first and then to the mode. The position is used as it is: nothing snaps it, and the event
|
|
14
|
+
* carries it as its snapped position. A mode that ignores clicks, or a plugin that consumes
|
|
15
|
+
* them, ignores or consumes these as well.
|
|
16
|
+
*
|
|
17
|
+
* Extensions reach the same object as `ctx.drawing`.
|
|
18
|
+
*/
|
|
19
|
+
export interface DrawingResource {
|
|
20
|
+
/**
|
|
21
|
+
* Whether a drawing mode is drawing: a shape is in progress, or the mode is ready to place its
|
|
22
|
+
* first vertex (the current mode writes features).
|
|
23
|
+
*/
|
|
24
|
+
isActive(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Whether a shape is in progress: the mode shows a shape that is not created yet. False
|
|
27
|
+
* while a drawing mode waits for its first vertex.
|
|
28
|
+
*/
|
|
29
|
+
isDrawing(): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Places a vertex at a position, as a click there would: the pointer moves there, then
|
|
32
|
+
* clicks. It does not snap. What the click does is up to the mode: the point mode creates the
|
|
33
|
+
* point, and a click on the closing vertex of a line or an area finishes it. The position is
|
|
34
|
+
* exact, so the click tolerance of the pointer (10 px) does not apply: a vertex a few pixels
|
|
35
|
+
* from the last one is placed, and one near the closing vertex does not finish the shape.
|
|
36
|
+
* Only a position exactly equal to the closing vertex (the last vertex of a line, the first
|
|
37
|
+
* of an area) finishes it, and one exactly equal to the last vertex of an area is not placed
|
|
38
|
+
* again.
|
|
39
|
+
*
|
|
40
|
+
* @param position - The position, as `[longitude, latitude]` in degrees
|
|
41
|
+
* @returns True when the mode (or a plugin) took the click; false when no drawing mode is
|
|
42
|
+
* active or nothing took it
|
|
43
|
+
* @throws `DrawError` with the code `invalid-input` when the position is not two finite
|
|
44
|
+
* numbers
|
|
45
|
+
*/
|
|
46
|
+
addVertex(position: Position): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Moves the pointer to a position, as a pointer move there would: the preview of the shape
|
|
49
|
+
* follows it. It does not snap, and, as with `addVertex`, the position is exact. It does
|
|
50
|
+
* nothing when no drawing mode is active.
|
|
51
|
+
*
|
|
52
|
+
* @param position - The position, as `[longitude, latitude]` in degrees
|
|
53
|
+
* @throws `DrawError` with the code `invalid-input` when the position is not two finite
|
|
54
|
+
* numbers
|
|
55
|
+
*/
|
|
56
|
+
moveTo(position: Position): void;
|
|
57
|
+
/**
|
|
58
|
+
* Completes the shape in progress, as a double click on its last vertex or Enter would: the
|
|
59
|
+
* mode creates the feature from the vertices placed so far, as soon as there are enough of
|
|
60
|
+
* them (2 for a line, 3 for an area), wherever the last one is.
|
|
61
|
+
*
|
|
62
|
+
* @returns True when the shape was completed; false when no shape is in progress, or the mode
|
|
63
|
+
* did not complete it (too few vertices)
|
|
64
|
+
*/
|
|
65
|
+
finish(): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Cancels the shape in progress, as an Escape does while drawing: the mode drops it
|
|
68
|
+
* (`ModeHandler.onCancel`), the preview is cleared and the mode stays the current one. When
|
|
69
|
+
* no shape is in progress it does nothing; unlike an Escape, it does not leave the mode.
|
|
70
|
+
*
|
|
71
|
+
* @returns True when a shape was in progress and was cancelled
|
|
72
|
+
*/
|
|
73
|
+
cancel(): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Removes the last vertex of the shape in progress.
|
|
76
|
+
*
|
|
77
|
+
* @returns True when a vertex was removed; false when nothing is being drawn or the mode has
|
|
78
|
+
* no vertex to remove
|
|
79
|
+
*/
|
|
80
|
+
undoVertex(): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Puts back the vertex the last `undoVertex` removed.
|
|
83
|
+
*
|
|
84
|
+
* @returns True when a vertex was put back
|
|
85
|
+
*/
|
|
86
|
+
redoVertex(): boolean;
|
|
87
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The error thrown for a wrong argument
|
|
3
|
+
*
|
|
4
|
+
* A method throws it when an argument is wrong (an ID that does not exist, an input of the
|
|
5
|
+
* wrong shape) and changes nothing. A refusal because of the state (read-only, a lock) is not
|
|
6
|
+
* an error: the method returns `null` or `false` instead.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Why a {@link DrawError} was thrown.
|
|
10
|
+
*
|
|
11
|
+
* - `not-found`: an ID that does not exist
|
|
12
|
+
* - `already-exists`: an ID that is already taken
|
|
13
|
+
* - `invalid-input`: an input of the wrong shape or value
|
|
14
|
+
* - `unsupported-format`: a source that cannot be read
|
|
15
|
+
* - `invalid-state`: a call that is not possible in the current situation, such as deleting
|
|
16
|
+
* a feature while it is being drawn, or any call on an instance that was destroyed
|
|
17
|
+
*/
|
|
18
|
+
export type DrawErrorCode = 'not-found' | 'already-exists' | 'invalid-input' | 'unsupported-format' | 'invalid-state';
|
|
19
|
+
/**
|
|
20
|
+
* The error a method throws when an argument is wrong; the method has changed nothing.
|
|
21
|
+
*/
|
|
22
|
+
export declare class DrawError extends Error {
|
|
23
|
+
/** Why it was thrown */
|
|
24
|
+
readonly code: DrawErrorCode;
|
|
25
|
+
/** More about the cause, such as the ID that was not found */
|
|
26
|
+
readonly details?: unknown;
|
|
27
|
+
/**
|
|
28
|
+
* Creates the error
|
|
29
|
+
*
|
|
30
|
+
* @param code - Why it is thrown
|
|
31
|
+
* @param message - A description in English, for logs
|
|
32
|
+
* @param details - More about the cause
|
|
33
|
+
*/
|
|
34
|
+
constructor(code: DrawErrorCode, message: string, details?: unknown);
|
|
35
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The error a method throws when an argument is wrong; the method has changed nothing.
|
|
5
|
+
*/
|
|
6
|
+
export class DrawError extends Error {
|
|
7
|
+
/**
|
|
8
|
+
* Creates the error
|
|
9
|
+
*
|
|
10
|
+
* @param code - Why it is thrown
|
|
11
|
+
* @param message - A description in English, for logs
|
|
12
|
+
* @param details - More about the cause
|
|
13
|
+
*/
|
|
14
|
+
constructor(code, message, details) {
|
|
15
|
+
super(message);
|
|
16
|
+
/** Why it was thrown */
|
|
17
|
+
Object.defineProperty(this, "code", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: void 0
|
|
22
|
+
});
|
|
23
|
+
/** More about the cause, such as the ID that was not found */
|
|
24
|
+
Object.defineProperty(this, "details", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: void 0
|
|
29
|
+
});
|
|
30
|
+
this.name = 'DrawError';
|
|
31
|
+
this.code = code;
|
|
32
|
+
if (details !== undefined)
|
|
33
|
+
this.details = details;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,306 @@
|
|
|
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 { LayerStackEntry, Mode, Selection, SelectionType, SnapResult, VertexSelection } from './state.js';
|
|
14
|
+
/** A point on the screen, as `[x, y]` in CSS pixels. */
|
|
15
|
+
export type ScreenPoint = [number, number];
|
|
16
|
+
/**
|
|
17
|
+
* Everything one transaction changed, as `document.changed` and the subscribers of the Store
|
|
18
|
+
* receive it. It arrives once per transaction, and each category is present only when the
|
|
19
|
+
* transaction changed it.
|
|
20
|
+
*
|
|
21
|
+
* `document.changed` fires only for a transaction that changed the document (features, layers,
|
|
22
|
+
* groups, metadata or files); the selection, the editing and the mode are carried along when
|
|
23
|
+
* the same transaction changed them. A change of the state of this client alone has its own
|
|
24
|
+
* event (`selection.changed`, `mode.changed` and so on).
|
|
25
|
+
*/
|
|
26
|
+
export interface DocumentChange {
|
|
27
|
+
/** Where the writes came from */
|
|
28
|
+
source?: UpdateSource;
|
|
29
|
+
/**
|
|
30
|
+
* True when the notification replaces the whole document at once, as a Store given in the
|
|
31
|
+
* `store` option does when it takes a document from elsewhere. The current mode drops what
|
|
32
|
+
* it was drawing then (`ModeHandler.onCancel`), because the shape it holds may refer to
|
|
33
|
+
* what is gone. A Store sets it; the changes that come with it list what was replaced.
|
|
34
|
+
*/
|
|
35
|
+
reset?: boolean;
|
|
36
|
+
/** The features created, updated and deleted */
|
|
37
|
+
features?: {
|
|
38
|
+
created?: Feature[];
|
|
39
|
+
updated?: Array<{
|
|
40
|
+
id: string;
|
|
41
|
+
feature: Feature;
|
|
42
|
+
previous: Feature;
|
|
43
|
+
/** True while a drag or a drawing is in progress; a final update always follows */
|
|
44
|
+
isIntermediate?: boolean;
|
|
45
|
+
}>;
|
|
46
|
+
deleted?: Feature[];
|
|
47
|
+
};
|
|
48
|
+
/** The layers created, updated and deleted, and the change of their stacking order */
|
|
49
|
+
layers?: {
|
|
50
|
+
created?: Layer[];
|
|
51
|
+
updated?: Array<{
|
|
52
|
+
id: string;
|
|
53
|
+
layer: Layer;
|
|
54
|
+
previous: Layer;
|
|
55
|
+
}>;
|
|
56
|
+
deleted?: Layer[];
|
|
57
|
+
orderChanged?: {
|
|
58
|
+
order: string[];
|
|
59
|
+
previous: string[];
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
/** The groups created, updated and deleted */
|
|
63
|
+
groups?: {
|
|
64
|
+
created?: Group[];
|
|
65
|
+
updated?: Array<{
|
|
66
|
+
id: string;
|
|
67
|
+
group: Group;
|
|
68
|
+
previous: Group;
|
|
69
|
+
}>;
|
|
70
|
+
deleted?: Group[];
|
|
71
|
+
};
|
|
72
|
+
/** The new order of the items of a layer */
|
|
73
|
+
layerReorder?: {
|
|
74
|
+
layerId: string;
|
|
75
|
+
order: string[];
|
|
76
|
+
previous: string[];
|
|
77
|
+
};
|
|
78
|
+
/** The new order of the features of a group */
|
|
79
|
+
groupReorder?: {
|
|
80
|
+
groupId: string;
|
|
81
|
+
featureIds: string[];
|
|
82
|
+
previous: string[];
|
|
83
|
+
};
|
|
84
|
+
/** The new selection and the one before it */
|
|
85
|
+
selection?: {
|
|
86
|
+
type: SelectionType | null;
|
|
87
|
+
ids: string[];
|
|
88
|
+
previousType: SelectionType | null;
|
|
89
|
+
previousIds: string[];
|
|
90
|
+
};
|
|
91
|
+
/** The IDs of the features whose editing started and ended */
|
|
92
|
+
editing?: {
|
|
93
|
+
started?: string[];
|
|
94
|
+
ended?: string[];
|
|
95
|
+
};
|
|
96
|
+
/** The new mode and the one before it */
|
|
97
|
+
mode?: {
|
|
98
|
+
mode: Mode;
|
|
99
|
+
previous: Mode;
|
|
100
|
+
};
|
|
101
|
+
/** The new metadata and the one before it */
|
|
102
|
+
metadata?: {
|
|
103
|
+
metadata: Metadata;
|
|
104
|
+
previous: Metadata;
|
|
105
|
+
};
|
|
106
|
+
/** The embedded files created and deleted */
|
|
107
|
+
files?: {
|
|
108
|
+
created?: FileData[];
|
|
109
|
+
deleted?: FileData[];
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* The events, by name, with their payloads.
|
|
114
|
+
*/
|
|
115
|
+
export interface DrawEvents {
|
|
116
|
+
/** A feature was created */
|
|
117
|
+
'feature.created': {
|
|
118
|
+
feature: Feature;
|
|
119
|
+
source: string;
|
|
120
|
+
};
|
|
121
|
+
/** A feature changed; `intermediate` is true while a drag is in progress */
|
|
122
|
+
'feature.updated': {
|
|
123
|
+
feature: Feature;
|
|
124
|
+
previous: Feature;
|
|
125
|
+
source: string;
|
|
126
|
+
intermediate: boolean;
|
|
127
|
+
};
|
|
128
|
+
/** A feature was deleted */
|
|
129
|
+
'feature.deleted': {
|
|
130
|
+
feature: Feature;
|
|
131
|
+
source: string;
|
|
132
|
+
};
|
|
133
|
+
/** A feature moved between layers or groups */
|
|
134
|
+
'feature.moved': {
|
|
135
|
+
feature: Feature;
|
|
136
|
+
from: MoveTarget;
|
|
137
|
+
to: MoveTarget;
|
|
138
|
+
source: string;
|
|
139
|
+
};
|
|
140
|
+
/** A layer was created */
|
|
141
|
+
'layer.created': {
|
|
142
|
+
layer: Layer;
|
|
143
|
+
source: string;
|
|
144
|
+
};
|
|
145
|
+
/** A layer changed */
|
|
146
|
+
'layer.updated': {
|
|
147
|
+
layer: Layer;
|
|
148
|
+
previous: Layer;
|
|
149
|
+
source: string;
|
|
150
|
+
};
|
|
151
|
+
/** A layer was deleted */
|
|
152
|
+
'layer.deleted': {
|
|
153
|
+
layer: Layer;
|
|
154
|
+
source: string;
|
|
155
|
+
};
|
|
156
|
+
/** The stacking order of the layers changed */
|
|
157
|
+
'layer.reordered': {
|
|
158
|
+
order: readonly string[];
|
|
159
|
+
previous: readonly string[];
|
|
160
|
+
source: string;
|
|
161
|
+
};
|
|
162
|
+
/** A group was created */
|
|
163
|
+
'group.created': {
|
|
164
|
+
group: Group;
|
|
165
|
+
source: string;
|
|
166
|
+
};
|
|
167
|
+
/** A group changed */
|
|
168
|
+
'group.updated': {
|
|
169
|
+
group: Group;
|
|
170
|
+
previous: Group;
|
|
171
|
+
source: string;
|
|
172
|
+
};
|
|
173
|
+
/** A group was ungrouped */
|
|
174
|
+
'group.deleted': {
|
|
175
|
+
group: Group;
|
|
176
|
+
source: string;
|
|
177
|
+
};
|
|
178
|
+
/** The title or the description changed */
|
|
179
|
+
'metadata.updated': {
|
|
180
|
+
metadata: Metadata;
|
|
181
|
+
previous: Metadata;
|
|
182
|
+
source: string;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Every change of one transaction that changed the document (features, layers, groups,
|
|
186
|
+
* metadata or files); it arrives once per such transaction, after the events of the
|
|
187
|
+
* resources. A change of the selection, the mode or another state of this client alone does
|
|
188
|
+
* not fire it.
|
|
189
|
+
*/
|
|
190
|
+
'document.changed': DocumentChange;
|
|
191
|
+
/** A document was loaded */
|
|
192
|
+
'document.loaded': {
|
|
193
|
+
result: LoadResult;
|
|
194
|
+
source: string;
|
|
195
|
+
};
|
|
196
|
+
/** The selection changed */
|
|
197
|
+
'selection.changed': {
|
|
198
|
+
selection: Selection;
|
|
199
|
+
previous: Selection;
|
|
200
|
+
};
|
|
201
|
+
/** The vertex selection changed */
|
|
202
|
+
'vertexSelection.changed': {
|
|
203
|
+
selection: VertexSelection | null;
|
|
204
|
+
previous: VertexSelection | null;
|
|
205
|
+
};
|
|
206
|
+
/** A drag started */
|
|
207
|
+
'drag.started': {
|
|
208
|
+
kind: 'feature' | 'vertex' | 'handle';
|
|
209
|
+
featureIds: string[];
|
|
210
|
+
};
|
|
211
|
+
/** A drag ended; `cancelled` is true when it was cancelled */
|
|
212
|
+
'drag.ended': {
|
|
213
|
+
kind: 'feature' | 'vertex' | 'handle';
|
|
214
|
+
featureIds: string[];
|
|
215
|
+
cancelled: boolean;
|
|
216
|
+
};
|
|
217
|
+
/** The mode changed */
|
|
218
|
+
'mode.changed': {
|
|
219
|
+
mode: Mode;
|
|
220
|
+
previous: Mode;
|
|
221
|
+
};
|
|
222
|
+
/** The items this client hides changed; `ids` is the whole set after the change */
|
|
223
|
+
'hidden.changed': {
|
|
224
|
+
ids: readonly string[];
|
|
225
|
+
};
|
|
226
|
+
/** Read-only was turned on or off */
|
|
227
|
+
'readOnly.changed': {
|
|
228
|
+
readOnly: boolean;
|
|
229
|
+
};
|
|
230
|
+
/** The interaction lock was turned on or off */
|
|
231
|
+
'interactionLock.changed': {
|
|
232
|
+
locked: boolean;
|
|
233
|
+
};
|
|
234
|
+
/** The snapping target changed */
|
|
235
|
+
'snap.changed': {
|
|
236
|
+
result: SnapResult | null;
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* The shape being drawn changed, or was cleared (`feature` is `null`). It fires once per
|
|
240
|
+
* change, with no throttling: at each vertex, at each move of the pointer that moves the
|
|
241
|
+
* shape, and when the shape is created, cancelled or left. `feature` has the type, the
|
|
242
|
+
* geometry and the layer of the shape, the ID it will be created with, and the radius of a
|
|
243
|
+
* circle; it is a copy that the drawing does not change afterwards. `confirmedVertices` and
|
|
244
|
+
* `highlightVertex` are the options the shape was shown with (`ModeContext.preview.set`):
|
|
245
|
+
* each is left out when it was not given, and both when the shape is cleared.
|
|
246
|
+
*/
|
|
247
|
+
'preview.changed': {
|
|
248
|
+
feature: FeatureInput | null;
|
|
249
|
+
confirmedVertices?: number;
|
|
250
|
+
highlightVertex?: number;
|
|
251
|
+
};
|
|
252
|
+
/**
|
|
253
|
+
* A click on the map in the select mode, whether it hit something or not. `lngLat` is the
|
|
254
|
+
* position of the pointer before snapping, and `hit` the frontmost thing under it (a feature,
|
|
255
|
+
* a row of a dataset, a companion), or `null` when the click hit nothing
|
|
256
|
+
*/
|
|
257
|
+
'map.clicked': {
|
|
258
|
+
lngLat: Position;
|
|
259
|
+
point: ScreenPoint;
|
|
260
|
+
hit: Hit | null;
|
|
261
|
+
};
|
|
262
|
+
/** A row of a dataset was clicked */
|
|
263
|
+
'dataset.clicked': {
|
|
264
|
+
datasetId: string;
|
|
265
|
+
rowIndex: number;
|
|
266
|
+
row: DatasetRow;
|
|
267
|
+
lngLat: Position;
|
|
268
|
+
point: ScreenPoint;
|
|
269
|
+
};
|
|
270
|
+
/** A dataset was added */
|
|
271
|
+
'dataset.added': {
|
|
272
|
+
dataset: Dataset;
|
|
273
|
+
};
|
|
274
|
+
/** A dataset was removed */
|
|
275
|
+
'dataset.removed': {
|
|
276
|
+
datasetId: string;
|
|
277
|
+
};
|
|
278
|
+
/** The stacking order of the datasets changed */
|
|
279
|
+
'dataset.reordered': {
|
|
280
|
+
order: readonly string[];
|
|
281
|
+
previous: readonly string[];
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* The image mode asks for an image to place at a position: the application picks a file
|
|
285
|
+
* and loads it with `document.load(file, { coordinate: lngLat, zoom, layerId })`. `lngLat` is
|
|
286
|
+
* the clicked position when a click led to the mode (a listener of `map.clicked` entered it),
|
|
287
|
+
* and the center of the map when the mode was entered otherwise
|
|
288
|
+
*/
|
|
289
|
+
'image.requested': {
|
|
290
|
+
lngLat: Position;
|
|
291
|
+
zoom: number;
|
|
292
|
+
layerId: string;
|
|
293
|
+
};
|
|
294
|
+
/** The divisions of the stacking order changed */
|
|
295
|
+
'layerStack.changed': {
|
|
296
|
+
entries: readonly LayerStackEntry[];
|
|
297
|
+
};
|
|
298
|
+
/** Loading or reading an image failed */
|
|
299
|
+
error: {
|
|
300
|
+
error: DrawError;
|
|
301
|
+
source: string;
|
|
302
|
+
featureId?: string;
|
|
303
|
+
};
|
|
304
|
+
}
|
|
305
|
+
/** A function that receives the payload of an event. */
|
|
306
|
+
export type DrawEventListener<K extends keyof DrawEvents = keyof DrawEvents> = (payload: DrawEvents[K]) => void;
|