@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,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Display module
|
|
3
|
+
*
|
|
4
|
+
* Read-only layers that show large amounts of data (datasets). They are a
|
|
5
|
+
* path independent of the Store and do not go through the mechanisms of editing,
|
|
6
|
+
* undo or events.
|
|
7
|
+
*
|
|
8
|
+
* Only the symbols that src/index.ts publishes are listed here (see "The public
|
|
9
|
+
* surface" in CONTRIBUTING.md). Internal code imports from the defining file.
|
|
10
|
+
*/
|
|
11
|
+
export type { DatasetColumn, DatasetColumnarGeometry, DatasetColumnarGeometryType, DatasetColumnarInput, DatasetColumnarMixedGeometry, DatasetColumnarPrepared, DatasetDictionaryCodes, DatasetDictionaryColumn, } from './columnar/types.js';
|
|
12
|
+
export type { DatasetCollisionThinning, DatasetThinningStats, ResolvedCollisionThinning, } from './thinning.js';
|
|
13
|
+
export type { Dataset, DatasetBaseStyle, DatasetChangePayload, DatasetClickEventPayload, DatasetClickPayload, DatasetEventMap, DatasetFeatureInput, DatasetFeatureProvider, DatasetHoverPayload, DatasetOptions, DatasetOrder, DatasetPlacement, DatasetZoomScale, } from './types.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Creates the interception
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export function createDisplayInteractions(deps) {
|
|
9
|
+
const { manager, hitTestTopmost, notifyClick } = deps;
|
|
10
|
+
/** The dataset id and feature id being hovered */
|
|
11
|
+
let hoveredDatasetId = null;
|
|
12
|
+
let hoveredFeatureId = null;
|
|
13
|
+
function toCoordinate(event) {
|
|
14
|
+
return [event.lngLat.lng, event.lngLat.lat];
|
|
15
|
+
}
|
|
16
|
+
function clearHover(lngLat) {
|
|
17
|
+
if (hoveredDatasetId === null)
|
|
18
|
+
return;
|
|
19
|
+
const previous = manager.getInternal(hoveredDatasetId);
|
|
20
|
+
const datasetId = hoveredDatasetId;
|
|
21
|
+
hoveredDatasetId = null;
|
|
22
|
+
hoveredFeatureId = null;
|
|
23
|
+
// Report with feature: null that it left the target
|
|
24
|
+
previous?.emit('hover', { datasetId, feature: null, row: null, lngLat });
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
handleClick(event) {
|
|
28
|
+
if (!manager.hasAny())
|
|
29
|
+
return;
|
|
30
|
+
const top = hitTestTopmost(event);
|
|
31
|
+
// Nothing happens when a feature of the Store is in front (that is the domain of the
|
|
32
|
+
// Store selection; neither the click of a dataset nor a no-hit notification is
|
|
33
|
+
// emitted). A companion of a feature (feature companion) is likewise the domain of the
|
|
34
|
+
// Store side, and the click is handed to the provider by the select mode.
|
|
35
|
+
if (top?.kind === 'store' || top?.kind === 'companion')
|
|
36
|
+
return;
|
|
37
|
+
const coordinate = toCoordinate(event);
|
|
38
|
+
if (top?.kind === 'dataset' && top.feature) {
|
|
39
|
+
// A feature of an interactive dataset was hit. Both the click of the dataset and
|
|
40
|
+
// the notification of the resolved result are emitted
|
|
41
|
+
const row = top.row ?? -1;
|
|
42
|
+
manager.getInternal(top.dataset.id)?.emit('click', {
|
|
43
|
+
datasetId: top.dataset.id,
|
|
44
|
+
feature: top.feature,
|
|
45
|
+
row,
|
|
46
|
+
lngLat: coordinate,
|
|
47
|
+
});
|
|
48
|
+
notifyClick?.({
|
|
49
|
+
datasetId: top.dataset.id,
|
|
50
|
+
feature: top.feature,
|
|
51
|
+
row,
|
|
52
|
+
lngLat: coordinate,
|
|
53
|
+
});
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Nothing was there, or a non-interactive dataset merely blocked it: it is reported as
|
|
57
|
+
// a no-hit (the source of "click on empty space to deselect" on the host side)
|
|
58
|
+
notifyClick?.({ datasetId: null, feature: null, row: null, lngLat: coordinate });
|
|
59
|
+
},
|
|
60
|
+
handleMouseMove(event) {
|
|
61
|
+
const coordinate = toCoordinate(event);
|
|
62
|
+
if (!manager.hasAny()) {
|
|
63
|
+
clearHover(coordinate);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const top = hitTestTopmost(event);
|
|
67
|
+
if (top?.kind !== 'dataset' || !top.feature) {
|
|
68
|
+
clearHover(coordinate);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
if (top.dataset.id === hoveredDatasetId && top.feature.id === hoveredFeatureId) {
|
|
72
|
+
// Nothing fires while the pointer only moves over the same feature
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
clearHover(coordinate);
|
|
76
|
+
hoveredDatasetId = top.dataset.id;
|
|
77
|
+
hoveredFeatureId = top.feature.id;
|
|
78
|
+
manager.getInternal(top.dataset.id)?.emit('hover', {
|
|
79
|
+
datasetId: top.dataset.id,
|
|
80
|
+
feature: top.feature,
|
|
81
|
+
row: top.row ?? null,
|
|
82
|
+
lngLat: coordinate,
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
reset() {
|
|
86
|
+
hoveredDatasetId = null;
|
|
87
|
+
hoveredFeatureId = null;
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { DatasetImpl } from './dataset.js';
|
|
4
|
+
/**
|
|
5
|
+
* Default debounce time of the provider (ms)
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_PROVIDER_DEBOUNCE_MS = 200;
|
|
10
|
+
/**
|
|
11
|
+
* Manager of the datasets
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export class DatasetManager {
|
|
16
|
+
constructor(deps) {
|
|
17
|
+
/** Index by id. The order is held by ordered */
|
|
18
|
+
Object.defineProperty(this, "datasets", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: new Map()
|
|
23
|
+
});
|
|
24
|
+
/**
|
|
25
|
+
* The datasets in display order (from the back to the front)
|
|
26
|
+
*
|
|
27
|
+
* They are ordered as the below-store group, the layer-order group and the above-store group.
|
|
28
|
+
* Within each side, the later in the array, the more in front. The rendering, the hit testing
|
|
29
|
+
* and the listing all look only at this single sequence.
|
|
30
|
+
*
|
|
31
|
+
* Only the layer-order group is an exception: the order of this array does not decide their
|
|
32
|
+
* stacking order (the truth of the order is the stacking order of the Store,
|
|
33
|
+
* `getLayerOrder()`, alone).
|
|
34
|
+
*/
|
|
35
|
+
Object.defineProperty(this, "ordered", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true,
|
|
39
|
+
value: []
|
|
40
|
+
});
|
|
41
|
+
Object.defineProperty(this, "deps", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true,
|
|
45
|
+
value: void 0
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(this, "unsubscribeViewport", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
configurable: true,
|
|
50
|
+
writable: true,
|
|
51
|
+
value: null
|
|
52
|
+
});
|
|
53
|
+
Object.defineProperty(this, "providerDebounceMs", {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
configurable: true,
|
|
56
|
+
writable: true,
|
|
57
|
+
value: void 0
|
|
58
|
+
});
|
|
59
|
+
/** Set by destroy: nothing can be added afterwards (it would never be disposed) */
|
|
60
|
+
Object.defineProperty(this, "destroyed", {
|
|
61
|
+
enumerable: true,
|
|
62
|
+
configurable: true,
|
|
63
|
+
writable: true,
|
|
64
|
+
value: false
|
|
65
|
+
});
|
|
66
|
+
this.deps = deps;
|
|
67
|
+
this.providerDebounceMs = deps.providerDebounceMs ?? DEFAULT_PROVIDER_DEBOUNCE_MS;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Adds a dataset
|
|
71
|
+
*
|
|
72
|
+
* @throws after destroy (the dataset, its provider and its timers would never be
|
|
73
|
+
* released)
|
|
74
|
+
*/
|
|
75
|
+
add(options) {
|
|
76
|
+
if (this.destroyed) {
|
|
77
|
+
throw new Error('Cannot add a dataset to a destroyed draw instance');
|
|
78
|
+
}
|
|
79
|
+
if (this.datasets.has(options.id)) {
|
|
80
|
+
throw new Error(`Dataset "${options.id}" already exists`);
|
|
81
|
+
}
|
|
82
|
+
const dataset = new DatasetImpl(options, {
|
|
83
|
+
requestRepaint: () => this.deps.requestRepaint(),
|
|
84
|
+
providerDebounceMs: this.providerDebounceMs,
|
|
85
|
+
pixelRatio: this.deps.pixelRatio,
|
|
86
|
+
triangulationScheduler: this.deps.triangulationScheduler,
|
|
87
|
+
pointStyle: this.deps.featureStyle?.point.point,
|
|
88
|
+
timeSlicing: this.deps.timeSlicing,
|
|
89
|
+
getZoom: () => this.deps.getZoom(),
|
|
90
|
+
getViewportState: () => ({
|
|
91
|
+
bounds: this.deps.getViewportBounds(),
|
|
92
|
+
zoom: this.deps.getZoom(),
|
|
93
|
+
}),
|
|
94
|
+
getPitchZoomDrop: () => {
|
|
95
|
+
const effective = this.deps.getEffectiveZoom?.();
|
|
96
|
+
if (effective === undefined || !Number.isFinite(effective))
|
|
97
|
+
return 0;
|
|
98
|
+
const drop = this.deps.getZoom() - effective;
|
|
99
|
+
return drop > 0 ? drop : 0;
|
|
100
|
+
},
|
|
101
|
+
onRemove: (id) => {
|
|
102
|
+
this.datasets.delete(id);
|
|
103
|
+
const at = this.ordered.findIndex((c) => c.id === id);
|
|
104
|
+
if (at >= 0)
|
|
105
|
+
this.ordered.splice(at, 1);
|
|
106
|
+
this.syncViewportSubscription();
|
|
107
|
+
this.deps.onDatasetRemove?.(id);
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
this.datasets.set(options.id, dataset);
|
|
111
|
+
// What is added goes to the front of its own side
|
|
112
|
+
this.ordered.splice(this.sideEnd(dataset.order), 0, dataset);
|
|
113
|
+
this.syncViewportSubscription();
|
|
114
|
+
if (dataset.hasProvider) {
|
|
115
|
+
// The first time is fetched through the same path as a change of the displayed range (the
|
|
116
|
+
// debounce)
|
|
117
|
+
dataset.scheduleProviderUpdate(this.deps.getViewportBounds(), this.deps.getZoom());
|
|
118
|
+
}
|
|
119
|
+
this.deps.requestRepaint();
|
|
120
|
+
this.deps.onDatasetAdd?.(options.id);
|
|
121
|
+
return dataset;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Gets a dataset
|
|
125
|
+
*/
|
|
126
|
+
get(id) {
|
|
127
|
+
return this.datasets.get(id);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Gets the internal implementation of a dataset
|
|
131
|
+
*
|
|
132
|
+
* It is used by the internal paths (the interception of the hit testing) that perform
|
|
133
|
+
* operations not exposed on the public interface, such as firing an event.
|
|
134
|
+
*/
|
|
135
|
+
getInternal(id) {
|
|
136
|
+
return this.datasets.get(id);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Removes a dataset
|
|
140
|
+
*
|
|
141
|
+
* Even with order 'layer-order', the stacking order of the Store is not touched (the manager
|
|
142
|
+
* does not know the Store). Taking the id off the order is the responsibility of the caller.
|
|
143
|
+
* Even if it stays on the order, an id without a dataset is skipped by both the rendering
|
|
144
|
+
* and the hit testing.
|
|
145
|
+
*
|
|
146
|
+
* @returns true when it was removed (false when it does not exist)
|
|
147
|
+
*/
|
|
148
|
+
remove(id) {
|
|
149
|
+
const dataset = this.datasets.get(id);
|
|
150
|
+
if (!dataset)
|
|
151
|
+
return false;
|
|
152
|
+
dataset.remove();
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Reorders a dataset
|
|
157
|
+
*
|
|
158
|
+
* The side (in front of or behind the Store, or taking part in the stacking order) and the
|
|
159
|
+
* position within that side can be changed. Only the order is moved; the visibility, the
|
|
160
|
+
* retained batches held and the state of the provider are not touched at all (no GPU resource
|
|
161
|
+
* is rebuilt).
|
|
162
|
+
*
|
|
163
|
+
* When it is moved to 'layer-order', the stacking order is decided by the stacking order of
|
|
164
|
+
* the Store alone (index takes no part in it). Putting the id on the order is the
|
|
165
|
+
* responsibility of the caller.
|
|
166
|
+
*
|
|
167
|
+
* @returns true when it was moved (false for an id that does not exist)
|
|
168
|
+
*/
|
|
169
|
+
move(id, placement) {
|
|
170
|
+
const dataset = this.datasets.get(id);
|
|
171
|
+
if (!dataset)
|
|
172
|
+
return false;
|
|
173
|
+
const from = dataset.order;
|
|
174
|
+
const to = placement.order ?? from;
|
|
175
|
+
// Take it out of its current position first, then decide its position within the destination
|
|
176
|
+
const at = this.ordered.indexOf(dataset);
|
|
177
|
+
if (at >= 0)
|
|
178
|
+
this.ordered.splice(at, 1);
|
|
179
|
+
const start = this.sideStart(to);
|
|
180
|
+
const length = this.sideEnd(to) - start;
|
|
181
|
+
const index = placement.index === undefined ? (to === from ? at - start : length) : placement.index;
|
|
182
|
+
const moved = start + clamp(index, 0, length);
|
|
183
|
+
dataset.setOrder(to);
|
|
184
|
+
this.ordered.splice(moved, 0, dataset);
|
|
185
|
+
if (to === from && moved === at)
|
|
186
|
+
return true;
|
|
187
|
+
this.deps.requestRepaint();
|
|
188
|
+
this.deps.onDatasetsReorder?.(this.ordered.map((c) => c.id));
|
|
189
|
+
return true;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* The list of datasets in display order (from the back to the front)
|
|
193
|
+
*
|
|
194
|
+
* They are returned as the below-store group, the layer-order group and the above-store group.
|
|
195
|
+
* The actual stacking order of a layer-order dataset is decided by the stacking order of the
|
|
196
|
+
* Store, so it does not match the order of this list.
|
|
197
|
+
*/
|
|
198
|
+
list() {
|
|
199
|
+
return [...this.ordered];
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The internal implementations of the datasets in display order (from the back to the front)
|
|
203
|
+
*
|
|
204
|
+
* The element supply of the analytic drape uses it. The truth of the stacking order is the
|
|
205
|
+
* stacking order of the Store, so this list exists to pass on "the classification into sides"
|
|
206
|
+
* and "the order within the same side".
|
|
207
|
+
*/
|
|
208
|
+
listInternal() {
|
|
209
|
+
return [...this.ordered];
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Reports the datasets that hand their polygons and lines to the analytic drape
|
|
213
|
+
*
|
|
214
|
+
* A dataset that handed them over does not push solid polygons and lines onto its retained
|
|
215
|
+
* batch (so that the same thing is not drawn twice). Passing null makes every dataset draw
|
|
216
|
+
* them itself as before.
|
|
217
|
+
*/
|
|
218
|
+
setDrapedDatasets(ids) {
|
|
219
|
+
for (const dataset of this.datasets.values()) {
|
|
220
|
+
dataset.setDrapedFills(ids?.has(dataset.id) === true);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Whether there is at least one dataset (the hidden ones are not counted)
|
|
225
|
+
*
|
|
226
|
+
* The interception of the hit testing and the unified z scan only work while this is true. It
|
|
227
|
+
* is the short circuit that keeps a map without datasets from paying a cost on every
|
|
228
|
+
* mousemove.
|
|
229
|
+
*/
|
|
230
|
+
hasAny() {
|
|
231
|
+
for (const dataset of this.datasets.values()) {
|
|
232
|
+
if (dataset.visible)
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Starts a frame, before anything of it is drawn
|
|
239
|
+
*
|
|
240
|
+
* Each dataset decides the zoom band of its collision thinning from the zoom the frame draws
|
|
241
|
+
* with, so every layer of the frame reads the rows the frame draws.
|
|
242
|
+
*
|
|
243
|
+
* @param zoom The zoom the frame draws with
|
|
244
|
+
*/
|
|
245
|
+
beginFrame(zoom) {
|
|
246
|
+
for (const dataset of this.ordered)
|
|
247
|
+
dataset.beginFrame(zoom);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Whether work remains that will change what the datasets draw without the host doing anything:
|
|
251
|
+
* a chunk the most recent frame left unbuilt, a huge polygon still being triangulated, or a
|
|
252
|
+
* call of a provider waiting for its debounce or its response
|
|
253
|
+
*/
|
|
254
|
+
hasPendingWork() {
|
|
255
|
+
if ((this.deps.triangulationScheduler?.pendingCount ?? 0) > 0)
|
|
256
|
+
return true;
|
|
257
|
+
for (const dataset of this.ordered) {
|
|
258
|
+
if (dataset.hasPendingWork)
|
|
259
|
+
return true;
|
|
260
|
+
}
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Draws the datasets of the given side in display order (from the back to the front)
|
|
265
|
+
*
|
|
266
|
+
* The 'layer-order' side is not drawn on this path (it is drawn from `drawOne` at its position
|
|
267
|
+
* within the stacking order).
|
|
268
|
+
*
|
|
269
|
+
* @param bounds The bbox of the expanded viewport that the rendering loop computed once.
|
|
270
|
+
* When omitted it is looked up from deps at the point it becomes necessary
|
|
271
|
+
*/
|
|
272
|
+
draw(order, target, projectionData, zoom, bounds) {
|
|
273
|
+
if (this.ordered.length === 0)
|
|
274
|
+
return;
|
|
275
|
+
let resolved = bounds;
|
|
276
|
+
for (let i = this.sideStart(order); i < this.sideEnd(order); i++) {
|
|
277
|
+
if (resolved === undefined)
|
|
278
|
+
resolved = this.deps.getViewportBounds();
|
|
279
|
+
this.ordered[i].draw(target, projectionData, zoom, resolved);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Draws a dataset as one entry of the stacking order
|
|
284
|
+
*
|
|
285
|
+
* Only a dataset whose order is 'layer-order' is drawn. Nothing happens for an id that does
|
|
286
|
+
* not exist or for a dataset on another side (the rendering loop skips that entry).
|
|
287
|
+
*
|
|
288
|
+
* @returns true when it was a drawing target
|
|
289
|
+
*/
|
|
290
|
+
drawOne(id, target, projectionData, zoom, bounds) {
|
|
291
|
+
const dataset = this.datasets.get(id);
|
|
292
|
+
if (dataset?.order !== 'layer-order')
|
|
293
|
+
return false;
|
|
294
|
+
dataset.draw(target, projectionData, zoom, bounds ?? this.deps.getViewportBounds());
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Returns the frontmost hit of the given side
|
|
299
|
+
*
|
|
300
|
+
* It looks through the side from the back (the front) onwards. A hidden dataset is skipped,
|
|
301
|
+
* but a dataset that is not interactive is not skipped (everything visible blocks). A
|
|
302
|
+
* dataset that cannot fire an event is returned with feature set to null.
|
|
303
|
+
*/
|
|
304
|
+
hitTestSide(order, coordinate, toleranceLngLat, test) {
|
|
305
|
+
for (let i = this.sideEnd(order) - 1; i >= this.sideStart(order); i--) {
|
|
306
|
+
const hit = this.hitTestDataset(this.ordered[i], coordinate, toleranceLngLat, test);
|
|
307
|
+
if (hit)
|
|
308
|
+
return hit;
|
|
309
|
+
}
|
|
310
|
+
return null;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Returns the hit as one entry of the stacking order
|
|
314
|
+
*
|
|
315
|
+
* Only a dataset whose order is 'layer-order' is a target (an id that does not exist and a
|
|
316
|
+
* dataset on another side give null).
|
|
317
|
+
*/
|
|
318
|
+
hitTestEntry(id, coordinate, toleranceLngLat, test) {
|
|
319
|
+
const dataset = this.datasets.get(id);
|
|
320
|
+
if (dataset?.order !== 'layer-order')
|
|
321
|
+
return null;
|
|
322
|
+
return this.hitTestDataset(dataset, coordinate, toleranceLngLat, test);
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Decides the hit of a single dataset
|
|
326
|
+
*/
|
|
327
|
+
hitTestDataset(dataset, coordinate, toleranceLngLat, test) {
|
|
328
|
+
if (!dataset.visible)
|
|
329
|
+
return null;
|
|
330
|
+
const hit = dataset.hitTestRow(coordinate, toleranceLngLat, test);
|
|
331
|
+
if (!hit)
|
|
332
|
+
return null;
|
|
333
|
+
// It blocks even when it is not interactive, but it cannot fire an event, so this is null
|
|
334
|
+
return dataset.interactive
|
|
335
|
+
? { dataset, feature: hit.feature, row: hit.row }
|
|
336
|
+
: { dataset, feature: null, row: null };
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* The index of the start of a side (the range within the display order)
|
|
340
|
+
*/
|
|
341
|
+
sideStart(order) {
|
|
342
|
+
if (order === 'below-store')
|
|
343
|
+
return 0;
|
|
344
|
+
const counts = this.sideCounts();
|
|
345
|
+
return order === 'layer-order' ? counts.below : counts.below + counts.layerOrder;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* The index just past the end of a side
|
|
349
|
+
*/
|
|
350
|
+
sideEnd(order) {
|
|
351
|
+
if (order === 'above-store')
|
|
352
|
+
return this.ordered.length;
|
|
353
|
+
const counts = this.sideCounts();
|
|
354
|
+
return order === 'below-store' ? counts.below : counts.below + counts.layerOrder;
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* The number of datasets of the first 2 sides (used to compute the boundaries of the sides)
|
|
358
|
+
*/
|
|
359
|
+
sideCounts() {
|
|
360
|
+
let below = 0;
|
|
361
|
+
let layerOrder = 0;
|
|
362
|
+
for (const dataset of this.ordered) {
|
|
363
|
+
if (dataset.order === 'below-store')
|
|
364
|
+
below++;
|
|
365
|
+
else if (dataset.order === 'layer-order')
|
|
366
|
+
layerOrder++;
|
|
367
|
+
}
|
|
368
|
+
return { below, layerOrder };
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Releases the retained-mode GPU resources of every dataset
|
|
372
|
+
*
|
|
373
|
+
* It is called when the rendering layer is disposed (the onRemove of CustomLayer). The
|
|
374
|
+
* datasets themselves remain, so they are built again on the next draw once the layer is
|
|
375
|
+
* recreated.
|
|
376
|
+
*/
|
|
377
|
+
disposeRetained() {
|
|
378
|
+
for (const dataset of this.datasets.values()) {
|
|
379
|
+
dataset.disposeRetained();
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Disposes every dataset
|
|
384
|
+
*/
|
|
385
|
+
destroy() {
|
|
386
|
+
this.destroyed = true;
|
|
387
|
+
for (const dataset of [...this.datasets.values()]) {
|
|
388
|
+
dataset.dispose();
|
|
389
|
+
}
|
|
390
|
+
this.datasets.clear();
|
|
391
|
+
this.ordered = [];
|
|
392
|
+
this.syncViewportSubscription();
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Rewires the subscription to the changes of the displayed range to whether any dataset
|
|
396
|
+
* needs them (the datasets that have a provider)
|
|
397
|
+
*/
|
|
398
|
+
syncViewportSubscription() {
|
|
399
|
+
let needed = false;
|
|
400
|
+
for (const dataset of this.datasets.values()) {
|
|
401
|
+
if (dataset.needsViewportUpdates) {
|
|
402
|
+
needed = true;
|
|
403
|
+
break;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
if (needed && !this.unsubscribeViewport) {
|
|
407
|
+
this.unsubscribeViewport = this.deps.onViewportChange(() => this.handleViewportChange());
|
|
408
|
+
}
|
|
409
|
+
else if (!needed && this.unsubscribeViewport) {
|
|
410
|
+
this.unsubscribeViewport();
|
|
411
|
+
this.unsubscribeViewport = null;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/** Schedules the call of the providers when the displayed range changed */
|
|
415
|
+
handleViewportChange() {
|
|
416
|
+
const bounds = this.deps.getViewportBounds();
|
|
417
|
+
const zoom = this.deps.getZoom();
|
|
418
|
+
for (const dataset of this.datasets.values()) {
|
|
419
|
+
if (dataset.hasProvider) {
|
|
420
|
+
dataset.scheduleProviderUpdate(bounds, zoom);
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Clamps a value into a range
|
|
427
|
+
*/
|
|
428
|
+
function clamp(value, min, max) {
|
|
429
|
+
if (!Number.isFinite(value))
|
|
430
|
+
return min;
|
|
431
|
+
return Math.min(Math.max(Math.trunc(value), min), max);
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Creates a manager
|
|
435
|
+
*
|
|
436
|
+
* @internal
|
|
437
|
+
*/
|
|
438
|
+
export function createDatasetManager(deps) {
|
|
439
|
+
return new DatasetManager(deps);
|
|
440
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|