@honua/react 0.0.20-alpha.0 → 0.1.1-beta.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/contract/discovery.d.ts +231 -0
- package/contract/discovery.d.ts.map +1 -0
- package/contract/discovery.js +554 -0
- package/contract/edit-sketch.d.ts +8 -0
- package/contract/edit-sketch.d.ts.map +1 -1
- package/contract/edit-sketch.js +15 -0
- package/contract/edit-snapping.d.ts +160 -0
- package/contract/edit-snapping.d.ts.map +1 -0
- package/contract/edit-snapping.js +675 -0
- package/contract/generated/projjson-v0.7-crs-validator.d.ts +35 -0
- package/contract/generated/projjson-v0.7-crs-validator.d.ts.map +1 -0
- package/contract/generated/projjson-v0.7-crs-validator.js +3941 -0
- package/contract/index.d.ts +12 -1
- package/contract/index.d.ts.map +1 -1
- package/contract/index.js +4 -0
- package/contract/pmtiles.d.ts +193 -0
- package/contract/pmtiles.d.ts.map +1 -0
- package/contract/pmtiles.js +195 -0
- package/contract/protocol-module.d.ts +70 -0
- package/contract/protocol-module.d.ts.map +1 -0
- package/contract/protocol-module.js +1 -0
- package/contract/schema-envelope.d.ts +26 -0
- package/contract/schema-envelope.d.ts.map +1 -0
- package/contract/schema-envelope.js +25 -0
- package/contract/schema.d.ts +582 -0
- package/contract/schema.d.ts.map +1 -0
- package/contract/schema.js +2483 -0
- package/contract/source-capability-support.d.ts +6 -0
- package/contract/source-capability-support.d.ts.map +1 -0
- package/contract/source-capability-support.js +154 -0
- package/contract/source.d.ts +57 -15
- package/contract/source.d.ts.map +1 -1
- package/contract/source.js +368 -65
- package/contract/types.d.ts +171 -6
- package/contract/types.d.ts.map +1 -1
- package/contract/types.js +14 -14
- 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/bounded-json.d.ts +4 -0
- package/core/bounded-json.d.ts.map +1 -0
- package/core/bounded-json.js +38 -0
- package/core/cache-state.d.ts +9 -0
- package/core/cache-state.d.ts.map +1 -1
- package/core/cache-state.js +10 -0
- package/core/capabilities-xml.d.ts +33 -0
- package/core/capabilities-xml.d.ts.map +1 -0
- package/core/capabilities-xml.js +331 -0
- package/core/client.d.ts +35 -2
- package/core/client.d.ts.map +1 -1
- package/core/client.js +167 -29
- package/core/error-classifications.d.ts +153 -0
- package/core/error-classifications.d.ts.map +1 -0
- package/core/error-classifications.js +140 -0
- package/core/error-code-registry.d.ts +158 -0
- package/core/error-code-registry.d.ts.map +1 -0
- package/core/error-code-registry.js +143 -0
- package/core/error-envelope.d.ts +68 -0
- package/core/error-envelope.d.ts.map +1 -0
- package/core/error-envelope.js +357 -0
- package/core/errors.d.ts +73 -25
- package/core/errors.d.ts.map +1 -1
- package/core/errors.js +113 -46
- package/core/geoparquet-sql.d.ts +190 -0
- package/core/geoparquet-sql.d.ts.map +1 -0
- package/core/geoparquet-sql.js +368 -0
- package/core/odata-key-path.d.ts +12 -0
- package/core/odata-key-path.d.ts.map +1 -0
- package/core/odata-key-path.js +28 -0
- package/core/odata-write-codec.d.ts +66 -0
- package/core/odata-write-codec.d.ts.map +1 -0
- package/core/odata-write-codec.js +1083 -0
- package/core/odata.d.ts +59 -7
- package/core/odata.d.ts.map +1 -1
- package/core/odata.js +431 -99
- 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.map +1 -1
- package/core/ogc-features.js +35 -17
- package/core/ogc-maps.d.ts +7 -0
- package/core/ogc-maps.d.ts.map +1 -1
- package/core/ogc-maps.js +46 -7
- package/core/ogc-processes.d.ts +2 -1
- package/core/ogc-processes.d.ts.map +1 -1
- package/core/ogc-processes.js +33 -5
- package/core/ogc-records.d.ts +9 -0
- package/core/ogc-records.d.ts.map +1 -1
- package/core/ogc-records.js +78 -29
- package/core/ogc-tiles.d.ts +10 -1
- package/core/ogc-tiles.d.ts.map +1 -1
- package/core/ogc-tiles.js +56 -17
- package/core/path-utils.d.ts +9 -0
- package/core/path-utils.d.ts.map +1 -1
- package/core/path-utils.js +19 -0
- package/core/protocol-transport.d.ts +1 -0
- package/core/protocol-transport.d.ts.map +1 -1
- package/core/request-pipeline.d.ts.map +1 -1
- package/core/request-pipeline.js +1 -1
- package/core/spatial-filter.d.ts +8 -4
- package/core/spatial-filter.d.ts.map +1 -1
- package/core/spatial-filter.js +206 -16
- package/core/stac-static.d.ts +55 -0
- package/core/stac-static.d.ts.map +1 -0
- package/core/stac-static.js +386 -0
- package/core/stac.d.ts +12 -0
- package/core/stac.d.ts.map +1 -1
- package/core/stac.js +45 -15
- package/core/surfaces.d.ts +13 -0
- package/core/surfaces.d.ts.map +1 -1
- package/core/surfaces.js +127 -16
- package/core/types.d.ts +174 -7
- package/core/types.d.ts.map +1 -1
- package/core/wfs-capabilities.d.ts +12 -0
- package/core/wfs-capabilities.d.ts.map +1 -1
- package/core/wfs-capabilities.js +22 -3
- package/core/wfs.d.ts +13 -0
- package/core/wfs.d.ts.map +1 -1
- package/core/wfs.js +35 -5
- package/core/wms-capabilities.d.ts +56 -84
- package/core/wms-capabilities.d.ts.map +1 -1
- package/core/wms-capabilities.js +212 -509
- package/core/wmts-capabilities.d.ts +62 -62
- package/core/wmts-capabilities.d.ts.map +1 -1
- package/core/wmts-capabilities.js +224 -371
- package/esri-compat/editor.d.ts +8 -0
- package/esri-compat/editor.d.ts.map +1 -1
- package/esri-compat/editor.js +13 -0
- package/esri-compat/feature-layer.d.ts +2 -0
- package/esri-compat/feature-layer.d.ts.map +1 -1
- package/esri-compat/feature-layer.js +1 -0
- package/esri-compat/identity-manager.d.ts +43 -0
- package/esri-compat/identity-manager.d.ts.map +1 -1
- package/esri-compat/identity-manager.js +131 -1
- package/esri-compat/layer-list.d.ts +11 -0
- package/esri-compat/layer-list.d.ts.map +1 -1
- package/esri-compat/layer-list.js +49 -0
- package/esri-compat/legend.d.ts +10 -0
- package/esri-compat/legend.d.ts.map +1 -1
- package/esri-compat/legend.js +27 -0
- package/esri-compat/oauth-info.d.ts +15 -0
- package/esri-compat/oauth-info.d.ts.map +1 -1
- package/esri-compat/oauth-info.js +27 -0
- package/esri-compat/portal.d.ts +197 -0
- package/esri-compat/portal.d.ts.map +1 -0
- package/esri-compat/portal.js +251 -0
- package/esri-compat/renderer-objects.d.ts +40 -0
- package/esri-compat/renderer-objects.d.ts.map +1 -0
- package/esri-compat/renderer-objects.js +62 -0
- package/esri-compat/sketch.d.ts +43 -0
- package/esri-compat/sketch.d.ts.map +1 -1
- package/esri-compat/sketch.js +46 -0
- package/esri-compat/snapping.d.ts +43 -0
- package/esri-compat/snapping.d.ts.map +1 -0
- package/esri-compat/snapping.js +45 -0
- package/esri-compat/url.d.ts.map +1 -1
- package/esri-compat/url.js +1 -1
- package/esri-compat/widget-host.d.ts +84 -0
- package/esri-compat/widget-host.d.ts.map +1 -0
- package/esri-compat/widget-host.js +159 -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/generated-app/errors.d.ts +18 -2
- package/generated-app/errors.d.ts.map +1 -1
- package/generated-app/errors.js +44 -11
- package/map/automatic-mount-integration.d.ts +134 -0
- package/map/automatic-mount-integration.d.ts.map +1 -0
- package/map/automatic-mount-integration.js +305 -0
- package/map/automatic-source-strategy.d.ts +125 -0
- package/map/automatic-source-strategy.d.ts.map +1 -0
- package/map/automatic-source-strategy.js +494 -0
- package/map/data-to-map-bridge.d.ts +293 -0
- package/map/data-to-map-bridge.d.ts.map +1 -0
- package/map/data-to-map-bridge.js +817 -0
- package/map/geojson-projection.d.ts +33 -0
- package/map/geojson-projection.d.ts.map +1 -0
- package/map/geojson-projection.js +118 -0
- package/map/index.d.ts +14 -0
- package/map/index.d.ts.map +1 -1
- package/map/index.js +8 -0
- package/map/raster-source-spec.d.ts +30 -0
- package/map/raster-source-spec.d.ts.map +1 -0
- package/map/raster-source-spec.js +190 -0
- package/map/raster-source-strategy.d.ts +65 -0
- package/map/raster-source-strategy.d.ts.map +1 -0
- package/map/raster-source-strategy.js +232 -0
- package/map/source-to-maplibre.d.ts +91 -0
- package/map/source-to-maplibre.d.ts.map +1 -0
- package/map/source-to-maplibre.js +454 -0
- package/map/temporal-playback.d.ts +139 -0
- package/map/temporal-playback.d.ts.map +1 -0
- package/map/temporal-playback.js +247 -0
- package/package.json +19 -1
- package/query-planner/canonical.d.ts +7 -0
- package/query-planner/canonical.d.ts.map +1 -0
- package/query-planner/canonical.js +145 -0
- package/query-planner/cql2-json.d.ts +17 -0
- package/query-planner/cql2-json.d.ts.map +1 -0
- package/query-planner/cql2-json.js +646 -0
- package/query-planner/diagnostics.d.ts +35 -0
- package/query-planner/diagnostics.d.ts.map +1 -0
- package/query-planner/diagnostics.js +373 -0
- package/query-planner/duckdb.d.ts +79 -0
- package/query-planner/duckdb.d.ts.map +1 -0
- package/query-planner/duckdb.js +758 -0
- package/query-planner/execution-context.d.ts +5 -0
- package/query-planner/execution-context.d.ts.map +1 -0
- package/query-planner/execution-context.js +50 -0
- package/query-planner/executor.d.ts +5 -0
- package/query-planner/executor.d.ts.map +1 -0
- package/query-planner/executor.js +223 -0
- package/query-planner/geoservices.d.ts +91 -0
- package/query-planner/geoservices.d.ts.map +1 -0
- package/query-planner/geoservices.js +667 -0
- package/query-planner/grpc.d.ts +100 -0
- package/query-planner/grpc.d.ts.map +1 -0
- package/query-planner/grpc.js +736 -0
- package/query-planner/index.d.ts +44 -0
- package/query-planner/index.d.ts.map +1 -0
- package/query-planner/index.js +30 -0
- package/query-planner/ir.d.ts +20 -0
- package/query-planner/ir.d.ts.map +1 -0
- package/query-planner/ir.js +417 -0
- package/query-planner/local-aggregate.d.ts +5 -0
- package/query-planner/local-aggregate.d.ts.map +1 -0
- package/query-planner/local-aggregate.js +126 -0
- package/query-planner/odata.d.ts +48 -0
- package/query-planner/odata.d.ts.map +1 -0
- package/query-planner/odata.js +662 -0
- package/query-planner/ogc-compiler.d.ts +55 -0
- package/query-planner/ogc-compiler.d.ts.map +1 -0
- package/query-planner/ogc-compiler.js +480 -0
- package/query-planner/ogc-features.d.ts +53 -0
- package/query-planner/ogc-features.d.ts.map +1 -0
- package/query-planner/ogc-features.js +617 -0
- package/query-planner/planner.d.ts +17 -0
- package/query-planner/planner.d.ts.map +1 -0
- package/query-planner/planner.js +818 -0
- package/query-planner/resource.d.ts +94 -0
- package/query-planner/resource.d.ts.map +1 -0
- package/query-planner/resource.js +526 -0
- package/query-planner/semantic-canonical.d.ts +15 -0
- package/query-planner/semantic-canonical.d.ts.map +1 -0
- package/query-planner/semantic-canonical.js +62 -0
- package/query-planner/semantic-compat.d.ts +10 -0
- package/query-planner/semantic-compat.d.ts.map +1 -0
- package/query-planner/semantic-compat.js +35 -0
- package/query-planner/semantic-compiler.d.ts +64 -0
- package/query-planner/semantic-compiler.d.ts.map +1 -0
- package/query-planner/semantic-compiler.js +81 -0
- package/query-planner/semantic-literals.d.ts +30 -0
- package/query-planner/semantic-literals.d.ts.map +1 -0
- package/query-planner/semantic-literals.js +133 -0
- package/query-planner/semantic-types.d.ts +265 -0
- package/query-planner/semantic-types.d.ts.map +1 -0
- package/query-planner/semantic-types.js +1 -0
- package/query-planner/semantic.d.ts +54 -0
- package/query-planner/semantic.d.ts.map +1 -0
- package/query-planner/semantic.js +1421 -0
- package/query-planner/types.d.ts +560 -0
- package/query-planner/types.d.ts.map +1 -0
- package/query-planner/types.js +49 -0
- package/query-planner/wfs-semantic.d.ts +58 -0
- package/query-planner/wfs-semantic.d.ts.map +1 -0
- package/query-planner/wfs-semantic.js +547 -0
- package/query-planner/wfs.d.ts +6 -0
- package/query-planner/wfs.d.ts.map +1 -0
- package/query-planner/wfs.js +71 -0
- package/react/external-map.d.ts +67 -0
- package/react/external-map.d.ts.map +1 -0
- package/react/external-map.js +63 -0
- package/react/honua-map.d.ts.map +1 -1
- package/react/honua-map.js +3 -2
- package/react/honua-source-layer.d.ts +110 -0
- package/react/honua-source-layer.d.ts.map +1 -0
- package/react/honua-source-layer.js +101 -0
- package/react/hooks.d.ts +28 -0
- package/react/hooks.d.ts.map +1 -1
- package/react/hooks.js +26 -4
- package/react/index.d.ts +8 -0
- package/react/index.d.ts.map +1 -1
- package/react/index.js +5 -0
- package/react/query-cache.d.ts +26 -4
- package/react/query-cache.d.ts.map +1 -1
- package/react/query-cache.js +51 -8
- package/react/selection.d.ts +177 -0
- package/react/selection.d.ts.map +1 -0
- package/react/selection.js +0 -0
- package/react/use-mounted-source.d.ts +69 -0
- package/react/use-mounted-source.d.ts.map +1 -0
- package/react/use-mounted-source.js +346 -0
- package/runtime/edit-snapping.d.ts +107 -0
- package/runtime/edit-snapping.d.ts.map +1 -0
- package/runtime/edit-snapping.js +190 -0
- package/runtime/errors.d.ts +3 -2
- package/runtime/errors.d.ts.map +1 -1
- package/runtime/errors.js +19 -2
- package/runtime/index.d.ts +8 -2
- package/runtime/index.d.ts.map +1 -1
- package/runtime/index.js +4 -4
- package/runtime/load-package.d.ts.map +1 -1
- package/runtime/load-package.js +8 -0
- package/runtime/map-package-validation.d.ts +0 -13
- package/runtime/map-package-validation.d.ts.map +1 -1
- package/runtime/map-package-validation.js +0 -12
- package/runtime/map-package.d.ts +1 -1
- package/runtime/map-package.d.ts.map +1 -1
- package/runtime/maplibre-renderer.d.ts +41 -0
- package/runtime/maplibre-renderer.d.ts.map +1 -0
- package/runtime/maplibre-renderer.js +322 -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/query-tiles.d.ts +2 -1
- package/runtime/query-tiles.d.ts.map +1 -1
- package/runtime/query-tiles.js +6 -2
- package/runtime/source-bridge.d.ts +4 -4
- package/runtime/source-bridge.d.ts.map +1 -1
- package/runtime/source-bridge.js +36 -56
- package/runtime/style-interactions.d.ts +3 -2
- package/runtime/style-interactions.d.ts.map +1 -1
- package/runtime/style-interactions.js +11 -3
- package/runtime/terra-draw-sketch.d.ts +275 -0
- package/runtime/terra-draw-sketch.d.ts.map +1 -0
- package/runtime/terra-draw-sketch.js +404 -0
- package/source-capability-registry.d.ts +1 -0
- package/source-capability-registry.js +1 -0
- package/source-capability-types.d.ts +186 -0
- package/source-capability-types.js +7 -0
- package/style/index.d.ts +2 -0
- package/style/index.d.ts.map +1 -1
- package/style/index.js +2 -0
- package/style/renderers.d.ts +326 -0
- package/style/renderers.d.ts.map +1 -0
- package/style/renderers.js +517 -0
- package/webmap/convert-renderer.d.ts +24 -3
- package/webmap/convert-renderer.d.ts.map +1 -1
- package/webmap/convert-renderer.js +93 -112
- package/webmap/index.d.ts +1 -1
- package/webmap/index.d.ts.map +1 -1
- package/webmap/index.js +1 -1
package/esri-compat/editor.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { SnappingConfig } from "../contract/edit-snapping.js";
|
|
1
2
|
import { CompatEventBus } from "./event-bus.js";
|
|
3
|
+
import { type SnappingOptionsCompat } from "./snapping.js";
|
|
2
4
|
export type EditorWorkflowCompat = "create" | "update";
|
|
3
5
|
export interface EditorLayerInfoCompat {
|
|
4
6
|
layer?: unknown;
|
|
@@ -15,6 +17,7 @@ export interface EditorCompatOptions {
|
|
|
15
17
|
layerInfos?: readonly EditorLayerInfoCompat[];
|
|
16
18
|
allowedWorkflows?: readonly EditorWorkflowCompat[];
|
|
17
19
|
supportingWidgetDefaults?: Record<string, unknown>;
|
|
20
|
+
snappingOptions?: SnappingOptionsCompat;
|
|
18
21
|
}
|
|
19
22
|
export type EditorLoadStatusCompat = "not-loaded" | "loading" | "loaded";
|
|
20
23
|
export interface EditorHandleCompat {
|
|
@@ -31,8 +34,13 @@ export declare class EditorCompat {
|
|
|
31
34
|
supportingWidgetDefaults: Record<string, unknown>;
|
|
32
35
|
activeWorkflow: EditorWorkflowCompat | undefined;
|
|
33
36
|
selectedFeature: Record<string, unknown> | null;
|
|
37
|
+
snappingOptions: SnappingOptionsCompat;
|
|
34
38
|
private readonly watchListeners;
|
|
35
39
|
constructor(options?: EditorCompatOptions);
|
|
40
|
+
/** Replace the ArcGIS-shaped snapping options and notify watchers. */
|
|
41
|
+
setSnappingOptions(options: SnappingOptionsCompat): void;
|
|
42
|
+
/** The snapping options mapped onto the contract `SnappingConfig`. */
|
|
43
|
+
snappingConfig(): SnappingConfig;
|
|
36
44
|
load(): Promise<EditorCompat>;
|
|
37
45
|
when(callback?: (widget: EditorCompat) => void): Promise<EditorCompat>;
|
|
38
46
|
watch(propertyName: string, listener: (value: unknown) => void): EditorHandleCompat;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAmD,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAmD,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,KAAK,qBAAqB,EAAmC,MAAM,eAAe,CAAC;AAE5F,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IAC9C,gBAAgB,CAAC,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACnD,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,eAAe,CAAC,EAAE,qBAAqB,CAAC;CACzC;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qBAAa,YAAY;IACvB,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,SAAS,EAAE,OAAO,CAAC;IACnC,SAAgB,QAAQ,EAAE,cAAc,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,sBAAsB,CAAC;IACnC,UAAU,EAAE,qBAAqB,EAAE,CAAC;IACpC,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;IACzC,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,cAAc,EAAE,oBAAoB,GAAG,SAAS,CAAC;IACjD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChD,eAAe,EAAE,qBAAqB,CAAC;IAC9C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;gBAEzD,OAAO,GAAE,mBAAwB;IAepD,sEAAsE;IAC/D,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI;IAM/D,sEAAsE;IAC/D,cAAc,IAAI,cAAc;IAI1B,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAgB7B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ5E,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,kBAAkB;IAenF,yCAAyC,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;IAoBnE,qCAAqC,IAAI,OAAO;IAiBhD,gCAAgC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAY3E,yBAAyB,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IA0BrD,YAAY,IAAI,IAAI;IAapB,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,cAAc;CAUvB"}
|
package/esri-compat/editor.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CompatEventBus, resolveCompatEventBus, safeInvokeCompatListener } from "./event-bus.js";
|
|
2
|
+
import { snappingOptionsToSnappingConfig } from "./snapping.js";
|
|
2
3
|
export class EditorCompat {
|
|
3
4
|
view;
|
|
4
5
|
container;
|
|
@@ -10,6 +11,7 @@ export class EditorCompat {
|
|
|
10
11
|
supportingWidgetDefaults;
|
|
11
12
|
activeWorkflow;
|
|
12
13
|
selectedFeature;
|
|
14
|
+
snappingOptions;
|
|
13
15
|
watchListeners;
|
|
14
16
|
constructor(options = {}) {
|
|
15
17
|
this.view = options.view;
|
|
@@ -22,8 +24,19 @@ export class EditorCompat {
|
|
|
22
24
|
this.supportingWidgetDefaults = { ...(options.supportingWidgetDefaults ?? {}) };
|
|
23
25
|
this.activeWorkflow = undefined;
|
|
24
26
|
this.selectedFeature = null;
|
|
27
|
+
this.snappingOptions = { ...(options.snappingOptions ?? {}) };
|
|
25
28
|
this.watchListeners = new Map();
|
|
26
29
|
}
|
|
30
|
+
/** Replace the ArcGIS-shaped snapping options and notify watchers. */
|
|
31
|
+
setSnappingOptions(options) {
|
|
32
|
+
this.snappingOptions = { ...options };
|
|
33
|
+
this.notifyWatchers("snappingOptions", this.snappingOptions);
|
|
34
|
+
this.eventBus.emit("editor.snapping-options-changed", { options: this.snappingOptions }, this);
|
|
35
|
+
}
|
|
36
|
+
/** The snapping options mapped onto the contract `SnappingConfig`. */
|
|
37
|
+
snappingConfig() {
|
|
38
|
+
return snappingOptionsToSnappingConfig(this.snappingOptions);
|
|
39
|
+
}
|
|
27
40
|
async load() {
|
|
28
41
|
if (this.loaded) {
|
|
29
42
|
return this;
|
|
@@ -27,6 +27,8 @@ export interface FeatureLayerQueryOptions {
|
|
|
27
27
|
returnGeometry?: boolean;
|
|
28
28
|
method?: QueryMethod;
|
|
29
29
|
extraParams?: Record<string, string | number | boolean>;
|
|
30
|
+
/** Abort the in-flight query when the owning view or workflow is disposed. */
|
|
31
|
+
signal?: AbortSignal;
|
|
30
32
|
}
|
|
31
33
|
export type FeatureLayerQueryAllOptions = FeatureLayerQueryOptions & {
|
|
32
34
|
pageSize?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-layer.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/feature-layer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAEV,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,8BAA8B,EAC9B,WAAW,EACX,YAAY,EACZ,cAAc,EACd,6BAA6B,EAC7B,kBAAkB,EAClB,2BAA2B,EAC3B,6BAA6B,EAC7B,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAmD,MAAM,gBAAgB,CAAC;AAKjG,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-layer.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/feature-layer.ts"],"names":[],"mappings":"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"}
|
|
@@ -234,6 +234,7 @@ export class FeatureLayerCompat {
|
|
|
234
234
|
outFields: options.outFields ?? this.outFields,
|
|
235
235
|
returnGeometry: options.returnGeometry,
|
|
236
236
|
method: options.method,
|
|
237
|
+
signal: options.signal,
|
|
237
238
|
extraParams: timeParam ? { ...(options.extraParams ?? {}), time: timeParam } : options.extraParams,
|
|
238
239
|
});
|
|
239
240
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { HonuaAuthProvider } from "../core/types.js";
|
|
1
2
|
import { OAuthInfoCompat, type OAuthInfoCompatOptions } from "./oauth-info.js";
|
|
2
3
|
export interface IdentityCredentialCompat {
|
|
3
4
|
server: string;
|
|
@@ -11,9 +12,22 @@ export interface IdentityTokenRegistrationCompat {
|
|
|
11
12
|
expires?: number;
|
|
12
13
|
userId?: string;
|
|
13
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* A real OAuth2 engine backing a server in {@link IdentityManagerCompatStore}.
|
|
17
|
+
* Any built-in provider from `@honua/sdk-js/auth` (e.g. `oauth2(...)`) satisfies
|
|
18
|
+
* this: it is a {@link HonuaAuthProvider} with an optional interactive
|
|
19
|
+
* `signIn()`. Binding one makes `getCredential(url)` drive the actual PKCE /
|
|
20
|
+
* refresh flow (obtain a token, register it, return it) instead of only reading
|
|
21
|
+
* pre-seeded tokens — so migrated `IdentityManager.registerOAuthInfos(...)` +
|
|
22
|
+
* `IdentityManager.getCredential(...)` code paths work end to end.
|
|
23
|
+
*/
|
|
24
|
+
export interface IdentityManagerOAuth2Engine extends HonuaAuthProvider {
|
|
25
|
+
signIn?(): Promise<unknown>;
|
|
26
|
+
}
|
|
14
27
|
declare class IdentityManagerCompatStore {
|
|
15
28
|
private readonly oauthInfosInternal;
|
|
16
29
|
private readonly credentialsInternal;
|
|
30
|
+
private readonly engines;
|
|
17
31
|
constructor();
|
|
18
32
|
get oauthInfos(): readonly OAuthInfoCompat[];
|
|
19
33
|
get credentials(): readonly IdentityCredentialCompat[];
|
|
@@ -21,9 +35,38 @@ declare class IdentityManagerCompatStore {
|
|
|
21
35
|
registerToken(token: IdentityTokenRegistrationCompat): void;
|
|
22
36
|
findCredential(url: string): IdentityCredentialCompat | undefined;
|
|
23
37
|
checkSignInStatus(url: string): Promise<IdentityCredentialCompat>;
|
|
38
|
+
/**
|
|
39
|
+
* Bind a real OAuth2 engine (e.g. `oauth2(...)` from `@honua/sdk-js/auth`) to
|
|
40
|
+
* a server URL. Once bound, {@link getCredential} for a URL under that server
|
|
41
|
+
* drives the engine's silent-refresh / interactive sign-in flow instead of
|
|
42
|
+
* only reading a pre-registered token.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```ts
|
|
46
|
+
* import { oauth2 } from "@honua/sdk-js/auth";
|
|
47
|
+
* import { identityManager, OAuthInfoCompat } from "@honua/sdk-js/esri-compat";
|
|
48
|
+
*
|
|
49
|
+
* const info = new OAuthInfoCompat({ appId: "app", portalUrl: "https://portal.example" });
|
|
50
|
+
* identityManager.registerOAuthInfos([info]);
|
|
51
|
+
* identityManager.registerOAuth2Engine(
|
|
52
|
+
* info.portalUrl,
|
|
53
|
+
* oauth2(info.toOAuth2Config({ redirectUri: `${location.origin}/callback` })),
|
|
54
|
+
* );
|
|
55
|
+
* const credential = await identityManager.getCredential("https://portal.example/sharing/rest");
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
registerOAuth2Engine(server: string, engine: IdentityManagerOAuth2Engine): void;
|
|
59
|
+
/**
|
|
60
|
+
* Resolve a credential for `url`. Returns a valid pre-registered token when
|
|
61
|
+
* one exists; otherwise, if a real OAuth2 engine is bound for the server,
|
|
62
|
+
* drives it (silent refresh, or interactive `signIn()` when the engine throws
|
|
63
|
+
* `interaction_required`), registers the resulting token, and returns it.
|
|
64
|
+
*/
|
|
24
65
|
getCredential(url: string): Promise<IdentityCredentialCompat>;
|
|
25
66
|
destroyCredentials(): void;
|
|
26
67
|
reset(): void;
|
|
68
|
+
private findEngine;
|
|
69
|
+
private resolveThroughEngine;
|
|
27
70
|
private findCredentialEntry;
|
|
28
71
|
}
|
|
29
72
|
export declare const identityManager: IdentityManagerCompatStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity-manager.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/identity-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,cAAM,0BAA0B;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6B;;
|
|
1
|
+
{"version":3,"file":"identity-manager.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/identity-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,2BAA4B,SAAQ,iBAAiB;IACpE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7B;AAOD,cAAM,0BAA0B;IAC9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA6B;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;;IAQxC,IAAW,UAAU,IAAI,SAAS,eAAe,EAAE,CAElD;IAED,IAAW,WAAW,IAAI,SAAS,wBAAwB,EAAE,CAE5D;IAEM,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,GAAG,sBAAsB,CAAC,EAAE,GAAG,IAAI;IAOtF,aAAa,CAAC,KAAK,EAAE,+BAA+B,GAAG,IAAI;IA6B3D,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS;IAQ3D,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAW9E;;;;;;;;;;;;;;;;;;;OAmBG;IACI,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,GAAG,IAAI;IAWtF;;;;;OAKG;IACU,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAgBnE,kBAAkB,IAAI,IAAI;IAI1B,KAAK,IAAI,IAAI;IAMpB,OAAO,CAAC,UAAU;YAqBJ,oBAAoB;IAyBlC,OAAO,CAAC,mBAAmB;CAsB5B;AAED,eAAO,MAAM,eAAe,4BAAmC,CAAC"}
|
|
@@ -2,9 +2,11 @@ import { OAuthInfoCompat } from "./oauth-info.js";
|
|
|
2
2
|
class IdentityManagerCompatStore {
|
|
3
3
|
oauthInfosInternal;
|
|
4
4
|
credentialsInternal;
|
|
5
|
+
engines;
|
|
5
6
|
constructor() {
|
|
6
7
|
this.oauthInfosInternal = [];
|
|
7
8
|
this.credentialsInternal = [];
|
|
9
|
+
this.engines = [];
|
|
8
10
|
}
|
|
9
11
|
get oauthInfos() {
|
|
10
12
|
return this.oauthInfosInternal.map((info) => info.clone());
|
|
@@ -60,8 +62,52 @@ class IdentityManagerCompatStore {
|
|
|
60
62
|
}
|
|
61
63
|
return { ...credential };
|
|
62
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Bind a real OAuth2 engine (e.g. `oauth2(...)` from `@honua/sdk-js/auth`) to
|
|
67
|
+
* a server URL. Once bound, {@link getCredential} for a URL under that server
|
|
68
|
+
* drives the engine's silent-refresh / interactive sign-in flow instead of
|
|
69
|
+
* only reading a pre-registered token.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* import { oauth2 } from "@honua/sdk-js/auth";
|
|
74
|
+
* import { identityManager, OAuthInfoCompat } from "@honua/sdk-js/esri-compat";
|
|
75
|
+
*
|
|
76
|
+
* const info = new OAuthInfoCompat({ appId: "app", portalUrl: "https://portal.example" });
|
|
77
|
+
* identityManager.registerOAuthInfos([info]);
|
|
78
|
+
* identityManager.registerOAuth2Engine(
|
|
79
|
+
* info.portalUrl,
|
|
80
|
+
* oauth2(info.toOAuth2Config({ redirectUri: `${location.origin}/callback` })),
|
|
81
|
+
* );
|
|
82
|
+
* const credential = await identityManager.getCredential("https://portal.example/sharing/rest");
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
registerOAuth2Engine(server, engine) {
|
|
86
|
+
const normalized = normalizeServerUrl(server) ?? server;
|
|
87
|
+
const existing = this.engines.findIndex((bound) => (normalizeServerUrl(bound.server) ?? bound.server) === normalized);
|
|
88
|
+
if (existing >= 0) {
|
|
89
|
+
this.engines.splice(existing, 1);
|
|
90
|
+
}
|
|
91
|
+
this.engines.push({ server, engine });
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Resolve a credential for `url`. Returns a valid pre-registered token when
|
|
95
|
+
* one exists; otherwise, if a real OAuth2 engine is bound for the server,
|
|
96
|
+
* drives it (silent refresh, or interactive `signIn()` when the engine throws
|
|
97
|
+
* `interaction_required`), registers the resulting token, and returns it.
|
|
98
|
+
*/
|
|
63
99
|
async getCredential(url) {
|
|
64
|
-
|
|
100
|
+
const existing = this.findCredentialEntry(url);
|
|
101
|
+
if (existing && !isCredentialExpired(existing)) {
|
|
102
|
+
return { ...existing };
|
|
103
|
+
}
|
|
104
|
+
const engine = this.findEngine(url);
|
|
105
|
+
if (!engine) {
|
|
106
|
+
return this.checkSignInStatus(url);
|
|
107
|
+
}
|
|
108
|
+
const credential = await this.resolveThroughEngine(engine, url);
|
|
109
|
+
this.registerToken(credential);
|
|
110
|
+
return { ...credential };
|
|
65
111
|
}
|
|
66
112
|
destroyCredentials() {
|
|
67
113
|
this.credentialsInternal.length = 0;
|
|
@@ -69,6 +115,53 @@ class IdentityManagerCompatStore {
|
|
|
69
115
|
reset() {
|
|
70
116
|
this.oauthInfosInternal.length = 0;
|
|
71
117
|
this.credentialsInternal.length = 0;
|
|
118
|
+
this.engines.length = 0;
|
|
119
|
+
}
|
|
120
|
+
findEngine(url) {
|
|
121
|
+
const normalized = normalizeServerUrl(url);
|
|
122
|
+
if (!normalized) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
for (let index = this.engines.length - 1; index >= 0; index -= 1) {
|
|
126
|
+
const bound = this.engines[index];
|
|
127
|
+
if (!bound) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const server = normalizeServerUrl(bound.server);
|
|
131
|
+
if (!server) {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
if (normalized === server || normalized.startsWith(`${server}/`)) {
|
|
135
|
+
return bound;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return undefined;
|
|
139
|
+
}
|
|
140
|
+
async resolveThroughEngine(bound, url) {
|
|
141
|
+
const context = { reason: "initial", forceRefresh: false };
|
|
142
|
+
let credentials;
|
|
143
|
+
try {
|
|
144
|
+
credentials = await bound.engine.getCredentials(context);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
if (isInteractionRequired(error) && bound.engine.signIn) {
|
|
148
|
+
await bound.engine.signIn();
|
|
149
|
+
credentials = await bound.engine.getCredentials(context);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
const token = tokenFromCredentials(credentials);
|
|
156
|
+
if (!token) {
|
|
157
|
+
throw new Error("OAuth2 engine did not return a usable token for the requested server.");
|
|
158
|
+
}
|
|
159
|
+
const expires = expiresFromCredentials(credentials);
|
|
160
|
+
return {
|
|
161
|
+
server: bound.server,
|
|
162
|
+
token,
|
|
163
|
+
...(expires !== undefined ? { expires } : {}),
|
|
164
|
+
};
|
|
72
165
|
}
|
|
73
166
|
findCredentialEntry(url) {
|
|
74
167
|
const normalized = normalizeServerUrl(url);
|
|
@@ -113,3 +206,40 @@ function isSameCredentialServer(left, right) {
|
|
|
113
206
|
}
|
|
114
207
|
return left === right;
|
|
115
208
|
}
|
|
209
|
+
function isInteractionRequired(error) {
|
|
210
|
+
return (typeof error === "object" &&
|
|
211
|
+
error !== null &&
|
|
212
|
+
error.name === "HonuaAuthError" &&
|
|
213
|
+
error.code === "interaction_required");
|
|
214
|
+
}
|
|
215
|
+
function tokenFromCredentials(credentials) {
|
|
216
|
+
if (!credentials) {
|
|
217
|
+
return undefined;
|
|
218
|
+
}
|
|
219
|
+
if (typeof credentials === "string") {
|
|
220
|
+
return credentials.length > 0 ? credentials : undefined;
|
|
221
|
+
}
|
|
222
|
+
if (credentials.bearerToken) {
|
|
223
|
+
return credentials.bearerToken;
|
|
224
|
+
}
|
|
225
|
+
if (credentials.authorization) {
|
|
226
|
+
// Strip a leading "Bearer " scheme so the stored token matches what Esri
|
|
227
|
+
// clients expect in the `token` field.
|
|
228
|
+
return credentials.authorization.replace(/^Bearer\s+/i, "");
|
|
229
|
+
}
|
|
230
|
+
return credentials.apiKey;
|
|
231
|
+
}
|
|
232
|
+
function expiresFromCredentials(credentials) {
|
|
233
|
+
if (!credentials || typeof credentials === "string" || credentials.expiresAt === undefined) {
|
|
234
|
+
return undefined;
|
|
235
|
+
}
|
|
236
|
+
const { expiresAt } = credentials;
|
|
237
|
+
if (expiresAt instanceof Date) {
|
|
238
|
+
return Number.isFinite(expiresAt.getTime()) ? expiresAt.getTime() : undefined;
|
|
239
|
+
}
|
|
240
|
+
if (typeof expiresAt === "number") {
|
|
241
|
+
return Number.isFinite(expiresAt) ? expiresAt : undefined;
|
|
242
|
+
}
|
|
243
|
+
const parsed = Date.parse(expiresAt);
|
|
244
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
245
|
+
}
|
|
@@ -58,6 +58,15 @@ export declare class LayerListCompat {
|
|
|
58
58
|
private readonly listenersByType;
|
|
59
59
|
private readonly watchListeners;
|
|
60
60
|
private subscriptions;
|
|
61
|
+
/**
|
|
62
|
+
* When a `container` is supplied and a DOM is present, the shim delegates
|
|
63
|
+
* its rendering to the app-platform `<honua-layer-list>` component through
|
|
64
|
+
* {@link HonuaWidgetHost} (issue #493 REQ-004): rows come from the shim's
|
|
65
|
+
* item model, and checkbox toggles route back through {@link toggle}.
|
|
66
|
+
* Headless usage keeps the state-model-only behavior.
|
|
67
|
+
*/
|
|
68
|
+
private readonly widgetHost;
|
|
69
|
+
private widgetHostBound;
|
|
61
70
|
constructor(options?: LayerListCompatOptions);
|
|
62
71
|
load(): Promise<LayerListCompat>;
|
|
63
72
|
when(callback?: (widget: LayerListCompat) => void): Promise<LayerListCompat>;
|
|
@@ -68,6 +77,8 @@ export declare class LayerListCompat {
|
|
|
68
77
|
triggerAction(actionId: string, layerOrId?: unknown | string | number): boolean;
|
|
69
78
|
on<TType extends LayerListEventTypeCompat>(type: TType, listener: (event: LayerListEventPayloadByType[TType]) => void): LayerListHandleCompat;
|
|
70
79
|
destroy(): void;
|
|
80
|
+
/** Pushes the current items into the delegated `<honua-layer-list>` element. */
|
|
81
|
+
private renderWidgetHost;
|
|
71
82
|
private findLayer;
|
|
72
83
|
private findItem;
|
|
73
84
|
private emit;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer-list.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/layer-list.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAIf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"layer-list.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/layer-list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CompatEventBus, resolveCompatEventBus, safeInvokeCompatListener, } from "./event-bus.js";
|
|
2
|
+
import { HonuaWidgetHost } from "./widget-host.js";
|
|
2
3
|
export class LayerListCompat {
|
|
3
4
|
view;
|
|
4
5
|
map;
|
|
@@ -13,6 +14,15 @@ export class LayerListCompat {
|
|
|
13
14
|
listenersByType;
|
|
14
15
|
watchListeners;
|
|
15
16
|
subscriptions;
|
|
17
|
+
/**
|
|
18
|
+
* When a `container` is supplied and a DOM is present, the shim delegates
|
|
19
|
+
* its rendering to the app-platform `<honua-layer-list>` component through
|
|
20
|
+
* {@link HonuaWidgetHost} (issue #493 REQ-004): rows come from the shim's
|
|
21
|
+
* item model, and checkbox toggles route back through {@link toggle}.
|
|
22
|
+
* Headless usage keeps the state-model-only behavior.
|
|
23
|
+
*/
|
|
24
|
+
widgetHost;
|
|
25
|
+
widgetHostBound = false;
|
|
16
26
|
constructor(options = {}) {
|
|
17
27
|
this.view = options.view;
|
|
18
28
|
this.map = options.map ?? extractMapFromView(options.view);
|
|
@@ -27,6 +37,8 @@ export class LayerListCompat {
|
|
|
27
37
|
this.listenersByType = new Map();
|
|
28
38
|
this.watchListeners = new Map();
|
|
29
39
|
this.subscriptions = [];
|
|
40
|
+
const widgetHost = options.container != null ? new HonuaWidgetHost("honua-layer-list", options.container) : undefined;
|
|
41
|
+
this.widgetHost = widgetHost?.available ? widgetHost : undefined;
|
|
30
42
|
if (this.autoRefresh) {
|
|
31
43
|
this.subscriptions.push(this.eventBus.on("map.layer-added", () => this.refresh()));
|
|
32
44
|
this.subscriptions.push(this.eventBus.on("map.layer-removed", () => this.refresh()));
|
|
@@ -89,6 +101,7 @@ export class LayerListCompat {
|
|
|
89
101
|
const updateEvent = { itemCount: this.items.length };
|
|
90
102
|
this.eventBus.emit("layer-list.updated", updateEvent, this);
|
|
91
103
|
this.emit("updated", updateEvent);
|
|
104
|
+
void this.renderWidgetHost();
|
|
92
105
|
return this.items;
|
|
93
106
|
}
|
|
94
107
|
toggle(layerOrId, visible) {
|
|
@@ -158,6 +171,26 @@ export class LayerListCompat {
|
|
|
158
171
|
}
|
|
159
172
|
this.listenersByType.clear();
|
|
160
173
|
this.watchListeners.clear();
|
|
174
|
+
this.widgetHost?.destroy();
|
|
175
|
+
}
|
|
176
|
+
/** Pushes the current items into the delegated `<honua-layer-list>` element. */
|
|
177
|
+
async renderWidgetHost() {
|
|
178
|
+
const host = this.widgetHost;
|
|
179
|
+
if (!host)
|
|
180
|
+
return;
|
|
181
|
+
const rows = flattenLayerListItems(this.items);
|
|
182
|
+
await host.update((element) => {
|
|
183
|
+
if (!this.widgetHostBound) {
|
|
184
|
+
this.widgetHostBound = true;
|
|
185
|
+
element.addEventListener("honua-layer-visibility-change", (event) => {
|
|
186
|
+
const detail = event.detail;
|
|
187
|
+
if (detail?.layerId === undefined || typeof detail.visible !== "boolean")
|
|
188
|
+
return;
|
|
189
|
+
this.toggle(detail.layerId, detail.visible);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
element.layers = rows;
|
|
193
|
+
});
|
|
161
194
|
}
|
|
162
195
|
findLayer(layerOrId) {
|
|
163
196
|
const rootLayers = getRootLayers(this.map);
|
|
@@ -196,6 +229,22 @@ export class LayerListCompat {
|
|
|
196
229
|
}
|
|
197
230
|
}
|
|
198
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* Flattens the compat item tree (depth-first) into the flat row model the
|
|
234
|
+
* `<honua-layer-list>` component renders; child rows are indented in their
|
|
235
|
+
* title. Layer ids are stringified so `toggle(detail.layerId, ...)` resolves
|
|
236
|
+
* them again via {@link findLayerById}.
|
|
237
|
+
*/
|
|
238
|
+
function flattenLayerListItems(items, depth = 0) {
|
|
239
|
+
return items.flatMap((item, index) => [
|
|
240
|
+
{
|
|
241
|
+
id: item.id !== undefined ? String(item.id) : `layer-${depth}-${index}`,
|
|
242
|
+
title: `${" ".repeat(depth)}${item.title}`,
|
|
243
|
+
visible: item.visible,
|
|
244
|
+
},
|
|
245
|
+
...flattenLayerListItems(item.children, depth + 1),
|
|
246
|
+
]);
|
|
247
|
+
}
|
|
199
248
|
function extractMapFromView(view) {
|
|
200
249
|
if (!isRecord(view)) {
|
|
201
250
|
return undefined;
|
package/esri-compat/legend.d.ts
CHANGED
|
@@ -40,12 +40,22 @@ export declare class LegendCompat {
|
|
|
40
40
|
private readonly watchListeners;
|
|
41
41
|
private subscriptions;
|
|
42
42
|
private refreshRevision;
|
|
43
|
+
/**
|
|
44
|
+
* When a `container` is supplied and a DOM is present, the shim delegates
|
|
45
|
+
* its rendering to the app-platform `<honua-legend>` component through
|
|
46
|
+
* {@link HonuaWidgetHost} (issue #493 REQ-004). Headless usage (no
|
|
47
|
+
* container / no DOM / the standalone esri-compat split package) keeps the
|
|
48
|
+
* state-model-only behavior.
|
|
49
|
+
*/
|
|
50
|
+
private readonly widgetHost;
|
|
43
51
|
constructor(options?: LegendCompatOptions);
|
|
44
52
|
load(): Promise<LegendCompat>;
|
|
45
53
|
when(callback?: (widget: LegendCompat) => void): Promise<LegendCompat>;
|
|
46
54
|
watch(propertyName: string, listener: (value: unknown) => void): LegendHandleCompat;
|
|
47
55
|
refresh(): Promise<readonly LegendLayerGroupCompat[]>;
|
|
48
56
|
destroy(): void;
|
|
57
|
+
/** Pushes the current items into the delegated `<honua-legend>` element. */
|
|
58
|
+
private renderWidgetHost;
|
|
49
59
|
private resolveLegendLayers;
|
|
50
60
|
private nextRefreshRevision;
|
|
51
61
|
private notifyWatchers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"legend.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/legend.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAIf,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"legend.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/legend.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EAIf,MAAM,gBAAgB,CAAC;AAGxB,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qBAAa,YAAY;IACvB,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,GAAG,EAAE,OAAO,CAAC;IAC7B,SAAgB,SAAS,EAAE,OAAO,CAAC;IACnC,SAAgB,QAAQ,EAAE,cAAc,CAAC;IACzC,SAAgB,aAAa,EAAE,OAAO,CAAC;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,sBAAsB,CAAC;IACnC,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAEvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiC;IAChE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAU;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;IAC5E,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,eAAe,CAAS;IAChC;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;gBAEtC,OAAO,GAAE,mBAAwB;IAiCvC,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAiB7B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAQ5E,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,kBAAkB;IAe7E,OAAO,IAAI,OAAO,CAAC,SAAS,sBAAsB,EAAE,CAAC;IAqC3D,OAAO,IAAI,IAAI;IAQtB,4EAA4E;YAC9D,gBAAgB;IAe9B,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,mBAAmB;IAK3B,OAAO,CAAC,cAAc;CAUvB"}
|
package/esri-compat/legend.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CompatEventBus, resolveCompatEventBus, safeInvokeCompatListener, } from "./event-bus.js";
|
|
2
|
+
import { HonuaWidgetHost } from "./widget-host.js";
|
|
2
3
|
export class LegendCompat {
|
|
3
4
|
view;
|
|
4
5
|
map;
|
|
@@ -13,6 +14,14 @@ export class LegendCompat {
|
|
|
13
14
|
watchListeners;
|
|
14
15
|
subscriptions;
|
|
15
16
|
refreshRevision;
|
|
17
|
+
/**
|
|
18
|
+
* When a `container` is supplied and a DOM is present, the shim delegates
|
|
19
|
+
* its rendering to the app-platform `<honua-legend>` component through
|
|
20
|
+
* {@link HonuaWidgetHost} (issue #493 REQ-004). Headless usage (no
|
|
21
|
+
* container / no DOM / the standalone esri-compat split package) keeps the
|
|
22
|
+
* state-model-only behavior.
|
|
23
|
+
*/
|
|
24
|
+
widgetHost;
|
|
16
25
|
constructor(options = {}) {
|
|
17
26
|
this.view = options.view;
|
|
18
27
|
this.map = options.map ?? extractMapFromView(options.view);
|
|
@@ -28,6 +37,8 @@ export class LegendCompat {
|
|
|
28
37
|
this.watchListeners = new Map();
|
|
29
38
|
this.subscriptions = [];
|
|
30
39
|
this.refreshRevision = 0;
|
|
40
|
+
const widgetHost = options.container != null ? new HonuaWidgetHost("honua-legend", options.container) : undefined;
|
|
41
|
+
this.widgetHost = widgetHost?.available ? widgetHost : undefined;
|
|
31
42
|
if (this.autoRefresh) {
|
|
32
43
|
this.subscriptions.push(this.eventBus.on("map.layer-added", () => void this.refresh()));
|
|
33
44
|
this.subscriptions.push(this.eventBus.on("map.layer-removed", () => void this.refresh()));
|
|
@@ -108,6 +119,7 @@ export class LegendCompat {
|
|
|
108
119
|
this.items = groups;
|
|
109
120
|
this.notifyWatchers("items", this.items);
|
|
110
121
|
this.eventBus.emit("legend.updated", { layerCount: groups.length }, this);
|
|
122
|
+
void this.renderWidgetHost();
|
|
111
123
|
return this.items;
|
|
112
124
|
}
|
|
113
125
|
destroy() {
|
|
@@ -115,6 +127,21 @@ export class LegendCompat {
|
|
|
115
127
|
subscription.remove();
|
|
116
128
|
}
|
|
117
129
|
this.watchListeners.clear();
|
|
130
|
+
this.widgetHost?.destroy();
|
|
131
|
+
}
|
|
132
|
+
/** Pushes the current items into the delegated `<honua-legend>` element. */
|
|
133
|
+
async renderWidgetHost() {
|
|
134
|
+
const host = this.widgetHost;
|
|
135
|
+
if (!host)
|
|
136
|
+
return;
|
|
137
|
+
const items = this.items.flatMap((group, groupIndex) => group.entries.map((entry, entryIndex) => ({
|
|
138
|
+
id: `${groupIndex}-${entryIndex}`,
|
|
139
|
+
label: entry.label,
|
|
140
|
+
...(entry.imageData ? { iconUrl: `data:${entry.contentType ?? "image/png"};base64,${entry.imageData}` } : {}),
|
|
141
|
+
})));
|
|
142
|
+
await host.update((element) => {
|
|
143
|
+
element.items = items;
|
|
144
|
+
});
|
|
118
145
|
}
|
|
119
146
|
resolveLegendLayers() {
|
|
120
147
|
if (this.explicitLayers) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { OAuth2Config } from "../core/auth/types.js";
|
|
1
2
|
export interface OAuthInfoCompatOptions {
|
|
2
3
|
appId?: string;
|
|
3
4
|
portalUrl?: string;
|
|
@@ -7,6 +8,13 @@ export interface OAuthInfoCompatOptions {
|
|
|
7
8
|
authNamespace?: string;
|
|
8
9
|
preserveUrlHash?: boolean;
|
|
9
10
|
}
|
|
11
|
+
/** Overrides accepted by {@link OAuthInfoCompat.toOAuth2Config}. */
|
|
12
|
+
export interface OAuthInfoToConfigOptions extends Partial<Omit<OAuth2Config, "clientId">> {
|
|
13
|
+
/** Redirect URI receiving the authorization code (required in browsers). */
|
|
14
|
+
redirectUri?: string;
|
|
15
|
+
/** Override the `clientId` (defaults to this info's `appId`). */
|
|
16
|
+
clientId?: string;
|
|
17
|
+
}
|
|
10
18
|
export type OAuthInfoLoadStatusCompat = "not-loaded" | "loading" | "loaded";
|
|
11
19
|
export interface OAuthInfoHandleCompat {
|
|
12
20
|
remove(): void;
|
|
@@ -27,6 +35,13 @@ export declare class OAuthInfoCompat {
|
|
|
27
35
|
when(callback?: (info: OAuthInfoCompat) => void): Promise<OAuthInfoCompat>;
|
|
28
36
|
watch(propertyName: string, listener: (value: unknown) => void): OAuthInfoHandleCompat;
|
|
29
37
|
update(options: OAuthInfoCompatOptions): void;
|
|
38
|
+
/**
|
|
39
|
+
* Derive an {@link OAuth2Config} from this Esri-style OAuth info so it can back
|
|
40
|
+
* a real `oauth2(...)` provider from `@honua/sdk-js/auth`. Endpoints default to
|
|
41
|
+
* the ArcGIS Portal shape (`<portalUrl>/sharing/rest/oauth2/authorize` and
|
|
42
|
+
* `/token`); pass explicit endpoints or a `redirectUri` via `overrides`.
|
|
43
|
+
*/
|
|
44
|
+
toOAuth2Config(overrides?: OAuthInfoToConfigOptions): OAuth2Config;
|
|
30
45
|
clone(): OAuthInfoCompat;
|
|
31
46
|
toJSON(): OAuthInfoCompatOptions;
|
|
32
47
|
destroy(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-info.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/oauth-info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"oauth-info.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/oauth-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,oBAAoB,GAAG,MAAM,CAAC;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,oEAAoE;AACpE,MAAM,WAAW,wBAAyB,SAAQ,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IACvF,4EAA4E;IAC5E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,yBAAyB,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IACpC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qBAAa,eAAe;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,yBAAyB,CAAC;IACtC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,eAAe,EAAE,OAAO,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;gBAEzD,OAAO,GAAE,sBAA2B;IAc1C,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAchC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC;IAQhF,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,qBAAqB;IAetF,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAgCpD;;;;;OAKG;IACI,cAAc,CAAC,SAAS,GAAE,wBAA6B,GAAG,YAAY;IAsBtE,KAAK,IAAI,eAAe;IAIxB,MAAM,IAAI,sBAAsB;IAYhC,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,cAAc;CAUvB"}
|