@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,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Move drag: translates the selected features by the pointer offset
|
|
3
|
+
*/
|
|
4
|
+
import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
|
|
5
|
+
import type { FeatureCoordinates } from '../../../store/types.js';
|
|
6
|
+
import type { DragStore } from './operation.js';
|
|
7
|
+
/**
|
|
8
|
+
* State of a move operation
|
|
9
|
+
*/
|
|
10
|
+
export interface MoveState {
|
|
11
|
+
/** Coordinate at the start of the drag */
|
|
12
|
+
startLngLat: {
|
|
13
|
+
lng: number;
|
|
14
|
+
lat: number;
|
|
15
|
+
};
|
|
16
|
+
/** IDs of the features being dragged */
|
|
17
|
+
featureIds: string[];
|
|
18
|
+
/** Feature coordinates at the start */
|
|
19
|
+
initialCoordinates: Map<string, FeatureCoordinates>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Start a move drag of the given features
|
|
23
|
+
*/
|
|
24
|
+
export declare function startMoveDrag(event: DragNormalizedEvent, featureIds: string[], store: DragStore): MoveDrag;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { mapCoordinatesDeep } from '../../../shared/utils/coordinates.js';
|
|
4
|
+
import { dragStartLngLat } from './operation.js';
|
|
5
|
+
/**
|
|
6
|
+
* Translate coordinates
|
|
7
|
+
*
|
|
8
|
+
* Because it uses a shared traversal that does not depend on nesting depth, Multi geometries
|
|
9
|
+
* (MultiPolygon nests 4 levels deep) can be moved as-is.
|
|
10
|
+
*/
|
|
11
|
+
function translateCoordinates(coords, dx, dy) {
|
|
12
|
+
return mapCoordinatesDeep(coords, (coord) => [coord[0] + dx, coord[1] + dy]);
|
|
13
|
+
}
|
|
14
|
+
/** @internal */
|
|
15
|
+
export class MoveDrag {
|
|
16
|
+
constructor(state) {
|
|
17
|
+
Object.defineProperty(this, "state", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: state
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(this, "type", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: 'move'
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
update(event, store, writes) {
|
|
31
|
+
const dx = event.lngLat.lng - this.state.startLngLat.lng;
|
|
32
|
+
const dy = event.lngLat.lat - this.state.startLngLat.lat;
|
|
33
|
+
for (const id of this.state.featureIds) {
|
|
34
|
+
const feature = store.getFeature(id);
|
|
35
|
+
const initialCoords = this.state.initialCoordinates.get(id);
|
|
36
|
+
if (feature && initialCoords) {
|
|
37
|
+
const newCoords = translateCoordinates(initialCoords, dx, dy);
|
|
38
|
+
writes.write(store, id, { coordinates: newCoords });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Start a move drag of the given features
|
|
45
|
+
*/
|
|
46
|
+
export function startMoveDrag(event, featureIds, store) {
|
|
47
|
+
const initialCoordinates = new Map();
|
|
48
|
+
for (const id of featureIds) {
|
|
49
|
+
const feature = store.getFeature(id);
|
|
50
|
+
if (feature) {
|
|
51
|
+
initialCoordinates.set(id, JSON.parse(JSON.stringify(feature.coordinates)));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return new MoveDrag({
|
|
55
|
+
startLngLat: dragStartLngLat(event),
|
|
56
|
+
featureIds: [...featureIds],
|
|
57
|
+
initialCoordinates,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shape shared by the drag operations of select mode
|
|
3
|
+
*
|
|
4
|
+
* Each kind of drag (move, resize, rotate, vertex, midpoint, radius, auxiliary handle) is one
|
|
5
|
+
* DragOperation. SelectModeDragHandler decides which kind a drag is, starts it, and forwards
|
|
6
|
+
* every frame to it. The operation computes the new values and writes them through
|
|
7
|
+
* IntermediateWrites, which keeps what a commit or an abort needs.
|
|
8
|
+
*/
|
|
9
|
+
import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
|
|
10
|
+
import type { Feature } from '../../../store/types.js';
|
|
11
|
+
import type { ModeContext } from '../../handler.js';
|
|
12
|
+
/** The Store a drag writes to */
|
|
13
|
+
export type DragStore = ModeContext['store'];
|
|
14
|
+
/**
|
|
15
|
+
* The selection scope of the draw instance the drag belongs to (the resize and rotate
|
|
16
|
+
* strategies of custom types, and the auxiliary handle providers). Null before a drag starts
|
|
17
|
+
*/
|
|
18
|
+
export type DragScope = ModeContext['selectionScope'] | null;
|
|
19
|
+
/**
|
|
20
|
+
* The drag start position (the exact position before the 3-pixel movement)
|
|
21
|
+
*/
|
|
22
|
+
export declare function dragStartLngLat(event: DragNormalizedEvent): {
|
|
23
|
+
lng: number;
|
|
24
|
+
lat: number;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* The selected features, with group / layer selections resolved to their member features
|
|
28
|
+
* (so that a group is moved / resized / rotated as one)
|
|
29
|
+
*/
|
|
30
|
+
export declare function selectedFeaturesOf(store: DragStore): Feature[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { getSelectedFeatureIds } from '../../../view/ui/helper.js';
|
|
4
|
+
/**
|
|
5
|
+
* The drag start position (the exact position before the 3-pixel movement)
|
|
6
|
+
*/
|
|
7
|
+
export function dragStartLngLat(event) {
|
|
8
|
+
return event.dragStartLngLat ?? event.lngLat;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* The selected features, with group / layer selections resolved to their member features
|
|
12
|
+
* (so that a group is moved / resized / rotated as one)
|
|
13
|
+
*/
|
|
14
|
+
export function selectedFeaturesOf(store) {
|
|
15
|
+
return getSelectedFeatureIds(store)
|
|
16
|
+
.map((id) => store.getFeature(id))
|
|
17
|
+
.filter((f) => f !== undefined);
|
|
18
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Coordinate } from '../../../store/types.js';
|
|
2
|
+
import type { DragStore } from './operation.js';
|
|
3
|
+
/**
|
|
4
|
+
* State of a Circle radius change operation
|
|
5
|
+
*/
|
|
6
|
+
export interface RadiusState {
|
|
7
|
+
/** ID of the feature being operated on */
|
|
8
|
+
featureId: string;
|
|
9
|
+
/** Center coordinate of the circle */
|
|
10
|
+
center: Coordinate;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Start a radius drag. Returns null when the feature is not a Circle
|
|
14
|
+
*/
|
|
15
|
+
export declare function startRadiusDrag(featureId: string, store: DragStore): RadiusDrag | null;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { haversineDistanceMeters, initialBearingDegrees } from '../../../geometry/index.js';
|
|
4
|
+
/** @internal */
|
|
5
|
+
export class RadiusDrag {
|
|
6
|
+
constructor(state) {
|
|
7
|
+
Object.defineProperty(this, "state", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
configurable: true,
|
|
10
|
+
writable: true,
|
|
11
|
+
value: state
|
|
12
|
+
});
|
|
13
|
+
Object.defineProperty(this, "type", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true,
|
|
17
|
+
value: 'radius'
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
update(event, store, writes) {
|
|
21
|
+
const feature = store.getFeature(this.state.featureId);
|
|
22
|
+
if (feature?.type !== 'Circle')
|
|
23
|
+
return;
|
|
24
|
+
const { center } = this.state;
|
|
25
|
+
const mousePoint = [event.lngLat.lng, event.lngLat.lat];
|
|
26
|
+
// Take the distance between the mouse position and the center as the new radius
|
|
27
|
+
const newRadiusMeters = haversineDistanceMeters(center, mousePoint);
|
|
28
|
+
// The great-circle bearing of the radius change handle. The handle is placed with
|
|
29
|
+
// destinationPoint, the inverse of this bearing, so it stays under the pointer
|
|
30
|
+
const newAngle = initialBearingDegrees(center, mousePoint);
|
|
31
|
+
const updates = {
|
|
32
|
+
properties: {
|
|
33
|
+
...feature.properties,
|
|
34
|
+
radiusMeters: newRadiusMeters,
|
|
35
|
+
radiusHandleAngle: newAngle,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
writes.write(store, this.state.featureId, updates);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Start a radius drag. Returns null when the feature is not a Circle
|
|
43
|
+
*/
|
|
44
|
+
export function startRadiusDrag(featureId, store) {
|
|
45
|
+
const feature = store.getFeature(featureId);
|
|
46
|
+
if (feature?.type !== 'Circle')
|
|
47
|
+
return null;
|
|
48
|
+
return new RadiusDrag({ featureId, center: feature.coordinates });
|
|
49
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform drags: resize and rotate the selection with its bounding box handles
|
|
3
|
+
*/
|
|
4
|
+
import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
|
|
5
|
+
import type { HandleType } from '../../../shared/config/constants.js';
|
|
6
|
+
import type { Feature } from '../../../store/types.js';
|
|
7
|
+
import type { BoundingBoxCoords } from '../../../view/ui/selection-ui/index.js';
|
|
8
|
+
import type { ModeContext } from '../../handler.js';
|
|
9
|
+
import type { DragScope, DragStore } from './operation.js';
|
|
10
|
+
/**
|
|
11
|
+
* Start a resize drag from a bounding box handle
|
|
12
|
+
*/
|
|
13
|
+
export declare function startResizeDrag(event: DragNormalizedEvent, handle: HandleType, bbox: BoundingBoxCoords, features: Feature[], map: ModeContext['map'], scope: DragScope): ResizeDrag;
|
|
14
|
+
/**
|
|
15
|
+
* Start a rotate drag from the rotation handle, and set the DragState it draws from
|
|
16
|
+
*/
|
|
17
|
+
export declare function startRotateDrag(event: DragNormalizedEvent, bbox: BoundingBoxCoords, features: Feature[], store: DragStore, scope: DragScope): RotateDrag;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { computeResize, startResize } from '../../../operations/resize.js';
|
|
4
|
+
import { computeRotation, getRotationDelta, startRotation } from '../../../operations/rotate.js';
|
|
5
|
+
import { computeBoundingBox } from '../../../view/ui/selection-ui/index.js';
|
|
6
|
+
import { dragStartLngLat, selectedFeaturesOf } from './operation.js';
|
|
7
|
+
// === Resize operation ===
|
|
8
|
+
/** @internal */
|
|
9
|
+
export class ResizeDrag {
|
|
10
|
+
constructor(state, scope) {
|
|
11
|
+
Object.defineProperty(this, "state", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true,
|
|
15
|
+
value: state
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(this, "scope", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: scope
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(this, "type", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: 'resize'
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
update(event, store, writes) {
|
|
31
|
+
// Compute the resize for each feature
|
|
32
|
+
for (const feature of selectedFeaturesOf(store)) {
|
|
33
|
+
const resizeResults = computeResize(this.state, event.lngLat, [feature], this.scope?.extensions);
|
|
34
|
+
const result = resizeResults.get(feature.id);
|
|
35
|
+
if (result) {
|
|
36
|
+
const updates = { coordinates: result.coordinates };
|
|
37
|
+
// Update the scale property when there is one (Text, Image, etc.)
|
|
38
|
+
if (result.scale !== undefined) {
|
|
39
|
+
updates.properties = {
|
|
40
|
+
...feature.properties,
|
|
41
|
+
scale: result.scale,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// For a Circle, also update the radiusMeters property
|
|
45
|
+
if (result.radiusMeters !== undefined && feature.type === 'Circle') {
|
|
46
|
+
updates.properties = {
|
|
47
|
+
...feature.properties,
|
|
48
|
+
radiusMeters: result.radiusMeters,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
// For a custom resize, also update the width / height properties (Note, etc.)
|
|
52
|
+
if (result.width !== undefined || result.height !== undefined) {
|
|
53
|
+
updates.properties = {
|
|
54
|
+
...feature.properties,
|
|
55
|
+
...(result.width !== undefined && { width: result.width }),
|
|
56
|
+
...(result.height !== undefined && { height: result.height }),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
writes.write(store, feature.id, updates);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Start a resize drag from a bounding box handle
|
|
66
|
+
*/
|
|
67
|
+
export function startResizeDrag(event, handle, bbox, features, map, scope) {
|
|
68
|
+
// A box thinner than 1 pixel on screen is not stretched along that axis (converted into
|
|
69
|
+
// Web Mercator world units at the current zoom)
|
|
70
|
+
const zoom = map.getZoom?.();
|
|
71
|
+
const tileSize = scope?.extensions.getTileSize() ?? 512;
|
|
72
|
+
const minAxisExtent = Number.isFinite(zoom) ? 1 / (tileSize * 2 ** zoom) : 0;
|
|
73
|
+
const state = startResize(handle, dragStartLngLat(event), bbox, features, scope?.extensions, minAxisExtent);
|
|
74
|
+
return new ResizeDrag(state, scope);
|
|
75
|
+
}
|
|
76
|
+
// === Rotate operation ===
|
|
77
|
+
/** @internal */
|
|
78
|
+
export class RotateDrag {
|
|
79
|
+
constructor(state) {
|
|
80
|
+
Object.defineProperty(this, "state", {
|
|
81
|
+
enumerable: true,
|
|
82
|
+
configurable: true,
|
|
83
|
+
writable: true,
|
|
84
|
+
value: state
|
|
85
|
+
});
|
|
86
|
+
Object.defineProperty(this, "type", {
|
|
87
|
+
enumerable: true,
|
|
88
|
+
configurable: true,
|
|
89
|
+
writable: true,
|
|
90
|
+
value: 'rotate'
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
update(event, store, writes) {
|
|
94
|
+
const rotateResults = computeRotation(this.state, event.lngLat, selectedFeaturesOf(store));
|
|
95
|
+
for (const [id, result] of rotateResults) {
|
|
96
|
+
const feature = store.getFeature(id);
|
|
97
|
+
if (feature) {
|
|
98
|
+
const updates = { coordinates: result.coordinates };
|
|
99
|
+
// Update the rotation property when there is one (Text, Image, Note, etc.)
|
|
100
|
+
if (result.rotation !== undefined) {
|
|
101
|
+
updates.properties = {
|
|
102
|
+
...feature.properties,
|
|
103
|
+
rotation: result.rotation,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
writes.write(store, id, updates);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Update the rotation angle (for drawing the bbox during the rotation)
|
|
110
|
+
const currentAngle = getRotationDelta(this.state, event.lngLat);
|
|
111
|
+
const currentDragState = store.getDragState();
|
|
112
|
+
if (currentDragState?.rotateInfo) {
|
|
113
|
+
store.setDragState({
|
|
114
|
+
...currentDragState,
|
|
115
|
+
rotateInfo: {
|
|
116
|
+
...currentDragState.rotateInfo,
|
|
117
|
+
currentAngle,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Start a rotate drag from the rotation handle, and set the DragState it draws from
|
|
125
|
+
*/
|
|
126
|
+
export function startRotateDrag(event, bbox, features, store, scope) {
|
|
127
|
+
const drag = new RotateDrag(startRotation(dragStartLngLat(event), bbox, features, scope?.extensions));
|
|
128
|
+
// On a multiple selection, also save the initialBbox of each feature
|
|
129
|
+
let initialFeatureBboxes;
|
|
130
|
+
if (features.length > 1) {
|
|
131
|
+
initialFeatureBboxes = new Map();
|
|
132
|
+
for (const feature of features) {
|
|
133
|
+
const featureBbox = computeBoundingBox(feature, scope?.extensions);
|
|
134
|
+
if (featureBbox) {
|
|
135
|
+
initialFeatureBboxes.set(feature.id, featureBbox);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Save the bbox at the start of the rotation (for drawing the bbox during the rotation)
|
|
140
|
+
store.setDragState({
|
|
141
|
+
operation: 'rotate',
|
|
142
|
+
rotateInfo: {
|
|
143
|
+
initialBbox: {
|
|
144
|
+
topLeft: bbox.topLeft,
|
|
145
|
+
topRight: bbox.topRight,
|
|
146
|
+
bottomRight: bbox.bottomRight,
|
|
147
|
+
bottomLeft: bbox.bottomLeft,
|
|
148
|
+
center: bbox.center,
|
|
149
|
+
},
|
|
150
|
+
initialFeatureBboxes,
|
|
151
|
+
currentAngle: 0,
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
return drag;
|
|
155
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vertex drags: move vertices, and insert a vertex by dragging a midpoint
|
|
3
|
+
*/
|
|
4
|
+
import type { DragNormalizedEvent } from '../../../dispatcher/types.js';
|
|
5
|
+
import type { VertexRef } from '../../../store/types.js';
|
|
6
|
+
import type { ModeContext } from '../../handler.js';
|
|
7
|
+
import type { DragStore } from './operation.js';
|
|
8
|
+
/**
|
|
9
|
+
* Start a vertex drag, and set the DragState and the followed vertices it draws from. Returns
|
|
10
|
+
* null when the feature or the vertex is gone
|
|
11
|
+
*/
|
|
12
|
+
export declare function startVertexDrag(event: DragNormalizedEvent, featureId: string, vertexRef: VertexRef, context: ModeContext): VertexDrag | null;
|
|
13
|
+
/**
|
|
14
|
+
* Start a midpoint drag: insert a vertex at the midpoint and continue as a move of that
|
|
15
|
+
* vertex. Returns null when the feature is gone
|
|
16
|
+
*/
|
|
17
|
+
export declare function startMidpointDrag(event: DragNormalizedEvent, featureId: string, after: VertexRef, store: DragStore): VertexDrag | null;
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { collectSharedVertexMoves } from '../../../operations/shared-vertex.js';
|
|
4
|
+
import { addVertex, computeVertexMove, startVertexMove } from '../../../operations/vertex.js';
|
|
5
|
+
import { hasVertexRef } from '../../../shared/utils/vertex-ref.js';
|
|
6
|
+
import { dragStartLngLat } from './operation.js';
|
|
7
|
+
/**
|
|
8
|
+
* Whether the modifier key that temporarily disables shared-vertex following is held down
|
|
9
|
+
*
|
|
10
|
+
* The temporary-disable key is shared with snapping (options.snap.disableKey, 'alt' by default).
|
|
11
|
+
* Holding it down when starting a drag escapes to a solitary move for that one drag only.
|
|
12
|
+
*
|
|
13
|
+
* The decision looks only at the normalized modifier keys of the drag start event (core does not
|
|
14
|
+
* deal with raw DOM events). Pressing or releasing the key mid-drag does not change the set.
|
|
15
|
+
* When disableKey is 'none', no modifier-key-based temporary disabling is performed.
|
|
16
|
+
*/
|
|
17
|
+
function isSharedVertexDragSuppressed(event, context) {
|
|
18
|
+
const disableKey = context.snapOptions?.disableKey ?? 'alt';
|
|
19
|
+
if (disableKey === 'none')
|
|
20
|
+
return false;
|
|
21
|
+
return event.modifiers?.[disableKey] === true;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Reflect a vertex move state into the Store (an intermediate update during the drag; the
|
|
25
|
+
* spatial index follows the Store)
|
|
26
|
+
*/
|
|
27
|
+
function applyVertexMove(state, lngLat, store, writes) {
|
|
28
|
+
const feature = store.getFeature(state.featureId);
|
|
29
|
+
if (!feature)
|
|
30
|
+
return;
|
|
31
|
+
const newCoords = computeVertexMove(state, lngLat, feature);
|
|
32
|
+
writes.write(store, state.featureId, { coordinates: newCoords });
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A vertex move. A midpoint drag continues as a vertex move of the vertex it added, and is
|
|
36
|
+
* handled the same way
|
|
37
|
+
*
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export class VertexDrag {
|
|
41
|
+
constructor(type, state,
|
|
42
|
+
/**
|
|
43
|
+
* Vertex move states of the other features that follow along during a shared-vertex move
|
|
44
|
+
*
|
|
45
|
+
* Determined at the start of a vertex drag, only when options.topology.sharedVertexDrag is
|
|
46
|
+
* enabled. It is not re-searched during the drag (to avoid interfering with other features
|
|
47
|
+
* such as snapping).
|
|
48
|
+
*/
|
|
49
|
+
followers = []) {
|
|
50
|
+
Object.defineProperty(this, "type", {
|
|
51
|
+
enumerable: true,
|
|
52
|
+
configurable: true,
|
|
53
|
+
writable: true,
|
|
54
|
+
value: type
|
|
55
|
+
});
|
|
56
|
+
Object.defineProperty(this, "state", {
|
|
57
|
+
enumerable: true,
|
|
58
|
+
configurable: true,
|
|
59
|
+
writable: true,
|
|
60
|
+
value: state
|
|
61
|
+
});
|
|
62
|
+
Object.defineProperty(this, "followers", {
|
|
63
|
+
enumerable: true,
|
|
64
|
+
configurable: true,
|
|
65
|
+
writable: true,
|
|
66
|
+
value: followers
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
update(event, store, writes) {
|
|
70
|
+
const feature = store.getFeature(this.state.featureId);
|
|
71
|
+
if (!feature)
|
|
72
|
+
return;
|
|
73
|
+
const newCoords = computeVertexMove(this.state, event.lngLat, feature);
|
|
74
|
+
writes.write(store, this.state.featureId, { coordinates: newCoords });
|
|
75
|
+
// Preview update for the features following along through a shared vertex. They are written
|
|
76
|
+
// one at a time in the same manner as the main one (an intermediate updateFeature).
|
|
77
|
+
// The commit is the single transaction at the end of the drag.
|
|
78
|
+
for (const state of this.followers) {
|
|
79
|
+
applyVertexMove(state, event.lngLat, store, writes);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Start a vertex drag, and set the DragState and the followed vertices it draws from. Returns
|
|
85
|
+
* null when the feature or the vertex is gone
|
|
86
|
+
*/
|
|
87
|
+
export function startVertexDrag(event, featureId, vertexRef, context) {
|
|
88
|
+
const { store, spatialIndex } = context;
|
|
89
|
+
const feature = store.getFeature(featureId);
|
|
90
|
+
if (!feature)
|
|
91
|
+
return null;
|
|
92
|
+
const startLngLat = dragStartLngLat(event);
|
|
93
|
+
// Check the currently selected vertices
|
|
94
|
+
const selectedVertices = store.getSelectedVertices();
|
|
95
|
+
let vertexRefsToMove;
|
|
96
|
+
if (selectedVertices &&
|
|
97
|
+
selectedVertices.featureId === featureId &&
|
|
98
|
+
hasVertexRef(selectedVertices.vertexIndices, vertexRef)) {
|
|
99
|
+
// If the vertex being dragged is one of the selected vertices, move every selected vertex
|
|
100
|
+
// (a multiple selection spanning rings and parts can be moved as-is too)
|
|
101
|
+
vertexRefsToMove = selectedVertices.vertexIndices;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Otherwise move only the vertex being dragged
|
|
105
|
+
vertexRefsToMove = [vertexRef];
|
|
106
|
+
}
|
|
107
|
+
// Simultaneous movement of shared vertices (options.topology.sharedVertexDrag).
|
|
108
|
+
// The following set is determined at the start and is not re-searched afterwards.
|
|
109
|
+
// If the temporary-disable modifier key (the same key as for snapping) is held down, no set
|
|
110
|
+
// is built.
|
|
111
|
+
let sharedVertexStates = [];
|
|
112
|
+
if (context.topology?.sharedVertexDrag && !isSharedVertexDragSuppressed(event, context)) {
|
|
113
|
+
const shared = collectSharedVertexMoves({
|
|
114
|
+
store,
|
|
115
|
+
spatialIndex,
|
|
116
|
+
feature,
|
|
117
|
+
vertexRefs: vertexRefsToMove,
|
|
118
|
+
startLngLat,
|
|
119
|
+
});
|
|
120
|
+
vertexRefsToMove = shared.mainRefs;
|
|
121
|
+
sharedVertexStates = shared.followers;
|
|
122
|
+
}
|
|
123
|
+
const state = startVertexMove(feature, vertexRefsToMove, startLngLat);
|
|
124
|
+
if (!state)
|
|
125
|
+
return null;
|
|
126
|
+
// Write the following vertices into the UI state so they are drawn in a style distinct from
|
|
127
|
+
// the selected vertices. They are set back to null when the drag ends (endDrag / reset).
|
|
128
|
+
store.setFollowedVertices?.(sharedVertexStates.map((followerState) => ({
|
|
129
|
+
featureId: followerState.featureId,
|
|
130
|
+
vertexIndices: followerState.vertexIndices,
|
|
131
|
+
})));
|
|
132
|
+
// Set the DragState (activeVertex is the vertex the drag started from)
|
|
133
|
+
store.setDragState({
|
|
134
|
+
operation: 'vertex',
|
|
135
|
+
activeVertex: vertexRef,
|
|
136
|
+
activeFeatureId: featureId,
|
|
137
|
+
});
|
|
138
|
+
return new VertexDrag('vertex', state, sharedVertexStates);
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Start a midpoint drag: insert a vertex at the midpoint and continue as a move of that
|
|
142
|
+
* vertex. Returns null when the feature is gone
|
|
143
|
+
*/
|
|
144
|
+
export function startMidpointDrag(event, featureId, after, store) {
|
|
145
|
+
const feature = store.getFeature(featureId);
|
|
146
|
+
if (!feature)
|
|
147
|
+
return null;
|
|
148
|
+
const startLngLat = dragStartLngLat(event);
|
|
149
|
+
// Add the position of the midpoint as a new vertex
|
|
150
|
+
const newCoord = [startLngLat.lng, startLngLat.lat];
|
|
151
|
+
const newCoords = addVertex(feature, after, newCoord);
|
|
152
|
+
store.updateFeature(featureId, { coordinates: newCoords });
|
|
153
|
+
// The added vertex is afterIndex + 1 in the same part and same ring
|
|
154
|
+
const newVertexRef = { ...after, index: after.index + 1 };
|
|
155
|
+
// Continue as a move operation on the added vertex
|
|
156
|
+
const updatedFeature = store.getFeature(featureId);
|
|
157
|
+
if (!updatedFeature)
|
|
158
|
+
return null;
|
|
159
|
+
const state = startVertexMove(updatedFeature, [newVertexRef], startLngLat);
|
|
160
|
+
if (!state)
|
|
161
|
+
return null;
|
|
162
|
+
return new VertexDrag('midpoint', state);
|
|
163
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|