@honua/app-platform 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 +11 -0
- package/app/index.d.ts +164 -0
- package/app/index.d.ts.map +1 -0
- package/app/index.js +424 -0
- package/app-controller/controller.d.ts +425 -0
- package/app-controller/controller.d.ts.map +1 -0
- package/app-controller/controller.js +1173 -0
- package/app-controller/index.d.ts +14 -0
- package/app-controller/index.d.ts.map +1 -0
- package/app-controller/index.js +12 -0
- package/app-workspace/index.d.ts +421 -0
- package/app-workspace/index.d.ts.map +1 -0
- package/app-workspace/index.js +722 -0
- package/collaboration/client.d.ts +40 -0
- package/collaboration/client.d.ts.map +1 -0
- package/collaboration/client.js +299 -0
- package/collaboration/errors.d.ts +15 -0
- package/collaboration/errors.d.ts.map +1 -0
- package/collaboration/errors.js +17 -0
- package/collaboration/fixture.d.ts +41 -0
- package/collaboration/fixture.d.ts.map +1 -0
- package/collaboration/fixture.js +362 -0
- package/collaboration/index.d.ts +18 -0
- package/collaboration/index.d.ts.map +1 -0
- package/collaboration/index.js +14 -0
- package/collaboration/types.d.ts +240 -0
- package/collaboration/types.d.ts.map +1 -0
- package/collaboration/types.js +1 -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 +63 -0
- package/contract/index.d.ts.map +1 -0
- package/contract/index.js +52 -0
- package/contract/jobs.d.ts +149 -0
- package/contract/jobs.d.ts.map +1 -0
- package/contract/jobs.js +40 -0
- package/contract/pmtiles.d.ts +162 -0
- package/contract/pmtiles.d.ts.map +1 -0
- package/contract/pmtiles.js +155 -0
- package/contract/source.d.ts +447 -0
- package/contract/source.d.ts.map +1 -0
- package/contract/source.js +3909 -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 +694 -0
- package/contract/types.d.ts.map +1 -0
- package/contract/types.js +183 -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/controls/basemap-style-binding.d.ts +54 -0
- package/controls/basemap-style-binding.d.ts.map +1 -0
- package/controls/basemap-style-binding.js +199 -0
- package/controls/basemap-switcher.d.ts +95 -0
- package/controls/basemap-switcher.d.ts.map +1 -0
- package/controls/basemap-switcher.js +379 -0
- package/controls/element-utils.d.ts +48 -0
- package/controls/element-utils.d.ts.map +1 -0
- package/controls/element-utils.js +78 -0
- package/controls/index.d.ts +33 -0
- package/controls/index.d.ts.map +1 -0
- package/controls/index.js +30 -0
- package/controls/layer-list.d.ts +98 -0
- package/controls/layer-list.d.ts.map +1 -0
- package/controls/layer-list.js +375 -0
- package/controls/legend-derive.d.ts +53 -0
- package/controls/legend-derive.d.ts.map +1 -0
- package/controls/legend-derive.js +196 -0
- package/controls/legend.d.ts +104 -0
- package/controls/legend.d.ts.map +1 -0
- package/controls/legend.js +381 -0
- package/controls/swipe-control.d.ts +80 -0
- package/controls/swipe-control.d.ts.map +1 -0
- package/controls/swipe-control.js +368 -0
- package/controls/types.d.ts +227 -0
- package/controls/types.d.ts.map +1 -0
- package/controls/types.js +11 -0
- package/core/auth/client-credentials-provider.d.ts +51 -0
- package/core/auth/client-credentials-provider.d.ts.map +1 -0
- package/core/auth/client-credentials-provider.js +115 -0
- package/core/auth/credential-store.d.ts +52 -0
- package/core/auth/credential-store.d.ts.map +1 -0
- package/core/auth/credential-store.js +82 -0
- package/core/auth/index.d.ts +23 -0
- package/core/auth/index.d.ts.map +1 -0
- package/core/auth/index.js +20 -0
- package/core/auth/oauth2-provider.d.ts +114 -0
- package/core/auth/oauth2-provider.d.ts.map +1 -0
- package/core/auth/oauth2-provider.js +408 -0
- package/core/auth/pkce.d.ts +25 -0
- package/core/auth/pkce.d.ts.map +1 -0
- package/core/auth/pkce.js +46 -0
- package/core/auth/static-providers.d.ts +20 -0
- package/core/auth/static-providers.d.ts.map +1 -0
- package/core/auth/static-providers.js +26 -0
- package/core/auth/token-endpoint.d.ts +40 -0
- package/core/auth/token-endpoint.d.ts.map +1 -0
- package/core/auth/token-endpoint.js +133 -0
- package/core/auth/types.d.ts +144 -0
- package/core/auth/types.d.ts.map +1 -0
- package/core/auth/types.js +8 -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 +607 -0
- package/core/client.d.ts.map +1 -0
- package/core/client.js +1716 -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 +139 -0
- package/core/errors.d.ts.map +1 -0
- package/core/errors.js +176 -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/geoparquet-sql.d.ts +162 -0
- package/core/geoparquet-sql.d.ts.map +1 -0
- package/core/geoparquet-sql.js +333 -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-endpoint-layout.d.ts +70 -0
- package/core/ogc-endpoint-layout.d.ts.map +1 -0
- package/core/ogc-endpoint-layout.js +173 -0
- package/core/ogc-features.d.ts +23 -0
- package/core/ogc-features.d.ts.map +1 -0
- package/core/ogc-features.js +129 -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-static.d.ts +51 -0
- package/core/stac-static.d.ts.map +1 -0
- package/core/stac-static.js +195 -0
- package/core/stac.d.ts +67 -0
- package/core/stac.d.ts.map +1 -0
- package/core/stac.js +259 -0
- package/core/surfaces.d.ts +540 -0
- package/core/surfaces.d.ts.map +1 -0
- package/core/surfaces.js +1964 -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 +1404 -0
- package/core/types.d.ts.map +1 -0
- package/core/types.js +13 -0
- package/core/wfs-capabilities.d.ts +153 -0
- package/core/wfs-capabilities.d.ts.map +1 -0
- package/core/wfs-capabilities.js +490 -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 +232 -0
- package/core/wfs.d.ts.map +1 -0
- package/core/wfs.js +426 -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 +74 -0
- package/esri-compat/identity-manager.d.ts.map +1 -0
- package/esri-compat/identity-manager.js +245 -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 +50 -0
- package/esri-compat/oauth-info.d.ts.map +1 -0
- package/esri-compat/oauth-info.js +142 -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/filter-registry/index.d.ts +145 -0
- package/filter-registry/index.d.ts.map +1 -0
- package/filter-registry/index.js +531 -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/geocoding/index.d.ts +106 -0
- package/geocoding/index.d.ts.map +1 -0
- package/geocoding/index.js +278 -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/operate/client.d.ts +94 -0
- package/operate/client.d.ts.map +1 -0
- package/operate/client.js +361 -0
- package/operate/index.d.ts +22 -0
- package/operate/index.d.ts.map +1 -0
- package/operate/index.js +19 -0
- package/operate/types.d.ts +397 -0
- package/operate/types.d.ts.map +1 -0
- package/operate/types.js +17 -0
- package/operator/client.d.ts +60 -0
- package/operator/client.d.ts.map +1 -0
- package/operator/client.js +20 -0
- package/operator/controllers/approval.d.ts +52 -0
- package/operator/controllers/approval.d.ts.map +1 -0
- package/operator/controllers/approval.js +123 -0
- package/operator/controllers/base.d.ts +27 -0
- package/operator/controllers/base.d.ts.map +1 -0
- package/operator/controllers/base.js +53 -0
- package/operator/controllers/builder-workspace.d.ts +55 -0
- package/operator/controllers/builder-workspace.d.ts.map +1 -0
- package/operator/controllers/builder-workspace.js +108 -0
- package/operator/controllers/chat.d.ts +61 -0
- package/operator/controllers/chat.d.ts.map +1 -0
- package/operator/controllers/chat.js +154 -0
- package/operator/controllers/clarification.d.ts +52 -0
- package/operator/controllers/clarification.d.ts.map +1 -0
- package/operator/controllers/clarification.js +121 -0
- package/operator/controllers/execution.d.ts +60 -0
- package/operator/controllers/execution.d.ts.map +1 -0
- package/operator/controllers/execution.js +286 -0
- package/operator/controllers/index.d.ts +23 -0
- package/operator/controllers/index.d.ts.map +1 -0
- package/operator/controllers/index.js +15 -0
- package/operator/controllers/map-workspace.d.ts +85 -0
- package/operator/controllers/map-workspace.d.ts.map +1 -0
- package/operator/controllers/map-workspace.js +296 -0
- package/operator/controllers/plan-review.d.ts +66 -0
- package/operator/controllers/plan-review.d.ts.map +1 -0
- package/operator/controllers/plan-review.js +124 -0
- package/operator/errors.d.ts +62 -0
- package/operator/errors.d.ts.map +1 -0
- package/operator/errors.js +75 -0
- package/operator/i18n/index.d.ts +10 -0
- package/operator/i18n/index.d.ts.map +1 -0
- package/operator/i18n/index.js +8 -0
- package/operator/i18n/messages.d.ts +19 -0
- package/operator/i18n/messages.d.ts.map +1 -0
- package/operator/i18n/messages.js +54 -0
- package/operator/index.d.ts +19 -0
- package/operator/index.d.ts.map +1 -0
- package/operator/index.js +15 -0
- package/operator/telemetry.d.ts +26 -0
- package/operator/telemetry.d.ts.map +1 -0
- package/operator/telemetry.js +9 -0
- package/operator/theming/index.d.ts +12 -0
- package/operator/theming/index.d.ts.map +1 -0
- package/operator/theming/index.js +9 -0
- package/operator/theming/provider.d.ts +27 -0
- package/operator/theming/provider.d.ts.map +1 -0
- package/operator/theming/provider.js +26 -0
- package/operator/theming/tokens.d.ts +28 -0
- package/operator/theming/tokens.d.ts.map +1 -0
- package/operator/theming/tokens.js +65 -0
- package/operator/workspace/events.d.ts +70 -0
- package/operator/workspace/events.d.ts.map +1 -0
- package/operator/workspace/events.js +9 -0
- package/operator/workspace/index.d.ts +12 -0
- package/operator/workspace/index.d.ts.map +1 -0
- package/operator/workspace/index.js +8 -0
- package/operator/workspace/types.d.ts +178 -0
- package/operator/workspace/types.d.ts.map +1 -0
- package/operator/workspace/types.js +47 -0
- package/operator/workspace/workspace.d.ts +58 -0
- package/operator/workspace/workspace.d.ts.map +1 -0
- package/operator/workspace/workspace.js +339 -0
- package/package.json +105 -0
- package/realtime/exploration.d.ts +16 -0
- package/realtime/exploration.d.ts.map +1 -0
- package/realtime/exploration.js +32 -0
- package/realtime/honua-server.d.ts +123 -0
- package/realtime/honua-server.d.ts.map +1 -0
- package/realtime/honua-server.js +188 -0
- package/realtime/index.d.ts +20 -0
- package/realtime/index.d.ts.map +1 -0
- package/realtime/index.js +14 -0
- package/realtime/projections.d.ts +30 -0
- package/realtime/projections.d.ts.map +1 -0
- package/realtime/projections.js +51 -0
- package/realtime/reducer.d.ts +14 -0
- package/realtime/reducer.d.ts.map +1 -0
- package/realtime/reducer.js +351 -0
- package/realtime/sse.d.ts +23 -0
- package/realtime/sse.d.ts.map +1 -0
- package/realtime/sse.js +143 -0
- package/realtime/store.d.ts +18 -0
- package/realtime/store.d.ts.map +1 -0
- package/realtime/store.js +63 -0
- package/realtime/types.d.ts +190 -0
- package/realtime/types.d.ts.map +1 -0
- package/realtime/types.js +10 -0
- package/replica-sync/client.d.ts +32 -0
- package/replica-sync/client.d.ts.map +1 -0
- package/replica-sync/client.js +52 -0
- package/replica-sync/errors.d.ts +22 -0
- package/replica-sync/errors.d.ts.map +1 -0
- package/replica-sync/errors.js +29 -0
- package/replica-sync/fixture.d.ts +40 -0
- package/replica-sync/fixture.d.ts.map +1 -0
- package/replica-sync/fixture.js +364 -0
- package/replica-sync/index.d.ts +22 -0
- package/replica-sync/index.d.ts.map +1 -0
- package/replica-sync/index.js +17 -0
- package/replica-sync/types.d.ts +270 -0
- package/replica-sync/types.d.ts.map +1 -0
- package/replica-sync/types.js +13 -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 +40 -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 +272 -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 +30 -0
- package/runtime/map-package-validation.d.ts.map +1 -0
- package/runtime/map-package-validation.js +257 -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/pmtiles-protocol.d.ts +77 -0
- package/runtime/pmtiles-protocol.d.ts.map +1 -0
- package/runtime/pmtiles-protocol.js +120 -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 +428 -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/scene-workspace/analysis-widgets.d.ts +334 -0
- package/scene-workspace/analysis-widgets.d.ts.map +1 -0
- package/scene-workspace/analysis-widgets.js +424 -0
- package/scene-workspace/cesium-adapter.d.ts +438 -0
- package/scene-workspace/cesium-adapter.d.ts.map +1 -0
- package/scene-workspace/cesium-adapter.js +493 -0
- package/scene-workspace/index.d.ts +21 -0
- package/scene-workspace/index.d.ts.map +1 -0
- package/scene-workspace/index.js +14 -0
- package/scene-workspace/primitives.d.ts +162 -0
- package/scene-workspace/primitives.d.ts.map +1 -0
- package/scene-workspace/primitives.js +255 -0
- package/scene-workspace/scene-discovery.d.ts +196 -0
- package/scene-workspace/scene-discovery.d.ts.map +1 -0
- package/scene-workspace/scene-discovery.js +228 -0
- package/scene-workspace/scene-view.d.ts +209 -0
- package/scene-workspace/scene-view.d.ts.map +1 -0
- package/scene-workspace/scene-view.js +267 -0
- package/scene-workspace/types.d.ts +229 -0
- package/scene-workspace/types.d.ts.map +1 -0
- package/scene-workspace/types.js +23 -0
- package/scene-workspace/workspace.d.ts +13 -0
- package/scene-workspace/workspace.d.ts.map +1 -0
- package/scene-workspace/workspace.js +391 -0
- package/share/denial.d.ts +78 -0
- package/share/denial.d.ts.map +1 -0
- package/share/denial.js +61 -0
- package/share/embed-token.d.ts +71 -0
- package/share/embed-token.d.ts.map +1 -0
- package/share/embed-token.js +99 -0
- package/share/index.d.ts +35 -0
- package/share/index.d.ts.map +1 -0
- package/share/index.js +30 -0
- package/share/open-data.d.ts +114 -0
- package/share/open-data.d.ts.map +1 -0
- package/share/open-data.js +81 -0
- package/share/types.d.ts +163 -0
- package/share/types.d.ts.map +1 -0
- package/share/types.js +17 -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/web-components/controller.d.ts +39 -0
- package/web-components/controller.d.ts.map +1 -0
- package/web-components/controller.js +640 -0
- package/web-components/elements.d.ts +210 -0
- package/web-components/elements.d.ts.map +1 -0
- package/web-components/elements.js +1651 -0
- package/web-components/index.d.ts +24 -0
- package/web-components/index.d.ts.map +1 -0
- package/web-components/index.js +22 -0
- package/web-components/maplibre-renderer.d.ts +22 -0
- package/web-components/maplibre-renderer.d.ts.map +1 -0
- package/web-components/maplibre-renderer.js +474 -0
- package/web-components/types.d.ts +397 -0
- package/web-components/types.d.ts.map +1 -0
- package/web-components/types.js +1 -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,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<honua-legend>` — framework-free custom element rendering swatch+label
|
|
3
|
+
* rows from the same definitions the map uses (issue #274), so the map and
|
|
4
|
+
* its legend cannot drift apart.
|
|
5
|
+
*
|
|
6
|
+
* ## Input modes
|
|
7
|
+
* - **Explicit entries** — assign the `entries` property a flat
|
|
8
|
+
* {@link HonuaLegendEntry} array (rendered as one untitled section) and/or
|
|
9
|
+
* {@link HonuaLegendSection} groups with optional titles.
|
|
10
|
+
* - **Derive mode** (the headline) — set the `layer` attribute to a style
|
|
11
|
+
* layer id; the element parses the layer's categorical color paint
|
|
12
|
+
* expression into entries via {@link deriveLegendEntries}. See
|
|
13
|
+
* `legend-derive.ts` for the supported expression shapes (literal color,
|
|
14
|
+
* `match` on a `["get", <attr>]` input, simple-equality `case`, numeric
|
|
15
|
+
* `step`); anything else fails gracefully — the element keeps rendering
|
|
16
|
+
* its explicit sections and exposes the failure on `deriveError`.
|
|
17
|
+
* Both modes compose: explicit sections render first, then the derived
|
|
18
|
+
* section.
|
|
19
|
+
*
|
|
20
|
+
* ## Wiring
|
|
21
|
+
* - `element.map = map` (any MapLibre `Map`) or `element.connect(map)`;
|
|
22
|
+
* - declaratively via `for="<honua-map id>"` — same idiom as
|
|
23
|
+
* `<honua-basemap-switcher>` (resolves `.map` from the referenced element
|
|
24
|
+
* and listens for `honua-map-ready`).
|
|
25
|
+
*
|
|
26
|
+
* ## Reactivity
|
|
27
|
+
* - `refresh()` re-derives and re-renders on demand;
|
|
28
|
+
* - with the `auto-refresh` attribute, the element subscribes to the map's
|
|
29
|
+
* `styledata` event while connected and refreshes automatically (style
|
|
30
|
+
* edits, layers added later, visibility toggles).
|
|
31
|
+
*
|
|
32
|
+
* ## Attributes
|
|
33
|
+
* - `for` — id of the map-providing element.
|
|
34
|
+
* - `layer` — style layer id to derive entries from.
|
|
35
|
+
* - `layer-title` — optional title rendered above the derived section.
|
|
36
|
+
* - `heading` — optional heading rendered above the whole legend.
|
|
37
|
+
* - `follow-layer-visibility` — boolean; hide a section while its source
|
|
38
|
+
* layer's `visibility` layout property is `"none"` (sections carry the
|
|
39
|
+
* derived `layer` id or their own `layer` field).
|
|
40
|
+
* - `auto-refresh` — boolean; see Reactivity.
|
|
41
|
+
*
|
|
42
|
+
* ## CSS parts
|
|
43
|
+
* `root`, `heading`, `section`, `section-title`, `row`, `swatch`, `label`.
|
|
44
|
+
* Structural CSS only — theme via `::part()`.
|
|
45
|
+
*
|
|
46
|
+
* ## Accessibility
|
|
47
|
+
* Rows are real list items (`<ul>`/`<li>`); swatches are `aria-hidden`
|
|
48
|
+
* presentation, with the text labels carrying the meaning.
|
|
49
|
+
*
|
|
50
|
+
* Note: the `web-components` entry also registers a (controller-driven)
|
|
51
|
+
* `honua-legend` element. Both registrations are guarded with an if-missing
|
|
52
|
+
* check, so whichever entry is imported first owns the tag; import
|
|
53
|
+
* `@honua/sdk-js/controls` first to use this element.
|
|
54
|
+
*/
|
|
55
|
+
import { HTMLElementBase } from "./element-utils.js";
|
|
56
|
+
import type { HonuaLegendEntry, HonuaLegendMap, HonuaLegendSection } from "./types.js";
|
|
57
|
+
/**
|
|
58
|
+
* Custom element implementing the legend. Registered as `honua-legend` by
|
|
59
|
+
* `defineHonuaControls` (which runs automatically on import of the controls
|
|
60
|
+
* entry when a `customElements` registry exists).
|
|
61
|
+
*/
|
|
62
|
+
export declare class HonuaLegendElement extends HTMLElementBase {
|
|
63
|
+
#private;
|
|
64
|
+
static get observedAttributes(): string[];
|
|
65
|
+
/** The MapLibre map this legend reads from (derive mode and visibility coupling). */
|
|
66
|
+
get map(): HonuaLegendMap | undefined;
|
|
67
|
+
set map(map: HonuaLegendMap | undefined);
|
|
68
|
+
/** Wires the legend to a MapLibre map. Equivalent to setting `.map`. */
|
|
69
|
+
connect(map: HonuaLegendMap): void;
|
|
70
|
+
/**
|
|
71
|
+
* Explicit legend content. Accepts a flat {@link HonuaLegendEntry} array
|
|
72
|
+
* (one untitled section), {@link HonuaLegendSection} groups, or a mix;
|
|
73
|
+
* the getter returns the normalized sections. Invalid items are dropped.
|
|
74
|
+
*/
|
|
75
|
+
get entries(): readonly HonuaLegendSection[];
|
|
76
|
+
set entries(value: readonly (HonuaLegendEntry | HonuaLegendSection)[]);
|
|
77
|
+
/** Style layer id used by derive mode. Reflects the `layer` attribute. */
|
|
78
|
+
get layer(): string | undefined;
|
|
79
|
+
set layer(value: string | undefined);
|
|
80
|
+
/** Hide sections whose source layer is hidden. Reflects `follow-layer-visibility`. */
|
|
81
|
+
get followLayerVisibility(): boolean;
|
|
82
|
+
set followLayerVisibility(value: boolean);
|
|
83
|
+
/** Refresh automatically on the map's `styledata` event. Reflects `auto-refresh`. */
|
|
84
|
+
get autoRefresh(): boolean;
|
|
85
|
+
set autoRefresh(value: boolean);
|
|
86
|
+
/**
|
|
87
|
+
* Why the last derive attempt failed (message of the underlying
|
|
88
|
+
* {@link HonuaLegendDeriveError}), or `undefined` while derive mode is
|
|
89
|
+
* succeeding or inactive.
|
|
90
|
+
*/
|
|
91
|
+
get deriveError(): string | undefined;
|
|
92
|
+
/**
|
|
93
|
+
* The sections the legend renders: explicit sections followed by the
|
|
94
|
+
* derived section (when derive mode is active and succeeded).
|
|
95
|
+
*/
|
|
96
|
+
get sections(): readonly HonuaLegendSection[];
|
|
97
|
+
/** Re-derives entries from the map (when in derive mode) and re-renders. */
|
|
98
|
+
refresh(): void;
|
|
99
|
+
attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
|
|
100
|
+
connectedCallback(): void;
|
|
101
|
+
disconnectedCallback(): void;
|
|
102
|
+
protected render(): void;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=legend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legend.d.ts","sourceRoot":"","sources":["../../../src/controls/legend.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH,OAAO,EACL,eAAe,EAKhB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAA0B,MAAM,YAAY,CAAC;AAE/G;;;;GAIG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;;IACrD,WAAkB,kBAAkB,IAAI,MAAM,EAAE,CAE/C;IAUD,qFAAqF;IACrF,IAAW,GAAG,IAAI,cAAc,GAAG,SAAS,CAE3C;IAED,IAAW,GAAG,CAAC,GAAG,EAAE,cAAc,GAAG,SAAS,EAM7C;IAED,wEAAwE;IACjE,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI;IAIzC;;;;OAIG;IACH,IAAW,OAAO,IAAI,SAAS,kBAAkB,EAAE,CAElD;IAED,IAAW,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,EAAE,EAG3E;IAED,0EAA0E;IAC1E,IAAW,KAAK,IAAI,MAAM,GAAG,SAAS,CAErC;IAED,IAAW,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAIzC;IAED,sFAAsF;IACtF,IAAW,qBAAqB,IAAI,OAAO,CAE1C;IAED,IAAW,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAE9C;IAED,qFAAqF;IACrF,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,IAAW,WAAW,CAAC,KAAK,EAAE,OAAO,EAEpC;IAED;;;;OAIG;IACH,IAAW,WAAW,IAAI,MAAM,GAAG,SAAS,CAE3C;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,SAAS,kBAAkB,EAAE,CAQnD;IAED,4EAA4E;IACrE,OAAO,IAAI,IAAI;IAKf,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAkB/F,iBAAiB,IAAI,IAAI;IASzB,oBAAoB,IAAI,IAAI;IAyEnC,SAAS,CAAC,MAAM,IAAI,IAAI;CAgDzB"}
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<honua-legend>` — framework-free custom element rendering swatch+label
|
|
3
|
+
* rows from the same definitions the map uses (issue #274), so the map and
|
|
4
|
+
* its legend cannot drift apart.
|
|
5
|
+
*
|
|
6
|
+
* ## Input modes
|
|
7
|
+
* - **Explicit entries** — assign the `entries` property a flat
|
|
8
|
+
* {@link HonuaLegendEntry} array (rendered as one untitled section) and/or
|
|
9
|
+
* {@link HonuaLegendSection} groups with optional titles.
|
|
10
|
+
* - **Derive mode** (the headline) — set the `layer` attribute to a style
|
|
11
|
+
* layer id; the element parses the layer's categorical color paint
|
|
12
|
+
* expression into entries via {@link deriveLegendEntries}. See
|
|
13
|
+
* `legend-derive.ts` for the supported expression shapes (literal color,
|
|
14
|
+
* `match` on a `["get", <attr>]` input, simple-equality `case`, numeric
|
|
15
|
+
* `step`); anything else fails gracefully — the element keeps rendering
|
|
16
|
+
* its explicit sections and exposes the failure on `deriveError`.
|
|
17
|
+
* Both modes compose: explicit sections render first, then the derived
|
|
18
|
+
* section.
|
|
19
|
+
*
|
|
20
|
+
* ## Wiring
|
|
21
|
+
* - `element.map = map` (any MapLibre `Map`) or `element.connect(map)`;
|
|
22
|
+
* - declaratively via `for="<honua-map id>"` — same idiom as
|
|
23
|
+
* `<honua-basemap-switcher>` (resolves `.map` from the referenced element
|
|
24
|
+
* and listens for `honua-map-ready`).
|
|
25
|
+
*
|
|
26
|
+
* ## Reactivity
|
|
27
|
+
* - `refresh()` re-derives and re-renders on demand;
|
|
28
|
+
* - with the `auto-refresh` attribute, the element subscribes to the map's
|
|
29
|
+
* `styledata` event while connected and refreshes automatically (style
|
|
30
|
+
* edits, layers added later, visibility toggles).
|
|
31
|
+
*
|
|
32
|
+
* ## Attributes
|
|
33
|
+
* - `for` — id of the map-providing element.
|
|
34
|
+
* - `layer` — style layer id to derive entries from.
|
|
35
|
+
* - `layer-title` — optional title rendered above the derived section.
|
|
36
|
+
* - `heading` — optional heading rendered above the whole legend.
|
|
37
|
+
* - `follow-layer-visibility` — boolean; hide a section while its source
|
|
38
|
+
* layer's `visibility` layout property is `"none"` (sections carry the
|
|
39
|
+
* derived `layer` id or their own `layer` field).
|
|
40
|
+
* - `auto-refresh` — boolean; see Reactivity.
|
|
41
|
+
*
|
|
42
|
+
* ## CSS parts
|
|
43
|
+
* `root`, `heading`, `section`, `section-title`, `row`, `swatch`, `label`.
|
|
44
|
+
* Structural CSS only — theme via `::part()`.
|
|
45
|
+
*
|
|
46
|
+
* ## Accessibility
|
|
47
|
+
* Rows are real list items (`<ul>`/`<li>`); swatches are `aria-hidden`
|
|
48
|
+
* presentation, with the text labels carrying the meaning.
|
|
49
|
+
*
|
|
50
|
+
* Note: the `web-components` entry also registers a (controller-driven)
|
|
51
|
+
* `honua-legend` element. Both registrations are guarded with an if-missing
|
|
52
|
+
* check, so whichever entry is imported first owns the tag; import
|
|
53
|
+
* `@honua/sdk-js/controls` first to use this element.
|
|
54
|
+
*/
|
|
55
|
+
import { HTMLElementBase, escapeAttribute, escapeHtml, listenForHonuaMapReady, resolveHonuaMapFromContext, } from "./element-utils.js";
|
|
56
|
+
import { HonuaLegendDeriveError, deriveLegendEntries } from "./legend-derive.js";
|
|
57
|
+
/**
|
|
58
|
+
* Custom element implementing the legend. Registered as `honua-legend` by
|
|
59
|
+
* `defineHonuaControls` (which runs automatically on import of the controls
|
|
60
|
+
* entry when a `customElements` registry exists).
|
|
61
|
+
*/
|
|
62
|
+
export class HonuaLegendElement extends HTMLElementBase {
|
|
63
|
+
static get observedAttributes() {
|
|
64
|
+
return ["for", "layer", "layer-title", "heading", "follow-layer-visibility", "auto-refresh"];
|
|
65
|
+
}
|
|
66
|
+
#map;
|
|
67
|
+
#explicitSections = [];
|
|
68
|
+
#derivedEntries;
|
|
69
|
+
#deriveError;
|
|
70
|
+
#connected = false;
|
|
71
|
+
#disposeMapReadyListener;
|
|
72
|
+
#styledataListener;
|
|
73
|
+
/** The MapLibre map this legend reads from (derive mode and visibility coupling). */
|
|
74
|
+
get map() {
|
|
75
|
+
return this.#map;
|
|
76
|
+
}
|
|
77
|
+
set map(map) {
|
|
78
|
+
if (this.#map === map)
|
|
79
|
+
return;
|
|
80
|
+
this.#unsubscribeStyledata();
|
|
81
|
+
this.#map = map;
|
|
82
|
+
this.refresh();
|
|
83
|
+
this.#subscribeStyledata();
|
|
84
|
+
}
|
|
85
|
+
/** Wires the legend to a MapLibre map. Equivalent to setting `.map`. */
|
|
86
|
+
connect(map) {
|
|
87
|
+
this.map = map;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Explicit legend content. Accepts a flat {@link HonuaLegendEntry} array
|
|
91
|
+
* (one untitled section), {@link HonuaLegendSection} groups, or a mix;
|
|
92
|
+
* the getter returns the normalized sections. Invalid items are dropped.
|
|
93
|
+
*/
|
|
94
|
+
get entries() {
|
|
95
|
+
return this.#explicitSections;
|
|
96
|
+
}
|
|
97
|
+
set entries(value) {
|
|
98
|
+
this.#explicitSections = normalizeSections(value);
|
|
99
|
+
this.render();
|
|
100
|
+
}
|
|
101
|
+
/** Style layer id used by derive mode. Reflects the `layer` attribute. */
|
|
102
|
+
get layer() {
|
|
103
|
+
return this.#attr("layer") ?? undefined;
|
|
104
|
+
}
|
|
105
|
+
set layer(value) {
|
|
106
|
+
if (typeof this.setAttribute !== "function")
|
|
107
|
+
return;
|
|
108
|
+
if (value === undefined)
|
|
109
|
+
this.removeAttribute?.("layer");
|
|
110
|
+
else
|
|
111
|
+
this.setAttribute("layer", value);
|
|
112
|
+
}
|
|
113
|
+
/** Hide sections whose source layer is hidden. Reflects `follow-layer-visibility`. */
|
|
114
|
+
get followLayerVisibility() {
|
|
115
|
+
return this.#hasAttr("follow-layer-visibility");
|
|
116
|
+
}
|
|
117
|
+
set followLayerVisibility(value) {
|
|
118
|
+
this.#setBooleanAttr("follow-layer-visibility", value);
|
|
119
|
+
}
|
|
120
|
+
/** Refresh automatically on the map's `styledata` event. Reflects `auto-refresh`. */
|
|
121
|
+
get autoRefresh() {
|
|
122
|
+
return this.#hasAttr("auto-refresh");
|
|
123
|
+
}
|
|
124
|
+
set autoRefresh(value) {
|
|
125
|
+
this.#setBooleanAttr("auto-refresh", value);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Why the last derive attempt failed (message of the underlying
|
|
129
|
+
* {@link HonuaLegendDeriveError}), or `undefined` while derive mode is
|
|
130
|
+
* succeeding or inactive.
|
|
131
|
+
*/
|
|
132
|
+
get deriveError() {
|
|
133
|
+
return this.#deriveError;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* The sections the legend renders: explicit sections followed by the
|
|
137
|
+
* derived section (when derive mode is active and succeeded).
|
|
138
|
+
*/
|
|
139
|
+
get sections() {
|
|
140
|
+
const layerId = this.layer;
|
|
141
|
+
if (!this.#derivedEntries || !layerId)
|
|
142
|
+
return this.#explicitSections;
|
|
143
|
+
const title = this.#attr("layer-title");
|
|
144
|
+
return [
|
|
145
|
+
...this.#explicitSections,
|
|
146
|
+
{ ...(title !== null ? { title } : {}), layer: layerId, entries: this.#derivedEntries },
|
|
147
|
+
];
|
|
148
|
+
}
|
|
149
|
+
/** Re-derives entries from the map (when in derive mode) and re-renders. */
|
|
150
|
+
refresh() {
|
|
151
|
+
this.#derive();
|
|
152
|
+
this.render();
|
|
153
|
+
}
|
|
154
|
+
attributeChangedCallback(name, _oldValue, newValue) {
|
|
155
|
+
if (name === "for") {
|
|
156
|
+
this.#resolveMapFromContext();
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (name === "layer" || name === "layer-title") {
|
|
160
|
+
this.refresh();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (name === "auto-refresh") {
|
|
164
|
+
if (newValue === null)
|
|
165
|
+
this.#unsubscribeStyledata();
|
|
166
|
+
else
|
|
167
|
+
this.#subscribeStyledata();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
// "heading" / "follow-layer-visibility" only change the rendering.
|
|
171
|
+
this.render();
|
|
172
|
+
}
|
|
173
|
+
connectedCallback() {
|
|
174
|
+
this.#connected = true;
|
|
175
|
+
this.#ensureShadowRoot();
|
|
176
|
+
this.#listenForMapReady();
|
|
177
|
+
this.#resolveMapFromContext();
|
|
178
|
+
this.#subscribeStyledata();
|
|
179
|
+
this.refresh();
|
|
180
|
+
}
|
|
181
|
+
disconnectedCallback() {
|
|
182
|
+
this.#connected = false;
|
|
183
|
+
this.#disposeMapReadyListener?.();
|
|
184
|
+
this.#disposeMapReadyListener = undefined;
|
|
185
|
+
this.#unsubscribeStyledata();
|
|
186
|
+
}
|
|
187
|
+
// ── derive mode ────────────────────────────────────────────
|
|
188
|
+
#derive() {
|
|
189
|
+
this.#derivedEntries = undefined;
|
|
190
|
+
const layerId = this.layer;
|
|
191
|
+
const map = this.#map;
|
|
192
|
+
if (!layerId || !map) {
|
|
193
|
+
this.#deriveError = undefined;
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
this.#derivedEntries = deriveLegendEntries(map, layerId);
|
|
198
|
+
this.#deriveError = undefined;
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
202
|
+
// A missing layer is usually transient (style still loading), so it is
|
|
203
|
+
// not warned about; real shape mismatches are warned once per message.
|
|
204
|
+
const transient = error instanceof HonuaLegendDeriveError && error.code === "layer-not-found";
|
|
205
|
+
if (!transient && message !== this.#deriveError && typeof console !== "undefined") {
|
|
206
|
+
console.warn(`<honua-legend> could not derive entries: ${message}`);
|
|
207
|
+
}
|
|
208
|
+
this.#deriveError = message;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// ── map wiring (matches the `for` + ready-event idiom) ──────
|
|
212
|
+
#listenForMapReady() {
|
|
213
|
+
if (this.#disposeMapReadyListener)
|
|
214
|
+
return;
|
|
215
|
+
this.#disposeMapReadyListener = listenForHonuaMapReady(this, (map) => {
|
|
216
|
+
const forId = this.#attr("for");
|
|
217
|
+
if (!forId && this.map)
|
|
218
|
+
return;
|
|
219
|
+
this.map = map;
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
#resolveMapFromContext() {
|
|
223
|
+
if (this.map)
|
|
224
|
+
return;
|
|
225
|
+
const map = resolveHonuaMapFromContext(this);
|
|
226
|
+
if (map)
|
|
227
|
+
this.map = map;
|
|
228
|
+
}
|
|
229
|
+
#subscribeStyledata() {
|
|
230
|
+
if (this.#styledataListener || !this.#connected || !this.autoRefresh)
|
|
231
|
+
return;
|
|
232
|
+
const map = this.#map;
|
|
233
|
+
if (!map || typeof map.on !== "function")
|
|
234
|
+
return;
|
|
235
|
+
const listener = () => this.refresh();
|
|
236
|
+
map.on("styledata", listener);
|
|
237
|
+
this.#styledataListener = listener;
|
|
238
|
+
}
|
|
239
|
+
#unsubscribeStyledata() {
|
|
240
|
+
const listener = this.#styledataListener;
|
|
241
|
+
if (!listener)
|
|
242
|
+
return;
|
|
243
|
+
this.#styledataListener = undefined;
|
|
244
|
+
this.#map?.off?.("styledata", listener);
|
|
245
|
+
}
|
|
246
|
+
// ── rendering ──────────────────────────────────────────────
|
|
247
|
+
#ensureShadowRoot() {
|
|
248
|
+
if (!this.shadowRoot && typeof this.attachShadow === "function") {
|
|
249
|
+
this.attachShadow({ mode: "open" });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
render() {
|
|
253
|
+
const root = this.shadowRoot;
|
|
254
|
+
if (!root)
|
|
255
|
+
return;
|
|
256
|
+
const heading = this.#attr("heading");
|
|
257
|
+
root.innerHTML = `
|
|
258
|
+
<style>${structuralStyles()}</style>
|
|
259
|
+
<div part="root" class="root">
|
|
260
|
+
${heading ? `<p part="heading" class="heading">${escapeHtml(heading)}</p>` : ""}
|
|
261
|
+
${this.sections.map((section) => this.#renderSection(section)).join("")}
|
|
262
|
+
</div>
|
|
263
|
+
`;
|
|
264
|
+
}
|
|
265
|
+
#renderSection(section) {
|
|
266
|
+
const hidden = this.#sectionHidden(section);
|
|
267
|
+
return `
|
|
268
|
+
<section part="section" class="section"${hidden ? " hidden" : ""}${section.layer ? ` data-layer="${escapeAttribute(section.layer)}"` : ""}>
|
|
269
|
+
${section.title ? `<p part="section-title" class="section-title">${escapeHtml(section.title)}</p>` : ""}
|
|
270
|
+
<ul class="rows">
|
|
271
|
+
${section.entries.map((entry) => renderRow(entry)).join("")}
|
|
272
|
+
</ul>
|
|
273
|
+
</section>
|
|
274
|
+
`;
|
|
275
|
+
}
|
|
276
|
+
#sectionHidden(section) {
|
|
277
|
+
if (!this.followLayerVisibility || !section.layer)
|
|
278
|
+
return false;
|
|
279
|
+
return this.#map?.getLayoutProperty?.(section.layer, "visibility") === "none";
|
|
280
|
+
}
|
|
281
|
+
// ── attribute helpers (safe under Node test stubs) ──────────
|
|
282
|
+
#attr(name) {
|
|
283
|
+
return typeof this.getAttribute === "function" ? this.getAttribute(name) : null;
|
|
284
|
+
}
|
|
285
|
+
#hasAttr(name) {
|
|
286
|
+
if (typeof this.hasAttribute === "function")
|
|
287
|
+
return this.hasAttribute(name);
|
|
288
|
+
return this.#attr(name) !== null;
|
|
289
|
+
}
|
|
290
|
+
#setBooleanAttr(name, value) {
|
|
291
|
+
if (typeof this.setAttribute !== "function")
|
|
292
|
+
return;
|
|
293
|
+
if (value)
|
|
294
|
+
this.setAttribute(name, "");
|
|
295
|
+
else
|
|
296
|
+
this.removeAttribute?.(name);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
function normalizeSections(value) {
|
|
300
|
+
const sections = [];
|
|
301
|
+
let loose = [];
|
|
302
|
+
const flushLoose = () => {
|
|
303
|
+
if (loose.length > 0)
|
|
304
|
+
sections.push({ entries: loose });
|
|
305
|
+
loose = [];
|
|
306
|
+
};
|
|
307
|
+
for (const item of value ?? []) {
|
|
308
|
+
if (isSection(item)) {
|
|
309
|
+
flushLoose();
|
|
310
|
+
const entries = item.entries.filter(isEntry).map(normalizeEntry);
|
|
311
|
+
sections.push({
|
|
312
|
+
...(typeof item.title === "string" ? { title: item.title } : {}),
|
|
313
|
+
...(typeof item.layer === "string" ? { layer: item.layer } : {}),
|
|
314
|
+
entries,
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
else if (isEntry(item)) {
|
|
318
|
+
loose.push(normalizeEntry(item));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
flushLoose();
|
|
322
|
+
return sections;
|
|
323
|
+
}
|
|
324
|
+
function isSection(item) {
|
|
325
|
+
return typeof item === "object" && item !== null && Array.isArray(item.entries);
|
|
326
|
+
}
|
|
327
|
+
function isEntry(item) {
|
|
328
|
+
if (typeof item !== "object" || item === null)
|
|
329
|
+
return false;
|
|
330
|
+
const entry = item;
|
|
331
|
+
if (typeof entry.label !== "string")
|
|
332
|
+
return false;
|
|
333
|
+
if (typeof entry.color === "string")
|
|
334
|
+
return true;
|
|
335
|
+
return (typeof entry.color === "object" &&
|
|
336
|
+
entry.color !== null &&
|
|
337
|
+
(entry.color.fill === undefined || typeof entry.color.fill === "string") &&
|
|
338
|
+
(entry.color.outline === undefined || typeof entry.color.outline === "string"));
|
|
339
|
+
}
|
|
340
|
+
function normalizeEntry(entry) {
|
|
341
|
+
const shape = isSwatchShape(entry.shape) ? entry.shape : "fill";
|
|
342
|
+
return { label: entry.label, color: entry.color, shape };
|
|
343
|
+
}
|
|
344
|
+
function isSwatchShape(value) {
|
|
345
|
+
return value === "fill" || value === "line" || value === "circle";
|
|
346
|
+
}
|
|
347
|
+
function renderRow(entry) {
|
|
348
|
+
const fill = typeof entry.color === "string" ? entry.color : entry.color.fill;
|
|
349
|
+
const outline = typeof entry.color === "object" && entry.color !== null ? entry.color.outline : undefined;
|
|
350
|
+
const shape = entry.shape ?? "fill";
|
|
351
|
+
const swatchStyle = [
|
|
352
|
+
...(fill !== undefined ? [`--legend-fill:${fill}`] : []),
|
|
353
|
+
...(outline !== undefined ? [`--legend-outline:${outline}`] : []),
|
|
354
|
+
].join(";");
|
|
355
|
+
return `
|
|
356
|
+
<li part="row" class="row">
|
|
357
|
+
<span part="swatch" class="swatch swatch-${shape}" aria-hidden="true"${swatchStyle ? ` style="${escapeAttribute(swatchStyle)}"` : ""}></span>
|
|
358
|
+
<span part="label" class="label">${escapeHtml(entry.label)}</span>
|
|
359
|
+
</li>
|
|
360
|
+
`;
|
|
361
|
+
}
|
|
362
|
+
/** Structural-only styles; theme via `::part(root)`, `::part(row)`, `::part(swatch)`, ... */
|
|
363
|
+
function structuralStyles() {
|
|
364
|
+
return `
|
|
365
|
+
:host { display: block; }
|
|
366
|
+
.heading, .section-title { margin: 0; }
|
|
367
|
+
.section { margin: 0; }
|
|
368
|
+
.rows { list-style: none; margin: 0; padding: 0; }
|
|
369
|
+
.row { display: flex; align-items: center; gap: 0.5em; }
|
|
370
|
+
.swatch {
|
|
371
|
+
flex: none;
|
|
372
|
+
inline-size: 1em;
|
|
373
|
+
block-size: 1em;
|
|
374
|
+
box-sizing: border-box;
|
|
375
|
+
background: var(--legend-fill, transparent);
|
|
376
|
+
border: 1px solid var(--legend-outline, transparent);
|
|
377
|
+
}
|
|
378
|
+
.swatch-line { block-size: 3px; border: none; }
|
|
379
|
+
.swatch-circle { border-radius: 50%; }
|
|
380
|
+
`;
|
|
381
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `<honua-swipe-control>` — framework-free custom element implementing the
|
|
3
|
+
* dual-map "swipe"/compare trick (issue #279, candidate third control for the
|
|
4
|
+
* native kit, #274).
|
|
5
|
+
*
|
|
6
|
+
* Two MapLibre maps are stacked (the host positions them; the control does
|
|
7
|
+
* not own layout) and the control clips the **top** map against the **bottom**
|
|
8
|
+
* map along a draggable divider via CSS `clip-path`. Dragging the divider (or
|
|
9
|
+
* using the keyboard) reveals more or less of each map and emits a `change`
|
|
10
|
+
* event with the divider position.
|
|
11
|
+
*
|
|
12
|
+
* Like the other controls, this element imports nothing from `maplibre-gl` or
|
|
13
|
+
* the SDK core — it drives any MapLibre `Map` through the duck-typed
|
|
14
|
+
* {@link HonuaSwipeMap} interface (it only needs `getContainer()`), so the
|
|
15
|
+
* `@honua/sdk-js/controls` entry stays bundle-independent. Node imports are
|
|
16
|
+
* safe; the element no-ops without a DOM.
|
|
17
|
+
*
|
|
18
|
+
* ## Wiring
|
|
19
|
+
* - `element.topMap = map` / `element.bottomMap = map`, or
|
|
20
|
+
* `element.connect(topMap, bottomMap)`. The top map is the one that gets
|
|
21
|
+
* clipped; the bottom map shows through the revealed region.
|
|
22
|
+
*
|
|
23
|
+
* ## Attributes
|
|
24
|
+
* - `position` — divider position as a percentage 0–100 (default 50).
|
|
25
|
+
* - `orientation` — `"vertical"` (default) or `"horizontal"`.
|
|
26
|
+
* - `label` — accessible name of the divider (default "Compare maps").
|
|
27
|
+
*
|
|
28
|
+
* ## Events
|
|
29
|
+
* - `change` — `CustomEvent<HonuaSwipeChangeDetail>` (bubbles, composed)
|
|
30
|
+
* whenever the divider position changes: drag, keyboard, or programmatic
|
|
31
|
+
* `position` assignment.
|
|
32
|
+
*
|
|
33
|
+
* ## CSS parts
|
|
34
|
+
* - `divider` — the full-length divider line.
|
|
35
|
+
* - `handle` — the draggable grip on the divider.
|
|
36
|
+
*
|
|
37
|
+
* ## Accessibility
|
|
38
|
+
* The divider is an ARIA slider (`role="slider"`, `aria-valuenow/min/max`,
|
|
39
|
+
* `aria-orientation`) with arrow-key control (ArrowLeft/ArrowRight or
|
|
40
|
+
* ArrowUp/ArrowDown step by 1, Home/End jump to 0/100, with Shift = 10).
|
|
41
|
+
*
|
|
42
|
+
* @module
|
|
43
|
+
*/
|
|
44
|
+
import { HTMLElementBase } from "./element-utils.js";
|
|
45
|
+
import type { HonuaSwipeMap, HonuaSwipeOrientation } from "./types.js";
|
|
46
|
+
/**
|
|
47
|
+
* Custom element implementing the dual-map swipe/compare divider. Registered
|
|
48
|
+
* as `honua-swipe-control` by {@link defineHonuaSwipeControl} (which runs
|
|
49
|
+
* automatically on import when a `customElements` registry exists).
|
|
50
|
+
*/
|
|
51
|
+
export declare class HonuaSwipeControlElement extends HTMLElementBase {
|
|
52
|
+
#private;
|
|
53
|
+
static get observedAttributes(): string[];
|
|
54
|
+
/** The clipped (overlay) map. Reapplies the clip when assigned. */
|
|
55
|
+
get topMap(): HonuaSwipeMap | undefined;
|
|
56
|
+
set topMap(map: HonuaSwipeMap | undefined);
|
|
57
|
+
/** The underlying map revealed by the clip. */
|
|
58
|
+
get bottomMap(): HonuaSwipeMap | undefined;
|
|
59
|
+
set bottomMap(map: HonuaSwipeMap | undefined);
|
|
60
|
+
/** Wires both maps at once. The first map is clipped against the second. */
|
|
61
|
+
connect(topMap: HonuaSwipeMap, bottomMap?: HonuaSwipeMap): void;
|
|
62
|
+
/** Divider position as a percentage 0–100. Reflects the `position` attribute. */
|
|
63
|
+
get position(): number;
|
|
64
|
+
set position(value: number);
|
|
65
|
+
/** Divider orientation. Reflects the `orientation` attribute. */
|
|
66
|
+
get orientation(): HonuaSwipeOrientation;
|
|
67
|
+
set orientation(value: HonuaSwipeOrientation);
|
|
68
|
+
attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void;
|
|
69
|
+
connectedCallback(): void;
|
|
70
|
+
disconnectedCallback(): void;
|
|
71
|
+
protected render(): void;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Registers the swipe control custom element (`honua-swipe-control`). Invoked
|
|
75
|
+
* automatically on import when a global `customElements` registry is present;
|
|
76
|
+
* call explicitly when using a scoped registry. Skips the registration when
|
|
77
|
+
* the tag is already defined.
|
|
78
|
+
*/
|
|
79
|
+
export declare function defineHonuaSwipeControl(registry?: CustomElementRegistry): void;
|
|
80
|
+
//# sourceMappingURL=swipe-control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swipe-control.d.ts","sourceRoot":"","sources":["../../../src/controls/swipe-control.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,OAAO,EAAE,eAAe,EAA8B,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAA0B,aAAa,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAM/F;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,eAAe;;IAC3D,WAAkB,kBAAkB,IAAI,MAAM,EAAE,CAE/C;IASD,mEAAmE;IACnE,IAAW,MAAM,IAAI,aAAa,GAAG,SAAS,CAE7C;IAED,IAAW,MAAM,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,EAI/C;IAED,+CAA+C;IAC/C,IAAW,SAAS,IAAI,aAAa,GAAG,SAAS,CAEhD;IAED,IAAW,SAAS,CAAC,GAAG,EAAE,aAAa,GAAG,SAAS,EAElD;IAED,4EAA4E;IACrE,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,IAAI;IAKtE,iFAAiF;IACjF,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED,IAAW,QAAQ,CAAC,KAAK,EAAE,MAAM,EAEhC;IAED,iEAAiE;IACjE,IAAW,WAAW,IAAI,qBAAqB,CAE9C;IAED,IAAW,WAAW,CAAC,KAAK,EAAE,qBAAqB,EAGlD;IAEM,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAgB/F,iBAAiB,IAAI,IAAI;IAMzB,oBAAoB,IAAI,IAAI;IA4CnC,SAAS,CAAC,MAAM,IAAI,IAAI;CAoJzB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,wBAA2B,GAAG,IAAI,CAKjF"}
|