@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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Triangulating a huge polygon (a water body on the order of a million vertices)
|
|
9
9
|
* takes more than ten seconds in one go, so the dataset path injects
|
|
10
|
-
* an implementation that slices the work over time (
|
|
10
|
+
* an implementation that slices the work over time (dataset/triangulation.ts) here.
|
|
11
11
|
* For a polygon whose triangulation has not finished yet, null is returned, and the
|
|
12
12
|
* caller omits the fill of that polygon and puts it into the batch with the outline
|
|
13
13
|
* only. Once the triangulation finishes, the injecting side prompts a rebuild.
|
|
@@ -159,7 +159,9 @@ export class StrokeRenderer {
|
|
|
159
159
|
this.gl = gl;
|
|
160
160
|
this.pixelRatio = pixelRatio;
|
|
161
161
|
this.terrain = terrain;
|
|
162
|
-
this.projectionUniformManager = new ProjectionUniformManager(gl, {
|
|
162
|
+
this.projectionUniformManager = new ProjectionUniformManager(gl, {
|
|
163
|
+
surface: true,
|
|
164
|
+
}).useTerrainState(terrain);
|
|
163
165
|
this.vertexBuffer = gl.createBuffer();
|
|
164
166
|
this.vao = gl.createVertexArray();
|
|
165
167
|
this.setupVAO();
|
|
@@ -4,23 +4,13 @@
|
|
|
4
4
|
* Utilities for creating and managing WebGL2 shaders
|
|
5
5
|
* Performs the WGS84 -> Mercator -> clip coordinate conversion on the GPU
|
|
6
6
|
*/
|
|
7
|
+
import type { OffsetUniforms, ShaderData } from '../../api/extension/render.js';
|
|
8
|
+
export type { OffsetUniforms, ShaderData };
|
|
7
9
|
/**
|
|
8
10
|
* Converts WGS84 coordinates to Mercator coordinates (high precision
|
|
9
11
|
* computation on the CPU side)
|
|
10
12
|
*/
|
|
11
13
|
export declare function lngLatToMercator(lng: number, lat: number): [number, number];
|
|
12
|
-
/**
|
|
13
|
-
* The shader prelude maplibre passes to the `prerender` / `render` of a custom layer, which
|
|
14
|
-
* the renderers of this library take to compile their programs for the current projection.
|
|
15
|
-
*/
|
|
16
|
-
export interface ShaderData {
|
|
17
|
-
/** The GLSL maplibre prepends to a vertex shader (its projection functions) */
|
|
18
|
-
vertexShaderPrelude: string;
|
|
19
|
-
/** The `#define` lines of the current projection */
|
|
20
|
-
define: string;
|
|
21
|
-
/** The name of the projection variant; a program is recompiled when it changes */
|
|
22
|
-
variantName: string;
|
|
23
|
-
}
|
|
24
14
|
/**
|
|
25
15
|
* The precision every sampler of the engine is read with
|
|
26
16
|
*
|
|
@@ -153,36 +143,6 @@ export declare function calculateOffsetUniforms(centerLngLat: [number, number],
|
|
|
153
143
|
* @returns The translated matrix (64-bit values)
|
|
154
144
|
*/
|
|
155
145
|
export declare function translateMatrixByLongitude(matrix: ArrayLike<number>, lngShift: number): number[];
|
|
156
|
-
/**
|
|
157
|
-
* The uniform values for offset mode
|
|
158
|
-
*
|
|
159
|
-
* The uniforms for globe mode are obtained directly from ProjectionData, so
|
|
160
|
-
* this interface contains only the values needed for the offset computation of
|
|
161
|
-
* the Mercator projection.
|
|
162
|
-
*/
|
|
163
|
-
export interface OffsetUniforms {
|
|
164
|
-
/** The center coordinates (rounded to Float32, for sending to the shader) */
|
|
165
|
-
centerLngLat: [number, number];
|
|
166
|
-
/** The center coordinates (64-bit precision, for the offset computation on the CPU side) */
|
|
167
|
-
centerLngLat64: [number, number];
|
|
168
|
-
/**
|
|
169
|
-
* The Mercator coordinates of the center (a value computed at 64-bit
|
|
170
|
-
* precision)
|
|
171
|
-
*
|
|
172
|
-
* Used to restore the Mercator relative coordinates of a vertex to absolute
|
|
173
|
-
* coordinates when looking up the terrain DEM atlas. So that everything can
|
|
174
|
-
* be handled relatively, the atlas origin is also handed over relative to
|
|
175
|
-
* this value (absolute Mercator coordinates do not have enough digits in
|
|
176
|
-
* Float32).
|
|
177
|
-
*/
|
|
178
|
-
centerMercator: [number, number];
|
|
179
|
-
/** The view center in clip space, computed at 64-bit precision */
|
|
180
|
-
projectionCenter: [number, number, number, number];
|
|
181
|
-
/** The Mercator units per degree of longitude and latitude at the center */
|
|
182
|
-
unitsPerDegree: [number, number, number];
|
|
183
|
-
/** The second-order correction of `unitsPerDegree` for the change with latitude */
|
|
184
|
-
unitsPerDegree2: [number, number, number];
|
|
185
|
-
}
|
|
186
146
|
/**
|
|
187
147
|
* Returns a position relative to the view center in degrees, computed at 64-bit precision
|
|
188
148
|
* so that it survives Float32.
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only AND MIT
|
|
3
|
-
/**
|
|
4
|
-
* Shader helpers
|
|
5
|
-
*
|
|
6
|
-
* Utilities for creating and managing WebGL2 shaders
|
|
7
|
-
* Performs the WGS84 -> Mercator -> clip coordinate conversion on the GPU
|
|
8
|
-
*/
|
|
9
3
|
/**
|
|
10
4
|
* Converts WGS84 coordinates to Mercator coordinates (high precision
|
|
11
5
|
* computation on the CPU side)
|
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* each renderer.
|
|
7
7
|
*/
|
|
8
8
|
import type { ProjectionData } from 'maplibre-gl';
|
|
9
|
-
import type {
|
|
9
|
+
import type { TerrainAnchors } from '../../api/extension/context.js';
|
|
10
|
+
import type { RenderContext } from '../../api/extension/render.js';
|
|
10
11
|
import type { OffsetUniforms } from './helpers.js';
|
|
11
12
|
/**
|
|
12
13
|
* The locations of the projection and terrain uniforms of one program, as
|
|
@@ -81,19 +82,26 @@ export declare class ProjectionUniformManager {
|
|
|
81
82
|
/**
|
|
82
83
|
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
83
84
|
*
|
|
84
|
-
* The renderers of a CustomLayer
|
|
85
|
-
* of an extension
|
|
86
|
-
*
|
|
85
|
+
* The renderers of a CustomLayer bind their instance's state after construction. A renderer
|
|
86
|
+
* of an extension, which may be shared between draw instances, calls `setTerrain(ctx)` with
|
|
87
|
+
* the render context it receives in each draw call.
|
|
87
88
|
*/
|
|
88
89
|
private terrain;
|
|
90
|
+
/**
|
|
91
|
+
* @param gl - The WebGL context of the map
|
|
92
|
+
* @param options - `surface`: whether the renderer draws things stuck to the ground (areas
|
|
93
|
+
* and lines), which lie flat on the frames that draw them flat
|
|
94
|
+
*/
|
|
89
95
|
constructor(gl: WebGL2RenderingContext, options?: {
|
|
90
96
|
surface?: boolean;
|
|
91
|
-
terrain?: TerrainContext | null;
|
|
92
97
|
});
|
|
93
98
|
/**
|
|
94
|
-
* Sets the terrain
|
|
99
|
+
* Sets the terrain the next uniforms are taken from.
|
|
100
|
+
*
|
|
101
|
+
* @param terrain - The render context of the draw call, or its `terrain`; `null` (or an
|
|
102
|
+
* object the engine did not hand out) draws without terrain
|
|
95
103
|
*/
|
|
96
|
-
setTerrain(terrain:
|
|
104
|
+
setTerrain(terrain: RenderContext | TerrainAnchors | null): void;
|
|
97
105
|
/**
|
|
98
106
|
* Obtains the uniform locations from a program
|
|
99
107
|
*
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { terrainStateOf } from '../terrain/binding.js';
|
|
3
4
|
import { INACTIVE_TERRAIN_STATE, TERRAIN_ATLAS_TEXTURE_UNIT, } from '../terrain/state.js';
|
|
4
5
|
import { getRenderFrame } from './frame.js';
|
|
5
6
|
/**
|
|
@@ -29,6 +30,11 @@ function createMemo() {
|
|
|
29
30
|
* A class that manages the projection-related uniforms in one place
|
|
30
31
|
*/
|
|
31
32
|
export class ProjectionUniformManager {
|
|
33
|
+
/**
|
|
34
|
+
* @param gl - The WebGL context of the map
|
|
35
|
+
* @param options - `surface`: whether the renderer draws things stuck to the ground (areas
|
|
36
|
+
* and lines), which lie flat on the frames that draw them flat
|
|
37
|
+
*/
|
|
32
38
|
constructor(gl, options = {}) {
|
|
33
39
|
Object.defineProperty(this, "gl", {
|
|
34
40
|
enumerable: true,
|
|
@@ -68,25 +74,36 @@ export class ProjectionUniformManager {
|
|
|
68
74
|
/**
|
|
69
75
|
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
70
76
|
*
|
|
71
|
-
* The renderers of a CustomLayer
|
|
72
|
-
* of an extension
|
|
73
|
-
*
|
|
77
|
+
* The renderers of a CustomLayer bind their instance's state after construction. A renderer
|
|
78
|
+
* of an extension, which may be shared between draw instances, calls `setTerrain(ctx)` with
|
|
79
|
+
* the render context it receives in each draw call.
|
|
74
80
|
*/
|
|
75
81
|
Object.defineProperty(this, "terrain", {
|
|
76
82
|
enumerable: true,
|
|
77
83
|
configurable: true,
|
|
78
84
|
writable: true,
|
|
79
|
-
value:
|
|
85
|
+
value: null
|
|
80
86
|
});
|
|
81
87
|
this.gl = gl;
|
|
82
88
|
this.surface = options.surface === true;
|
|
83
|
-
this.terrain = options.terrain ?? null;
|
|
84
89
|
}
|
|
85
90
|
/**
|
|
86
|
-
* Sets the terrain
|
|
91
|
+
* Sets the terrain the next uniforms are taken from.
|
|
92
|
+
*
|
|
93
|
+
* @param terrain - The render context of the draw call, or its `terrain`; `null` (or an
|
|
94
|
+
* object the engine did not hand out) draws without terrain
|
|
87
95
|
*/
|
|
88
96
|
setTerrain(terrain) {
|
|
97
|
+
this.terrain = terrainStateOf(terrain);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Sets the terrain state of an instance directly
|
|
101
|
+
*
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
useTerrainState(terrain) {
|
|
89
105
|
this.terrain = terrain;
|
|
106
|
+
return this;
|
|
90
107
|
}
|
|
91
108
|
/**
|
|
92
109
|
* Obtains the uniform locations from a program
|
|
@@ -22,7 +22,8 @@
|
|
|
22
22
|
* quad follows the sphere the way maplibre's layers do
|
|
23
23
|
*/
|
|
24
24
|
import type { ProjectionData } from 'maplibre-gl';
|
|
25
|
-
import type {
|
|
25
|
+
import type { TerrainAnchors } from '../../api/extension/context.js';
|
|
26
|
+
import type { RenderContext } from '../../api/extension/render.js';
|
|
26
27
|
import type { DrapeQuadCorners, QuadDrapeSurface } from '../terrain/drape/quad.js';
|
|
27
28
|
import type { OffsetUniforms } from './helpers.js';
|
|
28
29
|
/**
|
|
@@ -72,15 +73,19 @@ export declare class QuadShader {
|
|
|
72
73
|
/**
|
|
73
74
|
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
74
75
|
*
|
|
75
|
-
* The CustomLayer
|
|
76
|
-
* owns a QuadShader calls `setTerrain(
|
|
76
|
+
* The CustomLayer binds its instance's state after construction. An extension renderer that
|
|
77
|
+
* owns a QuadShader calls `setTerrain(ctx)` with the render context it receives.
|
|
77
78
|
*/
|
|
78
79
|
private terrain;
|
|
79
|
-
|
|
80
|
+
/** @param gl - The WebGL context of the map */
|
|
81
|
+
constructor(gl: WebGL2RenderingContext);
|
|
80
82
|
/**
|
|
81
|
-
* Sets the terrain
|
|
83
|
+
* Sets the terrain the next draws use.
|
|
84
|
+
*
|
|
85
|
+
* @param terrain - The render context of the draw call, or its `terrain`; `null` (or an
|
|
86
|
+
* object the engine did not hand out) draws without terrain
|
|
82
87
|
*/
|
|
83
|
-
setTerrain(terrain:
|
|
88
|
+
setTerrain(terrain: RenderContext | TerrainAnchors | null): void;
|
|
84
89
|
/**
|
|
85
90
|
* Initializes the buffers
|
|
86
91
|
*/
|
|
@@ -164,14 +169,13 @@ export declare class QuadShader {
|
|
|
164
169
|
* cannot be built). The caller falls back to the conventional way of drawing
|
|
165
170
|
* (the fill texture + a separate draw of the text).
|
|
166
171
|
*
|
|
167
|
-
* @param terrain The
|
|
168
|
-
*
|
|
169
|
-
* @param
|
|
170
|
-
* @param
|
|
171
|
-
* @param opacity The opacity, 0..1
|
|
172
|
+
* @param terrain - The render context of the draw call, or its `terrain`
|
|
173
|
+
* @param corners - The corners of the quad in degrees
|
|
174
|
+
* @param surface - The fill and the text
|
|
175
|
+
* @param opacity - The opacity, 0..1
|
|
172
176
|
* @returns true if it was painted; false when the caller must draw it another way
|
|
173
177
|
*/
|
|
174
|
-
export declare function drawQuadSurfaceOnTerrain(terrain:
|
|
178
|
+
export declare function drawQuadSurfaceOnTerrain(terrain: RenderContext | TerrainAnchors, corners: DrapeQuadCorners, surface: QuadDrapeSurface, opacity: number): boolean;
|
|
175
179
|
/**
|
|
176
180
|
* Returns the corners of a rectangle of a size in degrees, rotated about its center.
|
|
177
181
|
*
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
2
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
3
|
import { globeGridOf } from '../globe-subdivision.js';
|
|
4
|
+
import { terrainStateOf } from '../terrain/binding.js';
|
|
4
5
|
import { quadMercatorCorners } from '../terrain/drape/quad.js';
|
|
5
6
|
import { getQuadDrapeFrame, isTerrainElevationActive, reportTerrainCoarsening, } from '../terrain/state.js';
|
|
6
7
|
import { calculateLngLatOffset, createProgram, getProjectionTransitionUniform, OFFSET_MODE_GLSL, } from './helpers.js';
|
|
@@ -15,7 +16,8 @@ import { buildQuadGrid, computeQuadGridSize, } from './quad-grid.js';
|
|
|
15
16
|
* subdivided to the terrain mesh.
|
|
16
17
|
*/
|
|
17
18
|
export class QuadShader {
|
|
18
|
-
|
|
19
|
+
/** @param gl - The WebGL context of the map */
|
|
20
|
+
constructor(gl) {
|
|
19
21
|
Object.defineProperty(this, "gl", {
|
|
20
22
|
enumerable: true,
|
|
21
23
|
configurable: true,
|
|
@@ -134,26 +136,37 @@ export class QuadShader {
|
|
|
134
136
|
/**
|
|
135
137
|
* The terrain state of the draw instance being drawn (null draws without terrain)
|
|
136
138
|
*
|
|
137
|
-
* The CustomLayer
|
|
138
|
-
* owns a QuadShader calls `setTerrain(
|
|
139
|
+
* The CustomLayer binds its instance's state after construction. An extension renderer that
|
|
140
|
+
* owns a QuadShader calls `setTerrain(ctx)` with the render context it receives.
|
|
139
141
|
*/
|
|
140
142
|
Object.defineProperty(this, "terrain", {
|
|
141
143
|
enumerable: true,
|
|
142
144
|
configurable: true,
|
|
143
145
|
writable: true,
|
|
144
|
-
value:
|
|
146
|
+
value: null
|
|
145
147
|
});
|
|
146
148
|
this.gl = gl;
|
|
147
|
-
this.
|
|
148
|
-
this.projectionUniformManager = new ProjectionUniformManager(gl, { terrain });
|
|
149
|
+
this.projectionUniformManager = new ProjectionUniformManager(gl);
|
|
149
150
|
this.setupBuffers();
|
|
150
151
|
}
|
|
151
152
|
/**
|
|
152
|
-
* Sets the terrain
|
|
153
|
+
* Sets the terrain the next draws use.
|
|
154
|
+
*
|
|
155
|
+
* @param terrain - The render context of the draw call, or its `terrain`; `null` (or an
|
|
156
|
+
* object the engine did not hand out) draws without terrain
|
|
153
157
|
*/
|
|
154
158
|
setTerrain(terrain) {
|
|
159
|
+
this.useTerrainState(terrainStateOf(terrain));
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Sets the terrain state of an instance directly
|
|
163
|
+
*
|
|
164
|
+
* @internal
|
|
165
|
+
*/
|
|
166
|
+
useTerrainState(terrain) {
|
|
155
167
|
this.terrain = terrain;
|
|
156
|
-
this.projectionUniformManager.
|
|
168
|
+
this.projectionUniformManager.useTerrainState(terrain);
|
|
169
|
+
return this;
|
|
157
170
|
}
|
|
158
171
|
/**
|
|
159
172
|
* Initializes the buffers
|
|
@@ -491,14 +504,22 @@ void main() {
|
|
|
491
504
|
* cannot be built). The caller falls back to the conventional way of drawing
|
|
492
505
|
* (the fill texture + a separate draw of the text).
|
|
493
506
|
*
|
|
494
|
-
* @param terrain The
|
|
495
|
-
*
|
|
496
|
-
* @param
|
|
497
|
-
* @param
|
|
498
|
-
* @param opacity The opacity, 0..1
|
|
507
|
+
* @param terrain - The render context of the draw call, or its `terrain`
|
|
508
|
+
* @param corners - The corners of the quad in degrees
|
|
509
|
+
* @param surface - The fill and the text
|
|
510
|
+
* @param opacity - The opacity, 0..1
|
|
499
511
|
* @returns true if it was painted; false when the caller must draw it another way
|
|
500
512
|
*/
|
|
501
513
|
export function drawQuadSurfaceOnTerrain(terrain, corners, surface, opacity) {
|
|
514
|
+
const state = terrainStateOf(terrain);
|
|
515
|
+
return state !== null && drawQuadSurfaceOnTerrainState(state, corners, surface, opacity);
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* {@link drawQuadSurfaceOnTerrain} over the terrain state of an instance
|
|
519
|
+
*
|
|
520
|
+
* @internal
|
|
521
|
+
*/
|
|
522
|
+
export function drawQuadSurfaceOnTerrainState(terrain, corners, surface, opacity) {
|
|
502
523
|
if (!isTerrainElevationActive(terrain))
|
|
503
524
|
return false;
|
|
504
525
|
const frame = getQuadDrapeFrame(terrain);
|
|
@@ -27,7 +27,7 @@ import type { Feature, FeatureStyle, FeatureType, StyleRule } from '../store/typ
|
|
|
27
27
|
export interface LegendEntry {
|
|
28
28
|
/** The displayed label */
|
|
29
29
|
label: string;
|
|
30
|
-
/** The color
|
|
30
|
+
/** The color, as `#rrggbb` */
|
|
31
31
|
color: string;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
@@ -57,27 +57,12 @@ export declare function getStyleRuleChannel(type: FeatureType): StyleRuleChannel
|
|
|
57
57
|
* `categorical` matches strings, numbers and booleans by `String(value)`; `graduated` and
|
|
58
58
|
* `continuous` take finite numbers only (a numeric string gives `other`). `continuous`
|
|
59
59
|
* clamps values outside `min`..`max` and returns the first ramp color when `max <= min`. It
|
|
60
|
-
* is a pure function.
|
|
60
|
+
* is a pure function. The colors of the rule may be any CSS color; the result is normalized
|
|
61
|
+
* to `#rrggbb`.
|
|
61
62
|
*
|
|
62
63
|
* @param rule The style rule
|
|
63
64
|
* @param properties The attributes of the feature
|
|
64
|
-
* @returns The color in `#
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```ts
|
|
68
|
-
* import { evaluateStyleRule, type StyleRule } from '@sakuzu/maplibre-gl-draw';
|
|
69
|
-
*
|
|
70
|
-
* const rule: StyleRule = {
|
|
71
|
-
* kind: 'graduated',
|
|
72
|
-
* property: 'population',
|
|
73
|
-
* breaks: [1000, 10000],
|
|
74
|
-
* colors: ['#fee8c8', '#fdbb84', '#e34a33'],
|
|
75
|
-
* other: '#cccccc',
|
|
76
|
-
* };
|
|
77
|
-
* evaluateStyleRule(rule, { population: 5000 }); // '#fdbb84'
|
|
78
|
-
* evaluateStyleRule(rule, { population: '5000' }); // '#cccccc' (not a number)
|
|
79
|
-
* evaluateStyleRule(rule, {}); // '#cccccc'
|
|
80
|
-
* ```
|
|
65
|
+
* @returns The color in `#rrggbb` form
|
|
81
66
|
*/
|
|
82
67
|
export declare function evaluateStyleRule(rule: StyleRule, properties: Record<string, unknown> | undefined): string;
|
|
83
68
|
/**
|
|
@@ -134,33 +119,11 @@ export declare function resolveFeatureStyle(feature: Feature, rule: StyleRule |
|
|
|
134
119
|
* `legendOther` is appended at the end
|
|
135
120
|
*
|
|
136
121
|
* Numbers are turned into strings with `String()`. Locale formatting is up to the caller.
|
|
122
|
+
* The colors are normalized to `#rrggbb`, as {@link evaluateStyleRule} returns them.
|
|
137
123
|
*
|
|
138
124
|
* @param rule The style rule
|
|
139
125
|
* @param messages The entries of the messages table to use (default: `MESSAGES_EN`;
|
|
140
126
|
* missing entries fall back to it)
|
|
141
127
|
* @returns The legend rows, in the order to show them
|
|
142
|
-
*
|
|
143
|
-
* @example
|
|
144
|
-
* ```ts
|
|
145
|
-
* import { deriveLegend, type StyleRule } from '@sakuzu/maplibre-gl-draw';
|
|
146
|
-
*
|
|
147
|
-
* const rule: StyleRule = {
|
|
148
|
-
* kind: 'graduated',
|
|
149
|
-
* property: 'population',
|
|
150
|
-
* breaks: [1000, 10000],
|
|
151
|
-
* colors: ['#fee8c8', '#fdbb84', '#e34a33'],
|
|
152
|
-
* other: '#cccccc',
|
|
153
|
-
* };
|
|
154
|
-
* deriveLegend(rule);
|
|
155
|
-
* // [
|
|
156
|
-
* // { label: 'Below 1000', color: '#fee8c8' },
|
|
157
|
-
* // { label: '1000 to below 10000', color: '#fdbb84' },
|
|
158
|
-
* // { label: '10000 or more', color: '#e34a33' },
|
|
159
|
-
* // { label: 'Other', color: '#cccccc' },
|
|
160
|
-
* // ]
|
|
161
|
-
*
|
|
162
|
-
* // In the language of the host application
|
|
163
|
-
* deriveLegend(rule, { legendOther: 'Autres', legendBelow: (upper) => `Moins de ${upper}` });
|
|
164
|
-
* ```
|
|
165
128
|
*/
|
|
166
129
|
export declare function deriveLegend(rule: StyleRule, messages?: Partial<Messages>): LegendEntry[];
|
package/dist/view/style-rule.js
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* "the rule is not taking effect" apart from "there is no value".
|
|
21
21
|
*/
|
|
22
22
|
import { MESSAGES_EN, resolveMessages } from '../messages.js';
|
|
23
|
+
import { toHexColor } from '../shared/color.js';
|
|
23
24
|
import { interpolateHexColor } from '../shared/utils/color.js';
|
|
24
25
|
/** The name of the FeatureStyle color property corresponding to each channel */
|
|
25
26
|
const CHANNEL_COLOR_PROPERTY = {
|
|
@@ -95,31 +96,16 @@ function graduatedIndex(breaks, value) {
|
|
|
95
96
|
* `categorical` matches strings, numbers and booleans by `String(value)`; `graduated` and
|
|
96
97
|
* `continuous` take finite numbers only (a numeric string gives `other`). `continuous`
|
|
97
98
|
* clamps values outside `min`..`max` and returns the first ramp color when `max <= min`. It
|
|
98
|
-
* is a pure function.
|
|
99
|
+
* is a pure function. The colors of the rule may be any CSS color; the result is normalized
|
|
100
|
+
* to `#rrggbb`.
|
|
99
101
|
*
|
|
100
102
|
* @param rule The style rule
|
|
101
103
|
* @param properties The attributes of the feature
|
|
102
|
-
* @returns The color in `#
|
|
103
|
-
*
|
|
104
|
-
* @example
|
|
105
|
-
* ```ts
|
|
106
|
-
* import { evaluateStyleRule, type StyleRule } from '@sakuzu/maplibre-gl-draw';
|
|
107
|
-
*
|
|
108
|
-
* const rule: StyleRule = {
|
|
109
|
-
* kind: 'graduated',
|
|
110
|
-
* property: 'population',
|
|
111
|
-
* breaks: [1000, 10000],
|
|
112
|
-
* colors: ['#fee8c8', '#fdbb84', '#e34a33'],
|
|
113
|
-
* other: '#cccccc',
|
|
114
|
-
* };
|
|
115
|
-
* evaluateStyleRule(rule, { population: 5000 }); // '#fdbb84'
|
|
116
|
-
* evaluateStyleRule(rule, { population: '5000' }); // '#cccccc' (not a number)
|
|
117
|
-
* evaluateStyleRule(rule, {}); // '#cccccc'
|
|
118
|
-
* ```
|
|
104
|
+
* @returns The color in `#rrggbb` form
|
|
119
105
|
*/
|
|
120
106
|
export function evaluateStyleRule(rule, properties) {
|
|
121
107
|
if (rule.kind === 'single') {
|
|
122
|
-
return rule.color;
|
|
108
|
+
return toHexColor(rule.color);
|
|
123
109
|
}
|
|
124
110
|
return evaluateStyleRuleValue(rule, properties?.[rule.property]);
|
|
125
111
|
}
|
|
@@ -132,6 +118,10 @@ export function evaluateStyleRule(rule, properties) {
|
|
|
132
118
|
* @internal
|
|
133
119
|
*/
|
|
134
120
|
export function evaluateStyleRuleValue(rule, value) {
|
|
121
|
+
return toHexColor(ruleColorOf(rule, value));
|
|
122
|
+
}
|
|
123
|
+
/** The color of the rule for a value, as the rule writes it */
|
|
124
|
+
function ruleColorOf(rule, value) {
|
|
135
125
|
if (rule.kind === 'single') {
|
|
136
126
|
return rule.color;
|
|
137
127
|
}
|
|
@@ -150,12 +140,16 @@ export function evaluateStyleRuleValue(rule, value) {
|
|
|
150
140
|
// An invalid rule whose colors count falls short of breaks + 1 falls back to other
|
|
151
141
|
return color ?? rule.other;
|
|
152
142
|
}
|
|
153
|
-
// continuous: linearly interpolates the 2 colors of the ramp over min..max
|
|
154
|
-
// (out-of-range values are clamped)
|
|
143
|
+
// continuous: linearly interpolates the 2 colors of the ramp over min..max in OKLab
|
|
144
|
+
// (out-of-range values are clamped; the end points are the colors of the ramp)
|
|
155
145
|
const [from, to] = rule.ramp;
|
|
156
146
|
if (!(rule.max > rule.min))
|
|
157
147
|
return from;
|
|
158
148
|
const t = Math.min(1, Math.max(0, (numeric - rule.min) / (rule.max - rule.min)));
|
|
149
|
+
if (t === 0)
|
|
150
|
+
return from;
|
|
151
|
+
if (t === 1)
|
|
152
|
+
return to;
|
|
159
153
|
return interpolateHexColor(from, to, t);
|
|
160
154
|
}
|
|
161
155
|
/**
|
|
@@ -241,36 +235,18 @@ function graduatedLabel(breaks, index, messages) {
|
|
|
241
235
|
* `legendOther` is appended at the end
|
|
242
236
|
*
|
|
243
237
|
* Numbers are turned into strings with `String()`. Locale formatting is up to the caller.
|
|
238
|
+
* The colors are normalized to `#rrggbb`, as {@link evaluateStyleRule} returns them.
|
|
244
239
|
*
|
|
245
240
|
* @param rule The style rule
|
|
246
241
|
* @param messages The entries of the messages table to use (default: `MESSAGES_EN`;
|
|
247
242
|
* missing entries fall back to it)
|
|
248
243
|
* @returns The legend rows, in the order to show them
|
|
249
|
-
*
|
|
250
|
-
* @example
|
|
251
|
-
* ```ts
|
|
252
|
-
* import { deriveLegend, type StyleRule } from '@sakuzu/maplibre-gl-draw';
|
|
253
|
-
*
|
|
254
|
-
* const rule: StyleRule = {
|
|
255
|
-
* kind: 'graduated',
|
|
256
|
-
* property: 'population',
|
|
257
|
-
* breaks: [1000, 10000],
|
|
258
|
-
* colors: ['#fee8c8', '#fdbb84', '#e34a33'],
|
|
259
|
-
* other: '#cccccc',
|
|
260
|
-
* };
|
|
261
|
-
* deriveLegend(rule);
|
|
262
|
-
* // [
|
|
263
|
-
* // { label: 'Below 1000', color: '#fee8c8' },
|
|
264
|
-
* // { label: '1000 to below 10000', color: '#fdbb84' },
|
|
265
|
-
* // { label: '10000 or more', color: '#e34a33' },
|
|
266
|
-
* // { label: 'Other', color: '#cccccc' },
|
|
267
|
-
* // ]
|
|
268
|
-
*
|
|
269
|
-
* // In the language of the host application
|
|
270
|
-
* deriveLegend(rule, { legendOther: 'Autres', legendBelow: (upper) => `Moins de ${upper}` });
|
|
271
|
-
* ```
|
|
272
244
|
*/
|
|
273
245
|
export function deriveLegend(rule, messages) {
|
|
246
|
+
return legendOf(rule, messages).map(({ label, color }) => ({ label, color: toHexColor(color) }));
|
|
247
|
+
}
|
|
248
|
+
/** The legend rows with the colors as the rule writes them */
|
|
249
|
+
function legendOf(rule, messages) {
|
|
274
250
|
const table = messages ? resolveMessages(messages) : MESSAGES_EN;
|
|
275
251
|
if (rule.kind === 'single') {
|
|
276
252
|
return [{ label: table.legendAll, color: rule.color }];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** The terrain state behind each render context and each set of anchors */
|
|
4
|
+
const terrainByHandle = new WeakMap();
|
|
5
|
+
/**
|
|
6
|
+
* Binds a render context or a set of anchors to the terrain state it stands for
|
|
7
|
+
*
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export function bindTerrainState(handle, terrain) {
|
|
11
|
+
terrainByHandle.set(handle, terrain);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The terrain state behind a render context or its `terrain`
|
|
15
|
+
*
|
|
16
|
+
* @returns The state, or `null` for `null` and for an object the engine did not hand out
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export function terrainStateOf(source) {
|
|
20
|
+
if (!source)
|
|
21
|
+
return null;
|
|
22
|
+
return terrainByHandle.get(source) ?? terrainByHandle.get(renderTerrainOf(source)) ?? null;
|
|
23
|
+
}
|
|
24
|
+
/** The `terrain` of a render context, or the object itself */
|
|
25
|
+
function renderTerrainOf(source) {
|
|
26
|
+
return 'terrain' in source && typeof source.terrain === 'object' && source.terrain !== null
|
|
27
|
+
? source.terrain
|
|
28
|
+
: source;
|
|
29
|
+
}
|
|
@@ -117,10 +117,9 @@ export declare const INACTIVE_ANCHOR_FRAME: AnchorFrame;
|
|
|
117
117
|
/**
|
|
118
118
|
* The terrain state of one draw instance.
|
|
119
119
|
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
* Constructing one gives a state with no terrain.
|
|
120
|
+
* It stays inside the engine: the renderers of a CustomLayer receive it at construction, and
|
|
121
|
+
* the public building blocks of the second entry reach it through the render context an
|
|
122
|
+
* extension receives (`terrain/binding.ts`). Constructing one gives a state with no terrain.
|
|
124
123
|
*/
|
|
125
124
|
export declare class TerrainContext {
|
|
126
125
|
/** This frame's terrain state (read by the shaders' projection uniforms) */
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* module-level "current" context: every reader (state.ts / anchor.ts / occlusion.ts /
|
|
23
23
|
* polygon.ts) takes the context explicitly. The renderers of a CustomLayer receive their
|
|
24
24
|
* instance's context at construction, extension renderers receive it in the draw context
|
|
25
|
-
* (`
|
|
25
|
+
* (`FrameDrawContext.terrain`), hit testing uses the anchor projection bound per map
|
|
26
26
|
* (`installAnchorProjector`), and plugins use the projection bound to their instance
|
|
27
27
|
* (`PluginContext.projectAnchor`). A read from outside rendering therefore always sees its own
|
|
28
28
|
* instance, never "the instance drawn last".
|
|
@@ -75,10 +75,9 @@ export const INACTIVE_ANCHOR_FRAME = {
|
|
|
75
75
|
/**
|
|
76
76
|
* The terrain state of one draw instance.
|
|
77
77
|
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* Constructing one gives a state with no terrain.
|
|
78
|
+
* It stays inside the engine: the renderers of a CustomLayer receive it at construction, and
|
|
79
|
+
* the public building blocks of the second entry reach it through the render context an
|
|
80
|
+
* extension receives (`terrain/binding.ts`). Constructing one gives a state with no terrain.
|
|
82
81
|
*/
|
|
83
82
|
export class TerrainContext {
|
|
84
83
|
constructor() {
|
|
@@ -16,7 +16,7 @@ export function drapeMercatorY(lat) {
|
|
|
16
16
|
*
|
|
17
17
|
* The key is decided by the caller. For a feature in the Store the instance is replaced on
|
|
18
18
|
* every edit, so the feature itself is the key; for a dataset the replacement
|
|
19
|
-
* happens per `
|
|
19
|
+
* happens per `setRows` and the coordinate arrays are not reused, so the coordinate array
|
|
20
20
|
* is the key (when applying a style rule rebuilds only the feature instances, the same
|
|
21
21
|
* coordinate arrays remain, so merely changing a color does not require converting a million
|
|
22
22
|
* vertices again).
|
|
@@ -71,7 +71,7 @@ export declare function drapeLayerSource(layerIndex: number, datasetCount: numbe
|
|
|
71
71
|
/**
|
|
72
72
|
* The view of a dataset restricted to the part the drape needs
|
|
73
73
|
*
|
|
74
|
-
* The implementation in `
|
|
74
|
+
* The implementation in `dataset/dataset.ts` satisfies this shape. To keep the type
|
|
75
75
|
* dependency one-directional, only the structure is declared here.
|
|
76
76
|
*/
|
|
77
77
|
export interface DrapeDatasetSource {
|