@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,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Store contracts
|
|
3
|
+
*
|
|
4
|
+
* All of the state lives in one place (Single Source of Truth), split along one line:
|
|
5
|
+
*
|
|
6
|
+
* - DocumentStore: the document (features, layers, groups, the stacking order, files and
|
|
7
|
+
* metadata). It is the part a host may replace (`Options.store`) to keep the document
|
|
8
|
+
* elsewhere, and it knows nothing about the user interface.
|
|
9
|
+
* - UiState: the local state of this client (selection, editing, tentative geometry, box
|
|
10
|
+
* selection, drag, vertex selection, mode, read-only, interaction lock, local
|
|
11
|
+
* visibility). core owns it; it is never part of the document.
|
|
12
|
+
*
|
|
13
|
+
* Store joins the two for core: it reads and writes the document through the DocumentStore,
|
|
14
|
+
* holds the UiState, gates the writes while read-only, keeps the UiState in step with
|
|
15
|
+
* deletions, and delivers both kinds of change in one notification. StoreView is the part of
|
|
16
|
+
* it the host sees (`draw.getStore()`): reads, subscription and transactions, no writes.
|
|
17
|
+
*/
|
|
18
|
+
import type { BoxSelection, DragState, Feature, FileData, Group, Layer, Metadata, Mode, Selection, SelectionType, StateChanges, TentativeState, UpdateFeatureOptions, UpdateSource, VertexSelection } from './types.js';
|
|
19
|
+
/**
|
|
20
|
+
* The document: the part of the state a host may replace to keep it elsewhere
|
|
21
|
+
*
|
|
22
|
+
* The state of a draw instance is split along one line:
|
|
23
|
+
*
|
|
24
|
+
* | Type | What it is |
|
|
25
|
+
* | --- | --- |
|
|
26
|
+
* | `DocumentStore` | The document: features, layers, groups, the stacking order, files and metadata |
|
|
27
|
+
* | {@link UiState} | The local state of this instance, never part of the document |
|
|
28
|
+
* | {@link Store} | Both behind the read-only gate, for core and plugins |
|
|
29
|
+
* | {@link StoreView} | Reads, `subscribe` and `transact`, from `draw.getStore()` |
|
|
30
|
+
* | {@link MemoryStore} | The in-memory `Store`, the default |
|
|
31
|
+
*
|
|
32
|
+
* A host that keeps the document elsewhere (a database, for example) implements this
|
|
33
|
+
* interface and passes it as the `store` option. Core keeps the
|
|
34
|
+
* local state (the selection, the features being edited, the geometry being drawn, the box
|
|
35
|
+
* selection, the drag, the vertex selection, the mode, read-only, the interaction lock and
|
|
36
|
+
* local visibility) around it. An implementation keeps the following contract.
|
|
37
|
+
*
|
|
38
|
+
* Containment: every feature is listed in exactly one container, in `group.featureIds` of its
|
|
39
|
+
* group when it has `groupId`, otherwise in `layer.order` of its layer. An implementation
|
|
40
|
+
* keeps it on every mutation, so that no stored feature is left out of drawing, hit testing
|
|
41
|
+
* and ordered export.
|
|
42
|
+
*
|
|
43
|
+
* The stacking order: `getLayerOrder()` is part of the document, saved and held with
|
|
44
|
+
* the rest, and it holds more than layers. An application can place entries of its own in
|
|
45
|
+
* it (the id of a dataset with `order: 'layer-order'`, a separator for
|
|
46
|
+
* the `isExternalEntry` option); what such an entry means is the application's, and the
|
|
47
|
+
* document only keeps its position. The entries are distinct non-empty strings: an
|
|
48
|
+
* implementation drops any other value and keeps a repeated entry at its first position.
|
|
49
|
+
* `createLayer` appends the new layer at the front unless the order already holds its id,
|
|
50
|
+
* and `deleteLayer` takes that layer's id out. No other operation adds or removes entries;
|
|
51
|
+
* an entry that is not a layer stays until the application sets an order without it, even
|
|
52
|
+
* when what it names is gone. A layer that is not on the order is not drawn.
|
|
53
|
+
*
|
|
54
|
+
* Returned objects: callers treat every object and array a getter returns as read-only.
|
|
55
|
+
* An implementation must not change an object after it has returned or notified it; a
|
|
56
|
+
* change stores a new object instead (MemoryStore freezes what it returns, so a write
|
|
57
|
+
* into it throws).
|
|
58
|
+
*
|
|
59
|
+
* Errors: a write with an argument that cannot apply (an id that does not exist, a
|
|
60
|
+
* `layerId` or `groupId` that names nothing, a duplicate id) throws and stores nothing.
|
|
61
|
+
* Read-only is not the document's concern: core gates the writes before they get here, and
|
|
62
|
+
* changes applied from elsewhere never pass that gate. An implementation
|
|
63
|
+
* that receives changes from elsewhere may ignore, instead of throwing, an update to an
|
|
64
|
+
* id that such a change has already removed (the caller cannot know about the removal
|
|
65
|
+
* yet); the notification then carries nothing for that id.
|
|
66
|
+
*
|
|
67
|
+
* Notifications: `subscribe` delivers the document categories of StateChanges (features,
|
|
68
|
+
* layers, groups, layerReorder, groupReorder, metadata) with their source, and `transact`
|
|
69
|
+
* groups the changes of a function into one notification. Any other category a notification
|
|
70
|
+
* carries is ignored by core. A change applied from elsewhere is notified like a local one,
|
|
71
|
+
* with the source `'remote'`, and core follows it: a deleted item leaves the selection, the
|
|
72
|
+
* vertex selection ends when its feature changed, and the hooks of the plugins fire.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* // A document kept elsewhere: wrap it in a DocumentStore and hand it to the draw instance
|
|
77
|
+
* const document: DocumentStore = createSyncedDocument(roomId);
|
|
78
|
+
* const draw = createMapLibreGLDraw(map, { store: document });
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export interface DocumentStore {
|
|
82
|
+
/** Returns the feature with this ID, or undefined */
|
|
83
|
+
getFeature(id: string): Feature | undefined;
|
|
84
|
+
/** Every feature, in no particular order */
|
|
85
|
+
getAllFeatures(): Feature[];
|
|
86
|
+
/**
|
|
87
|
+
* Creates a feature and lists it in its container
|
|
88
|
+
*
|
|
89
|
+
* Throws, storing nothing, when `layerId` names a layer that does not exist or `groupId`
|
|
90
|
+
* names a group that does not exist.
|
|
91
|
+
*/
|
|
92
|
+
createFeature(feature: Feature): void;
|
|
93
|
+
/**
|
|
94
|
+
* Updates a feature
|
|
95
|
+
*
|
|
96
|
+
* A change of `layerId` or `groupId` moves the feature from its old container to the new
|
|
97
|
+
* one (appended at the end, unless the caller lists it itself within the same
|
|
98
|
+
* transaction). A `layerId` that names a layer that does not exist throws.
|
|
99
|
+
*
|
|
100
|
+
* @param options An optional argument that conveys the nature of the update. Setting
|
|
101
|
+
* isIntermediate declares that this is "an intermediate state in the middle of an
|
|
102
|
+
* edit operation" (it is always overwritten by the committing update that follows).
|
|
103
|
+
* The application itself does not change depending on whether options is given.
|
|
104
|
+
*/
|
|
105
|
+
updateFeature(id: string, updates: Partial<Feature>, options?: UpdateFeatureOptions): void;
|
|
106
|
+
/**
|
|
107
|
+
* Discards uncommitted intermediate states (optional to implement)
|
|
108
|
+
*
|
|
109
|
+
* Called from the mode side when an edit operation is interrupted before a sequence of
|
|
110
|
+
* updates with isIntermediate reaches its commit (an updateFeature without options). A
|
|
111
|
+
* store implementation that holds intermediate states separately instead of applying
|
|
112
|
+
* them to the real data discards the intermediate state of the relevant feature here
|
|
113
|
+
* and returns to the committed state. An implementation that applies them to the real
|
|
114
|
+
* data as they are (MemoryStore) does not have to implement it: before calling it, the
|
|
115
|
+
* mode writes the values the features had when the operation started back as a last
|
|
116
|
+
* intermediate update, so the real data is already back at the start.
|
|
117
|
+
*/
|
|
118
|
+
abortIntermediateUpdates?(ids: string[]): void;
|
|
119
|
+
/**
|
|
120
|
+
* Deletes a feature and removes it from its container
|
|
121
|
+
*
|
|
122
|
+
* A group whose last member leaves is deleted with it (an empty group is not kept).
|
|
123
|
+
*/
|
|
124
|
+
deleteFeature(id: string): void;
|
|
125
|
+
/**
|
|
126
|
+
* Gets the array of features in display order
|
|
127
|
+
*
|
|
128
|
+
* Iterates in layer order -> order within the layer -> featureIds order within the
|
|
129
|
+
* group, skipping what the shared visible flag hides at any of the three levels.
|
|
130
|
+
* The head of the array is the backmost and the end is the foreground.
|
|
131
|
+
*/
|
|
132
|
+
getOrderedFeatures(): Feature[];
|
|
133
|
+
/** Returns the layer with this ID, or undefined */
|
|
134
|
+
getLayer(id: string): Layer | undefined;
|
|
135
|
+
/** Every layer, in no particular order */
|
|
136
|
+
getAllLayers(): Layer[];
|
|
137
|
+
/**
|
|
138
|
+
* Creates a layer and appends it to the stacking order (as the frontmost entry), unless the
|
|
139
|
+
* order already holds its id, which then keeps its position
|
|
140
|
+
*/
|
|
141
|
+
createLayer(layer: Layer): void;
|
|
142
|
+
/** Updates a layer (an `order` given here replaces the order of its items) */
|
|
143
|
+
updateLayer(id: string, updates: Partial<Layer>): void;
|
|
144
|
+
/**
|
|
145
|
+
* Deletes a layer together with the features and groups it lists, and takes its id out of
|
|
146
|
+
* the stacking order (the other entries stay)
|
|
147
|
+
*/
|
|
148
|
+
deleteLayer(id: string): void;
|
|
149
|
+
/** Gets the stacking order, layers and entries of the application (the end is the front) */
|
|
150
|
+
getLayerOrder(): readonly string[];
|
|
151
|
+
/**
|
|
152
|
+
* Replaces the stacking order (the end is the front)
|
|
153
|
+
*
|
|
154
|
+
* The order is part of the document and may hold entries that are not layers (see the
|
|
155
|
+
* stacking order in the description of this interface), so an implementation keeps every
|
|
156
|
+
* non-empty string it is given, in the given order, and folds a repeated one to its first
|
|
157
|
+
* position.
|
|
158
|
+
*/
|
|
159
|
+
setLayerOrder(order: string[]): void;
|
|
160
|
+
/** Changes the order of an item (a feature or a group) within a layer */
|
|
161
|
+
reorderInLayer(itemId: string, layerId: string, newIndex: number): void;
|
|
162
|
+
/** Changes the order of a feature within a group */
|
|
163
|
+
reorderInGroup(featureId: string, groupId: string, newIndex: number): void;
|
|
164
|
+
/** Returns the group with this ID, or undefined */
|
|
165
|
+
getGroup(id: string): Group | undefined;
|
|
166
|
+
/** Every group, in no particular order */
|
|
167
|
+
getAllGroups(): Group[];
|
|
168
|
+
/**
|
|
169
|
+
* Creates a group and sets `groupId` on its existing members, which leave the order of
|
|
170
|
+
* their layer. A group that no layer lists by the end of the operation takes the place of
|
|
171
|
+
* its first member.
|
|
172
|
+
*/
|
|
173
|
+
createGroup(group: Group): void;
|
|
174
|
+
/** Updates a group (a `featureIds` given here replaces its members and their order) */
|
|
175
|
+
updateGroup(id: string, updates: Partial<Group>): void;
|
|
176
|
+
/**
|
|
177
|
+
* Deletes a group and clears `groupId` on its members, which take the group's place in
|
|
178
|
+
* the order of its layer.
|
|
179
|
+
*/
|
|
180
|
+
deleteGroup(id: string): void;
|
|
181
|
+
/** Stores a file (a duplicate ID throws) */
|
|
182
|
+
createFile(file: FileData): void;
|
|
183
|
+
/** Returns the file with this ID, or undefined */
|
|
184
|
+
getFile(id: string): FileData | undefined;
|
|
185
|
+
/** Every file */
|
|
186
|
+
getAllFiles(): FileData[];
|
|
187
|
+
/** Deletes a file (the features that refer to it are not changed) */
|
|
188
|
+
deleteFile(id: string): void;
|
|
189
|
+
/** Returns the metadata of the document */
|
|
190
|
+
getMetadata(): Metadata;
|
|
191
|
+
/** Sets the metadata (merging; a key set to undefined is removed) */
|
|
192
|
+
setMetadata(metadata: Partial<Metadata>): void;
|
|
193
|
+
/**
|
|
194
|
+
* Subscribes to changes
|
|
195
|
+
*
|
|
196
|
+
* @returns The unsubscribe function
|
|
197
|
+
*/
|
|
198
|
+
subscribe(listener: (changes: StateChanges) => void): () => void;
|
|
199
|
+
/**
|
|
200
|
+
* Runs fn and notifies its changes together as a single StateChanges
|
|
201
|
+
*
|
|
202
|
+
* Not atomic: when fn throws, the writes made before the throw stay applied, they are
|
|
203
|
+
* notified, and the exception is rethrown.
|
|
204
|
+
*
|
|
205
|
+
* @param source The source of the operation (for history management in a plugin and for
|
|
206
|
+
* synchronization in an external store)
|
|
207
|
+
*/
|
|
208
|
+
transact<T>(fn: () => T, source?: UpdateSource): T;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* The local state of this instance: never part of the document, owned by core
|
|
212
|
+
*
|
|
213
|
+
* Core keeps it for every draw instance, whatever {@link DocumentStore} holds the document.
|
|
214
|
+
* The host reads it through {@link StoreView} and changes it through the methods of the draw
|
|
215
|
+
* instance (`setMode`, `setSelection`, `setReadOnly` and so on).
|
|
216
|
+
*/
|
|
217
|
+
export interface UiState {
|
|
218
|
+
/** Returns the current selection */
|
|
219
|
+
getSelection(): Selection;
|
|
220
|
+
/** Replaces the selection (`null` and an empty array clear it) */
|
|
221
|
+
setSelection(type: SelectionType | null, ids: string[]): void;
|
|
222
|
+
/** The IDs of the features being edited (their vertex handles are shown) */
|
|
223
|
+
getEditingIds(): readonly string[];
|
|
224
|
+
/** Marks features as being edited */
|
|
225
|
+
startEditing(ids: string[]): void;
|
|
226
|
+
/** Ends the editing of features */
|
|
227
|
+
endEditing(ids: string[]): void;
|
|
228
|
+
/** The geometry being drawn, or null when nothing is being drawn */
|
|
229
|
+
getTentative(): TentativeState | null;
|
|
230
|
+
/** Sets or clears the geometry being drawn */
|
|
231
|
+
setTentative(state: TentativeState | null): void;
|
|
232
|
+
/** The box selection in progress, or null */
|
|
233
|
+
getBoxSelection(): BoxSelection | null;
|
|
234
|
+
/** Sets or clears the box selection in progress */
|
|
235
|
+
setBoxSelection(box: BoxSelection | null): void;
|
|
236
|
+
/** The drag in progress, or null */
|
|
237
|
+
getDragState(): DragState | null;
|
|
238
|
+
/** Sets or clears the drag in progress */
|
|
239
|
+
setDragState(state: DragState | null): void;
|
|
240
|
+
/** The selected vertices, or null when no vertex is selected */
|
|
241
|
+
getSelectedVertices(): VertexSelection | null;
|
|
242
|
+
/** Sets or clears the selected vertices */
|
|
243
|
+
setSelectedVertices(selection: VertexSelection | null): void;
|
|
244
|
+
/**
|
|
245
|
+
* Gets the vertices that follow along when shared vertices move together (null except
|
|
246
|
+
* during a drag). Unlike the selected vertices they span several features.
|
|
247
|
+
*/
|
|
248
|
+
getFollowedVertices(): VertexSelection[] | null;
|
|
249
|
+
/** Sets the vertices that follow along (back to null when the drag ends) */
|
|
250
|
+
setFollowedVertices(selections: VertexSelection[] | null): void;
|
|
251
|
+
/** The current mode */
|
|
252
|
+
getMode(): Mode;
|
|
253
|
+
/** Records the current mode (the mode manager calls it; the host calls `draw.setMode`) */
|
|
254
|
+
setMode(mode: Mode): void;
|
|
255
|
+
/**
|
|
256
|
+
* Read-only. While it is on, every write to the document through the Store is refused
|
|
257
|
+
* (the write methods return false). It does not stop the other local state.
|
|
258
|
+
*/
|
|
259
|
+
isReadOnly(): boolean;
|
|
260
|
+
/** Turns read-only on or off */
|
|
261
|
+
setReadOnly(value: boolean): void;
|
|
262
|
+
/**
|
|
263
|
+
* The interaction lock, orthogonal to read-only. It does not gate any write; it only stops
|
|
264
|
+
* the start of the editing interactions that begin from user input (drag move / resize /
|
|
265
|
+
* rotate / vertex editing / the delete shortcut / starting a drawing mode).
|
|
266
|
+
*/
|
|
267
|
+
isInteractionLocked(): boolean;
|
|
268
|
+
/** Turns the interaction lock on or off */
|
|
269
|
+
setInteractionLock(value: boolean): void;
|
|
270
|
+
/** Local visibility: the ids (feature / group / layer) hidden on this client only */
|
|
271
|
+
isLocallyHidden(id: string): boolean;
|
|
272
|
+
/** Every ID hidden on this client only */
|
|
273
|
+
getLocallyHidden(): ReadonlySet<string>;
|
|
274
|
+
/** Hides or shows a feature, a group or a layer on this client only */
|
|
275
|
+
setLocallyHidden(id: string, hidden: boolean): void;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* The view of the Store a host gets from `draw.getStore()`: reads, subscription and
|
|
279
|
+
* transactions
|
|
280
|
+
*
|
|
281
|
+
* Writes go through the methods of the draw instance (or, in a plugin, the PluginContext),
|
|
282
|
+
* so a host cannot reach past the checks those methods make. `transact` groups the writes
|
|
283
|
+
* made through them into one notification.
|
|
284
|
+
*
|
|
285
|
+
* @example
|
|
286
|
+
* ```ts
|
|
287
|
+
* const store = draw.getStore();
|
|
288
|
+
* const unsubscribe = store.subscribe((changes) => {
|
|
289
|
+
* if (changes.features) saveLater(store.getAllFeatures());
|
|
290
|
+
* });
|
|
291
|
+
* // Two writes, one notification
|
|
292
|
+
* store.transact(() => {
|
|
293
|
+
* draw.updateFeature(a, { visible: false });
|
|
294
|
+
* draw.updateFeature(b, { visible: false });
|
|
295
|
+
* });
|
|
296
|
+
* ```
|
|
297
|
+
*/
|
|
298
|
+
export interface StoreView {
|
|
299
|
+
/** Returns the feature with this ID, or undefined */
|
|
300
|
+
getFeature(id: string): Feature | undefined;
|
|
301
|
+
/** Every feature, in no particular order */
|
|
302
|
+
getAllFeatures(): Feature[];
|
|
303
|
+
/** The visible features in drawing order, back to front */
|
|
304
|
+
getOrderedFeatures(): Feature[];
|
|
305
|
+
/** Returns the layer with this ID, or undefined */
|
|
306
|
+
getLayer(id: string): Layer | undefined;
|
|
307
|
+
/** Every layer, in no particular order */
|
|
308
|
+
getAllLayers(): Layer[];
|
|
309
|
+
/** The stacking order of the layers, back to front */
|
|
310
|
+
getLayerOrder(): readonly string[];
|
|
311
|
+
/** Returns the group with this ID, or undefined */
|
|
312
|
+
getGroup(id: string): Group | undefined;
|
|
313
|
+
/** Every group, in no particular order */
|
|
314
|
+
getAllGroups(): Group[];
|
|
315
|
+
/** Returns the file with this ID, or undefined */
|
|
316
|
+
getFile(id: string): FileData | undefined;
|
|
317
|
+
/** Every file */
|
|
318
|
+
getAllFiles(): FileData[];
|
|
319
|
+
/** Returns the metadata of the document */
|
|
320
|
+
getMetadata(): Metadata;
|
|
321
|
+
/** Returns the current selection */
|
|
322
|
+
getSelection(): Selection;
|
|
323
|
+
/** The IDs of the features being edited (their vertex handles are shown) */
|
|
324
|
+
getEditingIds(): readonly string[];
|
|
325
|
+
/** The geometry being drawn, or null when nothing is being drawn */
|
|
326
|
+
getTentative(): TentativeState | null;
|
|
327
|
+
/** The box selection in progress, or null */
|
|
328
|
+
getBoxSelection(): BoxSelection | null;
|
|
329
|
+
/** The drag in progress, or null */
|
|
330
|
+
getDragState(): DragState | null;
|
|
331
|
+
/** The selected vertices, or null when no vertex is selected */
|
|
332
|
+
getSelectedVertices(): VertexSelection | null;
|
|
333
|
+
/**
|
|
334
|
+
* The vertices that follow along when shared vertices move together (null except during a
|
|
335
|
+
* drag)
|
|
336
|
+
*/
|
|
337
|
+
getFollowedVertices(): VertexSelection[] | null;
|
|
338
|
+
/** The current mode */
|
|
339
|
+
getMode(): Mode;
|
|
340
|
+
/** Whether the Store is read-only */
|
|
341
|
+
isReadOnly(): boolean;
|
|
342
|
+
/** Whether the interaction lock is on */
|
|
343
|
+
isInteractionLocked(): boolean;
|
|
344
|
+
/** Whether this feature, group or layer is hidden on this client only */
|
|
345
|
+
isLocallyHidden(id: string): boolean;
|
|
346
|
+
/** Every ID hidden on this client only */
|
|
347
|
+
getLocallyHidden(): ReadonlySet<string>;
|
|
348
|
+
/**
|
|
349
|
+
* Subscribes to the changes of the document and of the local state
|
|
350
|
+
*
|
|
351
|
+
* One notification per outermost transaction (or per write outside one). A listener
|
|
352
|
+
* that throws is reported with console.error and does not stop the listeners after it.
|
|
353
|
+
*
|
|
354
|
+
* @returns The unsubscribe function
|
|
355
|
+
*/
|
|
356
|
+
subscribe(listener: (changes: StateChanges) => void): () => void;
|
|
357
|
+
/**
|
|
358
|
+
* Runs fn and notifies every change it makes as a single StateChanges
|
|
359
|
+
*
|
|
360
|
+
* Not atomic: when fn throws, the writes made before the throw stay applied, they are
|
|
361
|
+
* notified, and the exception is rethrown.
|
|
362
|
+
*
|
|
363
|
+
* @param source The source carried by the notification ('local' when omitted; the source
|
|
364
|
+
* of the outermost transaction applies)
|
|
365
|
+
*/
|
|
366
|
+
transact<T>(fn: () => T, source?: UpdateSource): T;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* The Store core works with: the document and the local state behind one gate
|
|
370
|
+
*
|
|
371
|
+
* Every document write returns true when it was applied and false when it was refused
|
|
372
|
+
* because the Store is read-only (it never throws for that). An argument that cannot apply
|
|
373
|
+
* throws, as in DocumentStore. When a feature, group or layer is deleted (by a write here or
|
|
374
|
+
* by a change applied to the document from elsewhere), its id leaves the selection, the
|
|
375
|
+
* features being edited and the locally hidden set in the same notification. A change that
|
|
376
|
+
* hides a selected item (its visible flag, the one of its group or layer, or local hiding)
|
|
377
|
+
* takes it out of the selection, and the vertex selection ends when its feature is deleted
|
|
378
|
+
* or its coordinates change other than by a drag. One notification carries the changes of the
|
|
379
|
+
* document and of the local state of one transaction.
|
|
380
|
+
*
|
|
381
|
+
* A plugin reaches it with `getStore()` of {@link PluginContext}; the host gets the read-only
|
|
382
|
+
* {@link StoreView}. The write methods behave as those of {@link DocumentStore}.
|
|
383
|
+
*/
|
|
384
|
+
export interface Store extends StoreView, UiState {
|
|
385
|
+
/** Creates a feature (see {@link DocumentStore.createFeature}) */
|
|
386
|
+
createFeature(feature: Feature): boolean;
|
|
387
|
+
/** Updates a feature (see {@link DocumentStore.updateFeature}) */
|
|
388
|
+
updateFeature(id: string, updates: Partial<Feature>, options?: UpdateFeatureOptions): boolean;
|
|
389
|
+
/** Discards uncommitted intermediate states (see DocumentStore) */
|
|
390
|
+
abortIntermediateUpdates?(ids: string[]): void;
|
|
391
|
+
/** Deletes a feature (see {@link DocumentStore.deleteFeature}) */
|
|
392
|
+
deleteFeature(id: string): boolean;
|
|
393
|
+
/** Creates a layer (see {@link DocumentStore.createLayer}) */
|
|
394
|
+
createLayer(layer: Layer): boolean;
|
|
395
|
+
/** Updates a layer (see {@link DocumentStore.updateLayer}) */
|
|
396
|
+
updateLayer(id: string, updates: Partial<Layer>): boolean;
|
|
397
|
+
/** Deletes a layer with its content (see {@link DocumentStore.deleteLayer}) */
|
|
398
|
+
deleteLayer(id: string): boolean;
|
|
399
|
+
/** Sets the stacking order of the layers (see {@link DocumentStore.setLayerOrder}) */
|
|
400
|
+
setLayerOrder(order: string[]): boolean;
|
|
401
|
+
/** Moves an item within a layer (see {@link DocumentStore.reorderInLayer}) */
|
|
402
|
+
reorderInLayer(itemId: string, layerId: string, newIndex: number): boolean;
|
|
403
|
+
/** Moves a feature within a group (see {@link DocumentStore.reorderInGroup}) */
|
|
404
|
+
reorderInGroup(featureId: string, groupId: string, newIndex: number): boolean;
|
|
405
|
+
/** Creates a group (see {@link DocumentStore.createGroup}) */
|
|
406
|
+
createGroup(group: Group): boolean;
|
|
407
|
+
/** Updates a group (see {@link DocumentStore.updateGroup}) */
|
|
408
|
+
updateGroup(id: string, updates: Partial<Group>): boolean;
|
|
409
|
+
/** Deletes a group, keeping its members (see {@link DocumentStore.deleteGroup}) */
|
|
410
|
+
deleteGroup(id: string): boolean;
|
|
411
|
+
/** Stores a file (see {@link DocumentStore.createFile}) */
|
|
412
|
+
createFile(file: FileData): boolean;
|
|
413
|
+
/** Deletes a file (see {@link DocumentStore.deleteFile}) */
|
|
414
|
+
deleteFile(id: string): boolean;
|
|
415
|
+
/** Sets the metadata, merging (see {@link DocumentStore.setMetadata}) */
|
|
416
|
+
setMetadata(metadata: Partial<Metadata>): boolean;
|
|
417
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The data model of the Store
|
|
3
|
+
*
|
|
4
|
+
* The types are defined in shared/types/model.ts, below every layer, so that shared/ and
|
|
5
|
+
* display/ can use them without depending on store/. This file re-exports them for the code
|
|
6
|
+
* that already imports them from here.
|
|
7
|
+
*/
|
|
8
|
+
export type * from '../shared/types/model.js';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derivation of the writable layer
|
|
3
|
+
*
|
|
4
|
+
* Determines the layer that user drawing may write new features into. A pure function with
|
|
5
|
+
* the same standing as lock.ts (isFeatureLocked) and local-visibility.ts (isLocallyHidden):
|
|
6
|
+
* it only reads the Store and changes nothing.
|
|
7
|
+
*
|
|
8
|
+
* A layer can be written when it exists, is not locked, is visible (shared visible) and is
|
|
9
|
+
* not locally hidden on this client. Drawing into a locked layer would bypass the lock, and
|
|
10
|
+
* drawing into a hidden layer (shared or local) would create a feature the user cannot see.
|
|
11
|
+
*
|
|
12
|
+
* This is a rule for user drawing only. It is not a write gate: the Store's write methods and
|
|
13
|
+
* the public API still accept any existing layer (read-only is the only write gate).
|
|
14
|
+
*/
|
|
15
|
+
import type { LocalHiddenStore } from './local-visibility.js';
|
|
16
|
+
import type { Layer } from './types.js';
|
|
17
|
+
/** The minimal interface that isWritableLayer requires. */
|
|
18
|
+
export type WritableLayerCheckStore = LocalHiddenStore;
|
|
19
|
+
/** The minimal interface that resolveWritableLayerId requires. */
|
|
20
|
+
export interface WritableLayerStore extends WritableLayerCheckStore {
|
|
21
|
+
getLayer(id: string): Layer | undefined;
|
|
22
|
+
getAllLayers(): Layer[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Whether user drawing may write new features into the layer
|
|
26
|
+
*/
|
|
27
|
+
export declare function isWritableLayer(layer: Layer | undefined, store: WritableLayerCheckStore): layer is Layer;
|
|
28
|
+
/**
|
|
29
|
+
* Resolves the layer that user drawing writes new features into
|
|
30
|
+
*
|
|
31
|
+
* The preferred layer (the active layer) when it can be written, otherwise the first layer
|
|
32
|
+
* that can be written, otherwise an empty string. It never changes the active layer, so the
|
|
33
|
+
* active layer comes back once it is unlocked or shown again.
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveWritableLayerId(store: WritableLayerStore, preferredId: string): string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// SPDX-FileCopyrightText: 2026 SAKAIDA Atsushi
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
/**
|
|
4
|
+
* Whether user drawing may write new features into the layer
|
|
5
|
+
*/
|
|
6
|
+
export function isWritableLayer(layer, store) {
|
|
7
|
+
return layer !== undefined && !layer.locked && layer.visible && !store.isLocallyHidden(layer.id);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the layer that user drawing writes new features into
|
|
11
|
+
*
|
|
12
|
+
* The preferred layer (the active layer) when it can be written, otherwise the first layer
|
|
13
|
+
* that can be written, otherwise an empty string. It never changes the active layer, so the
|
|
14
|
+
* active layer comes back once it is unlocked or shown again.
|
|
15
|
+
*/
|
|
16
|
+
export function resolveWritableLayerId(store, preferredId) {
|
|
17
|
+
if (isWritableLayer(store.getLayer(preferredId), store))
|
|
18
|
+
return preferredId;
|
|
19
|
+
return store.getAllLayers().find((layer) => isWritableLayer(layer, store))?.id ?? '';
|
|
20
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BufferCache
|
|
3
|
+
*
|
|
4
|
+
* A class for caching and reusing WebGL VAOs and buffers.
|
|
5
|
+
* It improves performance by eliminating per-frame VAO/buffer creation and deletion.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Cached geometry
|
|
9
|
+
*/
|
|
10
|
+
export interface CachedGeometry {
|
|
11
|
+
vao: WebGLVertexArrayObject;
|
|
12
|
+
buffer: WebGLBuffer;
|
|
13
|
+
vertexCount: number;
|
|
14
|
+
drawMode: number;
|
|
15
|
+
/** Hash of the geometry (for detecting coordinate changes) */
|
|
16
|
+
geometryHash: string;
|
|
17
|
+
/** Time of last use (for LRU) */
|
|
18
|
+
lastUsed: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generates a hash from an array of coordinates
|
|
22
|
+
* Uses a fast hash function
|
|
23
|
+
*/
|
|
24
|
+
export declare function hashCoordinates(coords: Array<[number, number]>): string;
|
|
25
|
+
/**
|
|
26
|
+
* Generates a hash from a two-dimensional array of coordinates (the rings of a Polygon)
|
|
27
|
+
*/
|
|
28
|
+
export declare function hashRings(rings: Array<Array<[number, number]>>): string;
|