@honua/sdk-esri-compat 0.0.6-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/README.md +5 -0
- package/contract/edit-session.d.ts +203 -0
- package/contract/edit-session.d.ts.map +1 -0
- package/contract/edit-session.js +717 -0
- package/contract/index.d.ts +20 -0
- package/contract/index.d.ts.map +1 -0
- package/contract/index.js +15 -0
- package/contract/jobs.d.ts +115 -0
- package/contract/jobs.d.ts.map +1 -0
- package/contract/jobs.js +22 -0
- package/contract/source.d.ts +138 -0
- package/contract/source.d.ts.map +1 -0
- package/contract/source.js +3364 -0
- package/contract/spatial-aggregation.d.ts +312 -0
- package/contract/spatial-aggregation.d.ts.map +1 -0
- package/contract/spatial-aggregation.js +196 -0
- package/contract/types.d.ts +542 -0
- package/contract/types.d.ts.map +1 -0
- package/contract/types.js +171 -0
- package/core/batch.d.ts +37 -0
- package/core/batch.d.ts.map +1 -0
- package/core/batch.js +78 -0
- package/core/cache-state.d.ts +76 -0
- package/core/cache-state.d.ts.map +1 -0
- package/core/cache-state.js +84 -0
- package/core/client.d.ts +289 -0
- package/core/client.d.ts.map +1 -0
- package/core/client.js +2625 -0
- package/core/errors.d.ts +68 -0
- package/core/errors.d.ts.map +1 -0
- package/core/errors.js +116 -0
- package/core/grpc-adapter.d.ts +23 -0
- package/core/grpc-adapter.d.ts.map +1 -0
- package/core/grpc-adapter.js +704 -0
- package/core/odata.d.ts +347 -0
- package/core/odata.d.ts.map +1 -0
- package/core/odata.js +837 -0
- package/core/ogc-conformance.d.ts +35 -0
- package/core/ogc-conformance.d.ts.map +1 -0
- package/core/ogc-conformance.js +121 -0
- package/core/ogc-maps.d.ts +45 -0
- package/core/ogc-maps.d.ts.map +1 -0
- package/core/ogc-maps.js +53 -0
- package/core/ogc-processes.d.ts +92 -0
- package/core/ogc-processes.d.ts.map +1 -0
- package/core/ogc-processes.js +325 -0
- package/core/ogc-tiles.d.ts +55 -0
- package/core/ogc-tiles.d.ts.map +1 -0
- package/core/ogc-tiles.js +81 -0
- package/core/pbf-decoder.d.ts +28 -0
- package/core/pbf-decoder.d.ts.map +1 -0
- package/core/pbf-decoder.js +627 -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/spatial-filter.d.ts +93 -0
- package/core/spatial-filter.d.ts.map +1 -0
- package/core/spatial-filter.js +153 -0
- package/core/stac.d.ts +43 -0
- package/core/stac.d.ts.map +1 -0
- package/core/stac.js +116 -0
- package/core/surfaces.d.ts +464 -0
- package/core/surfaces.d.ts.map +1 -0
- package/core/surfaces.js +1322 -0
- package/core/types.d.ts +1238 -0
- package/core/types.d.ts.map +1 -0
- package/core/types.js +13 -0
- package/core/wfs-capabilities.d.ts +143 -0
- package/core/wfs-capabilities.d.ts.map +1 -0
- package/core/wfs-capabilities.js +478 -0
- package/core/wfs-filter.d.ts +118 -0
- package/core/wfs-filter.d.ts.map +1 -0
- package/core/wfs-filter.js +586 -0
- package/core/wfs.d.ts +219 -0
- package/core/wfs.d.ts.map +1 -0
- package/core/wfs.js +406 -0
- package/core/wms-capabilities.d.ts +110 -0
- package/core/wms-capabilities.d.ts.map +1 -0
- package/core/wms-capabilities.js +566 -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 +108 -0
- package/core/wms.d.ts.map +1 -0
- package/core/wms.js +182 -0
- package/core/wmts-capabilities.d.ts +82 -0
- package/core/wmts-capabilities.d.ts.map +1 -0
- package/core/wmts-capabilities.js +409 -0
- package/core/wmts.d.ts +80 -0
- package/core/wmts.d.ts.map +1 -0
- package/core/wmts.js +173 -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 +66 -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-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 +655 -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/graphic.d.ts +46 -0
- package/esri-compat/graphic.d.ts.map +1 -0
- package/esri-compat/graphic.js +103 -0
- package/esri-compat/graphics-layer.d.ts +49 -0
- package/esri-compat/graphics-layer.d.ts.map +1 -0
- package/esri-compat/graphics-layer.js +185 -0
- package/esri-compat/group-layer.d.ts +48 -0
- package/esri-compat/group-layer.d.ts.map +1 -0
- package/esri-compat/group-layer.js +212 -0
- package/esri-compat/identify.d.ts +71 -0
- package/esri-compat/identify.d.ts.map +1 -0
- package/esri-compat/identify.js +299 -0
- package/esri-compat/identity-manager.d.ts +31 -0
- package/esri-compat/identity-manager.d.ts.map +1 -0
- package/esri-compat/identity-manager.js +115 -0
- package/esri-compat/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 +704 -0
- package/esri-compat/map-view.d.ts +315 -0
- package/esri-compat/map-view.d.ts.map +1 -0
- package/esri-compat/map-view.js +1110 -0
- package/esri-compat/map.d.ts +47 -0
- package/esri-compat/map.d.ts.map +1 -0
- package/esri-compat/map.js +209 -0
- package/esri-compat/measurement-2d.d.ts +61 -0
- package/esri-compat/measurement-2d.d.ts.map +1 -0
- package/esri-compat/measurement-2d.js +184 -0
- package/esri-compat/measurement.d.ts +45 -0
- package/esri-compat/measurement.d.ts.map +1 -0
- package/esri-compat/measurement.js +193 -0
- package/esri-compat/oauth-info.d.ts +35 -0
- package/esri-compat/oauth-info.d.ts.map +1 -0
- package/esri-compat/oauth-info.js +115 -0
- package/esri-compat/picture-marker-symbol.d.ts +35 -0
- package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
- package/esri-compat/picture-marker-symbol.js +126 -0
- package/esri-compat/point.d.ts +31 -0
- package/esri-compat/point.d.ts.map +1 -0
- package/esri-compat/point.js +102 -0
- package/esri-compat/polygon.d.ts +31 -0
- package/esri-compat/polygon.d.ts.map +1 -0
- package/esri-compat/polygon.js +107 -0
- package/esri-compat/polyline.d.ts +31 -0
- package/esri-compat/polyline.d.ts.map +1 -0
- package/esri-compat/polyline.js +107 -0
- package/esri-compat/popup-template.d.ts +55 -0
- package/esri-compat/popup-template.d.ts.map +1 -0
- package/esri-compat/popup-template.js +128 -0
- package/esri-compat/popup.d.ts +54 -0
- package/esri-compat/popup.d.ts.map +1 -0
- package/esri-compat/popup.js +312 -0
- package/esri-compat/print.d.ts +47 -0
- package/esri-compat/print.d.ts.map +1 -0
- package/esri-compat/print.js +105 -0
- package/esri-compat/query.d.ts +46 -0
- package/esri-compat/query.d.ts.map +1 -0
- package/esri-compat/query.js +119 -0
- package/esri-compat/reactive-utils.d.ts +23 -0
- package/esri-compat/reactive-utils.d.ts.map +1 -0
- package/esri-compat/reactive-utils.js +178 -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 +167 -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 +12 -0
- package/esri-compat/url.d.ts.map +1 -0
- package/esri-compat/url.js +54 -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/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/index.d.ts +130 -0
- package/index.js +65 -0
- package/package.json +22 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { CompatEventBus } from "./event-bus.js";
|
|
2
|
+
export interface ExpandCompatOptions {
|
|
3
|
+
view?: unknown;
|
|
4
|
+
container?: unknown;
|
|
5
|
+
content?: unknown;
|
|
6
|
+
expanded?: boolean;
|
|
7
|
+
mode?: "auto" | "floating" | "drawer";
|
|
8
|
+
group?: string;
|
|
9
|
+
eventBus?: CompatEventBus;
|
|
10
|
+
}
|
|
11
|
+
export type ExpandLoadStatusCompat = "not-loaded" | "loading" | "loaded";
|
|
12
|
+
export interface ExpandHandleCompat {
|
|
13
|
+
remove(): void;
|
|
14
|
+
}
|
|
15
|
+
export declare class ExpandCompat {
|
|
16
|
+
readonly view: unknown;
|
|
17
|
+
readonly container: unknown;
|
|
18
|
+
readonly eventBus: CompatEventBus;
|
|
19
|
+
loaded: boolean;
|
|
20
|
+
loadStatus: ExpandLoadStatusCompat;
|
|
21
|
+
content: unknown;
|
|
22
|
+
expanded: boolean;
|
|
23
|
+
mode: "auto" | "floating" | "drawer";
|
|
24
|
+
group: string | undefined;
|
|
25
|
+
private readonly watchListeners;
|
|
26
|
+
constructor(options?: ExpandCompatOptions);
|
|
27
|
+
load(): Promise<ExpandCompat>;
|
|
28
|
+
when(callback?: (widget: ExpandCompat) => void): Promise<ExpandCompat>;
|
|
29
|
+
watch(propertyName: string, listener: (value: unknown) => void): ExpandHandleCompat;
|
|
30
|
+
expand(): void;
|
|
31
|
+
collapse(): void;
|
|
32
|
+
toggle(force?: boolean): boolean;
|
|
33
|
+
destroy(): void;
|
|
34
|
+
private notifyWatchers;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=expand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expand.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/expand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAmD,MAAM,gBAAgB,CAAC;AAEjG,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;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,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;gBAEzD,OAAO,GAAE,mBAAwB;IAavC,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,MAAM,IAAI,IAAI;IASd,QAAQ,IAAI,IAAI;IAShB,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;IAUhC,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,cAAc;CAUvB"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { CompatEventBus, resolveCompatEventBus, safeInvokeCompatListener } from "./event-bus.js";
|
|
2
|
+
export class ExpandCompat {
|
|
3
|
+
view;
|
|
4
|
+
container;
|
|
5
|
+
eventBus;
|
|
6
|
+
loaded;
|
|
7
|
+
loadStatus;
|
|
8
|
+
content;
|
|
9
|
+
expanded;
|
|
10
|
+
mode;
|
|
11
|
+
group;
|
|
12
|
+
watchListeners;
|
|
13
|
+
constructor(options = {}) {
|
|
14
|
+
this.view = options.view;
|
|
15
|
+
this.container = options.container;
|
|
16
|
+
this.eventBus = options.eventBus ?? resolveCompatEventBus(options.view) ?? new CompatEventBus();
|
|
17
|
+
this.loaded = false;
|
|
18
|
+
this.loadStatus = "not-loaded";
|
|
19
|
+
this.content = options.content;
|
|
20
|
+
this.expanded = options.expanded ?? false;
|
|
21
|
+
this.mode = options.mode ?? "auto";
|
|
22
|
+
this.group = options.group;
|
|
23
|
+
this.watchListeners = new Map();
|
|
24
|
+
}
|
|
25
|
+
async load() {
|
|
26
|
+
if (this.loaded) {
|
|
27
|
+
return this;
|
|
28
|
+
}
|
|
29
|
+
this.loadStatus = "loading";
|
|
30
|
+
this.notifyWatchers("loadStatus", this.loadStatus);
|
|
31
|
+
this.eventBus.emit("expand.loading", undefined, this);
|
|
32
|
+
this.loaded = true;
|
|
33
|
+
this.notifyWatchers("loaded", this.loaded);
|
|
34
|
+
this.loadStatus = "loaded";
|
|
35
|
+
this.notifyWatchers("loadStatus", this.loadStatus);
|
|
36
|
+
this.eventBus.emit("expand.loaded", undefined, this);
|
|
37
|
+
return this;
|
|
38
|
+
}
|
|
39
|
+
async when(callback) {
|
|
40
|
+
const widget = await this.load();
|
|
41
|
+
if (callback) {
|
|
42
|
+
callback(widget);
|
|
43
|
+
}
|
|
44
|
+
return widget;
|
|
45
|
+
}
|
|
46
|
+
watch(propertyName, listener) {
|
|
47
|
+
let listeners = this.watchListeners.get(propertyName);
|
|
48
|
+
if (!listeners) {
|
|
49
|
+
listeners = new Set();
|
|
50
|
+
this.watchListeners.set(propertyName, listeners);
|
|
51
|
+
}
|
|
52
|
+
listeners.add(listener);
|
|
53
|
+
return {
|
|
54
|
+
remove: () => {
|
|
55
|
+
listeners?.delete(listener);
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
expand() {
|
|
60
|
+
if (this.expanded) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
this.expanded = true;
|
|
64
|
+
this.notifyWatchers("expanded", this.expanded);
|
|
65
|
+
this.eventBus.emit("expand.changed", { expanded: true }, this);
|
|
66
|
+
}
|
|
67
|
+
collapse() {
|
|
68
|
+
if (!this.expanded) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this.expanded = false;
|
|
72
|
+
this.notifyWatchers("expanded", this.expanded);
|
|
73
|
+
this.eventBus.emit("expand.changed", { expanded: false }, this);
|
|
74
|
+
}
|
|
75
|
+
toggle(force) {
|
|
76
|
+
const next = force ?? !this.expanded;
|
|
77
|
+
if (next) {
|
|
78
|
+
this.expand();
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.collapse();
|
|
82
|
+
}
|
|
83
|
+
return this.expanded;
|
|
84
|
+
}
|
|
85
|
+
destroy() {
|
|
86
|
+
this.watchListeners.clear();
|
|
87
|
+
}
|
|
88
|
+
notifyWatchers(propertyName, value) {
|
|
89
|
+
const listeners = this.watchListeners.get(propertyName);
|
|
90
|
+
if (!listeners) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
for (const listener of listeners) {
|
|
94
|
+
safeInvokeCompatListener(listener, value);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export interface ExtentCompatOptions {
|
|
2
|
+
xmin?: number;
|
|
3
|
+
ymin?: number;
|
|
4
|
+
xmax?: number;
|
|
5
|
+
ymax?: number;
|
|
6
|
+
zmin?: number;
|
|
7
|
+
zmax?: number;
|
|
8
|
+
mmin?: number;
|
|
9
|
+
mmax?: number;
|
|
10
|
+
spatialReference?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export type ExtentLoadStatusCompat = "not-loaded" | "loading" | "loaded";
|
|
13
|
+
export interface ExtentHandleCompat {
|
|
14
|
+
remove(): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class ExtentCompat {
|
|
17
|
+
loaded: boolean;
|
|
18
|
+
loadStatus: ExtentLoadStatusCompat;
|
|
19
|
+
xmin: number;
|
|
20
|
+
ymin: number;
|
|
21
|
+
xmax: number;
|
|
22
|
+
ymax: number;
|
|
23
|
+
zmin: number | undefined;
|
|
24
|
+
zmax: number | undefined;
|
|
25
|
+
mmin: number | undefined;
|
|
26
|
+
mmax: number | undefined;
|
|
27
|
+
spatialReference: unknown;
|
|
28
|
+
private readonly watchListeners;
|
|
29
|
+
constructor(options?: ExtentCompatOptions);
|
|
30
|
+
load(): Promise<ExtentCompat>;
|
|
31
|
+
when(callback?: (extent: ExtentCompat) => void): Promise<ExtentCompat>;
|
|
32
|
+
watch(propertyName: string, listener: (value: unknown) => void): ExtentHandleCompat;
|
|
33
|
+
update(options: ExtentCompatOptions): void;
|
|
34
|
+
get center(): {
|
|
35
|
+
x: number;
|
|
36
|
+
y: number;
|
|
37
|
+
};
|
|
38
|
+
clone(): ExtentCompat;
|
|
39
|
+
toJSON(): ExtentCompatOptions;
|
|
40
|
+
destroy(): void;
|
|
41
|
+
private notifyWatchers;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=extent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extent.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/extent.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IACjC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qBAAa,YAAY;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,sBAAsB,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;gBAEzD,OAAO,GAAE,mBAAwB;IAevC,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAc7B,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,MAAM,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAwCjD,IAAW,MAAM,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAK5C;IAEM,KAAK,IAAI,YAAY;IAIrB,MAAM,IAAI,mBAAmB;IAc7B,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,cAAc;CAUvB"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { safeInvokeCompatListener } from "./event-bus.js";
|
|
2
|
+
export class ExtentCompat {
|
|
3
|
+
loaded;
|
|
4
|
+
loadStatus;
|
|
5
|
+
xmin;
|
|
6
|
+
ymin;
|
|
7
|
+
xmax;
|
|
8
|
+
ymax;
|
|
9
|
+
zmin;
|
|
10
|
+
zmax;
|
|
11
|
+
mmin;
|
|
12
|
+
mmax;
|
|
13
|
+
spatialReference;
|
|
14
|
+
watchListeners;
|
|
15
|
+
constructor(options = {}) {
|
|
16
|
+
this.loaded = false;
|
|
17
|
+
this.loadStatus = "not-loaded";
|
|
18
|
+
this.xmin = finiteNumber(options.xmin, 0);
|
|
19
|
+
this.ymin = finiteNumber(options.ymin, 0);
|
|
20
|
+
this.xmax = finiteNumber(options.xmax, 0);
|
|
21
|
+
this.ymax = finiteNumber(options.ymax, 0);
|
|
22
|
+
this.zmin = finiteNumberOrUndefined(options.zmin);
|
|
23
|
+
this.zmax = finiteNumberOrUndefined(options.zmax);
|
|
24
|
+
this.mmin = finiteNumberOrUndefined(options.mmin);
|
|
25
|
+
this.mmax = finiteNumberOrUndefined(options.mmax);
|
|
26
|
+
this.spatialReference = options.spatialReference;
|
|
27
|
+
this.watchListeners = new Map();
|
|
28
|
+
}
|
|
29
|
+
async load() {
|
|
30
|
+
if (this.loaded) {
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
this.loadStatus = "loading";
|
|
34
|
+
this.notifyWatchers("loadStatus", this.loadStatus);
|
|
35
|
+
this.loaded = true;
|
|
36
|
+
this.notifyWatchers("loaded", this.loaded);
|
|
37
|
+
this.loadStatus = "loaded";
|
|
38
|
+
this.notifyWatchers("loadStatus", this.loadStatus);
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
async when(callback) {
|
|
42
|
+
const extent = await this.load();
|
|
43
|
+
if (callback) {
|
|
44
|
+
callback(extent);
|
|
45
|
+
}
|
|
46
|
+
return extent;
|
|
47
|
+
}
|
|
48
|
+
watch(propertyName, listener) {
|
|
49
|
+
let listeners = this.watchListeners.get(propertyName);
|
|
50
|
+
if (!listeners) {
|
|
51
|
+
listeners = new Set();
|
|
52
|
+
this.watchListeners.set(propertyName, listeners);
|
|
53
|
+
}
|
|
54
|
+
listeners.add(listener);
|
|
55
|
+
return {
|
|
56
|
+
remove: () => {
|
|
57
|
+
listeners?.delete(listener);
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
update(options) {
|
|
62
|
+
if (options.xmin !== undefined) {
|
|
63
|
+
this.xmin = finiteNumber(options.xmin, this.xmin);
|
|
64
|
+
this.notifyWatchers("xmin", this.xmin);
|
|
65
|
+
}
|
|
66
|
+
if (options.ymin !== undefined) {
|
|
67
|
+
this.ymin = finiteNumber(options.ymin, this.ymin);
|
|
68
|
+
this.notifyWatchers("ymin", this.ymin);
|
|
69
|
+
}
|
|
70
|
+
if (options.xmax !== undefined) {
|
|
71
|
+
this.xmax = finiteNumber(options.xmax, this.xmax);
|
|
72
|
+
this.notifyWatchers("xmax", this.xmax);
|
|
73
|
+
}
|
|
74
|
+
if (options.ymax !== undefined) {
|
|
75
|
+
this.ymax = finiteNumber(options.ymax, this.ymax);
|
|
76
|
+
this.notifyWatchers("ymax", this.ymax);
|
|
77
|
+
}
|
|
78
|
+
if (options.zmin !== undefined) {
|
|
79
|
+
this.zmin = finiteNumberOrUndefined(options.zmin);
|
|
80
|
+
this.notifyWatchers("zmin", this.zmin);
|
|
81
|
+
}
|
|
82
|
+
if (options.zmax !== undefined) {
|
|
83
|
+
this.zmax = finiteNumberOrUndefined(options.zmax);
|
|
84
|
+
this.notifyWatchers("zmax", this.zmax);
|
|
85
|
+
}
|
|
86
|
+
if (options.mmin !== undefined) {
|
|
87
|
+
this.mmin = finiteNumberOrUndefined(options.mmin);
|
|
88
|
+
this.notifyWatchers("mmin", this.mmin);
|
|
89
|
+
}
|
|
90
|
+
if (options.mmax !== undefined) {
|
|
91
|
+
this.mmax = finiteNumberOrUndefined(options.mmax);
|
|
92
|
+
this.notifyWatchers("mmax", this.mmax);
|
|
93
|
+
}
|
|
94
|
+
if (options.spatialReference !== undefined) {
|
|
95
|
+
this.spatialReference = options.spatialReference;
|
|
96
|
+
this.notifyWatchers("spatialReference", this.spatialReference);
|
|
97
|
+
}
|
|
98
|
+
this.notifyWatchers("center", this.center);
|
|
99
|
+
}
|
|
100
|
+
get center() {
|
|
101
|
+
return {
|
|
102
|
+
x: (this.xmin + this.xmax) / 2,
|
|
103
|
+
y: (this.ymin + this.ymax) / 2,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
clone() {
|
|
107
|
+
return new ExtentCompat(this.toJSON());
|
|
108
|
+
}
|
|
109
|
+
toJSON() {
|
|
110
|
+
return {
|
|
111
|
+
xmin: this.xmin,
|
|
112
|
+
ymin: this.ymin,
|
|
113
|
+
xmax: this.xmax,
|
|
114
|
+
ymax: this.ymax,
|
|
115
|
+
zmin: this.zmin,
|
|
116
|
+
zmax: this.zmax,
|
|
117
|
+
mmin: this.mmin,
|
|
118
|
+
mmax: this.mmax,
|
|
119
|
+
spatialReference: this.spatialReference,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
destroy() {
|
|
123
|
+
this.watchListeners.clear();
|
|
124
|
+
}
|
|
125
|
+
notifyWatchers(propertyName, value) {
|
|
126
|
+
const listeners = this.watchListeners.get(propertyName);
|
|
127
|
+
if (!listeners) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
for (const listener of listeners) {
|
|
131
|
+
safeInvokeCompatListener(listener, value);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function finiteNumber(value, fallback) {
|
|
136
|
+
return typeof value === "number" && Number.isFinite(value) ? value : fallback;
|
|
137
|
+
}
|
|
138
|
+
function finiteNumberOrUndefined(value) {
|
|
139
|
+
return typeof value === "number" && Number.isFinite(value) ? value : undefined;
|
|
140
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { CompatEventBus } from "./event-bus.js";
|
|
2
|
+
export interface FeatureFormCompatOptions {
|
|
3
|
+
view?: unknown;
|
|
4
|
+
layer?: unknown;
|
|
5
|
+
container?: unknown;
|
|
6
|
+
feature?: unknown;
|
|
7
|
+
fieldConfig?: readonly unknown[];
|
|
8
|
+
groupDisplay?: string;
|
|
9
|
+
headingLevel?: number;
|
|
10
|
+
visibleElements?: unknown;
|
|
11
|
+
validationFunction?: FeatureFormValidationFn;
|
|
12
|
+
eventBus?: CompatEventBus;
|
|
13
|
+
}
|
|
14
|
+
export interface FeatureFormSubmitResultCompat {
|
|
15
|
+
valid: boolean;
|
|
16
|
+
values: Readonly<Record<string, unknown>>;
|
|
17
|
+
feature: unknown;
|
|
18
|
+
errors?: readonly FeatureFormFieldErrorCompat[];
|
|
19
|
+
}
|
|
20
|
+
export interface FeatureFormFieldErrorCompat {
|
|
21
|
+
fieldName: string;
|
|
22
|
+
errorMessage: string;
|
|
23
|
+
type: "required" | "range" | "pattern" | "custom";
|
|
24
|
+
}
|
|
25
|
+
export type FeatureFormValidationFn = (fieldName: string, value: unknown) => FeatureFormFieldErrorCompat | undefined;
|
|
26
|
+
export type FeatureFormLoadStatusCompat = "not-loaded" | "loading" | "loaded";
|
|
27
|
+
export interface FeatureFormHandleCompat {
|
|
28
|
+
remove(): void;
|
|
29
|
+
}
|
|
30
|
+
export declare class FeatureFormCompat {
|
|
31
|
+
readonly view: unknown;
|
|
32
|
+
readonly layer: unknown;
|
|
33
|
+
readonly container: unknown;
|
|
34
|
+
readonly eventBus: CompatEventBus;
|
|
35
|
+
loaded: boolean;
|
|
36
|
+
loadStatus: FeatureFormLoadStatusCompat;
|
|
37
|
+
feature: unknown;
|
|
38
|
+
fieldConfig: readonly unknown[];
|
|
39
|
+
groupDisplay: string | undefined;
|
|
40
|
+
headingLevel: number | undefined;
|
|
41
|
+
visibleElements: unknown;
|
|
42
|
+
validationFunction: FeatureFormValidationFn | undefined;
|
|
43
|
+
private readonly watchListeners;
|
|
44
|
+
constructor(options?: FeatureFormCompatOptions);
|
|
45
|
+
load(): Promise<FeatureFormCompat>;
|
|
46
|
+
when(callback?: (widget: FeatureFormCompat) => void): Promise<FeatureFormCompat>;
|
|
47
|
+
watch(propertyName: string, listener: (value: unknown) => void): FeatureFormHandleCompat;
|
|
48
|
+
setFeature(feature: unknown): void;
|
|
49
|
+
submit(values?: Readonly<Record<string, unknown>>): Promise<FeatureFormSubmitResultCompat>;
|
|
50
|
+
/**
|
|
51
|
+
* Runs validation against the provided values (or empty object)
|
|
52
|
+
* and returns any field errors.
|
|
53
|
+
*/
|
|
54
|
+
validate(values?: Readonly<Record<string, unknown>>): readonly FeatureFormFieldErrorCompat[];
|
|
55
|
+
/**
|
|
56
|
+
* Returns the current feature's attribute values, merged with any
|
|
57
|
+
* additional overrides. Useful for reading form state before submit.
|
|
58
|
+
*/
|
|
59
|
+
getValues(overrides?: Readonly<Record<string, unknown>>): Readonly<Record<string, unknown>>;
|
|
60
|
+
on(eventName: string, listener: (event: unknown) => void): FeatureFormHandleCompat;
|
|
61
|
+
destroy(): void;
|
|
62
|
+
private notifyWatchers;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=feature-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feature-form.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/feature-form.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { CompatEventBus, resolveCompatEventBus, safeInvokeCompatListener } from "./event-bus.js";
|
|
2
|
+
export class FeatureFormCompat {
|
|
3
|
+
view;
|
|
4
|
+
layer;
|
|
5
|
+
container;
|
|
6
|
+
eventBus;
|
|
7
|
+
loaded;
|
|
8
|
+
loadStatus;
|
|
9
|
+
feature;
|
|
10
|
+
fieldConfig;
|
|
11
|
+
groupDisplay;
|
|
12
|
+
headingLevel;
|
|
13
|
+
visibleElements;
|
|
14
|
+
validationFunction;
|
|
15
|
+
watchListeners;
|
|
16
|
+
constructor(options = {}) {
|
|
17
|
+
this.view = options.view;
|
|
18
|
+
this.layer = options.layer;
|
|
19
|
+
this.container = options.container;
|
|
20
|
+
this.eventBus = options.eventBus ?? resolveCompatEventBus(options.view, options.layer) ?? new CompatEventBus();
|
|
21
|
+
this.loaded = false;
|
|
22
|
+
this.loadStatus = "not-loaded";
|
|
23
|
+
this.feature = options.feature;
|
|
24
|
+
this.fieldConfig = options.fieldConfig ? [...options.fieldConfig] : [];
|
|
25
|
+
this.groupDisplay = options.groupDisplay;
|
|
26
|
+
this.headingLevel = options.headingLevel;
|
|
27
|
+
this.visibleElements = options.visibleElements;
|
|
28
|
+
this.validationFunction = options.validationFunction;
|
|
29
|
+
this.watchListeners = new Map();
|
|
30
|
+
}
|
|
31
|
+
async load() {
|
|
32
|
+
if (this.loaded) {
|
|
33
|
+
return this;
|
|
34
|
+
}
|
|
35
|
+
this.loadStatus = "loading";
|
|
36
|
+
this.notifyWatchers("loadStatus", this.loadStatus);
|
|
37
|
+
this.eventBus.emit("feature-form.loading", undefined, this);
|
|
38
|
+
this.loaded = true;
|
|
39
|
+
this.notifyWatchers("loaded", this.loaded);
|
|
40
|
+
this.loadStatus = "loaded";
|
|
41
|
+
this.notifyWatchers("loadStatus", this.loadStatus);
|
|
42
|
+
this.eventBus.emit("feature-form.loaded", undefined, this);
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
async when(callback) {
|
|
46
|
+
const widget = await this.load();
|
|
47
|
+
if (callback) {
|
|
48
|
+
callback(widget);
|
|
49
|
+
}
|
|
50
|
+
return widget;
|
|
51
|
+
}
|
|
52
|
+
watch(propertyName, listener) {
|
|
53
|
+
let listeners = this.watchListeners.get(propertyName);
|
|
54
|
+
if (!listeners) {
|
|
55
|
+
listeners = new Set();
|
|
56
|
+
this.watchListeners.set(propertyName, listeners);
|
|
57
|
+
}
|
|
58
|
+
listeners.add(listener);
|
|
59
|
+
return {
|
|
60
|
+
remove: () => {
|
|
61
|
+
listeners?.delete(listener);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
setFeature(feature) {
|
|
66
|
+
this.feature = feature;
|
|
67
|
+
this.notifyWatchers("feature", this.feature);
|
|
68
|
+
this.eventBus.emit("feature-form.feature-changed", { feature }, this);
|
|
69
|
+
}
|
|
70
|
+
async submit(values = {}) {
|
|
71
|
+
const errors = this.validate(values);
|
|
72
|
+
const result = {
|
|
73
|
+
valid: errors.length === 0,
|
|
74
|
+
values: { ...values },
|
|
75
|
+
feature: this.feature,
|
|
76
|
+
errors: errors.length > 0 ? errors : undefined,
|
|
77
|
+
};
|
|
78
|
+
if (errors.length > 0) {
|
|
79
|
+
this.eventBus.emit("feature-form.validation-error", { errors, values }, this);
|
|
80
|
+
}
|
|
81
|
+
this.eventBus.emit("feature-form.submitted", result, this);
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Runs validation against the provided values (or empty object)
|
|
86
|
+
* and returns any field errors.
|
|
87
|
+
*/
|
|
88
|
+
validate(values = {}) {
|
|
89
|
+
if (!this.validationFunction) {
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
const errors = [];
|
|
93
|
+
for (const [fieldName, value] of Object.entries(values)) {
|
|
94
|
+
const error = this.validationFunction(fieldName, value);
|
|
95
|
+
if (error) {
|
|
96
|
+
errors.push(error);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return errors;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Returns the current feature's attribute values, merged with any
|
|
103
|
+
* additional overrides. Useful for reading form state before submit.
|
|
104
|
+
*/
|
|
105
|
+
getValues(overrides = {}) {
|
|
106
|
+
const featureAttrs = typeof this.feature === "object" &&
|
|
107
|
+
this.feature !== null &&
|
|
108
|
+
"attributes" in this.feature &&
|
|
109
|
+
typeof this.feature.attributes === "object"
|
|
110
|
+
? { ...this.feature.attributes }
|
|
111
|
+
: {};
|
|
112
|
+
return { ...featureAttrs, ...overrides };
|
|
113
|
+
}
|
|
114
|
+
on(eventName, listener) {
|
|
115
|
+
const namespacedEvent = `feature-form.${eventName}`;
|
|
116
|
+
const subscription = this.eventBus.on(namespacedEvent, (event) => {
|
|
117
|
+
safeInvokeCompatListener(listener, event.payload);
|
|
118
|
+
});
|
|
119
|
+
return {
|
|
120
|
+
remove: () => {
|
|
121
|
+
subscription.remove();
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
destroy() {
|
|
126
|
+
this.watchListeners.clear();
|
|
127
|
+
}
|
|
128
|
+
notifyWatchers(propertyName, value) {
|
|
129
|
+
const listeners = this.watchListeners.get(propertyName);
|
|
130
|
+
if (!listeners) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
for (const listener of listeners) {
|
|
134
|
+
safeInvokeCompatListener(listener, value);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|