@sakuzu/maplibre-gl-draw 1.0.0 → 2.1.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 +1109 -2
- package/README.ja.md +83 -50
- package/README.md +89 -53
- package/THIRD_PARTY_NOTICES.md +29 -0
- package/dist/api/datasets.d.ts +263 -0
- package/dist/api/document.d.ts +66 -0
- package/dist/api/draw.d.ts +137 -0
- package/dist/api/draw.js +20 -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 +316 -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 +405 -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 +423 -0
- package/dist/api/impl/extension-host.js +364 -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 +851 -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 +21 -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 +84 -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 +154 -70
- package/dist/dispatcher/normalizer.js +25 -4
- 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 +85 -0
- package/dist/geometry/geojson.js +173 -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 +66 -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 +12 -6
- package/dist/view/layer/attach.js +86 -10
- 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 +38 -15
- 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
package/dist/store/store.d.ts
CHANGED
|
@@ -3,86 +3,54 @@
|
|
|
3
3
|
*
|
|
4
4
|
* All of the state lives in one place (Single Source of Truth), split along one line:
|
|
5
5
|
*
|
|
6
|
-
* -
|
|
7
|
-
* metadata)
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
6
|
+
* - StoreContract: the document (features, layers, groups, the stacking order, files and
|
|
7
|
+
* metadata) and the state of this client that the public `Store` holds (selection,
|
|
8
|
+
* editing, vertex selection, mode, read-only, interaction lock, local visibility). It is
|
|
9
|
+
* what a host may replace (`Options.store`), and core reads and writes it only through the
|
|
10
|
+
* methods of the public `Store`.
|
|
11
|
+
* - The state only the drawing reads (the geometry being drawn, the box selection, the drag,
|
|
12
|
+
* the vertices that follow along). core owns it around whatever holds the rest.
|
|
12
13
|
*
|
|
13
|
-
* Store joins the two for core: it reads and writes the
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* Store joins the two for core: it reads and writes the contract, holds the drawing state,
|
|
15
|
+
* gates the writes while read-only, keeps the state of this client in step with deletions,
|
|
16
|
+
* and delivers every change of a transaction in one notification. StoreView is the part of
|
|
16
17
|
* it the host sees (`draw.getStore()`): reads, subscription and transactions, no writes.
|
|
18
|
+
*
|
|
19
|
+
* DocumentStore is the document half the in-memory contract store is built on.
|
|
17
20
|
*/
|
|
18
|
-
import type {
|
|
21
|
+
import type { Store as PublicStore } from '../api/extension/store.js';
|
|
22
|
+
import type { BoxSelection, DragState, Feature, FileData, Group, Layer, Metadata, Mode, Selection, SelectionType, StoreChange, TentativeState, UpdateFeatureOptions, UpdateSource, VertexSelection } from './types.js';
|
|
19
23
|
/**
|
|
20
|
-
* The
|
|
21
|
-
*
|
|
22
|
-
* The state of a draw instance is split along one line:
|
|
23
|
-
*
|
|
24
|
-
* | Type | What it is |
|
|
25
|
-
* | --- | --- |
|
|
26
|
-
* | `DocumentStore` | The document: features, layers, groups, the stacking order, files and metadata |
|
|
27
|
-
* | {@link UiState} | The local state of this instance, never part of the document |
|
|
28
|
-
* | {@link Store} | Both behind the read-only gate, for core and plugins |
|
|
29
|
-
* | {@link StoreView} | Reads, `subscribe` and `transact`, from `draw.getStore()` |
|
|
30
|
-
* | {@link MemoryStore} | The in-memory `Store`, the default |
|
|
31
|
-
*
|
|
32
|
-
* A host that keeps the document elsewhere (a database, for example) implements this
|
|
33
|
-
* interface and passes it as the `store` option. Core keeps the
|
|
34
|
-
* local state (the selection, the features being edited, the geometry being drawn, the box
|
|
35
|
-
* selection, the drag, the vertex selection, the mode, read-only, the interaction lock and
|
|
36
|
-
* local visibility) around it. An implementation keeps the following contract.
|
|
37
|
-
*
|
|
38
|
-
* Containment: every feature is listed in exactly one container, in `group.featureIds` of its
|
|
39
|
-
* group when it has `groupId`, otherwise in `layer.order` of its layer. An implementation
|
|
40
|
-
* keeps it on every mutation, so that no stored feature is left out of drawing, hit testing
|
|
41
|
-
* and ordered export.
|
|
24
|
+
* The Store a host gives with the `store` option: the public `Store`, with the rules core
|
|
25
|
+
* relies on
|
|
42
26
|
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* the
|
|
47
|
-
*
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
*
|
|
27
|
+
* Core programs against the members of the public `Store` only: every read and every write it
|
|
28
|
+
* makes, the writes of the state of this client included, goes through them. It adds nothing
|
|
29
|
+
* to them; the state only the drawing reads (the geometry being drawn, the box selection, the
|
|
30
|
+
* drag, the vertices that follow along) stays with core. The rules an implementation keeps are
|
|
31
|
+
* written on the public `Store` and `StoreView` (`src/api/extension/store.ts`).
|
|
32
|
+
*/
|
|
33
|
+
export interface StoreContract extends PublicStore {
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The document, in memory: the half the in-memory {@link StoreContract} is built on
|
|
53
37
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* change stores a new object instead (MemoryStore freezes what it returns, so a write
|
|
57
|
-
* into it throws).
|
|
38
|
+
* An implementation keeps the containment, the stacking order and the returned objects as
|
|
39
|
+
* {@link StoreContract} describes them.
|
|
58
40
|
*
|
|
59
41
|
* Errors: a write with an argument that cannot apply (an id that does not exist, a
|
|
60
42
|
* `layerId` or `groupId` that names nothing, a duplicate id) throws and stores nothing.
|
|
61
|
-
* Read-only is not the document's concern: core gates the writes before they get here
|
|
62
|
-
* changes applied from elsewhere never pass that gate. An implementation
|
|
63
|
-
* that receives changes from elsewhere may ignore, instead of throwing, an update to an
|
|
64
|
-
* id that such a change has already removed (the caller cannot know about the removal
|
|
65
|
-
* yet); the notification then carries nothing for that id.
|
|
43
|
+
* Read-only is not the document's concern: core gates the writes before they get here.
|
|
66
44
|
*
|
|
67
|
-
* Notifications: `subscribe` delivers the document categories of
|
|
68
|
-
* layers, groups, layerReorder, groupReorder, metadata) with their source, and
|
|
69
|
-
* groups the changes of a function into one notification.
|
|
70
|
-
* carries is ignored by core. A change applied from elsewhere is notified like a local one,
|
|
71
|
-
* with the source `'remote'`, and core follows it: a deleted item leaves the selection, the
|
|
72
|
-
* vertex selection ends when its feature changed, and the hooks of the plugins fire.
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```ts
|
|
76
|
-
* // A document kept elsewhere: wrap it in a DocumentStore and hand it to the draw instance
|
|
77
|
-
* const document: DocumentStore = createSyncedDocument(roomId);
|
|
78
|
-
* const draw = createMapLibreGLDraw(map, { store: document });
|
|
79
|
-
* ```
|
|
45
|
+
* Notifications: `subscribe` delivers the document categories of StoreChange (features,
|
|
46
|
+
* layers, groups, layerReorder, groupReorder, metadata, files) with their source, and
|
|
47
|
+
* `transact` groups the changes of a function into one notification.
|
|
80
48
|
*/
|
|
81
49
|
export interface DocumentStore {
|
|
82
50
|
/** Returns the feature with this ID, or undefined */
|
|
83
51
|
getFeature(id: string): Feature | undefined;
|
|
84
52
|
/** Every feature, in no particular order */
|
|
85
|
-
|
|
53
|
+
listFeatures(): Feature[];
|
|
86
54
|
/**
|
|
87
55
|
* Creates a feature and lists it in its container
|
|
88
56
|
*
|
|
@@ -123,17 +91,18 @@ export interface DocumentStore {
|
|
|
123
91
|
*/
|
|
124
92
|
deleteFeature(id: string): void;
|
|
125
93
|
/**
|
|
126
|
-
*
|
|
94
|
+
* Every feature in stacking order
|
|
127
95
|
*
|
|
128
96
|
* Iterates in layer order -> order within the layer -> featureIds order within the
|
|
129
|
-
* group,
|
|
130
|
-
* The head of the array is the backmost and the
|
|
97
|
+
* group, whatever the visible flags say. A layer that is not on the stacking order is not
|
|
98
|
+
* drawn, and its features are not listed. The head of the array is the backmost and the
|
|
99
|
+
* end is the foreground.
|
|
131
100
|
*/
|
|
132
|
-
|
|
101
|
+
listFeaturesInOrder(): Feature[];
|
|
133
102
|
/** Returns the layer with this ID, or undefined */
|
|
134
103
|
getLayer(id: string): Layer | undefined;
|
|
135
104
|
/** Every layer, in no particular order */
|
|
136
|
-
|
|
105
|
+
listLayers(): Layer[];
|
|
137
106
|
/**
|
|
138
107
|
* Creates a layer and appends it to the stacking order (as the frontmost entry), unless the
|
|
139
108
|
* order already holds its id, which then keeps its position
|
|
@@ -164,7 +133,7 @@ export interface DocumentStore {
|
|
|
164
133
|
/** Returns the group with this ID, or undefined */
|
|
165
134
|
getGroup(id: string): Group | undefined;
|
|
166
135
|
/** Every group, in no particular order */
|
|
167
|
-
|
|
136
|
+
listGroups(): Group[];
|
|
168
137
|
/**
|
|
169
138
|
* Creates a group and sets `groupId` on its existing members, which leave the order of
|
|
170
139
|
* their layer. A group that no layer lists by the end of the operation takes the place of
|
|
@@ -183,7 +152,7 @@ export interface DocumentStore {
|
|
|
183
152
|
/** Returns the file with this ID, or undefined */
|
|
184
153
|
getFile(id: string): FileData | undefined;
|
|
185
154
|
/** Every file */
|
|
186
|
-
|
|
155
|
+
listFiles(): FileData[];
|
|
187
156
|
/** Deletes a file (the features that refer to it are not changed) */
|
|
188
157
|
deleteFile(id: string): void;
|
|
189
158
|
/** Returns the metadata of the document */
|
|
@@ -195,9 +164,9 @@ export interface DocumentStore {
|
|
|
195
164
|
*
|
|
196
165
|
* @returns The unsubscribe function
|
|
197
166
|
*/
|
|
198
|
-
subscribe(listener: (changes:
|
|
167
|
+
subscribe(listener: (changes: StoreChange) => void): () => void;
|
|
199
168
|
/**
|
|
200
|
-
* Runs fn and notifies its changes together as a single
|
|
169
|
+
* Runs fn and notifies its changes together as a single StoreChange
|
|
201
170
|
*
|
|
202
171
|
* Not atomic: when fn throws, the writes made before the throw stay applied, they are
|
|
203
172
|
* notified, and the exception is rethrown.
|
|
@@ -208,11 +177,14 @@ export interface DocumentStore {
|
|
|
208
177
|
transact<T>(fn: () => T, source?: UpdateSource): T;
|
|
209
178
|
}
|
|
210
179
|
/**
|
|
211
|
-
* The local state of this instance: never part of the document
|
|
180
|
+
* The local state of this instance as core reads and writes it: never part of the document
|
|
212
181
|
*
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
182
|
+
* The state of this client the public contract names (selection, editing, vertex selection,
|
|
183
|
+
* mode, read-only, interaction lock, local visibility) is kept by the {@link StoreContract};
|
|
184
|
+
* the drawing state (the geometry being drawn, the box selection, the drag, the vertices that
|
|
185
|
+
* follow along) is kept by core. The host reads it through {@link StoreView} and changes it
|
|
186
|
+
* through the methods of the draw instance (`setMode`, `setSelection`, `setReadOnly` and so
|
|
187
|
+
* on).
|
|
216
188
|
*/
|
|
217
189
|
export interface UiState {
|
|
218
190
|
/** Returns the current selection */
|
|
@@ -238,7 +210,7 @@ export interface UiState {
|
|
|
238
210
|
/** Sets or clears the drag in progress */
|
|
239
211
|
setDragState(state: DragState | null): void;
|
|
240
212
|
/** The selected vertices, or null when no vertex is selected */
|
|
241
|
-
|
|
213
|
+
getVertexSelection(): VertexSelection | null;
|
|
242
214
|
/** Sets or clears the selected vertices */
|
|
243
215
|
setSelectedVertices(selection: VertexSelection | null): void;
|
|
244
216
|
/**
|
|
@@ -268,9 +240,9 @@ export interface UiState {
|
|
|
268
240
|
/** Turns the interaction lock on or off */
|
|
269
241
|
setInteractionLock(value: boolean): void;
|
|
270
242
|
/** Local visibility: the ids (feature / group / layer) hidden on this client only */
|
|
271
|
-
|
|
243
|
+
isHidden(id: string): boolean;
|
|
272
244
|
/** Every ID hidden on this client only */
|
|
273
|
-
|
|
245
|
+
listHidden(): ReadonlySet<string>;
|
|
274
246
|
/** Hides or shows a feature, a group or a layer on this client only */
|
|
275
247
|
setLocallyHidden(id: string, hidden: boolean): void;
|
|
276
248
|
}
|
|
@@ -281,41 +253,28 @@ export interface UiState {
|
|
|
281
253
|
* Writes go through the methods of the draw instance (or, in a plugin, the PluginContext),
|
|
282
254
|
* so a host cannot reach past the checks those methods make. `transact` groups the writes
|
|
283
255
|
* made through them into one notification.
|
|
284
|
-
*
|
|
285
|
-
* @example
|
|
286
|
-
* ```ts
|
|
287
|
-
* const store = draw.getStore();
|
|
288
|
-
* const unsubscribe = store.subscribe((changes) => {
|
|
289
|
-
* if (changes.features) saveLater(store.getAllFeatures());
|
|
290
|
-
* });
|
|
291
|
-
* // Two writes, one notification
|
|
292
|
-
* store.transact(() => {
|
|
293
|
-
* draw.updateFeature(a, { visible: false });
|
|
294
|
-
* draw.updateFeature(b, { visible: false });
|
|
295
|
-
* });
|
|
296
|
-
* ```
|
|
297
256
|
*/
|
|
298
257
|
export interface StoreView {
|
|
299
258
|
/** Returns the feature with this ID, or undefined */
|
|
300
259
|
getFeature(id: string): Feature | undefined;
|
|
301
260
|
/** Every feature, in no particular order */
|
|
302
|
-
|
|
303
|
-
/**
|
|
304
|
-
|
|
261
|
+
listFeatures(): Feature[];
|
|
262
|
+
/** Every feature in stacking order, back to front, whatever the visible flags say */
|
|
263
|
+
listFeaturesInOrder(): Feature[];
|
|
305
264
|
/** Returns the layer with this ID, or undefined */
|
|
306
265
|
getLayer(id: string): Layer | undefined;
|
|
307
266
|
/** Every layer, in no particular order */
|
|
308
|
-
|
|
267
|
+
listLayers(): Layer[];
|
|
309
268
|
/** The stacking order of the layers, back to front */
|
|
310
269
|
getLayerOrder(): readonly string[];
|
|
311
270
|
/** Returns the group with this ID, or undefined */
|
|
312
271
|
getGroup(id: string): Group | undefined;
|
|
313
272
|
/** Every group, in no particular order */
|
|
314
|
-
|
|
273
|
+
listGroups(): Group[];
|
|
315
274
|
/** Returns the file with this ID, or undefined */
|
|
316
275
|
getFile(id: string): FileData | undefined;
|
|
317
276
|
/** Every file */
|
|
318
|
-
|
|
277
|
+
listFiles(): FileData[];
|
|
319
278
|
/** Returns the metadata of the document */
|
|
320
279
|
getMetadata(): Metadata;
|
|
321
280
|
/** Returns the current selection */
|
|
@@ -329,7 +288,7 @@ export interface StoreView {
|
|
|
329
288
|
/** The drag in progress, or null */
|
|
330
289
|
getDragState(): DragState | null;
|
|
331
290
|
/** The selected vertices, or null when no vertex is selected */
|
|
332
|
-
|
|
291
|
+
getVertexSelection(): VertexSelection | null;
|
|
333
292
|
/**
|
|
334
293
|
* The vertices that follow along when shared vertices move together (null except during a
|
|
335
294
|
* drag)
|
|
@@ -342,9 +301,9 @@ export interface StoreView {
|
|
|
342
301
|
/** Whether the interaction lock is on */
|
|
343
302
|
isInteractionLocked(): boolean;
|
|
344
303
|
/** Whether this feature, group or layer is hidden on this client only */
|
|
345
|
-
|
|
304
|
+
isHidden(id: string): boolean;
|
|
346
305
|
/** Every ID hidden on this client only */
|
|
347
|
-
|
|
306
|
+
listHidden(): ReadonlySet<string>;
|
|
348
307
|
/**
|
|
349
308
|
* Subscribes to the changes of the document and of the local state
|
|
350
309
|
*
|
|
@@ -353,9 +312,9 @@ export interface StoreView {
|
|
|
353
312
|
*
|
|
354
313
|
* @returns The unsubscribe function
|
|
355
314
|
*/
|
|
356
|
-
subscribe(listener: (changes:
|
|
315
|
+
subscribe(listener: (changes: StoreChange) => void): () => void;
|
|
357
316
|
/**
|
|
358
|
-
* Runs fn and notifies every change it makes as a single
|
|
317
|
+
* Runs fn and notifies every change it makes as a single StoreChange
|
|
359
318
|
*
|
|
360
319
|
* Not atomic: when fn throws, the writes made before the throw stay applied, they are
|
|
361
320
|
* notified, and the exception is rethrown.
|
|
@@ -370,7 +329,7 @@ export interface StoreView {
|
|
|
370
329
|
*
|
|
371
330
|
* Every document write returns true when it was applied and false when it was refused
|
|
372
331
|
* because the Store is read-only (it never throws for that). An argument that cannot apply
|
|
373
|
-
*
|
|
332
|
+
* may throw, as in {@link StoreContract}. When a feature, group or layer is deleted (by a write here or
|
|
374
333
|
* by a change applied to the document from elsewhere), its id leaves the selection, the
|
|
375
334
|
* features being edited and the locally hidden set in the same notification. A change that
|
|
376
335
|
* hides a selected item (its visible flag, the one of its group or layer, or local hiding)
|
|
@@ -379,7 +338,7 @@ export interface StoreView {
|
|
|
379
338
|
* document and of the local state of one transaction.
|
|
380
339
|
*
|
|
381
340
|
* A plugin reaches it with `getStore()` of {@link PluginContext}; the host gets the read-only
|
|
382
|
-
* {@link StoreView}. The write methods behave as those of {@link
|
|
341
|
+
* {@link StoreView}. The write methods behave as those of {@link StoreContract}.
|
|
383
342
|
*/
|
|
384
343
|
export interface Store extends StoreView, UiState {
|
|
385
344
|
/** Creates a feature (see {@link DocumentStore.createFeature}) */
|
package/dist/store/types.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* The data model of the Store
|
|
3
3
|
*
|
|
4
4
|
* The types are defined in shared/types/model.ts, below every layer, so that shared/ and
|
|
5
|
-
*
|
|
5
|
+
* dataset/ can use them without depending on store/. This file re-exports them for the code
|
|
6
6
|
* that already imports them from here.
|
|
7
7
|
*/
|
|
8
8
|
export type * from '../shared/types/model.js';
|
|
@@ -19,7 +19,7 @@ export type WritableLayerCheckStore = LocalHiddenStore;
|
|
|
19
19
|
/** The minimal interface that resolveWritableLayerId requires. */
|
|
20
20
|
export interface WritableLayerStore extends WritableLayerCheckStore {
|
|
21
21
|
getLayer(id: string): Layer | undefined;
|
|
22
|
-
|
|
22
|
+
listLayers(): Layer[];
|
|
23
23
|
}
|
|
24
24
|
/**
|
|
25
25
|
* Whether user drawing may write new features into the layer
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Whether user drawing may write new features into the layer
|
|
5
5
|
*/
|
|
6
6
|
export function isWritableLayer(layer, store) {
|
|
7
|
-
return layer !== undefined && !layer.locked && layer.visible && !store.
|
|
7
|
+
return layer !== undefined && !layer.locked && layer.visible && !store.isHidden(layer.id);
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
10
|
* Resolves the layer that user drawing writes new features into
|
|
@@ -16,5 +16,5 @@ export function isWritableLayer(layer, store) {
|
|
|
16
16
|
export function resolveWritableLayerId(store, preferredId) {
|
|
17
17
|
if (isWritableLayer(store.getLayer(preferredId), store))
|
|
18
18
|
return preferredId;
|
|
19
|
-
return store.
|
|
19
|
+
return store.listLayers().find((layer) => isWritableLayer(layer, store))?.id ?? '';
|
|
20
20
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The building of a table from GeoJSON, row by row
|
|
3
|
+
*
|
|
4
|
+
* The builder collects the coordinates into growing typed arrays and the offsets in the layout
|
|
5
|
+
* of GeoArrow, one geometry column per geometry type. At the end the columns become the geometry
|
|
6
|
+
* of the table: the one column when every row has the same type, or a mixed geometry column
|
|
7
|
+
* otherwise. The attributes are collected per property name and become typed columns where they
|
|
8
|
+
* can.
|
|
9
|
+
*
|
|
10
|
+
* A pure module (it imports only types), so it runs in a Worker as well.
|
|
11
|
+
*/
|
|
12
|
+
import type { Feature, Geometry } from 'geojson';
|
|
13
|
+
import type { GeometryType, Table } from './types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Builds a table one row at a time, for readers that stream their rows.
|
|
16
|
+
*
|
|
17
|
+
* Create one with {@link createTableBuilder}, call `add` once per row and `finish` once at the
|
|
18
|
+
* end.
|
|
19
|
+
*/
|
|
20
|
+
export interface TableBuilder {
|
|
21
|
+
/**
|
|
22
|
+
* Adds one row.
|
|
23
|
+
*
|
|
24
|
+
* A null geometry, or a `GeometryCollection` (which a table cannot hold), gives a row without
|
|
25
|
+
* a geometry: it keeps its place and its attributes but is neither drawn nor hit.
|
|
26
|
+
*
|
|
27
|
+
* @param geometry The GeoJSON geometry of the row; only the first two values of each position
|
|
28
|
+
* are kept
|
|
29
|
+
* @param properties The attributes of the row
|
|
30
|
+
* @param id The id of the row. Once any row has an id, the rows without one get their row
|
|
31
|
+
* number
|
|
32
|
+
* @throws when the builder was created with a `geometryType` and the geometry has another
|
|
33
|
+
* type, or when `finish` was already called
|
|
34
|
+
*/
|
|
35
|
+
add(geometry: Geometry | null, properties?: Record<string, unknown> | null, id?: string | number): void;
|
|
36
|
+
/**
|
|
37
|
+
* Turns the rows added so far into a table; the builder cannot be used afterwards.
|
|
38
|
+
*
|
|
39
|
+
* @throws when it was already called
|
|
40
|
+
*/
|
|
41
|
+
finish(): Table;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates a builder that makes a table from rows added one at a time.
|
|
45
|
+
*
|
|
46
|
+
* The coordinates are collected into growing typed arrays in the layout of GeoArrow. When every
|
|
47
|
+
* row has the same geometry type the table has one geometry column of that type; otherwise it
|
|
48
|
+
* has a mixed geometry column. An attribute whose values are all numbers (or null) becomes a
|
|
49
|
+
* `Float64Array` with NaN for null; any other attribute becomes a plain array.
|
|
50
|
+
*
|
|
51
|
+
* @param options `geometryType` fixes the geometry type of every row (a geometry of another
|
|
52
|
+
* type throws), and gives the type of a table without any geometry. `capacity` is the
|
|
53
|
+
* expected number of rows, to size the arrays from the start. `columns` limits the attributes
|
|
54
|
+
* that become columns to these names (every one is created, even if no row has it)
|
|
55
|
+
* @returns A new builder
|
|
56
|
+
*/
|
|
57
|
+
export declare function createTableBuilder(options?: {
|
|
58
|
+
geometryType?: GeometryType;
|
|
59
|
+
capacity?: number;
|
|
60
|
+
columns?: readonly string[];
|
|
61
|
+
}): TableBuilder;
|
|
62
|
+
/**
|
|
63
|
+
* Makes a table from an array of GeoJSON features.
|
|
64
|
+
*
|
|
65
|
+
* It is {@link createTableBuilder} with one `add` per feature: the geometry, the properties and
|
|
66
|
+
* the id of each feature become a row. Rows of different geometry types give a mixed geometry
|
|
67
|
+
* column.
|
|
68
|
+
*
|
|
69
|
+
* @param features The features, in row order
|
|
70
|
+
* @param options `columns` limits the properties that become columns to these names
|
|
71
|
+
* @returns The table
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* import { tableFromFeatures } from '@sakuzu/maplibre-gl-draw/table';
|
|
76
|
+
*
|
|
77
|
+
* const table = tableFromFeatures(collection.features, { columns: ['name', 'visitors'] });
|
|
78
|
+
* draw.datasets.add({ id: 'places', table });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function tableFromFeatures(features: readonly Feature<Geometry | null>[], options?: {
|
|
82
|
+
columns?: readonly string[];
|
|
83
|
+
}): Table;
|