@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,179 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The edges of a feature
|
|
5
|
+
*
|
|
6
|
+
* Lists the edges (and the parts) of a feature with their vertex references. The snapping
|
|
7
|
+
* providers and the tracing graph (operations/trace-graph.ts) both enumerate edges this way,
|
|
8
|
+
* so the listing sits in shared/. It is pure: it reads only the coordinates of the feature.
|
|
9
|
+
*/
|
|
10
|
+
import { getSegmentGrid, querySegmentIndicesInBBox, SEGMENT_INDEX_THRESHOLD, } from '../math/segment-grid.js';
|
|
11
|
+
/**
|
|
12
|
+
* Whether the feature type has edges (whether it is a target of edge snapping)
|
|
13
|
+
*
|
|
14
|
+
* It is aligned with the types that support vertex editing. Point has vertices only,
|
|
15
|
+
* and Circle / Image / Freehand are out of scope.
|
|
16
|
+
*/
|
|
17
|
+
export function hasSnapEdges(type) {
|
|
18
|
+
return (type === 'LineString' ||
|
|
19
|
+
type === 'Polygon' ||
|
|
20
|
+
type === 'MultiLineString' ||
|
|
21
|
+
type === 'MultiPolygon');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Whether the segment overlaps the bbox (a cheap preliminary test)
|
|
25
|
+
*
|
|
26
|
+
* The real test against the tolerance is done by SnapService using the distance to
|
|
27
|
+
* the nearest point, so all this guarantees is that nothing is missed.
|
|
28
|
+
*/
|
|
29
|
+
export function segmentIntersectsBBox(start, end, bbox) {
|
|
30
|
+
const minX = Math.min(start[0], end[0]);
|
|
31
|
+
const maxX = Math.max(start[0], end[0]);
|
|
32
|
+
const minY = Math.min(start[1], end[1]);
|
|
33
|
+
const maxY = Math.max(start[1], end[1]);
|
|
34
|
+
return minX <= bbox.maxX && maxX >= bbox.minX && minY <= bbox.maxY && maxY >= bbox.minY;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether the point is inside the bbox (the boundary included)
|
|
38
|
+
*
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
export function isInBBox(position, bbox) {
|
|
42
|
+
return (position[0] >= bbox.minX &&
|
|
43
|
+
position[0] <= bbox.maxX &&
|
|
44
|
+
position[1] >= bbox.minY &&
|
|
45
|
+
position[1] <= bbox.maxY);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Lists the parts of a feature per type
|
|
49
|
+
*
|
|
50
|
+
* A helper that lets the listing of edges and the listing of vertices share the
|
|
51
|
+
* branching on type. Types without edges (Point / MultiPoint / custom types) call
|
|
52
|
+
* nothing.
|
|
53
|
+
*
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export function forEachPart(feature, visit) {
|
|
57
|
+
switch (feature.type) {
|
|
58
|
+
case 'LineString':
|
|
59
|
+
visit(feature.coordinates, 0, undefined, false);
|
|
60
|
+
break;
|
|
61
|
+
case 'Polygon': {
|
|
62
|
+
const rings = feature.coordinates;
|
|
63
|
+
for (let ring = 0; ring < rings.length; ring++) {
|
|
64
|
+
visit(rings[ring], ring, undefined, true);
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
case 'MultiLineString': {
|
|
69
|
+
const parts = feature.coordinates;
|
|
70
|
+
for (let part = 0; part < parts.length; part++) {
|
|
71
|
+
visit(parts[part], 0, part, false);
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
case 'MultiPolygon': {
|
|
76
|
+
const parts = feature.coordinates;
|
|
77
|
+
for (let part = 0; part < parts.length; part++) {
|
|
78
|
+
const rings = parts[part];
|
|
79
|
+
for (let ring = 0; ring < rings.length; ring++) {
|
|
80
|
+
visit(rings[ring], ring, part, true);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Builds a function that builds vertex references
|
|
89
|
+
*
|
|
90
|
+
* @internal
|
|
91
|
+
*/
|
|
92
|
+
export function makeRefFactory(ring, part) {
|
|
93
|
+
return (index) => part === undefined ? { ring, index } : { part, ring, index };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Whether the coordinate sequence is closed (whether the last item is a copy of the
|
|
97
|
+
* first one)
|
|
98
|
+
*
|
|
99
|
+
* @internal
|
|
100
|
+
*/
|
|
101
|
+
export function isClosedCoords(coords) {
|
|
102
|
+
if (coords.length === 0)
|
|
103
|
+
return false;
|
|
104
|
+
const first = coords[0];
|
|
105
|
+
const last = coords[coords.length - 1];
|
|
106
|
+
return first[0] === last[0] && first[1] === last[1];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Gathers the edges of one coordinate sequence (a line / a ring)
|
|
110
|
+
*
|
|
111
|
+
* In a ring where closed is true, the last item is a copy of the first one, so the
|
|
112
|
+
* vertex reference of the last item is normalized to index 0 (to make the test for
|
|
113
|
+
* exclusion match the vertex handles).
|
|
114
|
+
*/
|
|
115
|
+
function collectSegments(coords, ring, part, visit) {
|
|
116
|
+
if (coords.length < 2)
|
|
117
|
+
return;
|
|
118
|
+
const closed = isClosedCoords(coords);
|
|
119
|
+
const vertexCount = closed ? coords.length - 1 : coords.length;
|
|
120
|
+
const toRef = makeRefFactory(ring, part);
|
|
121
|
+
for (let i = 0; i < coords.length - 1; i++) {
|
|
122
|
+
const endIndex = closed && i + 1 === vertexCount ? 0 : i + 1;
|
|
123
|
+
visit(coords[i], coords[i + 1], toRef(i), toRef(endIndex));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Gathers only the edges of one coordinate sequence (a line / a ring) that fall
|
|
128
|
+
* within the bbox
|
|
129
|
+
*
|
|
130
|
+
* For a part whose vertex count is at or above the threshold, the candidates are
|
|
131
|
+
* narrowed down with a segment grid index. The values passed to visit are exactly the
|
|
132
|
+
* same as in collectSegments (the last item of a closed ring is normalized to index
|
|
133
|
+
* 0).
|
|
134
|
+
*/
|
|
135
|
+
function collectSegmentsInBBox(coords, ring, part, bbox, visit) {
|
|
136
|
+
if (coords.length < 2)
|
|
137
|
+
return;
|
|
138
|
+
const closed = isClosedCoords(coords);
|
|
139
|
+
const vertexCount = closed ? coords.length - 1 : coords.length;
|
|
140
|
+
const toRef = makeRefFactory(ring, part);
|
|
141
|
+
const visitSegment = (i) => {
|
|
142
|
+
if (!segmentIntersectsBBox(coords[i], coords[i + 1], bbox))
|
|
143
|
+
return;
|
|
144
|
+
const endIndex = closed && i + 1 === vertexCount ? 0 : i + 1;
|
|
145
|
+
visit(coords[i], coords[i + 1], toRef(i), toRef(endIndex));
|
|
146
|
+
};
|
|
147
|
+
// For a small part, building an index costs more, so it is scanned as it is
|
|
148
|
+
if (coords.length < SEGMENT_INDEX_THRESHOLD) {
|
|
149
|
+
for (let i = 0; i < coords.length - 1; i++) {
|
|
150
|
+
visitSegment(i);
|
|
151
|
+
}
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
for (const i of querySegmentIndicesInBBox(getSegmentGrid(coords), bbox)) {
|
|
155
|
+
visitSegment(i);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Gathers the edges of a feature
|
|
160
|
+
*
|
|
161
|
+
* @internal
|
|
162
|
+
*/
|
|
163
|
+
export function collectFeatureSegments(feature, visit) {
|
|
164
|
+
forEachPart(feature, (coords, ring, part) => {
|
|
165
|
+
collectSegments(coords, ring, part, visit);
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Gathers only the edges of a feature that fall within the bbox
|
|
170
|
+
*
|
|
171
|
+
* The result is the same as applying a preliminary bbox filter to
|
|
172
|
+
* collectFeatureSegments; only for a huge part is the listing narrowed down with a
|
|
173
|
+
* segment grid index.
|
|
174
|
+
*/
|
|
175
|
+
export function collectFeatureSegmentsInBBox(feature, bbox, visit) {
|
|
176
|
+
forEachPart(feature, (coords, ring, part) => {
|
|
177
|
+
collectSegmentsInBBox(coords, ring, part, bbox, visit);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* The generation of the ids of features, groups, layers and files
|
|
5
|
+
*
|
|
6
|
+
* An id is a ULID (the time in milliseconds followed by 80 random bits, in Crockford's Base32), so
|
|
7
|
+
* ids of later milliseconds sort after earlier ones. The `ulid` package encodes it; the random
|
|
8
|
+
* bytes are taken from `crypto.getRandomValues` in batches and handed out one by one, where the
|
|
9
|
+
* package alone asks the crypto source once per character (16 calls per id, the larger part of
|
|
10
|
+
* the time of a large import).
|
|
11
|
+
*/
|
|
12
|
+
import { ulid } from 'ulid';
|
|
13
|
+
/** The number of random bytes taken at once (256 ids) */
|
|
14
|
+
const POOL_SIZE = 4096;
|
|
15
|
+
let pool = new Uint8Array(POOL_SIZE);
|
|
16
|
+
let cursor = POOL_SIZE;
|
|
17
|
+
/**
|
|
18
|
+
* A random fraction in [0, 1) from the pool, of the same distribution as the source of the
|
|
19
|
+
* package (one byte divided by 256)
|
|
20
|
+
*/
|
|
21
|
+
function pooledRandom() {
|
|
22
|
+
if (cursor >= POOL_SIZE) {
|
|
23
|
+
pool = globalThis.crypto.getRandomValues(new Uint8Array(POOL_SIZE));
|
|
24
|
+
cursor = 0;
|
|
25
|
+
}
|
|
26
|
+
return pool[cursor++] / 256;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Creates a new ULID
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
export function createId() {
|
|
34
|
+
return ulid(undefined, pooledRandom);
|
|
35
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image processing utilities
|
|
3
|
+
*
|
|
4
|
+
* Converts an image file into the WebP format, resizing it when necessary.
|
|
5
|
+
*/
|
|
6
|
+
export interface ProcessedImage {
|
|
7
|
+
dataUrl: string;
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
mimeType: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Maximum size of an image
|
|
14
|
+
* A value that accounts for the WebGL texture limit (modern GPUs support 4096 or more)
|
|
15
|
+
*/
|
|
16
|
+
export declare const MAX_IMAGE_SIZE = 4096;
|
|
17
|
+
/**
|
|
18
|
+
* Converts a file into a DataURL in the WebP format
|
|
19
|
+
* A large image is resized automatically
|
|
20
|
+
*/
|
|
21
|
+
export declare function processImageFile(file: File): Promise<ProcessedImage>;
|
|
22
|
+
/**
|
|
23
|
+
* Whether an image of this size has to be scaled down before it is used as a texture
|
|
24
|
+
*/
|
|
25
|
+
export declare function exceedsMaxImageSize(width: number, height: number): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Converts an image DataURL into a DataURL in the WebP format
|
|
28
|
+
* A large image is resized automatically
|
|
29
|
+
*/
|
|
30
|
+
export declare function processImageDataUrl(originalDataUrl: string): Promise<ProcessedImage>;
|
|
31
|
+
/**
|
|
32
|
+
* Tests whether it is an image file
|
|
33
|
+
*/
|
|
34
|
+
export declare function isImageFile(file: File): boolean;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
const WEBP_QUALITY = 0.95;
|
|
4
|
+
/**
|
|
5
|
+
* Maximum size of an image
|
|
6
|
+
* A value that accounts for the WebGL texture limit (modern GPUs support 4096 or more)
|
|
7
|
+
*/
|
|
8
|
+
export const MAX_IMAGE_SIZE = 4096;
|
|
9
|
+
/**
|
|
10
|
+
* Tests whether the image needs to be resized and, when it does, computes the new size
|
|
11
|
+
*/
|
|
12
|
+
function calculateResizedDimensions(width, height, maxSize) {
|
|
13
|
+
if (width <= maxSize && height <= maxSize) {
|
|
14
|
+
return { width, height, needsResize: false };
|
|
15
|
+
}
|
|
16
|
+
const aspectRatio = width / height;
|
|
17
|
+
let newWidth;
|
|
18
|
+
let newHeight;
|
|
19
|
+
if (width > height) {
|
|
20
|
+
newWidth = maxSize;
|
|
21
|
+
newHeight = Math.round(maxSize / aspectRatio);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
newHeight = maxSize;
|
|
25
|
+
newWidth = Math.round(maxSize * aspectRatio);
|
|
26
|
+
}
|
|
27
|
+
return { width: newWidth, height: newHeight, needsResize: true };
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Converts a file into a DataURL in the WebP format
|
|
31
|
+
* A large image is resized automatically
|
|
32
|
+
*/
|
|
33
|
+
export async function processImageFile(file) {
|
|
34
|
+
return processImageDataUrl(await fileToDataUrl(file));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether an image of this size has to be scaled down before it is used as a texture
|
|
38
|
+
*/
|
|
39
|
+
export function exceedsMaxImageSize(width, height) {
|
|
40
|
+
return width > MAX_IMAGE_SIZE || height > MAX_IMAGE_SIZE;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Converts an image DataURL into a DataURL in the WebP format
|
|
44
|
+
* A large image is resized automatically
|
|
45
|
+
*/
|
|
46
|
+
export async function processImageDataUrl(originalDataUrl) {
|
|
47
|
+
// 1. Load it as an Image (to get the dimensions)
|
|
48
|
+
const img = await loadImage(originalDataUrl);
|
|
49
|
+
// 2. Decide whether it needs to be resized
|
|
50
|
+
const { width, height } = calculateResizedDimensions(img.naturalWidth, img.naturalHeight, MAX_IMAGE_SIZE);
|
|
51
|
+
// 3. Draw it onto a Canvas and convert it into WebP
|
|
52
|
+
const canvas = document.createElement('canvas');
|
|
53
|
+
canvas.width = width;
|
|
54
|
+
canvas.height = height;
|
|
55
|
+
const ctx = canvas.getContext('2d');
|
|
56
|
+
if (!ctx) {
|
|
57
|
+
throw new Error('Failed to get canvas 2d context');
|
|
58
|
+
}
|
|
59
|
+
// Settings for a high-quality resize
|
|
60
|
+
ctx.imageSmoothingEnabled = true;
|
|
61
|
+
ctx.imageSmoothingQuality = 'high';
|
|
62
|
+
ctx.drawImage(img, 0, 0, width, height);
|
|
63
|
+
// 4. Convert into WebP
|
|
64
|
+
const webpDataUrl = canvas.toDataURL('image/webp', WEBP_QUALITY);
|
|
65
|
+
return {
|
|
66
|
+
dataUrl: webpDataUrl,
|
|
67
|
+
width,
|
|
68
|
+
height,
|
|
69
|
+
mimeType: 'image/webp',
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Converts a File into a DataURL
|
|
74
|
+
*/
|
|
75
|
+
function fileToDataUrl(file) {
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
const reader = new FileReader();
|
|
78
|
+
reader.onload = () => {
|
|
79
|
+
if (typeof reader.result === 'string') {
|
|
80
|
+
resolve(reader.result);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
reject(new Error('Failed to read file as data URL'));
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
reader.onerror = () => reject(reader.error);
|
|
87
|
+
reader.readAsDataURL(file);
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Loads an image from a DataURL
|
|
92
|
+
*/
|
|
93
|
+
function loadImage(dataUrl) {
|
|
94
|
+
return new Promise((resolve, reject) => {
|
|
95
|
+
const img = new Image();
|
|
96
|
+
img.onload = () => resolve(img);
|
|
97
|
+
img.onerror = () => reject(new Error('Failed to load image'));
|
|
98
|
+
img.src = dataUrl;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Tests whether it is an image file
|
|
103
|
+
*/
|
|
104
|
+
export function isImageFile(file) {
|
|
105
|
+
return file.type.startsWith('image/');
|
|
106
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities module
|
|
3
|
+
*
|
|
4
|
+
* Shared utility functions and helpers.
|
|
5
|
+
*/
|
|
6
|
+
export { getContrastColor, hexToColor, interpolateHexColor } from './color.js';
|
|
7
|
+
export { flattenCoordinatesDeep, forEachCoordinateDeep, isCoordinate, isMultiFeatureType, MULTI_FEATURE_TYPES, mapCoordinatesDeep, } from './coordinates.js';
|
|
8
|
+
export type { EventEmitter, EventListener, EventMap, FeaturesChangePayload, GeometryAppliedPayload, GeometryOperationName, LoadErrorPayload, } from './event-emitter.js';
|
|
9
|
+
export { EventEmitterImpl } from './event-emitter.js';
|
|
10
|
+
export { isImageFile, type ProcessedImage, processImageFile } from './image.js';
|
|
11
|
+
export { getTileSize } from './map.js';
|
|
12
|
+
export { type AutoNameConfig, AutoNameGenerator, type AutoNameType, normalizeAutoNameConfig, } from './name-generator.js';
|
|
13
|
+
export { createPixelRatioSource, type PixelRatioInput, type PixelRatioProvider, type PixelRatioSource, resolveContentPixelRatio, resolvePixelRatio, } from './pixel-ratio.js';
|
|
14
|
+
export { getCircleRadius, getCreatedZoom, getFeatureDescription, getFeatureName, getImageProperties, getRadiusHandleAngle, getRotation, getScale, setCreatedZoom, setFeatureDescription, setFeatureName, setRotation, setScale, } from './property.js';
|
|
15
|
+
export { getVertexPart, hasVertexRef, isSameVertexRef } from './vertex-ref.js';
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Utilities module
|
|
5
|
+
*
|
|
6
|
+
* Shared utility functions and helpers.
|
|
7
|
+
*/
|
|
8
|
+
// Color conversion
|
|
9
|
+
export { getContrastColor, hexToColor, interpolateHexColor } from './color.js';
|
|
10
|
+
// Coordinate traversal
|
|
11
|
+
export { flattenCoordinatesDeep, forEachCoordinateDeep, isCoordinate, isMultiFeatureType, MULTI_FEATURE_TYPES, mapCoordinatesDeep, } from './coordinates.js';
|
|
12
|
+
export { EventEmitterImpl } from './event-emitter.js';
|
|
13
|
+
// Image processing
|
|
14
|
+
export { isImageFile, processImageFile } from './image.js';
|
|
15
|
+
// Map utilities
|
|
16
|
+
export { getTileSize } from './map.js';
|
|
17
|
+
// Automatic name generation
|
|
18
|
+
export { AutoNameGenerator, normalizeAutoNameConfig, } from './name-generator.js';
|
|
19
|
+
// Resolution of the rendering pixel ratio
|
|
20
|
+
export { createPixelRatioSource, resolveContentPixelRatio, resolvePixelRatio, } from './pixel-ratio.js';
|
|
21
|
+
// Property manipulation
|
|
22
|
+
export { getCircleRadius, getCreatedZoom, getFeatureDescription, getFeatureName, getImageProperties, getRadiusHandleAngle, getRotation, getScale, setCreatedZoom, setFeatureDescription, setFeatureName, setRotation, setScale, } from './property.js';
|
|
23
|
+
// Comparison of vertex references
|
|
24
|
+
export { getVertexPart, hasVertexRef, isSameVertexRef } from './vertex-ref.js';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map utilities
|
|
3
|
+
*
|
|
4
|
+
* Utility functions related to the MapLibre GL JS map instance.
|
|
5
|
+
*/
|
|
6
|
+
import type { Map as MapLibreMap } from 'maplibre-gl';
|
|
7
|
+
/**
|
|
8
|
+
* Gets the tile size of the map
|
|
9
|
+
*
|
|
10
|
+
* Accesses an internal property of MapLibre GL JS to get the tile size.
|
|
11
|
+
* Returns the default value (512) when it cannot be obtained.
|
|
12
|
+
*
|
|
13
|
+
* @param map MapLibre map instance
|
|
14
|
+
* @returns Tile size (pixels)
|
|
15
|
+
*/
|
|
16
|
+
export declare function getTileSize(map: MapLibreMap): number;
|
|
17
|
+
/**
|
|
18
|
+
* Whether the map is set to a projection other than Web Mercator (the globe)
|
|
19
|
+
*
|
|
20
|
+
* The globe projection switches to Mercator as the map zooms in, but the setting stays, so
|
|
21
|
+
* this is true at every zoom of a globe map. A map whose style is not loaded yet counts as
|
|
22
|
+
* Mercator.
|
|
23
|
+
*
|
|
24
|
+
* @param map MapLibre map instance
|
|
25
|
+
*/
|
|
26
|
+
export declare function isGlobeProjection(map: MapLibreMap): boolean;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
import { DEFAULT_TILE_SIZE } from '../math/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Gets the tile size of the map
|
|
6
|
+
*
|
|
7
|
+
* Accesses an internal property of MapLibre GL JS to get the tile size.
|
|
8
|
+
* Returns the default value (512) when it cannot be obtained.
|
|
9
|
+
*
|
|
10
|
+
* @param map MapLibre map instance
|
|
11
|
+
* @returns Tile size (pixels)
|
|
12
|
+
*/
|
|
13
|
+
export function getTileSize(map) {
|
|
14
|
+
return (map.transform?.tileSize ??
|
|
15
|
+
DEFAULT_TILE_SIZE);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Whether the map is set to a projection other than Web Mercator (the globe)
|
|
19
|
+
*
|
|
20
|
+
* The globe projection switches to Mercator as the map zooms in, but the setting stays, so
|
|
21
|
+
* this is true at every zoom of a globe map. A map whose style is not loaded yet counts as
|
|
22
|
+
* Mercator.
|
|
23
|
+
*
|
|
24
|
+
* @param map MapLibre map instance
|
|
25
|
+
*/
|
|
26
|
+
export function isGlobeProjection(map) {
|
|
27
|
+
let type;
|
|
28
|
+
try {
|
|
29
|
+
type = map.getProjection?.()?.type;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
return type !== undefined && type !== 'mercator';
|
|
35
|
+
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AutoNameGenerator
|
|
3
|
+
*
|
|
4
|
+
* A utility that automatically generates a name with a sequential number when a Feature is
|
|
5
|
+
* newly created.
|
|
6
|
+
*
|
|
7
|
+
* Every word of a name the library gives a feature, a layer or a group comes from here: from
|
|
8
|
+
* the host's `typeNames`, or from the English defaults below. Nothing else in the library
|
|
9
|
+
* writes such a word inline.
|
|
10
|
+
*/
|
|
11
|
+
import type { Feature, FeatureType, Group, Layer, StateChanges } from '../types/model.js';
|
|
12
|
+
/**
|
|
13
|
+
* What automatic naming names: a feature type, a layer or a group
|
|
14
|
+
*/
|
|
15
|
+
export type AutoNameType = FeatureType | 'Layer' | 'Group';
|
|
16
|
+
/**
|
|
17
|
+
* How new features, layers and groups are named automatically ("Point 1", "Layer 2")
|
|
18
|
+
*
|
|
19
|
+
* Give it through the `autoName` option of `createMapLibreGLDraw` (`true`, the default, turns
|
|
20
|
+
* it on with these defaults, and `false` turns it off). Each type counts on its own, and a
|
|
21
|
+
* number is never reused: after "Point 1" and "Point 2" are created and "Point 2" is deleted,
|
|
22
|
+
* the next point is "Point 3". Existing names of the form "<word> <number>" move the count on
|
|
23
|
+
* as well, however they arrived (a load, an import).
|
|
24
|
+
*
|
|
25
|
+
* This is the one place the words of generated names come from, and the words are the host's
|
|
26
|
+
* to translate: the defaults are English, so a host that shows another language passes a
|
|
27
|
+
* word for each type it uses in `typeNames`. The keys are the type ids: the built-in feature
|
|
28
|
+
* types (`Point`, `LineString`, `Polygon`, `Circle`, `Freehand`, `Image`), `Layer`, `Group`,
|
|
29
|
+
* and the type id of every custom feature type an extension draws (a type without a word is
|
|
30
|
+
* named with its id).
|
|
31
|
+
*
|
|
32
|
+
* A layer or a group always has a name. When one is created without a name while `enabled`
|
|
33
|
+
* is false, it gets the word of its type alone, without a number ("Layer", or the
|
|
34
|
+
* `typeNames.Layer` of the host); features get no name then.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```ts
|
|
38
|
+
* const draw = createMapLibreGLDraw(map, {
|
|
39
|
+
* autoName: {
|
|
40
|
+
* enabled: true,
|
|
41
|
+
* typeNames: { Point: 'Pin', Layer: 'Sheet' },
|
|
42
|
+
* formatter: (typeName, n) => `${typeName} #${n}`,
|
|
43
|
+
* },
|
|
44
|
+
* });
|
|
45
|
+
* // The first point is named "Pin #1"
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export interface AutoNameConfig {
|
|
49
|
+
/**
|
|
50
|
+
* Whether names are generated. When false, features get no name, and a layer or a group
|
|
51
|
+
* created without a name gets the word of its type alone
|
|
52
|
+
*
|
|
53
|
+
* @defaultValue `true`
|
|
54
|
+
*/
|
|
55
|
+
enabled: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* The word used for each type in the name, keyed by the type id (a built-in feature type,
|
|
58
|
+
* `Layer`, `Group`, or a custom feature type)
|
|
59
|
+
*
|
|
60
|
+
* @defaultValue English: `'Point'`, `'LineString'`, `'Polygon'`, `'Circle'`, `'Freehand'`,
|
|
61
|
+
* `'Image'`, `'Layer'`, `'Group'`, and the id itself for any other type
|
|
62
|
+
*/
|
|
63
|
+
typeNames?: Partial<Record<AutoNameType, string>>;
|
|
64
|
+
/**
|
|
65
|
+
* Builds the name from the word of the type and the number
|
|
66
|
+
*
|
|
67
|
+
* @defaultValue `` (typeName, number) => `${typeName} ${number}` ``
|
|
68
|
+
*/
|
|
69
|
+
formatter?: (typeName: string, number: number) => string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Normalizes an AutoNameConfig
|
|
73
|
+
*/
|
|
74
|
+
export declare function normalizeAutoNameConfig(config: AutoNameConfig | boolean | undefined): AutoNameConfig;
|
|
75
|
+
/**
|
|
76
|
+
* AutoNameGenerator
|
|
77
|
+
*
|
|
78
|
+
* A class that generates sequential numbers per Feature type.
|
|
79
|
+
* It accounts for the numbers of existing Features and starts from the next number.
|
|
80
|
+
* A number that has been used once is not reused even after deletion (it leaves gaps).
|
|
81
|
+
*
|
|
82
|
+
* The existing numbers are taken in with a single full scan per type, and after that only the
|
|
83
|
+
* increments are taken in by subscribing to the Store. Scanning everything on every call would
|
|
84
|
+
* make the case of generating one at a time, as in a bulk import, O(n^2).
|
|
85
|
+
*
|
|
86
|
+
* With this incremental approach, the number of a name that was added and then deleted before
|
|
87
|
+
* any generation happened is also recorded (with the old approach it could be reused after the
|
|
88
|
+
* deletion). This is an extension of the "a number used once is not reused" policy, and it can
|
|
89
|
+
* only work in the direction of increasing the gaps.
|
|
90
|
+
*/
|
|
91
|
+
export declare class AutoNameGenerator {
|
|
92
|
+
private readonly store;
|
|
93
|
+
private readonly config;
|
|
94
|
+
/** Counter that remembers the largest number already generated per type */
|
|
95
|
+
private readonly counters;
|
|
96
|
+
/** Counter keys whose full scan is done (Layer/Group go into the same Set) */
|
|
97
|
+
private readonly scannedTypes;
|
|
98
|
+
/** Unsubscribe function of the Store subscription (null when not subscribed) */
|
|
99
|
+
private unsubscribe;
|
|
100
|
+
constructor(store: {
|
|
101
|
+
getAllFeatures(): Feature[];
|
|
102
|
+
getAllLayers(): Layer[];
|
|
103
|
+
getAllGroups(): Group[];
|
|
104
|
+
subscribe(listener: (changes: StateChanges) => void): () => void;
|
|
105
|
+
}, config?: AutoNameConfig | boolean);
|
|
106
|
+
/**
|
|
107
|
+
* Returns whether it is enabled
|
|
108
|
+
*/
|
|
109
|
+
isEnabled(): boolean;
|
|
110
|
+
/**
|
|
111
|
+
* Unsubscribes from the Store
|
|
112
|
+
*/
|
|
113
|
+
dispose(): void;
|
|
114
|
+
/**
|
|
115
|
+
* Generates an automatic name for the given type
|
|
116
|
+
*
|
|
117
|
+
* @returns The generated name, or undefined when it is disabled
|
|
118
|
+
*/
|
|
119
|
+
generateName(featureType: FeatureType): string | undefined;
|
|
120
|
+
/**
|
|
121
|
+
* Gets the type name
|
|
122
|
+
*/
|
|
123
|
+
private getTypeName;
|
|
124
|
+
/**
|
|
125
|
+
* Gets the next number
|
|
126
|
+
*
|
|
127
|
+
* Increments the counter by 1 and returns it. The counter holds the largest existing number
|
|
128
|
+
* (the first full scan plus the increments after it), so the number of a deleted Feature is
|
|
129
|
+
* not reused and a gap appears.
|
|
130
|
+
*/
|
|
131
|
+
private findNextNumber;
|
|
132
|
+
/**
|
|
133
|
+
* Takes in the largest existing number only the first time a generation happens for that
|
|
134
|
+
* counter key
|
|
135
|
+
*
|
|
136
|
+
* From the second time onward the counter is maintained incrementally, so it does not scan.
|
|
137
|
+
*/
|
|
138
|
+
private scanOnce;
|
|
139
|
+
/**
|
|
140
|
+
* Raises the counter up to number (a smaller value does not lower it)
|
|
141
|
+
*/
|
|
142
|
+
private recordNumber;
|
|
143
|
+
/**
|
|
144
|
+
* Takes in the numbers of names from the changes of the Store
|
|
145
|
+
*
|
|
146
|
+
* The path that keeps the cost proportional to the number of changes and avoids scanning
|
|
147
|
+
* everything on every generation.
|
|
148
|
+
* Deletions are ignored (because a number used once is not reused).
|
|
149
|
+
*/
|
|
150
|
+
private observeChanges;
|
|
151
|
+
/**
|
|
152
|
+
* Takes in the number from the name of a Feature
|
|
153
|
+
*/
|
|
154
|
+
private observeFeatureName;
|
|
155
|
+
/**
|
|
156
|
+
* Extracts the number from a name and takes it into the counter
|
|
157
|
+
*/
|
|
158
|
+
private observeName;
|
|
159
|
+
/**
|
|
160
|
+
* Gets the type name of Layer
|
|
161
|
+
*/
|
|
162
|
+
private getLayerTypeName;
|
|
163
|
+
/**
|
|
164
|
+
* Gets the type name of Group
|
|
165
|
+
*/
|
|
166
|
+
private getGroupTypeName;
|
|
167
|
+
/**
|
|
168
|
+
* Gets the largest number from the existing Features
|
|
169
|
+
*/
|
|
170
|
+
private getMaxNumberFromFeatures;
|
|
171
|
+
/**
|
|
172
|
+
* Generates the name of a new Layer
|
|
173
|
+
*
|
|
174
|
+
* A layer always has a name, so this never gives up: when naming is disabled it returns the
|
|
175
|
+
* word of Layer alone, without a number.
|
|
176
|
+
*
|
|
177
|
+
* @returns The generated name ("Layer 2"), or the word of Layer when it is disabled
|
|
178
|
+
*/
|
|
179
|
+
generateLayerName(): string;
|
|
180
|
+
/**
|
|
181
|
+
* Gets the next Layer number
|
|
182
|
+
*/
|
|
183
|
+
private findNextLayerNumber;
|
|
184
|
+
/**
|
|
185
|
+
* Generates the name of a new Group
|
|
186
|
+
*
|
|
187
|
+
* A group always has a name, so this never gives up: when naming is disabled it returns the
|
|
188
|
+
* word of Group alone, without a number.
|
|
189
|
+
*
|
|
190
|
+
* @returns The generated name ("Group 2"), or the word of Group when it is disabled
|
|
191
|
+
*/
|
|
192
|
+
generateGroupName(): string;
|
|
193
|
+
/**
|
|
194
|
+
* Gets the next Group number
|
|
195
|
+
*/
|
|
196
|
+
private findNextGroupNumber;
|
|
197
|
+
}
|