@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,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventEmitter
|
|
3
|
+
*
|
|
4
|
+
* The component that notifies the outside of state changes.
|
|
5
|
+
* Events can be subscribed to in a form such as draw.on('feature.create', ...).
|
|
6
|
+
*/
|
|
7
|
+
import type { DatasetClickEventPayload, MapClickEventPayload, RenderSlot, SnapResult } from '../types/events.js';
|
|
8
|
+
import type { Feature, Group, Layer, Metadata, Mode, SelectionType, UpdateSource } from '../types/model.js';
|
|
9
|
+
/**
|
|
10
|
+
* Names of the editing operations of draw.geometry
|
|
11
|
+
*/
|
|
12
|
+
export type GeometryOperationName = 'union' | 'subtract' | 'intersect' | 'buffer' | 'split';
|
|
13
|
+
/**
|
|
14
|
+
* Notification emitted when a geometric operation has been applied
|
|
15
|
+
*
|
|
16
|
+
* status expresses the outcome of the operation. 'applied' means that a result feature was
|
|
17
|
+
* created; 'empty' means that the operation itself succeeded but the result had no area (an
|
|
18
|
+
* intersection that does not overlap, a subtraction where everything was taken away, a buffer
|
|
19
|
+
* where every input became empty, a split that did not divide the polygon). When it is
|
|
20
|
+
* 'empty', the inputs are not modified at all and resultIds is empty.
|
|
21
|
+
*
|
|
22
|
+
* The result of the boolean editing operations (union / subtract / intersect) is always a
|
|
23
|
+
* single one, so the length of resultIds is at most 1. A buffer creates a result per input, so
|
|
24
|
+
* there can be several. A split produces two or more results. resultId is the first element of
|
|
25
|
+
* resultIds (null when it is empty), a shorthand for subscribers that only deal with
|
|
26
|
+
* operations producing a single result.
|
|
27
|
+
*
|
|
28
|
+
* The inputIds of a split are in the order [the polygon being cut, the line that cuts] (the
|
|
29
|
+
* line is an input of the operation but remains without being removed).
|
|
30
|
+
*/
|
|
31
|
+
export interface GeometryAppliedPayload {
|
|
32
|
+
/** Name of the operation */
|
|
33
|
+
operation: GeometryOperationName;
|
|
34
|
+
/** IDs of the input features (in z order; the last one is in the foreground) */
|
|
35
|
+
inputIds: string[];
|
|
36
|
+
/** ID of the result feature. null when the result is empty */
|
|
37
|
+
resultId: string | null;
|
|
38
|
+
/** IDs of the result features (in z order). An empty array when the result is empty */
|
|
39
|
+
resultIds: string[];
|
|
40
|
+
/** Outcome of the operation */
|
|
41
|
+
status: 'applied' | 'empty';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Every feature change of one store flush (one transaction, or one mutation outside a
|
|
45
|
+
* transaction)
|
|
46
|
+
*
|
|
47
|
+
* It is emitted once per flush that changes features, after the per-feature events of the
|
|
48
|
+
* same flush, and carries all of them. A subscriber that rebuilds a view on any change
|
|
49
|
+
* subscribes to this instead of the per-feature events, so a bulk load of N features costs
|
|
50
|
+
* one rebuild rather than N.
|
|
51
|
+
*/
|
|
52
|
+
export interface FeaturesChangePayload {
|
|
53
|
+
/** The features created */
|
|
54
|
+
created: Feature[];
|
|
55
|
+
/** The features updated, each with the feature before the update */
|
|
56
|
+
updated: {
|
|
57
|
+
feature: Feature;
|
|
58
|
+
previous: Feature;
|
|
59
|
+
}[];
|
|
60
|
+
/** The features deleted, as they were when they were deleted */
|
|
61
|
+
deleted: Feature[];
|
|
62
|
+
/**
|
|
63
|
+
* Source of the flush ('local', 'silent' or 'batch' from core, 'remote' from a replaced
|
|
64
|
+
* store, or a value of a plugin)
|
|
65
|
+
*/
|
|
66
|
+
source: UpdateSource;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* The events of a draw instance by their internal names, with their payloads
|
|
70
|
+
*
|
|
71
|
+
* A plugin subscribes to them with `on` of {@link PluginContext}. They are the events the host
|
|
72
|
+
* receives with `draw.on`, named without the `draw.` prefix: `feature.create` here is
|
|
73
|
+
* `draw.feature.create` there ({@link EventPayloads} describes each one).
|
|
74
|
+
*/
|
|
75
|
+
export interface EventMap {
|
|
76
|
+
/** A feature was created */
|
|
77
|
+
'feature.create': {
|
|
78
|
+
feature: Feature;
|
|
79
|
+
};
|
|
80
|
+
/** A feature was updated (with the feature before the update) */
|
|
81
|
+
'feature.update': {
|
|
82
|
+
feature: Feature;
|
|
83
|
+
previous: Feature;
|
|
84
|
+
};
|
|
85
|
+
/** A feature was deleted */
|
|
86
|
+
'feature.delete': {
|
|
87
|
+
feature: Feature;
|
|
88
|
+
};
|
|
89
|
+
/** Every feature change of one Store notification, after the per-feature events */
|
|
90
|
+
'features.change': FeaturesChangePayload;
|
|
91
|
+
/** The selection changed */
|
|
92
|
+
'selection.change': {
|
|
93
|
+
type: SelectionType | null;
|
|
94
|
+
ids: string[];
|
|
95
|
+
previousType: SelectionType | null;
|
|
96
|
+
previousIds: string[];
|
|
97
|
+
};
|
|
98
|
+
/** The mode changed */
|
|
99
|
+
'mode.change': {
|
|
100
|
+
mode: Mode;
|
|
101
|
+
previousMode: Mode;
|
|
102
|
+
};
|
|
103
|
+
/** A layer was created */
|
|
104
|
+
'layer.create': {
|
|
105
|
+
layer: Layer;
|
|
106
|
+
};
|
|
107
|
+
/** A layer was updated (with the layer before the update) */
|
|
108
|
+
'layer.update': {
|
|
109
|
+
layer: Layer;
|
|
110
|
+
previous: Layer;
|
|
111
|
+
};
|
|
112
|
+
/** A layer was deleted */
|
|
113
|
+
'layer.delete': {
|
|
114
|
+
layer: Layer;
|
|
115
|
+
};
|
|
116
|
+
/** The stacking order of the layers changed */
|
|
117
|
+
'layer.reorder': {
|
|
118
|
+
order: string[];
|
|
119
|
+
previous: string[];
|
|
120
|
+
};
|
|
121
|
+
/** A group was created */
|
|
122
|
+
'group.create': {
|
|
123
|
+
group: Group;
|
|
124
|
+
};
|
|
125
|
+
/** A group was updated (with the group before the update) */
|
|
126
|
+
'group.update': {
|
|
127
|
+
group: Group;
|
|
128
|
+
previous: Group;
|
|
129
|
+
};
|
|
130
|
+
/** A group was deleted */
|
|
131
|
+
'group.delete': {
|
|
132
|
+
group: Group;
|
|
133
|
+
};
|
|
134
|
+
/** The metadata of the document changed */
|
|
135
|
+
'metadata.change': {
|
|
136
|
+
metadata: Metadata;
|
|
137
|
+
previous: Metadata;
|
|
138
|
+
};
|
|
139
|
+
/** The image mode asks the host for an image file, to place at the carried position */
|
|
140
|
+
'image.request': {
|
|
141
|
+
coordinate: [number, number];
|
|
142
|
+
zoom: number;
|
|
143
|
+
layerId: string;
|
|
144
|
+
};
|
|
145
|
+
/** An operation of `draw.geometry` finished */
|
|
146
|
+
'geometry.applied': GeometryAppliedPayload;
|
|
147
|
+
/**
|
|
148
|
+
* Change of the snapping result
|
|
149
|
+
*
|
|
150
|
+
* Emitted when the snapping target changes (and, when snapping to an edge whose coordinates
|
|
151
|
+
* move, when the coordinates change). When snapping is lost, it is emitted once with no
|
|
152
|
+
* target.
|
|
153
|
+
*/
|
|
154
|
+
'snap.change': SnapResult;
|
|
155
|
+
/**
|
|
156
|
+
* Resolution result of the click interception on datasets
|
|
157
|
+
*
|
|
158
|
+
* Emits on one channel whether a click in select mode hit a feature of a dataset
|
|
159
|
+
* (datasetId / feature are carried) or hit nothing (both are null).
|
|
160
|
+
* It is not emitted for a click that hit a feature of the Store.
|
|
161
|
+
*/
|
|
162
|
+
'dataset.click': DatasetClickEventPayload;
|
|
163
|
+
/**
|
|
164
|
+
* A dataset was added
|
|
165
|
+
*
|
|
166
|
+
* Emitted by `addDataset` once the dataset is listed, so a handler can get it
|
|
167
|
+
* by its id. A plugin that follows every dataset (to subscribe to its `change`)
|
|
168
|
+
* subscribes to this and to `dataset.remove`, and lists the datasets that already exist
|
|
169
|
+
* once when it is installed.
|
|
170
|
+
*/
|
|
171
|
+
'dataset.add': {
|
|
172
|
+
datasetId: string;
|
|
173
|
+
};
|
|
174
|
+
/**
|
|
175
|
+
* A dataset was removed
|
|
176
|
+
*
|
|
177
|
+
* Emitted by `removeDataset` and by the `remove` of the dataset, once it is no
|
|
178
|
+
* longer listed. It is not emitted when the draw instance is destroyed. A dataset added
|
|
179
|
+
* again under the same id is a new object, announced by a new `dataset.add`.
|
|
180
|
+
*/
|
|
181
|
+
'dataset.remove': {
|
|
182
|
+
datasetId: string;
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* The order of the datasets changed
|
|
186
|
+
*
|
|
187
|
+
* Emitted by `moveDataset` when it moved a dataset within its side or to
|
|
188
|
+
* another side. `order` is the ids in display order, from the back to the front (the same
|
|
189
|
+
* as `getDatasets`). A move that leaves everything where it was emits nothing, and
|
|
190
|
+
* adding or removing a dataset emits `dataset.add` or `dataset.remove` instead.
|
|
191
|
+
*/
|
|
192
|
+
'dataset.reorder': {
|
|
193
|
+
order: string[];
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Map click in select mode
|
|
197
|
+
*
|
|
198
|
+
* Emits the normalized click as is on one channel, regardless of whether anything was hit
|
|
199
|
+
* and of what was hit (the coordinates are before snapping). It is for read-only
|
|
200
|
+
* subscription and does not affect the selection behavior of the modes. It is used by
|
|
201
|
+
* callers that need "a click anywhere on the map".
|
|
202
|
+
*/
|
|
203
|
+
'map.click': MapClickEventPayload;
|
|
204
|
+
/**
|
|
205
|
+
* Addition or removal of frames (the CustomLayer per interval) and changes of the intervals
|
|
206
|
+
*
|
|
207
|
+
* On receiving this, the host re-places the native layers that correspond to the separators
|
|
208
|
+
* between the frames (it carries the same content as getRenderSlots).
|
|
209
|
+
*/
|
|
210
|
+
'renderslots.change': {
|
|
211
|
+
slots: RenderSlot[];
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Failure of an asynchronous load that no call returns
|
|
215
|
+
*
|
|
216
|
+
* `image`: the image of an Image feature could not be decoded (`featureId`). It is emitted
|
|
217
|
+
* once per feature and image, the decode is not retried, and the feature is drawn without
|
|
218
|
+
* its image. The error is the one that was thrown.
|
|
219
|
+
*/
|
|
220
|
+
'load.error': LoadErrorPayload;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* The payload of the load.error event
|
|
224
|
+
*/
|
|
225
|
+
export interface LoadErrorPayload {
|
|
226
|
+
/** Where the load was: the image of an Image feature */
|
|
227
|
+
source: 'image';
|
|
228
|
+
/** The Image feature whose image failed */
|
|
229
|
+
featureId: string;
|
|
230
|
+
/** What was thrown */
|
|
231
|
+
error: unknown;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Event listener type
|
|
235
|
+
*/
|
|
236
|
+
export type EventListener<K extends keyof EventMap> = (data: EventMap[K]) => void;
|
|
237
|
+
/**
|
|
238
|
+
* EventEmitter interface
|
|
239
|
+
*/
|
|
240
|
+
export interface EventEmitter {
|
|
241
|
+
/**
|
|
242
|
+
* Registers an event listener
|
|
243
|
+
*/
|
|
244
|
+
on<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
|
|
245
|
+
/**
|
|
246
|
+
* Unregisters an event listener
|
|
247
|
+
*/
|
|
248
|
+
off<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
|
|
249
|
+
/**
|
|
250
|
+
* Emits an event
|
|
251
|
+
*/
|
|
252
|
+
emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* EventEmitter implementation
|
|
256
|
+
*/
|
|
257
|
+
export declare class EventEmitterImpl implements EventEmitter {
|
|
258
|
+
private listeners;
|
|
259
|
+
on<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
|
|
260
|
+
off<K extends keyof EventMap>(event: K, listener: EventListener<K>): void;
|
|
261
|
+
emit<K extends keyof EventMap>(event: K, data: EventMap[K]): void;
|
|
262
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* EventEmitter implementation
|
|
5
|
+
*/
|
|
6
|
+
export class EventEmitterImpl {
|
|
7
|
+
constructor() {
|
|
8
|
+
Object.defineProperty(this, "listeners", {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
configurable: true,
|
|
11
|
+
writable: true,
|
|
12
|
+
value: new Map()
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
on(event, listener) {
|
|
16
|
+
if (!this.listeners.has(event)) {
|
|
17
|
+
this.listeners.set(event, new Set());
|
|
18
|
+
}
|
|
19
|
+
this.listeners.get(event).add(listener);
|
|
20
|
+
}
|
|
21
|
+
off(event, listener) {
|
|
22
|
+
const set = this.listeners.get(event);
|
|
23
|
+
if (set) {
|
|
24
|
+
set.delete(listener);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
emit(event, data) {
|
|
28
|
+
const set = this.listeners.get(event);
|
|
29
|
+
if (!set)
|
|
30
|
+
return;
|
|
31
|
+
// Take a snapshot so that listeners being added or removed during emit has no effect,
|
|
32
|
+
// and isolate each one individually so that an exception from a single listener does not
|
|
33
|
+
// drag in the following listeners or the internal processing of the Core (EventBridge and
|
|
34
|
+
// so on).
|
|
35
|
+
for (const listener of [...set]) {
|
|
36
|
+
try {
|
|
37
|
+
listener(data);
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error(`Error in event listener for "${String(event)}":`, error);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BoundingBox, Feature } from '../types/model.js';
|
|
2
|
+
/**
|
|
3
|
+
* A utility function that computes a bounding box (for public use)
|
|
4
|
+
*
|
|
5
|
+
* @param feature the feature
|
|
6
|
+
* @param tileSize the tile size (512 by default)
|
|
7
|
+
*/
|
|
8
|
+
export declare function getBoundingBox(feature: Feature, tileSize?: number): BoundingBox;
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The bounding box of a feature
|
|
5
|
+
*
|
|
6
|
+
* A pure function of the feature (and the tile size for Image). The spatial index of the Store
|
|
7
|
+
* (store/spatial) and the datasets (display/) both use it.
|
|
8
|
+
*/
|
|
9
|
+
import { circleBoundingBox } from '../../geometry/circle.js';
|
|
10
|
+
import { pixelsToDegreesLat, pixelsToDegreesLng, rotateCoordinateOnSphere } from '../math/index.js';
|
|
11
|
+
import { forEachCoordinateDeep } from './coordinates.js';
|
|
12
|
+
import { getCircleRadius, getCreatedZoom, getImageProperties } from './property.js';
|
|
13
|
+
/**
|
|
14
|
+
* Computes the bounding box of a feature
|
|
15
|
+
*
|
|
16
|
+
* For an Image, the size at createdZoom is converted into geographic coordinates
|
|
17
|
+
*/
|
|
18
|
+
function computeBoundingBox(feature, tileSize) {
|
|
19
|
+
const { type, coordinates } = feature;
|
|
20
|
+
// For an Image
|
|
21
|
+
if (type === 'Image') {
|
|
22
|
+
const coord = coordinates;
|
|
23
|
+
const [lng, lat] = coord;
|
|
24
|
+
const props = getImageProperties(feature);
|
|
25
|
+
const style = feature.style;
|
|
26
|
+
const imageWidth = style?.width || props.imageWidth || 100;
|
|
27
|
+
const imageHeight = style?.height || props.imageHeight || 100;
|
|
28
|
+
const scale = props.scale ?? 1;
|
|
29
|
+
// createdZoom defaults to 14 when missing. getImageProperties().createdZoom returns 0 when
|
|
30
|
+
// missing, so ?? does not work; therefore getCreatedZoom(number|undefined) is used.
|
|
31
|
+
const createdZoom = getCreatedZoom(feature) ?? 14;
|
|
32
|
+
const rotation = props.rotation ?? 0;
|
|
33
|
+
const displayWidth = imageWidth * scale;
|
|
34
|
+
const displayHeight = imageHeight * scale;
|
|
35
|
+
// Convert the pixel size into degrees
|
|
36
|
+
const halfWidthDeg = pixelsToDegreesLng(displayWidth / 2, lat, createdZoom, tileSize);
|
|
37
|
+
const halfHeightDeg = pixelsToDegreesLat(displayHeight / 2, lat, createdZoom, tileSize);
|
|
38
|
+
// Compute the bounding box taking rotation into account
|
|
39
|
+
return computeRotatedBoundingBox(lng, lat, halfWidthDeg, halfHeightDeg, rotation);
|
|
40
|
+
}
|
|
41
|
+
// For a Circle
|
|
42
|
+
if (type === 'Circle') {
|
|
43
|
+
const coord = coordinates;
|
|
44
|
+
const [lng, lat] = coord;
|
|
45
|
+
const radiusMeters = getCircleRadius(feature);
|
|
46
|
+
if (!radiusMeters || radiusMeters <= 0) {
|
|
47
|
+
return { minX: lng, minY: lat, maxX: lng, maxY: lat };
|
|
48
|
+
}
|
|
49
|
+
// The extent of the geodesic circle as it is drawn (a circle over a pole spans every
|
|
50
|
+
// longitude up to the pole)
|
|
51
|
+
const extent = circleBoundingBox(coord, radiusMeters);
|
|
52
|
+
if (!extent) {
|
|
53
|
+
return { minX: lng, minY: lat, maxX: lng, maxY: lat };
|
|
54
|
+
}
|
|
55
|
+
const [minX, minY, maxX, maxY] = extent;
|
|
56
|
+
return { minX, minY, maxX, maxY };
|
|
57
|
+
}
|
|
58
|
+
// For Point, LineString, Polygon, Freehand and the Multi types
|
|
59
|
+
return computeCoordinateBoundingBox(feature);
|
|
60
|
+
}
|
|
61
|
+
/** The bounding box for empty or unreadable coordinates (the origin) */
|
|
62
|
+
const EMPTY_BOUNDING_BOX = { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
63
|
+
/**
|
|
64
|
+
* A cache of AABBs determined by the coordinates alone (the key is the coordinate array
|
|
65
|
+
* reference)
|
|
66
|
+
*
|
|
67
|
+
* Premise: coordinate arrays are never rewritten in place (updating coordinates in the Store
|
|
68
|
+
* follows the immutable-update convention of swapping in a new array, both in the core memory
|
|
69
|
+
* implementation and in external store implementations). Therefore the cache stays valid as
|
|
70
|
+
* long as the array reference is the same, and when the coordinates change the key changes so
|
|
71
|
+
* the entry is naturally rebuilt and the old value is reclaimed by the GC. For that reason
|
|
72
|
+
* there is no invalidation logic (the same pattern as the segment grid and the snapping index
|
|
73
|
+
* of hit testing).
|
|
74
|
+
*
|
|
75
|
+
* Image / Circle / custom calculators also depend on things other than the coordinates (size,
|
|
76
|
+
* rotation, radius, tile size), so they are not cached. Point is a single vertex and has no
|
|
77
|
+
* traversal cost, so it is not cached either.
|
|
78
|
+
*/
|
|
79
|
+
const coordinateBoundingBoxCache = new WeakMap();
|
|
80
|
+
/**
|
|
81
|
+
* Computes the bounding box determined by the coordinates alone (with caching)
|
|
82
|
+
*
|
|
83
|
+
* For a selected feature on the order of 100,000 vertices this is called every frame, so on a
|
|
84
|
+
* cache hit it does not traverse and only returns a copy of the value.
|
|
85
|
+
*/
|
|
86
|
+
function computeCoordinateBoundingBox(feature) {
|
|
87
|
+
const { type, coordinates } = feature;
|
|
88
|
+
if (type === 'Point') {
|
|
89
|
+
const [lng, lat] = coordinates;
|
|
90
|
+
return { minX: lng, minY: lat, maxX: lng, maxY: lat };
|
|
91
|
+
}
|
|
92
|
+
// Every other type (the built-in line and area types, and a custom type without its own
|
|
93
|
+
// bounding box calculator) is measured by the extent of its coordinates
|
|
94
|
+
if (!Array.isArray(coordinates)) {
|
|
95
|
+
return { ...EMPTY_BOUNDING_BOX };
|
|
96
|
+
}
|
|
97
|
+
const cached = coordinateBoundingBoxCache.get(coordinates);
|
|
98
|
+
if (cached) {
|
|
99
|
+
// Return a new object every time so that the cache is not polluted if the caller mutates it
|
|
100
|
+
return { ...cached };
|
|
101
|
+
}
|
|
102
|
+
const bbox = computeCoordinateBoundingBoxUncached(type, coordinates);
|
|
103
|
+
coordinateBoundingBoxCache.set(coordinates, bbox);
|
|
104
|
+
return { ...bbox };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Obtains the AABB by traversing the nested coordinates directly
|
|
108
|
+
*
|
|
109
|
+
* It takes the min and max without building an intermediate array (a flattened coordinate
|
|
110
|
+
* sequence).
|
|
111
|
+
*/
|
|
112
|
+
function computeCoordinateBoundingBoxUncached(type, coordinates) {
|
|
113
|
+
let minX = Number.POSITIVE_INFINITY;
|
|
114
|
+
let minY = Number.POSITIVE_INFINITY;
|
|
115
|
+
let maxX = Number.NEGATIVE_INFINITY;
|
|
116
|
+
let maxY = Number.NEGATIVE_INFINITY;
|
|
117
|
+
let count = 0;
|
|
118
|
+
const visit = (coord) => {
|
|
119
|
+
const [cLng, cLat] = coord;
|
|
120
|
+
if (cLng < minX)
|
|
121
|
+
minX = cLng;
|
|
122
|
+
if (cLat < minY)
|
|
123
|
+
minY = cLat;
|
|
124
|
+
if (cLng > maxX)
|
|
125
|
+
maxX = cLng;
|
|
126
|
+
if (cLat > maxY)
|
|
127
|
+
maxY = cLat;
|
|
128
|
+
count++;
|
|
129
|
+
};
|
|
130
|
+
if (type === 'LineString' || type === 'Freehand') {
|
|
131
|
+
const coords = coordinates;
|
|
132
|
+
for (let i = 0; i < coords.length; i++) {
|
|
133
|
+
visit(coords[i]);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (type === 'Polygon') {
|
|
137
|
+
// A Polygon is an array of the outer ring and the inner rings (holes)
|
|
138
|
+
const rings = coordinates;
|
|
139
|
+
for (let r = 0; r < rings.length; r++) {
|
|
140
|
+
const ring = rings[r];
|
|
141
|
+
for (let i = 0; i < ring.length; i++) {
|
|
142
|
+
visit(ring[i]);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
// The Multi types have a nesting depth that differs per type, so a depth-independent
|
|
148
|
+
// traversal is used. The bounding box is simply the union of all the parts.
|
|
149
|
+
forEachCoordinateDeep(coordinates, visit);
|
|
150
|
+
}
|
|
151
|
+
if (count === 0) {
|
|
152
|
+
return { ...EMPTY_BOUNDING_BOX };
|
|
153
|
+
}
|
|
154
|
+
return { minX, minY, maxX, maxY };
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Computes the bounding box taking rotation into account
|
|
158
|
+
*
|
|
159
|
+
* It rotates the four corners using a spherical rotation (Rodrigues' rotation formula) and
|
|
160
|
+
* computes the AABB (axis-aligned bounding box) from the rotated coordinates.
|
|
161
|
+
*
|
|
162
|
+
* @param centerLng the longitude of the center
|
|
163
|
+
* @param centerLat the latitude of the center
|
|
164
|
+
* @param halfWidthDeg the half width (in degrees)
|
|
165
|
+
* @param halfHeightDeg the half height (in degrees)
|
|
166
|
+
* @param rotationDeg the rotation angle (in degrees, counterclockwise)
|
|
167
|
+
* @returns the bounding box
|
|
168
|
+
*/
|
|
169
|
+
function computeRotatedBoundingBox(centerLng, centerLat, halfWidthDeg, halfHeightDeg, rotationDeg) {
|
|
170
|
+
// With no rotation, return a simple AABB
|
|
171
|
+
if (rotationDeg === 0) {
|
|
172
|
+
return {
|
|
173
|
+
minX: centerLng - halfWidthDeg,
|
|
174
|
+
minY: centerLat - halfHeightDeg,
|
|
175
|
+
maxX: centerLng + halfWidthDeg,
|
|
176
|
+
maxY: centerLat + halfHeightDeg,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const center = [centerLng, centerLat];
|
|
180
|
+
// The coordinates of the four corners before rotation
|
|
181
|
+
const corners = [
|
|
182
|
+
[centerLng - halfWidthDeg, centerLat + halfHeightDeg], // top-left (northwest)
|
|
183
|
+
[centerLng + halfWidthDeg, centerLat + halfHeightDeg], // top-right (northeast)
|
|
184
|
+
[centerLng - halfWidthDeg, centerLat - halfHeightDeg], // bottom-left (southwest)
|
|
185
|
+
[centerLng + halfWidthDeg, centerLat - halfHeightDeg], // bottom-right (southeast)
|
|
186
|
+
];
|
|
187
|
+
// Apply the spherical rotation
|
|
188
|
+
const rotatedCorners = corners.map((coord) => rotateCoordinateOnSphere(coord, center, rotationDeg));
|
|
189
|
+
// Compute the AABB from the rotated coordinates
|
|
190
|
+
const lngs = rotatedCorners.map((c) => c[0]);
|
|
191
|
+
const lats = rotatedCorners.map((c) => c[1]);
|
|
192
|
+
return {
|
|
193
|
+
minX: Math.min(...lngs),
|
|
194
|
+
minY: Math.min(...lats),
|
|
195
|
+
maxX: Math.max(...lngs),
|
|
196
|
+
maxY: Math.max(...lats),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* A utility function that computes a bounding box (for public use)
|
|
201
|
+
*
|
|
202
|
+
* @param feature the feature
|
|
203
|
+
* @param tileSize the tile size (512 by default)
|
|
204
|
+
*/
|
|
205
|
+
export function getBoundingBox(feature, tileSize = 512) {
|
|
206
|
+
return computeBoundingBox(feature, tileSize);
|
|
207
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { BoundingBox, Coordinate, Feature } from '../types/model.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether the feature type has edges (whether it is a target of edge snapping)
|
|
4
|
+
*
|
|
5
|
+
* It is aligned with the types that support vertex editing. Point has vertices only,
|
|
6
|
+
* and Circle / Image / Freehand are out of scope.
|
|
7
|
+
*/
|
|
8
|
+
export declare function hasSnapEdges(type: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Whether the segment overlaps the bbox (a cheap preliminary test)
|
|
11
|
+
*
|
|
12
|
+
* The real test against the tolerance is done by SnapService using the distance to
|
|
13
|
+
* the nearest point, so all this guarantees is that nothing is missed.
|
|
14
|
+
*/
|
|
15
|
+
export declare function segmentIntersectsBBox(start: Coordinate, end: Coordinate, bbox: BoundingBox): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Gathers only the edges of a feature that fall within the bbox
|
|
18
|
+
*
|
|
19
|
+
* The result is the same as applying a preliminary bbox filter to
|
|
20
|
+
* collectFeatureSegments; only for a huge part is the listing narrowed down with a
|
|
21
|
+
* segment grid index.
|
|
22
|
+
*/
|
|
23
|
+
export declare function collectFeatureSegmentsInBBox(feature: Feature, bbox: BoundingBox, visit: SegmentVisitor): void;
|