@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.
Files changed (289) hide show
  1. package/README.md +5 -0
  2. package/contract/edit-session.d.ts +203 -0
  3. package/contract/edit-session.d.ts.map +1 -0
  4. package/contract/edit-session.js +717 -0
  5. package/contract/index.d.ts +20 -0
  6. package/contract/index.d.ts.map +1 -0
  7. package/contract/index.js +15 -0
  8. package/contract/jobs.d.ts +115 -0
  9. package/contract/jobs.d.ts.map +1 -0
  10. package/contract/jobs.js +22 -0
  11. package/contract/source.d.ts +138 -0
  12. package/contract/source.d.ts.map +1 -0
  13. package/contract/source.js +3364 -0
  14. package/contract/spatial-aggregation.d.ts +312 -0
  15. package/contract/spatial-aggregation.d.ts.map +1 -0
  16. package/contract/spatial-aggregation.js +196 -0
  17. package/contract/types.d.ts +542 -0
  18. package/contract/types.d.ts.map +1 -0
  19. package/contract/types.js +171 -0
  20. package/core/batch.d.ts +37 -0
  21. package/core/batch.d.ts.map +1 -0
  22. package/core/batch.js +78 -0
  23. package/core/cache-state.d.ts +76 -0
  24. package/core/cache-state.d.ts.map +1 -0
  25. package/core/cache-state.js +84 -0
  26. package/core/client.d.ts +289 -0
  27. package/core/client.d.ts.map +1 -0
  28. package/core/client.js +2625 -0
  29. package/core/errors.d.ts +68 -0
  30. package/core/errors.d.ts.map +1 -0
  31. package/core/errors.js +116 -0
  32. package/core/grpc-adapter.d.ts +23 -0
  33. package/core/grpc-adapter.d.ts.map +1 -0
  34. package/core/grpc-adapter.js +704 -0
  35. package/core/odata.d.ts +347 -0
  36. package/core/odata.d.ts.map +1 -0
  37. package/core/odata.js +837 -0
  38. package/core/ogc-conformance.d.ts +35 -0
  39. package/core/ogc-conformance.d.ts.map +1 -0
  40. package/core/ogc-conformance.js +121 -0
  41. package/core/ogc-maps.d.ts +45 -0
  42. package/core/ogc-maps.d.ts.map +1 -0
  43. package/core/ogc-maps.js +53 -0
  44. package/core/ogc-processes.d.ts +92 -0
  45. package/core/ogc-processes.d.ts.map +1 -0
  46. package/core/ogc-processes.js +325 -0
  47. package/core/ogc-tiles.d.ts +55 -0
  48. package/core/ogc-tiles.d.ts.map +1 -0
  49. package/core/ogc-tiles.js +81 -0
  50. package/core/pbf-decoder.d.ts +28 -0
  51. package/core/pbf-decoder.d.ts.map +1 -0
  52. package/core/pbf-decoder.js +627 -0
  53. package/core/query-builder.d.ts +261 -0
  54. package/core/query-builder.d.ts.map +1 -0
  55. package/core/query-builder.js +538 -0
  56. package/core/spatial-filter.d.ts +93 -0
  57. package/core/spatial-filter.d.ts.map +1 -0
  58. package/core/spatial-filter.js +153 -0
  59. package/core/stac.d.ts +43 -0
  60. package/core/stac.d.ts.map +1 -0
  61. package/core/stac.js +116 -0
  62. package/core/surfaces.d.ts +464 -0
  63. package/core/surfaces.d.ts.map +1 -0
  64. package/core/surfaces.js +1322 -0
  65. package/core/types.d.ts +1238 -0
  66. package/core/types.d.ts.map +1 -0
  67. package/core/types.js +13 -0
  68. package/core/wfs-capabilities.d.ts +143 -0
  69. package/core/wfs-capabilities.d.ts.map +1 -0
  70. package/core/wfs-capabilities.js +478 -0
  71. package/core/wfs-filter.d.ts +118 -0
  72. package/core/wfs-filter.d.ts.map +1 -0
  73. package/core/wfs-filter.js +586 -0
  74. package/core/wfs.d.ts +219 -0
  75. package/core/wfs.d.ts.map +1 -0
  76. package/core/wfs.js +406 -0
  77. package/core/wms-capabilities.d.ts +110 -0
  78. package/core/wms-capabilities.d.ts.map +1 -0
  79. package/core/wms-capabilities.js +566 -0
  80. package/core/wms-types.d.ts +128 -0
  81. package/core/wms-types.d.ts.map +1 -0
  82. package/core/wms-types.js +32 -0
  83. package/core/wms.d.ts +108 -0
  84. package/core/wms.d.ts.map +1 -0
  85. package/core/wms.js +182 -0
  86. package/core/wmts-capabilities.d.ts +82 -0
  87. package/core/wmts-capabilities.d.ts.map +1 -0
  88. package/core/wmts-capabilities.js +409 -0
  89. package/core/wmts.d.ts +80 -0
  90. package/core/wmts.d.ts.map +1 -0
  91. package/core/wmts.js +173 -0
  92. package/esri-compat/basemap-gallery.d.ts +38 -0
  93. package/esri-compat/basemap-gallery.d.ts.map +1 -0
  94. package/esri-compat/basemap-gallery.js +159 -0
  95. package/esri-compat/basemap-layer-list.d.ts +35 -0
  96. package/esri-compat/basemap-layer-list.d.ts.map +1 -0
  97. package/esri-compat/basemap-layer-list.js +139 -0
  98. package/esri-compat/basemap.d.ts +32 -0
  99. package/esri-compat/basemap.d.ts.map +1 -0
  100. package/esri-compat/basemap.js +84 -0
  101. package/esri-compat/bookmarks.d.ts +36 -0
  102. package/esri-compat/bookmarks.d.ts.map +1 -0
  103. package/esri-compat/bookmarks.js +108 -0
  104. package/esri-compat/class-breaks-renderer.d.ts +50 -0
  105. package/esri-compat/class-breaks-renderer.d.ts.map +1 -0
  106. package/esri-compat/class-breaks-renderer.js +164 -0
  107. package/esri-compat/color.d.ts +22 -0
  108. package/esri-compat/color.d.ts.map +1 -0
  109. package/esri-compat/color.js +106 -0
  110. package/esri-compat/controls.d.ts +174 -0
  111. package/esri-compat/controls.d.ts.map +1 -0
  112. package/esri-compat/controls.js +479 -0
  113. package/esri-compat/coordinate-conversion.d.ts +41 -0
  114. package/esri-compat/coordinate-conversion.d.ts.map +1 -0
  115. package/esri-compat/coordinate-conversion.js +125 -0
  116. package/esri-compat/directions.d.ts +45 -0
  117. package/esri-compat/directions.d.ts.map +1 -0
  118. package/esri-compat/directions.js +123 -0
  119. package/esri-compat/editor.d.ts +47 -0
  120. package/esri-compat/editor.d.ts.map +1 -0
  121. package/esri-compat/editor.js +170 -0
  122. package/esri-compat/esri-config.d.ts +16 -0
  123. package/esri-compat/esri-config.d.ts.map +1 -0
  124. package/esri-compat/esri-config.js +23 -0
  125. package/esri-compat/esri-request.d.ts +17 -0
  126. package/esri-compat/esri-request.d.ts.map +1 -0
  127. package/esri-compat/esri-request.js +66 -0
  128. package/esri-compat/event-bus.d.ts +106 -0
  129. package/esri-compat/event-bus.d.ts.map +1 -0
  130. package/esri-compat/event-bus.js +90 -0
  131. package/esri-compat/expand.d.ts +36 -0
  132. package/esri-compat/expand.d.ts.map +1 -0
  133. package/esri-compat/expand.js +97 -0
  134. package/esri-compat/extent.d.ts +43 -0
  135. package/esri-compat/extent.d.ts.map +1 -0
  136. package/esri-compat/extent.js +140 -0
  137. package/esri-compat/feature-form.d.ts +64 -0
  138. package/esri-compat/feature-form.d.ts.map +1 -0
  139. package/esri-compat/feature-form.js +137 -0
  140. package/esri-compat/feature-layer.d.ts +173 -0
  141. package/esri-compat/feature-layer.d.ts.map +1 -0
  142. package/esri-compat/feature-layer.js +655 -0
  143. package/esri-compat/feature-set.d.ts +32 -0
  144. package/esri-compat/feature-set.d.ts.map +1 -0
  145. package/esri-compat/feature-set.js +80 -0
  146. package/esri-compat/feature-table.d.ts +141 -0
  147. package/esri-compat/feature-table.d.ts.map +1 -0
  148. package/esri-compat/feature-table.js +500 -0
  149. package/esri-compat/feature-templates.d.ts +41 -0
  150. package/esri-compat/feature-templates.d.ts.map +1 -0
  151. package/esri-compat/feature-templates.js +97 -0
  152. package/esri-compat/feature.d.ts +33 -0
  153. package/esri-compat/feature.d.ts.map +1 -0
  154. package/esri-compat/feature.js +83 -0
  155. package/esri-compat/graphic.d.ts +46 -0
  156. package/esri-compat/graphic.d.ts.map +1 -0
  157. package/esri-compat/graphic.js +103 -0
  158. package/esri-compat/graphics-layer.d.ts +49 -0
  159. package/esri-compat/graphics-layer.d.ts.map +1 -0
  160. package/esri-compat/graphics-layer.js +185 -0
  161. package/esri-compat/group-layer.d.ts +48 -0
  162. package/esri-compat/group-layer.d.ts.map +1 -0
  163. package/esri-compat/group-layer.js +212 -0
  164. package/esri-compat/identify.d.ts +71 -0
  165. package/esri-compat/identify.d.ts.map +1 -0
  166. package/esri-compat/identify.js +299 -0
  167. package/esri-compat/identity-manager.d.ts +31 -0
  168. package/esri-compat/identity-manager.d.ts.map +1 -0
  169. package/esri-compat/identity-manager.js +115 -0
  170. package/esri-compat/label-class.d.ts +31 -0
  171. package/esri-compat/label-class.d.ts.map +1 -0
  172. package/esri-compat/label-class.js +102 -0
  173. package/esri-compat/layer-list.d.ts +77 -0
  174. package/esri-compat/layer-list.d.ts.map +1 -0
  175. package/esri-compat/layer-list.js +342 -0
  176. package/esri-compat/legend.d.ts +53 -0
  177. package/esri-compat/legend.d.ts.map +1 -0
  178. package/esri-compat/legend.js +254 -0
  179. package/esri-compat/map-image-layer.d.ts +162 -0
  180. package/esri-compat/map-image-layer.d.ts.map +1 -0
  181. package/esri-compat/map-image-layer.js +704 -0
  182. package/esri-compat/map-view.d.ts +315 -0
  183. package/esri-compat/map-view.d.ts.map +1 -0
  184. package/esri-compat/map-view.js +1110 -0
  185. package/esri-compat/map.d.ts +47 -0
  186. package/esri-compat/map.d.ts.map +1 -0
  187. package/esri-compat/map.js +209 -0
  188. package/esri-compat/measurement-2d.d.ts +61 -0
  189. package/esri-compat/measurement-2d.d.ts.map +1 -0
  190. package/esri-compat/measurement-2d.js +184 -0
  191. package/esri-compat/measurement.d.ts +45 -0
  192. package/esri-compat/measurement.d.ts.map +1 -0
  193. package/esri-compat/measurement.js +193 -0
  194. package/esri-compat/oauth-info.d.ts +35 -0
  195. package/esri-compat/oauth-info.d.ts.map +1 -0
  196. package/esri-compat/oauth-info.js +115 -0
  197. package/esri-compat/picture-marker-symbol.d.ts +35 -0
  198. package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
  199. package/esri-compat/picture-marker-symbol.js +126 -0
  200. package/esri-compat/point.d.ts +31 -0
  201. package/esri-compat/point.d.ts.map +1 -0
  202. package/esri-compat/point.js +102 -0
  203. package/esri-compat/polygon.d.ts +31 -0
  204. package/esri-compat/polygon.d.ts.map +1 -0
  205. package/esri-compat/polygon.js +107 -0
  206. package/esri-compat/polyline.d.ts +31 -0
  207. package/esri-compat/polyline.d.ts.map +1 -0
  208. package/esri-compat/polyline.js +107 -0
  209. package/esri-compat/popup-template.d.ts +55 -0
  210. package/esri-compat/popup-template.d.ts.map +1 -0
  211. package/esri-compat/popup-template.js +128 -0
  212. package/esri-compat/popup.d.ts +54 -0
  213. package/esri-compat/popup.d.ts.map +1 -0
  214. package/esri-compat/popup.js +312 -0
  215. package/esri-compat/print.d.ts +47 -0
  216. package/esri-compat/print.d.ts.map +1 -0
  217. package/esri-compat/print.js +105 -0
  218. package/esri-compat/query.d.ts +46 -0
  219. package/esri-compat/query.d.ts.map +1 -0
  220. package/esri-compat/query.js +119 -0
  221. package/esri-compat/reactive-utils.d.ts +23 -0
  222. package/esri-compat/reactive-utils.d.ts.map +1 -0
  223. package/esri-compat/reactive-utils.js +178 -0
  224. package/esri-compat/request.d.ts +41 -0
  225. package/esri-compat/request.d.ts.map +1 -0
  226. package/esri-compat/request.js +253 -0
  227. package/esri-compat/route-layer.d.ts +59 -0
  228. package/esri-compat/route-layer.d.ts.map +1 -0
  229. package/esri-compat/route-layer.js +223 -0
  230. package/esri-compat/route-task.d.ts +88 -0
  231. package/esri-compat/route-task.d.ts.map +1 -0
  232. package/esri-compat/route-task.js +225 -0
  233. package/esri-compat/scene-view.d.ts +41 -0
  234. package/esri-compat/scene-view.d.ts.map +1 -0
  235. package/esri-compat/scene-view.js +68 -0
  236. package/esri-compat/search.d.ts +112 -0
  237. package/esri-compat/search.d.ts.map +1 -0
  238. package/esri-compat/search.js +820 -0
  239. package/esri-compat/simple-fill-symbol.d.ts +27 -0
  240. package/esri-compat/simple-fill-symbol.d.ts.map +1 -0
  241. package/esri-compat/simple-fill-symbol.js +85 -0
  242. package/esri-compat/simple-line-symbol.d.ts +27 -0
  243. package/esri-compat/simple-line-symbol.d.ts.map +1 -0
  244. package/esri-compat/simple-line-symbol.js +85 -0
  245. package/esri-compat/simple-marker-symbol.d.ts +29 -0
  246. package/esri-compat/simple-marker-symbol.d.ts.map +1 -0
  247. package/esri-compat/simple-marker-symbol.js +92 -0
  248. package/esri-compat/simple-renderer.d.ts +29 -0
  249. package/esri-compat/simple-renderer.d.ts.map +1 -0
  250. package/esri-compat/simple-renderer.js +92 -0
  251. package/esri-compat/sketch.d.ts +64 -0
  252. package/esri-compat/sketch.d.ts.map +1 -0
  253. package/esri-compat/sketch.js +227 -0
  254. package/esri-compat/spatial-reference.d.ts +31 -0
  255. package/esri-compat/spatial-reference.d.ts.map +1 -0
  256. package/esri-compat/spatial-reference.js +102 -0
  257. package/esri-compat/swipe.d.ts +34 -0
  258. package/esri-compat/swipe.d.ts.map +1 -0
  259. package/esri-compat/swipe.js +93 -0
  260. package/esri-compat/table-list.d.ts +36 -0
  261. package/esri-compat/table-list.d.ts.map +1 -0
  262. package/esri-compat/table-list.js +126 -0
  263. package/esri-compat/text-symbol.d.ts +37 -0
  264. package/esri-compat/text-symbol.d.ts.map +1 -0
  265. package/esri-compat/text-symbol.js +123 -0
  266. package/esri-compat/tile-layer.d.ts +52 -0
  267. package/esri-compat/tile-layer.d.ts.map +1 -0
  268. package/esri-compat/tile-layer.js +167 -0
  269. package/esri-compat/time-slider.d.ts +70 -0
  270. package/esri-compat/time-slider.d.ts.map +1 -0
  271. package/esri-compat/time-slider.js +208 -0
  272. package/esri-compat/track.d.ts +51 -0
  273. package/esri-compat/track.d.ts.map +1 -0
  274. package/esri-compat/track.js +174 -0
  275. package/esri-compat/unique-value-renderer.d.ts +41 -0
  276. package/esri-compat/unique-value-renderer.d.ts.map +1 -0
  277. package/esri-compat/unique-value-renderer.js +127 -0
  278. package/esri-compat/url.d.ts +12 -0
  279. package/esri-compat/url.d.ts.map +1 -0
  280. package/esri-compat/url.js +54 -0
  281. package/esri-compat/web-map.d.ts +14 -0
  282. package/esri-compat/web-map.d.ts.map +1 -0
  283. package/esri-compat/web-map.js +24 -0
  284. package/gen/honua/v1/feature_service_pb.d.ts +918 -0
  285. package/gen/honua/v1/feature_service_pb.d.ts.map +1 -0
  286. package/gen/honua/v1/feature_service_pb.js +375 -0
  287. package/index.d.ts +130 -0
  288. package/index.js +65 -0
  289. package/package.json +22 -0
