@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
package/dist/api/api.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { subscribeMutationHooks } from '../plugins/mutation-hooks.js';
|
|
4
|
+
import { createDisplayApi } from './display-api.js';
|
|
5
|
+
import { createEventApi } from './event-api.js';
|
|
6
|
+
import { createExtensionApi } from './extension-api.js';
|
|
7
|
+
import { createFeatureApi } from './feature-api.js';
|
|
8
|
+
import { createGeometryApi } from './geometry-operations.js';
|
|
9
|
+
import { createGroupApi } from './group-api.js';
|
|
10
|
+
import { createInputApi } from './input-api.js';
|
|
11
|
+
import { createInstanceApi } from './instance-api.js';
|
|
12
|
+
import { createLayerApi } from './layer-api.js';
|
|
13
|
+
import { createSelectionApi } from './selection-api.js';
|
|
14
|
+
import { createSnappingApi } from './snapping-api.js';
|
|
15
|
+
import { createTopologyApi } from './topology-api.js';
|
|
16
|
+
import { createTracingApi } from './tracing-api.js';
|
|
17
|
+
/**
|
|
18
|
+
* The orchestrator that creates the public API. It composes the sub-apis of each functional
|
|
19
|
+
* domain by spreading.
|
|
20
|
+
*
|
|
21
|
+
* @internal
|
|
22
|
+
*/
|
|
23
|
+
export function createDrawAPI(context, input, eventBridge, customLayer, importExportAPI, lifecycle, extension) {
|
|
24
|
+
const { map, store, eventEmitter, generateFeatureId, autoNameGenerator, hitTestService, boxSelectionRegistry, getActiveLayerId, setActiveLayerId, snapService, topology, trace, pixelRatioSource, } = context;
|
|
25
|
+
const { spatialIndex, pluginManager, datasets, featureCompanions } = extension;
|
|
26
|
+
const { inputNormalizer, inputRouter } = input;
|
|
27
|
+
const { modeManager, renderCoordinator } = lifecycle;
|
|
28
|
+
// The after-mutation hooks of the plugins are fired from the Store notification, so they
|
|
29
|
+
// see every write whatever made it
|
|
30
|
+
const stopMutationHooks = subscribeMutationHooks(store, pluginManager);
|
|
31
|
+
const instanceApi = createInstanceApi({
|
|
32
|
+
map,
|
|
33
|
+
store,
|
|
34
|
+
modeManager,
|
|
35
|
+
eventBridge,
|
|
36
|
+
renderCoordinator,
|
|
37
|
+
inputRouter,
|
|
38
|
+
inputNormalizer,
|
|
39
|
+
customLayer,
|
|
40
|
+
autoNameGenerator,
|
|
41
|
+
pixelRatioSource,
|
|
42
|
+
pluginManager,
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
...instanceApi,
|
|
46
|
+
destroy() {
|
|
47
|
+
instanceApi.destroy();
|
|
48
|
+
// After the plugins are uninstalled (their onUninstall can still read the index)
|
|
49
|
+
stopMutationHooks();
|
|
50
|
+
spatialIndex.destroy();
|
|
51
|
+
},
|
|
52
|
+
...createFeatureApi({ store, generateFeatureId, getActiveLayerId }),
|
|
53
|
+
...createLayerApi({
|
|
54
|
+
store,
|
|
55
|
+
generateFeatureId,
|
|
56
|
+
autoNameGenerator,
|
|
57
|
+
getActiveLayerId,
|
|
58
|
+
setActiveLayerId,
|
|
59
|
+
}),
|
|
60
|
+
...createGroupApi({ store, generateFeatureId, autoNameGenerator }),
|
|
61
|
+
...createSelectionApi({ store }),
|
|
62
|
+
...createGeometryApi({ store, eventEmitter, generateFeatureId }),
|
|
63
|
+
...createDisplayApi({ datasets }),
|
|
64
|
+
...createSnappingApi({ snapService, map }),
|
|
65
|
+
...createTracingApi({ trace }),
|
|
66
|
+
...createTopologyApi({ topology }),
|
|
67
|
+
...createInputApi({ map, inputRouter }),
|
|
68
|
+
...createEventApi({ eventEmitter }),
|
|
69
|
+
...createExtensionApi({
|
|
70
|
+
pluginManager,
|
|
71
|
+
modeManager,
|
|
72
|
+
spatialIndex,
|
|
73
|
+
hitTestService,
|
|
74
|
+
boxSelectionRegistry,
|
|
75
|
+
customLayer: customLayer,
|
|
76
|
+
featureCompanions,
|
|
77
|
+
selectionScope: context.selectionScope,
|
|
78
|
+
snapTargets: context.snapTargets,
|
|
79
|
+
}),
|
|
80
|
+
// The Import/Export API spreads importExportAPI directly
|
|
81
|
+
// (load / export / getSuggestedFileName)
|
|
82
|
+
load: (source, options) => importExportAPI.load(source, options),
|
|
83
|
+
export: (format, options) => importExportAPI.export(format, options),
|
|
84
|
+
getSuggestedFileName: () => importExportAPI.getSuggestedFileName(),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { type Messages } from '../messages.js';
|
|
2
|
+
import type { FeatureStyleConfig } from '../shared/config/feature-style.js';
|
|
3
|
+
import type { RenderingConfig } from '../shared/config/rendering.js';
|
|
4
|
+
import type { SelectionUIConfig } from '../shared/config/selection.js';
|
|
5
|
+
import type { TopologyConfig } from '../shared/config/topology.js';
|
|
6
|
+
import type { TraceOptions } from '../shared/config/trace.js';
|
|
7
|
+
import type { AutoNameConfig } from '../shared/utils/name-generator.js';
|
|
8
|
+
import type { SnapOptions } from '../snapping/types.js';
|
|
9
|
+
import type { DocumentStore, Store } from '../store/store.js';
|
|
10
|
+
import type { Mode } from '../store/types.js';
|
|
11
|
+
/**
|
|
12
|
+
* The options of {@link createMapLibreGLDraw}. Every option can be omitted.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const draw = createMapLibreGLDraw(map, {
|
|
17
|
+
* defaultMode: 'select',
|
|
18
|
+
* clickTolerance: 8,
|
|
19
|
+
* snap: { tolerancePx: 12, kinds: { guide: false } },
|
|
20
|
+
* trace: { enabled: false },
|
|
21
|
+
* topology: { sharedVertexDrag: true },
|
|
22
|
+
* autoName: false,
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export interface Options {
|
|
27
|
+
/** The mode the instance starts in (default `'select'`) */
|
|
28
|
+
defaultMode?: Mode;
|
|
29
|
+
/**
|
|
30
|
+
* How far from a feature a click still hits it, in CSS pixels (default 6)
|
|
31
|
+
*/
|
|
32
|
+
clickTolerance?: number;
|
|
33
|
+
/**
|
|
34
|
+
* How far the mouse moves with the button down before a press becomes a drag, in CSS
|
|
35
|
+
* pixels (default 3)
|
|
36
|
+
*/
|
|
37
|
+
dragThreshold?: number;
|
|
38
|
+
/**
|
|
39
|
+
* The default drawing style of the features, per geometry (points, lines, polygons and so
|
|
40
|
+
* on); the given parts replace the built-in defaults, and a feature's own `style` wins over
|
|
41
|
+
* both
|
|
42
|
+
*/
|
|
43
|
+
style?: Partial<FeatureStyleConfig>;
|
|
44
|
+
/**
|
|
45
|
+
* The look of the selection UI: the bounding box, the resize, rotate, vertex and midpoint
|
|
46
|
+
* handles, and the radius handle, center marker and radius line of a circle (see
|
|
47
|
+
* {@link SelectionUIConfig} for the defaults)
|
|
48
|
+
*/
|
|
49
|
+
selectionStyle?: Partial<SelectionUIConfig>;
|
|
50
|
+
/**
|
|
51
|
+
* The look of the box selection rectangle and the switches of the rendering paths (see
|
|
52
|
+
* {@link RenderingConfig} for the defaults)
|
|
53
|
+
*/
|
|
54
|
+
renderingStyle?: Partial<RenderingConfig>;
|
|
55
|
+
/**
|
|
56
|
+
* The automatic names of new features, layers and groups, such as `Polygon 1` and
|
|
57
|
+
* `Layer 2` (default: enabled)
|
|
58
|
+
*
|
|
59
|
+
* `false` turns it off, and an {@link AutoNameConfig} changes the words or the format. A
|
|
60
|
+
* number used once is not reused. The words are English by default; a host that shows
|
|
61
|
+
* another language translates them here (`typeNames`), not through {@link Options.messages}.
|
|
62
|
+
*/
|
|
63
|
+
autoName?: AutoNameConfig | boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Whether the line widths of the features drawn in a drawing mode follow the zoom (default
|
|
66
|
+
* true)
|
|
67
|
+
*
|
|
68
|
+
* By default a drawing mode records the zoom a feature is drawn at in
|
|
69
|
+
* `properties.createdZoom`, and the widths of its lines and outlines are those of that zoom:
|
|
70
|
+
* they double with each zoom level in and halve with each level out, like lines drawn on
|
|
71
|
+
* paper. An application that wants the widths to stay the same on the screen at every zoom
|
|
72
|
+
* sets `false`; a drawn feature then gets no created zoom, like a feature added through the
|
|
73
|
+
* API. It does not change features already drawn: the widths follow
|
|
74
|
+
* `properties.createdZoom` wherever it is set, so a feature added through the API can set it
|
|
75
|
+
* too. An Image always scales with the map.
|
|
76
|
+
*/
|
|
77
|
+
scaleWithZoom?: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* The snapping configuration
|
|
80
|
+
*
|
|
81
|
+
* When omitted, it is enabled with a tolerance of 10 CSS pixels, it is released while Alt
|
|
82
|
+
* is held, every kind of target (vertex, edge, intersection, guide) is on, and the
|
|
83
|
+
* datasets are targets. The candidates come from the vertices and edges of
|
|
84
|
+
* the Store; more are added with `draw.snapping.register()`. Change it at runtime with
|
|
85
|
+
* {@link MapLibreGLDraw.snapping}.
|
|
86
|
+
*/
|
|
87
|
+
snap?: SnapOptions;
|
|
88
|
+
/**
|
|
89
|
+
* The topology configuration (when omitted, everything is disabled)
|
|
90
|
+
*
|
|
91
|
+
* The settings that keep editing from breaking boundaries shared by adjacent features.
|
|
92
|
+
* With `sharedVertexDrag: true`, dragging a vertex in select mode also moves, by the same
|
|
93
|
+
* amount, every vertex of other visible, unlocked features at exactly the same coordinates,
|
|
94
|
+
* and the drag commits as one change. The modifier of `snap.disableKey` held at the start of
|
|
95
|
+
* a drag releases it for that drag. Change it at runtime with
|
|
96
|
+
* {@link MapLibreGLDraw.topology}.
|
|
97
|
+
*/
|
|
98
|
+
topology?: Partial<TopologyConfig>;
|
|
99
|
+
/**
|
|
100
|
+
* The trace configuration (when omitted, it is enabled)
|
|
101
|
+
*
|
|
102
|
+
* While drawing (draw_line / draw_polygon), when the previous click and this click both
|
|
103
|
+
* snapped to the boundary of the same feature, the vertex sequence between them is taken in
|
|
104
|
+
* automatically. With `enabled: false` a click adds only the point clicked. Change it at
|
|
105
|
+
* runtime with {@link MapLibreGLDraw.tracing}.
|
|
106
|
+
*/
|
|
107
|
+
trace?: TraceOptions;
|
|
108
|
+
/**
|
|
109
|
+
* The document store (when omitted, a new {@link MemoryStore} is used)
|
|
110
|
+
*
|
|
111
|
+
* Give a {@link DocumentStore} of your own to keep the document elsewhere; the library
|
|
112
|
+
* keeps the local state (selection, mode, read-only and so on) around
|
|
113
|
+
* it. A {@link Store} such as a MemoryStore is used as it is.
|
|
114
|
+
*/
|
|
115
|
+
store?: DocumentStore | Store;
|
|
116
|
+
/**
|
|
117
|
+
* Whether to create a default layer on initialization (default: true)
|
|
118
|
+
*
|
|
119
|
+
* When it is false, creating the layers becomes the responsibility of the application.
|
|
120
|
+
* Use it when restoring the layer structure from an external data source, or
|
|
121
|
+
* when managing the layers on your own. Until a layer exists, the drawing modes cannot be
|
|
122
|
+
* entered.
|
|
123
|
+
*/
|
|
124
|
+
initDefaultLayer?: boolean;
|
|
125
|
+
/**
|
|
126
|
+
* The predicate that identifies the "external entries" of the stacking order (when omitted,
|
|
127
|
+
* it is always false)
|
|
128
|
+
*
|
|
129
|
+
* The entries of the layer order for which it returns true are separators, and this library
|
|
130
|
+
* does not draw them. Each interval between separators is drawn by its own MapLibre custom
|
|
131
|
+
* layer (a frame), so the host can place its native layers (vector tiles, raster) between
|
|
132
|
+
* the frames. {@link MapLibreGLDraw.getRenderSlots} lists the frames, and the
|
|
133
|
+
* `draw.renderslots.change` event announces their changes.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* const draw = createMapLibreGLDraw(map, {
|
|
138
|
+
* isExternalEntry: (id) => id.startsWith('native:'),
|
|
139
|
+
* });
|
|
140
|
+
* draw.on('draw.renderslots.change', ({ slots }) => placeNativeLayers(slots));
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
isExternalEntry?: (entryId: string) => boolean;
|
|
144
|
+
/**
|
|
145
|
+
* The render scale (when omitted, the map's `getPixelRatio()` is read each time)
|
|
146
|
+
*
|
|
147
|
+
* Line widths, point sizes and outlines are drawn by converting CSS pixels into physical
|
|
148
|
+
* pixels, so the scale of the backing store being drawn into is needed. By default it is
|
|
149
|
+
* the ratio of the map, which follows the `pixelRatio` the maplibre Map was created with
|
|
150
|
+
* and the device. Pass a value only to draw at another scale than the map's.
|
|
151
|
+
*/
|
|
152
|
+
pixelRatio?: number;
|
|
153
|
+
/**
|
|
154
|
+
* The strings the library returns as values (when omitted, {@link MESSAGES_EN})
|
|
155
|
+
*
|
|
156
|
+
* The given entries replace the English defaults for this instance only; the entries
|
|
157
|
+
* left out keep the default. Legend labels and the descriptions of the snapping guides
|
|
158
|
+
* come from this table. The library ships English only and does no locale detection.
|
|
159
|
+
* The words of generated names ("Layer 1") are not here: they come from
|
|
160
|
+
* {@link Options.autoName}.
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```typescript
|
|
164
|
+
* const draw = createMapLibreGLDraw(map, {
|
|
165
|
+
* messages: {
|
|
166
|
+
* legendOther: 'Autres',
|
|
167
|
+
* legendBelow: (upper) => `Moins de ${upper}`,
|
|
168
|
+
* },
|
|
169
|
+
* });
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
messages?: Partial<Messages>;
|
|
173
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { createCoreBoxSelectionStrategies } from '../dispatcher/hit-test/box-strategies.js';
|
|
4
|
+
import { BoxSelectionStrategyRegistry } from '../dispatcher/hit-test/box-strategy.js';
|
|
5
|
+
import { createGlobeShapeResolver } from '../dispatcher/hit-test/globe-shape.js';
|
|
6
|
+
import { HitTestServiceImpl } from '../dispatcher/hit-test/service.js';
|
|
7
|
+
import { DEFAULT_HIT_TEST_OPTIONS } from '../dispatcher/hit-test/strategies/base.js';
|
|
8
|
+
import { resolveMessages } from '../messages.js';
|
|
9
|
+
import { ModeManagerImpl } from '../modes/manager.js';
|
|
10
|
+
import { DEFAULT_FEATURE_STYLE_CONFIG, mergeFeatureStyleConfig, } from '../shared/config/feature-style.js';
|
|
11
|
+
import { DEFAULT_RENDERING_CONFIG, mergeRenderingConfig } from '../shared/config/rendering.js';
|
|
12
|
+
import { DEFAULT_SELECTION_CONFIG, mergeSelectionUIConfig } from '../shared/config/selection.js';
|
|
13
|
+
import { DEFAULT_TOPOLOGY_CONFIG, mergeTopologyConfig } from '../shared/config/topology.js';
|
|
14
|
+
import { DEFAULT_TRACE_CONFIG, mergeTraceConfig } from '../shared/config/trace.js';
|
|
15
|
+
import { getAnchorProjector } from '../shared/math/index.js';
|
|
16
|
+
import { EventEmitterImpl } from '../shared/utils/event-emitter.js';
|
|
17
|
+
import { createId } from '../shared/utils/id.js';
|
|
18
|
+
import { AutoNameGenerator } from '../shared/utils/name-generator.js';
|
|
19
|
+
import { createPixelRatioSource } from '../shared/utils/pixel-ratio.js';
|
|
20
|
+
import { createSnapTargetsRegistry } from '../snapping/custom-targets.js';
|
|
21
|
+
import { createSnapService } from '../snapping/service.js';
|
|
22
|
+
import { DEFAULT_SNAP_OPTIONS, resolveGuideStepDegrees, resolveSnapKinds, } from '../snapping/types.js';
|
|
23
|
+
import { toStore } from '../store/draw-store.js';
|
|
24
|
+
import { MemoryStore } from '../store/memory.js';
|
|
25
|
+
import { StoreSpatialIndex } from '../store/spatial/store-spatial-index.js';
|
|
26
|
+
import { resolveWritableLayerId } from '../store/writable-layer.js';
|
|
27
|
+
import { createSelectionScope } from '../view/ui/selection-scope.js';
|
|
28
|
+
/**
|
|
29
|
+
* The default options
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export const DEFAULT_OPTIONS = {
|
|
34
|
+
defaultMode: 'select',
|
|
35
|
+
// One default for the hit test and the topmost hit (see DEFAULT_HIT_TEST_OPTIONS)
|
|
36
|
+
clickTolerance: DEFAULT_HIT_TEST_OPTIONS.clickTolerance,
|
|
37
|
+
dragThreshold: 3,
|
|
38
|
+
scaleWithZoom: true,
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Creates a Context
|
|
42
|
+
*
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
45
|
+
export function createContext(map, options = {}) {
|
|
46
|
+
const opts = {
|
|
47
|
+
...DEFAULT_OPTIONS,
|
|
48
|
+
...options,
|
|
49
|
+
defaultMode: options.defaultMode ?? DEFAULT_OPTIONS.defaultMode,
|
|
50
|
+
clickTolerance: options.clickTolerance ?? DEFAULT_OPTIONS.clickTolerance,
|
|
51
|
+
dragThreshold: options.dragThreshold ?? DEFAULT_OPTIONS.dragThreshold,
|
|
52
|
+
scaleWithZoom: options.scaleWithZoom ?? DEFAULT_OPTIONS.scaleWithZoom,
|
|
53
|
+
};
|
|
54
|
+
// Merge the style configuration
|
|
55
|
+
const featureStyle = options.style
|
|
56
|
+
? mergeFeatureStyleConfig(DEFAULT_FEATURE_STYLE_CONFIG, options.style)
|
|
57
|
+
: DEFAULT_FEATURE_STYLE_CONFIG;
|
|
58
|
+
// Merge the selection UI style configuration
|
|
59
|
+
const selectionStyle = options.selectionStyle
|
|
60
|
+
? mergeSelectionUIConfig(DEFAULT_SELECTION_CONFIG, options.selectionStyle)
|
|
61
|
+
: DEFAULT_SELECTION_CONFIG;
|
|
62
|
+
// Merge the rendering configuration
|
|
63
|
+
const renderingConfig = options.renderingStyle
|
|
64
|
+
? mergeRenderingConfig(DEFAULT_RENDERING_CONFIG, options.renderingStyle)
|
|
65
|
+
: DEFAULT_RENDERING_CONFIG;
|
|
66
|
+
// Merge the topology configuration (everything is disabled by default). It is the actual
|
|
67
|
+
// object draw.topology rewrites, so always copy it so that the default object is not shared
|
|
68
|
+
const topology = mergeTopologyConfig(DEFAULT_TOPOLOGY_CONFIG, options.topology ?? {});
|
|
69
|
+
// Merge the trace configuration (it is enabled by default). It is the actual object
|
|
70
|
+
// draw.tracing rewrites, so always copy it so that the default object is not shared
|
|
71
|
+
const trace = mergeTraceConfig(DEFAULT_TRACE_CONFIG, options.trace ?? {});
|
|
72
|
+
// The internal components
|
|
73
|
+
const store = options.store ? toStore(options.store) : new MemoryStore();
|
|
74
|
+
// Derived from the Store: it subscribes before any other component, so a listener that
|
|
75
|
+
// queries it during a notification already sees the change
|
|
76
|
+
const spatialIndex = new StoreSpatialIndex(store);
|
|
77
|
+
// Hit testing for symbols (points) is done in screen space while terrain is enabled.
|
|
78
|
+
// What is injected is the anchor projection of this map, identical to the one the rendering
|
|
79
|
+
// uses. When terrain is disabled, project returns null and the conventional longitude and
|
|
80
|
+
// latitude path keeps working as before.
|
|
81
|
+
const hitTestService = new HitTestServiceImpl(store, spatialIndex, {
|
|
82
|
+
clickTolerance: opts.clickTolerance,
|
|
83
|
+
anchorScreen: {
|
|
84
|
+
project: (coord) => getAnchorProjector(map)?.project(coord[0], coord[1]) ?? null,
|
|
85
|
+
},
|
|
86
|
+
// On the globe the edges are tested along the path they are drawn along
|
|
87
|
+
drawnShape: createGlobeShapeResolver(map),
|
|
88
|
+
});
|
|
89
|
+
// Create the BoxSelectionStrategyRegistry and register the core strategies
|
|
90
|
+
const boxSelectionRegistry = new BoxSelectionStrategyRegistry();
|
|
91
|
+
for (const strategy of createCoreBoxSelectionStrategies()) {
|
|
92
|
+
boxSelectionRegistry.register(strategy);
|
|
93
|
+
}
|
|
94
|
+
const eventEmitter = new EventEmitterImpl();
|
|
95
|
+
// A mode that writes features is entered only while a layer can be written.
|
|
96
|
+
// getWritableLayerId is defined below; the closure reads it only when a mode is set
|
|
97
|
+
const modeManager = new ModeManagerImpl(store, {
|
|
98
|
+
canEnter: (handler) => !handler.writesFeatures || getWritableLayerId() !== '',
|
|
99
|
+
});
|
|
100
|
+
// Create the snapping service (enabled by default, tolerance 10px, temporarily disabled
|
|
101
|
+
// with Alt). The candidates come only from the built-in providers (the vertices and edges of
|
|
102
|
+
// the Store); external providers are added with draw.snapping.register().
|
|
103
|
+
const snapOptions = {
|
|
104
|
+
...DEFAULT_SNAP_OPTIONS,
|
|
105
|
+
...options.snap,
|
|
106
|
+
// kinds is nested, so copy it (so that the default object is not shared)
|
|
107
|
+
kinds: resolveSnapKinds(options.snap?.kinds),
|
|
108
|
+
guideStepDegrees: resolveGuideStepDegrees(options.snap?.guideStepDegrees),
|
|
109
|
+
};
|
|
110
|
+
// The registries of the extension points belong to this instance (nothing is module-level)
|
|
111
|
+
const selectionScope = createSelectionScope();
|
|
112
|
+
const snapTargets = createSnapTargetsRegistry();
|
|
113
|
+
// The messages table belongs to this instance as well
|
|
114
|
+
const messages = resolveMessages(options.messages);
|
|
115
|
+
const snapService = createSnapService({
|
|
116
|
+
store,
|
|
117
|
+
spatialIndex,
|
|
118
|
+
snapTargets,
|
|
119
|
+
eventEmitter,
|
|
120
|
+
options: snapOptions,
|
|
121
|
+
guide: { messages },
|
|
122
|
+
});
|
|
123
|
+
// Create the AutoNameGenerator
|
|
124
|
+
const autoNameGenerator = new AutoNameGenerator(store, options.autoName);
|
|
125
|
+
// Create the default layer (only when initDefaultLayer !== false)
|
|
126
|
+
let activeLayerId;
|
|
127
|
+
if (options.initDefaultLayer !== false) {
|
|
128
|
+
const defaultLayerName = autoNameGenerator.generateLayerName();
|
|
129
|
+
const defaultLayer = {
|
|
130
|
+
id: 'default-layer',
|
|
131
|
+
name: defaultLayerName,
|
|
132
|
+
visible: true,
|
|
133
|
+
locked: false,
|
|
134
|
+
opacity: 1.0,
|
|
135
|
+
order: [],
|
|
136
|
+
};
|
|
137
|
+
store.createLayer(defaultLayer);
|
|
138
|
+
activeLayerId = 'default-layer';
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Creating the layers is the responsibility of the application
|
|
142
|
+
// The initial value is an empty string (it is set later)
|
|
143
|
+
activeLayerId = '';
|
|
144
|
+
}
|
|
145
|
+
// Feature ID generation (a ULID is used to guarantee uniqueness)
|
|
146
|
+
const generateFeatureId = () => createId();
|
|
147
|
+
const setActiveLayerId = (id) => {
|
|
148
|
+
if (store.getLayer(id)) {
|
|
149
|
+
activeLayerId = id;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const getActiveLayerId = () => {
|
|
153
|
+
// If the active layer was deleted, make the first layer active
|
|
154
|
+
if (!store.getLayer(activeLayerId)) {
|
|
155
|
+
const layers = store.getAllLayers();
|
|
156
|
+
if (layers.length > 0) {
|
|
157
|
+
activeLayerId = layers[0].id;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return activeLayerId;
|
|
161
|
+
};
|
|
162
|
+
const getWritableLayerId = () => resolveWritableLayerId(store, getActiveLayerId());
|
|
163
|
+
return {
|
|
164
|
+
map,
|
|
165
|
+
store,
|
|
166
|
+
spatialIndex,
|
|
167
|
+
hitTestService,
|
|
168
|
+
eventEmitter,
|
|
169
|
+
modeManager,
|
|
170
|
+
featureStyle,
|
|
171
|
+
selectionStyle,
|
|
172
|
+
renderingConfig,
|
|
173
|
+
topology,
|
|
174
|
+
trace,
|
|
175
|
+
options: opts,
|
|
176
|
+
messages,
|
|
177
|
+
pixelRatio: options.pixelRatio,
|
|
178
|
+
isExternalEntry: options.isExternalEntry,
|
|
179
|
+
// The ratio of the map is the default: it follows a pixelRatio the map was created with
|
|
180
|
+
pixelRatioSource: createPixelRatioSource(options.pixelRatio, () => map.getPixelRatio()),
|
|
181
|
+
snapOptions,
|
|
182
|
+
snapService,
|
|
183
|
+
autoNameGenerator,
|
|
184
|
+
boxSelectionRegistry,
|
|
185
|
+
selectionScope,
|
|
186
|
+
snapTargets,
|
|
187
|
+
generateFeatureId,
|
|
188
|
+
getCurrentLayerId: getActiveLayerId,
|
|
189
|
+
setActiveLayerId,
|
|
190
|
+
getActiveLayerId,
|
|
191
|
+
getWritableLayerId,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** @internal */
|
|
4
|
+
export function createDisplayApi(deps) {
|
|
5
|
+
const { datasets } = deps;
|
|
6
|
+
return {
|
|
7
|
+
addDataset(options) {
|
|
8
|
+
return datasets.add(options);
|
|
9
|
+
},
|
|
10
|
+
getDataset(id) {
|
|
11
|
+
return datasets.get(id);
|
|
12
|
+
},
|
|
13
|
+
getDatasets() {
|
|
14
|
+
return datasets.list();
|
|
15
|
+
},
|
|
16
|
+
moveDataset(id, placement) {
|
|
17
|
+
return datasets.move(id, placement);
|
|
18
|
+
},
|
|
19
|
+
removeDataset(id) {
|
|
20
|
+
return datasets.remove(id);
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event API
|
|
3
|
+
*
|
|
4
|
+
* Provides on / off for MapLibreGLDraw. Maps the `draw.*` prefix to the internal
|
|
5
|
+
* EventEmitter event names.
|
|
6
|
+
*/
|
|
7
|
+
import type { EventEmitter } from '../shared/utils/event-emitter.js';
|
|
8
|
+
import type { MapLibreGLDraw } from './api.js';
|
|
9
|
+
export type EventApi = Pick<MapLibreGLDraw, 'on' | 'off'>;
|
|
10
|
+
export interface EventApiDeps {
|
|
11
|
+
eventEmitter: EventEmitter;
|
|
12
|
+
}
|
|
13
|
+
export declare function createEventApi(deps: EventApiDeps): EventApi;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
export function createEventApi(deps) {
|
|
4
|
+
const { eventEmitter } = deps;
|
|
5
|
+
return {
|
|
6
|
+
on(event, handler) {
|
|
7
|
+
const internalEvent = event.replace('draw.', '');
|
|
8
|
+
const listener = handler;
|
|
9
|
+
eventEmitter.on(internalEvent, listener);
|
|
10
|
+
return () => eventEmitter.off(internalEvent, listener);
|
|
11
|
+
},
|
|
12
|
+
off(event, handler) {
|
|
13
|
+
const internalEvent = event.replace('draw.', '');
|
|
14
|
+
eventEmitter.off(internalEvent, handler);
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Extension API
|
|
3
|
+
*
|
|
4
|
+
* Provides the extension point API of MapLibreGLDraw.
|
|
5
|
+
* - addPlugin / getPluginApi: plugin registration / lookup
|
|
6
|
+
* - registerMode: registers a custom mode
|
|
7
|
+
* - registerFeatureHandler: registers a custom feature handler (registers the renderer /
|
|
8
|
+
* hitTest / boxSelection / boundingBox / resize calculator / snapping candidates at once)
|
|
9
|
+
* - registerAuxiliaryHandleProvider: registers a provider of auxiliary handles (handles of
|
|
10
|
+
* a plugin's own that are neither vertices nor resize handles)
|
|
11
|
+
* - registerFeatureCompanionProvider: registers a provider of companion rendering and
|
|
12
|
+
* companion hits (things drawn at the z just below the feature and grabbable in the same
|
|
13
|
+
* z order)
|
|
14
|
+
* - addOverlayRenderer: adds a custom overlay renderer
|
|
15
|
+
*
|
|
16
|
+
* Every registration returns the function that cancels it.
|
|
17
|
+
*/
|
|
18
|
+
import type { BoxSelectionStrategyRegistry } from '../dispatcher/hit-test/box-strategy.js';
|
|
19
|
+
import type { HitTestService } from '../dispatcher/hit-test/service.js';
|
|
20
|
+
import type { ModeManager } from '../modes/manager.js';
|
|
21
|
+
import type { PluginManager } from '../plugins/plugin-manager.js';
|
|
22
|
+
import type { SnapTargetsRegistry } from '../snapping/custom-targets.js';
|
|
23
|
+
import type { SpatialIndex } from '../store/spatial/spatial-index.js';
|
|
24
|
+
import type { FeatureCompanionRegistry } from '../view/feature-companion.js';
|
|
25
|
+
import type { CustomLayerInterface } from '../view/layer/index.js';
|
|
26
|
+
import type { SelectionScope } from '../view/ui/selection-scope.js';
|
|
27
|
+
import type { MapLibreGLDraw } from './api.js';
|
|
28
|
+
export type ExtensionApi = Pick<MapLibreGLDraw, 'addPlugin' | 'getPluginApi' | 'registerMode' | 'registerFeatureHandler' | 'registerAuxiliaryHandleProvider' | 'registerFeatureCompanionProvider' | 'addOverlayRenderer'>;
|
|
29
|
+
export interface ExtensionApiDeps {
|
|
30
|
+
pluginManager: PluginManager;
|
|
31
|
+
modeManager: ModeManager;
|
|
32
|
+
spatialIndex: SpatialIndex;
|
|
33
|
+
hitTestService: HitTestService;
|
|
34
|
+
boxSelectionRegistry: BoxSelectionStrategyRegistry;
|
|
35
|
+
customLayer: CustomLayerInterface;
|
|
36
|
+
/** The providers of companion rendering and companion hits (those of this draw instance) */
|
|
37
|
+
featureCompanions: FeatureCompanionRegistry;
|
|
38
|
+
/**
|
|
39
|
+
* The selection scope of this draw instance (selection UI extension points and auxiliary
|
|
40
|
+
* handles). Registrations go here, never into a module-level registry
|
|
41
|
+
*/
|
|
42
|
+
selectionScope: SelectionScope;
|
|
43
|
+
/** The snapping candidates of the custom feature types of this draw instance */
|
|
44
|
+
snapTargets: SnapTargetsRegistry;
|
|
45
|
+
}
|
|
46
|
+
export declare function createExtensionApi(deps: ExtensionApiDeps): ExtensionApi;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
export function createExtensionApi(deps) {
|
|
4
|
+
const { pluginManager, modeManager, spatialIndex, hitTestService, boxSelectionRegistry, customLayer, featureCompanions, selectionScope, snapTargets, } = deps;
|
|
5
|
+
const selectionExtensions = selectionScope.extensions;
|
|
6
|
+
return {
|
|
7
|
+
addPlugin(plugin) {
|
|
8
|
+
return pluginManager.register(plugin);
|
|
9
|
+
},
|
|
10
|
+
getPluginApi(name) {
|
|
11
|
+
return pluginManager.getPluginApi(name);
|
|
12
|
+
},
|
|
13
|
+
registerMode(mode, factory) {
|
|
14
|
+
return modeManager.registerMode(mode, factory);
|
|
15
|
+
},
|
|
16
|
+
registerFeatureHandler(handler) {
|
|
17
|
+
const { type } = handler;
|
|
18
|
+
const cancels = [];
|
|
19
|
+
const add = (cancel) => {
|
|
20
|
+
if (cancel)
|
|
21
|
+
cancels.push(cancel);
|
|
22
|
+
};
|
|
23
|
+
// 1. The bounding box computation of the spatial index (it re-measures the features of
|
|
24
|
+
// the type the Store already holds)
|
|
25
|
+
if (handler.getBoundingBox) {
|
|
26
|
+
add(spatialIndex.setCustomBoundingBoxCalculator?.(type, handler.getBoundingBox));
|
|
27
|
+
}
|
|
28
|
+
// 2. The hit testing strategy
|
|
29
|
+
if (handler.hitTest)
|
|
30
|
+
add(hitTestService.registerStrategy?.(handler.hitTest));
|
|
31
|
+
// 3. The box selection strategy
|
|
32
|
+
if (handler.boxSelection)
|
|
33
|
+
add(boxSelectionRegistry.register(handler.boxSelection));
|
|
34
|
+
// 4. The renderer
|
|
35
|
+
if (handler.renderer)
|
|
36
|
+
add(customLayer.registerFeatureRenderer(type, handler.renderer));
|
|
37
|
+
// 5. The bounding box of the selection UI
|
|
38
|
+
if (handler.getSelectionBoundingBox) {
|
|
39
|
+
add(selectionExtensions.registerBoundingBox(type, handler.getSelectionBoundingBox));
|
|
40
|
+
}
|
|
41
|
+
// 6. The additional resize handles
|
|
42
|
+
if (handler.getAdditionalResizeHandles) {
|
|
43
|
+
add(selectionExtensions.registerAdditionalResizeHandles(type, handler.getAdditionalResizeHandles));
|
|
44
|
+
}
|
|
45
|
+
// 7. The custom resize computation
|
|
46
|
+
if (handler.computeCustomResize) {
|
|
47
|
+
add(selectionExtensions.registerCustomResize(type, handler.computeCustomResize));
|
|
48
|
+
}
|
|
49
|
+
// 8. The resize strategy. A type with the scale strategy also rotates through its
|
|
50
|
+
// rotation property (the rotate operation reads the same strategy)
|
|
51
|
+
if (handler.resizeStrategy) {
|
|
52
|
+
add(selectionExtensions.registerResizeStrategy(type, handler.resizeStrategy));
|
|
53
|
+
}
|
|
54
|
+
// 9. The snapping candidates
|
|
55
|
+
if (handler.getSnapTargets)
|
|
56
|
+
add(snapTargets.register(type, handler.getSnapTargets));
|
|
57
|
+
// 10. The additional reach for candidate narrowing of the hit test
|
|
58
|
+
if (handler.candidateReachPx !== undefined) {
|
|
59
|
+
add(hitTestService.registerCandidateReach?.(type, handler.candidateReachPx));
|
|
60
|
+
}
|
|
61
|
+
// 11. The extent of a point's selection box
|
|
62
|
+
if (handler.getPointFrameExtent) {
|
|
63
|
+
add(selectionExtensions.registerPointFrameExtent(type, handler.getPointFrameExtent));
|
|
64
|
+
}
|
|
65
|
+
// The cancellation undoes every registration above, in the reverse order
|
|
66
|
+
let cancelled = false;
|
|
67
|
+
return () => {
|
|
68
|
+
if (cancelled)
|
|
69
|
+
return;
|
|
70
|
+
cancelled = true;
|
|
71
|
+
for (let i = cancels.length - 1; i >= 0; i--)
|
|
72
|
+
cancels[i]();
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
registerAuxiliaryHandleProvider(provider) {
|
|
76
|
+
return selectionScope.auxiliaryHandles.register(provider);
|
|
77
|
+
},
|
|
78
|
+
registerFeatureCompanionProvider(provider) {
|
|
79
|
+
return featureCompanions.register(provider);
|
|
80
|
+
},
|
|
81
|
+
addOverlayRenderer(renderer) {
|
|
82
|
+
return customLayer.addOverlayRenderer(renderer);
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Store } from '../store/store.js';
|
|
2
|
+
import type { MapLibreGLDraw } from './api.js';
|
|
3
|
+
export type FeatureApi = Pick<MapLibreGLDraw, 'addFeature' | 'getFeature' | 'getAllFeatures' | 'getVisibleFeatures' | 'updateFeature' | 'deleteFeature' | 'deleteAllFeatures'>;
|
|
4
|
+
export interface FeatureApiDeps {
|
|
5
|
+
store: Store;
|
|
6
|
+
generateFeatureId: () => string;
|
|
7
|
+
getActiveLayerId: () => string;
|
|
8
|
+
}
|
|
9
|
+
export declare function createFeatureApi(deps: FeatureApiDeps): FeatureApi;
|
|
10
|
+
/** Whether an update changes nothing but `locked` / `visible` (what a lock still allows) */
|
|
11
|
+
export declare function onlyLockOrVisibility(updates: object): boolean;
|