@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,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for snapping
|
|
3
|
+
*
|
|
4
|
+
* The single entry point for coordinates is InputRouter, so replacing the
|
|
5
|
+
* coordinates of click / mousemove / dragmove there with SnapService makes every
|
|
6
|
+
* mode (including custom modes from plugins) and the vertex dragging of the select
|
|
7
|
+
* mode support snapping without any change.
|
|
8
|
+
*
|
|
9
|
+
* A candidate (SnapCandidate) has 2 shapes.
|
|
10
|
+
*
|
|
11
|
+
* Point candidate (SnapPointCandidate) Holds the coordinate as it is. Used for
|
|
12
|
+
* vertices, intersections, guides, and
|
|
13
|
+
* for an edge whose nearest point the
|
|
14
|
+
* provider computed itself
|
|
15
|
+
* Segment candidate (SnapSegmentCandidate) Holds the 2 end points of an edge. The
|
|
16
|
+
* point closest to the cursor is computed
|
|
17
|
+
* by SnapService
|
|
18
|
+
*
|
|
19
|
+
* The built-in edge provider returns segment candidates and leaves the computation
|
|
20
|
+
* of the nearest point (a projection in pixel space) to SnapService.
|
|
21
|
+
*/
|
|
22
|
+
import type { ModifierKeys } from '../dispatcher/types.js';
|
|
23
|
+
import type { ScreenPoint } from '../shared/math/index.js';
|
|
24
|
+
import type { SnapLngLat, SnapTargetKind } from '../shared/types/events.js';
|
|
25
|
+
import type { BoundingBox, Coordinate, VertexRef } from '../store/types.js';
|
|
26
|
+
export type { SnapLngLat, SnapResult, SnapTarget, SnapTargetKind, SnapTargetSegment, } from '../shared/types/events.js';
|
|
27
|
+
/**
|
|
28
|
+
* A single vertex to leave out of the snapping candidates.
|
|
29
|
+
*
|
|
30
|
+
* A vertex being dragged would snap to itself, so it is excluded. Only 1 vertex is
|
|
31
|
+
* excluded, and the other vertices of the same feature are still included (so that a
|
|
32
|
+
* ring can be closed).
|
|
33
|
+
*/
|
|
34
|
+
export interface SnapExcludeVertex {
|
|
35
|
+
/** The ID of the target feature */
|
|
36
|
+
featureId: string;
|
|
37
|
+
/** The reference of the vertex to exclude */
|
|
38
|
+
vertex: VertexRef;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The state of one snapping resolution: the zoom, the exclusions and the modifier keys.
|
|
42
|
+
*
|
|
43
|
+
* The library builds it for every input; a caller passes part of it to
|
|
44
|
+
* `draw.snapping.resolve()` when it snaps a coordinate made outside the library.
|
|
45
|
+
*/
|
|
46
|
+
export interface SnapContext {
|
|
47
|
+
/** The current zoom level (used to convert the pixel tolerance into degrees) */
|
|
48
|
+
zoom: number;
|
|
49
|
+
/**
|
|
50
|
+
* The feature ID to exclude (that whole feature is removed from the candidates)
|
|
51
|
+
*/
|
|
52
|
+
excludeFeatureId?: string;
|
|
53
|
+
/**
|
|
54
|
+
* The set of feature IDs to exclude (each of them is removed from the candidates
|
|
55
|
+
* entirely)
|
|
56
|
+
*
|
|
57
|
+
* The features being moved in a move drag (operation === 'move') go in here.
|
|
58
|
+
* A feature being moved travels with the cursor, so snapping to itself would repeat
|
|
59
|
+
* "pull the cursor back to its own position -> shift again by the grab offset on
|
|
60
|
+
* the next frame" and the view would oscillate. The reason for excluding them is
|
|
61
|
+
* the same as for excludeVertex; the only difference is that the target is a whole
|
|
62
|
+
* feature rather than a single vertex.
|
|
63
|
+
*/
|
|
64
|
+
excludeFeatureIds?: ReadonlySet<string>;
|
|
65
|
+
/** The vertex to exclude (the vertex being dragged itself) */
|
|
66
|
+
excludeVertex?: SnapExcludeVertex;
|
|
67
|
+
/**
|
|
68
|
+
* The feature to prefer when both the priority and the distance are tied
|
|
69
|
+
*
|
|
70
|
+
* The source is the anchor of the tracing (the boundary that was first traced).
|
|
71
|
+
* When features whose boundary coordinates overlap exactly line up, the distances
|
|
72
|
+
* of the candidates tie and the winner ends up being decided by the order in which
|
|
73
|
+
* the candidates were listed, so this feature is made to win only on a tie, to keep
|
|
74
|
+
* the snapping target from jumping to another feature. It does not overturn a
|
|
75
|
+
* candidate that is closer.
|
|
76
|
+
*/
|
|
77
|
+
preferFeature?: {
|
|
78
|
+
/** The feature ID to prefer */
|
|
79
|
+
featureId: string;
|
|
80
|
+
/** When it originates from a dataset, that dataset ID */
|
|
81
|
+
datasetId?: string;
|
|
82
|
+
};
|
|
83
|
+
/** The state of the modifier keys (used to decide on a temporary disabling) */
|
|
84
|
+
modifiers: ModifierKeys;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The context passed to {@link SnapProvider.candidates}: a {@link SnapContext} plus the cursor
|
|
88
|
+
* position and the tolerance in pixels and in degrees.
|
|
89
|
+
*
|
|
90
|
+
* A provider should honor the exclusions (`excludeFeatureId`, `excludeFeatureIds`,
|
|
91
|
+
* `excludeVertex`): the features being moved travel with the cursor, and snapping to them
|
|
92
|
+
* would pull the cursor back to itself.
|
|
93
|
+
*/
|
|
94
|
+
export interface SnapProviderContext extends SnapContext {
|
|
95
|
+
/** The cursor position in degrees */
|
|
96
|
+
lngLat: SnapLngLat;
|
|
97
|
+
/** The cursor position in screen px, relative to the map container */
|
|
98
|
+
point: ScreenPoint;
|
|
99
|
+
/** The tolerance in screen px (`options.snap.tolerancePx`) */
|
|
100
|
+
tolerancePx: number;
|
|
101
|
+
/** The tolerance converted into degrees of longitude at the current zoom */
|
|
102
|
+
toleranceLngDeg: number;
|
|
103
|
+
/** The tolerance converted into degrees of latitude at the cursor latitude and zoom */
|
|
104
|
+
toleranceLatDeg: number;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* A snapping candidate that snaps to a fixed coordinate.
|
|
108
|
+
*
|
|
109
|
+
* A provider that computed the nearest point on an edge itself can return this shape
|
|
110
|
+
* with kind: 'edge'.
|
|
111
|
+
*/
|
|
112
|
+
export interface SnapPointCandidate {
|
|
113
|
+
/** The kind of the candidate */
|
|
114
|
+
kind: SnapTargetKind;
|
|
115
|
+
/** The coordinate to snap to, `[lng, lat]` in degrees */
|
|
116
|
+
coordinate: Coordinate;
|
|
117
|
+
/** The feature ID it originates from */
|
|
118
|
+
featureId?: string;
|
|
119
|
+
/**
|
|
120
|
+
* The dataset ID it originates from (only for candidates originating from a
|
|
121
|
+
* dataset)
|
|
122
|
+
*/
|
|
123
|
+
datasetId?: string;
|
|
124
|
+
/** The vertex reference it originates from (used to decide on exclusion) */
|
|
125
|
+
vertex?: VertexRef;
|
|
126
|
+
/** A label for the host to show, passed on as `SnapTarget.description` */
|
|
127
|
+
description?: string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* A snapping candidate that snaps to the point of a segment closest to the cursor.
|
|
131
|
+
*
|
|
132
|
+
* The point closest to the cursor is computed by SnapService. Besides real edges
|
|
133
|
+
* (edge), construction guides (guide) are also returned in this shape.
|
|
134
|
+
*/
|
|
135
|
+
export interface SnapSegmentCandidate {
|
|
136
|
+
/** The kind of the candidate (a segment candidate is either an edge or a guide) */
|
|
137
|
+
kind: 'edge' | 'guide';
|
|
138
|
+
/** The start of the segment, `[lng, lat]` in degrees */
|
|
139
|
+
start: Coordinate;
|
|
140
|
+
/** The end of the segment, `[lng, lat]` in degrees */
|
|
141
|
+
end: Coordinate;
|
|
142
|
+
/**
|
|
143
|
+
* For a real edge, the vertex reference of the start. With both references, a click that
|
|
144
|
+
* snapped to the edge can start or end edge tracing
|
|
145
|
+
*/
|
|
146
|
+
startRef?: VertexRef;
|
|
147
|
+
/** For a real edge, the vertex reference of the end */
|
|
148
|
+
endRef?: VertexRef;
|
|
149
|
+
/** The feature ID it originates from */
|
|
150
|
+
featureId?: string;
|
|
151
|
+
/**
|
|
152
|
+
* The dataset ID it originates from (only for candidates originating from a
|
|
153
|
+
* dataset)
|
|
154
|
+
*/
|
|
155
|
+
datasetId?: string;
|
|
156
|
+
/** A label for the host to show, passed on as `SnapTarget.description` */
|
|
157
|
+
description?: string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* A snapping candidate returned by a {@link SnapProvider}: a point or a segment.
|
|
161
|
+
*/
|
|
162
|
+
export type SnapCandidate = SnapPointCandidate | SnapSegmentCandidate;
|
|
163
|
+
/**
|
|
164
|
+
* A source of snapping candidates, such as external data the host wants to snap to.
|
|
165
|
+
*
|
|
166
|
+
* Register one with `draw.snapping.register(provider)`; the call returns a function that
|
|
167
|
+
* unregisters it. The library calls `candidates` for every pointer input while snapping is
|
|
168
|
+
* enabled, then cuts the candidates off by the tolerance and picks the winner by kind
|
|
169
|
+
* (vertex > intersection > edge > guide) and then by distance to the cursor. Candidates of a
|
|
170
|
+
* kind disabled in `options.snap.kinds` are ignored. `candidates` runs on every mouse move,
|
|
171
|
+
* so it should answer from an index rather than scan all the data.
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```ts
|
|
175
|
+
* import type { SnapProvider } from '@sakuzu/maplibre-gl-draw';
|
|
176
|
+
*
|
|
177
|
+
* const stations: [number, number][] = [[139.767, 35.681], [139.7, 35.69]];
|
|
178
|
+
*
|
|
179
|
+
* const stationProvider: SnapProvider = {
|
|
180
|
+
* name: 'stations',
|
|
181
|
+
* candidates: (bbox) =>
|
|
182
|
+
* stations
|
|
183
|
+
* .filter(([lng, lat]) =>
|
|
184
|
+
* lng >= bbox.minX && lng <= bbox.maxX && lat >= bbox.minY && lat <= bbox.maxY,
|
|
185
|
+
* )
|
|
186
|
+
* .map((coordinate) => ({ kind: 'vertex', coordinate, description: 'station' })),
|
|
187
|
+
* };
|
|
188
|
+
*
|
|
189
|
+
* const unregister = draw.snapping.register(stationProvider);
|
|
190
|
+
* // later
|
|
191
|
+
* unregister();
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
export interface SnapProvider {
|
|
195
|
+
/** The provider name (for debugging and for detecting duplicate registrations) */
|
|
196
|
+
readonly name: string;
|
|
197
|
+
/**
|
|
198
|
+
* Lists the candidates near the cursor
|
|
199
|
+
*
|
|
200
|
+
* @param bbox The extent around the cursor widened by the tolerance, in degrees. Candidates
|
|
201
|
+
* outside it may be returned; the library cuts them off
|
|
202
|
+
* @param ctx The cursor position, the tolerance, the exclusions and the modifier keys
|
|
203
|
+
* @returns The candidates. An empty array when there are none
|
|
204
|
+
*/
|
|
205
|
+
candidates(bbox: BoundingBox, ctx: SnapProviderContext): SnapCandidate[];
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The modifier key that stops snapping while it is held, or `'none'` for no such key.
|
|
209
|
+
*/
|
|
210
|
+
export type SnapDisableKey = 'alt' | 'shift' | 'ctrl' | 'meta' | 'none';
|
|
211
|
+
/**
|
|
212
|
+
* The snapping options, given as `options.snap` of `createMapLibreGLDraw`.
|
|
213
|
+
*
|
|
214
|
+
* Every field can be omitted. Snapping applies to the pointer input of every drawing mode,
|
|
215
|
+
* of custom modes and of vertex dragging. Everything except `tolerancePx` and `disableKey`
|
|
216
|
+
* can be switched at runtime through `draw.snapping`.
|
|
217
|
+
*
|
|
218
|
+
* @example
|
|
219
|
+
* ```ts
|
|
220
|
+
* const draw = createMapLibreGLDraw(map, {
|
|
221
|
+
* snap: {
|
|
222
|
+
* tolerancePx: 12,
|
|
223
|
+
* disableKey: 'shift',
|
|
224
|
+
* kinds: { guide: false }, // vertices, edges and intersections only
|
|
225
|
+
* },
|
|
226
|
+
* });
|
|
227
|
+
* ```
|
|
228
|
+
*/
|
|
229
|
+
export interface SnapOptions {
|
|
230
|
+
/** Whether snapping is enabled (default: true). Switch it with `draw.snapping.setEnabled` */
|
|
231
|
+
enabled?: boolean;
|
|
232
|
+
/**
|
|
233
|
+
* The distance from the cursor within which a candidate snaps, in screen px (default: 10).
|
|
234
|
+
* It is converted into degrees at the cursor latitude and the zoom, so it is the same on
|
|
235
|
+
* screen in every direction
|
|
236
|
+
*/
|
|
237
|
+
tolerancePx?: number;
|
|
238
|
+
/**
|
|
239
|
+
* The modifier key that stops snapping while it is held down (default: 'alt';
|
|
240
|
+
* 'none' for no disabling)
|
|
241
|
+
*/
|
|
242
|
+
disableKey?: SnapDisableKey;
|
|
243
|
+
/**
|
|
244
|
+
* The enabled flag of each kind (`vertex`, `edge`, `intersection`, `guide`). An omitted
|
|
245
|
+
* kind is enabled. Switch one with `draw.snapping.setKindEnabled`
|
|
246
|
+
*/
|
|
247
|
+
kinds?: Partial<Record<SnapTargetKind, boolean>>;
|
|
248
|
+
/** Whether datasets are included as snapping targets (default: true) */
|
|
249
|
+
datasets?: boolean;
|
|
250
|
+
/**
|
|
251
|
+
* The step angle of the built-in north-based guides in degrees (default: 45, which gives 8
|
|
252
|
+
* guides; 15 gives 24). A value of 0 or less, or a non-finite value, gives the default.
|
|
253
|
+
* Change it at runtime with `draw.snapping.setGuideStep`
|
|
254
|
+
*/
|
|
255
|
+
guideStepDegrees?: number;
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* The snapping options with every default filled in, as `draw.snapping.getOptions()` returns
|
|
259
|
+
* them.
|
|
260
|
+
*
|
|
261
|
+
* `enabled`, `kinds`, `datasets` and `guideStepDegrees` reflect the changes made at runtime. `kinds` is a copy;
|
|
262
|
+
* rewriting it has no effect.
|
|
263
|
+
*/
|
|
264
|
+
export type ResolvedSnapOptions = Required<Omit<SnapOptions, 'kinds'>> & {
|
|
265
|
+
/** The enabled flag of each kind (every kind is filled in) */
|
|
266
|
+
kinds: Record<SnapTargetKind, boolean>;
|
|
267
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The priority of each kind (smaller wins)
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export const SNAP_KIND_PRIORITY = {
|
|
9
|
+
vertex: 0,
|
|
10
|
+
intersection: 1,
|
|
11
|
+
edge: 2,
|
|
12
|
+
guide: 3,
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Decides whether it is a segment candidate
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export function isSegmentCandidate(candidate) {
|
|
20
|
+
return 'start' in candidate;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* The default of the enabled flag of each kind (all enabled)
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export const DEFAULT_SNAP_KINDS = {
|
|
28
|
+
vertex: true,
|
|
29
|
+
edge: true,
|
|
30
|
+
intersection: true,
|
|
31
|
+
guide: true,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* The defaults of the snapping options
|
|
35
|
+
*
|
|
36
|
+
* kinds is a nested object, so the caller must copy it before rewriting it.
|
|
37
|
+
*
|
|
38
|
+
* @internal
|
|
39
|
+
*/
|
|
40
|
+
export const DEFAULT_SNAP_OPTIONS = {
|
|
41
|
+
enabled: true,
|
|
42
|
+
tolerancePx: 10,
|
|
43
|
+
disableKey: 'alt',
|
|
44
|
+
kinds: DEFAULT_SNAP_KINDS,
|
|
45
|
+
datasets: true,
|
|
46
|
+
guideStepDegrees: 45,
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Normalizes the step angle of the north-based guides: a value of 0 or less, or a non-finite
|
|
50
|
+
* value, gives the default (45 degrees)
|
|
51
|
+
*
|
|
52
|
+
* @internal
|
|
53
|
+
*/
|
|
54
|
+
export function resolveGuideStepDegrees(degrees) {
|
|
55
|
+
return degrees !== undefined && Number.isFinite(degrees) && degrees > 0
|
|
56
|
+
? degrees
|
|
57
|
+
: DEFAULT_SNAP_OPTIONS.guideStepDegrees;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Builds the enabled flag of each kind with the defaults filled in
|
|
61
|
+
*
|
|
62
|
+
* @internal
|
|
63
|
+
*/
|
|
64
|
+
export function resolveSnapKinds(kinds) {
|
|
65
|
+
return { ...DEFAULT_SNAP_KINDS, ...kinds };
|
|
66
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Merges new changes into the existing pendingChanges
|
|
5
|
+
*
|
|
6
|
+
* Because multiple changes occur during a transaction,
|
|
7
|
+
* they need to be gathered into a single StateChanges object.
|
|
8
|
+
*
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export function mergeChanges(pendingChanges, changes) {
|
|
12
|
+
const result = { ...pendingChanges };
|
|
13
|
+
// features
|
|
14
|
+
if (changes.features) {
|
|
15
|
+
if (!result.features) {
|
|
16
|
+
result.features = {};
|
|
17
|
+
}
|
|
18
|
+
if (changes.features.created) {
|
|
19
|
+
result.features.created = [...(result.features.created || []), ...changes.features.created];
|
|
20
|
+
}
|
|
21
|
+
if (changes.features.updated) {
|
|
22
|
+
result.features.updated = [...(result.features.updated || []), ...changes.features.updated];
|
|
23
|
+
}
|
|
24
|
+
if (changes.features.deleted) {
|
|
25
|
+
result.features.deleted = [...(result.features.deleted || []), ...changes.features.deleted];
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// layers
|
|
29
|
+
if (changes.layers) {
|
|
30
|
+
if (!result.layers) {
|
|
31
|
+
result.layers = {};
|
|
32
|
+
}
|
|
33
|
+
if (changes.layers.created) {
|
|
34
|
+
result.layers.created = [...(result.layers.created || []), ...changes.layers.created];
|
|
35
|
+
}
|
|
36
|
+
if (changes.layers.updated) {
|
|
37
|
+
result.layers.updated = [...(result.layers.updated || []), ...changes.layers.updated];
|
|
38
|
+
}
|
|
39
|
+
if (changes.layers.deleted) {
|
|
40
|
+
result.layers.deleted = [...(result.layers.deleted || []), ...changes.layers.deleted];
|
|
41
|
+
}
|
|
42
|
+
if (changes.layers.orderChanged) {
|
|
43
|
+
result.layers.orderChanged = changes.layers.orderChanged;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// groups
|
|
47
|
+
if (changes.groups) {
|
|
48
|
+
if (!result.groups) {
|
|
49
|
+
result.groups = {};
|
|
50
|
+
}
|
|
51
|
+
if (changes.groups.created) {
|
|
52
|
+
result.groups.created = [...(result.groups.created || []), ...changes.groups.created];
|
|
53
|
+
}
|
|
54
|
+
if (changes.groups.updated) {
|
|
55
|
+
result.groups.updated = [...(result.groups.updated || []), ...changes.groups.updated];
|
|
56
|
+
}
|
|
57
|
+
if (changes.groups.deleted) {
|
|
58
|
+
result.groups.deleted = [...(result.groups.deleted || []), ...changes.groups.deleted];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// layerReorder (dedicated to reordering within a layer)
|
|
62
|
+
if (changes.layerReorder) {
|
|
63
|
+
result.layerReorder = changes.layerReorder;
|
|
64
|
+
}
|
|
65
|
+
// groupReorder (dedicated to reordering within a group)
|
|
66
|
+
if (changes.groupReorder) {
|
|
67
|
+
result.groupReorder = changes.groupReorder;
|
|
68
|
+
}
|
|
69
|
+
// selection
|
|
70
|
+
if (changes.selection) {
|
|
71
|
+
result.selection = changes.selection;
|
|
72
|
+
}
|
|
73
|
+
// editing
|
|
74
|
+
if (changes.editing) {
|
|
75
|
+
if (!result.editing) {
|
|
76
|
+
result.editing = {};
|
|
77
|
+
}
|
|
78
|
+
if (changes.editing.started) {
|
|
79
|
+
result.editing.started = [...(result.editing.started || []), ...changes.editing.started];
|
|
80
|
+
}
|
|
81
|
+
if (changes.editing.ended) {
|
|
82
|
+
result.editing.ended = [...(result.editing.ended || []), ...changes.editing.ended];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// tentative
|
|
86
|
+
if (changes.tentative) {
|
|
87
|
+
result.tentative = changes.tentative;
|
|
88
|
+
}
|
|
89
|
+
// mode
|
|
90
|
+
if (changes.mode) {
|
|
91
|
+
result.mode = changes.mode;
|
|
92
|
+
}
|
|
93
|
+
// uiStateChanged
|
|
94
|
+
if (changes.uiStateChanged) {
|
|
95
|
+
result.uiStateChanged = true;
|
|
96
|
+
}
|
|
97
|
+
// metadata
|
|
98
|
+
if (changes.metadata) {
|
|
99
|
+
result.metadata = changes.metadata;
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|