@@ -0,0 +1,312 @@
1
+ import { CompatEventBus, resolveCompatEventBus, safeInvokeCompatListener, } from "./event-bus.js";
2
+ export class PopupCompat {
3
+ view;
4
+ container;
5
+ eventBus;
6
+ loaded;
7
+ loadStatus;
8
+ visible;
9
+ location;
10
+ features;
11
+ title;
12
+ content;
13
+ autoOpenEnabled;
14
+ dockEnabled;
15
+ dockOptions;
16
+ selectedFeature;
17
+ selectedFeatureIndex;
18
+ subscriptions;
19
+ watchListeners;
20
+ constructor(options = {}) {
21
+ this.view = options.view;
22
+ this.container = options.container;
23
+ this.eventBus = options.eventBus ?? resolveCompatEventBus(options.view) ?? new CompatEventBus();
24
+ this.loaded = false;
25
+ this.loadStatus = "not-loaded";
26
+ this.visible = false;
27
+ this.location = undefined;
28
+ this.features = [];
29
+ this.title = undefined;
30
+ this.content = undefined;
31
+ this.autoOpenEnabled = options.autoOpenEnabled ?? true;
32
+ this.dockEnabled = options.dockEnabled ?? false;
33
+ this.dockOptions = options.dockOptions;
34
+ this.selectedFeature = undefined;
35
+ this.selectedFeatureIndex = -1;
36
+ this.watchListeners = new Map();
37
+ this.subscriptions = [
38
+ this.eventBus.on("popup.open", () => {
39
+ this.syncFromViewPopup();
40
+ }),
41
+ this.eventBus.on("popup.close", () => {
42
+ this.syncFromViewPopup();
43
+ }),
44
+ ];
45
+ this.syncFromViewPopup();
46
+ }
47
+ async load() {
48
+ if (this.loaded) {
49
+ return this;
50
+ }
51
+ this.loadStatus = "loading";
52
+ this.notifyWatchers("loadStatus", this.loadStatus);
53
+ this.eventBus.emit("popup.loading", undefined, this);
54
+ this.syncFromViewPopup();
55
+ this.loaded = true;
56
+ this.notifyWatchers("loaded", this.loaded);
57
+ this.loadStatus = "loaded";
58
+ this.notifyWatchers("loadStatus", this.loadStatus);
59
+ this.eventBus.emit("popup.loaded", undefined, this);
60
+ return this;
61
+ }
62
+ async when(callback) {
63
+ const widget = await this.load();
64
+ if (callback) {
65
+ callback(widget);
66
+ }
67
+ return widget;
68
+ }
69
+ open(options = {}) {
70
+ const viewPopup = resolveViewPopup(this.view);
71
+ if (viewPopup) {
72
+ viewPopup.open(options);
73
+ if (!isSynchronizedWithViewPopup(this, viewPopup)) {
74
+ this.syncFromViewPopup();
75
+ }
76
+ return;
77
+ }
78
+ this.applyOpenOptions(options);
79
+ this.visible = true;
80
+ this.selectedFeature = this.features[0];
81
+ this.selectedFeatureIndex = this.features.length > 0 ? 0 : -1;
82
+ this.notifyWatchers("visible", this.visible);
83
+ this.notifyWatchers("location", this.location);
84
+ this.notifyWatchers("features", this.features);
85
+ this.notifyWatchers("title", this.title);
86
+ this.notifyWatchers("content", this.content);
87
+ this.notifyWatchers("selectedFeature", this.selectedFeature);
88
+ this.notifyWatchers("selectedFeatureIndex", this.selectedFeatureIndex);
89
+ this.eventBus.emit("popup.open", options, this);
90
+ }
91
+ close() {
92
+ const viewPopup = resolveViewPopup(this.view);
93
+ if (viewPopup) {
94
+ viewPopup.close();
95
+ if (!isSynchronizedWithViewPopup(this, viewPopup)) {
96
+ this.syncFromViewPopup();
97
+ }
98
+ return;
99
+ }
100
+ if (!this.visible) {
101
+ return;
102
+ }
103
+ this.visible = false;
104
+ this.location = undefined;
105
+ this.features = [];
106
+ this.title = undefined;
107
+ this.content = undefined;
108
+ this.selectedFeature = undefined;
109
+ this.selectedFeatureIndex = -1;
110
+ this.notifyWatchers("visible", this.visible);
111
+ this.notifyWatchers("location", this.location);
112
+ this.notifyWatchers("features", this.features);
113
+ this.notifyWatchers("title", this.title);
114
+ this.notifyWatchers("content", this.content);
115
+ this.notifyWatchers("selectedFeature", this.selectedFeature);
116
+ this.notifyWatchers("selectedFeatureIndex", this.selectedFeatureIndex);
117
+ this.eventBus.emit("popup.close", undefined, this);
118
+ }
119
+ clear() {
120
+ this.close();
121
+ }
122
+ selectFeature(featureOrIndex) {
123
+ const viewPopup = resolveViewPopup(this.view);
124
+ if (viewPopup?.selectFeature) {
125
+ viewPopup.selectFeature(featureOrIndex);
126
+ this.syncFromViewPopup();
127
+ return this.selectedFeature;
128
+ }
129
+ const index = typeof featureOrIndex === "number"
130
+ ? normalizeFeatureIndex(featureOrIndex, this.features.length)
131
+ : this.features.findIndex((feature) => feature === featureOrIndex);
132
+ if (index < 0) {
133
+ return undefined;
134
+ }
135
+ this.applySelection(index);
136
+ return this.selectedFeature;
137
+ }
138
+ next() {
139
+ const viewPopup = resolveViewPopup(this.view);
140
+ if (viewPopup?.next) {
141
+ viewPopup.next();
142
+ this.syncFromViewPopup();
143
+ return this.selectedFeature;
144
+ }
145
+ if (this.features.length === 0) {
146
+ return undefined;
147
+ }
148
+ const current = this.selectedFeatureIndex >= 0 ? this.selectedFeatureIndex : 0;
149
+ this.applySelection(Math.min(current + 1, this.features.length - 1));
150
+ return this.selectedFeature;
151
+ }
152
+ previous() {
153
+ const viewPopup = resolveViewPopup(this.view);
154
+ if (viewPopup?.previous) {
155
+ viewPopup.previous();
156
+ this.syncFromViewPopup();
157
+ return this.selectedFeature;
158
+ }
159
+ if (this.features.length === 0) {
160
+ return undefined;
161
+ }
162
+ const current = this.selectedFeatureIndex >= 0 ? this.selectedFeatureIndex : 0;
163
+ this.applySelection(Math.max(current - 1, 0));
164
+ return this.selectedFeature;
165
+ }
166
+ watch(propertyName, listener) {
167
+ let listeners = this.watchListeners.get(propertyName);
168
+ if (!listeners) {
169
+ listeners = new Set();
170
+ this.watchListeners.set(propertyName, listeners);
171
+ }
172
+ listeners.add(listener);
173
+ return {
174
+ remove: () => {
175
+ listeners?.delete(listener);
176
+ },
177
+ };
178
+ }
179
+ destroy() {
180
+ for (const subscription of this.subscriptions.splice(0)) {
181
+ subscription.remove();
182
+ }
183
+ this.watchListeners.clear();
184
+ }
185
+ applyOpenOptions(options) {
186
+ this.location = options.location;
187
+ this.features = options.features ? [...options.features] : [];
188
+ this.title = options.title;
189
+ this.content = options.content;
190
+ }
191
+ syncFromViewPopup() {
192
+ const viewPopup = resolveViewPopup(this.view);
193
+ if (!viewPopup) {
194
+ return;
195
+ }
196
+ const previousVisible = this.visible;
197
+ const previousLocation = this.location;
198
+ const previousFeatures = this.features;
199
+ const previousTitle = this.title;
200
+ const previousContent = this.content;
201
+ const previousSelectedFeature = this.selectedFeature;
202
+ const previousSelectedFeatureIndex = this.selectedFeatureIndex;
203
+ this.visible = viewPopup.visible;
204
+ this.location = viewPopup.location;
205
+ this.features = [...viewPopup.features];
206
+ this.title = viewPopup.title;
207
+ this.content = viewPopup.content;
208
+ this.selectedFeature = viewPopup.selectedFeature ?? this.features[0];
209
+ this.selectedFeatureIndex =
210
+ typeof viewPopup.selectedFeatureIndex === "number"
211
+ ? normalizeFeatureIndex(viewPopup.selectedFeatureIndex, this.features.length)
212
+ : this.features.findIndex((feature) => feature === this.selectedFeature);
213
+ if (this.selectedFeatureIndex < 0) {
214
+ this.selectedFeatureIndex = this.features.length > 0 ? 0 : -1;
215
+ }
216
+ if (!Object.is(previousVisible, this.visible)) {
217
+ this.notifyWatchers("visible", this.visible);
218
+ }
219
+ if (!Object.is(previousLocation, this.location)) {
220
+ this.notifyWatchers("location", this.location);
221
+ }
222
+ if (!arraysShallowEqual(previousFeatures, this.features)) {
223
+ this.notifyWatchers("features", this.features);
224
+ }
225
+ if (!Object.is(previousTitle, this.title)) {
226
+ this.notifyWatchers("title", this.title);
227
+ }
228
+ if (!Object.is(previousContent, this.content)) {
229
+ this.notifyWatchers("content", this.content);
230
+ }
231
+ if (!Object.is(previousSelectedFeature, this.selectedFeature)) {
232
+ this.notifyWatchers("selectedFeature", this.selectedFeature);
233
+ }
234
+ if (!Object.is(previousSelectedFeatureIndex, this.selectedFeatureIndex)) {
235
+ this.notifyWatchers("selectedFeatureIndex", this.selectedFeatureIndex);
236
+ }
237
+ }
238
+ applySelection(index) {
239
+ const normalizedIndex = normalizeFeatureIndex(index, this.features.length);
240
+ if (normalizedIndex < 0) {
241
+ return;
242
+ }
243
+ this.selectedFeatureIndex = normalizedIndex;
244
+ this.selectedFeature = this.features[normalizedIndex];
245
+ this.notifyWatchers("selectedFeature", this.selectedFeature);
246
+ this.notifyWatchers("selectedFeatureIndex", this.selectedFeatureIndex);
247
+ this.eventBus.emit("popup.selected-feature-changed", {
248
+ selectedFeature: this.selectedFeature,
249
+ selectedFeatureIndex: this.selectedFeatureIndex,
250
+ }, this);
251
+ }
252
+ notifyWatchers(propertyName, value) {
253
+ const listeners = this.watchListeners.get(propertyName);
254
+ if (!listeners) {
255
+ return;
256
+ }
257
+ for (const listener of listeners) {
258
+ safeInvokeCompatListener(listener, value);
259
+ }
260
+ }
261
+ }
262
+ function resolveViewPopup(view) {
263
+ if (!isRecord(view) || !isRecord(view.popup)) {
264
+ return undefined;
265
+ }
266
+ const popup = view.popup;
267
+ if (typeof popup.open !== "function" || typeof popup.close !== "function") {
268
+ return undefined;
269
+ }
270
+ if (typeof popup.visible !== "boolean" || !Array.isArray(popup.features)) {
271
+ return undefined;
272
+ }
273
+ return popup;
274
+ }
275
+ function isRecord(value) {
276
+ return typeof value === "object" && value !== null;
277
+ }
278
+ function normalizeFeatureIndex(index, length) {
279
+ if (!Number.isFinite(index)) {
280
+ return -1;
281
+ }
282
+ const normalized = Math.trunc(index);
283
+ if (normalized < 0 || normalized >= length) {
284
+ return -1;
285
+ }
286
+ return normalized;
287
+ }
288
+ function arraysShallowEqual(left, right) {
289
+ if (left.length !== right.length) {
290
+ return false;
291
+ }
292
+ for (let index = 0; index < left.length; index += 1) {
293
+ if (!Object.is(left[index], right[index])) {
294
+ return false;
295
+ }
296
+ }
297
+ return true;
298
+ }
299
+ function isSynchronizedWithViewPopup(widget, viewPopup) {
300
+ const selectedFeature = viewPopup.selectedFeature ?? (viewPopup.features.length > 0 ? viewPopup.features[0] : undefined);
301
+ const selectedFeatureIndex = typeof viewPopup.selectedFeatureIndex === "number"
302
+ ? normalizeFeatureIndex(viewPopup.selectedFeatureIndex, viewPopup.features.length)
303
+ : viewPopup.features.findIndex((feature) => Object.is(feature, selectedFeature));
304
+ const normalizedSelectedFeatureIndex = selectedFeatureIndex < 0 ? (viewPopup.features.length > 0 ? 0 : -1) : selectedFeatureIndex;
305
+ return (Object.is(widget.visible, viewPopup.visible) &&
306
+ Object.is(widget.location, viewPopup.location) &&
307
+ arraysShallowEqual(widget.features, viewPopup.features) &&
308
+ Object.is(widget.title, viewPopup.title) &&
309
+ Object.is(widget.content, viewPopup.content) &&
310
+ Object.is(widget.selectedFeature, selectedFeature) &&
311
+ Object.is(widget.selectedFeatureIndex, normalizedSelectedFeatureIndex));
312
+ }
@@ -0,0 +1,47 @@
1
+ import { CompatEventBus } from "./event-bus.js";
2
+ export interface PrintTemplateOptionsCompat {
3
+ title?: string;
4
+ format?: "pdf" | "png32" | "jpg";
5
+ layout?: string;
6
+ dpi?: number;
7
+ }
8
+ export interface PrintCompatOptions {
9
+ view?: unknown;
10
+ container?: unknown;
11
+ eventBus?: CompatEventBus;
12
+ printServiceUrl?: string;
13
+ templateOptions?: PrintTemplateOptionsCompat;
14
+ }
15
+ export interface PrintExecuteOptionsCompat extends PrintTemplateOptionsCompat {
16
+ }
17
+ export interface PrintResultCompat {
18
+ url: string;
19
+ title: string;
20
+ format: string;
21
+ layout: string;
22
+ dpi: number;
23
+ }
24
+ export type PrintLoadStatusCompat = "not-loaded" | "loading" | "loaded";
25
+ export interface PrintHandleCompat {
26
+ remove(): void;
27
+ }
28
+ export declare class PrintCompat {
29
+ readonly view: unknown;
30
+ readonly container: unknown;
31
+ readonly eventBus: CompatEventBus;
32
+ loaded: boolean;
33
+ loadStatus: PrintLoadStatusCompat;
34
+ printServiceUrl: string;
35
+ templateOptions: PrintTemplateOptionsCompat;
36
+ lastResult: PrintResultCompat | undefined;
37
+ private readonly watchListeners;
38
+ constructor(options?: PrintCompatOptions);
39
+ load(): Promise<PrintCompat>;
40
+ when(callback?: (widget: PrintCompat) => void): Promise<PrintCompat>;
41
+ watch(propertyName: string, listener: (value: unknown) => void): PrintHandleCompat;
42
+ setTemplateOptions(nextOptions: PrintTemplateOptionsCompat): void;
43
+ execute(options?: PrintExecuteOptionsCompat): Promise<PrintResultCompat>;
44
+ destroy(): void;
45
+ private notifyWatchers;
46
+ }
47
+ //# sourceMappingURL=print.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/print.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAmD,MAAM,gBAAgB,CAAC;AAEjG,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,0BAA0B,CAAC;CAC9C;AAED,MAAM,WAAW,yBAA0B,SAAQ,0BAA0B;CAAG;AAEhF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qBAAa,WAAW;IACtB,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,qBAAqB,CAAC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,0BAA0B,CAAC;IAC5C,UAAU,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;gBAEzD,OAAO,GAAE,kBAAuB;IAYtC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAgB5B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IAQ1E,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,iBAAiB;IAelF,kBAAkB,CAAC,WAAW,EAAE,0BAA0B,GAAG,IAAI;IAS3D,OAAO,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA8BlF,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,cAAc;CAUvB"}
@@ -0,0 +1,105 @@
1
+ import { CompatEventBus, resolveCompatEventBus, safeInvokeCompatListener } from "./event-bus.js";
2
+ export class PrintCompat {
3
+ view;
4
+ container;
5
+ eventBus;
6
+ loaded;
7
+ loadStatus;
8
+ printServiceUrl;
9
+ templateOptions;
10
+ lastResult;
11
+ watchListeners;
12
+ constructor(options = {}) {
13
+ this.view = options.view;
14
+ this.container = options.container;
15
+ this.eventBus = options.eventBus ?? resolveCompatEventBus(options.view) ?? new CompatEventBus();
16
+ this.loaded = false;
17
+ this.loadStatus = "not-loaded";
18
+ this.printServiceUrl = options.printServiceUrl ?? "https://example.test/print";
19
+ this.templateOptions = { ...(options.templateOptions ?? {}) };
20
+ this.lastResult = undefined;
21
+ this.watchListeners = new Map();
22
+ }
23
+ async load() {
24
+ if (this.loaded) {
25
+ return this;
26
+ }
27
+ this.loadStatus = "loading";
28
+ this.notifyWatchers("loadStatus", this.loadStatus);
29
+ this.eventBus.emit("print.loading", undefined, this);
30
+ this.loaded = true;
31
+ this.notifyWatchers("loaded", this.loaded);
32
+ this.loadStatus = "loaded";
33
+ this.notifyWatchers("loadStatus", this.loadStatus);
34
+ this.eventBus.emit("print.loaded", undefined, this);
35
+ return this;
36
+ }
37
+ async when(callback) {
38
+ const widget = await this.load();
39
+ if (callback) {
40
+ callback(widget);
41
+ }
42
+ return widget;
43
+ }
44
+ watch(propertyName, listener) {
45
+ let listeners = this.watchListeners.get(propertyName);
46
+ if (!listeners) {
47
+ listeners = new Set();
48
+ this.watchListeners.set(propertyName, listeners);
49
+ }
50
+ listeners.add(listener);
51
+ return {
52
+ remove: () => {
53
+ listeners?.delete(listener);
54
+ },
55
+ };
56
+ }
57
+ setTemplateOptions(nextOptions) {
58
+ this.templateOptions = {
59
+ ...this.templateOptions,
60
+ ...nextOptions,
61
+ };
62
+ this.notifyWatchers("templateOptions", this.templateOptions);
63
+ this.eventBus.emit("print.template-updated", { templateOptions: { ...this.templateOptions } }, this);
64
+ }
65
+ async execute(options = {}) {
66
+ const merged = {
67
+ ...this.templateOptions,
68
+ ...options,
69
+ };
70
+ const title = merged.title ?? "Map Export";
71
+ const format = merged.format ?? "pdf";
72
+ const layout = merged.layout ?? "a4-landscape";
73
+ const dpi = merged.dpi ?? 96;
74
+ this.eventBus.emit("print.execute-started", { title, format, layout, dpi }, this);
75
+ const query = new URLSearchParams();
76
+ query.set("title", title);
77
+ query.set("format", format);
78
+ query.set("layout", layout);
79
+ query.set("dpi", String(dpi));
80
+ const separator = this.printServiceUrl.includes("?") ? "&" : "?";
81
+ const result = {
82
+ url: `${this.printServiceUrl}${separator}${query.toString()}`,
83
+ title,
84
+ format,
85
+ layout,
86
+ dpi,
87
+ };
88
+ this.lastResult = result;
89
+ this.notifyWatchers("lastResult", this.lastResult);
90
+ this.eventBus.emit("print.execute-completed", result, this);
91
+ return result;
92
+ }
93
+ destroy() {
94
+ this.watchListeners.clear();
95
+ }
96
+ notifyWatchers(propertyName, value) {
97
+ const listeners = this.watchListeners.get(propertyName);
98
+ if (!listeners) {
99
+ return;
100
+ }
101
+ for (const listener of listeners) {
102
+ safeInvokeCompatListener(listener, value);
103
+ }
104
+ }
105
+ }
@@ -0,0 +1,46 @@
1
+ export interface QueryCompatOptions {
2
+ where?: string;
3
+ outFields?: string | string[];
4
+ returnGeometry?: boolean;
5
+ orderByFields?: string | string[];
6
+ objectIds?: number[] | string;
7
+ geometry?: unknown;
8
+ spatialRelationship?: string;
9
+ outSpatialReference?: unknown;
10
+ num?: number;
11
+ start?: number;
12
+ timeExtent?: unknown;
13
+ groupByFieldsForStatistics?: string | string[];
14
+ outStatistics?: unknown[];
15
+ }
16
+ export type QueryLoadStatusCompat = "not-loaded" | "loading" | "loaded";
17
+ export interface QueryHandleCompat {
18
+ remove(): void;
19
+ }
20
+ export declare class QueryCompat {
21
+ loaded: boolean;
22
+ loadStatus: QueryLoadStatusCompat;
23
+ where: string;
24
+ outFields: string[] | undefined;
25
+ returnGeometry: boolean;
26
+ orderByFields: string[] | undefined;
27
+ objectIds: number[] | string | undefined;
28
+ geometry: unknown;
29
+ spatialRelationship: string | undefined;
30
+ outSpatialReference: unknown;
31
+ num: number | undefined;
32
+ start: number | undefined;
33
+ timeExtent: unknown;
34
+ groupByFieldsForStatistics: string[] | undefined;
35
+ outStatistics: unknown[] | undefined;
36
+ private readonly watchListeners;
37
+ constructor(options?: QueryCompatOptions);
38
+ load(): Promise<QueryCompat>;
39
+ when(callback?: (query: QueryCompat) => void): Promise<QueryCompat>;
40
+ watch(propertyName: string, listener: (value: unknown) => void): QueryHandleCompat;
41
+ clone(): QueryCompat;
42
+ toJSON(): QueryCompatOptions;
43
+ destroy(): void;
44
+ private notifyWatchers;
45
+ }
46
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/query.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0BAA0B,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/C,aAAa,CAAC,EAAE,OAAO,EAAE,CAAC;CAC3B;AAED,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,qBAAa,WAAW;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,qBAAqB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAChC,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACpC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,0BAA0B,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACjD,aAAa,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6C;gBAEzD,OAAO,GAAE,kBAAuB;IAmBtC,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAc5B,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC;IAQzE,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,iBAAiB;IAelF,KAAK,IAAI,WAAW;IAIpB,MAAM,IAAI,kBAAkB;IAkB5B,OAAO,IAAI,IAAI;IAItB,OAAO,CAAC,cAAc;CAUvB"}
@@ -0,0 +1,119 @@
1
+ import { safeInvokeCompatListener } from "./event-bus.js";
2
+ export class QueryCompat {
3
+ loaded;
4
+ loadStatus;
5
+ where;
6
+ outFields;
7
+ returnGeometry;
8
+ orderByFields;
9
+ objectIds;
10
+ geometry;
11
+ spatialRelationship;
12
+ outSpatialReference;
13
+ num;
14
+ start;
15
+ timeExtent;
16
+ groupByFieldsForStatistics;
17
+ outStatistics;
18
+ watchListeners;
19
+ constructor(options = {}) {
20
+ this.loaded = false;
21
+ this.loadStatus = "not-loaded";
22
+ this.where = options.where ?? "1=1";
23
+ this.outFields = normalizeStringList(options.outFields);
24
+ this.returnGeometry = options.returnGeometry ?? true;
25
+ this.orderByFields = normalizeStringList(options.orderByFields);
26
+ this.objectIds = normalizeObjectIds(options.objectIds);
27
+ this.geometry = options.geometry;
28
+ this.spatialRelationship = options.spatialRelationship;
29
+ this.outSpatialReference = options.outSpatialReference;
30
+ this.num = normalizeFiniteNumber(options.num);
31
+ this.start = normalizeFiniteNumber(options.start);
32
+ this.timeExtent = options.timeExtent;
33
+ this.groupByFieldsForStatistics = normalizeStringList(options.groupByFieldsForStatistics);
34
+ this.outStatistics = options.outStatistics ? [...options.outStatistics] : undefined;
35
+ this.watchListeners = new Map();
36
+ }
37
+ async load() {
38
+ if (this.loaded) {
39
+ return this;
40
+ }
41
+ this.loadStatus = "loading";
42
+ this.notifyWatchers("loadStatus", this.loadStatus);
43
+ this.loaded = true;
44
+ this.notifyWatchers("loaded", this.loaded);
45
+ this.loadStatus = "loaded";
46
+ this.notifyWatchers("loadStatus", this.loadStatus);
47
+ return this;
48
+ }
49
+ async when(callback) {
50
+ const query = await this.load();
51
+ if (callback) {
52
+ callback(query);
53
+ }
54
+ return query;
55
+ }
56
+ watch(propertyName, listener) {
57
+ let listeners = this.watchListeners.get(propertyName);
58
+ if (!listeners) {
59
+ listeners = new Set();
60
+ this.watchListeners.set(propertyName, listeners);
61
+ }
62
+ listeners.add(listener);
63
+ return {
64
+ remove: () => {
65
+ listeners?.delete(listener);
66
+ },
67
+ };
68
+ }
69
+ clone() {
70
+ return new QueryCompat(this.toJSON());
71
+ }
72
+ toJSON() {
73
+ return {
74
+ where: this.where,
75
+ outFields: this.outFields ? [...this.outFields] : undefined,
76
+ returnGeometry: this.returnGeometry,
77
+ orderByFields: this.orderByFields ? [...this.orderByFields] : undefined,
78
+ objectIds: Array.isArray(this.objectIds) ? [...this.objectIds] : this.objectIds,
79
+ geometry: this.geometry,
80
+ spatialRelationship: this.spatialRelationship,
81
+ outSpatialReference: this.outSpatialReference,
82
+ num: this.num,
83
+ start: this.start,
84
+ timeExtent: this.timeExtent,
85
+ groupByFieldsForStatistics: this.groupByFieldsForStatistics ? [...this.groupByFieldsForStatistics] : undefined,
86
+ outStatistics: this.outStatistics ? [...this.outStatistics] : undefined,
87
+ };
88
+ }
89
+ destroy() {
90
+ this.watchListeners.clear();
91
+ }
92
+ notifyWatchers(propertyName, value) {
93
+ const listeners = this.watchListeners.get(propertyName);
94
+ if (!listeners) {
95
+ return;
96
+ }
97
+ for (const listener of listeners) {
98
+ safeInvokeCompatListener(listener, value);
99
+ }
100
+ }
101
+ }
102
+ function normalizeStringList(value) {
103
+ if (value === undefined) {
104
+ return undefined;
105
+ }
106
+ if (Array.isArray(value)) {
107
+ return value.filter((item) => typeof item === "string");
108
+ }
109
+ return [value];
110
+ }
111
+ function normalizeFiniteNumber(value) {
112
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
113
+ }
114
+ function normalizeObjectIds(value) {
115
+ if (value === undefined || typeof value === "string") {
116
+ return value;
117
+ }
118
+ return value.filter((item) => typeof item === "number" && Number.isFinite(item));
119
+ }
@@ -0,0 +1,23 @@
1
+ export interface ReactiveUtilsHandleCompat {
2
+ remove(): void;
3
+ }
4
+ export interface ReactiveUtilsWatchOptionsCompat {
5
+ initial?: boolean;
6
+ once?: boolean;
7
+ intervalMs?: number;
8
+ equals?: (current: unknown, previous: unknown) => boolean;
9
+ }
10
+ export interface ReactiveUtilsWhenOptionsCompat {
11
+ initial?: boolean;
12
+ once?: boolean;
13
+ intervalMs?: number;
14
+ }
15
+ export declare function watch<TValue>(getter: () => TValue, callback: (value: TValue) => void, options?: ReactiveUtilsWatchOptionsCompat): ReactiveUtilsHandleCompat;
16
+ export declare function when<TValue>(getter: () => TValue, callback: (value: TValue) => void, options?: ReactiveUtilsWhenOptionsCompat): ReactiveUtilsHandleCompat;
17
+ export declare function whenOnce<TValue>(getter: () => TValue, options?: Omit<ReactiveUtilsWhenOptionsCompat, "once">): Promise<TValue>;
18
+ export declare const reactiveUtils: {
19
+ watch: typeof watch;
20
+ when: typeof when;
21
+ whenOnce: typeof whenOnce;
22
+ };
23
+ //# sourceMappingURL=reactive-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-utils.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/reactive-utils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3D;AAED,MAAM,WAAW,8BAA8B;IAC7C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,wBAAgB,KAAK,CAAC,MAAM,EAC1B,MAAM,EAAE,MAAM,MAAM,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,OAAO,GAAE,+BAAoC,GAC5C,yBAAyB,CAyD3B;AAED,wBAAgB,IAAI,CAAC,MAAM,EACzB,MAAM,EAAE,MAAM,MAAM,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EACjC,OAAO,GAAE,8BAAmC,GAC3C,yBAAyB,CAqD3B;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAC7B,MAAM,EAAE,MAAM,MAAM,EACpB,OAAO,GAAE,IAAI,CAAC,8BAA8B,EAAE,MAAM,CAAM,GACzD,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,eAAO,MAAM,aAAa;;;;CAIzB,CAAC"}