@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,285 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModeHandler
|
|
3
|
+
*
|
|
4
|
+
* Handler interface for the drawing modes.
|
|
5
|
+
* Every mode implements this interface.
|
|
6
|
+
*/
|
|
7
|
+
import type { Map as MapLibreMap } from 'maplibre-gl';
|
|
8
|
+
import type { DragNormalizedEvent, KeyNormalizedEvent, MouseNormalizedEvent } from '../dispatcher/types.js';
|
|
9
|
+
import type { Mode } from '../store/types.js';
|
|
10
|
+
/**
|
|
11
|
+
* An input whose coordinates go through snapping, as asked about by
|
|
12
|
+
* {@link ModeHandler.isSnapEnabledFor}.
|
|
13
|
+
*
|
|
14
|
+
* Corresponds one to one with the inputs whose coordinates InputRouter passes through snapping
|
|
15
|
+
* (click / mousemove / dragstart / dragmove / dragend).
|
|
16
|
+
*/
|
|
17
|
+
export type SnapInputType = 'click' | 'mousemove' | 'dragstart' | 'dragmove' | 'dragend';
|
|
18
|
+
/**
|
|
19
|
+
* The services of the draw instance a mode works with, passed to
|
|
20
|
+
* {@link ModeHandler.onStart}.
|
|
21
|
+
*
|
|
22
|
+
* Note: the redraw is triggered automatically by RenderCoordinator subscribing to Store changes,
|
|
23
|
+
* so a mode does not need to call requestRepaint() explicitly.
|
|
24
|
+
*/
|
|
25
|
+
export interface ModeContext {
|
|
26
|
+
/** The map the draw instance is attached to */
|
|
27
|
+
map: MapLibreMap;
|
|
28
|
+
/** The Store of the document; a mode writes features through it */
|
|
29
|
+
store: import('../store/store.js').Store;
|
|
30
|
+
/**
|
|
31
|
+
* The queries of the spatial index (it is derived from the Store, so a mode only reads it)
|
|
32
|
+
*/
|
|
33
|
+
spatialIndex: import('../store/spatial/spatial-index.js').SpatialQuery;
|
|
34
|
+
/** The hit test of the features of the Store alone */
|
|
35
|
+
hitTestService: import('../dispatcher/hit-test/service.js').HitTestService;
|
|
36
|
+
/**
|
|
37
|
+
* Returns the foreground hit in the visual stacking order (unified z traversal)
|
|
38
|
+
*
|
|
39
|
+
* Traverses the features of the Store and the datasets in a single
|
|
40
|
+
* stacking order. Selection, drag and cursor decisions use this one (`hitTestService.hitTest`
|
|
41
|
+
* looks only at the Store, so it would grab a feature that is occluded by a dataset).
|
|
42
|
+
*/
|
|
43
|
+
hitTestTopmost: import('../dispatcher/hit-test/topmost.js').HitTestTopmost;
|
|
44
|
+
/**
|
|
45
|
+
* Provider of the companion rendering and the companion hits (the ones of this draw instance)
|
|
46
|
+
*
|
|
47
|
+
* Used to return a consumed companion hit to the provider.
|
|
48
|
+
*/
|
|
49
|
+
featureCompanions: import('../view/feature-companion.js').FeatureCompanionRegistry;
|
|
50
|
+
/**
|
|
51
|
+
* The selection scope of this draw instance (the extension points of the custom feature
|
|
52
|
+
* types, the auxiliary handles and the thinned handle sets)
|
|
53
|
+
*
|
|
54
|
+
* The same object the CustomLayer draws the selection UI with, so hit testing and rendering
|
|
55
|
+
* agree, and a second draw instance on the page never takes part.
|
|
56
|
+
*/
|
|
57
|
+
selectionScope: import('../view/ui/selection-scope.js').SelectionScope;
|
|
58
|
+
/** The emitter of the `draw.*` events of the draw instance */
|
|
59
|
+
eventEmitter: import('../shared/utils/event-emitter.js').EventEmitter;
|
|
60
|
+
/** The resolved colors and sizes of the selection UI */
|
|
61
|
+
selectionStyle: import('../shared/config/selection.js').SelectionUIConfig;
|
|
62
|
+
/**
|
|
63
|
+
* Topology configuration (simultaneous movement of shared vertices, and so on)
|
|
64
|
+
*
|
|
65
|
+
* When omitted, it is treated as the default value (everything disabled).
|
|
66
|
+
*/
|
|
67
|
+
topology?: import('../shared/config/topology.js').TopologyConfig;
|
|
68
|
+
/**
|
|
69
|
+
* Trace configuration (whether edge tracing is enabled or disabled)
|
|
70
|
+
*
|
|
71
|
+
* When omitted, it is treated as the default value (enabled). It is the same object that
|
|
72
|
+
* draw.tracing rewrites, so a switch at runtime takes effect on the very next input.
|
|
73
|
+
*/
|
|
74
|
+
trace?: import('../shared/config/trace.js').TraceConfig;
|
|
75
|
+
/**
|
|
76
|
+
* The resolved snapping options
|
|
77
|
+
*
|
|
78
|
+
* Read so that the simultaneous movement of shared vertices shares the "modifier key for
|
|
79
|
+
* temporary disabling" with snapping. When snapping is not configured, it is omitted and
|
|
80
|
+
* the default 'alt' is assumed.
|
|
81
|
+
*/
|
|
82
|
+
snapOptions?: import('../snapping/types.js').ResolvedSnapOptions;
|
|
83
|
+
/** Generates the default name of a new feature (such as "Polygon 3") */
|
|
84
|
+
autoNameGenerator: import('../shared/utils/name-generator.js').AutoNameGenerator;
|
|
85
|
+
/** The box selection strategies by feature type */
|
|
86
|
+
boxSelectionRegistry: import('../dispatcher/hit-test/box-strategy.js').BoxSelectionStrategyRegistry;
|
|
87
|
+
/** The plugin manager of the draw instance (omitted when none is set up) */
|
|
88
|
+
pluginManager?: import('../plugins/plugin-manager.js').PluginManager;
|
|
89
|
+
/** Requests a mode change, as `draw.setMode` does (the same refusals apply) */
|
|
90
|
+
setMode: (mode: Mode) => void;
|
|
91
|
+
/** Generates a new unique feature id */
|
|
92
|
+
generateFeatureId: () => string;
|
|
93
|
+
/**
|
|
94
|
+
* Gets the ID of the writable layer, the layer that new features are written into
|
|
95
|
+
*
|
|
96
|
+
* The active layer when it exists, is not locked, is visible and is not locally hidden,
|
|
97
|
+
* otherwise the first such layer, otherwise an empty string. A mode reads it when it
|
|
98
|
+
* commits a feature; when it is an empty string the mode must not create the feature: it
|
|
99
|
+
* discards the drawing (clears the tentative state) and returns to select.
|
|
100
|
+
*/
|
|
101
|
+
getCurrentLayerId: () => string;
|
|
102
|
+
/**
|
|
103
|
+
* Whether the line widths of the features a drawing mode creates follow the zoom (the
|
|
104
|
+
* `scaleWithZoom` option of the instance)
|
|
105
|
+
*
|
|
106
|
+
* When it is true, a mode writes the zoom of the commit into `properties.createdZoom`, and
|
|
107
|
+
* the widths of the feature grow and shrink with the map from there. When it is false, it
|
|
108
|
+
* writes no created zoom and the widths stay the same on the screen.
|
|
109
|
+
*/
|
|
110
|
+
scaleWithZoom: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Gets the most recent snapping result (always null when snapping is not configured)
|
|
113
|
+
*
|
|
114
|
+
* This is the only read port through which a mode learns about snapping. InputRouter passes
|
|
115
|
+
* the coordinates of click / mousemove through snapping before delivering them to the mode,
|
|
116
|
+
* so at the time of onClick / onMouseMove the result readable here is the snapping result
|
|
117
|
+
* corresponding to the event that was just delivered (tracing reads it).
|
|
118
|
+
*/
|
|
119
|
+
getSnapResult?: () => import('../snapping/types.js').SnapResult | null;
|
|
120
|
+
/**
|
|
121
|
+
* Gets a feature of a dataset (omitted when it is not configured)
|
|
122
|
+
*
|
|
123
|
+
* This is the port through which a mode resolves to a feature a snap target that was snapped
|
|
124
|
+
* to data (a dataset). It is a feature that is not in the Store, so it cannot
|
|
125
|
+
* be looked up with store.getFeature (tracing reads it).
|
|
126
|
+
*/
|
|
127
|
+
getDatasetFeature?: (datasetId: string, featureId: string) => import('../store/types.js').Feature | null;
|
|
128
|
+
/**
|
|
129
|
+
* Looks up, by extent, the features of the datasets usable for tracing
|
|
130
|
+
*
|
|
131
|
+
* This is the port for adding the features of data (a dataset) to the material
|
|
132
|
+
* of the edge graph. It returns an empty array when snapping to data is disabled.
|
|
133
|
+
*/
|
|
134
|
+
getDatasetTraceFeatures?: (bbox: import('../store/types.js').BoundingBox) => import('../store/types.js').Feature[];
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* The implementation of an interaction mode: it receives the normalized input while it is the
|
|
138
|
+
* current mode.
|
|
139
|
+
*
|
|
140
|
+
* Register a custom mode with `draw.registerMode(name, factory)` or `Plugin.modes`, and enter
|
|
141
|
+
* it with `draw.setMode(name)`. The context is passed in `onStart()` and the implementation
|
|
142
|
+
* keeps it in a field; it is not passed to the event handlers. Every handler is optional. The
|
|
143
|
+
* coordinates of the pointer events have already gone through snapping (see
|
|
144
|
+
* `isSnapEnabledFor`).
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```ts
|
|
148
|
+
* import type { ModeContext, ModeHandler, MouseNormalizedEvent } from '@sakuzu/maplibre-gl-draw';
|
|
149
|
+
*
|
|
150
|
+
* // A mode that logs the clicked position and returns to select on Escape
|
|
151
|
+
* class ProbeMode implements ModeHandler {
|
|
152
|
+
* readonly modeName = 'probe';
|
|
153
|
+
* private context: ModeContext | null = null;
|
|
154
|
+
*
|
|
155
|
+
* onStart(context: ModeContext): void {
|
|
156
|
+
* this.context = context;
|
|
157
|
+
* }
|
|
158
|
+
* onClick(event: MouseNormalizedEvent): void {
|
|
159
|
+
* console.log(event.lngLat.lng, event.lngLat.lat);
|
|
160
|
+
* }
|
|
161
|
+
* onKeyDown(event: { key: string }): void {
|
|
162
|
+
* if (event.key === 'Escape') this.context?.setMode('select');
|
|
163
|
+
* }
|
|
164
|
+
* }
|
|
165
|
+
*
|
|
166
|
+
* draw.registerMode('probe', () => new ProbeMode());
|
|
167
|
+
* draw.setMode('probe');
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
export interface ModeHandler {
|
|
171
|
+
/** The name the mode is registered under */
|
|
172
|
+
readonly modeName: Mode;
|
|
173
|
+
/**
|
|
174
|
+
* Whether the mode writes new features into a layer
|
|
175
|
+
*
|
|
176
|
+
* A mode that declares true is entered only while a layer can be written (while
|
|
177
|
+
* `ModeContext.getCurrentLayerId` returns a non-empty string); otherwise setMode is ignored
|
|
178
|
+
* and the current mode is kept. The built-in drawing modes declare it, and a plugin mode
|
|
179
|
+
* that creates features declares it to get the same gate. The declaration does not remove
|
|
180
|
+
* the check at commit time: the layer can stop being writable while the mode is active.
|
|
181
|
+
*/
|
|
182
|
+
readonly writesFeatures?: boolean;
|
|
183
|
+
/** Called when the mode becomes the current mode; keep the context for later */
|
|
184
|
+
onStart?(context: ModeContext): void;
|
|
185
|
+
/** Called when another mode replaces it or the draw instance is destroyed */
|
|
186
|
+
onStop?(): void;
|
|
187
|
+
/** Called on a click */
|
|
188
|
+
onClick?(event: MouseNormalizedEvent): void;
|
|
189
|
+
/** Called on a double click */
|
|
190
|
+
onDoubleClick?(event: MouseNormalizedEvent): void;
|
|
191
|
+
/** Called on a mouse move */
|
|
192
|
+
onMouseMove?(event: MouseNormalizedEvent): void;
|
|
193
|
+
/**
|
|
194
|
+
* Called on a mouse down
|
|
195
|
+
* @returns returning true consumes the event (stops the propagation to MapLibre)
|
|
196
|
+
*/
|
|
197
|
+
onMouseDown?(event: MouseNormalizedEvent): boolean | undefined;
|
|
198
|
+
/** Called on a mouse up */
|
|
199
|
+
onMouseUp?(event: MouseNormalizedEvent): void;
|
|
200
|
+
/** Called when a drag starts */
|
|
201
|
+
onDragStart?(event: DragNormalizedEvent): void;
|
|
202
|
+
/** Called during a drag */
|
|
203
|
+
onDragMove?(event: DragNormalizedEvent): void;
|
|
204
|
+
/** Called when a drag ends */
|
|
205
|
+
onDragEnd?(event: DragNormalizedEvent): void;
|
|
206
|
+
/**
|
|
207
|
+
* Called when a press ends without a release (a second finger touched the screen, or the
|
|
208
|
+
* browser cancelled the touch)
|
|
209
|
+
*
|
|
210
|
+
* Nothing is decided: the mode abandons the press, restores what the press changed and
|
|
211
|
+
* gives the pan back to MapLibre. It can arrive before onDragStart (a press that has not
|
|
212
|
+
* become a drag yet). The coordinates are the last known position.
|
|
213
|
+
*/
|
|
214
|
+
onDragCancel?(event: DragNormalizedEvent): void;
|
|
215
|
+
/** Called on a key down (normalized) */
|
|
216
|
+
onKeyDown?(event: KeyNormalizedEvent): void;
|
|
217
|
+
/** Called on a key up (normalized) */
|
|
218
|
+
onKeyUp?(event: KeyNormalizedEvent): void;
|
|
219
|
+
/**
|
|
220
|
+
* Called after an external state change
|
|
221
|
+
*
|
|
222
|
+
* Used to reset the internal state of the mode after an external state change
|
|
223
|
+
* (a change applied from outside the mode) has been carried out.
|
|
224
|
+
* Example: when the state is changed externally while drawing in the Circle mode,
|
|
225
|
+
* the drawing state is reset.
|
|
226
|
+
*/
|
|
227
|
+
onExternalStateChange?(): void;
|
|
228
|
+
/**
|
|
229
|
+
* Called after a selection change
|
|
230
|
+
*
|
|
231
|
+
* Used to update the internal state of the mode when the selection is changed from a plugin.
|
|
232
|
+
*/
|
|
233
|
+
onSelectionChange?(): void;
|
|
234
|
+
/**
|
|
235
|
+
* Undoes a vertex while drawing
|
|
236
|
+
*
|
|
237
|
+
* Called when Cmd+Z/Ctrl+Z is pressed while drawing a LineString/Polygon.
|
|
238
|
+
* @returns whether the undo was carried out
|
|
239
|
+
*/
|
|
240
|
+
undoVertex?(): boolean;
|
|
241
|
+
/**
|
|
242
|
+
* Redoes a vertex that was undone
|
|
243
|
+
*
|
|
244
|
+
* Called when Cmd+Shift+Z/Ctrl+Y is pressed while drawing.
|
|
245
|
+
* @returns whether the redo was carried out
|
|
246
|
+
*/
|
|
247
|
+
redoVertex?(): boolean;
|
|
248
|
+
/**
|
|
249
|
+
* Returns the feature to prefer when snapping candidates are tied
|
|
250
|
+
*
|
|
251
|
+
* Read by InputRouter right before it passes the coordinates through snapping, and passed as
|
|
252
|
+
* the preferFeature of SnapContext. A drawing mode returns the anchor of the trace (the
|
|
253
|
+
* boundary it started tracing along), which prevents the snap target from jumping to another
|
|
254
|
+
* feature whose coordinates overlap exactly.
|
|
255
|
+
*
|
|
256
|
+
* @returns the feature to prefer, or null if there is none
|
|
257
|
+
*/
|
|
258
|
+
getSnapPreference?(): {
|
|
259
|
+
featureId: string;
|
|
260
|
+
datasetId?: string;
|
|
261
|
+
} | null;
|
|
262
|
+
/**
|
|
263
|
+
* Returns, per input type, whether snapping is to be applied
|
|
264
|
+
*
|
|
265
|
+
* Read by InputRouter right before it passes the coordinates through snapping. An input type
|
|
266
|
+
* for which false is returned does not go through SnapService and reaches the mode with its
|
|
267
|
+
* raw coordinates. When this is omitted (and when true is returned), snapping is applied as
|
|
268
|
+
* before.
|
|
269
|
+
*
|
|
270
|
+
* The tolerance (10 pixels by default) is a value premised on "once per click", so in a
|
|
271
|
+
* drag-driven drawing that passes several hundred points in a single stroke (freehand), the
|
|
272
|
+
* intermediate sample points are pulled one after another to nearby vertices and a line drawn
|
|
273
|
+
* straight ends up bent. A port that can be switched off per input type is provided so that
|
|
274
|
+
* only the inside of the stroke can be let through untouched (the start point and the end
|
|
275
|
+
* point can remain snapped).
|
|
276
|
+
*
|
|
277
|
+
* @param inputType the type of the input for which snapping is about to be applied
|
|
278
|
+
* @returns true if snapping is to be applied
|
|
279
|
+
*/
|
|
280
|
+
isSnapEnabledFor?(inputType: SnapInputType): boolean;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Creates a new {@link ModeHandler}; called every time the mode is entered.
|
|
284
|
+
*/
|
|
285
|
+
export type ModeFactory = () => ModeHandler;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modes module
|
|
3
|
+
*
|
|
4
|
+
* Only the symbols that src/index.ts publishes are listed here (see "The public
|
|
5
|
+
* surface" in CONTRIBUTING.md). Internal code imports from the defining file.
|
|
6
|
+
*/
|
|
7
|
+
export type { ModeContext, ModeFactory, ModeHandler, SnapInputType } from './handler.js';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ModeHandler } from './handler.js';
|
|
2
|
+
/**
|
|
3
|
+
* Options of ModeManagerImpl
|
|
4
|
+
*/
|
|
5
|
+
export interface ModeManagerOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Whether the mode of the handler can be entered now
|
|
8
|
+
*
|
|
9
|
+
* Asked on every setMode (except the one to select) with a handler that the factory of the
|
|
10
|
+
* requested mode has just created; it reads what the mode declares (for example
|
|
11
|
+
* `writesFeatures`). When it returns false the request is ignored and the current mode is
|
|
12
|
+
* kept, like the interaction lock. When it is omitted, every registered mode can be entered.
|
|
13
|
+
*/
|
|
14
|
+
canEnter?: (handler: ModeHandler) => boolean;
|
|
15
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* ModeManager implementation
|
|
5
|
+
*
|
|
6
|
+
* Subscribes to the mode state of the Store and switches the handler when the mode changes.
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export class ModeManagerImpl {
|
|
11
|
+
constructor(store, options = {}) {
|
|
12
|
+
Object.defineProperty(this, "store", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: store
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(this, "options", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: options
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "currentHandler", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: null
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(this, "factories", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
configurable: true,
|
|
33
|
+
writable: true,
|
|
34
|
+
value: new Map()
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(this, "context", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
configurable: true,
|
|
39
|
+
writable: true,
|
|
40
|
+
value: null
|
|
41
|
+
});
|
|
42
|
+
Object.defineProperty(this, "unsubscribe", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
configurable: true,
|
|
45
|
+
writable: true,
|
|
46
|
+
value: null
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* The handler created by setMode to ask canEnter, which starts when the Store reports the
|
|
50
|
+
* mode change (so a mode is never constructed twice for one transition)
|
|
51
|
+
*/
|
|
52
|
+
Object.defineProperty(this, "pending", {
|
|
53
|
+
enumerable: true,
|
|
54
|
+
configurable: true,
|
|
55
|
+
writable: true,
|
|
56
|
+
value: null
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Sets the context
|
|
61
|
+
*/
|
|
62
|
+
setContext(context) {
|
|
63
|
+
this.context = context;
|
|
64
|
+
}
|
|
65
|
+
getMode() {
|
|
66
|
+
return this.store.getMode();
|
|
67
|
+
}
|
|
68
|
+
setMode(mode) {
|
|
69
|
+
if (mode === this.store.getMode())
|
|
70
|
+
return true;
|
|
71
|
+
// A mode without a factory is refused before the Store changes, so the Store, the
|
|
72
|
+
// draw.mode.change event and the running handler never disagree (a typo in a mode name
|
|
73
|
+
// is reported, not half applied).
|
|
74
|
+
const factory = this.factories.get(mode);
|
|
75
|
+
if (!factory) {
|
|
76
|
+
console.warn(`Mode "${mode}" is not registered`);
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
// While the interaction lock is on, transitions to drawing modes (anything other than
|
|
80
|
+
// select) are refused. In the read-only state only select is allowed, which prevents
|
|
81
|
+
// entering an editing mode. This is not a write gate, so it is a suppression independent
|
|
82
|
+
// of readOnly, and returning to select is always allowed.
|
|
83
|
+
if (mode !== 'select' && this.store.isInteractionLocked())
|
|
84
|
+
return false;
|
|
85
|
+
// A mode that the canEnter predicate rejects (for example, one that writes features
|
|
86
|
+
// while no layer can be written) is refused in the same way.
|
|
87
|
+
const { canEnter } = this.options;
|
|
88
|
+
if (canEnter && mode !== 'select') {
|
|
89
|
+
const handler = factory();
|
|
90
|
+
if (!canEnter(handler))
|
|
91
|
+
return false;
|
|
92
|
+
this.pending = { mode, handler };
|
|
93
|
+
}
|
|
94
|
+
// Following SSoT, the mode change is carried out through the Store
|
|
95
|
+
// The result of the mode change is handled in handleModeChange through the Store subscription
|
|
96
|
+
this.store.setMode(mode);
|
|
97
|
+
return this.store.getMode() === mode;
|
|
98
|
+
}
|
|
99
|
+
registerMode(mode, factory) {
|
|
100
|
+
this.factories.set(mode, factory);
|
|
101
|
+
return () => {
|
|
102
|
+
if (this.factories.get(mode) === factory)
|
|
103
|
+
this.unregisterMode(mode);
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
unregisterMode(mode) {
|
|
107
|
+
if (!this.factories.has(mode))
|
|
108
|
+
return;
|
|
109
|
+
if (mode !== 'select' && this.store.getMode() === mode)
|
|
110
|
+
this.setMode('select');
|
|
111
|
+
if (this.pending?.mode === mode)
|
|
112
|
+
this.pending = null;
|
|
113
|
+
this.factories.delete(mode);
|
|
114
|
+
}
|
|
115
|
+
getHandler() {
|
|
116
|
+
return this.currentHandler;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Starts the initial mode and starts subscribing to the Store
|
|
120
|
+
*/
|
|
121
|
+
start() {
|
|
122
|
+
// Subscribe to the mode changes of the Store
|
|
123
|
+
this.unsubscribe = this.store.subscribe((changes) => {
|
|
124
|
+
if (changes.mode) {
|
|
125
|
+
this.handleModeChange(changes.mode.mode);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
// Start the handler of the initial mode
|
|
129
|
+
const currentMode = this.store.getMode();
|
|
130
|
+
const factory = this.factories.get(currentMode);
|
|
131
|
+
if (factory) {
|
|
132
|
+
this.currentHandler = factory();
|
|
133
|
+
if (this.context) {
|
|
134
|
+
this.currentHandler.onStart?.(this.context);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Stops the current mode and unsubscribes
|
|
140
|
+
*/
|
|
141
|
+
stop() {
|
|
142
|
+
if (this.currentHandler) {
|
|
143
|
+
this.currentHandler.onStop?.();
|
|
144
|
+
}
|
|
145
|
+
this.currentHandler = null;
|
|
146
|
+
if (this.unsubscribe) {
|
|
147
|
+
this.unsubscribe();
|
|
148
|
+
this.unsubscribe = null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Handles a mode change notification from the Store
|
|
153
|
+
*/
|
|
154
|
+
handleModeChange(mode) {
|
|
155
|
+
const factory = this.factories.get(mode);
|
|
156
|
+
if (!factory) {
|
|
157
|
+
console.warn(`Mode "${mode}" is not registered`);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
// End the current mode
|
|
161
|
+
if (this.currentHandler) {
|
|
162
|
+
this.currentHandler.onStop?.();
|
|
163
|
+
}
|
|
164
|
+
// Start the new mode (the handler that setMode created for canEnter, when there is one)
|
|
165
|
+
const pending = this.pending;
|
|
166
|
+
this.pending = null;
|
|
167
|
+
this.currentHandler = pending?.mode === mode ? pending.handler : factory();
|
|
168
|
+
if (this.context) {
|
|
169
|
+
this.currentHandler.onStart?.(this.context);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Notifies the current mode handler of an external state change
|
|
174
|
+
*/
|
|
175
|
+
notifyStateReset() {
|
|
176
|
+
this.currentHandler?.onExternalStateChange?.();
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Notifies the current mode handler of a selection change
|
|
180
|
+
*/
|
|
181
|
+
notifySelectionChange() {
|
|
182
|
+
this.currentHandler?.onSelectionChange?.();
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Undoes a vertex while drawing
|
|
186
|
+
*/
|
|
187
|
+
undoVertex() {
|
|
188
|
+
return this.currentHandler?.undoVertex?.() ?? false;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Redoes a vertex that was undone
|
|
192
|
+
*/
|
|
193
|
+
redoVertex() {
|
|
194
|
+
return this.currentHandler?.redoVertex?.() ?? false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { BoxSelection, Coordinate, Feature } from '../../store/types.js';
|
|
2
|
+
import type { ModeContext } from '../handler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Detect the features inside the box
|
|
5
|
+
*
|
|
6
|
+
* First the candidates are obtained quickly through the SpatialIndex (rbush),
|
|
7
|
+
* and then a precise inside-the-box test is performed.
|
|
8
|
+
*/
|
|
9
|
+
export declare function queryFeaturesInBox(boxSelection: BoxSelection, context: ModeContext): string[];
|
|
10
|
+
type Rect = {
|
|
11
|
+
minX: number;
|
|
12
|
+
minY: number;
|
|
13
|
+
maxX: number;
|
|
14
|
+
maxY: number;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* The rectangles, in longitudes within [-180, 180], that a box drawn on the screen covers
|
|
18
|
+
*
|
|
19
|
+
* The corners come from the map unprojected as they are, so a box drawn across the
|
|
20
|
+
* antimeridian has a longitude beyond ±180 at one side. It is brought back into [-180, 180]
|
|
21
|
+
* and split at the line into two rectangles, and the box as drawn is kept as well; a box as
|
|
22
|
+
* wide as the world covers every longitude.
|
|
23
|
+
*/
|
|
24
|
+
export declare function boxRects(start: Coordinate, end: Coordinate): Rect[];
|
|
25
|
+
/**
|
|
26
|
+
* Decide whether a feature is inside the box
|
|
27
|
+
*
|
|
28
|
+
* Uses BoxSelectionStrategyRegistry to perform the appropriate test per feature type.
|
|
29
|
+
* - Point: whether the center coordinate is inside the box
|
|
30
|
+
* - LineString: intersection test between the geometry and the box
|
|
31
|
+
* - Polygon: intersection test between the geometry and the box
|
|
32
|
+
* - Text/Image: intersection test between the OBB (the bounding box that accounts for rotation)
|
|
33
|
+
* and the box
|
|
34
|
+
*/
|
|
35
|
+
export declare function isFeatureInBox(feature: Feature, rect: {
|
|
36
|
+
minX: number;
|
|
37
|
+
minY: number;
|
|
38
|
+
maxX: number;
|
|
39
|
+
maxY: number;
|
|
40
|
+
}, boxSelectionRegistry: ModeContext['boxSelectionRegistry']): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* The fallback box selection test
|
|
43
|
+
*
|
|
44
|
+
* Performs a simple coordinate-based test for feature types that are not registered.
|
|
45
|
+
*/
|
|
46
|
+
export declare function fallbackBoxSelection(feature: Feature, rect: {
|
|
47
|
+
minX: number;
|
|
48
|
+
minY: number;
|
|
49
|
+
maxX: number;
|
|
50
|
+
maxY: number;
|
|
51
|
+
}): boolean;
|
|
52
|
+
export {};
|