@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
|
@@ -1,40 +1,20 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Color utilities: the interpolation of the continuous color ramps and the contrast color
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
* @returns { r, g, b }, each value in 0-255
|
|
6
|
+
* The colors are read with the CSS color parser (`../color.ts`), so any CSS color works.
|
|
8
7
|
*/
|
|
9
|
-
|
|
10
|
-
const cleanHex = hex.replace('#', '');
|
|
11
|
-
let r;
|
|
12
|
-
let g;
|
|
13
|
-
let b;
|
|
14
|
-
if (cleanHex.length === 3) {
|
|
15
|
-
// #RGB form
|
|
16
|
-
r = Number.parseInt(cleanHex[0] + cleanHex[0], 16);
|
|
17
|
-
g = Number.parseInt(cleanHex[1] + cleanHex[1], 16);
|
|
18
|
-
b = Number.parseInt(cleanHex[2] + cleanHex[2], 16);
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
// #RRGGBB form
|
|
22
|
-
r = Number.parseInt(cleanHex.substring(0, 2), 16);
|
|
23
|
-
g = Number.parseInt(cleanHex.substring(2, 4), 16);
|
|
24
|
-
b = Number.parseInt(cleanHex.substring(4, 6), 16);
|
|
25
|
-
}
|
|
26
|
-
return { r, g, b };
|
|
27
|
-
}
|
|
8
|
+
import { parseColor } from '../color.js';
|
|
28
9
|
/**
|
|
29
|
-
*
|
|
10
|
+
* Reads the RGB values of a CSS color (black when it is not a color)
|
|
30
11
|
*
|
|
31
|
-
* @param
|
|
32
|
-
* @
|
|
33
|
-
* @returns An array in the form [r, g, b, a] (each value in 0-1)
|
|
12
|
+
* @param color - A CSS color
|
|
13
|
+
* @returns { r, g, b }, each value in 0-255
|
|
34
14
|
*/
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
return
|
|
15
|
+
function parseRgb(color) {
|
|
16
|
+
const [r, g, b] = parseColor(color) ?? [0, 0, 0, 1];
|
|
17
|
+
return { r: r * 255, g: g * 255, b: b * 255 };
|
|
38
18
|
}
|
|
39
19
|
/**
|
|
40
20
|
* Converts RGB values into a HEX color string
|
|
@@ -82,11 +62,11 @@ function linearToSrgb(c) {
|
|
|
82
62
|
* (https://bottosson.github.io/posts/oklab/). It maps in the order sRGB -> linear sRGB -> LMS
|
|
83
63
|
* -> cube root -> OKLab.
|
|
84
64
|
*
|
|
85
|
-
* @param hex - A color
|
|
65
|
+
* @param hex - A CSS color
|
|
86
66
|
* @returns { L, a, b } OKLab coordinates
|
|
87
67
|
*/
|
|
88
68
|
function hexToOklab(hex) {
|
|
89
|
-
const rgb =
|
|
69
|
+
const rgb = parseRgb(hex);
|
|
90
70
|
const r = srgbToLinear(rgb.r);
|
|
91
71
|
const g = srgbToLinear(rgb.g);
|
|
92
72
|
const b = srgbToLinear(rgb.b);
|
|
@@ -130,8 +110,8 @@ function oklabToHex(L, a, b) {
|
|
|
130
110
|
* component by component.
|
|
131
111
|
* The interpolation position is clamped to 0-1.
|
|
132
112
|
*
|
|
133
|
-
* @param from - Color of the start point (
|
|
134
|
-
* @param to - Color of the end point (
|
|
113
|
+
* @param from - Color of the start point (a CSS color)
|
|
114
|
+
* @param to - Color of the end point (a CSS color)
|
|
135
115
|
* @param t - Interpolation position (0-1)
|
|
136
116
|
* @returns A color string in #RRGGBB form
|
|
137
117
|
*/
|
|
@@ -141,40 +121,3 @@ export function interpolateHexColor(from, to, t) {
|
|
|
141
121
|
const b = hexToOklab(to);
|
|
142
122
|
return oklabToHex(a.L + (b.L - a.L) * ratio, a.a + (b.a - a.a) * ratio, a.b + (b.b - a.b) * ratio);
|
|
143
123
|
}
|
|
144
|
-
/**
|
|
145
|
-
* Computes the relative luminance
|
|
146
|
-
*
|
|
147
|
-
* Based on the relative luminance formula of WCAG 2.0.
|
|
148
|
-
* https://www.w3.org/TR/WCAG20/#relativeluminancedef
|
|
149
|
-
*
|
|
150
|
-
* @param hex - A color string in #RRGGBB or #RGB form
|
|
151
|
-
* @returns Relative luminance (0-1)
|
|
152
|
-
*/
|
|
153
|
-
export function getLuminance(hex) {
|
|
154
|
-
const { r, g, b } = parseHexToRgb(hex);
|
|
155
|
-
// Convert from sRGB into a linear value
|
|
156
|
-
const toLinear = (c) => {
|
|
157
|
-
const srgb = c / 255;
|
|
158
|
-
return srgb <= 0.03928 ? srgb / 12.92 : ((srgb + 0.055) / 1.055) ** 2.4;
|
|
159
|
-
};
|
|
160
|
-
const rLinear = toLinear(r);
|
|
161
|
-
const gLinear = toLinear(g);
|
|
162
|
-
const bLinear = toLinear(b);
|
|
163
|
-
// Computation of the relative luminance
|
|
164
|
-
return 0.2126 * rLinear + 0.7152 * gLinear + 0.0722 * bLinear;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Gets a contrasting color
|
|
168
|
-
*
|
|
169
|
-
* Returns a highly visible contrasting color based on the luminance of the given color.
|
|
170
|
-
* Returns black for a light color and white for a dark color.
|
|
171
|
-
*
|
|
172
|
-
* @param hex - A color string in #RRGGBB or #RGB form
|
|
173
|
-
* @returns The contrasting color (#000000 or #FFFFFF)
|
|
174
|
-
*/
|
|
175
|
-
export function getContrastColor(hex) {
|
|
176
|
-
const luminance = getLuminance(hex);
|
|
177
|
-
// A luminance above 0.5 means a light color -> a black outline
|
|
178
|
-
// A luminance at or below 0.5 means a dark color -> a white outline
|
|
179
|
-
return luminance > 0.5 ? '#000000' : '#FFFFFF';
|
|
180
|
-
}
|
|
@@ -7,7 +7,37 @@
|
|
|
7
7
|
* same processing to every coordinate at any depth, so the depth-independent recursive
|
|
8
8
|
* traversal is collected here.
|
|
9
9
|
*/
|
|
10
|
+
import type { Geometry } from 'geojson';
|
|
10
11
|
import type { Coordinate, FeatureCoordinates, FeatureType } from '../types/model.js';
|
|
12
|
+
/** The kind of a GeoJSON geometry that has coordinates */
|
|
13
|
+
export type GeometryKind = Exclude<Geometry['type'], 'GeometryCollection'>;
|
|
14
|
+
/**
|
|
15
|
+
* The kind of geometry of a built-in feature type, or undefined for a custom type
|
|
16
|
+
*/
|
|
17
|
+
export declare function builtInGeometryKind(type: FeatureType): GeometryKind | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* The kind of geometry a feature type holds
|
|
20
|
+
*
|
|
21
|
+
* A built-in type has a fixed kind. A custom type is read from its coordinates as they come:
|
|
22
|
+
* a single position is a Point, a list of positions a LineString, a list of lists a Polygon
|
|
23
|
+
* and one level deeper a MultiPolygon.
|
|
24
|
+
*/
|
|
25
|
+
export declare function geometryKindOf(type: FeatureType, coordinates: FeatureCoordinates): GeometryKind;
|
|
26
|
+
/**
|
|
27
|
+
* The GeoJSON geometry of a feature type with the given coordinates (the kind follows
|
|
28
|
+
* {@link geometryKindOf}; the coordinates are used as they are, not copied)
|
|
29
|
+
*/
|
|
30
|
+
export declare function geometryFromCoordinates(type: FeatureType, coordinates: FeatureCoordinates): Geometry;
|
|
31
|
+
/**
|
|
32
|
+
* The coordinates of the geometry of a feature, nested as deep as its kind (an empty array
|
|
33
|
+
* for a GeometryCollection, which has none of its own)
|
|
34
|
+
*/
|
|
35
|
+
export declare function coordinatesOf(feature: {
|
|
36
|
+
readonly geometry: Geometry;
|
|
37
|
+
}): FeatureCoordinates;
|
|
38
|
+
export declare function coordinatesOf(feature: {
|
|
39
|
+
readonly geometry: Geometry;
|
|
40
|
+
} | null | undefined): FeatureCoordinates | undefined;
|
|
11
41
|
/**
|
|
12
42
|
* The Multi family of feature types
|
|
13
43
|
*/
|
|
@@ -34,10 +64,6 @@ export declare function mapCoordinatesDeep<T extends FeatureCoordinates>(coords:
|
|
|
34
64
|
* Used in the union computation of the bounding box and of hit testing.
|
|
35
65
|
*/
|
|
36
66
|
export declare function forEachCoordinateDeep(coords: FeatureCoordinates, visit: (coord: Coordinate) => void): void;
|
|
37
|
-
/**
|
|
38
|
-
* Gets every coordinate as a flat array
|
|
39
|
-
*/
|
|
40
|
-
export declare function flattenCoordinatesDeep(coords: FeatureCoordinates): Coordinate[];
|
|
41
67
|
/**
|
|
42
68
|
* Whether the feature type supports vertex editing (vertex handles / midpoint handles)
|
|
43
69
|
*
|
|
@@ -1,5 +1,61 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The kind of geometry of each built-in feature type
|
|
5
|
+
*
|
|
6
|
+
* A Circle and an Image are held as the Point of their center and their anchor.
|
|
7
|
+
*/
|
|
8
|
+
const BUILT_IN_GEOMETRY_KINDS = new Map([
|
|
9
|
+
['Point', 'Point'],
|
|
10
|
+
['Circle', 'Point'],
|
|
11
|
+
['Image', 'Point'],
|
|
12
|
+
['LineString', 'LineString'],
|
|
13
|
+
['Freehand', 'LineString'],
|
|
14
|
+
['Polygon', 'Polygon'],
|
|
15
|
+
['MultiPoint', 'MultiPoint'],
|
|
16
|
+
['MultiLineString', 'MultiLineString'],
|
|
17
|
+
['MultiPolygon', 'MultiPolygon'],
|
|
18
|
+
]);
|
|
19
|
+
/**
|
|
20
|
+
* The kind of geometry of a built-in feature type, or undefined for a custom type
|
|
21
|
+
*/
|
|
22
|
+
export function builtInGeometryKind(type) {
|
|
23
|
+
return BUILT_IN_GEOMETRY_KINDS.get(type);
|
|
24
|
+
}
|
|
25
|
+
/** The kind of geometry of coordinates of each nesting depth, for a custom type */
|
|
26
|
+
const KINDS_BY_DEPTH = ['Point', 'LineString', 'Polygon', 'MultiPolygon'];
|
|
27
|
+
/**
|
|
28
|
+
* The kind of geometry a feature type holds
|
|
29
|
+
*
|
|
30
|
+
* A built-in type has a fixed kind. A custom type is read from its coordinates as they come:
|
|
31
|
+
* a single position is a Point, a list of positions a LineString, a list of lists a Polygon
|
|
32
|
+
* and one level deeper a MultiPolygon.
|
|
33
|
+
*/
|
|
34
|
+
export function geometryKindOf(type, coordinates) {
|
|
35
|
+
const builtIn = BUILT_IN_GEOMETRY_KINDS.get(type);
|
|
36
|
+
if (builtIn)
|
|
37
|
+
return builtIn;
|
|
38
|
+
let depth = 0;
|
|
39
|
+
let value = coordinates;
|
|
40
|
+
while (Array.isArray(value) && Array.isArray(value[0])) {
|
|
41
|
+
depth++;
|
|
42
|
+
value = value[0];
|
|
43
|
+
}
|
|
44
|
+
return KINDS_BY_DEPTH[Math.min(depth, KINDS_BY_DEPTH.length - 1)];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* The GeoJSON geometry of a feature type with the given coordinates (the kind follows
|
|
48
|
+
* {@link geometryKindOf}; the coordinates are used as they are, not copied)
|
|
49
|
+
*/
|
|
50
|
+
export function geometryFromCoordinates(type, coordinates) {
|
|
51
|
+
return { type: geometryKindOf(type, coordinates), coordinates };
|
|
52
|
+
}
|
|
53
|
+
export function coordinatesOf(feature) {
|
|
54
|
+
if (feature == null)
|
|
55
|
+
return undefined;
|
|
56
|
+
const { geometry } = feature;
|
|
57
|
+
return geometry.type === 'GeometryCollection' ? [] : geometry.coordinates;
|
|
58
|
+
}
|
|
3
59
|
/**
|
|
4
60
|
* The Multi family of feature types
|
|
5
61
|
*/
|
|
@@ -49,16 +105,6 @@ export function forEachCoordinateDeep(coords, visit) {
|
|
|
49
105
|
}
|
|
50
106
|
}
|
|
51
107
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Gets every coordinate as a flat array
|
|
54
|
-
*/
|
|
55
|
-
export function flattenCoordinatesDeep(coords) {
|
|
56
|
-
const result = [];
|
|
57
|
-
forEachCoordinateDeep(coords, (coord) => {
|
|
58
|
-
result.push(coord);
|
|
59
|
-
});
|
|
60
|
-
return result;
|
|
61
|
-
}
|
|
62
108
|
/**
|
|
63
109
|
* Whether the feature type supports vertex editing (vertex handles / midpoint handles)
|
|
64
110
|
*
|
|
@@ -1,262 +1 @@
|
|
|
1
|
-
|
|
2
|
-
* EventEmitter
|
|
3
|
-
*
|
|
4
|
-
* The component that notifies the outside of state changes.
|
|
5
|
-
* Events can be subscribed to in a form such as draw.on('feature.create', ...).
|
|
6
|
-
*/
|
|
7
|
-
import type { DatasetClickEventPayload, MapClickEventPayload, RenderSlot, SnapResult } from '../types/events.js';
|
|
8
|
-
import type { Feature, Group, Layer, Metadata, Mode, SelectionType, UpdateSource } from '../types/model.js';
|
|
9
|
-
/**
|
|
10
|
-
* Names of the editing operations of draw.geometry
|
|
11
|
-
*/
|
|
12
|
-
export type GeometryOperationName = 'union' | 'subtract' | 'intersect' | 'buffer' | 'split';
|
|
13
|
-
/**
|
|
14
|
-
* Notification emitted when a geometric operation has been applied
|
|
15
|
-
*
|
|
16
|
-
* status expresses the outcome of the operation. 'applied' means that a result feature was
|
|
17
|
-
* created; 'empty' means that the operation itself succeeded but the result had no area (an
|
|
18
|
-
* intersection that does not overlap, a subtraction where everything was taken away, a buffer
|
|
19
|
-
* where every input became empty, a split that did not divide the polygon). When it is
|
|
20
|
-
* 'empty', the inputs are not modified at all and resultIds is empty.
|
|
21
|
-
*
|
|
22
|
-
* The result of the boolean editing operations (union / subtract / intersect) is always a
|
|
23
|
-
* single one, so the length of resultIds is at most 1. A buffer creates a result per input, so
|
|
24
|
-
* there can be several. A split produces two or more results. resultId is the first element of
|
|
25
|
-
* resultIds (null when it is empty), a shorthand for subscribers that only deal with
|
|
26
|
-
* operations producing a single result.
|
|
27
|
-
*
|
|
28
|
-
* The inputIds of a split are in the order [the polygon being cut, the line that cuts] (the
|
|
29
|
-
* line is an input of the operation but remains without being removed).
|
|
30
|
-
*/
|
|
31
|
-
export interface GeometryAppliedPayload {
|
|
32
|
-
/** Name of the operation */
|
|
33
|
-
operation: GeometryOperationName;
|
|
34
|
-
/** IDs of the input features (in z order; the last one is in the foreground) */
|
|
35
|
-
inputIds: string[];
|
|
36
|
-
/** ID of the result feature. null when the result is empty */
|
|
37
|
-
resultId: string | null;
|
|
38
|
-
/** IDs of the result features (in z order). An empty array when the result is empty */
|
|
39
|
-
resultIds: string[];
|
|
40
|
-
/** Outcome of the operation */
|
|
41
|
-
status: 'applied' | 'empty';
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Every feature change of one store flush (one transaction, or one mutation outside a
|
|
45
|
-
* transaction)
|
|
46
|
-
*
|
|
47
|
-
* It is emitted once per flush that changes features, after the per-feature events of the
|
|
48
|
-
* same flush, and carries all of them. A subscriber that rebuilds a view on any change
|
|
49
|
-
* subscribes to this instead of the per-feature events, so a bulk load of N features costs
|
|
50
|
-
* one rebuild rather than N.
|
|
51
|
-
*/
|
|
52
|
-
export interface FeaturesChangePayload {
|
|
53
|
-
/** The features created */
|
|
54
|
-
created: Feature[];
|
|
55
|
-
/** The features updated, each with the feature before the update */
|
|
56
|
-
updated: {
|
|
57
|
-
feature: Feature;
|
|
58
|
-
previous: Feature;
|
|
59
|
-
}[];
|
|
60
|
-
/** The features deleted, as they were when they were deleted */
|
|
61
|
-
deleted: Feature[];
|
|
62
|
-
/**
|
|
63
|
-
* Source of the flush ('local', 'silent' or 'batch' from core, 'remote' from a replaced
|
|
64
|
-
* store, or a value of a plugin)
|
|
65
|
-
*/
|
|
66
|
-
source: UpdateSource;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* The events of a draw instance by their internal names, with their payloads
|
|
70
|
-
*
|
|
71
|
-
* A plugin subscribes to them with `on` of {@link PluginContext}. They are the events the host
|
|
72
|
-
* receives with `draw.on`, named without the `draw.` prefix: `feature.create` here is
|
|
73
|
-
* `draw.feature.create` there ({@link EventPayloads} describes each one).
|
|
74
|
-
*/
|
|
75
|
-
export interface EventMap {
|
|
76
|
-
/** A feature was created */
|
|
77
|
-
'feature.create': {
|
|
78
|
-
feature: Feature;
|
|
79
|
-
};
|
|
80
|
-
/** A feature was updated (with the feature before the update) */
|
|
81
|
-
'feature.update': {
|
|
82
|
-
feature: Feature;
|
|
83
|
-
previous: Feature;
|
|
84
|
-
};
|
|
85
|
-
/** A feature was deleted */
|
|
86
|
-
'feature.delete': {
|
|
87
|
-
feature: Feature;
|
|
88
|
-
};
|
|
89
|
-
/** Every feature change of one Store notification, after the per-feature events */
|
|
90
|
-
'features.change': FeaturesChangePayload;
|
|
91
|
-
/** The selection changed */
|
|
92
|
-
'selection.change': {
|
|
93
|
-
type: SelectionType | null;
|
|
94
|
-
ids: string[];
|
|
95
|
-
previousType: SelectionType | null;
|
|
96
|
-
previousIds: string[];
|
|
97
|
-
};
|
|
98
|
-
/** The mode changed */
|
|
99
|
-
'mode.change': {
|
|
100
|
-
mode: Mode;
|
|
101
|
-
previousMode: Mode;
|
|
102
|
-
};
|
|
103
|
-
/** A layer was created */
|
|
104
|
-
'layer.create': {
|
|
105
|
-
layer: Layer;
|
|
106
|
-
};
|
|
107
|
-
/** A layer was updated (with the layer before the update) */
|
|
108
|
-
'layer.update': {
|
|
109
|
-
layer: Layer;
|
|
110
|
-
previous: Layer;
|
|
111
|
-
};
|
|
112
|
-
/** A layer was deleted */
|
|
113
|
-
'layer.delete': {
|
|
114
|
-
layer: Layer;
|
|
115
|
-
};
|
|
116
|
-
/** The stacking order of the layers changed */
|
|
117
|
-
'layer.reorder': {
|
|
118
|
-
order: string[];
|
|
119
|
-
previous: string[];
|
|
120
|
-
};
|
|
121
|
-
/** A group was created */
|
|
122
|
-
'group.create': {
|
|
123
|
-
group: Group;
|
|
124
|
-
};
|
|
125
|
-
/** A group was updated (with the group before the update) */
|
|
126
|
-
'group.update': {
|
|
127
|
-
group: Group;
|
|
128
|
-
previous: Group;
|
|
129
|
-
};
|
|
130
|
-
/** A group was deleted */
|
|
131
|
-
'group.delete': {
|
|
132
|
-
group: Group;
|
|
133
|
-
};
|
|
134
|
-
/** The metadata of the document changed */
|
|
135
|
-
'metadata.change': {
|
|
136
|
-
metadata: Metadata;
|
|
137
|
-
previous: Metadata;
|
|
138
|
-
};
|
|
139
|
-
/** The image mode asks the host for an image file, to place at the carried position */
|
|
140
|
-
'image.request': {
|
|
141
|
-
coordinate: [number, number];
|
|
142
|
-
zoom: number;
|
|
143
|
-
layerId: string;
|
|
144
|
-
};
|
|
145
|
-
/** An operation of `draw.geometry` finished */
|
|
146
|
-
'geometry.applied': GeometryAppliedPayload;
|
|
147
|
-
/**
|
|
148
|
-
* Change of the snapping result
|
|
149
|
-
*
|
|
150
|
-
* Emitted when the snapping target changes (and, when snapping to an edge whose coordinates
|
|
151
|
-
* move, when the coordinates change). When snapping is lost, it is emitted once with no
|
|
152
|
-
* target.
|
|
153
|
-
*/
|
|
154
|
-
'snap.change': SnapResult;
|
|
155
|
-
/**
|
|
156
|
-
* Resolution result of the click interception on datasets
|
|
157
|
-
*
|
|
158
|
-
* Emits on one channel whether a click in select mode hit a feature of a dataset
|
|
159
|
-
* (datasetId / feature are carried) or hit nothing (both are null).
|
|
160
|
-
* It is not emitted for a click that hit a feature of the Store.
|
|
161
|
-
*/
|
|
162
|
-
'dataset.click': DatasetClickEventPayload;
|
|
163
|
-
/**
|
|
164
|
-
* A dataset was added
|
|
165
|
-
*
|
|
166
|
-
* Emitted by `addDataset` once the dataset is listed, so a handler can get it
|
|
167
|
-
* by its id. A plugin that follows every dataset (to subscribe to its `change`)
|
|
168
|
-
* subscribes to this and to `dataset.remove`, and lists the datasets that already exist
|
|
169
|
-
* once when it is installed.
|
|
170
|
-
*/
|
|
171
|
-
'dataset.add': {
|
|
172
|
-
datasetId: string;
|
|
173
|
-
};
|
|
174
|
-
/**
|
|
175
|
-
* A dataset was removed
|
|
176
|
-
*
|
|
177
|
-
* Emitted by `removeDataset` and by the `remove` of the dataset, once it is no
|
|
178
|
-
* longer listed. It is not emitted when the draw instance is destroyed. A dataset added
|
|
179
|
-
* again under the same id is a new object, announced by a new `dataset.add`.
|
|
180
|
-
*/
|
|
181
|
-
'dataset.remove': {
|
|
182
|
-
datasetId: string;
|
|
183
|
-
};
|
|
184
|
-
/**
|
|
185
|
-
* The order of the datasets changed
|
|
186
|
-
*
|
|
187
|
-
* Emitted by `moveDataset` when it moved a dataset within its side or to
|
|
188
|
-
* another side. `order` is the ids in display order, from the back to the front (the same
|
|
189
|
-
* as `getDatasets`). A move that leaves everything where it was emits nothing, and
|
|
190
|
-
* adding or removing a dataset emits `dataset.add` or `dataset.remove` instead.
|
|
191
|
-
*/
|
|
192
|
-
'dataset.reorder': {
|
|
193
|
-
order: string[];
|
|
194
|
-
};
|
|
195
|
-
/**
|
|
196
|
-
* Map click in select mode
|
|
197
|
-
*
|
|
198
|
-
* Emits the normalized click as is on one channel, regardless of whether anything was hit
|
|
199
|
-
* and of what was hit (the coordinates are before snapping). It is for read-only
|
|
200
|
-
* subscription and does not affect the selection behavior of the modes. It is used by
|
|
201
|
-
* callers that need "a click anywhere on the map".
|
|
202
|
-
*/
|
|
203
|
-
'map.click': MapClickEventPayload;
|
|
204
|
-
/**
|
|
205
|
-
* Addition or removal of frames (the CustomLayer per interval) and changes of the intervals
|
|
206
|
-
*
|
|
207
|
-
* On receiving this, the host re-places the native layers that correspond to the separators
|
|
208
|
-
* between the frames (it carries the same content as getRenderSlots).
|
|
209
|
-
*/
|
|
210
|
-
'renderslots.change': {
|
|
211
|
-
slots: RenderSlot[];
|
|
212
|
-
};
|
|
213
|
-
/**
|
|
214
|
-
* Failure of an asynchronous load that no call returns
|
|
215
|
-
*
|
|
216
|
-
* `image`: the image of an Image feature could not be decoded (`featureId`). It is emitted
|
|
217
|
-
* once per feature and image, the decode is not retried, and the feature is drawn without
|
|
218
|
-
* its image. The error is the one that was thrown.
|
|
219
|
-
*/
|
|
220
|
-
'load.error': LoadErrorPayload;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* The payload of the load.error event
|
|
224
|
-
*/
|
|
225
|
-
export interface LoadErrorPayload {
|
|
226
|
-
/** Where the load was: the image of an Image feature */
|
|
227
|
-
source: 'image';
|
|
228
|
-
/** The Image feature whose image failed */
|
|
229
|
-
featureId: string;
|
|
230
|
-
/** What was thrown */
|
|
231
|
-
error: unknown;
|
|
232
|
-
}
|
|
233
|
-
/**
|
|
234
|
-
* Event listener type
|
|
235
|
-
*/
|
|
236
|
-
export type EventListener<K extends keyof EventMap> = (data: EventMap[K]) => void;
|
|
237
|
-
/**
|
|
238
|
-
* EventEmitter interface
|
|
239
|
-
*/
|
|
240
|
-
export interface EventEmitter {
|
|
241
|
-
/**
|
|
242
|
-
* Registers an event listener
|
|
243
|
-
*/
|
|
244
|
-
on<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
|
|
245
|
-
/**
|
|
246
|
-
* Unregisters an event listener
|
|
247
|
-
*/
|
|
248
|
-
off<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
|
|
249
|
-
/**
|
|
250
|
-
* Emits an event
|
|
251
|
-
*/
|
|
252
|
-
emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
|
|
253
|
-
}
|
|
254
|
-
/**
|
|
255
|
-
* EventEmitter implementation
|
|
256
|
-
*/
|
|
257
|
-
export declare class EventEmitterImpl implements EventEmitter {
|
|
258
|
-
private listeners;
|
|
259
|
-
on<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
|
|
260
|
-
off<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
|
|
261
|
-
emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
|
|
262
|
-
}
|
|
1
|
+
export {};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* The emitter of the signals of one engine
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
5
7
|
*/
|
|
6
8
|
export class EventEmitterImpl {
|
|
7
9
|
constructor() {
|
|
@@ -30,8 +32,7 @@ export class EventEmitterImpl {
|
|
|
30
32
|
return;
|
|
31
33
|
// Take a snapshot so that listeners being added or removed during emit has no effect,
|
|
32
34
|
// and isolate each one individually so that an exception from a single listener does not
|
|
33
|
-
// drag in the following listeners or the internal processing of the
|
|
34
|
-
// so on).
|
|
35
|
+
// drag in the following listeners or the internal processing of the engine.
|
|
35
36
|
for (const listener of [...set]) {
|
|
36
37
|
try {
|
|
37
38
|
listener(data);
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
* The bounding box of a feature
|
|
5
5
|
*
|
|
6
6
|
* A pure function of the feature (and the tile size for Image). The spatial index of the Store
|
|
7
|
-
* (store/spatial) and the datasets (
|
|
7
|
+
* (store/spatial) and the datasets (dataset/) both use it.
|
|
8
8
|
*/
|
|
9
9
|
import { circleBoundingBox } from '../../geometry/circle.js';
|
|
10
10
|
import { pixelsToDegreesLat, pixelsToDegreesLng, rotateCoordinateOnSphere } from '../math/index.js';
|
|
11
|
-
import { forEachCoordinateDeep } from './coordinates.js';
|
|
11
|
+
import { coordinatesOf, forEachCoordinateDeep } from './coordinates.js';
|
|
12
12
|
import { getCircleRadius, getCreatedZoom, getImageProperties } from './property.js';
|
|
13
13
|
/**
|
|
14
14
|
* Computes the bounding box of a feature
|
|
@@ -16,15 +16,15 @@ import { getCircleRadius, getCreatedZoom, getImageProperties } from './property.
|
|
|
16
16
|
* For an Image, the size at createdZoom is converted into geographic coordinates
|
|
17
17
|
*/
|
|
18
18
|
function computeBoundingBox(feature, tileSize) {
|
|
19
|
-
const { type
|
|
19
|
+
const { type } = feature;
|
|
20
|
+
const coordinates = coordinatesOf(feature);
|
|
20
21
|
// For an Image
|
|
21
22
|
if (type === 'Image') {
|
|
22
23
|
const coord = coordinates;
|
|
23
24
|
const [lng, lat] = coord;
|
|
24
25
|
const props = getImageProperties(feature);
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const imageHeight = style?.height || props.imageHeight || 100;
|
|
26
|
+
const imageWidth = props.imageWidth || 100;
|
|
27
|
+
const imageHeight = props.imageHeight || 100;
|
|
28
28
|
const scale = props.scale ?? 1;
|
|
29
29
|
// createdZoom defaults to 14 when missing. getImageProperties().createdZoom returns 0 when
|
|
30
30
|
// missing, so ?? does not work; therefore getCreatedZoom(number|undefined) is used.
|
|
@@ -84,7 +84,8 @@ const coordinateBoundingBoxCache = new WeakMap();
|
|
|
84
84
|
* cache hit it does not traverse and only returns a copy of the value.
|
|
85
85
|
*/
|
|
86
86
|
function computeCoordinateBoundingBox(feature) {
|
|
87
|
-
const { type
|
|
87
|
+
const { type } = feature;
|
|
88
|
+
const coordinates = coordinatesOf(feature);
|
|
88
89
|
if (type === 'Point') {
|
|
89
90
|
const [lng, lat] = coordinates;
|
|
90
91
|
return { minX: lng, minY: lat, maxX: lng, maxY: lat };
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* so the listing sits in shared/. It is pure: it reads only the coordinates of the feature.
|
|
9
9
|
*/
|
|
10
10
|
import { getSegmentGrid, querySegmentIndicesInBBox, SEGMENT_INDEX_THRESHOLD, } from '../math/segment-grid.js';
|
|
11
|
+
import { coordinatesOf } from './coordinates.js';
|
|
11
12
|
/**
|
|
12
13
|
* Whether the feature type has edges (whether it is a target of edge snapping)
|
|
13
14
|
*
|
|
@@ -56,24 +57,24 @@ export function isInBBox(position, bbox) {
|
|
|
56
57
|
export function forEachPart(feature, visit) {
|
|
57
58
|
switch (feature.type) {
|
|
58
59
|
case 'LineString':
|
|
59
|
-
visit(feature
|
|
60
|
+
visit(coordinatesOf(feature), 0, undefined, false);
|
|
60
61
|
break;
|
|
61
62
|
case 'Polygon': {
|
|
62
|
-
const rings = feature
|
|
63
|
+
const rings = coordinatesOf(feature);
|
|
63
64
|
for (let ring = 0; ring < rings.length; ring++) {
|
|
64
65
|
visit(rings[ring], ring, undefined, true);
|
|
65
66
|
}
|
|
66
67
|
break;
|
|
67
68
|
}
|
|
68
69
|
case 'MultiLineString': {
|
|
69
|
-
const parts = feature
|
|
70
|
+
const parts = coordinatesOf(feature);
|
|
70
71
|
for (let part = 0; part < parts.length; part++) {
|
|
71
72
|
visit(parts[part], 0, part, false);
|
|
72
73
|
}
|
|
73
74
|
break;
|
|
74
75
|
}
|
|
75
76
|
case 'MultiPolygon': {
|
|
76
|
-
const parts = feature
|
|
77
|
+
const parts = coordinatesOf(feature);
|
|
77
78
|
for (let part = 0; part < parts.length; part++) {
|
|
78
79
|
const rings = parts[part];
|
|
79
80
|
for (let ring = 0; ring < rings.length; ring++) {
|
|
@@ -28,7 +28,3 @@ export declare function exceedsMaxImageSize(width: number, height: number): bool
|
|
|
28
28
|
* A large image is resized automatically
|
|
29
29
|
*/
|
|
30
30
|
export declare function processImageDataUrl(originalDataUrl: string): Promise<ProcessedImage>;
|
|
31
|
-
/**
|
|
32
|
-
* Tests whether it is an image file
|
|
33
|
-
*/
|
|
34
|
-
export declare function isImageFile(file: File): boolean;
|