@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
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
* rings, ring is always treated as 0, and any ring other than 0 is regarded as an
|
|
18
18
|
* invalid reference.
|
|
19
19
|
*/
|
|
20
|
+
import { coordinatesOf } from '../shared/utils/coordinates.js';
|
|
20
21
|
import { getVertexPart } from '../shared/utils/vertex-ref.js';
|
|
21
22
|
/**
|
|
22
23
|
* Whether the ring is closed (first = last)
|
|
@@ -171,7 +172,7 @@ function movePolygonVertices(rings, initialRings, refs, dx, dy) {
|
|
|
171
172
|
* @internal
|
|
172
173
|
*/
|
|
173
174
|
export function computeVertexMove(state, currentLngLat, feature) {
|
|
174
|
-
const {
|
|
175
|
+
const { vertices, startLngLat, initialCoordinates } = state;
|
|
175
176
|
// Compute the amount of movement
|
|
176
177
|
const dx = currentLngLat.lng - startLngLat.lng;
|
|
177
178
|
const dy = currentLngLat.lat - startLngLat.lat;
|
|
@@ -184,12 +185,12 @@ export function computeVertexMove(state, currentLngLat, feature) {
|
|
|
184
185
|
// invalid reference)
|
|
185
186
|
if (feature.type === 'LineString') {
|
|
186
187
|
const coords = initialCoordinates.slice();
|
|
187
|
-
moveLineVertices(coords, refsOfPart(
|
|
188
|
+
moveLineVertices(coords, refsOfPart(vertices, 0), dx, dy);
|
|
188
189
|
return coords;
|
|
189
190
|
}
|
|
190
191
|
if (feature.type === 'Polygon') {
|
|
191
192
|
const initialRings = initialCoordinates;
|
|
192
|
-
const refs = refsOfPart(
|
|
193
|
+
const refs = refsOfPart(vertices, 0);
|
|
193
194
|
const rings = copyRingsForRefs(initialRings, refs);
|
|
194
195
|
movePolygonVertices(rings, initialRings, refs, dx, dy);
|
|
195
196
|
return rings;
|
|
@@ -198,7 +199,7 @@ export function computeVertexMove(state, currentLngLat, feature) {
|
|
|
198
199
|
// Each coordinate is one part. In a reference, part = the part number, and
|
|
199
200
|
// ring / index are 0
|
|
200
201
|
const points = initialCoordinates.slice();
|
|
201
|
-
for (const ref of
|
|
202
|
+
for (const ref of vertices) {
|
|
202
203
|
if (ref.ring !== 0 || ref.index !== 0)
|
|
203
204
|
continue;
|
|
204
205
|
const part = getVertexPart(ref);
|
|
@@ -213,7 +214,7 @@ export function computeVertexMove(state, currentLngLat, feature) {
|
|
|
213
214
|
// original array
|
|
214
215
|
const initialParts = initialCoordinates;
|
|
215
216
|
const parts = initialParts.slice();
|
|
216
|
-
for (const [part, refs] of groupRefsByPart(
|
|
217
|
+
for (const [part, refs] of groupRefsByPart(vertices)) {
|
|
217
218
|
if (part < 0 || part >= parts.length)
|
|
218
219
|
continue;
|
|
219
220
|
const coords = initialParts[part].slice();
|
|
@@ -225,7 +226,7 @@ export function computeVertexMove(state, currentLngLat, feature) {
|
|
|
225
226
|
if (feature.type === 'MultiPolygon') {
|
|
226
227
|
const initialParts = initialCoordinates;
|
|
227
228
|
const parts = initialParts.slice();
|
|
228
|
-
for (const [part, refs] of groupRefsByPart(
|
|
229
|
+
for (const [part, refs] of groupRefsByPart(vertices)) {
|
|
229
230
|
if (part < 0 || part >= parts.length)
|
|
230
231
|
continue;
|
|
231
232
|
const initialRings = initialParts[part];
|
|
@@ -260,7 +261,7 @@ function copyTopLevelCoordinates(coordinates) {
|
|
|
260
261
|
* computeVertexMove). The top-level array is always made new, only the container
|
|
261
262
|
* that splice changes (the target ring / part) is copied, and the other parts /
|
|
262
263
|
* rings / coordinate pairs keep sharing references with the input. The input
|
|
263
|
-
*
|
|
264
|
+
* geometry is never rewritten. For a feature on the order of 100,000
|
|
264
265
|
* vertices a full copy took more than ten milliseconds each time, which produced a
|
|
265
266
|
* hitch on a single click that added a vertex.
|
|
266
267
|
*
|
|
@@ -272,7 +273,7 @@ function copyTopLevelCoordinates(coordinates) {
|
|
|
272
273
|
export function addVertex(feature, after, newCoord) {
|
|
273
274
|
const part = getVertexPart(after);
|
|
274
275
|
if (feature.type === 'LineString') {
|
|
275
|
-
const lineCoords = feature.
|
|
276
|
+
const lineCoords = coordinatesOf(feature).slice();
|
|
276
277
|
// It has neither rings nor parts, so nothing is added other than ring 0 / part 0
|
|
277
278
|
if (after.ring !== 0 || part !== 0)
|
|
278
279
|
return lineCoords;
|
|
@@ -280,7 +281,7 @@ export function addVertex(feature, after, newCoord) {
|
|
|
280
281
|
return lineCoords;
|
|
281
282
|
}
|
|
282
283
|
if (feature.type === 'Polygon') {
|
|
283
|
-
const initialRings = feature
|
|
284
|
+
const initialRings = coordinatesOf(feature);
|
|
284
285
|
const rings = initialRings.slice();
|
|
285
286
|
if (part !== 0)
|
|
286
287
|
return rings;
|
|
@@ -292,7 +293,7 @@ export function addVertex(feature, after, newCoord) {
|
|
|
292
293
|
return rings;
|
|
293
294
|
}
|
|
294
295
|
if (feature.type === 'MultiLineString') {
|
|
295
|
-
const initialParts = feature
|
|
296
|
+
const initialParts = coordinatesOf(feature);
|
|
296
297
|
const parts = initialParts.slice();
|
|
297
298
|
if (after.ring !== 0)
|
|
298
299
|
return parts;
|
|
@@ -304,7 +305,7 @@ export function addVertex(feature, after, newCoord) {
|
|
|
304
305
|
return parts;
|
|
305
306
|
}
|
|
306
307
|
if (feature.type === 'MultiPolygon') {
|
|
307
|
-
const initialParts = feature
|
|
308
|
+
const initialParts = coordinatesOf(feature);
|
|
308
309
|
const parts = initialParts.slice();
|
|
309
310
|
if (part < 0 || part >= parts.length)
|
|
310
311
|
return parts;
|
|
@@ -318,7 +319,7 @@ export function addVertex(feature, after, newCoord) {
|
|
|
318
319
|
parts[part] = rings;
|
|
319
320
|
return parts;
|
|
320
321
|
}
|
|
321
|
-
return copyTopLevelCoordinates(feature
|
|
322
|
+
return copyTopLevelCoordinates(coordinatesOf(feature));
|
|
322
323
|
}
|
|
323
324
|
/**
|
|
324
325
|
* Returns an array of rings with one vertex deleted from a ring of the polygon
|
|
@@ -376,7 +377,7 @@ function deleteVertexFromRings(initialRings, ref) {
|
|
|
376
377
|
* computeVertexMove). The top-level array is always made new, only the container
|
|
377
378
|
* that splice changes (the target ring / part) is copied, and the other parts /
|
|
378
379
|
* rings / coordinate pairs keep sharing references with the input. The input
|
|
379
|
-
*
|
|
380
|
+
* geometry is never rewritten.
|
|
380
381
|
*
|
|
381
382
|
* @internal
|
|
382
383
|
*/
|
|
@@ -391,7 +392,7 @@ export function deleteVertex(feature, ref) {
|
|
|
391
392
|
// invalid reference
|
|
392
393
|
if (ref.ring !== 0 || part !== 0)
|
|
393
394
|
return null;
|
|
394
|
-
const initialCoords = feature
|
|
395
|
+
const initialCoords = coordinatesOf(feature);
|
|
395
396
|
// At least 2 points are needed
|
|
396
397
|
if (initialCoords.length <= 2)
|
|
397
398
|
return null;
|
|
@@ -402,12 +403,12 @@ export function deleteVertex(feature, ref) {
|
|
|
402
403
|
if (feature.type === 'Polygon') {
|
|
403
404
|
if (part !== 0)
|
|
404
405
|
return null;
|
|
405
|
-
return deleteVertexFromRings(feature
|
|
406
|
+
return deleteVertexFromRings(coordinatesOf(feature), ref);
|
|
406
407
|
}
|
|
407
408
|
if (feature.type === 'MultiPoint') {
|
|
408
409
|
// Deleting a vertex removes the part itself. The last remaining part cannot be
|
|
409
410
|
// removed
|
|
410
|
-
const initialPoints = feature
|
|
411
|
+
const initialPoints = coordinatesOf(feature);
|
|
411
412
|
if (ref.ring !== 0 || ref.index !== 0)
|
|
412
413
|
return null;
|
|
413
414
|
if (part < 0 || part >= initialPoints.length)
|
|
@@ -419,7 +420,7 @@ export function deleteVertex(feature, ref) {
|
|
|
419
420
|
return points;
|
|
420
421
|
}
|
|
421
422
|
if (feature.type === 'MultiLineString') {
|
|
422
|
-
const initialParts = feature
|
|
423
|
+
const initialParts = coordinatesOf(feature);
|
|
423
424
|
if (ref.ring !== 0)
|
|
424
425
|
return null;
|
|
425
426
|
if (part < 0 || part >= initialParts.length)
|
|
@@ -435,7 +436,7 @@ export function deleteVertex(feature, ref) {
|
|
|
435
436
|
return parts;
|
|
436
437
|
}
|
|
437
438
|
if (feature.type === 'MultiPolygon') {
|
|
438
|
-
const initialParts = feature
|
|
439
|
+
const initialParts = coordinatesOf(feature);
|
|
439
440
|
if (part < 0 || part >= initialParts.length)
|
|
440
441
|
return null;
|
|
441
442
|
const rings = deleteVertexFromRings(initialParts[part], ref);
|
|
@@ -445,35 +446,35 @@ export function deleteVertex(feature, ref) {
|
|
|
445
446
|
parts[part] = rings;
|
|
446
447
|
return parts;
|
|
447
448
|
}
|
|
448
|
-
return copyTopLevelCoordinates(feature
|
|
449
|
+
return copyTopLevelCoordinates(coordinatesOf(feature));
|
|
449
450
|
}
|
|
450
451
|
/**
|
|
451
452
|
* Starts the vertex movement operation
|
|
452
453
|
*
|
|
453
454
|
* @internal
|
|
454
455
|
*/
|
|
455
|
-
export function startVertexMove(feature,
|
|
456
|
-
if (
|
|
456
|
+
export function startVertexMove(feature, vertices, startLngLat) {
|
|
457
|
+
if (vertices.length === 0)
|
|
457
458
|
return null;
|
|
458
459
|
// Check the validity of the vertex references
|
|
459
460
|
if (feature.type === 'Point') {
|
|
460
|
-
if (
|
|
461
|
+
if (vertices.length !== 1)
|
|
461
462
|
return null;
|
|
462
|
-
const ref =
|
|
463
|
+
const ref = vertices[0];
|
|
463
464
|
if (getVertexPart(ref) !== 0 || ref.ring !== 0 || ref.index !== 0)
|
|
464
465
|
return null;
|
|
465
466
|
}
|
|
466
467
|
else if (feature.type === 'LineString') {
|
|
467
|
-
const coords = feature
|
|
468
|
-
const isValid =
|
|
468
|
+
const coords = coordinatesOf(feature);
|
|
469
|
+
const isValid = vertices.every((r) => getVertexPart(r) === 0 && r.ring === 0 && r.index >= 0 && r.index < coords.length);
|
|
469
470
|
if (!isValid)
|
|
470
471
|
return null;
|
|
471
472
|
}
|
|
472
473
|
else if (feature.type === 'Polygon') {
|
|
473
|
-
const rings = feature
|
|
474
|
+
const rings = coordinatesOf(feature);
|
|
474
475
|
if (rings.length === 0)
|
|
475
476
|
return null;
|
|
476
|
-
const isValid =
|
|
477
|
+
const isValid = vertices.every((r) => getVertexPart(r) === 0 &&
|
|
477
478
|
r.ring >= 0 &&
|
|
478
479
|
r.ring < rings.length &&
|
|
479
480
|
r.index >= 0 &&
|
|
@@ -482,10 +483,10 @@ export function startVertexMove(feature, vertexIndices, startLngLat) {
|
|
|
482
483
|
return null;
|
|
483
484
|
}
|
|
484
485
|
else if (feature.type === 'MultiPoint') {
|
|
485
|
-
const points = feature
|
|
486
|
+
const points = coordinatesOf(feature);
|
|
486
487
|
if (points.length === 0)
|
|
487
488
|
return null;
|
|
488
|
-
const isValid =
|
|
489
|
+
const isValid = vertices.every((r) => {
|
|
489
490
|
const part = getVertexPart(r);
|
|
490
491
|
return part >= 0 && part < points.length && r.ring === 0 && r.index === 0;
|
|
491
492
|
});
|
|
@@ -493,10 +494,10 @@ export function startVertexMove(feature, vertexIndices, startLngLat) {
|
|
|
493
494
|
return null;
|
|
494
495
|
}
|
|
495
496
|
else if (feature.type === 'MultiLineString') {
|
|
496
|
-
const parts = feature
|
|
497
|
+
const parts = coordinatesOf(feature);
|
|
497
498
|
if (parts.length === 0)
|
|
498
499
|
return null;
|
|
499
|
-
const isValid =
|
|
500
|
+
const isValid = vertices.every((r) => {
|
|
500
501
|
const part = getVertexPart(r);
|
|
501
502
|
if (part < 0 || part >= parts.length)
|
|
502
503
|
return false;
|
|
@@ -506,10 +507,10 @@ export function startVertexMove(feature, vertexIndices, startLngLat) {
|
|
|
506
507
|
return null;
|
|
507
508
|
}
|
|
508
509
|
else if (feature.type === 'MultiPolygon') {
|
|
509
|
-
const parts = feature
|
|
510
|
+
const parts = coordinatesOf(feature);
|
|
510
511
|
if (parts.length === 0)
|
|
511
512
|
return null;
|
|
512
|
-
const isValid =
|
|
513
|
+
const isValid = vertices.every((r) => {
|
|
513
514
|
const part = getVertexPart(r);
|
|
514
515
|
if (part < 0 || part >= parts.length)
|
|
515
516
|
return false;
|
|
@@ -526,13 +527,13 @@ export function startVertexMove(feature, vertexIndices, startLngLat) {
|
|
|
526
527
|
}
|
|
527
528
|
return {
|
|
528
529
|
featureId: feature.id,
|
|
529
|
-
|
|
530
|
+
vertices: vertices.map((r) => ({ ...r })),
|
|
530
531
|
startLngLat,
|
|
531
532
|
// Coordinates follow the convention of immutable updates (an update is always a
|
|
532
533
|
// replacement with a new array), and during a drag computeVertexMove also builds a
|
|
533
534
|
// new array every time and swaps it in.
|
|
534
535
|
// So holding a reference from the start is enough: the contents do not change
|
|
535
536
|
// afterwards and no copy is needed
|
|
536
|
-
initialCoordinates: feature
|
|
537
|
+
initialCoordinates: coordinatesOf(feature),
|
|
537
538
|
};
|
|
538
539
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** The named colors of CSS, as `name` and `rrggbb` in turn */
|
|
4
|
+
const NAMED = 'aliceblue f0f8ff antiquewhite faebd7 aqua 00ffff aquamarine 7fffd4 azure f0ffff beige f5f5dc ' +
|
|
5
|
+
'bisque ffe4c4 black 000000 blanchedalmond ffebcd blue 0000ff blueviolet 8a2be2 brown a52a2a ' +
|
|
6
|
+
'burlywood deb887 cadetblue 5f9ea0 chartreuse 7fff00 chocolate d2691e coral ff7f50 ' +
|
|
7
|
+
'cornflowerblue 6495ed cornsilk fff8dc crimson dc143c cyan 00ffff darkblue 00008b ' +
|
|
8
|
+
'darkcyan 008b8b darkgoldenrod b8860b darkgray a9a9a9 darkgreen 006400 darkgrey a9a9a9 ' +
|
|
9
|
+
'darkkhaki bdb76b darkmagenta 8b008b darkolivegreen 556b2f darkorange ff8c00 ' +
|
|
10
|
+
'darkorchid 9932cc darkred 8b0000 darksalmon e9967a darkseagreen 8fbc8f darkslateblue 483d8b ' +
|
|
11
|
+
'darkslategray 2f4f4f darkslategrey 2f4f4f darkturquoise 00ced1 darkviolet 9400d3 ' +
|
|
12
|
+
'deeppink ff1493 deepskyblue 00bfff dimgray 696969 dimgrey 696969 dodgerblue 1e90ff ' +
|
|
13
|
+
'firebrick b22222 floralwhite fffaf0 forestgreen 228b22 fuchsia ff00ff gainsboro dcdcdc ' +
|
|
14
|
+
'ghostwhite f8f8ff gold ffd700 goldenrod daa520 gray 808080 green 008000 greenyellow adff2f ' +
|
|
15
|
+
'grey 808080 honeydew f0fff0 hotpink ff69b4 indianred cd5c5c indigo 4b0082 ivory fffff0 ' +
|
|
16
|
+
'khaki f0e68c lavender e6e6fa lavenderblush fff0f5 lawngreen 7cfc00 lemonchiffon fffacd ' +
|
|
17
|
+
'lightblue add8e6 lightcoral f08080 lightcyan e0ffff lightgoldenrodyellow fafad2 ' +
|
|
18
|
+
'lightgray d3d3d3 lightgreen 90ee90 lightgrey d3d3d3 lightpink ffb6c1 lightsalmon ffa07a ' +
|
|
19
|
+
'lightseagreen 20b2aa lightskyblue 87cefa lightslategray 778899 lightslategrey 778899 ' +
|
|
20
|
+
'lightsteelblue b0c4de lightyellow ffffe0 lime 00ff00 limegreen 32cd32 linen faf0e6 ' +
|
|
21
|
+
'magenta ff00ff maroon 800000 mediumaquamarine 66cdaa mediumblue 0000cd mediumorchid ba55d3 ' +
|
|
22
|
+
'mediumpurple 9370db mediumseagreen 3cb371 mediumslateblue 7b68ee mediumspringgreen 00fa9a ' +
|
|
23
|
+
'mediumturquoise 48d1cc mediumvioletred c71585 midnightblue 191970 mintcream f5fffa ' +
|
|
24
|
+
'mistyrose ffe4e1 moccasin ffe4b5 navajowhite ffdead navy 000080 oldlace fdf5e6 ' +
|
|
25
|
+
'olive 808000 olivedrab 6b8e23 orange ffa500 orangered ff4500 orchid da70d6 ' +
|
|
26
|
+
'palegoldenrod eee8aa palegreen 98fb98 paleturquoise afeeee palevioletred db7093 ' +
|
|
27
|
+
'papayawhip ffefd5 peachpuff ffdab9 peru cd853f pink ffc0cb plum dda0dd powderblue b0e0e6 ' +
|
|
28
|
+
'purple 800080 rebeccapurple 663399 red ff0000 rosybrown bc8f8f royalblue 4169e1 ' +
|
|
29
|
+
'saddlebrown 8b4513 salmon fa8072 sandybrown f4a460 seagreen 2e8b57 seashell fff5ee ' +
|
|
30
|
+
'sienna a0522d silver c0c0c0 skyblue 87ceeb slateblue 6a5acd slategray 708090 ' +
|
|
31
|
+
'slategrey 708090 snow fffafa springgreen 00ff7f steelblue 4682b4 tan d2b48c teal 008080 ' +
|
|
32
|
+
'thistle d8bfd8 tomato ff6347 turquoise 40e0d0 violet ee82ee wheat f5deb3 white ffffff ' +
|
|
33
|
+
'whitesmoke f5f5f5 yellow ffff00 yellowgreen 9acd32';
|
|
34
|
+
let namedColors = null;
|
|
35
|
+
/** The table of the named colors, built on the first use */
|
|
36
|
+
function named() {
|
|
37
|
+
if (namedColors)
|
|
38
|
+
return namedColors;
|
|
39
|
+
const words = NAMED.split(' ');
|
|
40
|
+
namedColors = new Map();
|
|
41
|
+
for (let i = 0; i < words.length; i += 2)
|
|
42
|
+
namedColors.set(words[i], words[i + 1]);
|
|
43
|
+
return namedColors;
|
|
44
|
+
}
|
|
45
|
+
/** The colors parsed so far; the renderers read the same few colors on every frame */
|
|
46
|
+
const cache = new Map();
|
|
47
|
+
const CACHE_LIMIT = 1024;
|
|
48
|
+
/**
|
|
49
|
+
* Parses a CSS color.
|
|
50
|
+
*
|
|
51
|
+
* @param value - The color: `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`, `rgb()`, `rgba()`,
|
|
52
|
+
* `hsl()`, `hsla()`, a named color or `transparent`
|
|
53
|
+
* @returns The color as `[r, g, b, a]`, each from 0 to 1, or `null` when the value is not a
|
|
54
|
+
* color
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
57
|
+
export function parseColor(value) {
|
|
58
|
+
if (typeof value !== 'string')
|
|
59
|
+
return null;
|
|
60
|
+
let parsed = cache.get(value);
|
|
61
|
+
if (parsed === undefined) {
|
|
62
|
+
parsed = parse(value.trim().toLowerCase());
|
|
63
|
+
if (cache.size >= CACHE_LIMIT)
|
|
64
|
+
cache.clear();
|
|
65
|
+
cache.set(value, parsed);
|
|
66
|
+
}
|
|
67
|
+
return parsed ? [parsed[0], parsed[1], parsed[2], parsed[3]] : null;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Whether the value is a CSS color the library can read.
|
|
71
|
+
*
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
export function isColor(value) {
|
|
75
|
+
return typeof value === 'string' && parseColor(value) !== null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A CSS color as `[r, g, b, a]` with its alpha multiplied by an opacity; a value that is not
|
|
79
|
+
* a color gives transparent black.
|
|
80
|
+
*
|
|
81
|
+
* @param value - The CSS color
|
|
82
|
+
* @param opacity - The opacity the alpha of the color is multiplied by, from 0 to 1
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
export function toColor(value, opacity = 1) {
|
|
86
|
+
const color = parseColor(value);
|
|
87
|
+
if (!color)
|
|
88
|
+
return [0, 0, 0, 0];
|
|
89
|
+
color[3] *= opacity;
|
|
90
|
+
return color;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A color `[r, g, b, a]`, each from 0 to 1, as a CSS color: `#rrggbb`, or `rgba()` when it is
|
|
94
|
+
* not opaque.
|
|
95
|
+
*
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
export function formatColor(color) {
|
|
99
|
+
const channel = (value) => Math.round(clamp(value, 0, 1) * 255);
|
|
100
|
+
const [r, g, b] = [channel(color[0]), channel(color[1]), channel(color[2])];
|
|
101
|
+
const alpha = clamp(color[3], 0, 1);
|
|
102
|
+
if (alpha === 1) {
|
|
103
|
+
return `#${[r, g, b].map((c) => c.toString(16).padStart(2, '0')).join('')}`;
|
|
104
|
+
}
|
|
105
|
+
return `rgba(${r}, ${g}, ${b}, ${alpha})`;
|
|
106
|
+
}
|
|
107
|
+
/** The colors normalized so far; a style rule gives the same few colors to many features */
|
|
108
|
+
const hexCache = new Map();
|
|
109
|
+
/**
|
|
110
|
+
* A CSS color as `#rrggbb`, its alpha left out; a value that is not a color is returned as
|
|
111
|
+
* it is.
|
|
112
|
+
*
|
|
113
|
+
* @internal
|
|
114
|
+
*/
|
|
115
|
+
export function toHexColor(value) {
|
|
116
|
+
let hex = hexCache.get(value);
|
|
117
|
+
if (hex === undefined) {
|
|
118
|
+
const color = parseColor(value);
|
|
119
|
+
hex = color ? formatColor([color[0], color[1], color[2], 1]) : value;
|
|
120
|
+
if (hexCache.size >= CACHE_LIMIT)
|
|
121
|
+
hexCache.clear();
|
|
122
|
+
hexCache.set(value, hex);
|
|
123
|
+
}
|
|
124
|
+
return hex;
|
|
125
|
+
}
|
|
126
|
+
function parse(text) {
|
|
127
|
+
if (text.startsWith('#'))
|
|
128
|
+
return parseHex(text.slice(1));
|
|
129
|
+
if (text === 'transparent')
|
|
130
|
+
return [0, 0, 0, 0];
|
|
131
|
+
const open = text.indexOf('(');
|
|
132
|
+
if (open > 0 && text.endsWith(')')) {
|
|
133
|
+
const name = text.slice(0, open).trim();
|
|
134
|
+
const args = splitArguments(text.slice(open + 1, -1));
|
|
135
|
+
if (!args)
|
|
136
|
+
return null;
|
|
137
|
+
if (name === 'rgb' || name === 'rgba')
|
|
138
|
+
return parseRgb(args);
|
|
139
|
+
if (name === 'hsl' || name === 'hsla')
|
|
140
|
+
return parseHsl(args);
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
const hex = named().get(text);
|
|
144
|
+
return hex ? parseHex(hex) : null;
|
|
145
|
+
}
|
|
146
|
+
/** `rgb`, `rgba`, `rrggbb` or `rrggbbaa` */
|
|
147
|
+
function parseHex(hex) {
|
|
148
|
+
if (!/^[0-9a-f]+$/.test(hex))
|
|
149
|
+
return null;
|
|
150
|
+
const channel = (i, width) => {
|
|
151
|
+
const digits = hex.slice(i * width, i * width + width);
|
|
152
|
+
return Number.parseInt(width === 1 ? digits + digits : digits, 16) / 255;
|
|
153
|
+
};
|
|
154
|
+
if (hex.length === 3 || hex.length === 4) {
|
|
155
|
+
return [channel(0, 1), channel(1, 1), channel(2, 1), hex.length === 4 ? channel(3, 1) : 1];
|
|
156
|
+
}
|
|
157
|
+
if (hex.length === 6 || hex.length === 8) {
|
|
158
|
+
return [channel(0, 2), channel(1, 2), channel(2, 2), hex.length === 8 ? channel(3, 2) : 1];
|
|
159
|
+
}
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* The arguments of a color function: three values and an optional alpha, separated by commas
|
|
164
|
+
* (`1, 2, 3, 0.5`) or by spaces with a slash before the alpha (`1 2 3 / 0.5`)
|
|
165
|
+
*/
|
|
166
|
+
function splitArguments(body) {
|
|
167
|
+
const text = body.trim();
|
|
168
|
+
if (text.includes(',')) {
|
|
169
|
+
const args = text.split(',').map((arg) => arg.trim());
|
|
170
|
+
return args.length === 3 || args.length === 4 ? args : null;
|
|
171
|
+
}
|
|
172
|
+
const [channels, alpha, ...rest] = text.split('/');
|
|
173
|
+
if (rest.length > 0)
|
|
174
|
+
return null;
|
|
175
|
+
const args = channels.trim().split(/\s+/);
|
|
176
|
+
if (args.length !== 3)
|
|
177
|
+
return null;
|
|
178
|
+
if (alpha === undefined)
|
|
179
|
+
return args;
|
|
180
|
+
const alphaText = alpha.trim();
|
|
181
|
+
return alphaText === '' ? null : [...args, alphaText];
|
|
182
|
+
}
|
|
183
|
+
/** A number, or null when the text is not one */
|
|
184
|
+
function toNumber(text) {
|
|
185
|
+
if (!/^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/.test(text))
|
|
186
|
+
return null;
|
|
187
|
+
return Number(text);
|
|
188
|
+
}
|
|
189
|
+
/** A number or a percentage, as a fraction of `scale` for a percentage */
|
|
190
|
+
function numberOrPercent(text, scale) {
|
|
191
|
+
if (text.endsWith('%')) {
|
|
192
|
+
const value = toNumber(text.slice(0, -1));
|
|
193
|
+
return value === null ? null : (value / 100) * scale;
|
|
194
|
+
}
|
|
195
|
+
return toNumber(text);
|
|
196
|
+
}
|
|
197
|
+
/** The alpha, from 0 to 1 (a number or a percentage); 1 when it is absent */
|
|
198
|
+
function parseAlpha(text) {
|
|
199
|
+
if (text === undefined)
|
|
200
|
+
return 1;
|
|
201
|
+
const value = numberOrPercent(text, 1);
|
|
202
|
+
return value === null ? null : clamp(value, 0, 1);
|
|
203
|
+
}
|
|
204
|
+
function parseRgb(args) {
|
|
205
|
+
const channels = args.slice(0, 3).map((arg) => numberOrPercent(arg, 255));
|
|
206
|
+
const alpha = parseAlpha(args[3]);
|
|
207
|
+
if (alpha === null || channels.some((channel) => channel === null))
|
|
208
|
+
return null;
|
|
209
|
+
const [r, g, b] = channels;
|
|
210
|
+
return [clamp(r, 0, 255) / 255, clamp(g, 0, 255) / 255, clamp(b, 0, 255) / 255, alpha];
|
|
211
|
+
}
|
|
212
|
+
function parseHsl(args) {
|
|
213
|
+
const hue = parseHue(args[0]);
|
|
214
|
+
const saturation = args[1].endsWith('%') ? toNumber(args[1].slice(0, -1)) : null;
|
|
215
|
+
const lightness = args[2].endsWith('%') ? toNumber(args[2].slice(0, -1)) : null;
|
|
216
|
+
const alpha = parseAlpha(args[3]);
|
|
217
|
+
if (hue === null || saturation === null || lightness === null || alpha === null)
|
|
218
|
+
return null;
|
|
219
|
+
const [r, g, b] = hslToRgb(hue, clamp(saturation, 0, 100) / 100, clamp(lightness, 0, 100) / 100);
|
|
220
|
+
return [r, g, b, alpha];
|
|
221
|
+
}
|
|
222
|
+
/** The hue in degrees, from a number or an angle in `deg`, `rad`, `grad` or `turn` */
|
|
223
|
+
function parseHue(text) {
|
|
224
|
+
const units = { deg: 1, grad: 0.9, rad: 180 / Math.PI, turn: 360 };
|
|
225
|
+
for (const [unit, factor] of Object.entries(units)) {
|
|
226
|
+
if (text.endsWith(unit)) {
|
|
227
|
+
const value = toNumber(text.slice(0, -unit.length));
|
|
228
|
+
return value === null ? null : value * factor;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return toNumber(text);
|
|
232
|
+
}
|
|
233
|
+
/** HSL (hue in degrees, saturation and lightness from 0 to 1) to RGB from 0 to 1 */
|
|
234
|
+
function hslToRgb(hue, saturation, lightness) {
|
|
235
|
+
const h = (((hue % 360) + 360) % 360) / 30;
|
|
236
|
+
const a = saturation * Math.min(lightness, 1 - lightness);
|
|
237
|
+
const channel = (n) => {
|
|
238
|
+
const k = (n + h) % 12;
|
|
239
|
+
return lightness - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));
|
|
240
|
+
};
|
|
241
|
+
return [channel(0), channel(8), channel(4)];
|
|
242
|
+
}
|
|
243
|
+
function clamp(value, min, max) {
|
|
244
|
+
return Math.min(max, Math.max(min, value));
|
|
245
|
+
}
|
|
@@ -1,23 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Constant definitions
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* UI configuration constants.
|
|
5
5
|
*/
|
|
6
|
-
/**
|
|
7
|
-
* Keys of the internal meta properties
|
|
8
|
-
*
|
|
9
|
-
* createdZoom/rotation/scale are stored in feature.properties and round-trip through GeoJSON
|
|
10
|
-
* with the maplibre-gl-draw: prefix (this library's own data, required to reproduce the
|
|
11
|
-
* rendering).
|
|
12
|
-
*/
|
|
13
|
-
export declare const INTERNAL_PROPERTIES: {
|
|
14
|
-
/** Zoom level at creation time */
|
|
15
|
-
readonly CREATED_ZOOM: "createdZoom";
|
|
16
|
-
/** Rotation angle (degrees) */
|
|
17
|
-
readonly ROTATION: "rotation";
|
|
18
|
-
/** Scale */
|
|
19
|
-
readonly SCALE: "scale";
|
|
20
|
-
};
|
|
21
6
|
/**
|
|
22
7
|
* The handle of the selection UI being dragged
|
|
23
8
|
*
|
|
@@ -26,41 +11,3 @@ export declare const INTERNAL_PROPERTIES: {
|
|
|
26
11
|
* the handles of a line or a polygon, and `radius` and `center` those of a Circle.
|
|
27
12
|
*/
|
|
28
13
|
export type HandleType = 'resize-nw' | 'resize-n' | 'resize-ne' | 'resize-e' | 'resize-se' | 'resize-s' | 'resize-sw' | 'resize-w' | 'rotate' | 'vertex' | 'midpoint' | 'radius' | 'center';
|
|
29
|
-
/**
|
|
30
|
-
* Handle positions
|
|
31
|
-
*/
|
|
32
|
-
export declare const HANDLE_POSITIONS: {
|
|
33
|
-
readonly RESIZE: readonly ["nw", "n", "ne", "e", "se", "s", "sw", "w"];
|
|
34
|
-
readonly ROTATE: "rotate";
|
|
35
|
-
readonly VERTEX: "vertex";
|
|
36
|
-
readonly MIDPOINT: "midpoint";
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* Cursor styles
|
|
40
|
-
*/
|
|
41
|
-
export declare const CURSOR_STYLES: {
|
|
42
|
-
readonly DEFAULT: "default";
|
|
43
|
-
readonly POINTER: "pointer";
|
|
44
|
-
readonly MOVE: "move";
|
|
45
|
-
readonly GRAB: "grab";
|
|
46
|
-
readonly GRABBING: "grabbing";
|
|
47
|
-
readonly CROSSHAIR: "crosshair";
|
|
48
|
-
readonly TEXT: "text";
|
|
49
|
-
readonly RESIZE_NW: "nw-resize";
|
|
50
|
-
readonly RESIZE_N: "n-resize";
|
|
51
|
-
readonly RESIZE_NE: "ne-resize";
|
|
52
|
-
readonly RESIZE_E: "e-resize";
|
|
53
|
-
readonly RESIZE_SE: "se-resize";
|
|
54
|
-
readonly RESIZE_S: "s-resize";
|
|
55
|
-
readonly RESIZE_SW: "sw-resize";
|
|
56
|
-
readonly RESIZE_W: "w-resize";
|
|
57
|
-
readonly ROTATE: "grab";
|
|
58
|
-
};
|
|
59
|
-
/**
|
|
60
|
-
* Mouse event states
|
|
61
|
-
*/
|
|
62
|
-
export declare const MOUSE_STATE: {
|
|
63
|
-
readonly IDLE: "idle";
|
|
64
|
-
readonly HOVER: "hover";
|
|
65
|
-
readonly DRAGGING: "dragging";
|
|
66
|
-
};
|
|
@@ -1,60 +1,3 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
-
|
|
4
|
-
* Constant definitions
|
|
5
|
-
*
|
|
6
|
-
* Property prefixes and UI configuration constants.
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Keys of the internal meta properties
|
|
10
|
-
*
|
|
11
|
-
* createdZoom/rotation/scale are stored in feature.properties and round-trip through GeoJSON
|
|
12
|
-
* with the maplibre-gl-draw: prefix (this library's own data, required to reproduce the
|
|
13
|
-
* rendering).
|
|
14
|
-
*/
|
|
15
|
-
export const INTERNAL_PROPERTIES = {
|
|
16
|
-
/** Zoom level at creation time */
|
|
17
|
-
CREATED_ZOOM: 'createdZoom',
|
|
18
|
-
/** Rotation angle (degrees) */
|
|
19
|
-
ROTATION: 'rotation',
|
|
20
|
-
/** Scale */
|
|
21
|
-
SCALE: 'scale',
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* Handle positions
|
|
25
|
-
*/
|
|
26
|
-
export const HANDLE_POSITIONS = {
|
|
27
|
-
RESIZE: ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'],
|
|
28
|
-
ROTATE: 'rotate',
|
|
29
|
-
VERTEX: 'vertex',
|
|
30
|
-
MIDPOINT: 'midpoint',
|
|
31
|
-
};
|
|
32
|
-
/**
|
|
33
|
-
* Cursor styles
|
|
34
|
-
*/
|
|
35
|
-
export const CURSOR_STYLES = {
|
|
36
|
-
DEFAULT: 'default',
|
|
37
|
-
POINTER: 'pointer',
|
|
38
|
-
MOVE: 'move',
|
|
39
|
-
GRAB: 'grab',
|
|
40
|
-
GRABBING: 'grabbing',
|
|
41
|
-
CROSSHAIR: 'crosshair',
|
|
42
|
-
TEXT: 'text',
|
|
43
|
-
RESIZE_NW: 'nw-resize',
|
|
44
|
-
RESIZE_N: 'n-resize',
|
|
45
|
-
RESIZE_NE: 'ne-resize',
|
|
46
|
-
RESIZE_E: 'e-resize',
|
|
47
|
-
RESIZE_SE: 'se-resize',
|
|
48
|
-
RESIZE_S: 's-resize',
|
|
49
|
-
RESIZE_SW: 'sw-resize',
|
|
50
|
-
RESIZE_W: 'w-resize',
|
|
51
|
-
ROTATE: 'grab',
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* Mouse event states
|
|
55
|
-
*/
|
|
56
|
-
export const MOUSE_STATE = {
|
|
57
|
-
IDLE: 'idle',
|
|
58
|
-
HOVER: 'hover',
|
|
59
|
-
DRAGGING: 'dragging',
|
|
60
|
-
};
|
|
3
|
+
export {};
|
|
@@ -102,22 +102,11 @@ export interface TentativeStyle {
|
|
|
102
102
|
* The default look of the features, and of the geometry being drawn
|
|
103
103
|
*
|
|
104
104
|
* A key the style of a feature ({@link FeatureStyle}) leaves unset takes its value from here,
|
|
105
|
-
* unless the style rule of the layer gives the color.
|
|
106
|
-
*
|
|
105
|
+
* unless the style rule of the layer gives the color. The engine reads it from the `style`
|
|
106
|
+
* option of `createDraw`, translated to this shape; the parts left out keep their defaults.
|
|
107
107
|
*
|
|
108
108
|
* The selection does not change how a feature is drawn; it is shown by the box and the
|
|
109
109
|
* handles of {@link SelectionUIConfig}.
|
|
110
|
-
*
|
|
111
|
-
* @example
|
|
112
|
-
* ```ts
|
|
113
|
-
* const draw = createMapLibreGLDraw(map, {
|
|
114
|
-
* style: {
|
|
115
|
-
* lineString: {
|
|
116
|
-
* stroke: { width: 3, color: [0, 0.33, 1, 1], opacity: 1, lineStyle: 'solid' },
|
|
117
|
-
* },
|
|
118
|
-
* },
|
|
119
|
-
* });
|
|
120
|
-
* ```
|
|
121
110
|
*/
|
|
122
111
|
export interface FeatureStyleConfig {
|
|
123
112
|
/**
|
|
@@ -138,6 +127,20 @@ export interface FeatureStyleConfig {
|
|
|
138
127
|
* @defaultValue a `#FF0077` 2 px outline and a `#FF0077` fill at an alpha of 0.25
|
|
139
128
|
*/
|
|
140
129
|
polygon: PolygonFeatureStyle;
|
|
130
|
+
/**
|
|
131
|
+
* Circle, when it looks different from the polygons
|
|
132
|
+
*
|
|
133
|
+
* @defaultValue the look of the polygons
|
|
134
|
+
*/
|
|
135
|
+
circle?: PolygonFeatureStyle;
|
|
136
|
+
/**
|
|
137
|
+
* The opacity of an Image that has none of its own
|
|
138
|
+
*
|
|
139
|
+
* @defaultValue 1
|
|
140
|
+
*/
|
|
141
|
+
image?: {
|
|
142
|
+
opacity: number;
|
|
143
|
+
};
|
|
141
144
|
/**
|
|
142
145
|
* The geometry being drawn
|
|
143
146
|
*
|