@sakuzu/maplibre-gl-draw 1.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 +43 -0
- package/LICENSE +661 -0
- package/README.ja.md +248 -0
- package/README.md +255 -0
- package/THIRD_PARTY_NOTICES.md +275 -0
- package/dist/api/api.d.ts +1259 -0
- package/dist/api/api.js +86 -0
- package/dist/api/context.d.ts +173 -0
- package/dist/api/context.js +193 -0
- package/dist/api/display-api.d.ts +1 -0
- package/dist/api/display-api.js +23 -0
- package/dist/api/event-api.d.ts +13 -0
- package/dist/api/event-api.js +17 -0
- package/dist/api/extension-api.d.ts +46 -0
- package/dist/api/extension-api.js +85 -0
- package/dist/api/feature-api.d.ts +11 -0
- package/dist/api/feature-api.js +101 -0
- package/dist/api/geometry/apply.d.ts +51 -0
- package/dist/api/geometry/apply.js +114 -0
- package/dist/api/geometry/boolean.d.ts +28 -0
- package/dist/api/geometry/boolean.js +65 -0
- package/dist/api/geometry/buffer.d.ts +11 -0
- package/dist/api/geometry/buffer.js +105 -0
- package/dist/api/geometry/split.d.ts +16 -0
- package/dist/api/geometry/split.js +75 -0
- package/dist/api/geometry/targets.d.ts +76 -0
- package/dist/api/geometry/targets.js +158 -0
- package/dist/api/geometry/types.d.ts +31 -0
- package/dist/api/geometry/types.js +3 -0
- package/dist/api/geometry-operations.d.ts +162 -0
- package/dist/api/geometry-operations.js +94 -0
- package/dist/api/group-api.d.ts +10 -0
- package/dist/api/group-api.js +78 -0
- package/dist/api/import-export/constants.d.ts +29 -0
- package/dist/api/import-export/constants.js +40 -0
- package/dist/api/import-export/embedded-file.d.ts +13 -0
- package/dist/api/import-export/embedded-file.js +31 -0
- package/dist/api/import-export/file-name.d.ts +10 -0
- package/dist/api/import-export/file-name.js +20 -0
- package/dist/api/import-export/format-detection.d.ts +12 -0
- package/dist/api/import-export/format-detection.js +29 -0
- package/dist/api/import-export/geojson-export.d.ts +19 -0
- package/dist/api/import-export/geojson-export.js +262 -0
- package/dist/api/import-export/geojson-import.d.ts +34 -0
- package/dist/api/import-export/geojson-import.js +538 -0
- package/dist/api/import-export/geometry-validation.d.ts +20 -0
- package/dist/api/import-export/geometry-validation.js +107 -0
- package/dist/api/import-export/image-import.d.ts +12 -0
- package/dist/api/import-export/image-import.js +53 -0
- package/dist/api/import-export/index.d.ts +9 -0
- package/dist/api/import-export/index.js +107 -0
- package/dist/api/import-export/native-format.d.ts +15 -0
- package/dist/api/import-export/native-format.js +126 -0
- package/dist/api/import-export/native-validation.d.ts +28 -0
- package/dist/api/import-export/native-validation.js +212 -0
- package/dist/api/import-export/own-property.d.ts +10 -0
- package/dist/api/import-export/own-property.js +19 -0
- package/dist/api/import-export/style-validation.d.ts +27 -0
- package/dist/api/import-export/style-validation.js +49 -0
- package/dist/api/import-export/types.d.ts +26 -0
- package/dist/api/import-export/types.js +3 -0
- package/dist/api/index.d.ts +15 -0
- package/dist/api/index.js +3 -0
- package/dist/api/input-api.d.ts +158 -0
- package/dist/api/input-api.js +144 -0
- package/dist/api/instance-api.d.ts +38 -0
- package/dist/api/instance-api.js +136 -0
- package/dist/api/layer-api.d.ts +12 -0
- package/dist/api/layer-api.js +62 -0
- package/dist/api/selection-api.d.ts +7 -0
- package/dist/api/selection-api.js +78 -0
- package/dist/api/snapping-api.d.ts +125 -0
- package/dist/api/snapping-api.js +50 -0
- package/dist/api/topology-api.d.ts +30 -0
- package/dist/api/topology-api.js +16 -0
- package/dist/api/tracing-api.d.ts +31 -0
- package/dist/api/tracing-api.js +16 -0
- package/dist/dispatcher/hit-test/box-strategies.d.ts +19 -0
- package/dist/dispatcher/hit-test/box-strategies.js +275 -0
- package/dist/dispatcher/hit-test/box-strategy.d.ts +59 -0
- package/dist/dispatcher/hit-test/box-strategy.js +37 -0
- package/dist/dispatcher/hit-test/globe-shape.d.ts +46 -0
- package/dist/dispatcher/hit-test/globe-shape.js +70 -0
- package/dist/dispatcher/hit-test/index.d.ts +14 -0
- package/dist/dispatcher/hit-test/index.js +9 -0
- package/dist/dispatcher/hit-test/local-frame.d.ts +77 -0
- package/dist/dispatcher/hit-test/local-frame.js +112 -0
- package/dist/dispatcher/hit-test/segment-grid.d.ts +32 -0
- package/dist/dispatcher/hit-test/segment-grid.js +79 -0
- package/dist/dispatcher/hit-test/service.d.ts +120 -0
- package/dist/dispatcher/hit-test/service.js +333 -0
- package/dist/dispatcher/hit-test/strategies/base.d.ts +136 -0
- package/dist/dispatcher/hit-test/strategies/base.js +66 -0
- package/dist/dispatcher/hit-test/strategies/circle.d.ts +10 -0
- package/dist/dispatcher/hit-test/strategies/circle.js +56 -0
- package/dist/dispatcher/hit-test/strategies/image.d.ts +22 -0
- package/dist/dispatcher/hit-test/strategies/image.js +115 -0
- package/dist/dispatcher/hit-test/strategies/index.d.ts +11 -0
- package/dist/dispatcher/hit-test/strategies/index.js +10 -0
- package/dist/dispatcher/hit-test/strategies/line.d.ts +17 -0
- package/dist/dispatcher/hit-test/strategies/line.js +30 -0
- package/dist/dispatcher/hit-test/strategies/multi.d.ts +44 -0
- package/dist/dispatcher/hit-test/strategies/multi.js +141 -0
- package/dist/dispatcher/hit-test/strategies/point.d.ts +20 -0
- package/dist/dispatcher/hit-test/strategies/point.js +29 -0
- package/dist/dispatcher/hit-test/strategies/polygon.d.ts +52 -0
- package/dist/dispatcher/hit-test/strategies/polygon.js +138 -0
- package/dist/dispatcher/hit-test/topmost.d.ts +48 -0
- package/dist/dispatcher/hit-test/topmost.js +157 -0
- package/dist/dispatcher/hit-test/visibility-lookup.d.ts +23 -0
- package/dist/dispatcher/hit-test/visibility-lookup.js +40 -0
- package/dist/dispatcher/index.d.ts +15 -0
- package/dist/dispatcher/index.js +3 -0
- package/dist/dispatcher/input-router.d.ts +1 -0
- package/dist/dispatcher/input-router.js +288 -0
- package/dist/dispatcher/normalizer.d.ts +1 -0
- package/dist/dispatcher/normalizer.js +513 -0
- package/dist/dispatcher/types.d.ts +144 -0
- package/dist/dispatcher/types.js +15 -0
- package/dist/display/chunk-set.d.ts +24 -0
- package/dist/display/chunk-set.js +533 -0
- package/dist/display/chunk.d.ts +1 -0
- package/dist/display/chunk.js +104 -0
- package/dist/display/columnar/index.d.ts +12 -0
- package/dist/display/columnar/index.js +13 -0
- package/dist/display/columnar/prepare.d.ts +42 -0
- package/dist/display/columnar/prepare.js +116 -0
- package/dist/display/columnar/source.d.ts +1 -0
- package/dist/display/columnar/source.js +531 -0
- package/dist/display/columnar/table.d.ts +1 -0
- package/dist/display/columnar/table.js +471 -0
- package/dist/display/columnar/types.d.ts +223 -0
- package/dist/display/columnar/types.js +3 -0
- package/dist/display/dataset.d.ts +2 -0
- package/dist/display/dataset.js +891 -0
- package/dist/display/index.d.ts +13 -0
- package/dist/display/index.js +3 -0
- package/dist/display/interaction.d.ts +1 -0
- package/dist/display/interaction.js +90 -0
- package/dist/display/manager.d.ts +1 -0
- package/dist/display/manager.js +440 -0
- package/dist/display/packed-rtree.d.ts +1 -0
- package/dist/display/packed-rtree.js +244 -0
- package/dist/display/partition.d.ts +1 -0
- package/dist/display/partition.js +226 -0
- package/dist/display/provider.d.ts +1 -0
- package/dist/display/provider.js +342 -0
- package/dist/display/retained.d.ts +40 -0
- package/dist/display/retained.js +898 -0
- package/dist/display/selection.d.ts +13 -0
- package/dist/display/selection.js +226 -0
- package/dist/display/source.d.ts +1 -0
- package/dist/display/source.js +119 -0
- package/dist/display/spatial.d.ts +1 -0
- package/dist/display/spatial.js +71 -0
- package/dist/display/style.d.ts +1 -0
- package/dist/display/style.js +126 -0
- package/dist/display/thinning.d.ts +65 -0
- package/dist/display/thinning.js +910 -0
- package/dist/display/triangulation.d.ts +1 -0
- package/dist/display/triangulation.js +0 -0
- package/dist/display/types.d.ts +561 -0
- package/dist/display/types.js +43 -0
- package/dist/extension/feature-handler.d.ts +182 -0
- package/dist/extension/feature-handler.js +3 -0
- package/dist/extension/index.d.ts +9 -0
- package/dist/extension/index.js +3 -0
- package/dist/extension/renderers.d.ts +208 -0
- package/dist/extension/renderers.js +3 -0
- package/dist/geometry/angle.d.ts +47 -0
- package/dist/geometry/angle.js +44 -0
- package/dist/geometry/bbox.d.ts +48 -0
- package/dist/geometry/bbox.js +83 -0
- package/dist/geometry/boolean.d.ts +162 -0
- package/dist/geometry/boolean.js +331 -0
- package/dist/geometry/buffer.d.ts +72 -0
- package/dist/geometry/buffer.js +218 -0
- package/dist/geometry/circle.d.ts +55 -0
- package/dist/geometry/circle.js +107 -0
- package/dist/geometry/coords.d.ts +97 -0
- package/dist/geometry/coords.js +149 -0
- package/dist/geometry/distance.d.ts +79 -0
- package/dist/geometry/distance.js +111 -0
- package/dist/geometry/errors.d.ts +74 -0
- package/dist/geometry/errors.js +104 -0
- package/dist/geometry/index.d.ts +28 -0
- package/dist/geometry/index.js +38 -0
- package/dist/geometry/measure.d.ts +81 -0
- package/dist/geometry/measure.js +236 -0
- package/dist/geometry/predicates.d.ts +62 -0
- package/dist/geometry/predicates.js +132 -0
- package/dist/geometry/simplify.d.ts +74 -0
- package/dist/geometry/simplify.js +159 -0
- package/dist/geometry/split.d.ts +68 -0
- package/dist/geometry/split.js +430 -0
- package/dist/geometry/types.d.ts +95 -0
- package/dist/geometry/types.js +3 -0
- package/dist/geometry/units.d.ts +35 -0
- package/dist/geometry/units.js +41 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.js +20 -0
- package/dist/maplibre-gl-draw.d.ts +47 -0
- package/dist/maplibre-gl-draw.js +407 -0
- package/dist/messages.d.ts +64 -0
- package/dist/messages.js +36 -0
- package/dist/modes/cursor.d.ts +1 -0
- package/dist/modes/cursor.js +72 -0
- package/dist/modes/draw/circle.d.ts +1 -0
- package/dist/modes/draw/circle.js +222 -0
- package/dist/modes/draw/commit-layer.d.ts +26 -0
- package/dist/modes/draw/commit-layer.js +31 -0
- package/dist/modes/draw/freehand.d.ts +1 -0
- package/dist/modes/draw/freehand.js +264 -0
- package/dist/modes/draw/image.d.ts +1 -0
- package/dist/modes/draw/image.js +60 -0
- package/dist/modes/draw/index.d.ts +9 -0
- package/dist/modes/draw/index.js +11 -0
- package/dist/modes/draw/line.d.ts +1 -0
- package/dist/modes/draw/line.js +363 -0
- package/dist/modes/draw/point.d.ts +1 -0
- package/dist/modes/draw/point.js +87 -0
- package/dist/modes/draw/polygon.d.ts +1 -0
- package/dist/modes/draw/polygon.js +378 -0
- package/dist/modes/draw/trace-support.d.ts +79 -0
- package/dist/modes/draw/trace-support.js +161 -0
- package/dist/modes/handler.d.ts +285 -0
- package/dist/modes/handler.js +3 -0
- package/dist/modes/index.d.ts +7 -0
- package/dist/modes/index.js +3 -0
- package/dist/modes/manager.d.ts +15 -0
- package/dist/modes/manager.js +196 -0
- package/dist/modes/select/box-selection.d.ts +52 -0
- package/dist/modes/select/box-selection.js +140 -0
- package/dist/modes/select/click-handler.d.ts +32 -0
- package/dist/modes/select/click-handler.js +166 -0
- package/dist/modes/select/cursor-handler.d.ts +15 -0
- package/dist/modes/select/cursor-handler.js +59 -0
- package/dist/modes/select/drag/auxiliary.d.ts +26 -0
- package/dist/modes/select/drag/auxiliary.js +56 -0
- package/dist/modes/select/drag/intermediate-writes.d.ts +1 -0
- package/dist/modes/select/drag/intermediate-writes.js +171 -0
- package/dist/modes/select/drag/move.d.ts +24 -0
- package/dist/modes/select/drag/move.js +59 -0
- package/dist/modes/select/drag/operation.d.ts +30 -0
- package/dist/modes/select/drag/operation.js +18 -0
- package/dist/modes/select/drag/radius.d.ts +15 -0
- package/dist/modes/select/drag/radius.js +49 -0
- package/dist/modes/select/drag/transform.d.ts +17 -0
- package/dist/modes/select/drag/transform.js +155 -0
- package/dist/modes/select/drag/vertex.d.ts +17 -0
- package/dist/modes/select/drag/vertex.js +163 -0
- package/dist/modes/select/drag-handler.d.ts +1 -0
- package/dist/modes/select/drag-handler.js +254 -0
- package/dist/modes/select/hit-helpers.d.ts +40 -0
- package/dist/modes/select/hit-helpers.js +51 -0
- package/dist/modes/select/mode.d.ts +1 -0
- package/dist/modes/select/mode.js +397 -0
- package/dist/modes/select/shortcut-handler.d.ts +40 -0
- package/dist/modes/select/shortcut-handler.js +128 -0
- package/dist/operations/index.d.ts +9 -0
- package/dist/operations/index.js +3 -0
- package/dist/operations/layer-operations.d.ts +1 -0
- package/dist/operations/layer-operations.js +350 -0
- package/dist/operations/resize.d.ts +71 -0
- package/dist/operations/resize.js +252 -0
- package/dist/operations/rotate.d.ts +17 -0
- package/dist/operations/rotate.js +166 -0
- package/dist/operations/selection-operations.d.ts +20 -0
- package/dist/operations/selection-operations.js +159 -0
- package/dist/operations/shared-vertex.d.ts +1 -0
- package/dist/operations/shared-vertex.js +210 -0
- package/dist/operations/trace-graph.d.ts +96 -0
- package/dist/operations/trace-graph.js +283 -0
- package/dist/operations/vertex.d.ts +1 -0
- package/dist/operations/vertex.js +538 -0
- package/dist/plugins/index.d.ts +10 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/mutation-hooks.d.ts +28 -0
- package/dist/plugins/mutation-hooks.js +84 -0
- package/dist/plugins/plugin-context.d.ts +1 -0
- package/dist/plugins/plugin-context.js +367 -0
- package/dist/plugins/plugin-manager.d.ts +103 -0
- package/dist/plugins/plugin-manager.js +316 -0
- package/dist/plugins/plugin.d.ts +529 -0
- package/dist/plugins/plugin.js +3 -0
- package/dist/shared/config/constants.d.ts +66 -0
- package/dist/shared/config/constants.js +60 -0
- package/dist/shared/config/feature-style.d.ts +155 -0
- package/dist/shared/config/feature-style.js +154 -0
- package/dist/shared/config/index.d.ts +17 -0
- package/dist/shared/config/index.js +8 -0
- package/dist/shared/config/rendering.d.ts +107 -0
- package/dist/shared/config/rendering.js +33 -0
- package/dist/shared/config/selection-highlight.d.ts +29 -0
- package/dist/shared/config/selection-highlight.js +35 -0
- package/dist/shared/config/selection.d.ts +273 -0
- package/dist/shared/config/selection.js +266 -0
- package/dist/shared/config/topology.d.ts +33 -0
- package/dist/shared/config/topology.js +17 -0
- package/dist/shared/config/trace.d.ts +40 -0
- package/dist/shared/config/trace.js +17 -0
- package/dist/shared/math/angle.d.ts +21 -0
- package/dist/shared/math/angle.js +34 -0
- package/dist/shared/math/circle.d.ts +6 -0
- package/dist/shared/math/circle.js +10 -0
- package/dist/shared/math/constants.d.ts +48 -0
- package/dist/shared/math/constants.js +59 -0
- package/dist/shared/math/distance.d.ts +78 -0
- package/dist/shared/math/distance.js +147 -0
- package/dist/shared/math/globe-subdivision.d.ts +62 -0
- package/dist/shared/math/globe-subdivision.js +99 -0
- package/dist/shared/math/index.d.ts +17 -0
- package/dist/shared/math/index.js +21 -0
- package/dist/shared/math/intersection.d.ts +63 -0
- package/dist/shared/math/intersection.js +236 -0
- package/dist/shared/math/longitude.d.ts +20 -0
- package/dist/shared/math/longitude.js +31 -0
- package/dist/shared/math/mercator-plane.d.ts +27 -0
- package/dist/shared/math/mercator-plane.js +26 -0
- package/dist/shared/math/obb.d.ts +65 -0
- package/dist/shared/math/obb.js +107 -0
- package/dist/shared/math/rotation.d.ts +93 -0
- package/dist/shared/math/rotation.js +186 -0
- package/dist/shared/math/segment-grid.d.ts +69 -0
- package/dist/shared/math/segment-grid.js +159 -0
- package/dist/shared/math/transform.d.ts +140 -0
- package/dist/shared/math/transform.js +189 -0
- package/dist/shared/types/events.d.ts +128 -0
- package/dist/shared/types/events.js +3 -0
- package/dist/shared/types/model.d.ts +950 -0
- package/dist/shared/types/model.js +3 -0
- package/dist/shared/types/selection-box.d.ts +23 -0
- package/dist/shared/types/selection-box.js +3 -0
- package/dist/shared/types/style.d.ts +68 -0
- package/dist/shared/types/style.js +3 -0
- package/dist/shared/utils/color.d.ts +49 -0
- package/dist/shared/utils/color.js +180 -0
- package/dist/shared/utils/coordinates.d.ts +52 -0
- package/dist/shared/utils/coordinates.js +75 -0
- package/dist/shared/utils/embedded-image.d.ts +34 -0
- package/dist/shared/utils/embedded-image.js +161 -0
- package/dist/shared/utils/event-emitter.d.ts +262 -0
- package/dist/shared/utils/event-emitter.js +44 -0
- package/dist/shared/utils/feature-bbox.d.ts +8 -0
- package/dist/shared/utils/feature-bbox.js +207 -0
- package/dist/shared/utils/feature-segments.d.ts +23 -0
- package/dist/shared/utils/feature-segments.js +179 -0
- package/dist/shared/utils/id.d.ts +1 -0
- package/dist/shared/utils/id.js +35 -0
- package/dist/shared/utils/image.d.ts +34 -0
- package/dist/shared/utils/image.js +106 -0
- package/dist/shared/utils/index.d.ts +15 -0
- package/dist/shared/utils/index.js +24 -0
- package/dist/shared/utils/map.d.ts +26 -0
- package/dist/shared/utils/map.js +35 -0
- package/dist/shared/utils/name-generator.d.ts +197 -0
- package/dist/shared/utils/name-generator.js +337 -0
- package/dist/shared/utils/pixel-ratio.d.ts +111 -0
- package/dist/shared/utils/pixel-ratio.js +85 -0
- package/dist/shared/utils/property.d.ts +88 -0
- package/dist/shared/utils/property.js +140 -0
- package/dist/shared/utils/vertex-ref.d.ts +23 -0
- package/dist/shared/utils/vertex-ref.js +20 -0
- package/dist/snapping/custom-targets.d.ts +1 -0
- package/dist/snapping/custom-targets.js +21 -0
- package/dist/snapping/geometry.d.ts +1 -0
- package/dist/snapping/geometry.js +61 -0
- package/dist/snapping/index.d.ts +14 -0
- package/dist/snapping/index.js +4 -0
- package/dist/snapping/indicator.d.ts +19 -0
- package/dist/snapping/indicator.js +145 -0
- package/dist/snapping/providers/display.d.ts +72 -0
- package/dist/snapping/providers/display.js +268 -0
- package/dist/snapping/providers/guide.d.ts +69 -0
- package/dist/snapping/providers/guide.js +187 -0
- package/dist/snapping/providers/intersection.d.ts +1 -0
- package/dist/snapping/providers/intersection.js +92 -0
- package/dist/snapping/providers/shared.d.ts +39 -0
- package/dist/snapping/providers/shared.js +146 -0
- package/dist/snapping/providers/store.d.ts +1 -0
- package/dist/snapping/providers/store.js +132 -0
- package/dist/snapping/service.d.ts +1 -0
- package/dist/snapping/service.js +272 -0
- package/dist/snapping/types.d.ts +267 -0
- package/dist/snapping/types.js +66 -0
- package/dist/store/change-merger.d.ts +1 -0
- package/dist/store/change-merger.js +102 -0
- package/dist/store/draw-store.d.ts +1 -0
- package/dist/store/draw-store.js +396 -0
- package/dist/store/event-bridge.d.ts +1 -0
- package/dist/store/event-bridge.js +161 -0
- package/dist/store/index.d.ts +12 -0
- package/dist/store/index.js +4 -0
- package/dist/store/local-visibility.d.ts +21 -0
- package/dist/store/local-visibility.js +27 -0
- package/dist/store/lock.d.ts +67 -0
- package/dist/store/lock.js +54 -0
- package/dist/store/memory/change-bus.d.ts +60 -0
- package/dist/store/memory/change-bus.js +232 -0
- package/dist/store/memory/file-store.d.ts +15 -0
- package/dist/store/memory/file-store.js +33 -0
- package/dist/store/memory/frozen.d.ts +21 -0
- package/dist/store/memory/frozen.js +51 -0
- package/dist/store/memory/ui-state.d.ts +51 -0
- package/dist/store/memory/ui-state.js +223 -0
- package/dist/store/memory.d.ts +26 -0
- package/dist/store/memory.js +708 -0
- package/dist/store/spatial/index.d.ts +6 -0
- package/dist/store/spatial/index.js +4 -0
- package/dist/store/spatial/spatial-index.d.ts +90 -0
- package/dist/store/spatial/spatial-index.js +148 -0
- package/dist/store/spatial/store-spatial-index.d.ts +60 -0
- package/dist/store/spatial/store-spatial-index.js +125 -0
- package/dist/store/store.d.ts +417 -0
- package/dist/store/store.js +3 -0
- package/dist/store/types.d.ts +8 -0
- package/dist/store/types.js +3 -0
- package/dist/store/writable-layer.d.ts +35 -0
- package/dist/store/writable-layer.js +20 -0
- package/dist/view/cache/buffer.d.ts +28 -0
- package/dist/view/cache/buffer.js +176 -0
- package/dist/view/cache/earcut.d.ts +1 -0
- package/dist/view/cache/earcut.js +122 -0
- package/dist/view/cache/style-rule.d.ts +1 -0
- package/dist/view/cache/style-rule.js +97 -0
- package/dist/view/cache/terrain-fill.d.ts +30 -0
- package/dist/view/cache/terrain-fill.js +60 -0
- package/dist/view/cache/texture.d.ts +14 -0
- package/dist/view/cache/texture.js +292 -0
- package/dist/view/coordinator.d.ts +27 -0
- package/dist/view/coordinator.js +72 -0
- package/dist/view/feature-companion.d.ts +173 -0
- package/dist/view/feature-companion.js +108 -0
- package/dist/view/globe-subdivision.d.ts +78 -0
- package/dist/view/globe-subdivision.js +128 -0
- package/dist/view/index.d.ts +47 -0
- package/dist/view/index.js +20 -0
- package/dist/view/layer/attach.d.ts +20 -0
- package/dist/view/layer/attach.js +47 -0
- package/dist/view/layer/blend.d.ts +57 -0
- package/dist/view/layer/blend.js +14 -0
- package/dist/view/layer/custom-layer.d.ts +1 -0
- package/dist/view/layer/custom-layer.js +509 -0
- package/dist/view/layer/depth-state.d.ts +14 -0
- package/dist/view/layer/depth-state.js +44 -0
- package/dist/view/layer/display-list.d.ts +1 -0
- package/dist/view/layer/display-list.js +111 -0
- package/dist/view/layer/drape-planner.d.ts +139 -0
- package/dist/view/layer/drape-planner.js +726 -0
- package/dist/view/layer/frame-render.d.ts +57 -0
- package/dist/view/layer/frame-render.js +209 -0
- package/dist/view/layer/frame-state.d.ts +147 -0
- package/dist/view/layer/frame-state.js +484 -0
- package/dist/view/layer/gl-state.d.ts +77 -0
- package/dist/view/layer/gl-state.js +132 -0
- package/dist/view/layer/index.d.ts +6 -0
- package/dist/view/layer/index.js +5 -0
- package/dist/view/layer/render-scope.d.ts +30 -0
- package/dist/view/layer/render-scope.js +28 -0
- package/dist/view/layer/render.d.ts +87 -0
- package/dist/view/layer/render.js +187 -0
- package/dist/view/layer/renderers.d.ts +81 -0
- package/dist/view/layer/renderers.js +142 -0
- package/dist/view/layer/slot-manager.d.ts +26 -0
- package/dist/view/layer/slot-manager.js +133 -0
- package/dist/view/layer/slots.d.ts +33 -0
- package/dist/view/layer/slots.js +50 -0
- package/dist/view/layer/store-retained-bbox.d.ts +36 -0
- package/dist/view/layer/store-retained-bbox.js +188 -0
- package/dist/view/layer/store-retained-chunk.d.ts +97 -0
- package/dist/view/layer/store-retained-chunk.js +94 -0
- package/dist/view/layer/store-retained-classify.d.ts +34 -0
- package/dist/view/layer/store-retained-classify.js +88 -0
- package/dist/view/layer/store-retained-collect.d.ts +24 -0
- package/dist/view/layer/store-retained-collect.js +121 -0
- package/dist/view/layer/store-retained-coord-patch.d.ts +119 -0
- package/dist/view/layer/store-retained-coord-patch.js +168 -0
- package/dist/view/layer/store-retained-immediate.d.ts +63 -0
- package/dist/view/layer/store-retained-immediate.js +49 -0
- package/dist/view/layer/store-retained-invalidation.d.ts +96 -0
- package/dist/view/layer/store-retained-invalidation.js +192 -0
- package/dist/view/layer/store-retained.d.ts +198 -0
- package/dist/view/layer/store-retained.js +430 -0
- package/dist/view/layer/terrain-resolver.d.ts +1 -0
- package/dist/view/layer/terrain-resolver.js +174 -0
- package/dist/view/renderers/batch-manager.d.ts +61 -0
- package/dist/view/renderers/batch-manager.js +718 -0
- package/dist/view/renderers/draw-factors.d.ts +60 -0
- package/dist/view/renderers/draw-factors.js +35 -0
- package/dist/view/renderers/drawer.d.ts +1 -0
- package/dist/view/renderers/drawer.js +346 -0
- package/dist/view/renderers/image.d.ts +1 -0
- package/dist/view/renderers/image.js +255 -0
- package/dist/view/renderers/line/dash.d.ts +31 -0
- package/dist/view/renderers/line/dash.js +152 -0
- package/dist/view/renderers/line/line-geometry.d.ts +39 -0
- package/dist/view/renderers/line/line-geometry.js +460 -0
- package/dist/view/renderers/line/line-gl.d.ts +1 -0
- package/dist/view/renderers/line/line-gl.js +236 -0
- package/dist/view/renderers/line/line-shader.d.ts +1 -0
- package/dist/view/renderers/line/line-shader.js +364 -0
- package/dist/view/renderers/line/line-types.d.ts +43 -0
- package/dist/view/renderers/line/line-types.js +3 -0
- package/dist/view/renderers/line/line-uniforms.d.ts +1 -0
- package/dist/view/renderers/line/line-uniforms.js +390 -0
- package/dist/view/renderers/line/sdf-line.d.ts +92 -0
- package/dist/view/renderers/line/sdf-line.js +567 -0
- package/dist/view/renderers/point/billboard-depth.d.ts +10 -0
- package/dist/view/renderers/point/billboard-depth.js +56 -0
- package/dist/view/renderers/point/point-instance.d.ts +124 -0
- package/dist/view/renderers/point/point-instance.js +738 -0
- package/dist/view/renderers/point/point-sdf.d.ts +58 -0
- package/dist/view/renderers/point/point-sdf.js +170 -0
- package/dist/view/renderers/point/point-shape.d.ts +99 -0
- package/dist/view/renderers/point/point-shape.js +504 -0
- package/dist/view/renderers/point/point-style.d.ts +1 -0
- package/dist/view/renderers/point/point-style.js +46 -0
- package/dist/view/renderers/polygon/batch.d.ts +26 -0
- package/dist/view/renderers/polygon/batch.js +336 -0
- package/dist/view/renderers/polygon/earcut-input.d.ts +37 -0
- package/dist/view/renderers/polygon/earcut-input.js +55 -0
- package/dist/view/renderers/polygon/earcut-sliced.d.ts +69 -0
- package/dist/view/renderers/polygon/earcut-sliced.js +960 -0
- package/dist/view/renderers/polygon/fill.d.ts +74 -0
- package/dist/view/renderers/polygon/fill.js +251 -0
- package/dist/view/renderers/polygon/sdf-polygon.d.ts +62 -0
- package/dist/view/renderers/polygon/sdf-polygon.js +919 -0
- package/dist/view/renderers/polygon/terrain-cull.d.ts +3 -0
- package/dist/view/renderers/polygon/terrain-cull.js +14 -0
- package/dist/view/renderers/polygon/triangulator.d.ts +41 -0
- package/dist/view/renderers/polygon/triangulator.js +3 -0
- package/dist/view/renderers/retained.d.ts +43 -0
- package/dist/view/renderers/retained.js +3 -0
- package/dist/view/renderers/stroke.d.ts +121 -0
- package/dist/view/renderers/stroke.js +621 -0
- package/dist/view/shaders/frame.d.ts +8 -0
- package/dist/view/shaders/frame.js +37 -0
- package/dist/view/shaders/helpers.d.ts +238 -0
- package/dist/view/shaders/helpers.js +611 -0
- package/dist/view/shaders/initializer.d.ts +27 -0
- package/dist/view/shaders/initializer.js +125 -0
- package/dist/view/shaders/projection.d.ts +123 -0
- package/dist/view/shaders/projection.js +299 -0
- package/dist/view/shaders/quad-grid.d.ts +77 -0
- package/dist/view/shaders/quad-grid.js +128 -0
- package/dist/view/shaders/quad.d.ts +189 -0
- package/dist/view/shaders/quad.js +582 -0
- package/dist/view/shaders/retained-origin.d.ts +50 -0
- package/dist/view/shaders/retained-origin.js +67 -0
- package/dist/view/shaders/terrain-shade.d.ts +23 -0
- package/dist/view/shaders/terrain-shade.js +93 -0
- package/dist/view/style-rule.d.ts +166 -0
- package/dist/view/style-rule.js +300 -0
- package/dist/view/terrain/anchor.d.ts +135 -0
- package/dist/view/terrain/anchor.js +226 -0
- package/dist/view/terrain/context.d.ts +132 -0
- package/dist/view/terrain/context.js +437 -0
- package/dist/view/terrain/dem-atlas.d.ts +97 -0
- package/dist/view/terrain/dem-atlas.js +534 -0
- package/dist/view/terrain/detect.d.ts +126 -0
- package/dist/view/terrain/detect.js +198 -0
- package/dist/view/terrain/drape/bin-store.d.ts +179 -0
- package/dist/view/terrain/drape/bin-store.js +529 -0
- package/dist/view/terrain/drape/binning.d.ts +259 -0
- package/dist/view/terrain/drape/binning.js +604 -0
- package/dist/view/terrain/drape/edge-constrain.d.ts +37 -0
- package/dist/view/terrain/drape/edge-constrain.js +175 -0
- package/dist/view/terrain/drape/geometry.d.ts +95 -0
- package/dist/view/terrain/drape/geometry.js +260 -0
- package/dist/view/terrain/drape/mesh.d.ts +50 -0
- package/dist/view/terrain/drape/mesh.js +86 -0
- package/dist/view/terrain/drape/pass.d.ts +122 -0
- package/dist/view/terrain/drape/pass.js +379 -0
- package/dist/view/terrain/drape/quad-glyphs.d.ts +64 -0
- package/dist/view/terrain/drape/quad-glyphs.js +117 -0
- package/dist/view/terrain/drape/quad.d.ts +249 -0
- package/dist/view/terrain/drape/quad.js +835 -0
- package/dist/view/terrain/drape/renderer.d.ts +184 -0
- package/dist/view/terrain/drape/renderer.js +706 -0
- package/dist/view/terrain/drape/shared.d.ts +80 -0
- package/dist/view/terrain/drape/shared.js +173 -0
- package/dist/view/terrain/drape/stitch.d.ts +155 -0
- package/dist/view/terrain/drape/stitch.js +228 -0
- package/dist/view/terrain/ground.d.ts +72 -0
- package/dist/view/terrain/ground.js +151 -0
- package/dist/view/terrain/metrics.d.ts +180 -0
- package/dist/view/terrain/metrics.js +231 -0
- package/dist/view/terrain/occlusion.d.ts +11 -0
- package/dist/view/terrain/occlusion.js +129 -0
- package/dist/view/terrain/polygon.d.ts +86 -0
- package/dist/view/terrain/polygon.js +301 -0
- package/dist/view/terrain/shade.d.ts +48 -0
- package/dist/view/terrain/shade.js +45 -0
- package/dist/view/terrain/state.d.ts +99 -0
- package/dist/view/terrain/state.js +186 -0
- package/dist/view/terrain/tessellation.d.ts +265 -0
- package/dist/view/terrain/tessellation.js +924 -0
- package/dist/view/terrain/tiling.d.ts +56 -0
- package/dist/view/terrain/tiling.js +155 -0
- package/dist/view/terrain/upstream-terrain.d.ts +82 -0
- package/dist/view/terrain/upstream-terrain.js +116 -0
- package/dist/view/ui/auxiliary-handles.d.ts +151 -0
- package/dist/view/ui/auxiliary-handles.js +22 -0
- package/dist/view/ui/bounds.d.ts +53 -0
- package/dist/view/ui/bounds.js +149 -0
- package/dist/view/ui/box-selection.d.ts +1 -0
- package/dist/view/ui/box-selection.js +83 -0
- package/dist/view/ui/handle-test.d.ts +1 -0
- package/dist/view/ui/handle-test.js +437 -0
- package/dist/view/ui/handle-thinning.d.ts +122 -0
- package/dist/view/ui/handle-thinning.js +430 -0
- package/dist/view/ui/handles.d.ts +25 -0
- package/dist/view/ui/handles.js +673 -0
- package/dist/view/ui/helper.d.ts +19 -0
- package/dist/view/ui/helper.js +76 -0
- package/dist/view/ui/index.d.ts +15 -0
- package/dist/view/ui/index.js +15 -0
- package/dist/view/ui/selection-scope.d.ts +25 -0
- package/dist/view/ui/selection-scope.js +34 -0
- package/dist/view/ui/selection-ui/bounding-box.d.ts +44 -0
- package/dist/view/ui/selection-ui/bounding-box.js +240 -0
- package/dist/view/ui/selection-ui/extension-registry.d.ts +76 -0
- package/dist/view/ui/selection-ui/extension-registry.js +78 -0
- package/dist/view/ui/selection-ui/index.d.ts +12 -0
- package/dist/view/ui/selection-ui/index.js +12 -0
- package/dist/view/ui/selection-ui/renderer.d.ts +29 -0
- package/dist/view/ui/selection-ui/renderer.js +227 -0
- package/dist/view/ui/selection-ui/types.d.ts +55 -0
- package/dist/view/ui/selection-ui/types.js +3 -0
- package/dist/view/ui/selection-ui-drawer.d.ts +52 -0
- package/dist/view/ui/selection-ui-drawer.js +329 -0
- package/dist/view/ui/tentative.d.ts +1 -0
- package/dist/view/ui/tentative.js +320 -0
- package/dist/view/viewport.d.ts +119 -0
- package/dist/view/viewport.js +254 -0
- package/package.json +113 -0
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Default mapping of type names
|
|
5
|
+
*/
|
|
6
|
+
const DEFAULT_TYPE_NAMES = {
|
|
7
|
+
Point: 'Point',
|
|
8
|
+
LineString: 'LineString',
|
|
9
|
+
Polygon: 'Polygon',
|
|
10
|
+
Circle: 'Circle',
|
|
11
|
+
Freehand: 'Freehand',
|
|
12
|
+
Image: 'Image',
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Default Layer/Group names
|
|
16
|
+
*/
|
|
17
|
+
const DEFAULT_LAYER_NAME = 'Layer';
|
|
18
|
+
const DEFAULT_GROUP_NAME = 'Group';
|
|
19
|
+
/**
|
|
20
|
+
* Counter keys of Layer/Group
|
|
21
|
+
*
|
|
22
|
+
* They share the same Map / Set as the counter keys of Feature (FeatureType).
|
|
23
|
+
*/
|
|
24
|
+
const LAYER_COUNTER_KEY = 'Layer';
|
|
25
|
+
const GROUP_COUNTER_KEY = 'Group';
|
|
26
|
+
/**
|
|
27
|
+
* Default formatter
|
|
28
|
+
*/
|
|
29
|
+
function defaultFormatter(typeName, number) {
|
|
30
|
+
return `${typeName} ${number}`;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Extracts the number from a name
|
|
34
|
+
*/
|
|
35
|
+
function extractNumberFromName(name, typeName) {
|
|
36
|
+
// Escape the special characters
|
|
37
|
+
const escapedTypeName = typeName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
38
|
+
const regex = new RegExp(`^${escapedTypeName}\\s*(\\d+)$`);
|
|
39
|
+
const match = name.match(regex);
|
|
40
|
+
return match ? parseInt(match[1], 10) : null;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Normalizes an AutoNameConfig
|
|
44
|
+
*/
|
|
45
|
+
export function normalizeAutoNameConfig(config) {
|
|
46
|
+
if (config === undefined || config === true) {
|
|
47
|
+
return { enabled: true };
|
|
48
|
+
}
|
|
49
|
+
if (config === false) {
|
|
50
|
+
return { enabled: false };
|
|
51
|
+
}
|
|
52
|
+
return config;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* AutoNameGenerator
|
|
56
|
+
*
|
|
57
|
+
* A class that generates sequential numbers per Feature type.
|
|
58
|
+
* It accounts for the numbers of existing Features and starts from the next number.
|
|
59
|
+
* A number that has been used once is not reused even after deletion (it leaves gaps).
|
|
60
|
+
*
|
|
61
|
+
* The existing numbers are taken in with a single full scan per type, and after that only the
|
|
62
|
+
* increments are taken in by subscribing to the Store. Scanning everything on every call would
|
|
63
|
+
* make the case of generating one at a time, as in a bulk import, O(n^2).
|
|
64
|
+
*
|
|
65
|
+
* With this incremental approach, the number of a name that was added and then deleted before
|
|
66
|
+
* any generation happened is also recorded (with the old approach it could be reused after the
|
|
67
|
+
* deletion). This is an extension of the "a number used once is not reused" policy, and it can
|
|
68
|
+
* only work in the direction of increasing the gaps.
|
|
69
|
+
*/
|
|
70
|
+
export class AutoNameGenerator {
|
|
71
|
+
constructor(store, config = true) {
|
|
72
|
+
Object.defineProperty(this, "store", {
|
|
73
|
+
enumerable: true,
|
|
74
|
+
configurable: true,
|
|
75
|
+
writable: true,
|
|
76
|
+
value: void 0
|
|
77
|
+
});
|
|
78
|
+
Object.defineProperty(this, "config", {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
configurable: true,
|
|
81
|
+
writable: true,
|
|
82
|
+
value: void 0
|
|
83
|
+
});
|
|
84
|
+
/** Counter that remembers the largest number already generated per type */
|
|
85
|
+
Object.defineProperty(this, "counters", {
|
|
86
|
+
enumerable: true,
|
|
87
|
+
configurable: true,
|
|
88
|
+
writable: true,
|
|
89
|
+
value: new Map()
|
|
90
|
+
});
|
|
91
|
+
/** Counter keys whose full scan is done (Layer/Group go into the same Set) */
|
|
92
|
+
Object.defineProperty(this, "scannedTypes", {
|
|
93
|
+
enumerable: true,
|
|
94
|
+
configurable: true,
|
|
95
|
+
writable: true,
|
|
96
|
+
value: new Set()
|
|
97
|
+
});
|
|
98
|
+
/** Unsubscribe function of the Store subscription (null when not subscribed) */
|
|
99
|
+
Object.defineProperty(this, "unsubscribe", {
|
|
100
|
+
enumerable: true,
|
|
101
|
+
configurable: true,
|
|
102
|
+
writable: true,
|
|
103
|
+
value: null
|
|
104
|
+
});
|
|
105
|
+
this.store = store;
|
|
106
|
+
this.config = normalizeAutoNameConfig(config);
|
|
107
|
+
// When disabled, no name is generated, so there is no need to maintain the counters
|
|
108
|
+
if (this.config.enabled) {
|
|
109
|
+
this.unsubscribe = store.subscribe((changes) => {
|
|
110
|
+
this.observeChanges(changes);
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Returns whether it is enabled
|
|
116
|
+
*/
|
|
117
|
+
isEnabled() {
|
|
118
|
+
return this.config.enabled;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Unsubscribes from the Store
|
|
122
|
+
*/
|
|
123
|
+
dispose() {
|
|
124
|
+
this.unsubscribe?.();
|
|
125
|
+
this.unsubscribe = null;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Generates an automatic name for the given type
|
|
129
|
+
*
|
|
130
|
+
* @returns The generated name, or undefined when it is disabled
|
|
131
|
+
*/
|
|
132
|
+
generateName(featureType) {
|
|
133
|
+
if (!this.config.enabled) {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
const typeName = this.getTypeName(featureType);
|
|
137
|
+
const nextNumber = this.findNextNumber(featureType, typeName);
|
|
138
|
+
const formatter = this.config.formatter ?? defaultFormatter;
|
|
139
|
+
return formatter(typeName, nextNumber);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Gets the type name
|
|
143
|
+
*/
|
|
144
|
+
getTypeName(featureType) {
|
|
145
|
+
// Use a custom type name if there is one
|
|
146
|
+
if (this.config.typeNames && featureType in this.config.typeNames) {
|
|
147
|
+
return (this.config.typeNames[featureType] ?? featureType);
|
|
148
|
+
}
|
|
149
|
+
// Default type name
|
|
150
|
+
return DEFAULT_TYPE_NAMES[featureType] ?? featureType;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Gets the next number
|
|
154
|
+
*
|
|
155
|
+
* Increments the counter by 1 and returns it. The counter holds the largest existing number
|
|
156
|
+
* (the first full scan plus the increments after it), so the number of a deleted Feature is
|
|
157
|
+
* not reused and a gap appears.
|
|
158
|
+
*/
|
|
159
|
+
findNextNumber(featureType, typeName) {
|
|
160
|
+
this.scanOnce(featureType, () => this.getMaxNumberFromFeatures(featureType, typeName));
|
|
161
|
+
const nextNumber = (this.counters.get(featureType) ?? 0) + 1;
|
|
162
|
+
this.counters.set(featureType, nextNumber);
|
|
163
|
+
return nextNumber;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Takes in the largest existing number only the first time a generation happens for that
|
|
167
|
+
* counter key
|
|
168
|
+
*
|
|
169
|
+
* From the second time onward the counter is maintained incrementally, so it does not scan.
|
|
170
|
+
*/
|
|
171
|
+
scanOnce(counterKey, scan) {
|
|
172
|
+
if (this.scannedTypes.has(counterKey))
|
|
173
|
+
return;
|
|
174
|
+
this.scannedTypes.add(counterKey);
|
|
175
|
+
this.recordNumber(counterKey, scan());
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Raises the counter up to number (a smaller value does not lower it)
|
|
179
|
+
*/
|
|
180
|
+
recordNumber(counterKey, number) {
|
|
181
|
+
if (number > (this.counters.get(counterKey) ?? 0)) {
|
|
182
|
+
this.counters.set(counterKey, number);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Takes in the numbers of names from the changes of the Store
|
|
187
|
+
*
|
|
188
|
+
* The path that keeps the cost proportional to the number of changes and avoids scanning
|
|
189
|
+
* everything on every generation.
|
|
190
|
+
* Deletions are ignored (because a number used once is not reused).
|
|
191
|
+
*/
|
|
192
|
+
observeChanges(changes) {
|
|
193
|
+
for (const feature of changes.features?.created ?? []) {
|
|
194
|
+
this.observeFeatureName(feature);
|
|
195
|
+
}
|
|
196
|
+
for (const { feature } of changes.features?.updated ?? []) {
|
|
197
|
+
this.observeFeatureName(feature);
|
|
198
|
+
}
|
|
199
|
+
const layerTypeName = this.getLayerTypeName();
|
|
200
|
+
for (const layer of changes.layers?.created ?? []) {
|
|
201
|
+
this.observeName(LAYER_COUNTER_KEY, layerTypeName, layer.name);
|
|
202
|
+
}
|
|
203
|
+
for (const { layer } of changes.layers?.updated ?? []) {
|
|
204
|
+
this.observeName(LAYER_COUNTER_KEY, layerTypeName, layer.name);
|
|
205
|
+
}
|
|
206
|
+
const groupTypeName = this.getGroupTypeName();
|
|
207
|
+
for (const group of changes.groups?.created ?? []) {
|
|
208
|
+
this.observeName(GROUP_COUNTER_KEY, groupTypeName, group.name);
|
|
209
|
+
}
|
|
210
|
+
for (const { group } of changes.groups?.updated ?? []) {
|
|
211
|
+
this.observeName(GROUP_COUNTER_KEY, groupTypeName, group.name);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Takes in the number from the name of a Feature
|
|
216
|
+
*/
|
|
217
|
+
observeFeatureName(feature) {
|
|
218
|
+
const name = feature.properties?.name;
|
|
219
|
+
if (typeof name !== 'string')
|
|
220
|
+
return;
|
|
221
|
+
this.observeName(feature.type, this.getTypeName(feature.type), name);
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Extracts the number from a name and takes it into the counter
|
|
225
|
+
*/
|
|
226
|
+
observeName(counterKey, typeName, name) {
|
|
227
|
+
const number = extractNumberFromName(name, typeName);
|
|
228
|
+
if (number !== null)
|
|
229
|
+
this.recordNumber(counterKey, number);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Gets the type name of Layer
|
|
233
|
+
*/
|
|
234
|
+
getLayerTypeName() {
|
|
235
|
+
return this.config.typeNames?.Layer ?? DEFAULT_LAYER_NAME;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Gets the type name of Group
|
|
239
|
+
*/
|
|
240
|
+
getGroupTypeName() {
|
|
241
|
+
return this.config.typeNames?.Group ?? DEFAULT_GROUP_NAME;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Gets the largest number from the existing Features
|
|
245
|
+
*/
|
|
246
|
+
getMaxNumberFromFeatures(featureType, typeName) {
|
|
247
|
+
const features = this.store.getAllFeatures();
|
|
248
|
+
let maxNumber = 0;
|
|
249
|
+
for (const feature of features) {
|
|
250
|
+
// Only features of the same type are considered
|
|
251
|
+
if (feature.type !== featureType) {
|
|
252
|
+
continue;
|
|
253
|
+
}
|
|
254
|
+
// Get the name property
|
|
255
|
+
const name = feature.properties?.name;
|
|
256
|
+
if (typeof name !== 'string') {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
// Extract the number
|
|
260
|
+
const number = extractNumberFromName(name, typeName);
|
|
261
|
+
if (number !== null && number > maxNumber) {
|
|
262
|
+
maxNumber = number;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return maxNumber;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Generates the name of a new Layer
|
|
269
|
+
*
|
|
270
|
+
* A layer always has a name, so this never gives up: when naming is disabled it returns the
|
|
271
|
+
* word of Layer alone, without a number.
|
|
272
|
+
*
|
|
273
|
+
* @returns The generated name ("Layer 2"), or the word of Layer when it is disabled
|
|
274
|
+
*/
|
|
275
|
+
generateLayerName() {
|
|
276
|
+
const typeName = this.getLayerTypeName();
|
|
277
|
+
if (!this.config.enabled) {
|
|
278
|
+
return typeName;
|
|
279
|
+
}
|
|
280
|
+
const nextNumber = this.findNextLayerNumber(typeName);
|
|
281
|
+
const formatter = this.config.formatter ?? defaultFormatter;
|
|
282
|
+
return formatter(typeName, nextNumber);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Gets the next Layer number
|
|
286
|
+
*/
|
|
287
|
+
findNextLayerNumber(typeName) {
|
|
288
|
+
this.scanOnce(LAYER_COUNTER_KEY, () => {
|
|
289
|
+
let maxNumber = 0;
|
|
290
|
+
for (const layer of this.store.getAllLayers()) {
|
|
291
|
+
const number = extractNumberFromName(layer.name, typeName);
|
|
292
|
+
if (number !== null && number > maxNumber) {
|
|
293
|
+
maxNumber = number;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return maxNumber;
|
|
297
|
+
});
|
|
298
|
+
const nextNumber = (this.counters.get(LAYER_COUNTER_KEY) ?? 0) + 1;
|
|
299
|
+
this.counters.set(LAYER_COUNTER_KEY, nextNumber);
|
|
300
|
+
return nextNumber;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Generates the name of a new Group
|
|
304
|
+
*
|
|
305
|
+
* A group always has a name, so this never gives up: when naming is disabled it returns the
|
|
306
|
+
* word of Group alone, without a number.
|
|
307
|
+
*
|
|
308
|
+
* @returns The generated name ("Group 2"), or the word of Group when it is disabled
|
|
309
|
+
*/
|
|
310
|
+
generateGroupName() {
|
|
311
|
+
const typeName = this.getGroupTypeName();
|
|
312
|
+
if (!this.config.enabled) {
|
|
313
|
+
return typeName;
|
|
314
|
+
}
|
|
315
|
+
const nextNumber = this.findNextGroupNumber(typeName);
|
|
316
|
+
const formatter = this.config.formatter ?? defaultFormatter;
|
|
317
|
+
return formatter(typeName, nextNumber);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Gets the next Group number
|
|
321
|
+
*/
|
|
322
|
+
findNextGroupNumber(typeName) {
|
|
323
|
+
this.scanOnce(GROUP_COUNTER_KEY, () => {
|
|
324
|
+
let maxNumber = 0;
|
|
325
|
+
for (const group of this.store.getAllGroups()) {
|
|
326
|
+
const number = extractNumberFromName(group.name, typeName);
|
|
327
|
+
if (number !== null && number > maxNumber) {
|
|
328
|
+
maxNumber = number;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return maxNumber;
|
|
332
|
+
});
|
|
333
|
+
const nextNumber = (this.counters.get(GROUP_COUNTER_KEY) ?? 0) + 1;
|
|
334
|
+
this.counters.set(GROUP_COUNTER_KEY, nextNumber);
|
|
335
|
+
return nextNumber;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolution of the rendering pixel ratio (pixelRatio)
|
|
3
|
+
*
|
|
4
|
+
* Line widths, point sizes and glyphs are baked in by converting CSS pixels into physical
|
|
5
|
+
* pixels, so the ratio of the backing store being drawn into is required. It normally matches
|
|
6
|
+
* `window.devicePixelRatio`, but it does not match when a maplibre Map is brought up with an
|
|
7
|
+
* arbitrary `pixelRatio` (such as a temporary instance mounted off-screen for a high-
|
|
8
|
+
* resolution export). It can therefore be injected through Options, and all references are
|
|
9
|
+
* collected into this helper.
|
|
10
|
+
*
|
|
11
|
+
* There are situations where the ratio itself needs to move at run time (as in the paper
|
|
12
|
+
* preview, where, while it is shown scaled down on the screen, the dimensions fixed in screen
|
|
13
|
+
* pixels should shrink by the same ratio), so the injected value accepts three forms: a
|
|
14
|
+
* number, a function that returns a value each time it is called, and a provider object.
|
|
15
|
+
* `createPixelRatioSource` is the actual provider, and it multiplies the resolved result by
|
|
16
|
+
* the rendering scale that can be changed at run time (renderScale).
|
|
17
|
+
*
|
|
18
|
+
* ## The two ratios
|
|
19
|
+
*
|
|
20
|
+
* renderScale applies only to "dimensions fixed in screen pixels".
|
|
21
|
+
*
|
|
22
|
+
* - Dimensions fixed in screen pixels (`resolvePixelRatio`) ... those whose thickness on the
|
|
23
|
+
* screen does not change when the zoom changes. Point sizes, the line width of features
|
|
24
|
+
* that have no createdZoom, line widths that go through `u_width`, and so on. They do not
|
|
25
|
+
* shrink when the camera pulls back, so they have to be shrunk with renderScale in the
|
|
26
|
+
* paper preview
|
|
27
|
+
* - Dimensions that scale with the zoom (`resolveContentPixelRatio`) ... those that the
|
|
28
|
+
* shader multiplies by `2^(zoom - createdZoom)`, line widths given in meters, and so on.
|
|
29
|
+
* They already shrink by the same ratio when the camera pulls back, so multiplying by
|
|
30
|
+
* renderScale shrinks them twice (the 2026-08-10 defect where only the outlines of notes
|
|
31
|
+
* thinned down to 1/k² in the paper preview)
|
|
32
|
+
*
|
|
33
|
+
* The side that bakes the value in chooses between the two by whether the shader scales that
|
|
34
|
+
* value with the zoom.
|
|
35
|
+
*/
|
|
36
|
+
/**
|
|
37
|
+
* Provider of the rendering pixel ratio (read only)
|
|
38
|
+
*
|
|
39
|
+
* It makes "the injected value (window when there is none)" and "the factor that can be
|
|
40
|
+
* changed at run time (renderScale)" readable separately. Handing this out as is to each
|
|
41
|
+
* renderer as the `PixelRatioInput` makes a change of the factor propagate from the next frame
|
|
42
|
+
* to every place that reads it directly, and also lets "the ratio without the factor" be taken
|
|
43
|
+
* from the same single socket.
|
|
44
|
+
*/
|
|
45
|
+
export interface PixelRatioProvider {
|
|
46
|
+
/** The current rendering pixel ratio (the injected value or window x renderScale) */
|
|
47
|
+
resolve: () => number;
|
|
48
|
+
/** The factor of the current rendering pixel ratio (default 1) */
|
|
49
|
+
getRenderScale: () => number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The rendering pixel ratio that can be injected
|
|
53
|
+
*
|
|
54
|
+
* Besides a number, a function that returns the current ratio each time it is called and a
|
|
55
|
+
* provider object can be passed (so that a ratio that changes at run time is followed).
|
|
56
|
+
*/
|
|
57
|
+
export type PixelRatioInput = number | (() => number) | PixelRatioProvider;
|
|
58
|
+
/**
|
|
59
|
+
* Resolves the rendering pixel ratio (for dimensions fixed in screen pixels; renderScale
|
|
60
|
+
* included)
|
|
61
|
+
*
|
|
62
|
+
* It returns the injected value if there is one, and otherwise reads
|
|
63
|
+
* `window.devicePixelRatio` on every call. The value at startup is not fixed because the ratio
|
|
64
|
+
* changes when the window is moved to a display with a different ratio (the behavior when
|
|
65
|
+
* there is no injection is exactly the same as before).
|
|
66
|
+
*
|
|
67
|
+
* @param pixelRatio The injected rendering pixel ratio (when unspecified, at most 0, or not a
|
|
68
|
+
* number, it is read from window)
|
|
69
|
+
*/
|
|
70
|
+
export declare function resolvePixelRatio(pixelRatio?: PixelRatioInput): number;
|
|
71
|
+
/**
|
|
72
|
+
* The rendering pixel ratio for dimensions that scale with the zoom (renderScale is not
|
|
73
|
+
* applied)
|
|
74
|
+
*
|
|
75
|
+
* Used for "dimensions that already scale with the zoom of the camera", such as line widths
|
|
76
|
+
* that the shader multiplies by `2^(zoom - createdZoom)` and line widths given in meters. When
|
|
77
|
+
* it is used as in the paper preview, where "the camera pulls back by δ and 2^-δ is passed to
|
|
78
|
+
* renderScale", applying the factor here would apply the same reduction twice.
|
|
79
|
+
*
|
|
80
|
+
* When no provider is passed (a number, a function, or unspecified) there is no notion of a
|
|
81
|
+
* factor, so it returns the same value as `resolvePixelRatio`.
|
|
82
|
+
*
|
|
83
|
+
* @param pixelRatio The injected rendering pixel ratio
|
|
84
|
+
*/
|
|
85
|
+
export declare function resolveContentPixelRatio(pixelRatio?: PixelRatioInput): number;
|
|
86
|
+
/**
|
|
87
|
+
* Source of the rendering pixel ratio
|
|
88
|
+
*
|
|
89
|
+
* The read side (`PixelRatioProvider`) plus a socket for rewriting the factor.
|
|
90
|
+
* Handing the source itself out to each renderer as the `PixelRatioInput` makes a change from
|
|
91
|
+
* `setRenderScale` propagate from the next frame to every place that reads it directly.
|
|
92
|
+
*/
|
|
93
|
+
export interface PixelRatioSource extends PixelRatioProvider {
|
|
94
|
+
/**
|
|
95
|
+
* Sets the factor of the rendering pixel ratio
|
|
96
|
+
*
|
|
97
|
+
* It accepts only finite positive values (anything else is ignored). It returns true only
|
|
98
|
+
* when the value changed, so the caller can trigger a redraw or a rebuild of the batches
|
|
99
|
+
* only at that point.
|
|
100
|
+
*/
|
|
101
|
+
setRenderScale: (scale: number) => boolean;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Creates a source of the rendering pixel ratio
|
|
105
|
+
*
|
|
106
|
+
* @param pixelRatio The injected rendering pixel ratio
|
|
107
|
+
* @param fallback Read each time when nothing usable was injected: the ratio of the map the
|
|
108
|
+
* drawing goes into (`map.getPixelRatio()`), which follows a `pixelRatio` the map was
|
|
109
|
+
* created with. When it is omitted or returns nothing usable, window is read
|
|
110
|
+
*/
|
|
111
|
+
export declare function createPixelRatioSource(pixelRatio?: number, fallback?: () => number): PixelRatioSource;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/** Whether it is a provider object */
|
|
4
|
+
function isProvider(value) {
|
|
5
|
+
return (typeof value === 'object' &&
|
|
6
|
+
value !== null &&
|
|
7
|
+
typeof value.resolve === 'function');
|
|
8
|
+
}
|
|
9
|
+
/** The ratio of window (1 in environments where it cannot be read) */
|
|
10
|
+
function windowPixelRatio() {
|
|
11
|
+
return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;
|
|
12
|
+
}
|
|
13
|
+
/** Lets only finite positive numbers through */
|
|
14
|
+
function usable(value) {
|
|
15
|
+
return value !== undefined && Number.isFinite(value) && value > 0;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Resolves the rendering pixel ratio (for dimensions fixed in screen pixels; renderScale
|
|
19
|
+
* included)
|
|
20
|
+
*
|
|
21
|
+
* It returns the injected value if there is one, and otherwise reads
|
|
22
|
+
* `window.devicePixelRatio` on every call. The value at startup is not fixed because the ratio
|
|
23
|
+
* changes when the window is moved to a display with a different ratio (the behavior when
|
|
24
|
+
* there is no injection is exactly the same as before).
|
|
25
|
+
*
|
|
26
|
+
* @param pixelRatio The injected rendering pixel ratio (when unspecified, at most 0, or not a
|
|
27
|
+
* number, it is read from window)
|
|
28
|
+
*/
|
|
29
|
+
export function resolvePixelRatio(pixelRatio) {
|
|
30
|
+
if (isProvider(pixelRatio)) {
|
|
31
|
+
const resolved = pixelRatio.resolve();
|
|
32
|
+
return usable(resolved) ? resolved : windowPixelRatio();
|
|
33
|
+
}
|
|
34
|
+
const value = typeof pixelRatio === 'function' ? pixelRatio() : pixelRatio;
|
|
35
|
+
if (usable(value))
|
|
36
|
+
return value;
|
|
37
|
+
return windowPixelRatio();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The rendering pixel ratio for dimensions that scale with the zoom (renderScale is not
|
|
41
|
+
* applied)
|
|
42
|
+
*
|
|
43
|
+
* Used for "dimensions that already scale with the zoom of the camera", such as line widths
|
|
44
|
+
* that the shader multiplies by `2^(zoom - createdZoom)` and line widths given in meters. When
|
|
45
|
+
* it is used as in the paper preview, where "the camera pulls back by δ and 2^-δ is passed to
|
|
46
|
+
* renderScale", applying the factor here would apply the same reduction twice.
|
|
47
|
+
*
|
|
48
|
+
* When no provider is passed (a number, a function, or unspecified) there is no notion of a
|
|
49
|
+
* factor, so it returns the same value as `resolvePixelRatio`.
|
|
50
|
+
*
|
|
51
|
+
* @param pixelRatio The injected rendering pixel ratio
|
|
52
|
+
*/
|
|
53
|
+
export function resolveContentPixelRatio(pixelRatio) {
|
|
54
|
+
if (!isProvider(pixelRatio))
|
|
55
|
+
return resolvePixelRatio(pixelRatio);
|
|
56
|
+
const scale = pixelRatio.getRenderScale();
|
|
57
|
+
const resolved = resolvePixelRatio(pixelRatio);
|
|
58
|
+
if (!usable(scale))
|
|
59
|
+
return resolved;
|
|
60
|
+
return resolved / scale;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Creates a source of the rendering pixel ratio
|
|
64
|
+
*
|
|
65
|
+
* @param pixelRatio The injected rendering pixel ratio
|
|
66
|
+
* @param fallback Read each time when nothing usable was injected: the ratio of the map the
|
|
67
|
+
* drawing goes into (`map.getPixelRatio()`), which follows a `pixelRatio` the map was
|
|
68
|
+
* created with. When it is omitted or returns nothing usable, window is read
|
|
69
|
+
*/
|
|
70
|
+
export function createPixelRatioSource(pixelRatio, fallback) {
|
|
71
|
+
let renderScale = 1;
|
|
72
|
+
const input = usable(pixelRatio) ? pixelRatio : fallback;
|
|
73
|
+
return {
|
|
74
|
+
resolve: () => resolvePixelRatio(input) * renderScale,
|
|
75
|
+
getRenderScale: () => renderScale,
|
|
76
|
+
setRenderScale: (scale) => {
|
|
77
|
+
if (!Number.isFinite(scale) || scale <= 0)
|
|
78
|
+
return false;
|
|
79
|
+
if (scale === renderScale)
|
|
80
|
+
return false;
|
|
81
|
+
renderScale = scale;
|
|
82
|
+
return true;
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { Feature, ImageProperties } from '../types/model.js';
|
|
2
|
+
/**
|
|
3
|
+
* Gets the zoom at which the feature was created (`properties.createdZoom`)
|
|
4
|
+
*
|
|
5
|
+
* The drawing modes record it. Line widths follow the map from that zoom, and an Image is
|
|
6
|
+
* drawn at its size in pixels at that zoom (see {@link FeatureStyle.strokeWidth}).
|
|
7
|
+
*
|
|
8
|
+
* @returns The zoom, or undefined when the feature has none (it then keeps the same width on
|
|
9
|
+
* the screen)
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const feature = draw.getFeature(id);
|
|
14
|
+
* const zoom = feature ? getCreatedZoom(feature) : undefined;
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare function getCreatedZoom(feature: Feature): number | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* Sets the zoom at which a feature was created, in a `properties` object
|
|
20
|
+
*
|
|
21
|
+
* Use it on the properties of a {@link FeatureInput} before `addFeature`, so that the new
|
|
22
|
+
* feature scales with the map from the current zoom like a drawn one.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* const properties: Record<string, unknown> = {};
|
|
27
|
+
* setCreatedZoom(properties, map.getZoom());
|
|
28
|
+
* draw.addFeature({
|
|
29
|
+
* type: 'LineString',
|
|
30
|
+
* coordinates: [
|
|
31
|
+
* [139.76, 35.68],
|
|
32
|
+
* [139.78, 35.69],
|
|
33
|
+
* ],
|
|
34
|
+
* properties,
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function setCreatedZoom(properties: Record<string, unknown>, zoom: number): void;
|
|
39
|
+
/**
|
|
40
|
+
* Gets the rotation of the feature in degrees (`properties.rotation`, 0 when unset)
|
|
41
|
+
*/
|
|
42
|
+
export declare function getRotation(feature: Feature): number;
|
|
43
|
+
/**
|
|
44
|
+
* Sets the rotation in degrees, in a `properties` object (the properties of a
|
|
45
|
+
* {@link FeatureInput} before `addFeature`, say)
|
|
46
|
+
*/
|
|
47
|
+
export declare function setRotation(properties: Record<string, unknown>, rotation: number): void;
|
|
48
|
+
/**
|
|
49
|
+
* Gets the scale of the feature (`properties.scale`, 1 when unset), which resizing an Image
|
|
50
|
+
* changes
|
|
51
|
+
*/
|
|
52
|
+
export declare function getScale(feature: Feature): number;
|
|
53
|
+
/**
|
|
54
|
+
* Sets the scale of the feature
|
|
55
|
+
*/
|
|
56
|
+
export declare function setScale(properties: Record<string, unknown>, scale: number): void;
|
|
57
|
+
/**
|
|
58
|
+
* Gets the name of the feature
|
|
59
|
+
*/
|
|
60
|
+
export declare function getFeatureName(feature: Feature): string | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Sets the name of the feature
|
|
63
|
+
*/
|
|
64
|
+
export declare function setFeatureName(properties: Record<string, unknown>, name: string): void;
|
|
65
|
+
/**
|
|
66
|
+
* Gets the description of the feature
|
|
67
|
+
*/
|
|
68
|
+
export declare function getFeatureDescription(feature: Feature): string | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Sets the description of the feature
|
|
71
|
+
*/
|
|
72
|
+
export declare function setFeatureDescription(properties: Record<string, unknown>, description: string): void;
|
|
73
|
+
/**
|
|
74
|
+
* Gets the properties of an Image feature in a type-safe way.
|
|
75
|
+
*
|
|
76
|
+
* It validates and extracts each field from feature.properties (Record<string, unknown>).
|
|
77
|
+
* Use it instead of a dangerous cast such as `as unknown as ImageProperties`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function getImageProperties(feature: Feature): ImageProperties;
|
|
80
|
+
/**
|
|
81
|
+
* Gets the radius (meters) of a Circle feature. undefined when it is unset or invalid.
|
|
82
|
+
*/
|
|
83
|
+
export declare function getCircleRadius(feature: Feature): number | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Gets the angle (degrees) of the radius handle of a Circle feature. The default is 135
|
|
86
|
+
* (toward the southwest).
|
|
87
|
+
*/
|
|
88
|
+
export declare function getRadiusHandleAngle(feature: Feature): number;
|