@sakuzu/maplibre-gl-draw 1.0.0 → 2.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 +1016 -2
- package/README.ja.md +39 -19
- package/README.md +41 -21
- package/dist/api/datasets.d.ts +258 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +135 -0
- package/dist/api/draw.js +18 -0
- package/dist/api/drawing.d.ts +87 -0
- package/dist/api/errors.d.ts +35 -0
- package/dist/api/errors.js +35 -0
- package/dist/api/events.d.ts +306 -0
- package/dist/api/extension/context.d.ts +247 -0
- package/dist/api/extension/feature-type.d.ts +129 -0
- package/dist/api/extension/mode.d.ts +123 -0
- package/dist/api/extension/plugin.d.ts +51 -0
- package/dist/api/extension/plugin.js +3 -0
- package/dist/api/extension/provider.d.ts +119 -0
- package/dist/api/extension/provider.js +3 -0
- package/dist/api/extension/render.d.ts +176 -0
- package/dist/api/extension/render.js +3 -0
- package/dist/api/extension/store.d.ts +190 -0
- package/dist/api/extension/store.js +3 -0
- package/dist/api/extensions.d.ts +306 -0
- package/dist/api/extensions.js +3 -0
- package/dist/api/features.d.ts +188 -0
- package/dist/api/features.js +3 -0
- package/dist/api/groups.d.ts +111 -0
- package/dist/api/groups.js +3 -0
- package/dist/api/hidden.d.ts +45 -0
- package/dist/api/hidden.js +3 -0
- package/dist/api/impl/adapters.js +463 -0
- package/dist/api/impl/contexts.js +466 -0
- package/dist/api/impl/create-draw.js +124 -0
- package/dist/api/impl/datasets.js +404 -0
- package/dist/api/impl/destroy-guard.js +74 -0
- package/dist/api/impl/document.js +280 -0
- package/dist/api/impl/drawing.js +180 -0
- package/dist/api/impl/engine-context.d.ts +7 -0
- package/dist/api/{context.js → impl/engine-context.js} +49 -38
- package/dist/{maplibre-gl-draw.js → api/impl/engine.js} +145 -177
- package/dist/api/impl/events.js +422 -0
- package/dist/api/impl/extension-host.js +361 -0
- package/dist/api/impl/extensions.js +229 -0
- package/dist/api/impl/features.js +445 -0
- package/dist/api/impl/geometry/apply.d.ts +32 -0
- package/dist/api/{geometry → impl/geometry}/apply.js +10 -27
- package/dist/api/{geometry → impl/geometry}/buffer.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/buffer.js +12 -23
- package/dist/api/{geometry → impl/geometry}/split.d.ts +4 -3
- package/dist/api/{geometry → impl/geometry}/split.js +10 -21
- package/dist/api/{geometry → impl/geometry}/targets.d.ts +2 -20
- package/dist/api/{geometry → impl/geometry}/targets.js +8 -35
- package/dist/api/impl/geometry/types.js +3 -0
- package/dist/api/impl/groups.d.ts +3 -0
- package/dist/api/impl/groups.js +268 -0
- package/dist/api/impl/hidden.js +60 -0
- package/dist/api/impl/import-export/constants.d.ts +22 -0
- package/dist/api/impl/import-export/constants.js +24 -0
- package/dist/api/{import-export → impl/import-export}/embedded-file.js +2 -2
- package/dist/api/{import-export → impl/import-export}/format-detection.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/format-detection.js +2 -1
- package/dist/api/impl/import-export/geojson-export.d.ts +19 -0
- package/dist/api/{import-export → impl/import-export}/geojson-export.js +71 -104
- package/dist/api/{import-export → impl/import-export}/geojson-import.d.ts +11 -7
- package/dist/api/{import-export → impl/import-export}/geojson-import.js +139 -97
- package/dist/api/{import-export → impl/import-export}/geometry-validation.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/geometry-validation.js +45 -0
- package/dist/api/impl/import-export/image-import.d.ts +16 -0
- package/dist/api/impl/import-export/image-import.js +73 -0
- package/dist/api/impl/import-export/legacy-image-style.d.ts +16 -0
- package/dist/api/impl/import-export/legacy-image-style.js +49 -0
- package/dist/api/impl/import-export/native-format.d.ts +14 -0
- package/dist/api/{import-export → impl/import-export}/native-format.js +32 -22
- package/dist/api/impl/import-export/native-upgrade.d.ts +8 -0
- package/dist/api/impl/import-export/native-upgrade.js +139 -0
- package/dist/api/{import-export → impl/import-export}/native-validation.d.ts +1 -1
- package/dist/api/{import-export → impl/import-export}/native-validation.js +15 -14
- package/dist/api/impl/import-export/style-validation.d.ts +24 -0
- package/dist/api/impl/import-export/style-validation.js +86 -0
- package/dist/api/impl/import-export/types.d.ts +52 -0
- package/dist/api/impl/import-export/types.js +3 -0
- package/dist/api/impl/input.js +180 -0
- package/dist/api/impl/layers.js +307 -0
- package/dist/api/impl/metadata.d.ts +1 -0
- package/dist/api/impl/metadata.js +22 -0
- package/dist/api/impl/options.d.ts +1 -0
- package/dist/api/impl/options.js +822 -0
- package/dist/api/impl/placement.d.ts +1 -0
- package/dist/api/impl/placement.js +138 -0
- package/dist/api/impl/render-context.d.ts +13 -0
- package/dist/api/impl/render-context.js +272 -0
- package/dist/api/impl/rows.d.ts +1 -0
- package/dist/api/impl/rows.js +46 -0
- package/dist/api/impl/selection.d.ts +1 -0
- package/dist/api/impl/selection.js +186 -0
- package/dist/api/impl/shared.d.ts +64 -0
- package/dist/api/impl/shared.js +178 -0
- package/dist/api/impl/validate-extension.d.ts +1 -0
- package/dist/api/impl/validate-extension.js +159 -0
- package/dist/api/layers.d.ts +130 -0
- package/dist/api/layers.js +3 -0
- package/dist/api/metadata.d.ts +18 -0
- package/dist/api/metadata.js +3 -0
- package/dist/api/model.d.ts +487 -0
- package/dist/api/model.js +47 -0
- package/dist/api/options.d.ts +466 -0
- package/dist/api/options.js +3 -0
- package/dist/api/selection.d.ts +94 -0
- package/dist/api/selection.js +3 -0
- package/dist/api/state.d.ts +155 -0
- package/dist/api/state.js +12 -0
- package/dist/{display → dataset}/chunk.d.ts +1 -1
- package/dist/{display → dataset}/chunk.js +4 -3
- package/dist/{display → dataset}/dataset.js +18 -21
- package/dist/dataset/interaction.d.ts +1 -0
- package/dist/{display → dataset}/interaction.js +18 -6
- package/dist/dataset/manager.d.ts +1 -0
- package/dist/dataset/provider.d.ts +1 -0
- package/dist/{display → dataset}/retained.d.ts +1 -1
- package/dist/{display → dataset}/retained.js +8 -7
- package/dist/dataset/source.d.ts +1 -0
- package/dist/{display → dataset}/source.js +17 -4
- package/dist/dataset/spatial.d.ts +1 -0
- package/dist/{display → dataset}/spatial.js +1 -1
- package/dist/dataset/style.d.ts +1 -0
- package/dist/{display → dataset}/style.js +1 -1
- package/dist/dataset/table-source.d.ts +1 -0
- package/dist/{display/columnar/source.js → dataset/table-source.js} +53 -25
- package/dist/{display → dataset}/thinning.d.ts +0 -10
- package/dist/{display → dataset}/thinning.js +3 -2
- package/dist/dataset/triangulation.d.ts +1 -0
- package/dist/{display → dataset}/triangulation.js +0 -0
- package/dist/{display → dataset}/types.d.ts +82 -121
- package/dist/dataset/types.js +61 -0
- package/dist/dispatcher/hit-test/box-strategies.js +13 -13
- package/dist/dispatcher/hit-test/box-strategy.d.ts +2 -15
- package/dist/dispatcher/hit-test/globe-shape.js +5 -4
- package/dist/dispatcher/hit-test/service.d.ts +17 -0
- package/dist/dispatcher/hit-test/service.js +80 -16
- package/dist/dispatcher/hit-test/strategies/base.d.ts +13 -19
- package/dist/dispatcher/hit-test/strategies/circle.js +3 -2
- package/dist/dispatcher/hit-test/strategies/image.js +6 -18
- package/dist/dispatcher/hit-test/strategies/line.d.ts +0 -6
- package/dist/dispatcher/hit-test/strategies/line.js +9 -2
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +0 -8
- package/dist/dispatcher/hit-test/strategies/multi.js +17 -8
- package/dist/dispatcher/hit-test/strategies/point.d.ts +9 -7
- package/dist/dispatcher/hit-test/strategies/point.js +8 -4
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +0 -7
- package/dist/dispatcher/hit-test/strategies/polygon.js +11 -3
- package/dist/dispatcher/hit-test/topmost.d.ts +1 -1
- package/dist/dispatcher/input-router.js +152 -69
- package/dist/dispatcher/normalizer.js +6 -2
- package/dist/dispatcher/types.d.ts +6 -1
- package/dist/extension/feature-handler.d.ts +1 -182
- package/dist/extension/index.d.ts +4 -7
- package/dist/extension/renderers.d.ts +1 -208
- package/dist/geometry/angle.d.ts +0 -8
- package/dist/geometry/angle.js +0 -8
- package/dist/geometry/bbox.d.ts +4 -12
- package/dist/geometry/bbox.js +4 -12
- package/dist/geometry/boolean.d.ts +0 -51
- package/dist/geometry/boolean.js +0 -51
- package/dist/geometry/buffer.d.ts +0 -26
- package/dist/geometry/buffer.js +0 -26
- package/dist/geometry/circle.d.ts +0 -9
- package/dist/geometry/circle.js +0 -9
- package/dist/geometry/coords.d.ts +0 -16
- package/dist/geometry/coords.js +0 -16
- package/dist/geometry/distance.d.ts +0 -24
- package/dist/geometry/distance.js +0 -24
- package/dist/geometry/errors.d.ts +21 -36
- package/dist/geometry/errors.js +49 -29
- package/dist/geometry/geojson.d.ts +81 -0
- package/dist/geometry/geojson.js +164 -0
- package/dist/geometry/index.d.ts +38 -23
- package/dist/geometry/index.js +43 -31
- package/dist/geometry/measure.d.ts +0 -27
- package/dist/geometry/measure.js +0 -27
- package/dist/geometry/predicates.d.ts +0 -9
- package/dist/geometry/predicates.js +0 -9
- package/dist/geometry/public-bounds.d.ts +26 -0
- package/dist/geometry/public-bounds.js +30 -0
- package/dist/geometry/public-combine.d.ts +78 -0
- package/dist/geometry/public-combine.js +82 -0
- package/dist/geometry/public-create.d.ts +54 -0
- package/dist/geometry/public-create.js +70 -0
- package/dist/geometry/public-measure.d.ts +170 -0
- package/dist/geometry/public-measure.js +283 -0
- package/dist/geometry/public-predicates.d.ts +54 -0
- package/dist/geometry/public-predicates.js +144 -0
- package/dist/geometry/public-repair.d.ts +75 -0
- package/dist/geometry/public-repair.js +77 -0
- package/dist/geometry/simplify.d.ts +0 -7
- package/dist/geometry/simplify.js +0 -7
- package/dist/geometry/split.d.ts +0 -20
- package/dist/geometry/split.js +0 -20
- package/dist/geometry/units.d.ts +20 -12
- package/dist/geometry/units.js +20 -12
- package/dist/index.d.ts +52 -66
- package/dist/index.js +6 -18
- package/dist/messages.d.ts +7 -7
- package/dist/modes/draw/circle.js +83 -207
- package/dist/modes/draw/commit-layer.d.ts +5 -16
- package/dist/modes/draw/commit-layer.js +2 -13
- package/dist/modes/draw/freehand.js +108 -246
- package/dist/modes/draw/image.js +4 -2
- package/dist/modes/draw/index.d.ts +5 -5
- package/dist/modes/draw/index.js +5 -5
- package/dist/modes/draw/line.js +18 -354
- package/dist/modes/draw/point.js +29 -78
- package/dist/modes/draw/polygon.js +23 -368
- package/dist/modes/draw/trace-support.d.ts +43 -36
- package/dist/modes/draw/trace-support.js +95 -98
- package/dist/modes/draw/vertex-drawing.d.ts +1 -0
- package/dist/modes/draw/vertex-drawing.js +176 -0
- package/dist/modes/handler.d.ts +1 -285
- package/dist/modes/manager.d.ts +2 -2
- package/dist/modes/manager.js +3 -0
- package/dist/modes/select/box-selection.d.ts +3 -3
- package/dist/modes/select/box-selection.js +2 -1
- package/dist/modes/select/click-handler.d.ts +5 -5
- package/dist/modes/select/click-handler.js +22 -20
- package/dist/modes/select/cursor-handler.d.ts +2 -2
- package/dist/modes/select/drag/intermediate-writes.js +1 -1
- package/dist/modes/select/drag/move.js +3 -3
- package/dist/modes/select/drag/operation.d.ts +3 -3
- package/dist/modes/select/drag/radius.js +5 -4
- package/dist/modes/select/drag/transform.d.ts +2 -2
- package/dist/modes/select/drag/transform.js +11 -5
- package/dist/modes/select/drag/vertex.d.ts +2 -2
- package/dist/modes/select/drag/vertex.js +13 -8
- package/dist/modes/select/drag-handler.js +44 -25
- package/dist/modes/select/mode.js +17 -17
- package/dist/modes/select/shortcut-handler.d.ts +8 -8
- package/dist/modes/select/shortcut-handler.js +9 -7
- package/dist/operations/layer-operations.js +29 -168
- package/dist/operations/resize.d.ts +2 -2
- package/dist/operations/resize.js +5 -5
- package/dist/operations/rotate.js +5 -5
- package/dist/operations/selection-operations.d.ts +16 -1
- package/dist/operations/selection-operations.js +28 -13
- package/dist/operations/shared-vertex.js +4 -2
- package/dist/operations/trace-graph.d.ts +0 -18
- package/dist/operations/trace-graph.js +0 -18
- package/dist/operations/vertex.js +36 -35
- package/dist/shared/color.d.ts +1 -0
- package/dist/shared/color.js +245 -0
- package/dist/shared/config/constants.d.ts +1 -54
- package/dist/shared/config/constants.js +1 -58
- package/dist/shared/config/feature-style.d.ts +16 -13
- package/dist/shared/config/feature-style.js +9 -0
- package/dist/shared/config/rendering.d.ts +3 -3
- package/dist/shared/config/selection-highlight.d.ts +0 -15
- package/dist/shared/config/selection-highlight.js +4 -7
- package/dist/shared/config/selection.d.ts +2 -32
- package/dist/shared/config/selection.js +0 -18
- package/dist/shared/config/topology.d.ts +2 -2
- package/dist/shared/config/trace.d.ts +4 -4
- package/dist/shared/math/angle.d.ts +1 -1
- package/dist/shared/math/angle.js +1 -1
- package/dist/shared/math/circle.d.ts +1 -1
- package/dist/shared/math/circle.js +1 -1
- package/dist/shared/math/distance.d.ts +2 -1
- package/dist/shared/math/distance.js +3 -2
- package/dist/shared/math/index.d.ts +1 -1
- package/dist/shared/math/index.js +1 -1
- package/dist/shared/math/transform.d.ts +23 -0
- package/dist/shared/math/transform.js +47 -28
- package/dist/shared/properties.d.ts +18 -0
- package/dist/shared/properties.js +129 -0
- package/dist/shared/types/events.d.ts +15 -7
- package/dist/shared/types/model.d.ts +109 -159
- package/dist/shared/types/style.d.ts +1 -1
- package/dist/shared/utils/color.d.ts +2 -36
- package/dist/shared/utils/color.js +13 -70
- package/dist/shared/utils/coordinates.d.ts +30 -4
- package/dist/shared/utils/coordinates.js +56 -10
- package/dist/shared/utils/event-emitter.d.ts +1 -262
- package/dist/shared/utils/event-emitter.js +4 -3
- package/dist/shared/utils/feature-bbox.js +8 -7
- package/dist/shared/utils/feature-segments.js +5 -4
- package/dist/shared/utils/image.d.ts +0 -4
- package/dist/shared/utils/image.js +0 -6
- package/dist/shared/utils/name-generator.d.ts +14 -20
- package/dist/shared/utils/name-generator.js +20 -3
- package/dist/shared/utils/pixel-ratio.d.ts +9 -3
- package/dist/shared/utils/pixel-ratio.js +13 -4
- package/dist/shared/utils/property.d.ts +7 -50
- package/dist/shared/utils/property.js +22 -87
- package/dist/snapping/custom-targets.js +21 -4
- package/dist/snapping/indicator.js +20 -11
- package/dist/snapping/providers/display.d.ts +6 -1
- package/dist/snapping/providers/display.js +2 -1
- package/dist/snapping/providers/guide.d.ts +3 -43
- package/dist/snapping/providers/guide.js +1 -44
- package/dist/snapping/providers/intersection.js +1 -1
- package/dist/snapping/providers/store.js +3 -3
- package/dist/snapping/service.js +18 -7
- package/dist/snapping/types.d.ts +9 -35
- package/dist/store/draw-store.js +233 -142
- package/dist/store/local-visibility.d.ts +11 -6
- package/dist/store/local-visibility.js +38 -7
- package/dist/store/lock.d.ts +0 -6
- package/dist/store/lock.js +0 -6
- package/dist/store/memory/change-bus.d.ts +3 -3
- package/dist/store/memory/change-bus.js +12 -0
- package/dist/store/memory/file-store.d.ts +2 -2
- package/dist/store/memory/ui-state.d.ts +1 -51
- package/dist/store/memory/ui-state.js +122 -134
- package/dist/store/memory.d.ts +1 -8
- package/dist/store/memory.js +249 -45
- package/dist/store/ordering.d.ts +9 -0
- package/dist/store/ordering.js +17 -0
- package/dist/store/spatial/spatial-index.d.ts +1 -1
- package/dist/store/spatial/spatial-index.js +1 -1
- package/dist/store/spatial/store-spatial-index.d.ts +3 -1
- package/dist/store/spatial/store-spatial-index.js +9 -3
- package/dist/store/store.d.ts +66 -107
- package/dist/store/types.d.ts +1 -1
- package/dist/store/writable-layer.d.ts +1 -1
- package/dist/store/writable-layer.js +2 -2
- package/dist/table/builder.d.ts +83 -0
- package/dist/table/builder.js +381 -0
- package/dist/table/index.d.ts +37 -0
- package/dist/table/index.js +5 -0
- package/dist/table/packed-rtree.d.ts +1 -0
- package/dist/{display → table}/packed-rtree.js +1 -1
- package/dist/table/partition.d.ts +1 -0
- package/dist/{display → table}/partition.js +3 -3
- package/dist/table/prepare.d.ts +44 -0
- package/dist/table/prepare.js +136 -0
- package/dist/table/table.d.ts +1 -0
- package/dist/{display/columnar → table}/table.js +29 -25
- package/dist/{display/columnar → table}/types.d.ts +68 -72
- package/dist/table/types.js +3 -0
- package/dist/view/coordinator.js +4 -3
- package/dist/view/feature-companion.d.ts +13 -7
- package/dist/view/feature-companion.js +11 -3
- package/dist/view/globe-subdivision.js +3 -3
- package/dist/view/layer/attach.d.ts +1 -1
- package/dist/view/layer/attach.js +1 -1
- package/dist/view/layer/custom-layer.js +40 -11
- package/dist/view/layer/display-list.js +2 -1
- package/dist/view/layer/drape-planner.d.ts +2 -2
- package/dist/view/layer/frame-render.d.ts +3 -3
- package/dist/view/layer/frame-render.js +7 -2
- package/dist/view/layer/frame-state.d.ts +6 -6
- package/dist/view/layer/index.d.ts +2 -2
- package/dist/view/layer/index.js +1 -1
- package/dist/view/layer/render.d.ts +4 -4
- package/dist/view/layer/render.js +3 -8
- package/dist/view/layer/renderers.d.ts +2 -2
- package/dist/view/layer/renderers.js +1 -1
- package/dist/view/layer/slot-manager.d.ts +2 -2
- package/dist/view/layer/slot-manager.js +4 -4
- package/dist/view/layer/slots.d.ts +2 -2
- package/dist/view/layer/slots.js +1 -1
- package/dist/view/layer/store-retained-bbox.js +3 -2
- package/dist/view/layer/store-retained-classify.d.ts +5 -7
- package/dist/view/layer/store-retained-classify.js +19 -7
- package/dist/view/layer/store-retained-collect.js +8 -7
- package/dist/view/layer/store-retained-coord-patch.d.ts +0 -8
- package/dist/view/layer/store-retained-coord-patch.js +13 -4
- package/dist/view/layer/store-retained-immediate.d.ts +3 -3
- package/dist/view/layer/store-retained-immediate.js +3 -8
- package/dist/view/layer/store-retained-invalidation.d.ts +2 -2
- package/dist/view/layer/store-retained.d.ts +2 -2
- package/dist/view/layer/store-retained.js +1 -1
- package/dist/view/renderers/batch-manager.js +8 -7
- package/dist/view/renderers/drawer.js +21 -15
- package/dist/view/renderers/image.js +13 -39
- package/dist/view/renderers/line/line-types.d.ts +3 -3
- package/dist/view/renderers/line/sdf-line.js +3 -1
- package/dist/view/renderers/point/billboard-depth.js +1 -1
- package/dist/view/renderers/point/point-instance.js +1 -1
- package/dist/view/renderers/point/point-shape.js +2 -2
- package/dist/view/renderers/point/point-style.js +48 -4
- package/dist/view/renderers/polygon/batch.js +1 -2
- package/dist/view/renderers/polygon/fill.js +3 -1
- package/dist/view/renderers/polygon/sdf-polygon.js +2 -3
- package/dist/view/renderers/polygon/triangulator.d.ts +1 -1
- package/dist/view/renderers/stroke.js +3 -1
- package/dist/view/shaders/helpers.d.ts +2 -42
- package/dist/view/shaders/helpers.js +0 -6
- package/dist/view/shaders/projection.d.ts +15 -7
- package/dist/view/shaders/projection.js +23 -6
- package/dist/view/shaders/quad.d.ts +16 -12
- package/dist/view/shaders/quad.js +34 -13
- package/dist/view/style-rule.d.ts +5 -42
- package/dist/view/style-rule.js +20 -44
- package/dist/view/terrain/binding.d.ts +1 -0
- package/dist/view/terrain/binding.js +29 -0
- package/dist/view/terrain/context.d.ts +3 -4
- package/dist/view/terrain/context.js +4 -5
- package/dist/view/terrain/drape/geometry.js +1 -1
- package/dist/view/terrain/drape/pass.d.ts +1 -1
- package/dist/view/terrain/drape/pass.js +8 -7
- package/dist/view/terrain/polygon.d.ts +9 -5
- package/dist/view/terrain/polygon.js +16 -2
- package/dist/view/terrain/state.d.ts +1 -1
- package/dist/view/terrain/state.js +1 -1
- package/dist/view/terrain/tessellation.d.ts +2 -2
- package/dist/view/terrain/tessellation.js +1 -1
- package/dist/view/ui/auxiliary-handles.d.ts +6 -29
- package/dist/view/ui/bounds.js +8 -12
- package/dist/view/ui/handle-test.js +2 -2
- package/dist/view/ui/handle-thinning.js +17 -17
- package/dist/view/ui/handles.js +21 -13
- package/dist/view/ui/helper.d.ts +1 -1
- package/dist/view/ui/helper.js +1 -1
- package/dist/view/ui/index.d.ts +1 -1
- package/dist/view/ui/selection-scope.js +4 -2
- package/dist/view/ui/selection-ui/bounding-box.js +6 -6
- package/dist/view/ui/selection-ui/extension-registry.d.ts +31 -20
- package/dist/view/ui/selection-ui/extension-registry.js +70 -7
- package/dist/view/ui/selection-ui/index.d.ts +2 -2
- package/dist/view/ui/selection-ui/index.js +1 -1
- package/dist/view/ui/selection-ui/renderer.js +15 -38
- package/dist/view/ui/selection-ui/types.d.ts +17 -2
- package/dist/view/ui/selection-ui-drawer.d.ts +8 -0
- package/dist/view/ui/selection-ui-drawer.js +63 -2
- package/dist/view/ui/tentative.js +1 -1
- package/dist/webgl/index.d.ts +65 -0
- package/dist/webgl/index.js +62 -0
- package/package.json +20 -9
- package/dist/api/api.d.ts +0 -1259
- package/dist/api/api.js +0 -86
- package/dist/api/context.d.ts +0 -173
- package/dist/api/display-api.js +0 -23
- package/dist/api/event-api.d.ts +0 -13
- package/dist/api/event-api.js +0 -17
- package/dist/api/extension-api.d.ts +0 -46
- package/dist/api/extension-api.js +0 -85
- package/dist/api/feature-api.d.ts +0 -11
- package/dist/api/feature-api.js +0 -101
- package/dist/api/geometry/apply.d.ts +0 -51
- package/dist/api/geometry/boolean.d.ts +0 -28
- package/dist/api/geometry/boolean.js +0 -65
- package/dist/api/geometry/types.d.ts +0 -31
- package/dist/api/geometry-operations.d.ts +0 -162
- package/dist/api/geometry-operations.js +0 -94
- package/dist/api/group-api.d.ts +0 -10
- package/dist/api/group-api.js +0 -78
- package/dist/api/import-export/constants.d.ts +0 -29
- package/dist/api/import-export/constants.js +0 -40
- package/dist/api/import-export/file-name.d.ts +0 -10
- package/dist/api/import-export/file-name.js +0 -20
- package/dist/api/import-export/geojson-export.d.ts +0 -19
- package/dist/api/import-export/image-import.d.ts +0 -12
- package/dist/api/import-export/image-import.js +0 -53
- package/dist/api/import-export/index.d.ts +0 -9
- package/dist/api/import-export/index.js +0 -107
- package/dist/api/import-export/native-format.d.ts +0 -15
- package/dist/api/import-export/style-validation.d.ts +0 -27
- package/dist/api/import-export/style-validation.js +0 -49
- package/dist/api/import-export/types.d.ts +0 -26
- package/dist/api/index.d.ts +0 -15
- package/dist/api/index.js +0 -3
- package/dist/api/input-api.d.ts +0 -158
- package/dist/api/input-api.js +0 -144
- package/dist/api/instance-api.d.ts +0 -38
- package/dist/api/instance-api.js +0 -136
- package/dist/api/layer-api.d.ts +0 -12
- package/dist/api/layer-api.js +0 -62
- package/dist/api/selection-api.d.ts +0 -7
- package/dist/api/selection-api.js +0 -78
- package/dist/api/snapping-api.d.ts +0 -125
- package/dist/api/snapping-api.js +0 -50
- package/dist/api/topology-api.d.ts +0 -30
- package/dist/api/topology-api.js +0 -16
- package/dist/api/tracing-api.d.ts +0 -31
- package/dist/api/tracing-api.js +0 -16
- package/dist/dispatcher/hit-test/index.d.ts +0 -14
- package/dist/dispatcher/hit-test/index.js +0 -9
- package/dist/dispatcher/index.d.ts +0 -15
- package/dist/dispatcher/index.js +0 -3
- package/dist/display/columnar/index.d.ts +0 -12
- package/dist/display/columnar/index.js +0 -13
- package/dist/display/columnar/prepare.d.ts +0 -42
- package/dist/display/columnar/prepare.js +0 -116
- package/dist/display/index.d.ts +0 -13
- package/dist/display/types.js +0 -43
- package/dist/maplibre-gl-draw.d.ts +0 -47
- package/dist/modes/cursor.js +0 -72
- package/dist/modes/index.d.ts +0 -7
- package/dist/operations/index.d.ts +0 -9
- package/dist/operations/index.js +0 -3
- package/dist/plugins/index.d.ts +0 -10
- package/dist/plugins/mutation-hooks.d.ts +0 -28
- package/dist/plugins/mutation-hooks.js +0 -84
- package/dist/plugins/plugin-context.js +0 -367
- package/dist/plugins/plugin-manager.d.ts +0 -103
- package/dist/plugins/plugin-manager.js +0 -316
- package/dist/plugins/plugin.d.ts +0 -529
- package/dist/shared/config/index.d.ts +0 -17
- package/dist/shared/config/index.js +0 -8
- package/dist/shared/utils/index.d.ts +0 -15
- package/dist/shared/utils/index.js +0 -24
- package/dist/snapping/index.d.ts +0 -14
- package/dist/snapping/index.js +0 -4
- package/dist/store/change-merger.js +0 -102
- package/dist/store/event-bridge.js +0 -161
- package/dist/store/index.d.ts +0 -12
- package/dist/store/index.js +0 -4
- package/dist/view/index.d.ts +0 -47
- package/dist/view/index.js +0 -20
- /package/dist/api/{geometry/types.js → datasets.js} +0 -0
- /package/dist/api/{import-export/types.js → document.js} +0 -0
- /package/dist/{display/columnar/types.js → api/drawing.js} +0 -0
- /package/dist/{display/index.js → api/events.js} +0 -0
- /package/dist/{modes/index.js → api/extension/context.js} +0 -0
- /package/dist/{plugins/index.js → api/extension/feature-type.js} +0 -0
- /package/dist/{plugins/plugin.js → api/extension/mode.js} +0 -0
- /package/dist/api/{display-api.d.ts → impl/adapters.d.ts} +0 -0
- /package/dist/{display/columnar/source.d.ts → api/impl/contexts.d.ts} +0 -0
- /package/dist/{display/columnar/table.d.ts → api/impl/create-draw.d.ts} +0 -0
- /package/dist/{display/interaction.d.ts → api/impl/datasets.d.ts} +0 -0
- /package/dist/{display/manager.d.ts → api/impl/destroy-guard.d.ts} +0 -0
- /package/dist/{display/packed-rtree.d.ts → api/impl/document.d.ts} +0 -0
- /package/dist/{display/partition.d.ts → api/impl/drawing.d.ts} +0 -0
- /package/dist/{display/provider.d.ts → api/impl/engine.d.ts} +0 -0
- /package/dist/{display/source.d.ts → api/impl/events.d.ts} +0 -0
- /package/dist/{display/spatial.d.ts → api/impl/extension-host.d.ts} +0 -0
- /package/dist/{display/style.d.ts → api/impl/extensions.d.ts} +0 -0
- /package/dist/{display/triangulation.d.ts → api/impl/features.d.ts} +0 -0
- /package/dist/{modes/cursor.d.ts → api/impl/geometry/types.d.ts} +0 -0
- /package/dist/{plugins/plugin-context.d.ts → api/impl/hidden.d.ts} +0 -0
- /package/dist/api/{import-export → impl/import-export}/embedded-file.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.d.ts +0 -0
- /package/dist/api/{import-export → impl/import-export}/own-property.js +0 -0
- /package/dist/{store/change-merger.d.ts → api/impl/input.d.ts} +0 -0
- /package/dist/{store/event-bridge.d.ts → api/impl/layers.d.ts} +0 -0
- /package/dist/{display → dataset}/chunk-set.d.ts +0 -0
- /package/dist/{display → dataset}/chunk-set.js +0 -0
- /package/dist/{display → dataset}/dataset.d.ts +0 -0
- /package/dist/{display → dataset}/manager.js +0 -0
- /package/dist/{display → dataset}/provider.js +0 -0
- /package/dist/{display → dataset}/selection.d.ts +0 -0
- /package/dist/{display → dataset}/selection.js +0 -0
|
@@ -51,7 +51,7 @@ export function columnValue(column, row) {
|
|
|
51
51
|
*
|
|
52
52
|
* @internal
|
|
53
53
|
*/
|
|
54
|
-
export class
|
|
54
|
+
export class GeometryColumnReader {
|
|
55
55
|
/**
|
|
56
56
|
* @param rows The number of rows (the length of the table), or undefined for a child of a mixed
|
|
57
57
|
* column, whose number of rows is read from its arrays
|
|
@@ -95,19 +95,19 @@ export class ColumnarGeometryColumn {
|
|
|
95
95
|
// The messages about the geometry of a table of one type keep their short form
|
|
96
96
|
const at = rows === undefined ? `${path}: ` : '';
|
|
97
97
|
if (!geometry || !(geometry.type in OFFSET_LEVELS)) {
|
|
98
|
-
throw new Error(`
|
|
98
|
+
throw new Error(`Table: ${at}unknown geometry type "${geometry?.type}"`);
|
|
99
99
|
}
|
|
100
100
|
if (!(geometry.coords instanceof Float64Array)) {
|
|
101
|
-
throw new Error(`
|
|
101
|
+
throw new Error(`Table: ${path}.coords must be a Float64Array`);
|
|
102
102
|
}
|
|
103
103
|
const dimensions = geometry.dimensions ?? 2;
|
|
104
104
|
if (dimensions !== 2 && dimensions !== 3) {
|
|
105
|
-
throw new Error(`
|
|
105
|
+
throw new Error(`Table: ${at}dimensions must be 2 or 3 (got ${dimensions})`);
|
|
106
106
|
}
|
|
107
107
|
const offsets = geometry.offsets ?? [];
|
|
108
108
|
const levels = OFFSET_LEVELS[geometry.type];
|
|
109
109
|
if (offsets.length !== levels) {
|
|
110
|
-
throw new Error(`
|
|
110
|
+
throw new Error(`Table: ${at}a ${geometry.type} ${rows === undefined ? 'column' : 'table'} has ${levels} offset arrays (got ${offsets.length})`);
|
|
111
111
|
}
|
|
112
112
|
const vertexCount = Math.floor(geometry.coords.length / dimensions);
|
|
113
113
|
let length = rows;
|
|
@@ -121,15 +121,15 @@ export class ColumnarGeometryColumn {
|
|
|
121
121
|
for (let level = 0; level < levels; level++) {
|
|
122
122
|
const array = offsets[level];
|
|
123
123
|
if (!(array instanceof Int32Array)) {
|
|
124
|
-
throw new Error(`
|
|
124
|
+
throw new Error(`Table: ${at}offsets[${level}] must be an Int32Array`);
|
|
125
125
|
}
|
|
126
126
|
if (array.length < elements + 1) {
|
|
127
|
-
throw new Error(`
|
|
127
|
+
throw new Error(`Table: ${at}offsets[${level}] has ${array.length} entries for ${elements} elements`);
|
|
128
128
|
}
|
|
129
129
|
elements = array[elements];
|
|
130
130
|
}
|
|
131
131
|
if (elements > vertexCount) {
|
|
132
|
-
throw new Error(`
|
|
132
|
+
throw new Error(`Table: ${at}the offsets reach coordinate ${elements} of ${vertexCount} coordinates`);
|
|
133
133
|
}
|
|
134
134
|
this.type = geometry.type;
|
|
135
135
|
this.coords = geometry.coords;
|
|
@@ -192,11 +192,11 @@ function isMixedGeometry(geometry) {
|
|
|
192
192
|
return geometry?.type === 'Mixed';
|
|
193
193
|
}
|
|
194
194
|
/**
|
|
195
|
-
* A validated
|
|
195
|
+
* A validated table
|
|
196
196
|
*
|
|
197
197
|
* @internal
|
|
198
198
|
*/
|
|
199
|
-
export class
|
|
199
|
+
export class TableReader {
|
|
200
200
|
/**
|
|
201
201
|
* @throws when the shape of the input does not add up (a wrong type, an offset array of the
|
|
202
202
|
* wrong length, a column shorter than the table, a row of a mixed column pointing outside its
|
|
@@ -273,7 +273,7 @@ export class ColumnarTable {
|
|
|
273
273
|
});
|
|
274
274
|
const { length, geometry } = input;
|
|
275
275
|
if (!Number.isInteger(length) || length < 0) {
|
|
276
|
-
throw new Error(`
|
|
276
|
+
throw new Error(`Table: length must be a non-negative integer (got ${length})`);
|
|
277
277
|
}
|
|
278
278
|
if (isMixedGeometry(geometry)) {
|
|
279
279
|
this.children = readMixedChildren(geometry, length);
|
|
@@ -281,21 +281,21 @@ export class ColumnarTable {
|
|
|
281
281
|
this.childRows = geometry.offsets;
|
|
282
282
|
}
|
|
283
283
|
else {
|
|
284
|
-
this.children = [new
|
|
284
|
+
this.children = [new GeometryColumnReader(geometry, length, 'geometry')];
|
|
285
285
|
this.childTypes = null;
|
|
286
286
|
this.childRows = null;
|
|
287
287
|
}
|
|
288
288
|
this.onlyPoints = this.children.every((child) => child.type === 'Point' || child.type === 'MultiPoint');
|
|
289
289
|
if (input.validity && input.validity.length < Math.ceil(length / 8)) {
|
|
290
|
-
throw new Error('
|
|
290
|
+
throw new Error('Table: validity is shorter than the table');
|
|
291
291
|
}
|
|
292
292
|
if (input.ids && columnLength(input.ids) < length) {
|
|
293
|
-
throw new Error('
|
|
293
|
+
throw new Error('Table: ids is shorter than the table');
|
|
294
294
|
}
|
|
295
295
|
const columns = input.columns ?? {};
|
|
296
296
|
for (const [name, column] of Object.entries(columns)) {
|
|
297
297
|
if (columnLength(column) < length) {
|
|
298
|
-
throw new Error(`
|
|
298
|
+
throw new Error(`Table: column "${name}" is shorter than the table`);
|
|
299
299
|
}
|
|
300
300
|
}
|
|
301
301
|
this.length = length;
|
|
@@ -420,14 +420,18 @@ export class ColumnarTable {
|
|
|
420
420
|
* @param hasGeometry Whether the row has a geometry (a row without one is not visible)
|
|
421
421
|
*/
|
|
422
422
|
featureAt(row, hasGeometry) {
|
|
423
|
+
const type = this.columnOf(row)?.type ?? 'Point';
|
|
423
424
|
return {
|
|
424
425
|
id: this.idOf(row),
|
|
425
|
-
type
|
|
426
|
-
|
|
426
|
+
type,
|
|
427
|
+
// The type of a column is a GeoJSON geometry type, so it is the kind of the geometry
|
|
428
|
+
geometry: { type, coordinates: this.coordinatesOf(row) },
|
|
427
429
|
layerId: '',
|
|
430
|
+
groupId: undefined,
|
|
428
431
|
properties: this.propertiesOf(row),
|
|
429
432
|
locked: false,
|
|
430
433
|
visible: hasGeometry,
|
|
434
|
+
style: {},
|
|
431
435
|
};
|
|
432
436
|
}
|
|
433
437
|
}
|
|
@@ -440,31 +444,31 @@ export class ColumnarTable {
|
|
|
440
444
|
function readMixedChildren(geometry, length) {
|
|
441
445
|
const { types, offsets, children } = geometry;
|
|
442
446
|
if (!(types instanceof Int8Array)) {
|
|
443
|
-
throw new Error('
|
|
447
|
+
throw new Error('Table: geometry.types must be an Int8Array');
|
|
444
448
|
}
|
|
445
449
|
if (!(offsets instanceof Int32Array)) {
|
|
446
|
-
throw new Error('
|
|
450
|
+
throw new Error('Table: geometry.offsets must be an Int32Array');
|
|
447
451
|
}
|
|
448
452
|
if (!Array.isArray(children)) {
|
|
449
|
-
throw new Error('
|
|
453
|
+
throw new Error('Table: geometry.children must be an array');
|
|
450
454
|
}
|
|
451
455
|
if (types.length < length) {
|
|
452
|
-
throw new Error('
|
|
456
|
+
throw new Error('Table: geometry.types is shorter than the table');
|
|
453
457
|
}
|
|
454
458
|
if (offsets.length < length) {
|
|
455
|
-
throw new Error('
|
|
459
|
+
throw new Error('Table: geometry.offsets is shorter than the table');
|
|
456
460
|
}
|
|
457
|
-
const columns = children.map((child, k) => new
|
|
461
|
+
const columns = children.map((child, k) => new GeometryColumnReader(child, undefined, `geometry.children[${k}]`));
|
|
458
462
|
for (let row = 0; row < length; row++) {
|
|
459
463
|
const child = types[row];
|
|
460
464
|
if (child < 0)
|
|
461
465
|
continue;
|
|
462
466
|
if (child >= columns.length) {
|
|
463
|
-
throw new Error(`
|
|
467
|
+
throw new Error(`Table: geometry.types[${row}] is ${child}, but there are ${columns.length} children`);
|
|
464
468
|
}
|
|
465
469
|
const at = offsets[row];
|
|
466
470
|
if (at < 0 || at >= columns[child].length) {
|
|
467
|
-
throw new Error(`
|
|
471
|
+
throw new Error(`Table: geometry.offsets[${row}] is ${at}, but geometry.children[${child}] has ${columns[child].length} rows`);
|
|
468
472
|
}
|
|
469
473
|
}
|
|
470
474
|
return columns;
|
|
@@ -1,19 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The
|
|
2
|
+
* The types of a table
|
|
3
3
|
*
|
|
4
|
-
* The rows are
|
|
4
|
+
* The rows are held as columns of typed arrays in the layout of GeoArrow (the native encoding
|
|
5
5
|
* with separated offsets), so a reader of GeoParquet, Arrow or FlatGeobuf can hand what it reads
|
|
6
6
|
* over without building an object per row, and a Worker can send it to the main thread without a
|
|
7
7
|
* copy.
|
|
8
8
|
*/
|
|
9
|
+
import type { BBox } from '../geometry/types.js';
|
|
9
10
|
/**
|
|
10
|
-
* The geometry type of a geometry column of a single type.
|
|
11
|
-
*
|
|
11
|
+
* The geometry type of a geometry column of a single type.
|
|
12
|
+
*
|
|
13
|
+
* A table whose rows have different types gives a {@link TableMixedGeometry}, made of columns of
|
|
14
|
+
* these types.
|
|
12
15
|
*/
|
|
13
|
-
export type
|
|
16
|
+
export type GeometryType = 'Point' | 'LineString' | 'Polygon' | 'MultiPoint' | 'MultiLineString' | 'MultiPolygon';
|
|
14
17
|
/**
|
|
15
|
-
* The geometry column of a
|
|
16
|
-
*
|
|
18
|
+
* The geometry column of a table whose rows share one geometry type.
|
|
19
|
+
*
|
|
20
|
+
* It follows the layout of GeoArrow: interleaved coordinates and the offset arrays, outermost
|
|
21
|
+
* first.
|
|
17
22
|
*
|
|
18
23
|
* Every row owns a contiguous run of the coordinates, so the offsets only say where each row,
|
|
19
24
|
* part and ring starts:
|
|
@@ -30,20 +35,20 @@ export type DatasetColumnarGeometryType = 'Point' | 'LineString' | 'Polygon' | '
|
|
|
30
35
|
* the first element, the last is the end of the last), and its values never decrease.
|
|
31
36
|
*
|
|
32
37
|
* A row without a geometry has an empty run (two equal offsets), or NaN coordinates for a Point,
|
|
33
|
-
* or a 0 bit in {@link
|
|
38
|
+
* or a 0 bit in {@link Table.validity}. It is neither drawn nor hit.
|
|
34
39
|
*
|
|
35
40
|
* @example A table of two lines
|
|
36
41
|
* ```ts
|
|
37
|
-
* const geometry:
|
|
42
|
+
* const geometry: TableGeometry = {
|
|
38
43
|
* type: 'LineString',
|
|
39
44
|
* coords: new Float64Array([139.70, 35.68, 139.71, 35.69, 139.72, 35.66, 139.73, 35.67]),
|
|
40
45
|
* offsets: [new Int32Array([0, 2, 4])],
|
|
41
46
|
* };
|
|
42
47
|
* ```
|
|
43
48
|
*/
|
|
44
|
-
export interface
|
|
49
|
+
export interface TableGeometry {
|
|
45
50
|
/** The geometry type of every row */
|
|
46
|
-
type:
|
|
51
|
+
type: GeometryType;
|
|
47
52
|
/**
|
|
48
53
|
* The coordinates in degrees, interleaved: `[lng0, lat0, lng1, lat1, ...]`, or
|
|
49
54
|
* `[lng0, lat0, z0, ...]` with `dimensions: 3`
|
|
@@ -58,20 +63,22 @@ export interface DatasetColumnarGeometry {
|
|
|
58
63
|
offsets?: Int32Array[];
|
|
59
64
|
}
|
|
60
65
|
/**
|
|
61
|
-
* The geometry column of a table whose rows have different geometry types
|
|
62
|
-
*
|
|
63
|
-
*
|
|
66
|
+
* The geometry column of a table whose rows have different geometry types.
|
|
67
|
+
*
|
|
68
|
+
* It follows the layout of the mixed geometry of GeoArrow (a dense union of Arrow): a geometry
|
|
69
|
+
* column of a single type per child, and for every row of the table the child and the row within
|
|
70
|
+
* it.
|
|
64
71
|
*
|
|
65
72
|
* The geometry of row `i` is row `offsets[i]` of `children[types[i]]`, and row `i` behaves exactly
|
|
66
73
|
* as the feature of that child's type with those coordinates. The rows of a child can be in any
|
|
67
74
|
* order; the draw order is the order of the table rows. A row with a negative `types[i]` has no
|
|
68
|
-
* geometry (as a 0 bit in {@link
|
|
75
|
+
* geometry (as a 0 bit in {@link Table.validity}, which still applies on top). The
|
|
69
76
|
* number of rows of a child is read from its arrays: the coordinates for a Point column,
|
|
70
77
|
* `offsets[0].length - 1` for the others.
|
|
71
78
|
*
|
|
72
79
|
* @example A point, a line and a polygon, the polygon first in the table
|
|
73
80
|
* ```ts
|
|
74
|
-
* const geometry:
|
|
81
|
+
* const geometry: TableMixedGeometry = {
|
|
75
82
|
* type: 'Mixed',
|
|
76
83
|
* types: new Int8Array([2, 0, 1]),
|
|
77
84
|
* offsets: new Int32Array([0, 0, 0]),
|
|
@@ -91,7 +98,7 @@ export interface DatasetColumnarGeometry {
|
|
|
91
98
|
* };
|
|
92
99
|
* ```
|
|
93
100
|
*/
|
|
94
|
-
export interface
|
|
101
|
+
export interface TableMixedGeometry {
|
|
95
102
|
/** Marks the mixed form */
|
|
96
103
|
type: 'Mixed';
|
|
97
104
|
/**
|
|
@@ -102,57 +109,57 @@ export interface DatasetColumnarMixedGeometry {
|
|
|
102
109
|
/** For every row, the row within its child column */
|
|
103
110
|
offsets: Int32Array;
|
|
104
111
|
/** The geometry columns of a single type */
|
|
105
|
-
children:
|
|
112
|
+
children: TableGeometry[];
|
|
106
113
|
}
|
|
107
114
|
/**
|
|
108
|
-
*
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
* An attribute column encoded as a dictionary (the dictionary type of Arrow): the value of row
|
|
113
|
-
* `i` is `dictionary[codes[i]]`. A negative code, or one past the end of the dictionary, means
|
|
114
|
-
* no value (`null`).
|
|
115
|
+
* An attribute column encoded as a dictionary (the dictionary type of Arrow).
|
|
116
|
+
*
|
|
117
|
+
* The value of row `i` is `dictionary[codes[i]]`. A negative code, or one past the end of the
|
|
118
|
+
* dictionary, means no value (`null`).
|
|
115
119
|
*
|
|
116
120
|
* @example
|
|
117
121
|
* ```ts
|
|
118
|
-
* const category:
|
|
122
|
+
* const category: DictionaryColumn = {
|
|
119
123
|
* codes: new Int32Array([0, 1, 0, -1]),
|
|
120
124
|
* dictionary: ['cafe', 'school'],
|
|
121
125
|
* }; // 'cafe', 'school', 'cafe', null
|
|
122
126
|
* ```
|
|
123
127
|
*/
|
|
124
|
-
export interface
|
|
128
|
+
export interface DictionaryColumn {
|
|
125
129
|
/** The code of each row */
|
|
126
|
-
codes:
|
|
130
|
+
codes: Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array;
|
|
127
131
|
/** The distinct values */
|
|
128
132
|
dictionary: readonly (string | number | boolean | null)[];
|
|
129
133
|
}
|
|
130
134
|
/**
|
|
131
|
-
* An attribute column of a
|
|
132
|
-
*
|
|
133
|
-
* `
|
|
135
|
+
* An attribute column of a table: a typed array of numbers, a dictionary, or a plain array.
|
|
136
|
+
*
|
|
137
|
+
* Row `i` of the table is element `i` of the column. In a `Float64Array` or a `Float32Array`,
|
|
138
|
+
* NaN means no value (`null`).
|
|
134
139
|
*/
|
|
135
|
-
export type
|
|
140
|
+
export type Column = Float64Array | Float32Array | Int32Array | Uint32Array | Int16Array | Uint16Array | Int8Array | Uint8Array | DictionaryColumn | readonly unknown[];
|
|
136
141
|
/**
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
* {@link
|
|
142
|
+
* A table of rows held as columns, the fast way to put many rows on the map.
|
|
143
|
+
*
|
|
144
|
+
* Build one with {@link tableFromFeatures} or {@link createTableBuilder}, or take the output of
|
|
145
|
+
* a GeoArrow reader as it is: the layout is the same. Pass it as `table` to
|
|
146
|
+
* {@link maplibre-gl-draw!DatasetsCollection.add | draw.datasets.add} or to
|
|
147
|
+
* {@link maplibre-gl-draw!Dataset.setTable | Dataset.setTable}.
|
|
140
148
|
*
|
|
141
149
|
* Nothing is copied: the dataset keeps and reads the arrays, so do not change them while the
|
|
142
|
-
* dataset holds them (replace the table with `
|
|
143
|
-
*
|
|
144
|
-
* `@sakuzu/maplibre-gl-draw/columnar` lists their buffers.
|
|
150
|
+
* dataset holds them (replace the table with `setTable` instead). Every array can be sent from a
|
|
151
|
+
* Worker without a copy; {@link transferList} lists their buffers.
|
|
145
152
|
*
|
|
146
153
|
* Row `i` behaves as the feature `{ id, type: geometry.type, coordinates, properties }` where
|
|
147
154
|
* `coordinates` are read from the geometry column, `properties` holds the value of every column at
|
|
148
155
|
* row `i`, and `id` is `String(ids[i])` (or `String(i)` without `ids`). With a
|
|
149
|
-
* {@link
|
|
156
|
+
* {@link TableMixedGeometry}, `type` and `coordinates` are those of the row's child
|
|
150
157
|
* column. The rows have no individual style; the style rule and the base style of the dataset
|
|
151
158
|
* color them.
|
|
152
159
|
*
|
|
153
160
|
* @example
|
|
154
161
|
* ```ts
|
|
155
|
-
* const places:
|
|
162
|
+
* const places: Table = {
|
|
156
163
|
* length: 3,
|
|
157
164
|
* geometry: {
|
|
158
165
|
* type: 'Point',
|
|
@@ -163,17 +170,17 @@ export type DatasetColumn = Float64Array | Float32Array | Int32Array | Uint32Arr
|
|
|
163
170
|
* visitors: new Float64Array([3.5, 0.7, 3.0]),
|
|
164
171
|
* },
|
|
165
172
|
* };
|
|
166
|
-
* draw.
|
|
173
|
+
* draw.datasets.add({ id: 'places', table: places });
|
|
167
174
|
* ```
|
|
168
175
|
*/
|
|
169
|
-
export interface
|
|
176
|
+
export interface Table {
|
|
170
177
|
/** The number of rows */
|
|
171
178
|
length: number;
|
|
172
179
|
/**
|
|
173
|
-
* The geometry column: of one type, or {@link
|
|
180
|
+
* The geometry column: of one type, or {@link TableMixedGeometry} for rows of
|
|
174
181
|
* different types
|
|
175
182
|
*/
|
|
176
|
-
geometry:
|
|
183
|
+
geometry: TableGeometry | TableMixedGeometry;
|
|
177
184
|
/**
|
|
178
185
|
* Which rows have a geometry, as the validity bitmap of Arrow: bit `i % 8` of byte `i >> 3` (the
|
|
179
186
|
* lowest bit first) is 1 for a row with a geometry. Every row has one when omitted
|
|
@@ -183,41 +190,30 @@ export interface DatasetColumnarInput {
|
|
|
183
190
|
* The id of each row, turned into a string with `String()` (the row number as a string when
|
|
184
191
|
* omitted). The ids must be unique within the table
|
|
185
192
|
*/
|
|
186
|
-
ids?:
|
|
193
|
+
ids?: Column;
|
|
187
194
|
/**
|
|
188
195
|
* The attribute columns by name. They become the `properties` of the rows, which the style
|
|
189
196
|
* rule reads. Passing only the columns that the rule and the host read is enough
|
|
190
197
|
*/
|
|
191
|
-
columns?: Record<string,
|
|
198
|
+
columns?: Record<string, Column>;
|
|
192
199
|
}
|
|
193
200
|
/**
|
|
194
|
-
*
|
|
195
|
-
* columnar table so that the main thread does not have to: the bbox of each row, the spatial
|
|
196
|
-
* chunks and the spatial index of the hit testing.
|
|
201
|
+
* A table together with what {@link prepareTable} computed for it, ready for the main thread.
|
|
197
202
|
*
|
|
198
|
-
*
|
|
199
|
-
*
|
|
200
|
-
* {@link
|
|
203
|
+
* Besides the table it carries the bbox of each row, the spatial chunks and the spatial index
|
|
204
|
+
* of the hit testing, all in typed arrays, so it can be sent from a Worker without a copy
|
|
205
|
+
* ({@link transferList}). It also tells the number of rows and the extent of the table. Treat
|
|
206
|
+
* everything else as opaque: pass the whole object as `table` to {@link maplibre-gl-draw!DatasetsCollection.add | draw.datasets.add} or to
|
|
207
|
+
* {@link maplibre-gl-draw!Dataset.setTable | Dataset.setTable}.
|
|
201
208
|
*/
|
|
202
|
-
export interface
|
|
203
|
-
/** The
|
|
209
|
+
export interface PreparedTable {
|
|
210
|
+
/** The table the rest was computed for */
|
|
211
|
+
readonly table: Table;
|
|
212
|
+
/** The number of rows, the `length` of the table it was computed for */
|
|
204
213
|
readonly length: number;
|
|
205
|
-
/**
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
readonly chunkOffsets: Int32Array;
|
|
211
|
-
/** The bbox of each chunk, `[minX, minY, maxX, maxY]` */
|
|
212
|
-
readonly chunkBounds: Float64Array;
|
|
213
|
-
/** The number of entries of one node of the spatial index */
|
|
214
|
-
readonly indexNodeSize: number;
|
|
215
|
-
/** The number of leaves of the spatial index (the rows with a geometry) */
|
|
216
|
-
readonly indexItemCount: number;
|
|
217
|
-
/** The boxes of the spatial index */
|
|
218
|
-
readonly indexBoxes: Float64Array;
|
|
219
|
-
/** The rows and child positions of the spatial index */
|
|
220
|
-
readonly indexEntries: Int32Array;
|
|
221
|
-
/** The end of each level of the spatial index */
|
|
222
|
-
readonly indexLevels: Int32Array;
|
|
214
|
+
/**
|
|
215
|
+
* The extent of the rows with a geometry, as `[west, south, east, north]` in degrees, or
|
|
216
|
+
* `null` when no row has a geometry
|
|
217
|
+
*/
|
|
218
|
+
readonly bounds: BBox | null;
|
|
223
219
|
}
|
package/dist/view/coordinator.js
CHANGED
|
@@ -5,15 +5,16 @@
|
|
|
5
5
|
*/
|
|
6
6
|
function shouldRepaint(changes) {
|
|
7
7
|
// A repaint is required if any of the following changed
|
|
8
|
-
return !!(
|
|
8
|
+
return !!(changes.features || // creation, update or deletion of features
|
|
9
9
|
changes.layers || // layer changes
|
|
10
10
|
changes.groups || // group changes (reordering, show/hide)
|
|
11
11
|
changes.layerReorder || // reordering of items within a layer
|
|
12
12
|
changes.groupReorder || // reordering of features within a group
|
|
13
13
|
changes.selection || // selection state changes
|
|
14
14
|
changes.tentative || // changes to the transient state while drawing
|
|
15
|
-
changes.uiStateChanged
|
|
16
|
-
|
|
15
|
+
changes.uiStateChanged || // changes to the UI state (dragState, boxSelection)
|
|
16
|
+
// the whole document replaced
|
|
17
|
+
changes.reset);
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* RenderCoordinator implementation
|
|
@@ -26,11 +26,12 @@
|
|
|
26
26
|
* registry per draw instance (createFeatureCompanionRegistry). When several instances
|
|
27
27
|
* (the hidden renderers of printing and thumbnails) hold different Stores that have the
|
|
28
28
|
* same feature ids, the provider has no way to tell "is this a feature of my own Store?"
|
|
29
|
-
* (a replaced
|
|
29
|
+
* (a replaced Store may return a new object from getFeature every time, so identity
|
|
30
30
|
* cannot be used), so ownership is expressed by separating the registries.
|
|
31
31
|
*/
|
|
32
32
|
import type { ProjectionData } from 'maplibre-gl';
|
|
33
|
-
import type {
|
|
33
|
+
import type { MouseNormalizedEvent } from '../dispatcher/types.js';
|
|
34
|
+
import type { FrameDrawContext } from '../extension/index.js';
|
|
34
35
|
import type { LngLat, ScreenPoint } from '../shared/math/index.js';
|
|
35
36
|
import type { Coordinate, Feature } from '../store/types.js';
|
|
36
37
|
/**
|
|
@@ -67,7 +68,8 @@ export interface CompanionHitContext {
|
|
|
67
68
|
* Draws something that accompanies a feature (a label, a callout) right below it in the
|
|
68
69
|
* draw order, and makes it clickable in the same order.
|
|
69
70
|
*
|
|
70
|
-
*
|
|
71
|
+
* A `CompanionProvider` of `draw.extensions.companionProviders` is installed as one. What is
|
|
72
|
+
* drawn and what
|
|
71
73
|
* is hit are resolved at the same position of the z order, so what is visible is what can be
|
|
72
74
|
* grabbed. A click on a companion does not change the selection; it is handed to
|
|
73
75
|
* `onCompanionClick`.
|
|
@@ -88,10 +90,11 @@ export interface FeatureCompanionProvider {
|
|
|
88
90
|
* core flushes the batch in progress before and after the call, so what is drawn always
|
|
89
91
|
* comes below this feature and above the feature one step further back.
|
|
90
92
|
*/
|
|
91
|
-
draw(feature: Feature, projectionData: ProjectionData, zoom: number, context:
|
|
93
|
+
draw(feature: Feature, projectionData: ProjectionData, zoom: number, context: FrameDrawContext): void;
|
|
92
94
|
/**
|
|
93
95
|
* Called in the z scan of click resolution, after the feature itself misses and before
|
|
94
|
-
* the next feature.
|
|
96
|
+
* the next feature. The feature itself is hit on what it draws (the marker of a point
|
|
97
|
+
* included) with the click tolerance, so it always wins over its own companion.
|
|
95
98
|
*
|
|
96
99
|
* If it returns a hit, core consumes that click (it does not change the selection state,
|
|
97
100
|
* nor does it clear the selection as an empty click would) and calls
|
|
@@ -99,12 +102,15 @@ export interface FeatureCompanionProvider {
|
|
|
99
102
|
*/
|
|
100
103
|
hitTest(feature: Feature, point: ScreenPoint, context: CompanionHitContext): CompanionHit | null;
|
|
101
104
|
/**
|
|
102
|
-
* The notification of a
|
|
105
|
+
* The notification of a click on the companion.
|
|
103
106
|
*
|
|
104
107
|
* @param featureId The ID of the feature that owns the companion
|
|
105
108
|
* @param hit The hit returned by hitTest
|
|
109
|
+
* @param event The click, when the engine has one to give
|
|
110
|
+
* @returns False to leave the click to the select mode, as a click on the feature that owns
|
|
111
|
+
* the companion; anything else consumes it
|
|
106
112
|
*/
|
|
107
|
-
onCompanionClick(featureId: string, hit: CompanionHit):
|
|
113
|
+
onCompanionClick(featureId: string, hit: CompanionHit, event?: MouseNormalizedEvent): boolean | undefined;
|
|
108
114
|
}
|
|
109
115
|
/**
|
|
110
116
|
* A companion hit resolved in the z scan, with the provider and the feature it belongs to.
|
|
@@ -96,13 +96,21 @@ export function hitTestFeatureCompanions(registry, feature, context) {
|
|
|
96
96
|
return null;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
* Hands a
|
|
99
|
+
* Hands a click on a companion to its provider
|
|
100
100
|
*
|
|
101
101
|
* If the provider has already been unregistered, nothing happens (the click stays
|
|
102
102
|
* consumed and the selection state does not change).
|
|
103
103
|
*
|
|
104
|
+
* @returns Whether the click was consumed; false when the provider leaves it to the select
|
|
105
|
+
* mode
|
|
104
106
|
* @internal
|
|
105
107
|
*/
|
|
106
|
-
export function notifyFeatureCompanionClick(registry, result) {
|
|
107
|
-
registry.get(result.providerId)
|
|
108
|
+
export function notifyFeatureCompanionClick(registry, result, event) {
|
|
109
|
+
const provider = registry.get(result.providerId);
|
|
110
|
+
if (!provider)
|
|
111
|
+
return true;
|
|
112
|
+
const consumed = event === undefined
|
|
113
|
+
? provider.onCompanionClick(result.featureId, result.hit)
|
|
114
|
+
: provider.onCompanionClick(result.featureId, result.hit, event);
|
|
115
|
+
return consumed !== false;
|
|
108
116
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* On a flat map nothing here is used and the geometry is exactly what it was.
|
|
21
21
|
*/
|
|
22
22
|
import { densifyOnMercatorPlane, globeSubdivisionGrid, } from '../shared/math/globe-subdivision.js';
|
|
23
|
-
import {
|
|
23
|
+
import { terrainStepOf, tessellatePolygonFill } from './terrain/polygon.js';
|
|
24
24
|
import { mercatorX, mercatorY } from './terrain/tessellation.js';
|
|
25
25
|
/**
|
|
26
26
|
* The most points the globe adds to one fill or one path
|
|
@@ -75,7 +75,7 @@ export function getGlobeTessellationStep(context, kind) {
|
|
|
75
75
|
* @param kind Which cell of the globe applies (the terrain has one step for everything)
|
|
76
76
|
*/
|
|
77
77
|
export function getSurfaceTessellationStep(context, kind) {
|
|
78
|
-
return
|
|
78
|
+
return terrainStepOf(context) ?? getGlobeTessellationStep(context, kind);
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
81
|
* Subdivides the fill of one feature with the step of the surface
|
|
@@ -85,7 +85,7 @@ export function getSurfaceTessellationStep(context, kind) {
|
|
|
85
85
|
* large dataset are that small at the zooms the globe is seen at.
|
|
86
86
|
*/
|
|
87
87
|
export function tessellateSurfaceFill(context, featureId, partIndex, flatCoords, indices, step) {
|
|
88
|
-
if (!
|
|
88
|
+
if (!terrainStepOf(context) && withinOneCell(flatCoords, step.grid)) {
|
|
89
89
|
return { flatCoords, indices, step };
|
|
90
90
|
}
|
|
91
91
|
return tessellatePolygonFill(context, featureId, partIndex, flatCoords, indices, step);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CustomLayerInterface, Map as MapLibreMap } from 'maplibre-gl';
|
|
2
2
|
/**
|
|
3
|
-
* Keeps the
|
|
3
|
+
* Keeps the frames of the stacking order on the map for as long as the returned detach function has not
|
|
4
4
|
* been called
|
|
5
5
|
*
|
|
6
6
|
* One rule covers every timing: the slots are added whenever the style accepts layers and a slot
|
|
@@ -12,7 +12,7 @@ function styleAcceptsLayers(map) {
|
|
|
12
12
|
return map.style?._loaded === true;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
|
-
* Keeps the
|
|
15
|
+
* Keeps the frames of the stacking order on the map for as long as the returned detach function has not
|
|
16
16
|
* been called
|
|
17
17
|
*
|
|
18
18
|
* One rule covers every timing: the slots are added whenever the style accepts layers and a slot
|