@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
package/README.ja.md
CHANGED
|
@@ -93,12 +93,15 @@ GeoParquet や Arrow の表は、点、線、多角形が行ごとに混ざっ
|
|
|
93
93
|
決められ、クリックすると属性を読めます
|
|
94
94
|
([大量のデータ](docs/guides/large-data.ja.md))。
|
|
95
95
|
|
|
96
|
-
###
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
96
|
+
### 保存と読み込み
|
|
97
|
+
|
|
98
|
+
文書を独自形式で書き出すと、レイヤー、グループ、スタイル、画像まで
|
|
99
|
+
含めて保存でき、読み込めば同じ状態に戻ります。GeoJSON で書き出せば、
|
|
100
|
+
ほかのツールと地物をやり取りできます。地物は GeoJSON の図形と
|
|
101
|
+
GeoJSON の properties を持つので、ファイルはコードで読む地物と同じ形に
|
|
102
|
+
なります。
|
|
103
|
+
変更は取引ごとに 1 つのイベントで、出どころを添えて届きます。文書を
|
|
104
|
+
保存するストアは差し替えられます
|
|
102
105
|
([保存と読み込み](docs/guides/save-load.ja.md))。
|
|
103
106
|
|
|
104
107
|
### 閲覧専用
|
|
@@ -108,7 +111,9 @@ GeoParquet や Arrow の表は、点、線、多角形が行ごとに混ざっ
|
|
|
108
111
|
|
|
109
112
|
### 拡張
|
|
110
113
|
|
|
111
|
-
|
|
114
|
+
プラグイン、独自のモード、独自の描き方を持つ地物の型、重ね描き、
|
|
115
|
+
吸着の候補やハンドルの提供者を足せます。どの種類も同じ方法で足し、
|
|
116
|
+
足したときに返る関数で外します
|
|
112
117
|
([プラグイン](docs/guides/plugins.ja.md)、
|
|
113
118
|
[独自の型](docs/guides/custom-types.ja.md))。
|
|
114
119
|
|
|
@@ -132,12 +137,12 @@ GeoParquet や Arrow の表は、点、線、多角形が行ごとに混ざっ
|
|
|
132
137
|
- [閲覧専用][ex-read-only]
|
|
133
138
|
- 閲覧専用モード、操作のロック、ロックしたレイヤー
|
|
134
139
|
- [プラグイン][ex-plugin]
|
|
135
|
-
-
|
|
140
|
+
- イベント、API、独自のモードを持つプラグイン
|
|
136
141
|
- [独自の地物型][ex-custom-feature-type]
|
|
137
|
-
-
|
|
142
|
+
- 独自の描き方、当たり判定、範囲選択を持つ地物の型
|
|
138
143
|
- [データセット][ex-large-data]
|
|
139
144
|
- 5 万のマス目の色分けと、見えている範囲の点の取り寄せ
|
|
140
|
-
- [100 万の点][ex-
|
|
145
|
+
- [100 万の点][ex-table-worker]
|
|
141
146
|
- Worker で読み込む 100 万の点
|
|
142
147
|
|
|
143
148
|
## インストール
|
|
@@ -156,7 +161,7 @@ maplibre-gl (`~6.11.1`) を使います。まだ入っていなければ、npm 7
|
|
|
156
161
|
import * as maplibregl from 'maplibre-gl';
|
|
157
162
|
import 'maplibre-gl/dist/maplibre-gl.css';
|
|
158
163
|
import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url';
|
|
159
|
-
import {
|
|
164
|
+
import { createDraw } from '@sakuzu/maplibre-gl-draw';
|
|
160
165
|
|
|
161
166
|
// maplibre-gl v6 はページごとに 1 回 worker の URL を要する (これは Vite の例)
|
|
162
167
|
maplibregl.setWorkerUrl(workerUrl);
|
|
@@ -168,7 +173,7 @@ const map = new maplibregl.Map({
|
|
|
168
173
|
zoom: 12,
|
|
169
174
|
});
|
|
170
175
|
|
|
171
|
-
const draw =
|
|
176
|
+
const draw = createDraw(map);
|
|
172
177
|
|
|
173
178
|
// 自分のボタンで描き始める。クリックで頂点を足し、最初の頂点のクリックか
|
|
174
179
|
// Enter で確定する
|
|
@@ -176,20 +181,35 @@ document.querySelector('#polygon')?.addEventListener('click', () => {
|
|
|
176
181
|
draw.setMode('draw_polygon');
|
|
177
182
|
});
|
|
178
183
|
|
|
179
|
-
draw.on('
|
|
180
|
-
console.log(feature.id, feature.type, feature.
|
|
184
|
+
draw.on('feature.created', ({ feature }) => {
|
|
185
|
+
console.log(feature.id, feature.type, feature.geometry);
|
|
181
186
|
});
|
|
182
187
|
|
|
183
|
-
// すべての地物を GeoJSON の FeatureCollection
|
|
188
|
+
// すべての地物を GeoJSON の FeatureCollection で得る
|
|
184
189
|
document.querySelector('#save')?.addEventListener('click', () => {
|
|
185
|
-
|
|
186
|
-
console.log(data);
|
|
190
|
+
console.log(JSON.stringify(draw.document.toGeoJSON()));
|
|
187
191
|
});
|
|
188
192
|
```
|
|
189
193
|
|
|
190
194
|
ページ全体は [examples/basic/](examples/basic/) にあります。
|
|
191
195
|
[はじめかた](docs/getting-started.ja.md) で順を追って説明しています。
|
|
192
196
|
|
|
197
|
+
## 入口
|
|
198
|
+
|
|
199
|
+
ほかの入口が要るとき以外は、main の入口から import します。
|
|
200
|
+
|
|
201
|
+
- `@sakuzu/maplibre-gl-draw` は、描画のインスタンス (`createDraw`)、
|
|
202
|
+
その地物、レイヤー、グループ、データセット、イベント、設定、拡張の
|
|
203
|
+
窓口です
|
|
204
|
+
- `@sakuzu/maplibre-gl-draw/geometry` は、地図の要らない図形の計算
|
|
205
|
+
です。長さや面積を測る、円やバッファーを作る、面を合成して分ける
|
|
206
|
+
ことができます。Node や Worker でも動きます
|
|
207
|
+
- `@sakuzu/maplibre-gl-draw/table` は、大きな表を Worker で読んで
|
|
208
|
+
データセットに渡す部品です
|
|
209
|
+
- `@sakuzu/maplibre-gl-draw/webgl` は、独自のシェーダーを書くための
|
|
210
|
+
部品です。小さい版で変わることがあります。ほかの 3 つはセマンティック
|
|
211
|
+
バージョニングに従います
|
|
212
|
+
|
|
193
213
|
## 動作環境
|
|
194
214
|
|
|
195
215
|
- maplibre-gl `~6.11.1` で動き、WebGL2 が必要です。
|
|
@@ -209,7 +229,7 @@ document.querySelector('#save')?.addEventListener('click', () => {
|
|
|
209
229
|
## ドキュメント
|
|
210
230
|
|
|
211
231
|
[docs/README.ja.md](docs/README.ja.md) に、はじめかた、手引き、
|
|
212
|
-
リファレンス、内部の文書を読む順に並べています。mapbox-gl-draw
|
|
232
|
+
リファレンス、内部の文書を読む順に並べています。1.0、mapbox-gl-draw、
|
|
213
233
|
terra-draw から移る場合は [移行](docs/guides/migrating.ja.md) を参照して
|
|
214
234
|
ください。
|
|
215
235
|
|
|
@@ -245,4 +265,4 @@ AGPL が製品に合わない場合は、Kasika, Inc. (可視化技研株式会
|
|
|
245
265
|
[ex-plugin]: https://sakuzu.github.io/maplibre-gl-draw/examples/plugin/
|
|
246
266
|
[ex-custom-feature-type]: https://sakuzu.github.io/maplibre-gl-draw/examples/custom-feature-type/
|
|
247
267
|
[ex-large-data]: https://sakuzu.github.io/maplibre-gl-draw/examples/large-data/
|
|
248
|
-
[ex-
|
|
268
|
+
[ex-table-worker]: https://sakuzu.github.io/maplibre-gl-draw/examples/table-worker/
|
package/README.md
CHANGED
|
@@ -97,12 +97,15 @@ large file opens. It is styled by the same style rules as drawn
|
|
|
97
97
|
features, and a click reads its properties
|
|
98
98
|
([large data](docs/guides/large-data.md)).
|
|
99
99
|
|
|
100
|
-
###
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
and load it to get the same state back.
|
|
104
|
-
features with other tools
|
|
105
|
-
|
|
100
|
+
### Save and load
|
|
101
|
+
|
|
102
|
+
Write the document in the native format to keep layers, groups, styles
|
|
103
|
+
and images, and load it to get the same state back. Write it as GeoJSON
|
|
104
|
+
to exchange features with other tools: a feature holds a GeoJSON
|
|
105
|
+
geometry and GeoJSON properties, so the file has the shape of the
|
|
106
|
+
features you read in code.
|
|
107
|
+
Every change arrives as one event per transaction, with where it came
|
|
108
|
+
from, and the store that holds the document can be replaced
|
|
106
109
|
([save and load](docs/guides/save-load.md)).
|
|
107
110
|
|
|
108
111
|
### Read-only
|
|
@@ -112,8 +115,10 @@ drawing ([read-only](docs/guides/read-only.md)).
|
|
|
112
115
|
|
|
113
116
|
### Extending
|
|
114
117
|
|
|
115
|
-
|
|
116
|
-
|
|
118
|
+
Add plugins, modes of your own, feature types with their own drawing,
|
|
119
|
+
overlays, and providers of snapping candidates and handles. Every kind
|
|
120
|
+
is added the same way and removed with the function that adding
|
|
121
|
+
returns ([plugins](docs/guides/plugins.md),
|
|
117
122
|
[custom types](docs/guides/custom-types.md)).
|
|
118
123
|
|
|
119
124
|
## Demos
|
|
@@ -138,13 +143,13 @@ Try them in the browser, with nothing to install.
|
|
|
138
143
|
- [Read-only][ex-read-only]
|
|
139
144
|
- The read-only mode, the interaction lock and locked layers
|
|
140
145
|
- [Plugin][ex-plugin]
|
|
141
|
-
- A plugin with
|
|
146
|
+
- A plugin with an event, an API and a mode of its own
|
|
142
147
|
- [Custom feature type][ex-custom-feature-type]
|
|
143
|
-
- A kind of feature with its own
|
|
148
|
+
- A kind of feature with its own drawing, hit test and box selection
|
|
144
149
|
- [Datasets][ex-large-data]
|
|
145
150
|
- 50,000 cells colored by a property, and points fetched for the part
|
|
146
151
|
of the map in view
|
|
147
|
-
- [A million points][ex-
|
|
152
|
+
- [A million points][ex-table-worker]
|
|
148
153
|
- A million points read in a Worker
|
|
149
154
|
|
|
150
155
|
## Installation
|
|
@@ -163,7 +168,7 @@ npm 7 and later install it along.
|
|
|
163
168
|
import * as maplibregl from 'maplibre-gl';
|
|
164
169
|
import 'maplibre-gl/dist/maplibre-gl.css';
|
|
165
170
|
import workerUrl from 'maplibre-gl/dist/maplibre-gl-worker.mjs?worker&url';
|
|
166
|
-
import {
|
|
171
|
+
import { createDraw } from '@sakuzu/maplibre-gl-draw';
|
|
167
172
|
|
|
168
173
|
// maplibre-gl v6 needs its worker URL once per page (Vite shown here)
|
|
169
174
|
maplibregl.setWorkerUrl(workerUrl);
|
|
@@ -175,7 +180,7 @@ const map = new maplibregl.Map({
|
|
|
175
180
|
zoom: 12,
|
|
176
181
|
});
|
|
177
182
|
|
|
178
|
-
const draw =
|
|
183
|
+
const draw = createDraw(map);
|
|
179
184
|
|
|
180
185
|
// Your own button starts drawing. Click to add vertices; click the first
|
|
181
186
|
// vertex or press Enter to finish
|
|
@@ -183,20 +188,35 @@ document.querySelector('#polygon')?.addEventListener('click', () => {
|
|
|
183
188
|
draw.setMode('draw_polygon');
|
|
184
189
|
});
|
|
185
190
|
|
|
186
|
-
draw.on('
|
|
187
|
-
console.log(feature.id, feature.type, feature.
|
|
191
|
+
draw.on('feature.created', ({ feature }) => {
|
|
192
|
+
console.log(feature.id, feature.type, feature.geometry);
|
|
188
193
|
});
|
|
189
194
|
|
|
190
|
-
// Every feature as a GeoJSON FeatureCollection
|
|
195
|
+
// Every feature as a GeoJSON FeatureCollection
|
|
191
196
|
document.querySelector('#save')?.addEventListener('click', () => {
|
|
192
|
-
|
|
193
|
-
console.log(data);
|
|
197
|
+
console.log(JSON.stringify(draw.document.toGeoJSON()));
|
|
194
198
|
});
|
|
195
199
|
```
|
|
196
200
|
|
|
197
201
|
The complete page is [examples/basic/](examples/basic/), and
|
|
198
202
|
[getting started](docs/getting-started.md) walks through it step by step.
|
|
199
203
|
|
|
204
|
+
## Entry points
|
|
205
|
+
|
|
206
|
+
Import from the main entry unless you need one of the others.
|
|
207
|
+
|
|
208
|
+
- `@sakuzu/maplibre-gl-draw`: the draw instance (`createDraw`), its
|
|
209
|
+
features, layers, groups and datasets, the events, the options and the
|
|
210
|
+
extension contract
|
|
211
|
+
- `@sakuzu/maplibre-gl-draw/geometry`: geometry that needs no map:
|
|
212
|
+
measure lengths and areas, build circles and buffers, combine and split
|
|
213
|
+
polygons. It also runs in Node and in Workers
|
|
214
|
+
- `@sakuzu/maplibre-gl-draw/table`: read a large table in a Worker and
|
|
215
|
+
pass it to a dataset
|
|
216
|
+
- `@sakuzu/maplibre-gl-draw/webgl`: the building blocks for writing your
|
|
217
|
+
own shaders. It may change in a minor release; the other three follow
|
|
218
|
+
semantic versioning
|
|
219
|
+
|
|
200
220
|
## Compatibility
|
|
201
221
|
|
|
202
222
|
- maplibre-gl `~6.11.1` and WebGL2 are required.
|
|
@@ -217,8 +237,8 @@ The complete page is [examples/basic/](examples/basic/), and
|
|
|
217
237
|
## Documentation
|
|
218
238
|
|
|
219
239
|
[docs/README.md](docs/README.md) lists every document in reading order:
|
|
220
|
-
getting started, the guides, the reference and the internals.
|
|
221
|
-
mapbox-gl-draw or terra-draw? See [migrating](docs/guides/migrating.md).
|
|
240
|
+
getting started, the guides, the reference and the internals. Moving from
|
|
241
|
+
1.0, mapbox-gl-draw or terra-draw? See [migrating](docs/guides/migrating.md).
|
|
222
242
|
|
|
223
243
|
## Contributing
|
|
224
244
|
|
|
@@ -252,4 +272,4 @@ The notices of the third-party code this package contains are in
|
|
|
252
272
|
[ex-plugin]: https://sakuzu.github.io/maplibre-gl-draw/examples/plugin/
|
|
253
273
|
[ex-custom-feature-type]: https://sakuzu.github.io/maplibre-gl-draw/examples/custom-feature-type/
|
|
254
274
|
[ex-large-data]: https://sakuzu.github.io/maplibre-gl-draw/examples/large-data/
|
|
255
|
-
[ex-
|
|
275
|
+
[ex-table-worker]: https://sakuzu.github.io/maplibre-gl-draw/examples/table-worker/
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `draw.datasets`: large data that is drawn but not edited, and is not part of the document
|
|
3
|
+
*/
|
|
4
|
+
import type { Feature as GeoJSONFeature, Geometry, Position } from 'geojson';
|
|
5
|
+
import type { BBox } from '../geometry/types.js';
|
|
6
|
+
import type { PreparedTable, Table } from '../table/index.js';
|
|
7
|
+
import type { ScreenPoint } from './events.js';
|
|
8
|
+
import type { FeatureStyle, FeatureType, StyleRule } from './model.js';
|
|
9
|
+
/**
|
|
10
|
+
* A row of a dataset, given and read as a GeoJSON feature. Its geometry may be `null`, as
|
|
11
|
+
* GeoJSON allows; such a row is kept in the table and is not drawn.
|
|
12
|
+
*
|
|
13
|
+
* Besides the members of GeoJSON, a row may carry `style`, its own look, which wins over the
|
|
14
|
+
* color of the style rule and the base style of the dataset. A row read back carries the look
|
|
15
|
+
* it was given merged over the base style, when that has a key.
|
|
16
|
+
*/
|
|
17
|
+
export type DatasetRow = GeoJSONFeature<Geometry | null> & {
|
|
18
|
+
/** The look of the row; it wins over the style rule and the base style of the dataset */
|
|
19
|
+
style?: FeatureStyle;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Where a dataset is stacked: below the layers of the document, above them, or inside the
|
|
23
|
+
* layer order.
|
|
24
|
+
*/
|
|
25
|
+
export type DatasetOrder = 'below-store' | 'above-store' | 'layer-order';
|
|
26
|
+
/** Where a dataset goes in the stacking order. */
|
|
27
|
+
export interface DatasetPlacement {
|
|
28
|
+
/** The division of the stacking order */
|
|
29
|
+
order?: DatasetOrder;
|
|
30
|
+
/** The position within the division, 0 at the back */
|
|
31
|
+
index?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The default look of the rows of a dataset for each part a style rule colors (`point`,
|
|
35
|
+
* `stroke` and `fill`). A row without a look of its own takes it.
|
|
36
|
+
*/
|
|
37
|
+
export type DatasetBaseStyle = Partial<Record<'point' | 'stroke' | 'fill', FeatureStyle>>;
|
|
38
|
+
/** The scale factor and the opacity the rows of a dataset are drawn with at a zoom. */
|
|
39
|
+
export type DatasetZoomScale = (zoom: number) => {
|
|
40
|
+
scale: number;
|
|
41
|
+
opacity: number;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* A function that returns the rows of the range in view, for a dataset whose rows are fetched
|
|
45
|
+
* as the map moves.
|
|
46
|
+
*
|
|
47
|
+
* @param bbox - The range in view, in degrees
|
|
48
|
+
* @param zoom - The zoom of the map
|
|
49
|
+
* @returns The rows of the range
|
|
50
|
+
*/
|
|
51
|
+
export type DatasetProvider = (bbox: BBox, zoom: number) => Promise<DatasetRow[]>;
|
|
52
|
+
/** How the point rows of a dataset that overlap on the screen are thinned out. */
|
|
53
|
+
export interface DatasetCollisionThinning {
|
|
54
|
+
/** Whether the thinning is on; false when it is left out */
|
|
55
|
+
enabled?: boolean;
|
|
56
|
+
/** The zoom from which every row is drawn; 17 when it is left out */
|
|
57
|
+
fullDisplayZoom?: number;
|
|
58
|
+
/** The margin around each marker, in screen pixels; 2 when it is left out */
|
|
59
|
+
marginPx?: number;
|
|
60
|
+
}
|
|
61
|
+
/** What the thinning of a dataset is doing now, for a message such as "showing n of N". */
|
|
62
|
+
export interface DatasetThinningStats {
|
|
63
|
+
/** Whether the thinning is on */
|
|
64
|
+
enabled: boolean;
|
|
65
|
+
/** Whether it is thinning out rows at the current zoom */
|
|
66
|
+
active: boolean;
|
|
67
|
+
/** The number of rows */
|
|
68
|
+
total: number;
|
|
69
|
+
/** The number of rows drawn */
|
|
70
|
+
visible: number;
|
|
71
|
+
/** The zoom band the drawn rows were chosen for, or `null` */
|
|
72
|
+
band: number | null;
|
|
73
|
+
}
|
|
74
|
+
/** The events of one dataset, by name, with their payloads. */
|
|
75
|
+
export interface DatasetEvents {
|
|
76
|
+
/** A row was clicked */
|
|
77
|
+
clicked: {
|
|
78
|
+
datasetId: string;
|
|
79
|
+
rowIndex: number;
|
|
80
|
+
row: DatasetRow;
|
|
81
|
+
lngLat: Position;
|
|
82
|
+
point: ScreenPoint;
|
|
83
|
+
};
|
|
84
|
+
/** The pointer moved over a row, or off every row (`rowIndex` and `row` are then `null`) */
|
|
85
|
+
hovered: {
|
|
86
|
+
datasetId: string;
|
|
87
|
+
rowIndex: number | null;
|
|
88
|
+
row: DatasetRow | null;
|
|
89
|
+
lngLat: Position;
|
|
90
|
+
point: ScreenPoint;
|
|
91
|
+
};
|
|
92
|
+
/** The rows, the look, the visibility, the selection or the thinning changed */
|
|
93
|
+
changed: {
|
|
94
|
+
reason: 'rows' | 'style' | 'visibility' | 'selection' | 'thinning';
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* What `datasets.add` takes. The rows are given in one of three ways, told apart by the name
|
|
99
|
+
* of the field: `rows`, `table` or `provider`. With none of them the dataset starts empty: it
|
|
100
|
+
* can be placed at once (`layers.reorder` takes its ID when its order is `layer-order`), and
|
|
101
|
+
* its rows are given later with `setRows` or `setTable`.
|
|
102
|
+
*/
|
|
103
|
+
export type DatasetOptions = {
|
|
104
|
+
/** The ID */
|
|
105
|
+
id: string;
|
|
106
|
+
/** The rule that colors the rows from their attributes */
|
|
107
|
+
styleRule?: StyleRule;
|
|
108
|
+
/** The default look */
|
|
109
|
+
baseStyle?: DatasetBaseStyle;
|
|
110
|
+
/** Whether the rows can be clicked and snapped to */
|
|
111
|
+
interactive?: boolean;
|
|
112
|
+
/** Where it is stacked */
|
|
113
|
+
order?: DatasetOrder;
|
|
114
|
+
/** The scale factor and the opacity by zoom */
|
|
115
|
+
zoomScale?: DatasetZoomScale;
|
|
116
|
+
/** The thinning of overlapping points */
|
|
117
|
+
collisionThinning?: DatasetCollisionThinning;
|
|
118
|
+
/** Picks the point rows that another renderer draws; they are not drawn by the dataset */
|
|
119
|
+
externalPointRender?: (row: DatasetRow) => boolean;
|
|
120
|
+
} & ({
|
|
121
|
+
/** The rows as GeoJSON features */
|
|
122
|
+
rows: readonly DatasetRow[];
|
|
123
|
+
} | {
|
|
124
|
+
/** The rows as a table, prepared or not */
|
|
125
|
+
table: Table | PreparedTable;
|
|
126
|
+
} | {
|
|
127
|
+
/** The function that returns the rows of the range in view */
|
|
128
|
+
provider: DatasetProvider;
|
|
129
|
+
} | {
|
|
130
|
+
/** No rows yet: they are given later with `setRows` or `setTable` */
|
|
131
|
+
rows?: undefined;
|
|
132
|
+
/** No table yet */
|
|
133
|
+
table?: undefined;
|
|
134
|
+
/** No provider */
|
|
135
|
+
provider?: undefined;
|
|
136
|
+
});
|
|
137
|
+
/**
|
|
138
|
+
* Large data drawn on the map and not edited; it is not part of the document.
|
|
139
|
+
*/
|
|
140
|
+
export interface Dataset {
|
|
141
|
+
/** The ID */
|
|
142
|
+
readonly id: string;
|
|
143
|
+
/** Where it is stacked */
|
|
144
|
+
readonly order: DatasetOrder;
|
|
145
|
+
/** Whether the rows can be clicked and snapped to */
|
|
146
|
+
readonly interactive: boolean;
|
|
147
|
+
/** Whether it is visible */
|
|
148
|
+
readonly visible: boolean;
|
|
149
|
+
/** Shows or hides the dataset. */
|
|
150
|
+
setVisible(visible: boolean): void;
|
|
151
|
+
/** Replaces every row. */
|
|
152
|
+
setRows(rows: readonly DatasetRow[]): void;
|
|
153
|
+
/** Replaces every row with a table. */
|
|
154
|
+
setTable(table: Table | PreparedTable): void;
|
|
155
|
+
/** Replaces the style rule; `undefined` removes it. */
|
|
156
|
+
setStyleRule(rule: StyleRule | undefined): void;
|
|
157
|
+
/** Replaces the scale factor and the opacity by zoom; `null` removes them. */
|
|
158
|
+
setZoomScale(zoomScale: DatasetZoomScale | null): void;
|
|
159
|
+
/** The scale factor and the opacity by zoom, or `null` when none is set. */
|
|
160
|
+
getZoomScale(): DatasetZoomScale | null;
|
|
161
|
+
/** Replaces the default look; `undefined` removes it. */
|
|
162
|
+
setBaseStyle(style: DatasetBaseStyle | undefined): void;
|
|
163
|
+
/** Replaces the function that picks the point rows another renderer draws. */
|
|
164
|
+
setExternalPointRender(predicate: ((row: DatasetRow) => boolean) | undefined): void;
|
|
165
|
+
/** The default look, or `undefined` when none is set. */
|
|
166
|
+
getBaseStyle(): DatasetBaseStyle | undefined;
|
|
167
|
+
/** Every row, in drawing order, without the rule colors and the default look. */
|
|
168
|
+
listRows(): DatasetRow[];
|
|
169
|
+
/** The rows whose extent meets the range, with the rule colors and the default look. */
|
|
170
|
+
listVisibleRows(bbox: BBox): DatasetRow[];
|
|
171
|
+
/** The indexes of the rows drawn now whose extent meets the range, in ascending order. */
|
|
172
|
+
listDrawnRows(bbox: BBox): Int32Array;
|
|
173
|
+
/** Reads a row as a GeoJSON feature; `undefined` when there is no such row. */
|
|
174
|
+
getRow(index: number): DatasetRow | undefined;
|
|
175
|
+
/** The ID of a row, or `null` when there is no such row or it has no ID. */
|
|
176
|
+
getRowId(index: number): string | null;
|
|
177
|
+
/** The type of the geometry of a row, or `null` when there is no such row. */
|
|
178
|
+
getRowType(index: number): FeatureType | null;
|
|
179
|
+
/** The extent of a row, or `null` when there is no such row or it has no geometry. */
|
|
180
|
+
getRowBounds(index: number): BBox | null;
|
|
181
|
+
/** The position of a point row, or `null` when the row is not a point. */
|
|
182
|
+
getRowPoint(index: number): Position | null;
|
|
183
|
+
/** The index of the row with this ID, or `null` when there is none. */
|
|
184
|
+
findRow(id: string): number | null;
|
|
185
|
+
/** Replaces the IDs of the selected rows. */
|
|
186
|
+
setSelectedRowIds(ids: readonly string[]): void;
|
|
187
|
+
/** The IDs of the selected rows. */
|
|
188
|
+
getSelectedRowIds(): string[];
|
|
189
|
+
/** Replaces the thinning of overlapping points; `null` turns it off. */
|
|
190
|
+
setCollisionThinning(options: DatasetCollisionThinning | null): void;
|
|
191
|
+
/** The thinning in effect with every default filled in, or `null` when it is off. */
|
|
192
|
+
getCollisionThinning(): Required<DatasetCollisionThinning> | null;
|
|
193
|
+
/** The IDs of the rows the thinning draws, or `null` when it thins nothing. */
|
|
194
|
+
listVisibleRowIds(): ReadonlySet<string> | null;
|
|
195
|
+
/** What the thinning is doing now. */
|
|
196
|
+
getThinningStats(): DatasetThinningStats;
|
|
197
|
+
/** A number that changes whenever the rows drawn change. */
|
|
198
|
+
getDrawnRowsRevision(): number;
|
|
199
|
+
/** Fetches the rows of the provider again on the next move of the map. */
|
|
200
|
+
refresh(): void;
|
|
201
|
+
/** Subscribes to an event of this dataset and returns the function that unsubscribes. */
|
|
202
|
+
on<K extends keyof DatasetEvents>(event: K, listener: (payload: DatasetEvents[K]) => void): () => void;
|
|
203
|
+
/** Unsubscribes from an event of this dataset. */
|
|
204
|
+
off<K extends keyof DatasetEvents>(event: K, listener: (payload: DatasetEvents[K]) => void): void;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* The datasets on the map, in stacking order.
|
|
208
|
+
*/
|
|
209
|
+
export interface DatasetsCollection {
|
|
210
|
+
/**
|
|
211
|
+
* Gets a dataset by ID.
|
|
212
|
+
*
|
|
213
|
+
* @returns The dataset, or `undefined` when there is none with this ID
|
|
214
|
+
*/
|
|
215
|
+
get(id: string): Dataset | undefined;
|
|
216
|
+
/** Lists the datasets in stacking order. */
|
|
217
|
+
list(): Dataset[];
|
|
218
|
+
/** Counts the datasets. */
|
|
219
|
+
count(): number;
|
|
220
|
+
/** Whether a dataset with this ID exists. */
|
|
221
|
+
has(id: string): boolean;
|
|
222
|
+
/**
|
|
223
|
+
* Adds a dataset and returns it.
|
|
224
|
+
*
|
|
225
|
+
* @throws `DrawError` with the code `already-exists` when the ID is taken, or
|
|
226
|
+
* `invalid-input` when the options are wrong
|
|
227
|
+
*/
|
|
228
|
+
add(options: DatasetOptions): Dataset;
|
|
229
|
+
/**
|
|
230
|
+
* Adds several datasets in one transaction, all of them or none, and returns them.
|
|
231
|
+
*
|
|
232
|
+
* @throws `DrawError` as {@link DatasetsCollection.add} does, for any of the options;
|
|
233
|
+
* nothing is added then
|
|
234
|
+
*/
|
|
235
|
+
addMany(options: readonly DatasetOptions[]): Dataset[];
|
|
236
|
+
/**
|
|
237
|
+
* Removes a dataset.
|
|
238
|
+
*
|
|
239
|
+
* @returns True when it was removed
|
|
240
|
+
* @throws `DrawError` with the code `not-found` when there is no dataset with this ID
|
|
241
|
+
*/
|
|
242
|
+
remove(id: string): boolean;
|
|
243
|
+
/**
|
|
244
|
+
* Removes several datasets in one transaction: all of them or none.
|
|
245
|
+
*
|
|
246
|
+
* @returns True when they were removed
|
|
247
|
+
* @throws `DrawError` with the code `not-found` when one of the IDs does not exist; nothing
|
|
248
|
+
* is removed then
|
|
249
|
+
*/
|
|
250
|
+
removeMany(ids: readonly string[]): boolean;
|
|
251
|
+
/**
|
|
252
|
+
* Moves a dataset in the stacking order.
|
|
253
|
+
*
|
|
254
|
+
* @returns True when it moved
|
|
255
|
+
* @throws `DrawError` with the code `not-found` when there is no dataset with this ID
|
|
256
|
+
*/
|
|
257
|
+
move(id: string, placement: DatasetPlacement): boolean;
|
|
258
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `draw.document`: the whole document, to load and to write out
|
|
3
|
+
*/
|
|
4
|
+
import type { FeatureCollection } from 'geojson';
|
|
5
|
+
import type { DrawDocument, LoadOptions, LoadResult, LoadSource } from './model.js';
|
|
6
|
+
/**
|
|
7
|
+
* The whole document: features, layers, groups and metadata.
|
|
8
|
+
*/
|
|
9
|
+
export interface DocumentResource {
|
|
10
|
+
/**
|
|
11
|
+
* Reads a file, a JSON string, a document of the library or GeoJSON.
|
|
12
|
+
*
|
|
13
|
+
* `options.mode` decides whether the document is replaced or the features are added; it is
|
|
14
|
+
* `replace` for a document of the library and `merge` for GeoJSON when it is left out.
|
|
15
|
+
*
|
|
16
|
+
* The source is read (and an image decoded) first; then every write is one transaction with
|
|
17
|
+
* the source `load`, whatever the format: one `document.changed` and one notification of the
|
|
18
|
+
* Store, one step for a subscriber that records changes. A load that fails writes nothing.
|
|
19
|
+
* The layer of `options.layer` and the group of `options.group` are created in that
|
|
20
|
+
* transaction too.
|
|
21
|
+
*
|
|
22
|
+
* @returns What was read, or `null` when the document is read-only
|
|
23
|
+
* @throws `DrawError` (the promise rejects; every failure is a `DrawError`) with the code
|
|
24
|
+
* `unsupported-format` when the source cannot be read (text that is not JSON, data that is
|
|
25
|
+
* neither a document of the library nor GeoJSON, an image file that cannot be decoded), or
|
|
26
|
+
* `invalid-input` when the document is not valid (a document of the library that breaks
|
|
27
|
+
* its format, an embedded image that is broken, an image without `coordinate`, `layer`
|
|
28
|
+
* with `layerId`, `layer` or `group` with a document of the library), `not-found` for a
|
|
29
|
+
* `layerId` the document does not have, or `already-exists` for an ID of `layer` or
|
|
30
|
+
* `group` that is taken
|
|
31
|
+
*/
|
|
32
|
+
load(source: LoadSource, options?: LoadOptions): Promise<LoadResult | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Reads several sources and writes all of them in one transaction with the source `load`:
|
|
35
|
+
* one `document.changed` and one notification of the Store, so that an import of several
|
|
36
|
+
* files is one step to undo and one change to send. Every source is read first, in order; the
|
|
37
|
+
* writes then follow in the same order, each as `load` would write it, against the document
|
|
38
|
+
* the earlier items left (a document of the library replaces what the earlier items wrote).
|
|
39
|
+
* `document.loaded` arrives once per item, after the writes.
|
|
40
|
+
*
|
|
41
|
+
* An item may name with `layerId` a layer that an earlier item creates with `layer`, so the
|
|
42
|
+
* items can fill one new layer and a group of it. A layer named by `layerId` that an earlier
|
|
43
|
+
* item removed is replaced with the active layer. With `layer` and `group` in the options of
|
|
44
|
+
* the items, an import of one layer per file and one group per folder is still one
|
|
45
|
+
* transaction.
|
|
46
|
+
*
|
|
47
|
+
* @param items - The sources, each with the options `load` takes
|
|
48
|
+
* @returns What was read from each item, in the order of the items, or `null` when the
|
|
49
|
+
* document is read-only
|
|
50
|
+
* @throws `DrawError` (the promise rejects) as `load` does, for the first item that cannot
|
|
51
|
+
* be read (`not-found` for a `layerId` that neither the document nor an earlier item has);
|
|
52
|
+
* nothing is written then. `invalid-input` when `items` is not an array of objects
|
|
53
|
+
* with a `source`
|
|
54
|
+
*/
|
|
55
|
+
loadMany(items: readonly {
|
|
56
|
+
source: LoadSource;
|
|
57
|
+
options?: LoadOptions;
|
|
58
|
+
}[]): Promise<LoadResult[] | null>;
|
|
59
|
+
/** The whole document in the format of the library. */
|
|
60
|
+
toJSON(): DrawDocument;
|
|
61
|
+
/**
|
|
62
|
+
* The whole document as GeoJSON. The values of the library are kept in `properties` under
|
|
63
|
+
* the prefixed keys.
|
|
64
|
+
*/
|
|
65
|
+
toGeoJSON(): FeatureCollection;
|
|
66
|
+
}
|