@honua/react 0.0.20-alpha.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/LICENSE +201 -0
- package/README.md +9 -0
- package/contract/analytics-sources.d.ts +149 -0
- package/contract/analytics-sources.d.ts.map +1 -0
- package/contract/analytics-sources.js +235 -0
- package/contract/edit-session.d.ts +203 -0
- package/contract/edit-session.d.ts.map +1 -0
- package/contract/edit-session.js +760 -0
- package/contract/edit-sketch.d.ts +91 -0
- package/contract/edit-sketch.d.ts.map +1 -0
- package/contract/edit-sketch.js +281 -0
- package/contract/index.d.ts +61 -0
- package/contract/index.d.ts.map +1 -0
- package/contract/index.js +51 -0
- package/contract/jobs.d.ts +149 -0
- package/contract/jobs.d.ts.map +1 -0
- package/contract/jobs.js +40 -0
- package/contract/source.d.ts +423 -0
- package/contract/source.d.ts.map +1 -0
- package/contract/source.js +3802 -0
- package/contract/spatial-aggregation.d.ts +336 -0
- package/contract/spatial-aggregation.d.ts.map +1 -0
- package/contract/spatial-aggregation.js +298 -0
- package/contract/temporal.d.ts +455 -0
- package/contract/temporal.d.ts.map +1 -0
- package/contract/temporal.js +146 -0
- package/contract/tiles.d.ts +370 -0
- package/contract/tiles.d.ts.map +1 -0
- package/contract/tiles.js +519 -0
- package/contract/types.d.ts +665 -0
- package/contract/types.d.ts.map +1 -0
- package/contract/types.js +175 -0
- package/contract/widget-source.d.ts +205 -0
- package/contract/widget-source.d.ts.map +1 -0
- package/contract/widget-source.js +1473 -0
- package/control-plane/client.d.ts +95 -0
- package/control-plane/client.d.ts.map +1 -0
- package/control-plane/client.js +374 -0
- package/control-plane/index.d.ts +18 -0
- package/control-plane/index.d.ts.map +1 -0
- package/control-plane/index.js +14 -0
- package/control-plane/types.d.ts +233 -0
- package/control-plane/types.d.ts.map +1 -0
- package/control-plane/types.js +7 -0
- package/core/batch.d.ts +37 -0
- package/core/batch.d.ts.map +1 -0
- package/core/batch.js +79 -0
- package/core/cache-state.d.ts +79 -0
- package/core/cache-state.d.ts.map +1 -0
- package/core/cache-state.js +87 -0
- package/core/client.d.ts +577 -0
- package/core/client.d.ts.map +1 -0
- package/core/client.js +1664 -0
- package/core/compatibility.d.ts +18 -0
- package/core/compatibility.d.ts.map +1 -0
- package/core/compatibility.js +245 -0
- package/core/errors.d.ts +107 -0
- package/core/errors.d.ts.map +1 -0
- package/core/errors.js +156 -0
- package/core/esri-geojson.d.ts +66 -0
- package/core/esri-geojson.d.ts.map +1 -0
- package/core/esri-geojson.js +363 -0
- package/core/geoservices.d.ts +34 -0
- package/core/geoservices.d.ts.map +1 -0
- package/core/geoservices.js +434 -0
- package/core/grpc-adapter.d.ts +23 -0
- package/core/grpc-adapter.d.ts.map +1 -0
- package/core/grpc-adapter.js +688 -0
- package/core/odata.d.ts +347 -0
- package/core/odata.d.ts.map +1 -0
- package/core/odata.js +913 -0
- package/core/ogc-conformance.d.ts +35 -0
- package/core/ogc-conformance.d.ts.map +1 -0
- package/core/ogc-conformance.js +134 -0
- package/core/ogc-features.d.ts +23 -0
- package/core/ogc-features.d.ts.map +1 -0
- package/core/ogc-features.js +114 -0
- package/core/ogc-maps.d.ts +49 -0
- package/core/ogc-maps.d.ts.map +1 -0
- package/core/ogc-maps.js +126 -0
- package/core/ogc-processes.d.ts +118 -0
- package/core/ogc-processes.d.ts.map +1 -0
- package/core/ogc-processes.js +423 -0
- package/core/ogc-records.d.ts +75 -0
- package/core/ogc-records.d.ts.map +1 -0
- package/core/ogc-records.js +251 -0
- package/core/ogc-tiles.d.ts +125 -0
- package/core/ogc-tiles.d.ts.map +1 -0
- package/core/ogc-tiles.js +183 -0
- package/core/path-utils.d.ts +69 -0
- package/core/path-utils.d.ts.map +1 -0
- package/core/path-utils.js +123 -0
- package/core/pbf-decoder.d.ts +39 -0
- package/core/pbf-decoder.d.ts.map +1 -0
- package/core/pbf-decoder.js +702 -0
- package/core/process-runner.d.ts +104 -0
- package/core/process-runner.d.ts.map +1 -0
- package/core/process-runner.js +315 -0
- package/core/protocol-transport.d.ts +76 -0
- package/core/protocol-transport.d.ts.map +1 -0
- package/core/protocol-transport.js +15 -0
- package/core/query-builder.d.ts +261 -0
- package/core/query-builder.d.ts.map +1 -0
- package/core/query-builder.js +538 -0
- package/core/request-pipeline.d.ts +88 -0
- package/core/request-pipeline.d.ts.map +1 -0
- package/core/request-pipeline.js +273 -0
- package/core/spatial-filter.d.ts +93 -0
- package/core/spatial-filter.d.ts.map +1 -0
- package/core/spatial-filter.js +153 -0
- package/core/stac.d.ts +55 -0
- package/core/stac.d.ts.map +1 -0
- package/core/stac.js +229 -0
- package/core/surfaces.d.ts +527 -0
- package/core/surfaces.d.ts.map +1 -0
- package/core/surfaces.js +1917 -0
- package/core/terrain-elevation.d.ts +114 -0
- package/core/terrain-elevation.d.ts.map +1 -0
- package/core/terrain-elevation.js +150 -0
- package/core/types.d.ts +1355 -0
- package/core/types.d.ts.map +1 -0
- package/core/types.js +13 -0
- package/core/wfs-capabilities.d.ts +143 -0
- package/core/wfs-capabilities.d.ts.map +1 -0
- package/core/wfs-capabilities.js +478 -0
- package/core/wfs-filter.d.ts +118 -0
- package/core/wfs-filter.d.ts.map +1 -0
- package/core/wfs-filter.js +634 -0
- package/core/wfs.d.ts +219 -0
- package/core/wfs.d.ts.map +1 -0
- package/core/wfs.js +406 -0
- package/core/wire-shared.d.ts +32 -0
- package/core/wire-shared.d.ts.map +1 -0
- package/core/wire-shared.js +76 -0
- package/core/wms-axis.d.ts +36 -0
- package/core/wms-axis.d.ts.map +1 -0
- package/core/wms-axis.js +73 -0
- package/core/wms-capabilities.d.ts +110 -0
- package/core/wms-capabilities.d.ts.map +1 -0
- package/core/wms-capabilities.js +559 -0
- package/core/wms-types.d.ts +128 -0
- package/core/wms-types.d.ts.map +1 -0
- package/core/wms-types.js +32 -0
- package/core/wms.d.ts +144 -0
- package/core/wms.d.ts.map +1 -0
- package/core/wms.js +338 -0
- package/core/wmts-capabilities.d.ts +82 -0
- package/core/wmts-capabilities.d.ts.map +1 -0
- package/core/wmts-capabilities.js +402 -0
- package/core/wmts.d.ts +103 -0
- package/core/wmts.d.ts.map +1 -0
- package/core/wmts.js +332 -0
- package/core/xml-text.d.ts +20 -0
- package/core/xml-text.d.ts.map +1 -0
- package/core/xml-text.js +85 -0
- package/esri-compat/basemap-gallery.d.ts +38 -0
- package/esri-compat/basemap-gallery.d.ts.map +1 -0
- package/esri-compat/basemap-gallery.js +159 -0
- package/esri-compat/basemap-layer-list.d.ts +35 -0
- package/esri-compat/basemap-layer-list.d.ts.map +1 -0
- package/esri-compat/basemap-layer-list.js +139 -0
- package/esri-compat/basemap.d.ts +32 -0
- package/esri-compat/basemap.d.ts.map +1 -0
- package/esri-compat/basemap.js +84 -0
- package/esri-compat/bookmarks.d.ts +36 -0
- package/esri-compat/bookmarks.d.ts.map +1 -0
- package/esri-compat/bookmarks.js +108 -0
- package/esri-compat/class-breaks-renderer.d.ts +50 -0
- package/esri-compat/class-breaks-renderer.d.ts.map +1 -0
- package/esri-compat/class-breaks-renderer.js +164 -0
- package/esri-compat/color.d.ts +22 -0
- package/esri-compat/color.d.ts.map +1 -0
- package/esri-compat/color.js +106 -0
- package/esri-compat/controls.d.ts +174 -0
- package/esri-compat/controls.d.ts.map +1 -0
- package/esri-compat/controls.js +479 -0
- package/esri-compat/coordinate-conversion.d.ts +41 -0
- package/esri-compat/coordinate-conversion.d.ts.map +1 -0
- package/esri-compat/coordinate-conversion.js +125 -0
- package/esri-compat/directions.d.ts +45 -0
- package/esri-compat/directions.d.ts.map +1 -0
- package/esri-compat/directions.js +123 -0
- package/esri-compat/editor.d.ts +47 -0
- package/esri-compat/editor.d.ts.map +1 -0
- package/esri-compat/editor.js +170 -0
- package/esri-compat/esri-config.d.ts +16 -0
- package/esri-compat/esri-config.d.ts.map +1 -0
- package/esri-compat/esri-config.js +23 -0
- package/esri-compat/esri-request.d.ts +17 -0
- package/esri-compat/esri-request.d.ts.map +1 -0
- package/esri-compat/esri-request.js +127 -0
- package/esri-compat/event-bus.d.ts +106 -0
- package/esri-compat/event-bus.d.ts.map +1 -0
- package/esri-compat/event-bus.js +90 -0
- package/esri-compat/expand.d.ts +36 -0
- package/esri-compat/expand.d.ts.map +1 -0
- package/esri-compat/expand.js +97 -0
- package/esri-compat/extent.d.ts +43 -0
- package/esri-compat/extent.d.ts.map +1 -0
- package/esri-compat/extent.js +140 -0
- package/esri-compat/feature-filter.d.ts +55 -0
- package/esri-compat/feature-filter.d.ts.map +1 -0
- package/esri-compat/feature-filter.js +109 -0
- package/esri-compat/feature-form.d.ts +64 -0
- package/esri-compat/feature-form.d.ts.map +1 -0
- package/esri-compat/feature-form.js +137 -0
- package/esri-compat/feature-layer.d.ts +173 -0
- package/esri-compat/feature-layer.d.ts.map +1 -0
- package/esri-compat/feature-layer.js +661 -0
- package/esri-compat/feature-set.d.ts +32 -0
- package/esri-compat/feature-set.d.ts.map +1 -0
- package/esri-compat/feature-set.js +80 -0
- package/esri-compat/feature-table.d.ts +141 -0
- package/esri-compat/feature-table.d.ts.map +1 -0
- package/esri-compat/feature-table.js +500 -0
- package/esri-compat/feature-templates.d.ts +41 -0
- package/esri-compat/feature-templates.d.ts.map +1 -0
- package/esri-compat/feature-templates.js +97 -0
- package/esri-compat/feature.d.ts +33 -0
- package/esri-compat/feature.d.ts.map +1 -0
- package/esri-compat/feature.js +83 -0
- package/esri-compat/geojson-layer.d.ts +86 -0
- package/esri-compat/geojson-layer.d.ts.map +1 -0
- package/esri-compat/geojson-layer.js +191 -0
- package/esri-compat/geometry-engine.d.ts +107 -0
- package/esri-compat/geometry-engine.d.ts.map +1 -0
- package/esri-compat/geometry-engine.js +266 -0
- package/esri-compat/graphic.d.ts +46 -0
- package/esri-compat/graphic.d.ts.map +1 -0
- package/esri-compat/graphic.js +103 -0
- package/esri-compat/graphics-layer.d.ts +49 -0
- package/esri-compat/graphics-layer.d.ts.map +1 -0
- package/esri-compat/graphics-layer.js +185 -0
- package/esri-compat/group-layer.d.ts +48 -0
- package/esri-compat/group-layer.d.ts.map +1 -0
- package/esri-compat/group-layer.js +212 -0
- package/esri-compat/identify.d.ts +71 -0
- package/esri-compat/identify.d.ts.map +1 -0
- package/esri-compat/identify.js +299 -0
- package/esri-compat/identity-manager.d.ts +31 -0
- package/esri-compat/identity-manager.d.ts.map +1 -0
- package/esri-compat/identity-manager.js +115 -0
- package/esri-compat/imagery-layer.d.ts +78 -0
- package/esri-compat/imagery-layer.d.ts.map +1 -0
- package/esri-compat/imagery-layer.js +167 -0
- package/esri-compat/label-class.d.ts +31 -0
- package/esri-compat/label-class.d.ts.map +1 -0
- package/esri-compat/label-class.js +102 -0
- package/esri-compat/layer-list.d.ts +77 -0
- package/esri-compat/layer-list.d.ts.map +1 -0
- package/esri-compat/layer-list.js +342 -0
- package/esri-compat/legend.d.ts +53 -0
- package/esri-compat/legend.d.ts.map +1 -0
- package/esri-compat/legend.js +254 -0
- package/esri-compat/map-image-layer.d.ts +162 -0
- package/esri-compat/map-image-layer.d.ts.map +1 -0
- package/esri-compat/map-image-layer.js +709 -0
- package/esri-compat/map-view.d.ts +323 -0
- package/esri-compat/map-view.d.ts.map +1 -0
- package/esri-compat/map-view.js +1175 -0
- package/esri-compat/map.d.ts +47 -0
- package/esri-compat/map.d.ts.map +1 -0
- package/esri-compat/map.js +209 -0
- package/esri-compat/measurement-2d.d.ts +61 -0
- package/esri-compat/measurement-2d.d.ts.map +1 -0
- package/esri-compat/measurement-2d.js +184 -0
- package/esri-compat/measurement.d.ts +45 -0
- package/esri-compat/measurement.d.ts.map +1 -0
- package/esri-compat/measurement.js +193 -0
- package/esri-compat/oauth-info.d.ts +35 -0
- package/esri-compat/oauth-info.d.ts.map +1 -0
- package/esri-compat/oauth-info.js +115 -0
- package/esri-compat/picture-marker-symbol.d.ts +35 -0
- package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
- package/esri-compat/picture-marker-symbol.js +126 -0
- package/esri-compat/point.d.ts +31 -0
- package/esri-compat/point.d.ts.map +1 -0
- package/esri-compat/point.js +102 -0
- package/esri-compat/polygon.d.ts +31 -0
- package/esri-compat/polygon.d.ts.map +1 -0
- package/esri-compat/polygon.js +107 -0
- package/esri-compat/polyline.d.ts +31 -0
- package/esri-compat/polyline.d.ts.map +1 -0
- package/esri-compat/polyline.js +107 -0
- package/esri-compat/popup-template.d.ts +55 -0
- package/esri-compat/popup-template.d.ts.map +1 -0
- package/esri-compat/popup-template.js +128 -0
- package/esri-compat/popup.d.ts +54 -0
- package/esri-compat/popup.d.ts.map +1 -0
- package/esri-compat/popup.js +312 -0
- package/esri-compat/print.d.ts +47 -0
- package/esri-compat/print.d.ts.map +1 -0
- package/esri-compat/print.js +105 -0
- package/esri-compat/query.d.ts +58 -0
- package/esri-compat/query.d.ts.map +1 -0
- package/esri-compat/query.js +128 -0
- package/esri-compat/reactive-utils.d.ts +24 -0
- package/esri-compat/reactive-utils.d.ts.map +1 -0
- package/esri-compat/reactive-utils.js +193 -0
- package/esri-compat/request.d.ts +41 -0
- package/esri-compat/request.d.ts.map +1 -0
- package/esri-compat/request.js +253 -0
- package/esri-compat/route-layer.d.ts +59 -0
- package/esri-compat/route-layer.d.ts.map +1 -0
- package/esri-compat/route-layer.js +223 -0
- package/esri-compat/route-task.d.ts +88 -0
- package/esri-compat/route-task.d.ts.map +1 -0
- package/esri-compat/route-task.js +225 -0
- package/esri-compat/scene-view.d.ts +41 -0
- package/esri-compat/scene-view.d.ts.map +1 -0
- package/esri-compat/scene-view.js +68 -0
- package/esri-compat/search.d.ts +112 -0
- package/esri-compat/search.d.ts.map +1 -0
- package/esri-compat/search.js +820 -0
- package/esri-compat/simple-fill-symbol.d.ts +27 -0
- package/esri-compat/simple-fill-symbol.d.ts.map +1 -0
- package/esri-compat/simple-fill-symbol.js +85 -0
- package/esri-compat/simple-line-symbol.d.ts +27 -0
- package/esri-compat/simple-line-symbol.d.ts.map +1 -0
- package/esri-compat/simple-line-symbol.js +85 -0
- package/esri-compat/simple-marker-symbol.d.ts +29 -0
- package/esri-compat/simple-marker-symbol.d.ts.map +1 -0
- package/esri-compat/simple-marker-symbol.js +92 -0
- package/esri-compat/simple-renderer.d.ts +29 -0
- package/esri-compat/simple-renderer.d.ts.map +1 -0
- package/esri-compat/simple-renderer.js +92 -0
- package/esri-compat/sketch.d.ts +64 -0
- package/esri-compat/sketch.d.ts.map +1 -0
- package/esri-compat/sketch.js +227 -0
- package/esri-compat/spatial-reference.d.ts +31 -0
- package/esri-compat/spatial-reference.d.ts.map +1 -0
- package/esri-compat/spatial-reference.js +102 -0
- package/esri-compat/swipe.d.ts +34 -0
- package/esri-compat/swipe.d.ts.map +1 -0
- package/esri-compat/swipe.js +93 -0
- package/esri-compat/table-list.d.ts +36 -0
- package/esri-compat/table-list.d.ts.map +1 -0
- package/esri-compat/table-list.js +126 -0
- package/esri-compat/text-symbol.d.ts +37 -0
- package/esri-compat/text-symbol.d.ts.map +1 -0
- package/esri-compat/text-symbol.js +123 -0
- package/esri-compat/tile-layer.d.ts +52 -0
- package/esri-compat/tile-layer.d.ts.map +1 -0
- package/esri-compat/tile-layer.js +168 -0
- package/esri-compat/time-slider.d.ts +70 -0
- package/esri-compat/time-slider.d.ts.map +1 -0
- package/esri-compat/time-slider.js +208 -0
- package/esri-compat/track.d.ts +51 -0
- package/esri-compat/track.d.ts.map +1 -0
- package/esri-compat/track.js +174 -0
- package/esri-compat/unique-value-renderer.d.ts +41 -0
- package/esri-compat/unique-value-renderer.d.ts.map +1 -0
- package/esri-compat/unique-value-renderer.js +127 -0
- package/esri-compat/url.d.ts +13 -0
- package/esri-compat/url.d.ts.map +1 -0
- package/esri-compat/url.js +68 -0
- package/esri-compat/vector-tile-layer.d.ts +47 -0
- package/esri-compat/vector-tile-layer.d.ts.map +1 -0
- package/esri-compat/vector-tile-layer.js +130 -0
- package/esri-compat/web-map.d.ts +14 -0
- package/esri-compat/web-map.d.ts.map +1 -0
- package/esri-compat/web-map.js +24 -0
- package/esri-compat/wfs-layer.d.ts +64 -0
- package/esri-compat/wfs-layer.d.ts.map +1 -0
- package/esri-compat/wfs-layer.js +145 -0
- package/esri-compat/wms-layer.d.ts +76 -0
- package/esri-compat/wms-layer.d.ts.map +1 -0
- package/esri-compat/wms-layer.js +157 -0
- package/exploration/context.d.ts +25 -0
- package/exploration/context.d.ts.map +1 -0
- package/exploration/context.js +396 -0
- package/exploration/index.d.ts +27 -0
- package/exploration/index.d.ts.map +1 -0
- package/exploration/index.js +24 -0
- package/exploration/presets.d.ts +27 -0
- package/exploration/presets.d.ts.map +1 -0
- package/exploration/presets.js +114 -0
- package/exploration/reducer.d.ts +23 -0
- package/exploration/reducer.d.ts.map +1 -0
- package/exploration/reducer.js +332 -0
- package/exploration/selection.d.ts +25 -0
- package/exploration/selection.d.ts.map +1 -0
- package/exploration/selection.js +34 -0
- package/exploration/selectors.d.ts +56 -0
- package/exploration/selectors.d.ts.map +1 -0
- package/exploration/selectors.js +110 -0
- package/exploration/types.d.ts +294 -0
- package/exploration/types.d.ts.map +1 -0
- package/exploration/types.js +33 -0
- package/expr/expression.d.ts +457 -0
- package/expr/expression.d.ts.map +1 -0
- package/expr/expression.js +663 -0
- package/expr/index.d.ts +32 -0
- package/expr/index.d.ts.map +1 -0
- package/expr/index.js +30 -0
- package/gen/honua/v1/feature_service_pb.d.ts +918 -0
- package/gen/honua/v1/feature_service_pb.d.ts.map +1 -0
- package/gen/honua/v1/feature_service_pb.js +375 -0
- package/generated-app/errors.d.ts +41 -0
- package/generated-app/errors.d.ts.map +1 -0
- package/generated-app/errors.js +41 -0
- package/generated-app/index.d.ts +17 -0
- package/generated-app/index.d.ts.map +1 -0
- package/generated-app/index.js +12 -0
- package/generated-app/manifest.d.ts +183 -0
- package/generated-app/manifest.d.ts.map +1 -0
- package/generated-app/manifest.js +14 -0
- package/generated-app/projection.d.ts +44 -0
- package/generated-app/projection.d.ts.map +1 -0
- package/generated-app/projection.js +234 -0
- package/generated-app/runtime.d.ts +215 -0
- package/generated-app/runtime.d.ts.map +1 -0
- package/generated-app/runtime.js +1196 -0
- package/interactions/detail-model.d.ts +54 -0
- package/interactions/detail-model.d.ts.map +1 -0
- package/interactions/detail-model.js +105 -0
- package/interactions/exploration-bindings.d.ts +120 -0
- package/interactions/exploration-bindings.d.ts.map +1 -0
- package/interactions/exploration-bindings.js +218 -0
- package/interactions/feature-state.d.ts +144 -0
- package/interactions/feature-state.d.ts.map +1 -0
- package/interactions/feature-state.js +169 -0
- package/interactions/hit-test.d.ts +112 -0
- package/interactions/hit-test.d.ts.map +1 -0
- package/interactions/hit-test.js +291 -0
- package/interactions/index.d.ts +31 -0
- package/interactions/index.d.ts.map +1 -0
- package/interactions/index.js +24 -0
- package/interactions/share-state.d.ts +36 -0
- package/interactions/share-state.d.ts.map +1 -0
- package/interactions/share-state.js +123 -0
- package/map/feature-service-adapter.d.ts +138 -0
- package/map/feature-service-adapter.d.ts.map +1 -0
- package/map/feature-service-adapter.js +279 -0
- package/map/honua-map.d.ts +203 -0
- package/map/honua-map.d.ts.map +1 -0
- package/map/honua-map.js +347 -0
- package/map/index.d.ts +27 -0
- package/map/index.d.ts.map +1 -0
- package/map/index.js +22 -0
- package/map/maplibre-target.d.ts +103 -0
- package/map/maplibre-target.d.ts.map +1 -0
- package/map/maplibre-target.js +164 -0
- package/map/webmap-maplibre.d.ts +60 -0
- package/map/webmap-maplibre.d.ts.map +1 -0
- package/map/webmap-maplibre.js +212 -0
- package/package.json +37 -0
- package/react/context.d.ts +32 -0
- package/react/context.d.ts.map +1 -0
- package/react/context.js +19 -0
- package/react/honua-layer.d.ts +35 -0
- package/react/honua-layer.d.ts.map +1 -0
- package/react/honua-layer.js +47 -0
- package/react/honua-map.d.ts +83 -0
- package/react/honua-map.d.ts.map +1 -0
- package/react/honua-map.js +109 -0
- package/react/honua-popup.d.ts +26 -0
- package/react/honua-popup.d.ts.map +1 -0
- package/react/honua-popup.js +34 -0
- package/react/hooks.d.ts +127 -0
- package/react/hooks.d.ts.map +1 -0
- package/react/hooks.js +206 -0
- package/react/index.d.ts +42 -0
- package/react/index.d.ts.map +1 -0
- package/react/index.js +34 -0
- package/react/provider.d.ts +36 -0
- package/react/provider.d.ts.map +1 -0
- package/react/provider.js +35 -0
- package/react/query-cache.d.ts +76 -0
- package/react/query-cache.d.ts.map +1 -0
- package/react/query-cache.js +188 -0
- package/runtime/diff.d.ts +31 -0
- package/runtime/diff.d.ts.map +1 -0
- package/runtime/diff.js +143 -0
- package/runtime/errors.d.ts +40 -0
- package/runtime/errors.d.ts.map +1 -0
- package/runtime/errors.js +35 -0
- package/runtime/index.d.ts +59 -0
- package/runtime/index.d.ts.map +1 -0
- package/runtime/index.js +43 -0
- package/runtime/legend.d.ts +23 -0
- package/runtime/legend.d.ts.map +1 -0
- package/runtime/legend.js +38 -0
- package/runtime/load-package.d.ts +125 -0
- package/runtime/load-package.d.ts.map +1 -0
- package/runtime/load-package.js +264 -0
- package/runtime/map-package-fetch.d.ts +107 -0
- package/runtime/map-package-fetch.d.ts.map +1 -0
- package/runtime/map-package-fetch.js +336 -0
- package/runtime/map-package-realtime.d.ts +169 -0
- package/runtime/map-package-realtime.d.ts.map +1 -0
- package/runtime/map-package-realtime.js +350 -0
- package/runtime/map-package-validation.d.ts +43 -0
- package/runtime/map-package-validation.d.ts.map +1 -0
- package/runtime/map-package-validation.js +269 -0
- package/runtime/map-package-watch.d.ts +78 -0
- package/runtime/map-package-watch.d.ts.map +1 -0
- package/runtime/map-package-watch.js +695 -0
- package/runtime/map-package.d.ts +167 -0
- package/runtime/map-package.d.ts.map +1 -0
- package/runtime/map-package.js +15 -0
- package/runtime/ogc-styles.d.ts +110 -0
- package/runtime/ogc-styles.d.ts.map +1 -0
- package/runtime/ogc-styles.js +195 -0
- package/runtime/popups.d.ts +62 -0
- package/runtime/popups.d.ts.map +1 -0
- package/runtime/popups.js +95 -0
- package/runtime/query-tiles.d.ts +217 -0
- package/runtime/query-tiles.d.ts.map +1 -0
- package/runtime/query-tiles.js +801 -0
- package/runtime/runtime.d.ts +243 -0
- package/runtime/runtime.d.ts.map +1 -0
- package/runtime/runtime.js +1147 -0
- package/runtime/source-bridge.d.ts +99 -0
- package/runtime/source-bridge.d.ts.map +1 -0
- package/runtime/source-bridge.js +401 -0
- package/runtime/style-compose.d.ts +46 -0
- package/runtime/style-compose.d.ts.map +1 -0
- package/runtime/style-compose.js +144 -0
- package/runtime/style-interactions.d.ts +141 -0
- package/runtime/style-interactions.d.ts.map +1 -0
- package/runtime/style-interactions.js +574 -0
- package/runtime/style-spec-validation.d.ts +23 -0
- package/runtime/style-spec-validation.d.ts.map +1 -0
- package/runtime/style-spec-validation.js +357 -0
- package/studio/capability-manifest.d.ts +285 -0
- package/studio/capability-manifest.d.ts.map +1 -0
- package/studio/capability-manifest.js +59 -0
- package/studio/chart-spec.d.ts +85 -0
- package/studio/chart-spec.d.ts.map +1 -0
- package/studio/chart-spec.js +106 -0
- package/studio/index.d.ts +34 -0
- package/studio/index.d.ts.map +1 -0
- package/studio/index.js +27 -0
- package/studio/provenance.d.ts +131 -0
- package/studio/provenance.d.ts.map +1 -0
- package/studio/provenance.js +39 -0
- package/studio/publish.d.ts +64 -0
- package/studio/publish.d.ts.map +1 -0
- package/studio/publish.js +13 -0
- package/studio/types.d.ts +278 -0
- package/studio/types.d.ts.map +1 -0
- package/studio/types.js +71 -0
- package/studio/validate.d.ts +45 -0
- package/studio/validate.d.ts.map +1 -0
- package/studio/validate.js +255 -0
- package/studio/validation.d.ts +112 -0
- package/studio/validation.d.ts.map +1 -0
- package/studio/validation.js +42 -0
- package/style/factory.d.ts +30 -0
- package/style/factory.d.ts.map +1 -0
- package/style/factory.js +61 -0
- package/style/index.d.ts +25 -0
- package/style/index.d.ts.map +1 -0
- package/style/index.js +24 -0
- package/style/specification.d.ts +203 -0
- package/style/specification.d.ts.map +1 -0
- package/style/specification.js +178 -0
- package/style/wms-wmts-resolvers.d.ts +38 -0
- package/style/wms-wmts-resolvers.d.ts.map +1 -0
- package/style/wms-wmts-resolvers.js +92 -0
- package/webmap/contract.d.ts +28 -0
- package/webmap/contract.d.ts.map +1 -0
- package/webmap/contract.js +130 -0
- package/webmap/convert-basemap.d.ts +17 -0
- package/webmap/convert-basemap.d.ts.map +1 -0
- package/webmap/convert-basemap.js +78 -0
- package/webmap/convert-extent.d.ts +17 -0
- package/webmap/convert-extent.d.ts.map +1 -0
- package/webmap/convert-extent.js +114 -0
- package/webmap/convert-label.d.ts +13 -0
- package/webmap/convert-label.d.ts.map +1 -0
- package/webmap/convert-label.js +125 -0
- package/webmap/convert-layer.d.ts +22 -0
- package/webmap/convert-layer.d.ts.map +1 -0
- package/webmap/convert-layer.js +181 -0
- package/webmap/convert-popup.d.ts +34 -0
- package/webmap/convert-popup.d.ts.map +1 -0
- package/webmap/convert-popup.js +68 -0
- package/webmap/convert-renderer.d.ts +17 -0
- package/webmap/convert-renderer.d.ts.map +1 -0
- package/webmap/convert-renderer.js +161 -0
- package/webmap/convert-symbol.d.ts +17 -0
- package/webmap/convert-symbol.d.ts.map +1 -0
- package/webmap/convert-symbol.js +122 -0
- package/webmap/index.d.ts +44 -0
- package/webmap/index.d.ts.map +1 -0
- package/webmap/index.js +33 -0
- package/webmap/parse.d.ts +25 -0
- package/webmap/parse.d.ts.map +1 -0
- package/webmap/parse.js +83 -0
- package/webmap/types.d.ts +264 -0
- package/webmap/types.d.ts.map +1 -0
- package/webmap/types.js +13 -0
- package/webmap/warnings.d.ts +30 -0
- package/webmap/warnings.d.ts.map +1 -0
- package/webmap/warnings.js +37 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed mirror of the server-produced `MapPackage` (honua-server #731). The
|
|
3
|
+
* package shape is `honua_map_package.v1` — the format string is the
|
|
4
|
+
* canonical version gate and the runtime loader refuses other values.
|
|
5
|
+
*
|
|
6
|
+
* Field names mirror the server's camelCase JSON; see
|
|
7
|
+
* `/honua-server/docs/developer/AI_OPERATOR_CONTRACT.md#MapPackage` for the
|
|
8
|
+
* authoritative definition. The runtime preserves unknown fields on the
|
|
9
|
+
* package through `updatePackage` so minor additive changes do not break
|
|
10
|
+
* callers.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
import type { HonuaStyleSpecification } from "../style/specification.js";
|
|
15
|
+
/** Canonical format string for the v1 MapPackage shape. */
|
|
16
|
+
export declare const HONUA_MAP_PACKAGE_FORMAT_V1: "honua_map_package.v1";
|
|
17
|
+
/** Canonical format string for the v1 MapPackage shape. */
|
|
18
|
+
export type HonuaMapPackageFormat = typeof HONUA_MAP_PACKAGE_FORMAT_V1;
|
|
19
|
+
/** Lifecycle states a MapPackage may occupy server-side. */
|
|
20
|
+
export type HonuaMapPackageStatus = "Draft" | "Composing" | "Ready" | "Failed" | "Expired";
|
|
21
|
+
/**
|
|
22
|
+
* Server `SourceBinding.protocol` enum. Uses snake_case to match the
|
|
23
|
+
* server wire format. Translated to the SDK's kebab-case `Protocol`
|
|
24
|
+
* union in `source-bridge.ts`.
|
|
25
|
+
*/
|
|
26
|
+
export type HonuaMapPackageProtocol = "geoservices_feature_service" | "geoservices_map_service" | "ogc_features" | "ogc_maps" | "ogc_tiles" | "wfs" | "wms" | "wmts" | "odata" | "vector_tile" | "raster_tile" | "workspace_artifact";
|
|
27
|
+
/** Protocol-specific endpoint information attached to a binding. */
|
|
28
|
+
export interface HonuaMapPackageLocator {
|
|
29
|
+
url?: string;
|
|
30
|
+
serviceId?: string;
|
|
31
|
+
/**
|
|
32
|
+
* The server's canonical `SourceLocator.LayerId` is `string?`
|
|
33
|
+
* (`honua-server/src/Honua.Core/Features/Geoprocessing/Domain/SourceBinding.cs`).
|
|
34
|
+
* Numeric forms (`0`) are accepted to match the SDK's historical
|
|
35
|
+
* shape; both variants are coerced to a number inside
|
|
36
|
+
* `projectSourceBindings` before hitting `createDataset`.
|
|
37
|
+
*/
|
|
38
|
+
layerId?: number | string;
|
|
39
|
+
collectionId?: string | number;
|
|
40
|
+
typeName?: string;
|
|
41
|
+
entitySet?: string;
|
|
42
|
+
/** Allow additive fields from newer server revisions. */
|
|
43
|
+
[extra: string]: unknown;
|
|
44
|
+
}
|
|
45
|
+
/** One inlined `SourceBinding` entry on a MapPackage. */
|
|
46
|
+
export interface HonuaMapPackageSourceBinding {
|
|
47
|
+
sourceId: string;
|
|
48
|
+
protocol: HonuaMapPackageProtocol;
|
|
49
|
+
locator: HonuaMapPackageLocator;
|
|
50
|
+
/** Server-side filter expression (protocol-specific). */
|
|
51
|
+
filter?: string;
|
|
52
|
+
/** Optional free-form attribution text. */
|
|
53
|
+
attribution?: string;
|
|
54
|
+
/** Out-of-band binding metadata. Preserved round-trip. */
|
|
55
|
+
metadata?: Record<string, string>;
|
|
56
|
+
}
|
|
57
|
+
/** A style reference carried inline on the package body. */
|
|
58
|
+
export interface HonuaMapPackageStyleRef {
|
|
59
|
+
styleId: string;
|
|
60
|
+
label?: string;
|
|
61
|
+
presetId?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Inline body — MapLibre `paint` / `layout` overrides keyed by layer id.
|
|
64
|
+
* Draft-1 of honua-server#731 attaches bodies inline; when the server
|
|
65
|
+
* moves to out-of-band retrieval, callers supply `resolveStyleRef` on the
|
|
66
|
+
* loader instead.
|
|
67
|
+
*/
|
|
68
|
+
body?: HonuaStyleRefBody;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Resolved `StyleRef` body. Keys name MapLibre layers; values are partial
|
|
72
|
+
* layer overrides (paint/layout/minzoom/maxzoom/filter/metadata). Token
|
|
73
|
+
* placeholders in the form `{theme:key}` are substituted during
|
|
74
|
+
* composition from the active {@link HonuaMapPackageThemeSpec}.
|
|
75
|
+
*/
|
|
76
|
+
export type HonuaStyleRefBody = Record<string, HonuaStyleRefLayerOverride>;
|
|
77
|
+
/** Partial layer specification applied on top of `mapSpec.layers[i]`. */
|
|
78
|
+
export interface HonuaStyleRefLayerOverride {
|
|
79
|
+
paint?: Record<string, unknown>;
|
|
80
|
+
layout?: Record<string, unknown>;
|
|
81
|
+
minzoom?: number;
|
|
82
|
+
maxzoom?: number;
|
|
83
|
+
filter?: unknown;
|
|
84
|
+
metadata?: Record<string, unknown>;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Resolved `ThemeSpec`. v1 uses a flat, name-keyed token map. Richer
|
|
88
|
+
* ramp / typography shapes can be added without breaking the runtime
|
|
89
|
+
* public surface.
|
|
90
|
+
*/
|
|
91
|
+
export interface HonuaMapPackageThemeSpec {
|
|
92
|
+
themeId?: string;
|
|
93
|
+
tokens?: Record<string, string | number>;
|
|
94
|
+
}
|
|
95
|
+
/** Initial camera / extent for the composed map. */
|
|
96
|
+
export interface HonuaMapPackageInitialView {
|
|
97
|
+
bbox?: readonly [number, number, number, number];
|
|
98
|
+
center?: readonly [number, number];
|
|
99
|
+
zoom?: number;
|
|
100
|
+
pitch?: number;
|
|
101
|
+
bearing?: number;
|
|
102
|
+
crs?: string;
|
|
103
|
+
}
|
|
104
|
+
/** Legend swatch rendered by the runtime. */
|
|
105
|
+
export interface HonuaMapPackageLegendEntry {
|
|
106
|
+
label: string;
|
|
107
|
+
color?: string;
|
|
108
|
+
minValue?: number;
|
|
109
|
+
maxValue?: number;
|
|
110
|
+
/** Optional symbol URL for icon-based legends. */
|
|
111
|
+
iconUrl?: string;
|
|
112
|
+
}
|
|
113
|
+
/** Popup binding surface; resolved into a click handler by the runtime. */
|
|
114
|
+
export interface HonuaMapPackagePopupBinding {
|
|
115
|
+
sourceId: string;
|
|
116
|
+
/** Name of the source field to render. Optional when `template` is set. */
|
|
117
|
+
fieldName?: string;
|
|
118
|
+
/**
|
|
119
|
+
* Optional template. Default is a list of `key: value` rows rendered in
|
|
120
|
+
* a neutral, unstyled DOM subtree — `#29` operator components replace it.
|
|
121
|
+
*/
|
|
122
|
+
template?: string;
|
|
123
|
+
/** Optional HTML title for the popup. */
|
|
124
|
+
title?: string;
|
|
125
|
+
}
|
|
126
|
+
/** Label binding surface (v1 is pass-through metadata for the runtime). */
|
|
127
|
+
export interface HonuaMapPackageLabelBinding {
|
|
128
|
+
sourceId: string;
|
|
129
|
+
fieldName: string;
|
|
130
|
+
placement?: "point" | "line" | "polygon";
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* v1 MapPackage shape — mirrors the draft server type in
|
|
134
|
+
* `/home/makani/honua-server/src/Honua.Core/Features/Geoprocessing/Domain/MapPackage.cs`.
|
|
135
|
+
* Unknown fields are preserved through `updatePackage` round-trip so
|
|
136
|
+
* minor additive changes do not break runtime consumers.
|
|
137
|
+
*/
|
|
138
|
+
export interface HonuaMapPackage {
|
|
139
|
+
mapPackageId: string;
|
|
140
|
+
format: HonuaMapPackageFormat;
|
|
141
|
+
status?: HonuaMapPackageStatus;
|
|
142
|
+
createdAt?: string;
|
|
143
|
+
updatedAt?: string;
|
|
144
|
+
/** Optional server retention / hosting expiry timestamp. */
|
|
145
|
+
expiresAt?: string;
|
|
146
|
+
templateId?: string;
|
|
147
|
+
themeId?: string;
|
|
148
|
+
/** Optional inline theme body. Overrides out-of-band theme lookup. */
|
|
149
|
+
theme?: HonuaMapPackageThemeSpec;
|
|
150
|
+
previewArtifactId?: string;
|
|
151
|
+
sourceBindings: readonly HonuaMapPackageSourceBinding[];
|
|
152
|
+
styleRefs?: readonly HonuaMapPackageStyleRef[];
|
|
153
|
+
/**
|
|
154
|
+
* MapLibre-compatible style document. The runtime composes style-ref
|
|
155
|
+
* overrides and theme tokens into this body before handing it to
|
|
156
|
+
* `maplibre-gl.Map.setStyle`.
|
|
157
|
+
*/
|
|
158
|
+
mapSpec: HonuaStyleSpecification;
|
|
159
|
+
initialView?: HonuaMapPackageInitialView;
|
|
160
|
+
legend?: readonly HonuaMapPackageLegendEntry[];
|
|
161
|
+
popupBindings?: readonly HonuaMapPackagePopupBinding[];
|
|
162
|
+
labelBindings?: readonly HonuaMapPackageLabelBinding[];
|
|
163
|
+
boundArtifacts?: readonly string[];
|
|
164
|
+
/** Preserve additive fields through round-trip without forcing a type bump. */
|
|
165
|
+
[extra: string]: unknown;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=map-package.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map-package.d.ts","sourceRoot":"","sources":["../../../src/runtime/map-package.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed mirror of the server-produced `MapPackage` (honua-server #731). The
|
|
3
|
+
* package shape is `honua_map_package.v1` — the format string is the
|
|
4
|
+
* canonical version gate and the runtime loader refuses other values.
|
|
5
|
+
*
|
|
6
|
+
* Field names mirror the server's camelCase JSON; see
|
|
7
|
+
* `/honua-server/docs/developer/AI_OPERATOR_CONTRACT.md#MapPackage` for the
|
|
8
|
+
* authoritative definition. The runtime preserves unknown fields on the
|
|
9
|
+
* package through `updatePackage` so minor additive changes do not break
|
|
10
|
+
* callers.
|
|
11
|
+
*
|
|
12
|
+
* @module
|
|
13
|
+
*/
|
|
14
|
+
/** Canonical format string for the v1 MapPackage shape. */
|
|
15
|
+
export const HONUA_MAP_PACKAGE_FORMAT_V1 = "honua_map_package.v1";
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OGC API – Styles client + StyleRef resolver.
|
|
3
|
+
*
|
|
4
|
+
* Consumes the server's OGC API – Styles surface (honua-server, ADR-0048) so
|
|
5
|
+
* that `styleRefs.styleId` aligns with the server's canonical styleId instead
|
|
6
|
+
* of relying on an ad-hoc, caller-supplied callback:
|
|
7
|
+
*
|
|
8
|
+
* GET /ogc/styles -> { styles: [{ id, title, links }], default? }
|
|
9
|
+
* GET /ogc/styles/{styleId} -> MapLibre style document
|
|
10
|
+
* (Accept: application/vnd.mapbox.style+json — content negotiated)
|
|
11
|
+
* GET /ogc/styles/{styleId}/metadata -> style metadata document
|
|
12
|
+
*
|
|
13
|
+
* The {@link createOgcStyleRefResolver} factory adapts the full MapLibre style
|
|
14
|
+
* document returned by `/ogc/styles/{styleId}` into the per-layer
|
|
15
|
+
* {@link HonuaStyleRefBody} override map consumed by `applyStyleRefs`. This is
|
|
16
|
+
* wired as the default StyleRef resolution path in the runtime loader, while a
|
|
17
|
+
* caller-supplied callback remains supported as a back-compat override.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import type { HonuaClient } from "../core/client.js";
|
|
22
|
+
import type { HonuaStyleSpecification } from "../style/specification.js";
|
|
23
|
+
import type { HonuaStyleRefBody } from "./map-package.js";
|
|
24
|
+
import type { StyleRefResolver } from "./style-compose.js";
|
|
25
|
+
/** Default path prefix for the server's OGC API – Styles surface. */
|
|
26
|
+
export declare const DEFAULT_OGC_STYLES_PATH_PREFIX = "/ogc/styles";
|
|
27
|
+
/**
|
|
28
|
+
* MapLibre style media type used to content-negotiate the encoded style
|
|
29
|
+
* document from `/ogc/styles/{styleId}`. Matches the server default.
|
|
30
|
+
*/
|
|
31
|
+
export declare const MAPLIBRE_STYLE_MEDIA_TYPE = "application/vnd.mapbox.style+json";
|
|
32
|
+
/** A link entry on a styles list / style metadata document. */
|
|
33
|
+
export interface OgcStyleLink {
|
|
34
|
+
readonly rel: string;
|
|
35
|
+
readonly type?: string;
|
|
36
|
+
readonly href: string;
|
|
37
|
+
readonly title?: string;
|
|
38
|
+
}
|
|
39
|
+
/** One entry in the `/ogc/styles` style list. */
|
|
40
|
+
export interface OgcStyleListEntry {
|
|
41
|
+
readonly id: string;
|
|
42
|
+
readonly title?: string;
|
|
43
|
+
readonly links?: readonly OgcStyleLink[];
|
|
44
|
+
}
|
|
45
|
+
/** Response body of `GET /ogc/styles`. */
|
|
46
|
+
export interface OgcStyleList {
|
|
47
|
+
readonly styles: readonly OgcStyleListEntry[];
|
|
48
|
+
/** Server-designated default styleId, when present. */
|
|
49
|
+
readonly default?: string;
|
|
50
|
+
}
|
|
51
|
+
/** Options shared by the OGC styles client calls. */
|
|
52
|
+
export interface OgcStylesRequestOptions {
|
|
53
|
+
readonly signal?: AbortSignal;
|
|
54
|
+
readonly headers?: HeadersInit;
|
|
55
|
+
}
|
|
56
|
+
/** Options for constructing an OGC styles client. */
|
|
57
|
+
export interface OgcStylesClientOptions {
|
|
58
|
+
readonly client: HonuaClient;
|
|
59
|
+
/**
|
|
60
|
+
* Override the OGC styles path prefix. Defaults to
|
|
61
|
+
* {@link DEFAULT_OGC_STYLES_PATH_PREFIX} (`/ogc/styles`).
|
|
62
|
+
*/
|
|
63
|
+
readonly pathPrefix?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Thin client over the server's OGC API – Styles surface. Uses the shared
|
|
67
|
+
* {@link HonuaClient} request pipeline (auth / retry / interceptors), matching
|
|
68
|
+
* the other `/ogc/*` consumers in the SDK.
|
|
69
|
+
*/
|
|
70
|
+
export declare class OgcStylesClient {
|
|
71
|
+
private readonly client;
|
|
72
|
+
private readonly pathPrefix;
|
|
73
|
+
constructor(options: OgcStylesClientOptions);
|
|
74
|
+
/** List available styles via `GET /ogc/styles`. */
|
|
75
|
+
listStyles(options?: OgcStylesRequestOptions): Promise<OgcStyleList>;
|
|
76
|
+
/**
|
|
77
|
+
* Fetch the MapLibre style document for `styleId` via
|
|
78
|
+
* `GET /ogc/styles/{styleId}` (content-negotiated to
|
|
79
|
+
* {@link MAPLIBRE_STYLE_MEDIA_TYPE}).
|
|
80
|
+
*/
|
|
81
|
+
getStyle(styleId: string, options?: OgcStylesRequestOptions): Promise<HonuaStyleSpecification>;
|
|
82
|
+
/** Fetch the style metadata document via `GET /ogc/styles/{styleId}/metadata`. */
|
|
83
|
+
getStyleMetadata(styleId: string, options?: OgcStylesRequestOptions): Promise<Record<string, unknown>>;
|
|
84
|
+
/** Resolve the request path for a single style. */
|
|
85
|
+
stylePath(styleId: string): string;
|
|
86
|
+
private getJson;
|
|
87
|
+
}
|
|
88
|
+
/** Options for {@link createOgcStyleRefResolver}. */
|
|
89
|
+
export interface OgcStyleRefResolverOptions extends OgcStylesClientOptions, OgcStylesRequestOptions {
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Build a {@link StyleRefResolver} backed by the server's `/ogc/styles`
|
|
93
|
+
* surface. The resolver fetches `GET /ogc/styles/{styleId}` (content-negotiated
|
|
94
|
+
* MapLibre) and projects the returned style document's layers into the
|
|
95
|
+
* per-layer {@link HonuaStyleRefBody} override map that `applyStyleRefs`
|
|
96
|
+
* consumes. Layer overrides are keyed by MapLibre layer id; only
|
|
97
|
+
* paint/layout/zoom/filter/metadata are carried over (structural fields such
|
|
98
|
+
* as `source` are intentionally dropped — a StyleRef refines existing layers).
|
|
99
|
+
*
|
|
100
|
+
* The `presetId` argument is currently advisory and not encoded into the
|
|
101
|
+
* request path; the server resolves presets server-side by styleId.
|
|
102
|
+
*/
|
|
103
|
+
export declare function createOgcStyleRefResolver(options: OgcStyleRefResolverOptions): StyleRefResolver;
|
|
104
|
+
/**
|
|
105
|
+
* Project a MapLibre style document into a {@link HonuaStyleRefBody} — a map of
|
|
106
|
+
* per-layer paint/layout overrides keyed by layer id. Layers without any
|
|
107
|
+
* override-relevant fields are omitted.
|
|
108
|
+
*/
|
|
109
|
+
export declare function styleDocumentToRefBody(style: HonuaStyleSpecification): HonuaStyleRefBody;
|
|
110
|
+
//# sourceMappingURL=ogc-styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ogc-styles.d.ts","sourceRoot":"","sources":["../../../src/runtime/ogc-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAA2B,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAElG,OAAO,KAAK,EAAE,iBAAiB,EAA8B,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,qEAAqE;AACrE,eAAO,MAAM,8BAA8B,gBAAgB,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,yBAAyB,sCAAsC,CAAC;AAE7E,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC1C;AAED,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC;IAC9C,uDAAuD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,qDAAqD;AACrD,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC;CAChC;AAED,qDAAqD;AACrD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,OAAO,EAAE,sBAAsB;IAK3C,mDAAmD;IACtC,UAAU,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,YAAY,CAAC;IAKrF;;;;OAIG;IACU,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAY/G,kFAAkF;IACrE,gBAAgB,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAYnC,mDAAmD;IAC5C,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;YAI3B,OAAO;CActB;AAED,qDAAqD;AACrD,MAAM,WAAW,0BAA2B,SAAQ,sBAAsB,EAAE,uBAAuB;CAAG;AAEtG;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,0BAA0B,GAAG,gBAAgB,CAa/F;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,uBAAuB,GAAG,iBAAiB,CAQxF"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OGC API – Styles client + StyleRef resolver.
|
|
3
|
+
*
|
|
4
|
+
* Consumes the server's OGC API – Styles surface (honua-server, ADR-0048) so
|
|
5
|
+
* that `styleRefs.styleId` aligns with the server's canonical styleId instead
|
|
6
|
+
* of relying on an ad-hoc, caller-supplied callback:
|
|
7
|
+
*
|
|
8
|
+
* GET /ogc/styles -> { styles: [{ id, title, links }], default? }
|
|
9
|
+
* GET /ogc/styles/{styleId} -> MapLibre style document
|
|
10
|
+
* (Accept: application/vnd.mapbox.style+json — content negotiated)
|
|
11
|
+
* GET /ogc/styles/{styleId}/metadata -> style metadata document
|
|
12
|
+
*
|
|
13
|
+
* The {@link createOgcStyleRefResolver} factory adapts the full MapLibre style
|
|
14
|
+
* document returned by `/ogc/styles/{styleId}` into the per-layer
|
|
15
|
+
* {@link HonuaStyleRefBody} override map consumed by `applyStyleRefs`. This is
|
|
16
|
+
* wired as the default StyleRef resolution path in the runtime loader, while a
|
|
17
|
+
* caller-supplied callback remains supported as a back-compat override.
|
|
18
|
+
*
|
|
19
|
+
* @module
|
|
20
|
+
*/
|
|
21
|
+
import { trimTrailingSlashes } from "../core/path-utils.js";
|
|
22
|
+
import { HonuaMapPackageError } from "./errors.js";
|
|
23
|
+
/** Default path prefix for the server's OGC API – Styles surface. */
|
|
24
|
+
export const DEFAULT_OGC_STYLES_PATH_PREFIX = "/ogc/styles";
|
|
25
|
+
/**
|
|
26
|
+
* MapLibre style media type used to content-negotiate the encoded style
|
|
27
|
+
* document from `/ogc/styles/{styleId}`. Matches the server default.
|
|
28
|
+
*/
|
|
29
|
+
export const MAPLIBRE_STYLE_MEDIA_TYPE = "application/vnd.mapbox.style+json";
|
|
30
|
+
/**
|
|
31
|
+
* Thin client over the server's OGC API – Styles surface. Uses the shared
|
|
32
|
+
* {@link HonuaClient} request pipeline (auth / retry / interceptors), matching
|
|
33
|
+
* the other `/ogc/*` consumers in the SDK.
|
|
34
|
+
*/
|
|
35
|
+
export class OgcStylesClient {
|
|
36
|
+
client;
|
|
37
|
+
pathPrefix;
|
|
38
|
+
constructor(options) {
|
|
39
|
+
this.client = options.client;
|
|
40
|
+
this.pathPrefix = normalizePrefix(options.pathPrefix ?? DEFAULT_OGC_STYLES_PATH_PREFIX);
|
|
41
|
+
}
|
|
42
|
+
/** List available styles via `GET /ogc/styles`. */
|
|
43
|
+
async listStyles(options = {}) {
|
|
44
|
+
const body = await this.getJson(this.pathPrefix, "application/json", options);
|
|
45
|
+
return normalizeStyleList(body);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Fetch the MapLibre style document for `styleId` via
|
|
49
|
+
* `GET /ogc/styles/{styleId}` (content-negotiated to
|
|
50
|
+
* {@link MAPLIBRE_STYLE_MEDIA_TYPE}).
|
|
51
|
+
*/
|
|
52
|
+
async getStyle(styleId, options = {}) {
|
|
53
|
+
const path = this.stylePath(styleId);
|
|
54
|
+
const body = await this.getJson(path, `${MAPLIBRE_STYLE_MEDIA_TYPE}, application/json;q=0.9`, options);
|
|
55
|
+
if (!isRecord(body) || !Array.isArray(body.layers)) {
|
|
56
|
+
throw new HonuaMapPackageError(`OGC style "${styleId}" did not return a MapLibre style document`, {
|
|
57
|
+
stage: "style-compose",
|
|
58
|
+
detail: { styleId, path },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return body;
|
|
62
|
+
}
|
|
63
|
+
/** Fetch the style metadata document via `GET /ogc/styles/{styleId}/metadata`. */
|
|
64
|
+
async getStyleMetadata(styleId, options = {}) {
|
|
65
|
+
const path = `${this.stylePath(styleId)}/metadata`;
|
|
66
|
+
const body = await this.getJson(path, "application/json", options);
|
|
67
|
+
if (!isRecord(body)) {
|
|
68
|
+
throw new HonuaMapPackageError(`OGC style metadata for "${styleId}" was not an object`, {
|
|
69
|
+
stage: "style-compose",
|
|
70
|
+
detail: { styleId, path },
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return body;
|
|
74
|
+
}
|
|
75
|
+
/** Resolve the request path for a single style. */
|
|
76
|
+
stylePath(styleId) {
|
|
77
|
+
return `${this.pathPrefix}/${encodeURIComponent(styleId)}`;
|
|
78
|
+
}
|
|
79
|
+
async getJson(path, accept, options) {
|
|
80
|
+
const headers = new Headers(options.headers);
|
|
81
|
+
if (!headers.has("Accept"))
|
|
82
|
+
headers.set("Accept", accept);
|
|
83
|
+
const response = await this.client.pipelineFetch("GET", path, { headers }, options.signal);
|
|
84
|
+
try {
|
|
85
|
+
return await response.json();
|
|
86
|
+
}
|
|
87
|
+
catch (cause) {
|
|
88
|
+
throw new HonuaMapPackageError(`OGC styles response from "${path}" was not valid JSON`, {
|
|
89
|
+
stage: "style-compose",
|
|
90
|
+
detail: { path },
|
|
91
|
+
cause,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build a {@link StyleRefResolver} backed by the server's `/ogc/styles`
|
|
98
|
+
* surface. The resolver fetches `GET /ogc/styles/{styleId}` (content-negotiated
|
|
99
|
+
* MapLibre) and projects the returned style document's layers into the
|
|
100
|
+
* per-layer {@link HonuaStyleRefBody} override map that `applyStyleRefs`
|
|
101
|
+
* consumes. Layer overrides are keyed by MapLibre layer id; only
|
|
102
|
+
* paint/layout/zoom/filter/metadata are carried over (structural fields such
|
|
103
|
+
* as `source` are intentionally dropped — a StyleRef refines existing layers).
|
|
104
|
+
*
|
|
105
|
+
* The `presetId` argument is currently advisory and not encoded into the
|
|
106
|
+
* request path; the server resolves presets server-side by styleId.
|
|
107
|
+
*/
|
|
108
|
+
export function createOgcStyleRefResolver(options) {
|
|
109
|
+
const ogc = new OgcStylesClient({
|
|
110
|
+
client: options.client,
|
|
111
|
+
...(options.pathPrefix ? { pathPrefix: options.pathPrefix } : {}),
|
|
112
|
+
});
|
|
113
|
+
const requestOptions = {
|
|
114
|
+
...(options.signal ? { signal: options.signal } : {}),
|
|
115
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
116
|
+
};
|
|
117
|
+
return async (styleId) => {
|
|
118
|
+
const style = await ogc.getStyle(styleId, requestOptions);
|
|
119
|
+
return styleDocumentToRefBody(style);
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Project a MapLibre style document into a {@link HonuaStyleRefBody} — a map of
|
|
124
|
+
* per-layer paint/layout overrides keyed by layer id. Layers without any
|
|
125
|
+
* override-relevant fields are omitted.
|
|
126
|
+
*/
|
|
127
|
+
export function styleDocumentToRefBody(style) {
|
|
128
|
+
const body = {};
|
|
129
|
+
for (const layer of style.layers ?? []) {
|
|
130
|
+
if (!layer || typeof layer.id !== "string")
|
|
131
|
+
continue;
|
|
132
|
+
const override = layerToOverride(layer);
|
|
133
|
+
if (override)
|
|
134
|
+
body[layer.id] = override;
|
|
135
|
+
}
|
|
136
|
+
return body;
|
|
137
|
+
}
|
|
138
|
+
function layerToOverride(layer) {
|
|
139
|
+
const override = {};
|
|
140
|
+
let hasField = false;
|
|
141
|
+
if (layer.paint !== undefined) {
|
|
142
|
+
override.paint = layer.paint;
|
|
143
|
+
hasField = true;
|
|
144
|
+
}
|
|
145
|
+
if (layer.layout !== undefined) {
|
|
146
|
+
override.layout = layer.layout;
|
|
147
|
+
hasField = true;
|
|
148
|
+
}
|
|
149
|
+
if (layer.minzoom !== undefined) {
|
|
150
|
+
override.minzoom = layer.minzoom;
|
|
151
|
+
hasField = true;
|
|
152
|
+
}
|
|
153
|
+
if (layer.maxzoom !== undefined) {
|
|
154
|
+
override.maxzoom = layer.maxzoom;
|
|
155
|
+
hasField = true;
|
|
156
|
+
}
|
|
157
|
+
if (layer.filter !== undefined) {
|
|
158
|
+
override.filter = layer.filter;
|
|
159
|
+
hasField = true;
|
|
160
|
+
}
|
|
161
|
+
if (layer.metadata !== undefined) {
|
|
162
|
+
override.metadata = layer.metadata;
|
|
163
|
+
hasField = true;
|
|
164
|
+
}
|
|
165
|
+
return hasField ? override : undefined;
|
|
166
|
+
}
|
|
167
|
+
function normalizeStyleList(body) {
|
|
168
|
+
if (!isRecord(body) || !Array.isArray(body.styles)) {
|
|
169
|
+
throw new HonuaMapPackageError("OGC styles list did not contain a styles array", {
|
|
170
|
+
stage: "style-compose",
|
|
171
|
+
detail: { body },
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
const styles = [];
|
|
175
|
+
for (const entry of body.styles) {
|
|
176
|
+
if (!isRecord(entry) || typeof entry.id !== "string")
|
|
177
|
+
continue;
|
|
178
|
+
styles.push({
|
|
179
|
+
id: entry.id,
|
|
180
|
+
...(typeof entry.title === "string" ? { title: entry.title } : {}),
|
|
181
|
+
...(Array.isArray(entry.links) ? { links: entry.links } : {}),
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
styles,
|
|
186
|
+
...(typeof body.default === "string" ? { default: body.default } : {}),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
function normalizePrefix(prefix) {
|
|
190
|
+
const trimmed = trimTrailingSlashes(prefix);
|
|
191
|
+
return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
|
|
192
|
+
}
|
|
193
|
+
function isRecord(value) {
|
|
194
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
195
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Popup bindings. The runtime wires `MapPackage.popupBindings[]` into
|
|
3
|
+
* MapLibre `click` handlers using a duck-typed map interface (no runtime
|
|
4
|
+
* dependency on `maplibre-gl`). The default DOM renderer is intentionally
|
|
5
|
+
* unstyled — `#29` operator components replace it with richer popup UIs.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import type { MapEventTarget } from "../interactions/feature-state.js";
|
|
10
|
+
import type { HonuaMapPackagePopupBinding } from "./map-package.js";
|
|
11
|
+
/**
|
|
12
|
+
* Minimal subset of `maplibre-gl.Popup` needed to open a popup at
|
|
13
|
+
* click coordinates. Any object implementing these methods works.
|
|
14
|
+
*/
|
|
15
|
+
export interface PopupHandle {
|
|
16
|
+
setLngLat(coord: [number, number]): this;
|
|
17
|
+
setDOMContent(node: Node): this;
|
|
18
|
+
setHTML(html: string): this;
|
|
19
|
+
addTo(map: unknown): this;
|
|
20
|
+
remove(): void;
|
|
21
|
+
}
|
|
22
|
+
/** Factory a host supplies so the runtime never imports `maplibre-gl` directly. */
|
|
23
|
+
export type PopupFactory = () => PopupHandle;
|
|
24
|
+
/** Custom popup renderer that receives the click event features. */
|
|
25
|
+
export type PopupRenderer = (context: PopupRenderContext) => Node | string | undefined;
|
|
26
|
+
export interface PopupRenderContext {
|
|
27
|
+
binding: HonuaMapPackagePopupBinding;
|
|
28
|
+
features: ReadonlyArray<PopupFeature>;
|
|
29
|
+
lngLat: [number, number];
|
|
30
|
+
}
|
|
31
|
+
export interface PopupFeature {
|
|
32
|
+
id?: string | number;
|
|
33
|
+
properties?: Record<string, unknown>;
|
|
34
|
+
geometry?: unknown;
|
|
35
|
+
}
|
|
36
|
+
export interface BindPopupOptions {
|
|
37
|
+
binding: HonuaMapPackagePopupBinding;
|
|
38
|
+
/** MapLibre layer id to listen to for clicks. */
|
|
39
|
+
layerId: string;
|
|
40
|
+
/** Create a new popup handle (usually `new maplibregl.Popup()`). */
|
|
41
|
+
popupFactory: PopupFactory;
|
|
42
|
+
/** Custom renderer; defaults to unstyled key/value list. */
|
|
43
|
+
render?: PopupRenderer;
|
|
44
|
+
}
|
|
45
|
+
/** Handle returned by {@link bindPopup} — call `remove()` on teardown. */
|
|
46
|
+
export interface PopupBindingHandle {
|
|
47
|
+
remove(): void;
|
|
48
|
+
readonly layerId: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Subscribe to `click` events on `layerId` and render a popup at the
|
|
52
|
+
* click point. Assumes the host passes a map that matches `MapEventTarget`
|
|
53
|
+
* (all MapLibre `Map` instances do).
|
|
54
|
+
*/
|
|
55
|
+
export declare function bindPopup(map: MapEventTarget & {}, options: BindPopupOptions): PopupBindingHandle;
|
|
56
|
+
/**
|
|
57
|
+
* Default renderer: an unstyled `<dl>` list of `binding.fieldName` (when
|
|
58
|
+
* set) or all properties on the first feature. Use a custom renderer for
|
|
59
|
+
* anything production-quality.
|
|
60
|
+
*/
|
|
61
|
+
export declare function defaultPopupRenderer(context: PopupRenderContext): Node | undefined;
|
|
62
|
+
//# sourceMappingURL=popups.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"popups.d.ts","sourceRoot":"","sources":["../../../src/runtime/popups.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,kBAAkB,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACzC,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC;AAE7C,oEAAoE;AACpE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEvF,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,2BAA2B,CAAC;IACrC,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,2BAA2B,CAAC;IACrC,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,YAAY,EAAE,YAAY,CAAC;IAC3B,4DAA4D;IAC5D,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,MAAM,IAAI,IAAI,CAAC;IACf,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,cAAc,GAAG,EAErB,EACD,OAAO,EAAE,gBAAgB,GACxB,kBAAkB,CAkCpB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAoClF"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Popup bindings. The runtime wires `MapPackage.popupBindings[]` into
|
|
3
|
+
* MapLibre `click` handlers using a duck-typed map interface (no runtime
|
|
4
|
+
* dependency on `maplibre-gl`). The default DOM renderer is intentionally
|
|
5
|
+
* unstyled — `#29` operator components replace it with richer popup UIs.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Subscribe to `click` events on `layerId` and render a popup at the
|
|
11
|
+
* click point. Assumes the host passes a map that matches `MapEventTarget`
|
|
12
|
+
* (all MapLibre `Map` instances do).
|
|
13
|
+
*/
|
|
14
|
+
export function bindPopup(map, options) {
|
|
15
|
+
const { binding, layerId, popupFactory, render = defaultPopupRenderer } = options;
|
|
16
|
+
let current;
|
|
17
|
+
function onClick(...args) {
|
|
18
|
+
const event = args[0];
|
|
19
|
+
if (!event?.lngLat || !event.features || event.features.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
const lngLat = [event.lngLat.lng, event.lngLat.lat];
|
|
22
|
+
const rendered = render({ binding, features: event.features, lngLat });
|
|
23
|
+
if (!rendered)
|
|
24
|
+
return;
|
|
25
|
+
current?.remove();
|
|
26
|
+
current = popupFactory().setLngLat(lngLat);
|
|
27
|
+
if (typeof rendered === "string")
|
|
28
|
+
current.setHTML(rendered);
|
|
29
|
+
else
|
|
30
|
+
current.setDOMContent(rendered);
|
|
31
|
+
current.addTo(map);
|
|
32
|
+
}
|
|
33
|
+
map.on("click", layerId, onClick);
|
|
34
|
+
return {
|
|
35
|
+
layerId,
|
|
36
|
+
remove() {
|
|
37
|
+
current?.remove();
|
|
38
|
+
current = undefined;
|
|
39
|
+
map.off("click", layerId, onClick);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Default renderer: an unstyled `<dl>` list of `binding.fieldName` (when
|
|
45
|
+
* set) or all properties on the first feature. Use a custom renderer for
|
|
46
|
+
* anything production-quality.
|
|
47
|
+
*/
|
|
48
|
+
export function defaultPopupRenderer(context) {
|
|
49
|
+
const doc = resolveDocument();
|
|
50
|
+
if (!doc)
|
|
51
|
+
return undefined;
|
|
52
|
+
const root = doc.createElement("div");
|
|
53
|
+
if (context.binding.title) {
|
|
54
|
+
const title = doc.createElement("h3");
|
|
55
|
+
title.textContent = context.binding.title;
|
|
56
|
+
root.appendChild(title);
|
|
57
|
+
}
|
|
58
|
+
const feature = context.features[0];
|
|
59
|
+
if (!feature || !feature.properties)
|
|
60
|
+
return root;
|
|
61
|
+
if (context.binding.template) {
|
|
62
|
+
const body = doc.createElement("div");
|
|
63
|
+
body.textContent = renderStringTemplate(context.binding.template, feature.properties);
|
|
64
|
+
root.appendChild(body);
|
|
65
|
+
return root;
|
|
66
|
+
}
|
|
67
|
+
const fields = context.binding.fieldName
|
|
68
|
+
? [context.binding.fieldName].filter((f) => Object.hasOwn(feature.properties ?? {}, f))
|
|
69
|
+
: Object.keys(feature.properties);
|
|
70
|
+
const dl = doc.createElement("dl");
|
|
71
|
+
for (const field of fields) {
|
|
72
|
+
const dt = doc.createElement("dt");
|
|
73
|
+
dt.textContent = field;
|
|
74
|
+
const dd = doc.createElement("dd");
|
|
75
|
+
dd.textContent = String(feature.properties[field]);
|
|
76
|
+
dl.appendChild(dt);
|
|
77
|
+
dl.appendChild(dd);
|
|
78
|
+
}
|
|
79
|
+
root.appendChild(dl);
|
|
80
|
+
return root;
|
|
81
|
+
}
|
|
82
|
+
function renderStringTemplate(template, properties) {
|
|
83
|
+
// [^{}] (not [^}]) keeps candidate matches non-overlapping so the scan stays
|
|
84
|
+
// linear on adversarial input like "{{{{…" (CodeQL js/polynomial-redos), and
|
|
85
|
+
// stops a stray "{" from being swallowed into the preceding placeholder key.
|
|
86
|
+
return template.replace(/\{([^{}]+)\}/g, (_, key) => {
|
|
87
|
+
const value = properties[key];
|
|
88
|
+
return value === undefined || value === null ? "" : String(value);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function resolveDocument() {
|
|
92
|
+
if (typeof document !== "undefined")
|
|
93
|
+
return document;
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|