@sakuzu/maplibre-gl-draw 1.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 +43 -0
- package/LICENSE +661 -0
- package/README.ja.md +248 -0
- package/README.md +255 -0
- package/THIRD_PARTY_NOTICES.md +275 -0
- package/dist/api/api.d.ts +1259 -0
- package/dist/api/api.js +86 -0
- package/dist/api/context.d.ts +173 -0
- package/dist/api/context.js +193 -0
- package/dist/api/display-api.d.ts +1 -0
- package/dist/api/display-api.js +23 -0
- package/dist/api/event-api.d.ts +13 -0
- package/dist/api/event-api.js +17 -0
- package/dist/api/extension-api.d.ts +46 -0
- package/dist/api/extension-api.js +85 -0
- package/dist/api/feature-api.d.ts +11 -0
- package/dist/api/feature-api.js +101 -0
- package/dist/api/geometry/apply.d.ts +51 -0
- package/dist/api/geometry/apply.js +114 -0
- package/dist/api/geometry/boolean.d.ts +28 -0
- package/dist/api/geometry/boolean.js +65 -0
- package/dist/api/geometry/buffer.d.ts +11 -0
- package/dist/api/geometry/buffer.js +105 -0
- package/dist/api/geometry/split.d.ts +16 -0
- package/dist/api/geometry/split.js +75 -0
- package/dist/api/geometry/targets.d.ts +76 -0
- package/dist/api/geometry/targets.js +158 -0
- package/dist/api/geometry/types.d.ts +31 -0
- package/dist/api/geometry/types.js +3 -0
- package/dist/api/geometry-operations.d.ts +162 -0
- package/dist/api/geometry-operations.js +94 -0
- package/dist/api/group-api.d.ts +10 -0
- package/dist/api/group-api.js +78 -0
- package/dist/api/import-export/constants.d.ts +29 -0
- package/dist/api/import-export/constants.js +40 -0
- package/dist/api/import-export/embedded-file.d.ts +13 -0
- package/dist/api/import-export/embedded-file.js +31 -0
- package/dist/api/import-export/file-name.d.ts +10 -0
- package/dist/api/import-export/file-name.js +20 -0
- package/dist/api/import-export/format-detection.d.ts +12 -0
- package/dist/api/import-export/format-detection.js +29 -0
- package/dist/api/import-export/geojson-export.d.ts +19 -0
- package/dist/api/import-export/geojson-export.js +262 -0
- package/dist/api/import-export/geojson-import.d.ts +34 -0
- package/dist/api/import-export/geojson-import.js +538 -0
- package/dist/api/import-export/geometry-validation.d.ts +20 -0
- package/dist/api/import-export/geometry-validation.js +107 -0
- package/dist/api/import-export/image-import.d.ts +12 -0
- package/dist/api/import-export/image-import.js +53 -0
- package/dist/api/import-export/index.d.ts +9 -0
- package/dist/api/import-export/index.js +107 -0
- package/dist/api/import-export/native-format.d.ts +15 -0
- package/dist/api/import-export/native-format.js +126 -0
- package/dist/api/import-export/native-validation.d.ts +28 -0
- package/dist/api/import-export/native-validation.js +212 -0
- package/dist/api/import-export/own-property.d.ts +10 -0
- package/dist/api/import-export/own-property.js +19 -0
- package/dist/api/import-export/style-validation.d.ts +27 -0
- package/dist/api/import-export/style-validation.js +49 -0
- package/dist/api/import-export/types.d.ts +26 -0
- package/dist/api/import-export/types.js +3 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.js +3 -0
- package/dist/api/input-api.d.ts +158 -0
- package/dist/api/input-api.js +144 -0
- package/dist/api/instance-api.d.ts +38 -0
- package/dist/api/instance-api.js +136 -0
- package/dist/api/layer-api.d.ts +12 -0
- package/dist/api/layer-api.js +62 -0
- package/dist/api/selection-api.d.ts +7 -0
- package/dist/api/selection-api.js +78 -0
- package/dist/api/snapping-api.d.ts +125 -0
- package/dist/api/snapping-api.js +50 -0
- package/dist/api/topology-api.d.ts +30 -0
- package/dist/api/topology-api.js +16 -0
- package/dist/api/tracing-api.d.ts +31 -0
- package/dist/api/tracing-api.js +16 -0
- package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
- package/dist/dispatcher/hit-test/box-strategies.js +275 -0
- package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
- package/dist/dispatcher/hit-test/box-strategy.js +37 -0
- package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
- package/dist/dispatcher/hit-test/globe-shape.js +70 -0
- package/dist/dispatcher/hit-test/index.d.ts +14 -0
- package/dist/dispatcher/hit-test/index.js +9 -0
- package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
- package/dist/dispatcher/hit-test/local-frame.js +112 -0
- package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
- package/dist/dispatcher/hit-test/segment-grid.js +79 -0
- package/dist/dispatcher/hit-test/service.d.ts +120 -0
- package/dist/dispatcher/hit-test/service.js +333 -0
- package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
- package/dist/dispatcher/hit-test/strategies/base.js +66 -0
- package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
- package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
- package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
- package/dist/dispatcher/hit-test/strategies/image.js +115 -0
- package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
- package/dist/dispatcher/hit-test/strategies/index.js +10 -0
- package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
- package/dist/dispatcher/hit-test/strategies/line.js +30 -0
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
- package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
- package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
- package/dist/dispatcher/hit-test/strategies/point.js +29 -0
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
- package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
- package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
- package/dist/dispatcher/hit-test/topmost.js +157 -0
- package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
- package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
- package/dist/dispatcher/index.d.ts +15 -0
- package/dist/dispatcher/index.js +3 -0
- package/dist/dispatcher/input-router.d.ts +1 -0
- package/dist/dispatcher/input-router.js +288 -0
- package/dist/dispatcher/normalizer.d.ts +1 -0
- package/dist/dispatcher/normalizer.js +513 -0
- package/dist/dispatcher/types.d.ts +144 -0
- package/dist/dispatcher/types.js +15 -0
- package/dist/display/chunk-set.d.ts +24 -0
- package/dist/display/chunk-set.js +533 -0
- package/dist/display/chunk.d.ts +1 -0
- package/dist/display/chunk.js +104 -0
- package/dist/display/columnar/index.d.ts +12 -0
- package/dist/display/columnar/index.js +13 -0
- package/dist/display/columnar/prepare.d.ts +42 -0
- package/dist/display/columnar/prepare.js +116 -0
- package/dist/display/columnar/source.d.ts +1 -0
- package/dist/display/columnar/source.js +531 -0
- package/dist/display/columnar/table.d.ts +1 -0
- package/dist/display/columnar/table.js +471 -0
- package/dist/display/columnar/types.d.ts +223 -0
- package/dist/display/columnar/types.js +3 -0
- package/dist/display/dataset.d.ts +2 -0
- package/dist/display/dataset.js +891 -0
- package/dist/display/index.d.ts +13 -0
- package/dist/display/index.js +3 -0
- package/dist/display/interaction.d.ts +1 -0
- package/dist/display/interaction.js +90 -0
- package/dist/display/manager.d.ts +1 -0
- package/dist/display/manager.js +440 -0
- package/dist/display/packed-rtree.d.ts +1 -0
- package/dist/display/packed-rtree.js +244 -0
- package/dist/display/partition.d.ts +1 -0
- package/dist/display/partition.js +226 -0
- package/dist/display/provider.d.ts +1 -0
- package/dist/display/provider.js +342 -0
- package/dist/display/retained.d.ts +40 -0
- package/dist/display/retained.js +898 -0
- package/dist/display/selection.d.ts +13 -0
- package/dist/display/selection.js +226 -0
- package/dist/display/source.d.ts +1 -0
- package/dist/display/source.js +119 -0
- package/dist/display/spatial.d.ts +1 -0
- package/dist/display/spatial.js +71 -0
- package/dist/display/style.d.ts +1 -0
- package/dist/display/style.js +126 -0
- package/dist/display/thinning.d.ts +65 -0
- package/dist/display/thinning.js +910 -0
- package/dist/display/triangulation.d.ts +1 -0
- package/dist/display/triangulation.js +0 -0
- package/dist/display/types.d.ts +561 -0
- package/dist/display/types.js +43 -0
- package/dist/extension/feature-handler.d.ts +182 -0
- package/dist/extension/feature-handler.js +3 -0
- package/dist/extension/index.d.ts +9 -0
- package/dist/extension/index.js +3 -0
- package/dist/extension/renderers.d.ts +208 -0
- package/dist/extension/renderers.js +3 -0
- package/dist/geometry/angle.d.ts +47 -0
- package/dist/geometry/angle.js +44 -0
- package/dist/geometry/bbox.d.ts +48 -0
- package/dist/geometry/bbox.js +83 -0
- package/dist/geometry/boolean.d.ts +162 -0
- package/dist/geometry/boolean.js +331 -0
- package/dist/geometry/buffer.d.ts +72 -0
- package/dist/geometry/buffer.js +218 -0
- package/dist/geometry/circle.d.ts +55 -0
- package/dist/geometry/circle.js +107 -0
- package/dist/geometry/coords.d.ts +97 -0
- package/dist/geometry/coords.js +149 -0
- package/dist/geometry/distance.d.ts +79 -0
- package/dist/geometry/distance.js +111 -0
- package/dist/geometry/errors.d.ts +74 -0
- package/dist/geometry/errors.js +104 -0
- package/dist/geometry/index.d.ts +28 -0
- package/dist/geometry/index.js +38 -0
- package/dist/geometry/measure.d.ts +81 -0
- package/dist/geometry/measure.js +236 -0
- package/dist/geometry/predicates.d.ts +62 -0
- package/dist/geometry/predicates.js +132 -0
- package/dist/geometry/simplify.d.ts +74 -0
- package/dist/geometry/simplify.js +159 -0
- package/dist/geometry/split.d.ts +68 -0
- package/dist/geometry/split.js +430 -0
- package/dist/geometry/types.d.ts +95 -0
- package/dist/geometry/types.js +3 -0
- package/dist/geometry/units.d.ts +35 -0
- package/dist/geometry/units.js +41 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.js +20 -0
- package/dist/maplibre-gl-draw.d.ts +47 -0
- package/dist/maplibre-gl-draw.js +407 -0
- package/dist/messages.d.ts +64 -0
- package/dist/messages.js +36 -0
- package/dist/modes/cursor.d.ts +1 -0
- package/dist/modes/cursor.js +72 -0
- package/dist/modes/draw/circle.d.ts +1 -0
- package/dist/modes/draw/circle.js +222 -0
- package/dist/modes/draw/commit-layer.d.ts +26 -0
- package/dist/modes/draw/commit-layer.js +31 -0
- package/dist/modes/draw/freehand.d.ts +1 -0
- package/dist/modes/draw/freehand.js +264 -0
- package/dist/modes/draw/image.d.ts +1 -0
- package/dist/modes/draw/image.js +60 -0
- package/dist/modes/draw/index.d.ts +9 -0
- package/dist/modes/draw/index.js +11 -0
- package/dist/modes/draw/line.d.ts +1 -0
- package/dist/modes/draw/line.js +363 -0
- package/dist/modes/draw/point.d.ts +1 -0
- package/dist/modes/draw/point.js +87 -0
- package/dist/modes/draw/polygon.d.ts +1 -0
- package/dist/modes/draw/polygon.js +378 -0
- package/dist/modes/draw/trace-support.d.ts +79 -0
- package/dist/modes/draw/trace-support.js +161 -0
- package/dist/modes/handler.d.ts +285 -0
- package/dist/modes/handler.js +3 -0
- package/dist/modes/index.d.ts +7 -0
- package/dist/modes/index.js +3 -0
- package/dist/modes/manager.d.ts +15 -0
- package/dist/modes/manager.js +196 -0
- package/dist/modes/select/box-selection.d.ts +52 -0
- package/dist/modes/select/box-selection.js +140 -0
- package/dist/modes/select/click-handler.d.ts +32 -0
- package/dist/modes/select/click-handler.js +166 -0
- package/dist/modes/select/cursor-handler.d.ts +15 -0
- package/dist/modes/select/cursor-handler.js +59 -0
- package/dist/modes/select/drag/auxiliary.d.ts +26 -0
- package/dist/modes/select/drag/auxiliary.js +56 -0
- package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
- package/dist/modes/select/drag/intermediate-writes.js +171 -0
- package/dist/modes/select/drag/move.d.ts +24 -0
- package/dist/modes/select/drag/move.js +59 -0
- package/dist/modes/select/drag/operation.d.ts +30 -0
- package/dist/modes/select/drag/operation.js +18 -0
- package/dist/modes/select/drag/radius.d.ts +15 -0
- package/dist/modes/select/drag/radius.js +49 -0
- package/dist/modes/select/drag/transform.d.ts +17 -0
- package/dist/modes/select/drag/transform.js +155 -0
- package/dist/modes/select/drag/vertex.d.ts +17 -0
- package/dist/modes/select/drag/vertex.js +163 -0
- package/dist/modes/select/drag-handler.d.ts +1 -0
- package/dist/modes/select/drag-handler.js +254 -0
- package/dist/modes/select/hit-helpers.d.ts +40 -0
- package/dist/modes/select/hit-helpers.js +51 -0
- package/dist/modes/select/mode.d.ts +1 -0
- package/dist/modes/select/mode.js +397 -0
- package/dist/modes/select/shortcut-handler.d.ts +40 -0
- package/dist/modes/select/shortcut-handler.js +128 -0
- package/dist/operations/index.d.ts +9 -0
- package/dist/operations/index.js +3 -0
- package/dist/operations/layer-operations.d.ts +1 -0
- package/dist/operations/layer-operations.js +350 -0
- package/dist/operations/resize.d.ts +71 -0
- package/dist/operations/resize.js +252 -0
- package/dist/operations/rotate.d.ts +17 -0
- package/dist/operations/rotate.js +166 -0
- package/dist/operations/selection-operations.d.ts +20 -0
- package/dist/operations/selection-operations.js +159 -0
- package/dist/operations/shared-vertex.d.ts +1 -0
- package/dist/operations/shared-vertex.js +210 -0
- package/dist/operations/trace-graph.d.ts +96 -0
- package/dist/operations/trace-graph.js +283 -0
- package/dist/operations/vertex.d.ts +1 -0
- package/dist/operations/vertex.js +538 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/mutation-hooks.d.ts +28 -0
- package/dist/plugins/mutation-hooks.js +84 -0
- package/dist/plugins/plugin-context.d.ts +1 -0
- package/dist/plugins/plugin-context.js +367 -0
- package/dist/plugins/plugin-manager.d.ts +103 -0
- package/dist/plugins/plugin-manager.js +316 -0
- package/dist/plugins/plugin.d.ts +529 -0
- package/dist/plugins/plugin.js +3 -0
- package/dist/shared/config/constants.d.ts +66 -0
- package/dist/shared/config/constants.js +60 -0
- package/dist/shared/config/feature-style.d.ts +155 -0
- package/dist/shared/config/feature-style.js +154 -0
- package/dist/shared/config/index.d.ts +17 -0
- package/dist/shared/config/index.js +8 -0
- package/dist/shared/config/rendering.d.ts +107 -0
- package/dist/shared/config/rendering.js +33 -0
- package/dist/shared/config/selection-highlight.d.ts +29 -0
- package/dist/shared/config/selection-highlight.js +35 -0
- package/dist/shared/config/selection.d.ts +273 -0
- package/dist/shared/config/selection.js +266 -0
- package/dist/shared/config/topology.d.ts +33 -0
- package/dist/shared/config/topology.js +17 -0
- package/dist/shared/config/trace.d.ts +40 -0
- package/dist/shared/config/trace.js +17 -0
- package/dist/shared/math/angle.d.ts +21 -0
- package/dist/shared/math/angle.js +34 -0
- package/dist/shared/math/circle.d.ts +6 -0
- package/dist/shared/math/circle.js +10 -0
- package/dist/shared/math/constants.d.ts +48 -0
- package/dist/shared/math/constants.js +59 -0
- package/dist/shared/math/distance.d.ts +78 -0
- package/dist/shared/math/distance.js +147 -0
- package/dist/shared/math/globe-subdivision.d.ts +62 -0
- package/dist/shared/math/globe-subdivision.js +99 -0
- package/dist/shared/math/index.d.ts +17 -0
- package/dist/shared/math/index.js +21 -0
- package/dist/shared/math/intersection.d.ts +63 -0
- package/dist/shared/math/intersection.js +236 -0
- package/dist/shared/math/longitude.d.ts +20 -0
- package/dist/shared/math/longitude.js +31 -0
- package/dist/shared/math/mercator-plane.d.ts +27 -0
- package/dist/shared/math/mercator-plane.js +26 -0
- package/dist/shared/math/obb.d.ts +65 -0
- package/dist/shared/math/obb.js +107 -0
- package/dist/shared/math/rotation.d.ts +93 -0
- package/dist/shared/math/rotation.js +186 -0
- package/dist/shared/math/segment-grid.d.ts +69 -0
- package/dist/shared/math/segment-grid.js +159 -0
- package/dist/shared/math/transform.d.ts +140 -0
- package/dist/shared/math/transform.js +189 -0
- package/dist/shared/types/events.d.ts +128 -0
- package/dist/shared/types/events.js +3 -0
- package/dist/shared/types/model.d.ts +950 -0
- package/dist/shared/types/model.js +3 -0
- package/dist/shared/types/selection-box.d.ts +23 -0
- package/dist/shared/types/selection-box.js +3 -0
- package/dist/shared/types/style.d.ts +68 -0
- package/dist/shared/types/style.js +3 -0
- package/dist/shared/utils/color.d.ts +49 -0
- package/dist/shared/utils/color.js +180 -0
- package/dist/shared/utils/coordinates.d.ts +52 -0
- package/dist/shared/utils/coordinates.js +75 -0
- package/dist/shared/utils/embedded-image.d.ts +34 -0
- package/dist/shared/utils/embedded-image.js +161 -0
- package/dist/shared/utils/event-emitter.d.ts +262 -0
- package/dist/shared/utils/event-emitter.js +44 -0
- package/dist/shared/utils/feature-bbox.d.ts +8 -0
- package/dist/shared/utils/feature-bbox.js +207 -0
- package/dist/shared/utils/feature-segments.d.ts +23 -0
- package/dist/shared/utils/feature-segments.js +179 -0
- package/dist/shared/utils/id.d.ts +1 -0
- package/dist/shared/utils/id.js +35 -0
- package/dist/shared/utils/image.d.ts +34 -0
- package/dist/shared/utils/image.js +106 -0
- package/dist/shared/utils/index.d.ts +15 -0
- package/dist/shared/utils/index.js +24 -0
- package/dist/shared/utils/map.d.ts +26 -0
- package/dist/shared/utils/map.js +35 -0
- package/dist/shared/utils/name-generator.d.ts +197 -0
- package/dist/shared/utils/name-generator.js +337 -0
- package/dist/shared/utils/pixel-ratio.d.ts +111 -0
- package/dist/shared/utils/pixel-ratio.js +85 -0
- package/dist/shared/utils/property.d.ts +88 -0
- package/dist/shared/utils/property.js +140 -0
- package/dist/shared/utils/vertex-ref.d.ts +23 -0
- package/dist/shared/utils/vertex-ref.js +20 -0
- package/dist/snapping/custom-targets.d.ts +1 -0
- package/dist/snapping/custom-targets.js +21 -0
- package/dist/snapping/geometry.d.ts +1 -0
- package/dist/snapping/geometry.js +61 -0
- package/dist/snapping/index.d.ts +14 -0
- package/dist/snapping/index.js +4 -0
- package/dist/snapping/indicator.d.ts +19 -0
- package/dist/snapping/indicator.js +145 -0
- package/dist/snapping/providers/display.d.ts +72 -0
- package/dist/snapping/providers/display.js +268 -0
- package/dist/snapping/providers/guide.d.ts +69 -0
- package/dist/snapping/providers/guide.js +187 -0
- package/dist/snapping/providers/intersection.d.ts +1 -0
- package/dist/snapping/providers/intersection.js +92 -0
- package/dist/snapping/providers/shared.d.ts +39 -0
- package/dist/snapping/providers/shared.js +146 -0
- package/dist/snapping/providers/store.d.ts +1 -0
- package/dist/snapping/providers/store.js +132 -0
- package/dist/snapping/service.d.ts +1 -0
- package/dist/snapping/service.js +272 -0
- package/dist/snapping/types.d.ts +267 -0
- package/dist/snapping/types.js +66 -0
- package/dist/store/change-merger.d.ts +1 -0
- package/dist/store/change-merger.js +102 -0
- package/dist/store/draw-store.d.ts +1 -0
- package/dist/store/draw-store.js +396 -0
- package/dist/store/event-bridge.d.ts +1 -0
- package/dist/store/event-bridge.js +161 -0
- package/dist/store/index.d.ts +12 -0
- package/dist/store/index.js +4 -0
- package/dist/store/local-visibility.d.ts +21 -0
- package/dist/store/local-visibility.js +27 -0
- package/dist/store/lock.d.ts +67 -0
- package/dist/store/lock.js +54 -0
- package/dist/store/memory/change-bus.d.ts +60 -0
- package/dist/store/memory/change-bus.js +232 -0
- package/dist/store/memory/file-store.d.ts +15 -0
- package/dist/store/memory/file-store.js +33 -0
- package/dist/store/memory/frozen.d.ts +21 -0
- package/dist/store/memory/frozen.js +51 -0
- package/dist/store/memory/ui-state.d.ts +51 -0
- package/dist/store/memory/ui-state.js +223 -0
- package/dist/store/memory.d.ts +26 -0
- package/dist/store/memory.js +708 -0
- package/dist/store/spatial/index.d.ts +6 -0
- package/dist/store/spatial/index.js +4 -0
- package/dist/store/spatial/spatial-index.d.ts +90 -0
- package/dist/store/spatial/spatial-index.js +148 -0
- package/dist/store/spatial/store-spatial-index.d.ts +60 -0
- package/dist/store/spatial/store-spatial-index.js +125 -0
- package/dist/store/store.d.ts +417 -0
- package/dist/store/store.js +3 -0
- package/dist/store/types.d.ts +8 -0
- package/dist/store/types.js +3 -0
- package/dist/store/writable-layer.d.ts +35 -0
- package/dist/store/writable-layer.js +20 -0
- package/dist/view/cache/buffer.d.ts +28 -0
- package/dist/view/cache/buffer.js +176 -0
- package/dist/view/cache/earcut.d.ts +1 -0
- package/dist/view/cache/earcut.js +122 -0
- package/dist/view/cache/style-rule.d.ts +1 -0
- package/dist/view/cache/style-rule.js +97 -0
- package/dist/view/cache/terrain-fill.d.ts +30 -0
- package/dist/view/cache/terrain-fill.js +60 -0
- package/dist/view/cache/texture.d.ts +14 -0
- package/dist/view/cache/texture.js +292 -0
- package/dist/view/coordinator.d.ts +27 -0
- package/dist/view/coordinator.js +72 -0
- package/dist/view/feature-companion.d.ts +173 -0
- package/dist/view/feature-companion.js +108 -0
- package/dist/view/globe-subdivision.d.ts +78 -0
- package/dist/view/globe-subdivision.js +128 -0
- package/dist/view/index.d.ts +47 -0
- package/dist/view/index.js +20 -0
- package/dist/view/layer/attach.d.ts +20 -0
- package/dist/view/layer/attach.js +47 -0
- package/dist/view/layer/blend.d.ts +57 -0
- package/dist/view/layer/blend.js +14 -0
- package/dist/view/layer/custom-layer.d.ts +1 -0
- package/dist/view/layer/custom-layer.js +509 -0
- package/dist/view/layer/depth-state.d.ts +14 -0
- package/dist/view/layer/depth-state.js +44 -0
- package/dist/view/layer/display-list.d.ts +1 -0
- package/dist/view/layer/display-list.js +111 -0
- package/dist/view/layer/drape-planner.d.ts +139 -0
- package/dist/view/layer/drape-planner.js +726 -0
- package/dist/view/layer/frame-render.d.ts +57 -0
- package/dist/view/layer/frame-render.js +209 -0
- package/dist/view/layer/frame-state.d.ts +147 -0
- package/dist/view/layer/frame-state.js +484 -0
- package/dist/view/layer/gl-state.d.ts +77 -0
- package/dist/view/layer/gl-state.js +132 -0
- package/dist/view/layer/index.d.ts +6 -0
- package/dist/view/layer/index.js +5 -0
- package/dist/view/layer/render-scope.d.ts +30 -0
- package/dist/view/layer/render-scope.js +28 -0
- package/dist/view/layer/render.d.ts +87 -0
- package/dist/view/layer/render.js +187 -0
- package/dist/view/layer/renderers.d.ts +81 -0
- package/dist/view/layer/renderers.js +142 -0
- package/dist/view/layer/slot-manager.d.ts +26 -0
- package/dist/view/layer/slot-manager.js +133 -0
- package/dist/view/layer/slots.d.ts +33 -0
- package/dist/view/layer/slots.js +50 -0
- package/dist/view/layer/store-retained-bbox.d.ts +36 -0
- package/dist/view/layer/store-retained-bbox.js +188 -0
- package/dist/view/layer/store-retained-chunk.d.ts +97 -0
- package/dist/view/layer/store-retained-chunk.js +94 -0
- package/dist/view/layer/store-retained-classify.d.ts +34 -0
- package/dist/view/layer/store-retained-classify.js +88 -0
- package/dist/view/layer/store-retained-collect.d.ts +24 -0
- package/dist/view/layer/store-retained-collect.js +121 -0
- package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
- package/dist/view/layer/store-retained-coord-patch.js +168 -0
- package/dist/view/layer/store-retained-immediate.d.ts +63 -0
- package/dist/view/layer/store-retained-immediate.js +49 -0
- package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
- package/dist/view/layer/store-retained-invalidation.js +192 -0
- package/dist/view/layer/store-retained.d.ts +198 -0
- package/dist/view/layer/store-retained.js +430 -0
- package/dist/view/layer/terrain-resolver.d.ts +1 -0
- package/dist/view/layer/terrain-resolver.js +174 -0
- package/dist/view/renderers/batch-manager.d.ts +61 -0
- package/dist/view/renderers/batch-manager.js +718 -0
- package/dist/view/renderers/draw-factors.d.ts +60 -0
- package/dist/view/renderers/draw-factors.js +35 -0
- package/dist/view/renderers/drawer.d.ts +1 -0
- package/dist/view/renderers/drawer.js +346 -0
- package/dist/view/renderers/image.d.ts +1 -0
- package/dist/view/renderers/image.js +255 -0
- package/dist/view/renderers/line/dash.d.ts +31 -0
- package/dist/view/renderers/line/dash.js +152 -0
- package/dist/view/renderers/line/line-geometry.d.ts +39 -0
- package/dist/view/renderers/line/line-geometry.js +460 -0
- package/dist/view/renderers/line/line-gl.d.ts +1 -0
- package/dist/view/renderers/line/line-gl.js +236 -0
- package/dist/view/renderers/line/line-shader.d.ts +1 -0
- package/dist/view/renderers/line/line-shader.js +364 -0
- package/dist/view/renderers/line/line-types.d.ts +43 -0
- package/dist/view/renderers/line/line-types.js +3 -0
- package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
- package/dist/view/renderers/line/line-uniforms.js +390 -0
- package/dist/view/renderers/line/sdf-line.d.ts +92 -0
- package/dist/view/renderers/line/sdf-line.js +567 -0
- package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
- package/dist/view/renderers/point/billboard-depth.js +56 -0
- package/dist/view/renderers/point/point-instance.d.ts +124 -0
- package/dist/view/renderers/point/point-instance.js +738 -0
- package/dist/view/renderers/point/point-sdf.d.ts +58 -0
- package/dist/view/renderers/point/point-sdf.js +170 -0
- package/dist/view/renderers/point/point-shape.d.ts +99 -0
- package/dist/view/renderers/point/point-shape.js +504 -0
- package/dist/view/renderers/point/point-style.d.ts +1 -0
- package/dist/view/renderers/point/point-style.js +46 -0
- package/dist/view/renderers/polygon/batch.d.ts +26 -0
- package/dist/view/renderers/polygon/batch.js +336 -0
- package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
- package/dist/view/renderers/polygon/earcut-input.js +55 -0
- package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
- package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
- package/dist/view/renderers/polygon/fill.d.ts +74 -0
- package/dist/view/renderers/polygon/fill.js +251 -0
- package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
- package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
- package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
- package/dist/view/renderers/polygon/terrain-cull.js +14 -0
- package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
- package/dist/view/renderers/polygon/triangulator.js +3 -0
- package/dist/view/renderers/retained.d.ts +43 -0
- package/dist/view/renderers/retained.js +3 -0
- package/dist/view/renderers/stroke.d.ts +121 -0
- package/dist/view/renderers/stroke.js +621 -0
- package/dist/view/shaders/frame.d.ts +8 -0
- package/dist/view/shaders/frame.js +37 -0
- package/dist/view/shaders/helpers.d.ts +238 -0
- package/dist/view/shaders/helpers.js +611 -0
- package/dist/view/shaders/initializer.d.ts +27 -0
- package/dist/view/shaders/initializer.js +125 -0
- package/dist/view/shaders/projection.d.ts +123 -0
- package/dist/view/shaders/projection.js +299 -0
- package/dist/view/shaders/quad-grid.d.ts +77 -0
- package/dist/view/shaders/quad-grid.js +128 -0
- package/dist/view/shaders/quad.d.ts +189 -0
- package/dist/view/shaders/quad.js +582 -0
- package/dist/view/shaders/retained-origin.d.ts +50 -0
- package/dist/view/shaders/retained-origin.js +67 -0
- package/dist/view/shaders/terrain-shade.d.ts +23 -0
- package/dist/view/shaders/terrain-shade.js +93 -0
- package/dist/view/style-rule.d.ts +166 -0
- package/dist/view/style-rule.js +300 -0
- package/dist/view/terrain/anchor.d.ts +135 -0
- package/dist/view/terrain/anchor.js +226 -0
- package/dist/view/terrain/context.d.ts +132 -0
- package/dist/view/terrain/context.js +437 -0
- package/dist/view/terrain/dem-atlas.d.ts +97 -0
- package/dist/view/terrain/dem-atlas.js +534 -0
- package/dist/view/terrain/detect.d.ts +126 -0
- package/dist/view/terrain/detect.js +198 -0
- package/dist/view/terrain/drape/bin-store.d.ts +179 -0
- package/dist/view/terrain/drape/bin-store.js +529 -0
- package/dist/view/terrain/drape/binning.d.ts +259 -0
- package/dist/view/terrain/drape/binning.js +604 -0
- package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
- package/dist/view/terrain/drape/edge-constrain.js +175 -0
- package/dist/view/terrain/drape/geometry.d.ts +95 -0
- package/dist/view/terrain/drape/geometry.js +260 -0
- package/dist/view/terrain/drape/mesh.d.ts +50 -0
- package/dist/view/terrain/drape/mesh.js +86 -0
- package/dist/view/terrain/drape/pass.d.ts +122 -0
- package/dist/view/terrain/drape/pass.js +379 -0
- package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
- package/dist/view/terrain/drape/quad-glyphs.js +117 -0
- package/dist/view/terrain/drape/quad.d.ts +249 -0
- package/dist/view/terrain/drape/quad.js +835 -0
- package/dist/view/terrain/drape/renderer.d.ts +184 -0
- package/dist/view/terrain/drape/renderer.js +706 -0
- package/dist/view/terrain/drape/shared.d.ts +80 -0
- package/dist/view/terrain/drape/shared.js +173 -0
- package/dist/view/terrain/drape/stitch.d.ts +155 -0
- package/dist/view/terrain/drape/stitch.js +228 -0
- package/dist/view/terrain/ground.d.ts +72 -0
- package/dist/view/terrain/ground.js +151 -0
- package/dist/view/terrain/metrics.d.ts +180 -0
- package/dist/view/terrain/metrics.js +231 -0
- package/dist/view/terrain/occlusion.d.ts +11 -0
- package/dist/view/terrain/occlusion.js +129 -0
- package/dist/view/terrain/polygon.d.ts +86 -0
- package/dist/view/terrain/polygon.js +301 -0
- package/dist/view/terrain/shade.d.ts +48 -0
- package/dist/view/terrain/shade.js +45 -0
- package/dist/view/terrain/state.d.ts +99 -0
- package/dist/view/terrain/state.js +186 -0
- package/dist/view/terrain/tessellation.d.ts +265 -0
- package/dist/view/terrain/tessellation.js +924 -0
- package/dist/view/terrain/tiling.d.ts +56 -0
- package/dist/view/terrain/tiling.js +155 -0
- package/dist/view/terrain/upstream-terrain.d.ts +82 -0
- package/dist/view/terrain/upstream-terrain.js +116 -0
- package/dist/view/ui/auxiliary-handles.d.ts +151 -0
- package/dist/view/ui/auxiliary-handles.js +22 -0
- package/dist/view/ui/bounds.d.ts +53 -0
- package/dist/view/ui/bounds.js +149 -0
- package/dist/view/ui/box-selection.d.ts +1 -0
- package/dist/view/ui/box-selection.js +83 -0
- package/dist/view/ui/handle-test.d.ts +1 -0
- package/dist/view/ui/handle-test.js +437 -0
- package/dist/view/ui/handle-thinning.d.ts +122 -0
- package/dist/view/ui/handle-thinning.js +430 -0
- package/dist/view/ui/handles.d.ts +25 -0
- package/dist/view/ui/handles.js +673 -0
- package/dist/view/ui/helper.d.ts +19 -0
- package/dist/view/ui/helper.js +76 -0
- package/dist/view/ui/index.d.ts +15 -0
- package/dist/view/ui/index.js +15 -0
- package/dist/view/ui/selection-scope.d.ts +25 -0
- package/dist/view/ui/selection-scope.js +34 -0
- package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
- package/dist/view/ui/selection-ui/bounding-box.js +240 -0
- package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
- package/dist/view/ui/selection-ui/extension-registry.js +78 -0
- package/dist/view/ui/selection-ui/index.d.ts +12 -0
- package/dist/view/ui/selection-ui/index.js +12 -0
- package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
- package/dist/view/ui/selection-ui/renderer.js +227 -0
- package/dist/view/ui/selection-ui/types.d.ts +55 -0
- package/dist/view/ui/selection-ui/types.js +3 -0
- package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
- package/dist/view/ui/selection-ui-drawer.js +329 -0
- package/dist/view/ui/tentative.d.ts +1 -0
- package/dist/view/ui/tentative.js +320 -0
- package/dist/view/viewport.d.ts +119 -0
- package/dist/view/viewport.js +254 -0
- package/package.json +113 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { isInteractionBlocked } from '../../store/lock.js';
|
|
4
|
+
import { getSelectedFeatureIds } from '../../view/ui/helper.js';
|
|
5
|
+
import { resolveAuxiliaryDrag } from './drag/auxiliary.js';
|
|
6
|
+
import { IntermediateWrites } from './drag/intermediate-writes.js';
|
|
7
|
+
import { startMoveDrag } from './drag/move.js';
|
|
8
|
+
import { startRadiusDrag } from './drag/radius.js';
|
|
9
|
+
import { startResizeDrag, startRotateDrag } from './drag/transform.js';
|
|
10
|
+
import { startMidpointDrag, startVertexDrag } from './drag/vertex.js';
|
|
11
|
+
/**
|
|
12
|
+
* SelectModeDragHandler
|
|
13
|
+
*
|
|
14
|
+
* Responsible for starting, forwarding and ending the drag operations of select mode
|
|
15
|
+
*
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export class SelectModeDragHandler {
|
|
19
|
+
constructor() {
|
|
20
|
+
/** The running drag operation */
|
|
21
|
+
Object.defineProperty(this, "operation", {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
configurable: true,
|
|
24
|
+
writable: true,
|
|
25
|
+
value: null
|
|
26
|
+
});
|
|
27
|
+
/** The intermediate writes of the running drag, committed or aborted when it ends */
|
|
28
|
+
Object.defineProperty(this, "writes", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true,
|
|
32
|
+
value: new IntermediateWrites()
|
|
33
|
+
});
|
|
34
|
+
/**
|
|
35
|
+
* The features announced by drag:start, while drag:end has not been sent for them
|
|
36
|
+
*
|
|
37
|
+
* drag:end always follows, with the same IDs, whether the drag is committed or aborted, so a
|
|
38
|
+
* plugin that opens a scope on drag:start always closes it.
|
|
39
|
+
*/
|
|
40
|
+
Object.defineProperty(this, "hookedFeatureIds", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
configurable: true,
|
|
43
|
+
writable: true,
|
|
44
|
+
value: null
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(this, "hookPluginManager", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
configurable: true,
|
|
49
|
+
writable: true,
|
|
50
|
+
value: null
|
|
51
|
+
});
|
|
52
|
+
/**
|
|
53
|
+
* The selection scope of the draw instance the current drag belongs to (the resize and
|
|
54
|
+
* rotate strategies of custom types, and the auxiliary handle providers). Set by startDrag
|
|
55
|
+
*/
|
|
56
|
+
Object.defineProperty(this, "scope", {
|
|
57
|
+
enumerable: true,
|
|
58
|
+
configurable: true,
|
|
59
|
+
writable: true,
|
|
60
|
+
value: null
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Start a drag operation
|
|
65
|
+
*/
|
|
66
|
+
startDrag(hitResult, event, context, bbox) {
|
|
67
|
+
const { store, pluginManager } = context;
|
|
68
|
+
this.scope = context.selectionScope;
|
|
69
|
+
// Selection-independent auxiliary handles (getGlobalHandles) have no feature they sit on,
|
|
70
|
+
// so they cannot pass the selection-bound gates (existence of a selection / bbox / feature
|
|
71
|
+
// lock). Instead, the decision is made only from the map-wide suppressions (readOnly /
|
|
72
|
+
// interaction lock). As with auxiliary handles on a selection, if delegation is refused
|
|
73
|
+
// nothing is started (dragPan is not stopped either).
|
|
74
|
+
if (hitResult.type === 'auxiliary' && hitResult.auxiliary?.global) {
|
|
75
|
+
if (store.isReadOnly() || store.isInteractionLocked())
|
|
76
|
+
return;
|
|
77
|
+
const globalDrag = resolveAuxiliaryDrag(hitResult, event, this.scope);
|
|
78
|
+
if (!globalDrag)
|
|
79
|
+
return;
|
|
80
|
+
context.map.dragPan.disable();
|
|
81
|
+
this.writes.discard(store);
|
|
82
|
+
this.operation = globalDrag;
|
|
83
|
+
store.setDragState({ operation: 'auxiliary' });
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Group / layer selections are also resolved to their member features (so that a group is
|
|
87
|
+
// moved / resized / rotated as one).
|
|
88
|
+
const selectedIds = getSelectedFeatureIds(store);
|
|
89
|
+
const selectedFeatures = selectedIds
|
|
90
|
+
.map((id) => store.getFeature(id))
|
|
91
|
+
.filter((f) => f !== undefined);
|
|
92
|
+
if (selectedFeatures.length === 0 || !bbox) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Do not start a drag operation while editing interaction is suppressed
|
|
96
|
+
// (selection is allowed, only operations are forbidden). There are 3 suppression conditions:
|
|
97
|
+
// - readOnly: writes are no-ops, so move/resize/rotate/vertex are not started
|
|
98
|
+
// - interaction lock: the all-feature operation suppression the application applies, for
|
|
99
|
+
// example in a read-only state
|
|
100
|
+
// - feature locked: the individual lock on that feature (itself / its group / its layer)
|
|
101
|
+
if (selectedFeatures.some((f) => isInteractionBlocked(f, store))) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
// Core attaches no meaning to auxiliary handles, so first ask the provider whether it
|
|
105
|
+
// accepts the delegation. If it refuses, core starts nothing (dragPan is not stopped either
|
|
106
|
+
// = the same as not having grabbed anything). Because the gates above have been passed,
|
|
107
|
+
// this point is not reached while readOnly / interaction lock / feature lock is in effect.
|
|
108
|
+
let auxiliaryDrag = null;
|
|
109
|
+
if (hitResult.type === 'auxiliary') {
|
|
110
|
+
auxiliaryDrag = resolveAuxiliaryDrag(hitResult, event, this.scope);
|
|
111
|
+
if (!auxiliaryDrag)
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
// Notify plugins that the drag has started. Auxiliary handles are excluded: core writes no
|
|
115
|
+
// intermediate updates to the Store and the provider commits through its own transaction, so
|
|
116
|
+
// putting them on the editing scope of drag:start / drag:end would
|
|
117
|
+
// have the record of the commit transaction swallowed by that scope.
|
|
118
|
+
if (hitResult.type !== 'auxiliary') {
|
|
119
|
+
pluginManager?.runHook('drag:start', { featureIds: [...selectedIds] }, { source: 'local' });
|
|
120
|
+
this.hookedFeatureIds = [...selectedIds];
|
|
121
|
+
this.hookPluginManager = pluginManager ?? null;
|
|
122
|
+
}
|
|
123
|
+
// Disable MapLibre's map dragging
|
|
124
|
+
context.map.dragPan.disable();
|
|
125
|
+
// Make sure no record from the previous drag remains (normally emptied by the reset in
|
|
126
|
+
// endDrag)
|
|
127
|
+
this.writes.discard(store);
|
|
128
|
+
switch (hitResult.type) {
|
|
129
|
+
case 'move':
|
|
130
|
+
this.begin(startMoveDrag(event, [...selectedIds], store));
|
|
131
|
+
// Record the features being moved. Snapping excludes them from its candidates (snapping
|
|
132
|
+
// to itself pulls the cursor back, shifting by the grab offset and making it look like
|
|
133
|
+
// it vibrates)
|
|
134
|
+
store.setDragState({ operation: 'move', movingFeatureIds: [...selectedIds] });
|
|
135
|
+
break;
|
|
136
|
+
case 'resize':
|
|
137
|
+
this.begin(startResizeDrag(event, hitResult.handle, bbox, selectedFeatures, context.map, this.scope));
|
|
138
|
+
store.setDragState({ operation: 'resize' });
|
|
139
|
+
break;
|
|
140
|
+
case 'rotate':
|
|
141
|
+
this.begin(startRotateDrag(event, bbox, selectedFeatures, store, this.scope));
|
|
142
|
+
break;
|
|
143
|
+
case 'vertex':
|
|
144
|
+
this.begin(startVertexDrag(event, hitResult.featureId, hitResult.vertexRef, context));
|
|
145
|
+
break;
|
|
146
|
+
case 'midpoint':
|
|
147
|
+
this.begin(startMidpointDrag(event, hitResult.featureId, hitResult.vertexRef, store));
|
|
148
|
+
// For midpoint, the newly added vertex is afterIndex + 1 in the same part and same ring
|
|
149
|
+
store.setDragState({
|
|
150
|
+
operation: 'midpoint',
|
|
151
|
+
activeVertex: {
|
|
152
|
+
...hitResult.vertexRef,
|
|
153
|
+
index: hitResult.vertexRef.index + 1,
|
|
154
|
+
},
|
|
155
|
+
activeFeatureId: hitResult.featureId,
|
|
156
|
+
});
|
|
157
|
+
break;
|
|
158
|
+
case 'radius':
|
|
159
|
+
this.begin(startRadiusDrag(hitResult.featureId, store));
|
|
160
|
+
store.setDragState({ operation: 'radius' });
|
|
161
|
+
break;
|
|
162
|
+
case 'auxiliary':
|
|
163
|
+
// Delegation is already done above (we only get here when it was accepted)
|
|
164
|
+
this.begin(auxiliaryDrag);
|
|
165
|
+
store.setDragState({ operation: 'auxiliary' });
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Make a started operation the running one. An operation that could not start (its feature
|
|
171
|
+
* or vertex is gone) leaves the handler as it was
|
|
172
|
+
*/
|
|
173
|
+
begin(operation) {
|
|
174
|
+
if (operation)
|
|
175
|
+
this.operation = operation;
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Update during a drag
|
|
179
|
+
* Note: re-rendering is triggered automatically by RenderCoordinator subscribing to Store
|
|
180
|
+
* changes
|
|
181
|
+
*/
|
|
182
|
+
updateDrag(event, context) {
|
|
183
|
+
const { store } = context;
|
|
184
|
+
// One frame of a drag is one change: the updates of every feature it moves reach the
|
|
185
|
+
// subscribers in a single notification
|
|
186
|
+
store.transact(() => this.operation?.update(event, store, this.writes));
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* End the drag operation
|
|
190
|
+
*
|
|
191
|
+
* @param event The drag end event (passed to the auxiliary handle's delegate. When omitted,
|
|
192
|
+
* the last move / start event that was forwarded is used)
|
|
193
|
+
*/
|
|
194
|
+
endDrag(context, event) {
|
|
195
|
+
const { store, pluginManager } = context;
|
|
196
|
+
const wasAuxiliary = this.operation?.type === 'auxiliary';
|
|
197
|
+
// The drag always ends: whatever the delegate, the commit or a plugin throws, map dragging
|
|
198
|
+
// is re-enabled and the drag state is cleared, so that the UI never stays stuck in a drag.
|
|
199
|
+
try {
|
|
200
|
+
// Tell a delegate that the drag has ended (for an auxiliary handle core has written
|
|
201
|
+
// nothing to the Store)
|
|
202
|
+
this.operation?.finish?.(event);
|
|
203
|
+
// Commit the intermediate updates made during the drag in a single transaction before
|
|
204
|
+
// notifying drag:end (plugins see the state after the commit). If no feature was touched,
|
|
205
|
+
// do nothing.
|
|
206
|
+
this.writes.commit(store);
|
|
207
|
+
// Notify plugins that the drag has ended (paired with drag:start, with the same IDs even
|
|
208
|
+
// when the selection changed during the drag; auxiliary handles are excluded)
|
|
209
|
+
if (!wasAuxiliary)
|
|
210
|
+
this.endDragHook(pluginManager);
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
// Re-enable MapLibre's map dragging
|
|
214
|
+
context.map.dragPan.enable();
|
|
215
|
+
// Clear the drag state
|
|
216
|
+
store.setDragState(null);
|
|
217
|
+
this.reset(store);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Reset the state
|
|
222
|
+
*
|
|
223
|
+
* @param store When passed, the highlight of the following vertices (UI state) is cleared as
|
|
224
|
+
* well. The cleanup is the same whether the drag was committed or aborted.
|
|
225
|
+
*/
|
|
226
|
+
reset(store) {
|
|
227
|
+
// Even on an abort (mode switch / a change from outside), end is delivered to the delegate
|
|
228
|
+
// exactly once. When coming through endDrag it has already been delivered, so nothing
|
|
229
|
+
// happens here.
|
|
230
|
+
this.operation?.finish?.();
|
|
231
|
+
this.operation = null;
|
|
232
|
+
this.writes.discard(store);
|
|
233
|
+
store?.setFollowedVertices?.(null);
|
|
234
|
+
// An aborted drag still closes what drag:start opened (after the features are restored)
|
|
235
|
+
this.endDragHook(this.hookPluginManager ?? undefined);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Sends the drag:end that pairs with the drag:start of the current drag, once
|
|
239
|
+
*/
|
|
240
|
+
endDragHook(pluginManager) {
|
|
241
|
+
const featureIds = this.hookedFeatureIds;
|
|
242
|
+
this.hookedFeatureIds = null;
|
|
243
|
+
this.hookPluginManager = null;
|
|
244
|
+
if (!featureIds)
|
|
245
|
+
return;
|
|
246
|
+
pluginManager?.runHook('drag:end', { featureIds }, { source: 'local' });
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Whether a drag operation is active
|
|
250
|
+
*/
|
|
251
|
+
isActive() {
|
|
252
|
+
return this.operation !== null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared hit test helpers for SelectMode
|
|
3
|
+
*
|
|
4
|
+
* Provides "building the callback that obtains the additional resize handles for a custom
|
|
5
|
+
* feature" and "building the callback that enumerates the auxiliary handles provided by an
|
|
6
|
+
* extension implementation", both used in common by onMouseDown / onMouseMove / onDragStart.
|
|
7
|
+
* There are 2 kinds of auxiliary handles: those bound to the selected feature (getHandles) and
|
|
8
|
+
* those independent of the selection (getGlobalHandles).
|
|
9
|
+
*/
|
|
10
|
+
import type { Feature } from '../../store/types.js';
|
|
11
|
+
import type { AuxiliaryHandlesCallback } from '../../view/ui/handle-test.js';
|
|
12
|
+
import type { HandleInfo } from '../../view/ui/handles.js';
|
|
13
|
+
import type { SelectionScope } from '../../view/ui/selection-scope.js';
|
|
14
|
+
import type { BoundingBoxCoords } from '../../view/ui/selection-ui/index.js';
|
|
15
|
+
/**
|
|
16
|
+
* Obtain the callback that computes the additional resize handles of a custom feature.
|
|
17
|
+
*
|
|
18
|
+
* The additional handles are obtained from the custom feature handler only for a single
|
|
19
|
+
* selection. The callback is uniformly shaped to receive the bbox after the margin is applied.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getAdditionalResizeHandlesCallback(features: Feature[], scope: SelectionScope): ((marginedBbox: BoundingBoxCoords) => HandleInfo[]) | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Obtain the callback that enumerates the auxiliary handles provided by extension
|
|
24
|
+
* implementations.
|
|
25
|
+
*
|
|
26
|
+
* Every provider registered in this draw instance is gathered, only for a single selection (the same restriction as
|
|
27
|
+
* for the additional resize handles). When not a single provider is registered, undefined is
|
|
28
|
+
* returned and the caller does not perform the auxiliary handle test at all (it takes the
|
|
29
|
+
* conventional path).
|
|
30
|
+
*/
|
|
31
|
+
export declare function getAuxiliaryHandlesCallback(features: Feature[], scope: SelectionScope): AuxiliaryHandlesCallback | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Obtain the callback that enumerates the "selection-independent auxiliary handles" provided by
|
|
34
|
+
* extension implementations.
|
|
35
|
+
*
|
|
36
|
+
* It takes no argument because it does not care whether there is a selection. When not a single
|
|
37
|
+
* provider implements getGlobalHandles, undefined is returned and the caller does not perform
|
|
38
|
+
* the test at all (it takes the conventional path).
|
|
39
|
+
*/
|
|
40
|
+
export declare function getGlobalAuxiliaryHandlesCallback(scope: SelectionScope): AuxiliaryHandlesCallback | undefined;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Obtain the callback that computes the additional resize handles of a custom feature.
|
|
5
|
+
*
|
|
6
|
+
* The additional handles are obtained from the custom feature handler only for a single
|
|
7
|
+
* selection. The callback is uniformly shaped to receive the bbox after the margin is applied.
|
|
8
|
+
*/
|
|
9
|
+
export function getAdditionalResizeHandlesCallback(features, scope) {
|
|
10
|
+
if (features.length !== 1)
|
|
11
|
+
return undefined;
|
|
12
|
+
const feature = features[0];
|
|
13
|
+
const calculator = scope.extensions.getAdditionalResizeHandlesCalculator(feature.type);
|
|
14
|
+
if (!calculator)
|
|
15
|
+
return undefined;
|
|
16
|
+
return (marginedBbox) => calculator(feature, marginedBbox);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Obtain the callback that enumerates the auxiliary handles provided by extension
|
|
20
|
+
* implementations.
|
|
21
|
+
*
|
|
22
|
+
* Every provider registered in this draw instance is gathered, only for a single selection (the same restriction as
|
|
23
|
+
* for the additional resize handles). When not a single provider is registered, undefined is
|
|
24
|
+
* returned and the caller does not perform the auxiliary handle test at all (it takes the
|
|
25
|
+
* conventional path).
|
|
26
|
+
*/
|
|
27
|
+
export function getAuxiliaryHandlesCallback(features, scope) {
|
|
28
|
+
if (features.length !== 1)
|
|
29
|
+
return undefined;
|
|
30
|
+
const providers = scope.auxiliaryHandles.list();
|
|
31
|
+
if (providers.length === 0)
|
|
32
|
+
return undefined;
|
|
33
|
+
const feature = features[0];
|
|
34
|
+
return (context) => providers.flatMap((provider) => provider.getHandles(feature, context).map((handle) => ({ providerId: provider.id, handle })));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Obtain the callback that enumerates the "selection-independent auxiliary handles" provided by
|
|
38
|
+
* extension implementations.
|
|
39
|
+
*
|
|
40
|
+
* It takes no argument because it does not care whether there is a selection. When not a single
|
|
41
|
+
* provider implements getGlobalHandles, undefined is returned and the caller does not perform
|
|
42
|
+
* the test at all (it takes the conventional path).
|
|
43
|
+
*/
|
|
44
|
+
export function getGlobalAuxiliaryHandlesCallback(scope) {
|
|
45
|
+
const providers = scope.auxiliaryHandles.list().filter((p) => p.getGlobalHandles !== undefined);
|
|
46
|
+
if (providers.length === 0)
|
|
47
|
+
return undefined;
|
|
48
|
+
return (context) => providers.flatMap((provider) => provider
|
|
49
|
+
.getGlobalHandles?.(context)
|
|
50
|
+
.map((handle) => ({ providerId: provider.id, handle })) ?? []);
|
|
51
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|