@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,140 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Property helpers
|
|
5
|
+
*
|
|
6
|
+
* Utilities for handling the properties of a feature (feature.properties) in a type-safe way.
|
|
7
|
+
*
|
|
8
|
+
* This library's own data such as createdZoom/rotation/scale has to round-trip through
|
|
9
|
+
* GeoJSON with the maplibre-gl-draw: prefix, so it is held inside feature.properties under
|
|
10
|
+
* keys without the prefix.
|
|
11
|
+
*/
|
|
12
|
+
import { INTERNAL_PROPERTIES } from '../config/constants.js';
|
|
13
|
+
/**
|
|
14
|
+
* Gets the zoom at which the feature was created (`properties.createdZoom`)
|
|
15
|
+
*
|
|
16
|
+
* The drawing modes record it. Line widths follow the map from that zoom, and an Image is
|
|
17
|
+
* drawn at its size in pixels at that zoom (see {@link FeatureStyle.strokeWidth}).
|
|
18
|
+
*
|
|
19
|
+
* @returns The zoom, or undefined when the feature has none (it then keeps the same width on
|
|
20
|
+
* the screen)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```ts
|
|
24
|
+
* const feature = draw.getFeature(id);
|
|
25
|
+
* const zoom = feature ? getCreatedZoom(feature) : undefined;
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function getCreatedZoom(feature) {
|
|
29
|
+
const value = feature.properties[INTERNAL_PROPERTIES.CREATED_ZOOM];
|
|
30
|
+
return typeof value === 'number' ? value : undefined;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Sets the zoom at which a feature was created, in a `properties` object
|
|
34
|
+
*
|
|
35
|
+
* Use it on the properties of a {@link FeatureInput} before `addFeature`, so that the new
|
|
36
|
+
* feature scales with the map from the current zoom like a drawn one.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```ts
|
|
40
|
+
* const properties: Record<string, unknown> = {};
|
|
41
|
+
* setCreatedZoom(properties, map.getZoom());
|
|
42
|
+
* draw.addFeature({
|
|
43
|
+
* type: 'LineString',
|
|
44
|
+
* coordinates: [
|
|
45
|
+
* [139.76, 35.68],
|
|
46
|
+
* [139.78, 35.69],
|
|
47
|
+
* ],
|
|
48
|
+
* properties,
|
|
49
|
+
* });
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export function setCreatedZoom(properties, zoom) {
|
|
53
|
+
properties[INTERNAL_PROPERTIES.CREATED_ZOOM] = zoom;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Gets the rotation of the feature in degrees (`properties.rotation`, 0 when unset)
|
|
57
|
+
*/
|
|
58
|
+
export function getRotation(feature) {
|
|
59
|
+
const value = feature.properties[INTERNAL_PROPERTIES.ROTATION];
|
|
60
|
+
return typeof value === 'number' ? value : 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Sets the rotation in degrees, in a `properties` object (the properties of a
|
|
64
|
+
* {@link FeatureInput} before `addFeature`, say)
|
|
65
|
+
*/
|
|
66
|
+
export function setRotation(properties, rotation) {
|
|
67
|
+
properties[INTERNAL_PROPERTIES.ROTATION] = rotation;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Gets the scale of the feature (`properties.scale`, 1 when unset), which resizing an Image
|
|
71
|
+
* changes
|
|
72
|
+
*/
|
|
73
|
+
export function getScale(feature) {
|
|
74
|
+
const value = feature.properties[INTERNAL_PROPERTIES.SCALE];
|
|
75
|
+
return typeof value === 'number' ? value : 1;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Sets the scale of the feature
|
|
79
|
+
*/
|
|
80
|
+
export function setScale(properties, scale) {
|
|
81
|
+
properties[INTERNAL_PROPERTIES.SCALE] = scale;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Gets the name of the feature
|
|
85
|
+
*/
|
|
86
|
+
export function getFeatureName(feature) {
|
|
87
|
+
const value = feature.properties.name;
|
|
88
|
+
return typeof value === 'string' ? value : undefined;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Sets the name of the feature
|
|
92
|
+
*/
|
|
93
|
+
export function setFeatureName(properties, name) {
|
|
94
|
+
properties.name = name;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Gets the description of the feature
|
|
98
|
+
*/
|
|
99
|
+
export function getFeatureDescription(feature) {
|
|
100
|
+
const value = feature.properties.description;
|
|
101
|
+
return typeof value === 'string' ? value : undefined;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Sets the description of the feature
|
|
105
|
+
*/
|
|
106
|
+
export function setFeatureDescription(properties, description) {
|
|
107
|
+
properties.description = description;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Gets the properties of an Image feature in a type-safe way.
|
|
111
|
+
*
|
|
112
|
+
* It validates and extracts each field from feature.properties (Record<string, unknown>).
|
|
113
|
+
* Use it instead of a dangerous cast such as `as unknown as ImageProperties`.
|
|
114
|
+
*/
|
|
115
|
+
export function getImageProperties(feature) {
|
|
116
|
+
const p = feature.properties;
|
|
117
|
+
return {
|
|
118
|
+
imageFileId: typeof p.imageFileId === 'string' ? p.imageFileId : '',
|
|
119
|
+
imageWidth: typeof p.imageWidth === 'number' ? p.imageWidth : 0,
|
|
120
|
+
imageHeight: typeof p.imageHeight === 'number' ? p.imageHeight : 0,
|
|
121
|
+
createdZoom: typeof p.createdZoom === 'number' ? p.createdZoom : 0,
|
|
122
|
+
rotation: typeof p.rotation === 'number' ? p.rotation : undefined,
|
|
123
|
+
scale: typeof p.scale === 'number' ? p.scale : undefined,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Gets the radius (meters) of a Circle feature. undefined when it is unset or invalid.
|
|
128
|
+
*/
|
|
129
|
+
export function getCircleRadius(feature) {
|
|
130
|
+
const value = feature.properties.radiusMeters;
|
|
131
|
+
return typeof value === 'number' ? value : undefined;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Gets the angle (degrees) of the radius handle of a Circle feature. The default is 135
|
|
135
|
+
* (toward the southwest).
|
|
136
|
+
*/
|
|
137
|
+
export function getRadiusHandleAngle(feature) {
|
|
138
|
+
const value = feature.properties.radiusHandleAngle;
|
|
139
|
+
return typeof value === 'number' ? value : 135;
|
|
140
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vertex reference utilities
|
|
3
|
+
*
|
|
4
|
+
* A vertex is pointed at by the triple of part number + ring number + vertex index
|
|
5
|
+
* (VertexRef), so comparison and lookup use the functions here rather than numeric === or
|
|
6
|
+
* Array#includes.
|
|
7
|
+
*
|
|
8
|
+
* part is optional, and when omitted it means 0 (the first part). The vertex reference of a
|
|
9
|
+
* single geometry has no part, so comparison treats undefined and 0 as the same.
|
|
10
|
+
*/
|
|
11
|
+
import type { VertexRef } from '../types/model.js';
|
|
12
|
+
/**
|
|
13
|
+
* Gets the part number of a vertex reference (0 when omitted)
|
|
14
|
+
*/
|
|
15
|
+
export declare function getVertexPart(ref: VertexRef): number;
|
|
16
|
+
/**
|
|
17
|
+
* Whether two vertex references point at the same vertex
|
|
18
|
+
*/
|
|
19
|
+
export declare function isSameVertexRef(a: VertexRef, b: VertexRef): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Whether an array of vertex references contains the given vertex
|
|
22
|
+
*/
|
|
23
|
+
export declare function hasVertexRef(refs: readonly VertexRef[], ref: VertexRef): boolean;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Gets the part number of a vertex reference (0 when omitted)
|
|
5
|
+
*/
|
|
6
|
+
export function getVertexPart(ref) {
|
|
7
|
+
return ref.part ?? 0;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Whether two vertex references point at the same vertex
|
|
11
|
+
*/
|
|
12
|
+
export function isSameVertexRef(a, b) {
|
|
13
|
+
return getVertexPart(a) === getVertexPart(b) && a.ring === b.ring && a.index === b.index;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Whether an array of vertex references contains the given vertex
|
|
17
|
+
*/
|
|
18
|
+
export function hasVertexRef(refs, ref) {
|
|
19
|
+
return refs.some((r) => isSameVertexRef(r, ref));
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Creates the snapping candidate registry of one draw instance
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export function createSnapTargetsRegistry() {
|
|
9
|
+
const providers = new Map();
|
|
10
|
+
return {
|
|
11
|
+
register(type, provider) {
|
|
12
|
+
providers.set(type, provider);
|
|
13
|
+
return () => {
|
|
14
|
+
if (providers.get(type) === provider)
|
|
15
|
+
providers.delete(type);
|
|
16
|
+
};
|
|
17
|
+
},
|
|
18
|
+
get: (type) => providers.get(type),
|
|
19
|
+
clear: () => providers.clear(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Distance computation for snapping
|
|
5
|
+
*
|
|
6
|
+
* The tolerance is held in pixels. The conversion between pixels and degrees depends
|
|
7
|
+
* on the latitude and the zoom (in Mercator, 1 pixel in the longitude direction is
|
|
8
|
+
* constant regardless of the latitude, but in the latitude direction it shrinks by
|
|
9
|
+
* cos(lat)). Distances are therefore also converted into pixels before being
|
|
10
|
+
* compared.
|
|
11
|
+
*/
|
|
12
|
+
import { DEFAULT_TILE_SIZE, pixelsToDegreesLat, pixelsToDegreesLng } from '../shared/math/index.js';
|
|
13
|
+
/**
|
|
14
|
+
* Computes the degrees per pixel from the latitude of the cursor position and the
|
|
15
|
+
* zoom
|
|
16
|
+
*
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export function degreesPerPixel(latitude, zoom, tileSize = DEFAULT_TILE_SIZE) {
|
|
20
|
+
return {
|
|
21
|
+
lng: pixelsToDegreesLng(1, latitude, zoom, tileSize),
|
|
22
|
+
lat: pixelsToDegreesLat(1, latitude, zoom, tileSize),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Computes the distance between 2 points in pixels
|
|
27
|
+
*
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
export function distanceInPixels(a, b, perPixel) {
|
|
31
|
+
const dx = (a[0] - b[0]) / perPixel.lng;
|
|
32
|
+
const dy = (a[1] - b[1]) / perPixel.lat;
|
|
33
|
+
return Math.sqrt(dx * dx + dy * dy);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Computes the point on a segment closest to the cursor
|
|
37
|
+
*
|
|
38
|
+
* The projection is done in pixel space (staying in degree space would distort the
|
|
39
|
+
* longitude direction at high latitudes). The returned value never goes beyond the
|
|
40
|
+
* end points of the segment.
|
|
41
|
+
*
|
|
42
|
+
* @internal
|
|
43
|
+
*/
|
|
44
|
+
export function nearestPointOnSegment(point, start, end, perPixel) {
|
|
45
|
+
const px = point[0] / perPixel.lng;
|
|
46
|
+
const py = point[1] / perPixel.lat;
|
|
47
|
+
const ax = start[0] / perPixel.lng;
|
|
48
|
+
const ay = start[1] / perPixel.lat;
|
|
49
|
+
const bx = end[0] / perPixel.lng;
|
|
50
|
+
const by = end[1] / perPixel.lat;
|
|
51
|
+
const dx = bx - ax;
|
|
52
|
+
const dy = by - ay;
|
|
53
|
+
const lengthSquared = dx * dx + dy * dy;
|
|
54
|
+
// A segment of length 0 is its start point itself
|
|
55
|
+
if (lengthSquared === 0) {
|
|
56
|
+
return [start[0], start[1]];
|
|
57
|
+
}
|
|
58
|
+
let t = ((px - ax) * dx + (py - ay) * dy) / lengthSquared;
|
|
59
|
+
t = Math.max(0, Math.min(1, t));
|
|
60
|
+
return [start[0] + t * (end[0] - start[0]), start[1] + t * (end[1] - start[1])];
|
|
61
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapping module
|
|
3
|
+
*
|
|
4
|
+
* It provides snapping (SnapService) and its extension point (SnapProvider).
|
|
5
|
+
* The replacement of the coordinates is done by InputRouter.
|
|
6
|
+
*
|
|
7
|
+
* Only the symbols that src/index.ts publishes are listed here (see "The public
|
|
8
|
+
* surface" in CONTRIBUTING.md). Internal code imports from the defining file.
|
|
9
|
+
*/
|
|
10
|
+
export type { SnapIndicatorStyles } from './indicator.js';
|
|
11
|
+
export { DEFAULT_SNAP_GUIDE_LINE_STYLE, DEFAULT_SNAP_INDICATOR_STYLES } from './indicator.js';
|
|
12
|
+
export type { GuideSnapProviderDeps, GuideSnapProviderOptions } from './providers/guide.js';
|
|
13
|
+
export { createGuideSnapProvider } from './providers/guide.js';
|
|
14
|
+
export type { ResolvedSnapOptions, SnapCandidate, SnapContext, SnapDisableKey, SnapExcludeVertex, SnapLngLat, SnapOptions, SnapPointCandidate, SnapProvider, SnapProviderContext, SnapResult, SnapSegmentCandidate, SnapTarget, SnapTargetKind, SnapTargetSegment, } from './types.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PointStyle } from '../shared/types/style.js';
|
|
2
|
+
import type { SDFStrokeStyle } from '../view/renderers/line/sdf-line.js';
|
|
3
|
+
import type { SnapTargetKind } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* The symbol drawn at the snapped point, per kind of snap target.
|
|
6
|
+
*/
|
|
7
|
+
export type SnapIndicatorStyles = Record<SnapTargetKind, PointStyle>;
|
|
8
|
+
/**
|
|
9
|
+
* The style of the guide line drawn under the symbol while a guide is snapped to: 1 px, the
|
|
10
|
+
* snap color `#00C7BE`, dashed `[4, 4]` (distinct from the `[8, 6]` of the drawing in
|
|
11
|
+
* progress).
|
|
12
|
+
*/
|
|
13
|
+
export declare const DEFAULT_SNAP_GUIDE_LINE_STYLE: SDFStrokeStyle;
|
|
14
|
+
/**
|
|
15
|
+
* The symbols drawn at the snapped point, all in the snap color `#00C7BE`: `vertex` an
|
|
16
|
+
* outlined circle of 14 px, `edge` an outlined square of 12 px, `intersection` a filled
|
|
17
|
+
* circle of 8 px and `guide` an outlined circle of 10 px.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DEFAULT_SNAP_INDICATOR_STYLES: SnapIndicatorStyles;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** The snapping color (#00C7BE) */
|
|
4
|
+
const SNAP_COLOR = [0.0, 0.78, 0.745, 1.0];
|
|
5
|
+
const VERTEX_STYLE = {
|
|
6
|
+
shape: 'circle',
|
|
7
|
+
size: 14,
|
|
8
|
+
fillColor: SNAP_COLOR,
|
|
9
|
+
fillOpacity: 0,
|
|
10
|
+
strokeColor: SNAP_COLOR,
|
|
11
|
+
strokeWidth: 2,
|
|
12
|
+
strokeOpacity: 1.0,
|
|
13
|
+
};
|
|
14
|
+
const EDGE_STYLE = {
|
|
15
|
+
shape: 'square',
|
|
16
|
+
size: 12,
|
|
17
|
+
fillColor: SNAP_COLOR,
|
|
18
|
+
fillOpacity: 0,
|
|
19
|
+
strokeColor: SNAP_COLOR,
|
|
20
|
+
strokeWidth: 2,
|
|
21
|
+
strokeOpacity: 1.0,
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* The symbol of an intersection
|
|
25
|
+
*
|
|
26
|
+
* To tell it apart from a vertex (a circle with an outline only), it is a slightly
|
|
27
|
+
* smaller filled circle. The shapes PointShapeRenderer can actually draw are the
|
|
28
|
+
* circle and the square, so a diamond cannot be used.
|
|
29
|
+
*/
|
|
30
|
+
const INTERSECTION_STYLE = {
|
|
31
|
+
shape: 'circle',
|
|
32
|
+
size: 8,
|
|
33
|
+
fillColor: SNAP_COLOR,
|
|
34
|
+
fillOpacity: 1.0,
|
|
35
|
+
strokeColor: SNAP_COLOR,
|
|
36
|
+
strokeWidth: 0,
|
|
37
|
+
strokeOpacity: 0,
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* The symbol of a guide
|
|
41
|
+
*
|
|
42
|
+
* It appears together with the guide line (dashed), so the point is a smallish circle
|
|
43
|
+
* with an outline.
|
|
44
|
+
*/
|
|
45
|
+
const GUIDE_STYLE = {
|
|
46
|
+
shape: 'circle',
|
|
47
|
+
size: 10,
|
|
48
|
+
fillColor: SNAP_COLOR,
|
|
49
|
+
fillOpacity: 0,
|
|
50
|
+
strokeColor: SNAP_COLOR,
|
|
51
|
+
strokeWidth: 2,
|
|
52
|
+
strokeOpacity: 1.0,
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* The dash pattern of a guide line (told apart from the [8, 6] of Tentative)
|
|
56
|
+
*/
|
|
57
|
+
const GUIDE_DASH_ARRAY = [4, 4];
|
|
58
|
+
/**
|
|
59
|
+
* The style of the guide line drawn under the symbol while a guide is snapped to: 1 px, the
|
|
60
|
+
* snap color `#00C7BE`, dashed `[4, 4]` (distinct from the `[8, 6]` of the drawing in
|
|
61
|
+
* progress).
|
|
62
|
+
*/
|
|
63
|
+
export const DEFAULT_SNAP_GUIDE_LINE_STYLE = {
|
|
64
|
+
width: 1,
|
|
65
|
+
color: SNAP_COLOR,
|
|
66
|
+
opacity: 1.0,
|
|
67
|
+
lineStyle: 'dashed',
|
|
68
|
+
dashArray: GUIDE_DASH_ARRAY,
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* The symbols drawn at the snapped point, all in the snap color `#00C7BE`: `vertex` an
|
|
72
|
+
* outlined circle of 14 px, `edge` an outlined square of 12 px, `intersection` a filled
|
|
73
|
+
* circle of 8 px and `guide` an outlined circle of 10 px.
|
|
74
|
+
*/
|
|
75
|
+
export const DEFAULT_SNAP_INDICATOR_STYLES = {
|
|
76
|
+
vertex: VERTEX_STYLE,
|
|
77
|
+
edge: EDGE_STYLE,
|
|
78
|
+
intersection: INTERSECTION_STYLE,
|
|
79
|
+
guide: GUIDE_STYLE,
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* The renderer of the snapping indicator
|
|
83
|
+
*
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
export class SnapIndicatorRenderer {
|
|
87
|
+
constructor(deps) {
|
|
88
|
+
Object.defineProperty(this, "name", {
|
|
89
|
+
enumerable: true,
|
|
90
|
+
configurable: true,
|
|
91
|
+
writable: true,
|
|
92
|
+
value: 'snap-indicator'
|
|
93
|
+
});
|
|
94
|
+
Object.defineProperty(this, "order", {
|
|
95
|
+
enumerable: true,
|
|
96
|
+
configurable: true,
|
|
97
|
+
writable: true,
|
|
98
|
+
value: 'overlay'
|
|
99
|
+
});
|
|
100
|
+
Object.defineProperty(this, "snapService", {
|
|
101
|
+
enumerable: true,
|
|
102
|
+
configurable: true,
|
|
103
|
+
writable: true,
|
|
104
|
+
value: void 0
|
|
105
|
+
});
|
|
106
|
+
Object.defineProperty(this, "styles", {
|
|
107
|
+
enumerable: true,
|
|
108
|
+
configurable: true,
|
|
109
|
+
writable: true,
|
|
110
|
+
value: void 0
|
|
111
|
+
});
|
|
112
|
+
Object.defineProperty(this, "guideLineStyle", {
|
|
113
|
+
enumerable: true,
|
|
114
|
+
configurable: true,
|
|
115
|
+
writable: true,
|
|
116
|
+
value: void 0
|
|
117
|
+
});
|
|
118
|
+
this.snapService = deps.snapService;
|
|
119
|
+
this.styles = { ...DEFAULT_SNAP_INDICATOR_STYLES, ...deps.styles };
|
|
120
|
+
this.guideLineStyle = deps.guideLineStyle ?? DEFAULT_SNAP_GUIDE_LINE_STYLE;
|
|
121
|
+
}
|
|
122
|
+
onAdd(_gl, _map) {
|
|
123
|
+
// It uses the existing drawing primitives, so it holds no GPU resources of its own
|
|
124
|
+
}
|
|
125
|
+
draw(projectionData, zoom, context) {
|
|
126
|
+
const result = this.snapService.getResult();
|
|
127
|
+
if (!result?.target)
|
|
128
|
+
return;
|
|
129
|
+
const target = result.target;
|
|
130
|
+
// For a guide, the guide line of the snapping target itself is shown dashed (laid
|
|
131
|
+
// under the symbol)
|
|
132
|
+
if (target.kind === 'guide' && target.segment) {
|
|
133
|
+
const line = [
|
|
134
|
+
[target.segment.start[0], target.segment.start[1]],
|
|
135
|
+
[target.segment.end[0], target.segment.end[1]],
|
|
136
|
+
];
|
|
137
|
+
context.sdfLineRenderer.draw(line, this.guideLineStyle, { widthUnit: 'pixels', closed: false }, zoom, projectionData);
|
|
138
|
+
}
|
|
139
|
+
const style = this.styles[target.kind];
|
|
140
|
+
context.pointShapeRenderer.draw([result.lngLat.lng, result.lngLat.lat], style, zoom);
|
|
141
|
+
}
|
|
142
|
+
onRemove() {
|
|
143
|
+
// There are no resources to release
|
|
144
|
+
}
|
|
145
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Snapping providers for datasets (vertex, edge, intersection)
|
|
3
|
+
*
|
|
4
|
+
* They add the reference data imported from the library (datasets)
|
|
5
|
+
* as passive snapping targets. They never touch the data itself; they only read the
|
|
6
|
+
* features the dataset holds.
|
|
7
|
+
*
|
|
8
|
+
* The targets are only the displayed features of a displayed (visible) dataset.
|
|
9
|
+
* Whether it is interactive is not looked at (snapping works on what is visible).
|
|
10
|
+
*
|
|
11
|
+
* The candidates are listed in the same manner as the Store version
|
|
12
|
+
* (providers/store.ts): vertices are gathered with computeVertexHandles and edges
|
|
13
|
+
* with collectFeatureSegments. Both featureId and datasetId are attached to a
|
|
14
|
+
* candidate, and the vertex references of both ends are attached to an edge (tracing
|
|
15
|
+
* reads them).
|
|
16
|
+
*
|
|
17
|
+
* For intersections, the pairs of segments of "display x display" and
|
|
18
|
+
* "display x Store" are computed (Store x Store is the responsibility of
|
|
19
|
+
* providers/intersection.ts).
|
|
20
|
+
*/
|
|
21
|
+
import type { DatasetManager } from '../../display/manager.js';
|
|
22
|
+
import { type Messages } from '../../messages.js';
|
|
23
|
+
import type { SpatialIndex } from '../../store/spatial/spatial-index.js';
|
|
24
|
+
import type { Store } from '../../store/store.js';
|
|
25
|
+
import type { BoundingBox, Feature } from '../../store/types.js';
|
|
26
|
+
import type { SnapTargetsRegistry } from '../custom-targets.js';
|
|
27
|
+
import type { SnapProvider } from '../types.js';
|
|
28
|
+
/**
|
|
29
|
+
* The dependencies of the providers for datasets
|
|
30
|
+
*/
|
|
31
|
+
export interface DisplaySnapProviderDeps {
|
|
32
|
+
/** The manager of the datasets */
|
|
33
|
+
datasets: DatasetManager;
|
|
34
|
+
/** The Store (used as the counterpart of an intersection) */
|
|
35
|
+
store: Store;
|
|
36
|
+
/** The SpatialIndex (used as the counterpart of an intersection) */
|
|
37
|
+
spatialIndex: SpatialIndex;
|
|
38
|
+
/** Whether snapping to the data is enabled (options.datasets of SnapService) */
|
|
39
|
+
isEnabled: () => boolean;
|
|
40
|
+
/** The snapping candidates of the custom feature types of this draw instance */
|
|
41
|
+
snapTargets?: SnapTargetsRegistry;
|
|
42
|
+
/**
|
|
43
|
+
* The messages table the description of an intersection comes from (the same entry as
|
|
44
|
+
* an intersection originating from the Store; default: English)
|
|
45
|
+
*/
|
|
46
|
+
messages?: Pick<Messages, 'snapIntersection'>;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The full set of providers that were built
|
|
50
|
+
*/
|
|
51
|
+
export interface DisplaySnapProviders {
|
|
52
|
+
/** The vertex, edge and intersection providers */
|
|
53
|
+
providers: SnapProvider[];
|
|
54
|
+
/**
|
|
55
|
+
* Looks up a feature of a dataset
|
|
56
|
+
*
|
|
57
|
+
* This is the entry point through which tracing resolves the feature of a snapping
|
|
58
|
+
* target (it is wired to ModeContext.getDatasetFeature).
|
|
59
|
+
*/
|
|
60
|
+
getFeature(datasetId: string, featureId: string): Feature | null;
|
|
61
|
+
/**
|
|
62
|
+
* Looks up the features of a displayed dataset that fall within an extent
|
|
63
|
+
*
|
|
64
|
+
* This is the entry point through which tracing gathers the material for the graph
|
|
65
|
+
* of edges (it is wired to ModeContext.getDatasetTraceFeatures).
|
|
66
|
+
*/
|
|
67
|
+
queryFeatures(bbox: BoundingBox): Feature[];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Builds the snapping providers for datasets
|
|
71
|
+
*/
|
|
72
|
+
export declare function createDisplaySnapProviders(deps: DisplaySnapProviderDeps): DisplaySnapProviders;
|