@honua/react 0.0.20-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +9 -0
  3. package/contract/analytics-sources.d.ts +149 -0
  4. package/contract/analytics-sources.d.ts.map +1 -0
  5. package/contract/analytics-sources.js +235 -0
  6. package/contract/edit-session.d.ts +203 -0
  7. package/contract/edit-session.d.ts.map +1 -0
  8. package/contract/edit-session.js +760 -0
  9. package/contract/edit-sketch.d.ts +91 -0
  10. package/contract/edit-sketch.d.ts.map +1 -0
  11. package/contract/edit-sketch.js +281 -0
  12. package/contract/index.d.ts +61 -0
  13. package/contract/index.d.ts.map +1 -0
  14. package/contract/index.js +51 -0
  15. package/contract/jobs.d.ts +149 -0
  16. package/contract/jobs.d.ts.map +1 -0
  17. package/contract/jobs.js +40 -0
  18. package/contract/source.d.ts +423 -0
  19. package/contract/source.d.ts.map +1 -0
  20. package/contract/source.js +3802 -0
  21. package/contract/spatial-aggregation.d.ts +336 -0
  22. package/contract/spatial-aggregation.d.ts.map +1 -0
  23. package/contract/spatial-aggregation.js +298 -0
  24. package/contract/temporal.d.ts +455 -0
  25. package/contract/temporal.d.ts.map +1 -0
  26. package/contract/temporal.js +146 -0
  27. package/contract/tiles.d.ts +370 -0
  28. package/contract/tiles.d.ts.map +1 -0
  29. package/contract/tiles.js +519 -0
  30. package/contract/types.d.ts +665 -0
  31. package/contract/types.d.ts.map +1 -0
  32. package/contract/types.js +175 -0
  33. package/contract/widget-source.d.ts +205 -0
  34. package/contract/widget-source.d.ts.map +1 -0
  35. package/contract/widget-source.js +1473 -0
  36. package/control-plane/client.d.ts +95 -0
  37. package/control-plane/client.d.ts.map +1 -0
  38. package/control-plane/client.js +374 -0
  39. package/control-plane/index.d.ts +18 -0
  40. package/control-plane/index.d.ts.map +1 -0
  41. package/control-plane/index.js +14 -0
  42. package/control-plane/types.d.ts +233 -0
  43. package/control-plane/types.d.ts.map +1 -0
  44. package/control-plane/types.js +7 -0
  45. package/core/batch.d.ts +37 -0
  46. package/core/batch.d.ts.map +1 -0
  47. package/core/batch.js +79 -0
  48. package/core/cache-state.d.ts +79 -0
  49. package/core/cache-state.d.ts.map +1 -0
  50. package/core/cache-state.js +87 -0
  51. package/core/client.d.ts +577 -0
  52. package/core/client.d.ts.map +1 -0
  53. package/core/client.js +1664 -0
  54. package/core/compatibility.d.ts +18 -0
  55. package/core/compatibility.d.ts.map +1 -0
  56. package/core/compatibility.js +245 -0
  57. package/core/errors.d.ts +107 -0
  58. package/core/errors.d.ts.map +1 -0
  59. package/core/errors.js +156 -0
  60. package/core/esri-geojson.d.ts +66 -0
  61. package/core/esri-geojson.d.ts.map +1 -0
  62. package/core/esri-geojson.js +363 -0
  63. package/core/geoservices.d.ts +34 -0
  64. package/core/geoservices.d.ts.map +1 -0
  65. package/core/geoservices.js +434 -0
  66. package/core/grpc-adapter.d.ts +23 -0
  67. package/core/grpc-adapter.d.ts.map +1 -0
  68. package/core/grpc-adapter.js +688 -0
  69. package/core/odata.d.ts +347 -0
  70. package/core/odata.d.ts.map +1 -0
  71. package/core/odata.js +913 -0
  72. package/core/ogc-conformance.d.ts +35 -0
  73. package/core/ogc-conformance.d.ts.map +1 -0
  74. package/core/ogc-conformance.js +134 -0
  75. package/core/ogc-features.d.ts +23 -0
  76. package/core/ogc-features.d.ts.map +1 -0
  77. package/core/ogc-features.js +114 -0
  78. package/core/ogc-maps.d.ts +49 -0
  79. package/core/ogc-maps.d.ts.map +1 -0
  80. package/core/ogc-maps.js +126 -0
  81. package/core/ogc-processes.d.ts +118 -0
  82. package/core/ogc-processes.d.ts.map +1 -0
  83. package/core/ogc-processes.js +423 -0
  84. package/core/ogc-records.d.ts +75 -0
  85. package/core/ogc-records.d.ts.map +1 -0
  86. package/core/ogc-records.js +251 -0
  87. package/core/ogc-tiles.d.ts +125 -0
  88. package/core/ogc-tiles.d.ts.map +1 -0
  89. package/core/ogc-tiles.js +183 -0
  90. package/core/path-utils.d.ts +69 -0
  91. package/core/path-utils.d.ts.map +1 -0
  92. package/core/path-utils.js +123 -0
  93. package/core/pbf-decoder.d.ts +39 -0
  94. package/core/pbf-decoder.d.ts.map +1 -0
  95. package/core/pbf-decoder.js +702 -0
  96. package/core/process-runner.d.ts +104 -0
  97. package/core/process-runner.d.ts.map +1 -0
  98. package/core/process-runner.js +315 -0
  99. package/core/protocol-transport.d.ts +76 -0
  100. package/core/protocol-transport.d.ts.map +1 -0
  101. package/core/protocol-transport.js +15 -0
  102. package/core/query-builder.d.ts +261 -0
  103. package/core/query-builder.d.ts.map +1 -0
  104. package/core/query-builder.js +538 -0
  105. package/core/request-pipeline.d.ts +88 -0
  106. package/core/request-pipeline.d.ts.map +1 -0
  107. package/core/request-pipeline.js +273 -0
  108. package/core/spatial-filter.d.ts +93 -0
  109. package/core/spatial-filter.d.ts.map +1 -0
  110. package/core/spatial-filter.js +153 -0
  111. package/core/stac.d.ts +55 -0
  112. package/core/stac.d.ts.map +1 -0
  113. package/core/stac.js +229 -0
  114. package/core/surfaces.d.ts +527 -0
  115. package/core/surfaces.d.ts.map +1 -0
  116. package/core/surfaces.js +1917 -0
  117. package/core/terrain-elevation.d.ts +114 -0
  118. package/core/terrain-elevation.d.ts.map +1 -0
  119. package/core/terrain-elevation.js +150 -0
  120. package/core/types.d.ts +1355 -0
  121. package/core/types.d.ts.map +1 -0
  122. package/core/types.js +13 -0
  123. package/core/wfs-capabilities.d.ts +143 -0
  124. package/core/wfs-capabilities.d.ts.map +1 -0
  125. package/core/wfs-capabilities.js +478 -0
  126. package/core/wfs-filter.d.ts +118 -0
  127. package/core/wfs-filter.d.ts.map +1 -0
  128. package/core/wfs-filter.js +634 -0
  129. package/core/wfs.d.ts +219 -0
  130. package/core/wfs.d.ts.map +1 -0
  131. package/core/wfs.js +406 -0
  132. package/core/wire-shared.d.ts +32 -0
  133. package/core/wire-shared.d.ts.map +1 -0
  134. package/core/wire-shared.js +76 -0
  135. package/core/wms-axis.d.ts +36 -0
  136. package/core/wms-axis.d.ts.map +1 -0
  137. package/core/wms-axis.js +73 -0
  138. package/core/wms-capabilities.d.ts +110 -0
  139. package/core/wms-capabilities.d.ts.map +1 -0
  140. package/core/wms-capabilities.js +559 -0
  141. package/core/wms-types.d.ts +128 -0
  142. package/core/wms-types.d.ts.map +1 -0
  143. package/core/wms-types.js +32 -0
  144. package/core/wms.d.ts +144 -0
  145. package/core/wms.d.ts.map +1 -0
  146. package/core/wms.js +338 -0
  147. package/core/wmts-capabilities.d.ts +82 -0
  148. package/core/wmts-capabilities.d.ts.map +1 -0
  149. package/core/wmts-capabilities.js +402 -0
  150. package/core/wmts.d.ts +103 -0
  151. package/core/wmts.d.ts.map +1 -0
  152. package/core/wmts.js +332 -0
  153. package/core/xml-text.d.ts +20 -0
  154. package/core/xml-text.d.ts.map +1 -0
  155. package/core/xml-text.js +85 -0
  156. package/esri-compat/basemap-gallery.d.ts +38 -0
  157. package/esri-compat/basemap-gallery.d.ts.map +1 -0
  158. package/esri-compat/basemap-gallery.js +159 -0
  159. package/esri-compat/basemap-layer-list.d.ts +35 -0
  160. package/esri-compat/basemap-layer-list.d.ts.map +1 -0
  161. package/esri-compat/basemap-layer-list.js +139 -0
  162. package/esri-compat/basemap.d.ts +32 -0
  163. package/esri-compat/basemap.d.ts.map +1 -0
  164. package/esri-compat/basemap.js +84 -0
  165. package/esri-compat/bookmarks.d.ts +36 -0
  166. package/esri-compat/bookmarks.d.ts.map +1 -0
  167. package/esri-compat/bookmarks.js +108 -0
  168. package/esri-compat/class-breaks-renderer.d.ts +50 -0
  169. package/esri-compat/class-breaks-renderer.d.ts.map +1 -0
  170. package/esri-compat/class-breaks-renderer.js +164 -0
  171. package/esri-compat/color.d.ts +22 -0
  172. package/esri-compat/color.d.ts.map +1 -0
  173. package/esri-compat/color.js +106 -0
  174. package/esri-compat/controls.d.ts +174 -0
  175. package/esri-compat/controls.d.ts.map +1 -0
  176. package/esri-compat/controls.js +479 -0
  177. package/esri-compat/coordinate-conversion.d.ts +41 -0
  178. package/esri-compat/coordinate-conversion.d.ts.map +1 -0
  179. package/esri-compat/coordinate-conversion.js +125 -0
  180. package/esri-compat/directions.d.ts +45 -0
  181. package/esri-compat/directions.d.ts.map +1 -0
  182. package/esri-compat/directions.js +123 -0
  183. package/esri-compat/editor.d.ts +47 -0
  184. package/esri-compat/editor.d.ts.map +1 -0
  185. package/esri-compat/editor.js +170 -0
  186. package/esri-compat/esri-config.d.ts +16 -0
  187. package/esri-compat/esri-config.d.ts.map +1 -0
  188. package/esri-compat/esri-config.js +23 -0
  189. package/esri-compat/esri-request.d.ts +17 -0
  190. package/esri-compat/esri-request.d.ts.map +1 -0
  191. package/esri-compat/esri-request.js +127 -0
  192. package/esri-compat/event-bus.d.ts +106 -0
  193. package/esri-compat/event-bus.d.ts.map +1 -0
  194. package/esri-compat/event-bus.js +90 -0
  195. package/esri-compat/expand.d.ts +36 -0
  196. package/esri-compat/expand.d.ts.map +1 -0
  197. package/esri-compat/expand.js +97 -0
  198. package/esri-compat/extent.d.ts +43 -0
  199. package/esri-compat/extent.d.ts.map +1 -0
  200. package/esri-compat/extent.js +140 -0
  201. package/esri-compat/feature-filter.d.ts +55 -0
  202. package/esri-compat/feature-filter.d.ts.map +1 -0
  203. package/esri-compat/feature-filter.js +109 -0
  204. package/esri-compat/feature-form.d.ts +64 -0
  205. package/esri-compat/feature-form.d.ts.map +1 -0
  206. package/esri-compat/feature-form.js +137 -0
  207. package/esri-compat/feature-layer.d.ts +173 -0
  208. package/esri-compat/feature-layer.d.ts.map +1 -0
  209. package/esri-compat/feature-layer.js +661 -0
  210. package/esri-compat/feature-set.d.ts +32 -0
  211. package/esri-compat/feature-set.d.ts.map +1 -0
  212. package/esri-compat/feature-set.js +80 -0
  213. package/esri-compat/feature-table.d.ts +141 -0
  214. package/esri-compat/feature-table.d.ts.map +1 -0
  215. package/esri-compat/feature-table.js +500 -0
  216. package/esri-compat/feature-templates.d.ts +41 -0
  217. package/esri-compat/feature-templates.d.ts.map +1 -0
  218. package/esri-compat/feature-templates.js +97 -0
  219. package/esri-compat/feature.d.ts +33 -0
  220. package/esri-compat/feature.d.ts.map +1 -0
  221. package/esri-compat/feature.js +83 -0
  222. package/esri-compat/geojson-layer.d.ts +86 -0
  223. package/esri-compat/geojson-layer.d.ts.map +1 -0
  224. package/esri-compat/geojson-layer.js +191 -0
  225. package/esri-compat/geometry-engine.d.ts +107 -0
  226. package/esri-compat/geometry-engine.d.ts.map +1 -0
  227. package/esri-compat/geometry-engine.js +266 -0
  228. package/esri-compat/graphic.d.ts +46 -0
  229. package/esri-compat/graphic.d.ts.map +1 -0
  230. package/esri-compat/graphic.js +103 -0
  231. package/esri-compat/graphics-layer.d.ts +49 -0
  232. package/esri-compat/graphics-layer.d.ts.map +1 -0
  233. package/esri-compat/graphics-layer.js +185 -0
  234. package/esri-compat/group-layer.d.ts +48 -0
  235. package/esri-compat/group-layer.d.ts.map +1 -0
  236. package/esri-compat/group-layer.js +212 -0
  237. package/esri-compat/identify.d.ts +71 -0
  238. package/esri-compat/identify.d.ts.map +1 -0
  239. package/esri-compat/identify.js +299 -0
  240. package/esri-compat/identity-manager.d.ts +31 -0
  241. package/esri-compat/identity-manager.d.ts.map +1 -0
  242. package/esri-compat/identity-manager.js +115 -0
  243. package/esri-compat/imagery-layer.d.ts +78 -0
  244. package/esri-compat/imagery-layer.d.ts.map +1 -0
  245. package/esri-compat/imagery-layer.js +167 -0
  246. package/esri-compat/label-class.d.ts +31 -0
  247. package/esri-compat/label-class.d.ts.map +1 -0
  248. package/esri-compat/label-class.js +102 -0
  249. package/esri-compat/layer-list.d.ts +77 -0
  250. package/esri-compat/layer-list.d.ts.map +1 -0
  251. package/esri-compat/layer-list.js +342 -0
  252. package/esri-compat/legend.d.ts +53 -0
  253. package/esri-compat/legend.d.ts.map +1 -0
  254. package/esri-compat/legend.js +254 -0
  255. package/esri-compat/map-image-layer.d.ts +162 -0
  256. package/esri-compat/map-image-layer.d.ts.map +1 -0
  257. package/esri-compat/map-image-layer.js +709 -0
  258. package/esri-compat/map-view.d.ts +323 -0
  259. package/esri-compat/map-view.d.ts.map +1 -0
  260. package/esri-compat/map-view.js +1175 -0
  261. package/esri-compat/map.d.ts +47 -0
  262. package/esri-compat/map.d.ts.map +1 -0
  263. package/esri-compat/map.js +209 -0
  264. package/esri-compat/measurement-2d.d.ts +61 -0
  265. package/esri-compat/measurement-2d.d.ts.map +1 -0
  266. package/esri-compat/measurement-2d.js +184 -0
  267. package/esri-compat/measurement.d.ts +45 -0
  268. package/esri-compat/measurement.d.ts.map +1 -0
  269. package/esri-compat/measurement.js +193 -0
  270. package/esri-compat/oauth-info.d.ts +35 -0
  271. package/esri-compat/oauth-info.d.ts.map +1 -0
  272. package/esri-compat/oauth-info.js +115 -0
  273. package/esri-compat/picture-marker-symbol.d.ts +35 -0
  274. package/esri-compat/picture-marker-symbol.d.ts.map +1 -0
  275. package/esri-compat/picture-marker-symbol.js +126 -0
  276. package/esri-compat/point.d.ts +31 -0
  277. package/esri-compat/point.d.ts.map +1 -0
  278. package/esri-compat/point.js +102 -0
  279. package/esri-compat/polygon.d.ts +31 -0
  280. package/esri-compat/polygon.d.ts.map +1 -0
  281. package/esri-compat/polygon.js +107 -0
  282. package/esri-compat/polyline.d.ts +31 -0
  283. package/esri-compat/polyline.d.ts.map +1 -0
  284. package/esri-compat/polyline.js +107 -0
  285. package/esri-compat/popup-template.d.ts +55 -0
  286. package/esri-compat/popup-template.d.ts.map +1 -0
  287. package/esri-compat/popup-template.js +128 -0
  288. package/esri-compat/popup.d.ts +54 -0
  289. package/esri-compat/popup.d.ts.map +1 -0
  290. package/esri-compat/popup.js +312 -0
  291. package/esri-compat/print.d.ts +47 -0
  292. package/esri-compat/print.d.ts.map +1 -0
  293. package/esri-compat/print.js +105 -0
  294. package/esri-compat/query.d.ts +58 -0
  295. package/esri-compat/query.d.ts.map +1 -0
  296. package/esri-compat/query.js +128 -0
  297. package/esri-compat/reactive-utils.d.ts +24 -0
  298. package/esri-compat/reactive-utils.d.ts.map +1 -0
  299. package/esri-compat/reactive-utils.js +193 -0
  300. package/esri-compat/request.d.ts +41 -0
  301. package/esri-compat/request.d.ts.map +1 -0
  302. package/esri-compat/request.js +253 -0
  303. package/esri-compat/route-layer.d.ts +59 -0
  304. package/esri-compat/route-layer.d.ts.map +1 -0
  305. package/esri-compat/route-layer.js +223 -0
  306. package/esri-compat/route-task.d.ts +88 -0
  307. package/esri-compat/route-task.d.ts.map +1 -0
  308. package/esri-compat/route-task.js +225 -0
  309. package/esri-compat/scene-view.d.ts +41 -0
  310. package/esri-compat/scene-view.d.ts.map +1 -0
  311. package/esri-compat/scene-view.js +68 -0
  312. package/esri-compat/search.d.ts +112 -0
  313. package/esri-compat/search.d.ts.map +1 -0
  314. package/esri-compat/search.js +820 -0
  315. package/esri-compat/simple-fill-symbol.d.ts +27 -0
  316. package/esri-compat/simple-fill-symbol.d.ts.map +1 -0
  317. package/esri-compat/simple-fill-symbol.js +85 -0
  318. package/esri-compat/simple-line-symbol.d.ts +27 -0
  319. package/esri-compat/simple-line-symbol.d.ts.map +1 -0
  320. package/esri-compat/simple-line-symbol.js +85 -0
  321. package/esri-compat/simple-marker-symbol.d.ts +29 -0
  322. package/esri-compat/simple-marker-symbol.d.ts.map +1 -0
  323. package/esri-compat/simple-marker-symbol.js +92 -0
  324. package/esri-compat/simple-renderer.d.ts +29 -0
  325. package/esri-compat/simple-renderer.d.ts.map +1 -0
  326. package/esri-compat/simple-renderer.js +92 -0
  327. package/esri-compat/sketch.d.ts +64 -0
  328. package/esri-compat/sketch.d.ts.map +1 -0
  329. package/esri-compat/sketch.js +227 -0
  330. package/esri-compat/spatial-reference.d.ts +31 -0
  331. package/esri-compat/spatial-reference.d.ts.map +1 -0
  332. package/esri-compat/spatial-reference.js +102 -0
  333. package/esri-compat/swipe.d.ts +34 -0
  334. package/esri-compat/swipe.d.ts.map +1 -0
  335. package/esri-compat/swipe.js +93 -0
  336. package/esri-compat/table-list.d.ts +36 -0
  337. package/esri-compat/table-list.d.ts.map +1 -0
  338. package/esri-compat/table-list.js +126 -0
  339. package/esri-compat/text-symbol.d.ts +37 -0
  340. package/esri-compat/text-symbol.d.ts.map +1 -0
  341. package/esri-compat/text-symbol.js +123 -0
  342. package/esri-compat/tile-layer.d.ts +52 -0
  343. package/esri-compat/tile-layer.d.ts.map +1 -0
  344. package/esri-compat/tile-layer.js +168 -0
  345. package/esri-compat/time-slider.d.ts +70 -0
  346. package/esri-compat/time-slider.d.ts.map +1 -0
  347. package/esri-compat/time-slider.js +208 -0
  348. package/esri-compat/track.d.ts +51 -0
  349. package/esri-compat/track.d.ts.map +1 -0
  350. package/esri-compat/track.js +174 -0
  351. package/esri-compat/unique-value-renderer.d.ts +41 -0
  352. package/esri-compat/unique-value-renderer.d.ts.map +1 -0
  353. package/esri-compat/unique-value-renderer.js +127 -0
  354. package/esri-compat/url.d.ts +13 -0
  355. package/esri-compat/url.d.ts.map +1 -0
  356. package/esri-compat/url.js +68 -0
  357. package/esri-compat/vector-tile-layer.d.ts +47 -0
  358. package/esri-compat/vector-tile-layer.d.ts.map +1 -0
  359. package/esri-compat/vector-tile-layer.js +130 -0
  360. package/esri-compat/web-map.d.ts +14 -0
  361. package/esri-compat/web-map.d.ts.map +1 -0
  362. package/esri-compat/web-map.js +24 -0
  363. package/esri-compat/wfs-layer.d.ts +64 -0
  364. package/esri-compat/wfs-layer.d.ts.map +1 -0
  365. package/esri-compat/wfs-layer.js +145 -0
  366. package/esri-compat/wms-layer.d.ts +76 -0
  367. package/esri-compat/wms-layer.d.ts.map +1 -0
  368. package/esri-compat/wms-layer.js +157 -0
  369. package/exploration/context.d.ts +25 -0
  370. package/exploration/context.d.ts.map +1 -0
  371. package/exploration/context.js +396 -0
  372. package/exploration/index.d.ts +27 -0
  373. package/exploration/index.d.ts.map +1 -0
  374. package/exploration/index.js +24 -0
  375. package/exploration/presets.d.ts +27 -0
  376. package/exploration/presets.d.ts.map +1 -0
  377. package/exploration/presets.js +114 -0
  378. package/exploration/reducer.d.ts +23 -0
  379. package/exploration/reducer.d.ts.map +1 -0
  380. package/exploration/reducer.js +332 -0
  381. package/exploration/selection.d.ts +25 -0
  382. package/exploration/selection.d.ts.map +1 -0
  383. package/exploration/selection.js +34 -0
  384. package/exploration/selectors.d.ts +56 -0
  385. package/exploration/selectors.d.ts.map +1 -0
  386. package/exploration/selectors.js +110 -0
  387. package/exploration/types.d.ts +294 -0
  388. package/exploration/types.d.ts.map +1 -0
  389. package/exploration/types.js +33 -0
  390. package/expr/expression.d.ts +457 -0
  391. package/expr/expression.d.ts.map +1 -0
  392. package/expr/expression.js +663 -0
  393. package/expr/index.d.ts +32 -0
  394. package/expr/index.d.ts.map +1 -0
  395. package/expr/index.js +30 -0
  396. package/gen/honua/v1/feature_service_pb.d.ts +918 -0
  397. package/gen/honua/v1/feature_service_pb.d.ts.map +1 -0
  398. package/gen/honua/v1/feature_service_pb.js +375 -0
  399. package/generated-app/errors.d.ts +41 -0
  400. package/generated-app/errors.d.ts.map +1 -0
  401. package/generated-app/errors.js +41 -0
  402. package/generated-app/index.d.ts +17 -0
  403. package/generated-app/index.d.ts.map +1 -0
  404. package/generated-app/index.js +12 -0
  405. package/generated-app/manifest.d.ts +183 -0
  406. package/generated-app/manifest.d.ts.map +1 -0
  407. package/generated-app/manifest.js +14 -0
  408. package/generated-app/projection.d.ts +44 -0
  409. package/generated-app/projection.d.ts.map +1 -0
  410. package/generated-app/projection.js +234 -0
  411. package/generated-app/runtime.d.ts +215 -0
  412. package/generated-app/runtime.d.ts.map +1 -0
  413. package/generated-app/runtime.js +1196 -0
  414. package/interactions/detail-model.d.ts +54 -0
  415. package/interactions/detail-model.d.ts.map +1 -0
  416. package/interactions/detail-model.js +105 -0
  417. package/interactions/exploration-bindings.d.ts +120 -0
  418. package/interactions/exploration-bindings.d.ts.map +1 -0
  419. package/interactions/exploration-bindings.js +218 -0
  420. package/interactions/feature-state.d.ts +144 -0
  421. package/interactions/feature-state.d.ts.map +1 -0
  422. package/interactions/feature-state.js +169 -0
  423. package/interactions/hit-test.d.ts +112 -0
  424. package/interactions/hit-test.d.ts.map +1 -0
  425. package/interactions/hit-test.js +291 -0
  426. package/interactions/index.d.ts +31 -0
  427. package/interactions/index.d.ts.map +1 -0
  428. package/interactions/index.js +24 -0
  429. package/interactions/share-state.d.ts +36 -0
  430. package/interactions/share-state.d.ts.map +1 -0
  431. package/interactions/share-state.js +123 -0
  432. package/map/feature-service-adapter.d.ts +138 -0
  433. package/map/feature-service-adapter.d.ts.map +1 -0
  434. package/map/feature-service-adapter.js +279 -0
  435. package/map/honua-map.d.ts +203 -0
  436. package/map/honua-map.d.ts.map +1 -0
  437. package/map/honua-map.js +347 -0
  438. package/map/index.d.ts +27 -0
  439. package/map/index.d.ts.map +1 -0
  440. package/map/index.js +22 -0
  441. package/map/maplibre-target.d.ts +103 -0
  442. package/map/maplibre-target.d.ts.map +1 -0
  443. package/map/maplibre-target.js +164 -0
  444. package/map/webmap-maplibre.d.ts +60 -0
  445. package/map/webmap-maplibre.d.ts.map +1 -0
  446. package/map/webmap-maplibre.js +212 -0
  447. package/package.json +37 -0
  448. package/react/context.d.ts +32 -0
  449. package/react/context.d.ts.map +1 -0
  450. package/react/context.js +19 -0
  451. package/react/honua-layer.d.ts +35 -0
  452. package/react/honua-layer.d.ts.map +1 -0
  453. package/react/honua-layer.js +47 -0
  454. package/react/honua-map.d.ts +83 -0
  455. package/react/honua-map.d.ts.map +1 -0
  456. package/react/honua-map.js +109 -0
  457. package/react/honua-popup.d.ts +26 -0
  458. package/react/honua-popup.d.ts.map +1 -0
  459. package/react/honua-popup.js +34 -0
  460. package/react/hooks.d.ts +127 -0
  461. package/react/hooks.d.ts.map +1 -0
  462. package/react/hooks.js +206 -0
  463. package/react/index.d.ts +42 -0
  464. package/react/index.d.ts.map +1 -0
  465. package/react/index.js +34 -0
  466. package/react/provider.d.ts +36 -0
  467. package/react/provider.d.ts.map +1 -0
  468. package/react/provider.js +35 -0
  469. package/react/query-cache.d.ts +76 -0
  470. package/react/query-cache.d.ts.map +1 -0
  471. package/react/query-cache.js +188 -0
  472. package/runtime/diff.d.ts +31 -0
  473. package/runtime/diff.d.ts.map +1 -0
  474. package/runtime/diff.js +143 -0
  475. package/runtime/errors.d.ts +40 -0
  476. package/runtime/errors.d.ts.map +1 -0
  477. package/runtime/errors.js +35 -0
  478. package/runtime/index.d.ts +59 -0
  479. package/runtime/index.d.ts.map +1 -0
  480. package/runtime/index.js +43 -0
  481. package/runtime/legend.d.ts +23 -0
  482. package/runtime/legend.d.ts.map +1 -0
  483. package/runtime/legend.js +38 -0
  484. package/runtime/load-package.d.ts +125 -0
  485. package/runtime/load-package.d.ts.map +1 -0
  486. package/runtime/load-package.js +264 -0
  487. package/runtime/map-package-fetch.d.ts +107 -0
  488. package/runtime/map-package-fetch.d.ts.map +1 -0
  489. package/runtime/map-package-fetch.js +336 -0
  490. package/runtime/map-package-realtime.d.ts +169 -0
  491. package/runtime/map-package-realtime.d.ts.map +1 -0
  492. package/runtime/map-package-realtime.js +350 -0
  493. package/runtime/map-package-validation.d.ts +43 -0
  494. package/runtime/map-package-validation.d.ts.map +1 -0
  495. package/runtime/map-package-validation.js +269 -0
  496. package/runtime/map-package-watch.d.ts +78 -0
  497. package/runtime/map-package-watch.d.ts.map +1 -0
  498. package/runtime/map-package-watch.js +695 -0
  499. package/runtime/map-package.d.ts +167 -0
  500. package/runtime/map-package.d.ts.map +1 -0
  501. package/runtime/map-package.js +15 -0
  502. package/runtime/ogc-styles.d.ts +110 -0
  503. package/runtime/ogc-styles.d.ts.map +1 -0
  504. package/runtime/ogc-styles.js +195 -0
  505. package/runtime/popups.d.ts +62 -0
  506. package/runtime/popups.d.ts.map +1 -0
  507. package/runtime/popups.js +95 -0
  508. package/runtime/query-tiles.d.ts +217 -0
  509. package/runtime/query-tiles.d.ts.map +1 -0
  510. package/runtime/query-tiles.js +801 -0
  511. package/runtime/runtime.d.ts +243 -0
  512. package/runtime/runtime.d.ts.map +1 -0
  513. package/runtime/runtime.js +1147 -0
  514. package/runtime/source-bridge.d.ts +99 -0
  515. package/runtime/source-bridge.d.ts.map +1 -0
  516. package/runtime/source-bridge.js +401 -0
  517. package/runtime/style-compose.d.ts +46 -0
  518. package/runtime/style-compose.d.ts.map +1 -0
  519. package/runtime/style-compose.js +144 -0
  520. package/runtime/style-interactions.d.ts +141 -0
  521. package/runtime/style-interactions.d.ts.map +1 -0
  522. package/runtime/style-interactions.js +574 -0
  523. package/runtime/style-spec-validation.d.ts +23 -0
  524. package/runtime/style-spec-validation.d.ts.map +1 -0
  525. package/runtime/style-spec-validation.js +357 -0
  526. package/studio/capability-manifest.d.ts +285 -0
  527. package/studio/capability-manifest.d.ts.map +1 -0
  528. package/studio/capability-manifest.js +59 -0
  529. package/studio/chart-spec.d.ts +85 -0
  530. package/studio/chart-spec.d.ts.map +1 -0
  531. package/studio/chart-spec.js +106 -0
  532. package/studio/index.d.ts +34 -0
  533. package/studio/index.d.ts.map +1 -0
  534. package/studio/index.js +27 -0
  535. package/studio/provenance.d.ts +131 -0
  536. package/studio/provenance.d.ts.map +1 -0
  537. package/studio/provenance.js +39 -0
  538. package/studio/publish.d.ts +64 -0
  539. package/studio/publish.d.ts.map +1 -0
  540. package/studio/publish.js +13 -0
  541. package/studio/types.d.ts +278 -0
  542. package/studio/types.d.ts.map +1 -0
  543. package/studio/types.js +71 -0
  544. package/studio/validate.d.ts +45 -0
  545. package/studio/validate.d.ts.map +1 -0
  546. package/studio/validate.js +255 -0
  547. package/studio/validation.d.ts +112 -0
  548. package/studio/validation.d.ts.map +1 -0
  549. package/studio/validation.js +42 -0
  550. package/style/factory.d.ts +30 -0
  551. package/style/factory.d.ts.map +1 -0
  552. package/style/factory.js +61 -0
  553. package/style/index.d.ts +25 -0
  554. package/style/index.d.ts.map +1 -0
  555. package/style/index.js +24 -0
  556. package/style/specification.d.ts +203 -0
  557. package/style/specification.d.ts.map +1 -0
  558. package/style/specification.js +178 -0
  559. package/style/wms-wmts-resolvers.d.ts +38 -0
  560. package/style/wms-wmts-resolvers.d.ts.map +1 -0
  561. package/style/wms-wmts-resolvers.js +92 -0
  562. package/webmap/contract.d.ts +28 -0
  563. package/webmap/contract.d.ts.map +1 -0
  564. package/webmap/contract.js +130 -0
  565. package/webmap/convert-basemap.d.ts +17 -0
  566. package/webmap/convert-basemap.d.ts.map +1 -0
  567. package/webmap/convert-basemap.js +78 -0
  568. package/webmap/convert-extent.d.ts +17 -0
  569. package/webmap/convert-extent.d.ts.map +1 -0
  570. package/webmap/convert-extent.js +114 -0
  571. package/webmap/convert-label.d.ts +13 -0
  572. package/webmap/convert-label.d.ts.map +1 -0
  573. package/webmap/convert-label.js +125 -0
  574. package/webmap/convert-layer.d.ts +22 -0
  575. package/webmap/convert-layer.d.ts.map +1 -0
  576. package/webmap/convert-layer.js +181 -0
  577. package/webmap/convert-popup.d.ts +34 -0
  578. package/webmap/convert-popup.d.ts.map +1 -0
  579. package/webmap/convert-popup.js +68 -0
  580. package/webmap/convert-renderer.d.ts +17 -0
  581. package/webmap/convert-renderer.d.ts.map +1 -0
  582. package/webmap/convert-renderer.js +161 -0
  583. package/webmap/convert-symbol.d.ts +17 -0
  584. package/webmap/convert-symbol.d.ts.map +1 -0
  585. package/webmap/convert-symbol.js +122 -0
  586. package/webmap/index.d.ts +44 -0
  587. package/webmap/index.d.ts.map +1 -0
  588. package/webmap/index.js +33 -0
  589. package/webmap/parse.d.ts +25 -0
  590. package/webmap/parse.d.ts.map +1 -0
  591. package/webmap/parse.js +83 -0
  592. package/webmap/types.d.ts +264 -0
  593. package/webmap/types.d.ts.map +1 -0
  594. package/webmap/types.js +13 -0
  595. package/webmap/warnings.d.ts +30 -0
  596. package/webmap/warnings.d.ts.map +1 -0
  597. package/webmap/warnings.js +37 -0
@@ -0,0 +1,820 @@
1
+ import { CompatEventBus, resolveCompatEventBus, safeInvokeCompatListener, } from "./event-bus.js";
2
+ const DEFAULT_SEARCH_SOURCE_MAX_FEATURE_CANDIDATES = 200;
3
+ const DEFAULT_SEARCH_SOURCE_MAX_RESULTS = 10;
4
+ const DEFAULT_SEARCH_SOURCE_MAX_SUGGESTIONS = 5;
5
+ export class SearchCompat {
6
+ view;
7
+ container;
8
+ eventBus;
9
+ autoNavigate;
10
+ includeDefaultSources;
11
+ autoRefreshSources;
12
+ loaded;
13
+ loadStatus;
14
+ sources;
15
+ searchTerm;
16
+ results;
17
+ suggestions;
18
+ selectedResult;
19
+ selectedResultIndex;
20
+ defaultSourceMaxFeatureCandidates;
21
+ defaultSourceMaxResults;
22
+ defaultSourceMaxSuggestions;
23
+ searchAllEnabled;
24
+ popupEnabled;
25
+ maxResults;
26
+ allPlaceholder;
27
+ locationEnabled;
28
+ resultGraphicEnabled;
29
+ subscriptions;
30
+ watchListeners;
31
+ customSources;
32
+ constructor(options = {}) {
33
+ this.view = options.view;
34
+ this.container = options.container ?? null;
35
+ this.eventBus = options.eventBus ?? resolveCompatEventBus(options.view) ?? new CompatEventBus();
36
+ this.autoNavigate = options.autoNavigate ?? true;
37
+ this.includeDefaultSources = options.includeDefaultSources ?? true;
38
+ this.autoRefreshSources = options.autoRefreshSources ?? true;
39
+ this.loaded = false;
40
+ this.loadStatus = "not-loaded";
41
+ this.customSources = [...(options.sources ?? [])];
42
+ this.sources = [];
43
+ this.searchTerm = "";
44
+ this.results = [];
45
+ this.suggestions = [];
46
+ this.selectedResult = undefined;
47
+ this.selectedResultIndex = -1;
48
+ this.defaultSourceMaxFeatureCandidates = normalizeSearchLimit(options.defaultSourceMaxFeatureCandidates, DEFAULT_SEARCH_SOURCE_MAX_FEATURE_CANDIDATES);
49
+ this.defaultSourceMaxResults = normalizeSearchLimit(options.defaultSourceMaxResults, DEFAULT_SEARCH_SOURCE_MAX_RESULTS);
50
+ this.defaultSourceMaxSuggestions = normalizeSearchLimit(options.defaultSourceMaxSuggestions, DEFAULT_SEARCH_SOURCE_MAX_SUGGESTIONS);
51
+ this.searchAllEnabled = options.searchAllEnabled ?? true;
52
+ this.popupEnabled = options.popupEnabled ?? true;
53
+ this.maxResults = normalizeSearchLimit(options.maxResults, DEFAULT_SEARCH_SOURCE_MAX_RESULTS);
54
+ this.allPlaceholder = options.allPlaceholder ?? "";
55
+ this.locationEnabled = options.locationEnabled ?? true;
56
+ this.resultGraphicEnabled = options.resultGraphicEnabled ?? true;
57
+ this.subscriptions = [];
58
+ this.watchListeners = new Map();
59
+ this.refreshSourceSubscriptions();
60
+ this.rebuildSources(false);
61
+ }
62
+ async load() {
63
+ if (this.loaded) {
64
+ return this;
65
+ }
66
+ this.loadStatus = "loading";
67
+ this.notifyWatchers("loadStatus", this.loadStatus);
68
+ this.eventBus.emit("search.loading", undefined, this);
69
+ this.rebuildSources(false);
70
+ this.loaded = true;
71
+ this.notifyWatchers("loaded", this.loaded);
72
+ this.loadStatus = "loaded";
73
+ this.notifyWatchers("loadStatus", this.loadStatus);
74
+ this.eventBus.emit("search.loaded", { sourceCount: this.sources.length }, this);
75
+ return this;
76
+ }
77
+ async when(callback) {
78
+ const widget = await this.load();
79
+ if (callback) {
80
+ callback(widget);
81
+ }
82
+ return widget;
83
+ }
84
+ watch(propertyName, listener) {
85
+ let listeners = this.watchListeners.get(propertyName);
86
+ if (!listeners) {
87
+ listeners = new Set();
88
+ this.watchListeners.set(propertyName, listeners);
89
+ }
90
+ listeners.add(listener);
91
+ return {
92
+ remove: () => {
93
+ listeners?.delete(listener);
94
+ },
95
+ };
96
+ }
97
+ async search(termOrRequest) {
98
+ const searchTerm = typeof termOrRequest === "string"
99
+ ? termOrRequest
100
+ : typeof termOrRequest.searchTerm === "string"
101
+ ? termOrRequest.searchTerm
102
+ : "";
103
+ this.searchTerm = searchTerm;
104
+ this.notifyWatchers("searchTerm", this.searchTerm);
105
+ this.eventBus.emit("search.started", { searchTerm }, this);
106
+ const sourceResults = await Promise.all(this.sources.map(async (source) => {
107
+ try {
108
+ const results = await source.search({ searchTerm });
109
+ return { source, results };
110
+ }
111
+ catch (error) {
112
+ this.eventBus.emit("search.source-error", { searchTerm, error }, this);
113
+ return { source, results: [] };
114
+ }
115
+ }));
116
+ const allResults = [];
117
+ for (const sourceResult of sourceResults) {
118
+ for (const result of sourceResult.results) {
119
+ allResults.push({
120
+ ...result,
121
+ source: result.source ?? sourceResult.source,
122
+ });
123
+ }
124
+ }
125
+ this.results = allResults;
126
+ this.notifyWatchers("results", this.results);
127
+ this.selectedResult = this.results[0];
128
+ this.notifyWatchers("selectedResult", this.selectedResult);
129
+ this.selectedResultIndex = this.selectedResult ? 0 : -1;
130
+ this.notifyWatchers("selectedResultIndex", this.selectedResultIndex);
131
+ if (this.autoNavigate) {
132
+ await this.navigateToSelectedResult();
133
+ }
134
+ const response = {
135
+ searchTerm,
136
+ results: [...this.results],
137
+ };
138
+ this.eventBus.emit("search.completed", {
139
+ searchTerm,
140
+ resultCount: this.results.length,
141
+ }, this);
142
+ return response;
143
+ }
144
+ async suggest(termOrRequest) {
145
+ const searchTerm = typeof termOrRequest === "string"
146
+ ? termOrRequest
147
+ : typeof termOrRequest.searchTerm === "string"
148
+ ? termOrRequest.searchTerm
149
+ : "";
150
+ const suggestionSources = this.sources.filter((source) => typeof source.suggest === "function");
151
+ const sourceSuggestions = await Promise.all(suggestionSources.map(async (source) => {
152
+ if (!source.suggest) {
153
+ return { source, suggestions: [] };
154
+ }
155
+ try {
156
+ const suggestions = await source.suggest({ searchTerm });
157
+ return { source, suggestions };
158
+ }
159
+ catch (error) {
160
+ this.eventBus.emit("search.suggest-error", { searchTerm, error }, this);
161
+ return { source, suggestions: [] };
162
+ }
163
+ }));
164
+ const suggestions = [];
165
+ for (const sourceSuggestion of sourceSuggestions) {
166
+ for (const suggestion of sourceSuggestion.suggestions) {
167
+ suggestions.push({
168
+ ...suggestion,
169
+ source: suggestion.source ?? sourceSuggestion.source,
170
+ });
171
+ }
172
+ }
173
+ this.suggestions = suggestions;
174
+ this.notifyWatchers("suggestions", this.suggestions);
175
+ this.eventBus.emit("search.suggestions-updated", {
176
+ searchTerm,
177
+ suggestionCount: suggestions.length,
178
+ }, this);
179
+ return {
180
+ searchTerm,
181
+ suggestions: [...suggestions],
182
+ };
183
+ }
184
+ clear() {
185
+ this.searchTerm = "";
186
+ this.notifyWatchers("searchTerm", this.searchTerm);
187
+ this.results = [];
188
+ this.notifyWatchers("results", this.results);
189
+ this.suggestions = [];
190
+ this.notifyWatchers("suggestions", this.suggestions);
191
+ this.selectedResult = undefined;
192
+ this.notifyWatchers("selectedResult", this.selectedResult);
193
+ this.selectedResultIndex = -1;
194
+ this.notifyWatchers("selectedResultIndex", this.selectedResultIndex);
195
+ this.eventBus.emit("search.cleared", undefined, this);
196
+ }
197
+ setSources(sources, options = {}) {
198
+ const includeDefaults = options.includeDefaultSources ?? this.includeDefaultSources;
199
+ this.includeDefaultSources = includeDefaults;
200
+ this.notifyWatchers("includeDefaultSources", this.includeDefaultSources);
201
+ this.customSources = [...sources];
202
+ this.refreshSourceSubscriptions();
203
+ this.rebuildSources(true);
204
+ }
205
+ addSource(source) {
206
+ this.customSources.push(source);
207
+ this.rebuildSources(true);
208
+ }
209
+ removeSource(source) {
210
+ const index = this.customSources.indexOf(source);
211
+ if (index < 0) {
212
+ return false;
213
+ }
214
+ this.customSources.splice(index, 1);
215
+ this.rebuildSources(true);
216
+ return true;
217
+ }
218
+ async selectResult(resultOrIndex) {
219
+ if (this.results.length === 0) {
220
+ return undefined;
221
+ }
222
+ const index = typeof resultOrIndex === "number"
223
+ ? normalizeResultIndex(resultOrIndex, this.results.length)
224
+ : this.results.indexOf(resultOrIndex);
225
+ if (index < 0) {
226
+ return undefined;
227
+ }
228
+ this.selectedResultIndex = index;
229
+ this.notifyWatchers("selectedResultIndex", this.selectedResultIndex);
230
+ this.selectedResult = this.results[index];
231
+ this.notifyWatchers("selectedResult", this.selectedResult);
232
+ if (this.autoNavigate) {
233
+ await this.navigateToSelectedResult();
234
+ }
235
+ this.eventBus.emit("search.result-selected", {
236
+ selectedResultIndex: this.selectedResultIndex,
237
+ selectedResult: this.selectedResult,
238
+ }, this);
239
+ return this.selectedResult;
240
+ }
241
+ async nextResult() {
242
+ if (this.results.length === 0) {
243
+ return undefined;
244
+ }
245
+ const current = this.selectedResultIndex >= 0 ? this.selectedResultIndex : 0;
246
+ const next = Math.min(current + 1, this.results.length - 1);
247
+ return this.selectResult(next);
248
+ }
249
+ async previousResult() {
250
+ if (this.results.length === 0) {
251
+ return undefined;
252
+ }
253
+ const current = this.selectedResultIndex >= 0 ? this.selectedResultIndex : 0;
254
+ const previous = Math.max(current - 1, 0);
255
+ return this.selectResult(previous);
256
+ }
257
+ destroy() {
258
+ for (const subscription of this.subscriptions.splice(0)) {
259
+ subscription.remove();
260
+ }
261
+ this.watchListeners.clear();
262
+ }
263
+ async navigateToSelectedResult() {
264
+ if (!this.selectedResult) {
265
+ return;
266
+ }
267
+ if (!isGoToProvider(this.view)) {
268
+ return;
269
+ }
270
+ const target = this.selectedResult.extent ?? this.selectedResult.location ?? this.selectedResult.feature;
271
+ if (target === undefined) {
272
+ return;
273
+ }
274
+ await this.view.goTo(target);
275
+ this.eventBus.emit("search.navigated", { target }, this);
276
+ }
277
+ rebuildSources(emitChange) {
278
+ this.sources = [
279
+ ...this.customSources,
280
+ ...(this.includeDefaultSources
281
+ ? resolveViewSearchSources(this.view, {
282
+ maxFeatureCandidates: this.defaultSourceMaxFeatureCandidates,
283
+ maxResults: this.defaultSourceMaxResults,
284
+ maxSuggestions: this.defaultSourceMaxSuggestions,
285
+ })
286
+ : []),
287
+ ];
288
+ this.notifyWatchers("sources", this.sources);
289
+ if (emitChange) {
290
+ this.eventBus.emit("search.sources-changed", { sourceCount: this.sources.length }, this);
291
+ }
292
+ }
293
+ refreshSourceSubscriptions() {
294
+ for (const subscription of this.subscriptions.splice(0)) {
295
+ subscription.remove();
296
+ }
297
+ if (!this.includeDefaultSources || !this.autoRefreshSources) {
298
+ return;
299
+ }
300
+ const refreshEvents = [
301
+ "map.layer-added",
302
+ "map.layer-removed",
303
+ "map.layers-added",
304
+ "map.layers-cleared",
305
+ "map.layer-reordered",
306
+ "group-layer.layer-added",
307
+ "group-layer.layer-removed",
308
+ "group-layer.layers-added",
309
+ "group-layer.layers-cleared",
310
+ ];
311
+ for (const eventType of refreshEvents) {
312
+ this.subscriptions.push(this.eventBus.on(eventType, () => {
313
+ this.rebuildSources(true);
314
+ }));
315
+ }
316
+ }
317
+ notifyWatchers(propertyName, value) {
318
+ const listeners = this.watchListeners.get(propertyName);
319
+ if (!listeners) {
320
+ return;
321
+ }
322
+ for (const listener of listeners) {
323
+ safeInvokeCompatListener(listener, value);
324
+ }
325
+ }
326
+ }
327
+ function isGoToProvider(value) {
328
+ return isRecord(value) && typeof value.goTo === "function";
329
+ }
330
+ function resolveViewSearchSources(view, limits) {
331
+ const map = extractMapFromView(view);
332
+ const layers = extractLayersFromMap(map);
333
+ const sources = [];
334
+ for (const layer of layers) {
335
+ if (isQueryFeaturesProvider(layer)) {
336
+ let fieldSearchConfig = resolveLayerSearchFieldConfig(layer);
337
+ let fieldSearchUnsupported = false;
338
+ const source = buildLayerSearchSource(layer, limits, async (normalizedTerm) => {
339
+ if (!fieldSearchUnsupported && fieldSearchConfig.searchableFields.length === 0) {
340
+ fieldSearchConfig = resolveLayerSearchFieldConfig(layer);
341
+ }
342
+ const fallbackQueryOptions = createFallbackLayerSearchQueryOptions(limits.maxFeatureCandidates, normalizedTerm, fieldSearchConfig.outFields);
343
+ const optimizedQueryOptions = !fieldSearchUnsupported && fieldSearchConfig.searchableFields.length > 0
344
+ ? createOptimizedLayerSearchQueryOptions(fieldSearchConfig, normalizedTerm, limits.maxFeatureCandidates)
345
+ : undefined;
346
+ let response;
347
+ if (optimizedQueryOptions) {
348
+ try {
349
+ response = await layer.queryFeatures(optimizedQueryOptions);
350
+ }
351
+ catch {
352
+ fieldSearchUnsupported = true;
353
+ response = await layer.queryFeatures(fallbackQueryOptions);
354
+ }
355
+ }
356
+ else {
357
+ response = await layer.queryFeatures(fallbackQueryOptions);
358
+ }
359
+ return extractFeatures(response);
360
+ });
361
+ sources.push(source);
362
+ continue;
363
+ }
364
+ if (!isOgcItemsProvider(layer)) {
365
+ continue;
366
+ }
367
+ const source = buildLayerSearchSource(layer, limits, async () => {
368
+ const response = await layer.items({
369
+ limit: limits.maxFeatureCandidates,
370
+ });
371
+ return extractFeatures(response);
372
+ });
373
+ sources.push(source);
374
+ }
375
+ return sources;
376
+ }
377
+ function buildLayerSearchSource(layer, limits, resolveFeatures) {
378
+ let lastSearchTerm;
379
+ let lastSearchResults = [];
380
+ let lastSearchPromise;
381
+ const executeSearch = async (searchTerm) => {
382
+ const normalizedTerm = searchTerm.trim().toLowerCase();
383
+ if (!normalizedTerm) {
384
+ lastSearchTerm = undefined;
385
+ lastSearchResults = [];
386
+ lastSearchPromise = undefined;
387
+ return [];
388
+ }
389
+ if (lastSearchTerm === normalizedTerm && lastSearchPromise) {
390
+ return lastSearchPromise;
391
+ }
392
+ if (lastSearchTerm === normalizedTerm && lastSearchResults.length > 0) {
393
+ return [...lastSearchResults];
394
+ }
395
+ const inFlight = (async () => {
396
+ const features = await resolveFeatures(normalizedTerm);
397
+ const matches = [];
398
+ for (const feature of features) {
399
+ if (!featureMatchesTerm(feature, normalizedTerm)) {
400
+ continue;
401
+ }
402
+ const name = describeFeature(feature, layer, matches.length);
403
+ matches.push({
404
+ name,
405
+ feature: isRecord(feature) ? feature : null,
406
+ location: extractFeatureLocation(feature),
407
+ source: layer,
408
+ });
409
+ if (matches.length >= limits.maxResults) {
410
+ break;
411
+ }
412
+ }
413
+ lastSearchTerm = normalizedTerm;
414
+ lastSearchResults = matches;
415
+ return [...matches];
416
+ })();
417
+ lastSearchTerm = normalizedTerm;
418
+ lastSearchPromise = inFlight;
419
+ try {
420
+ return await inFlight;
421
+ }
422
+ finally {
423
+ if (lastSearchPromise === inFlight) {
424
+ lastSearchPromise = undefined;
425
+ }
426
+ }
427
+ };
428
+ return {
429
+ search: async ({ searchTerm }) => executeSearch(searchTerm),
430
+ suggest: async ({ searchTerm }) => {
431
+ const response = await executeSearch(searchTerm);
432
+ return response.slice(0, limits.maxSuggestions).map((result) => ({
433
+ text: result.name,
434
+ source: layer,
435
+ }));
436
+ },
437
+ };
438
+ }
439
+ const COMMON_SEARCH_FIELD_NAMES = [
440
+ "name",
441
+ "title",
442
+ "label",
443
+ "description",
444
+ "city",
445
+ "state",
446
+ "county",
447
+ "address",
448
+ ];
449
+ const MAX_SERVER_SEARCH_FIELDS = 6;
450
+ const MAX_SERVER_OUT_FIELDS = 16;
451
+ function createFallbackLayerSearchQueryOptions(maxFeatureCandidates, normalizedTerm, outFields) {
452
+ return {
453
+ where: "1=1",
454
+ outFields: normalizeFallbackOutFields(outFields),
455
+ returnGeometry: true,
456
+ extraParams: {
457
+ text: normalizedTerm,
458
+ resultOffset: 0,
459
+ resultRecordCount: maxFeatureCandidates,
460
+ },
461
+ };
462
+ }
463
+ function createOptimizedLayerSearchQueryOptions(config, normalizedTerm, maxFeatureCandidates) {
464
+ return {
465
+ where: createSearchWhereClause(config.searchableFields, normalizedTerm),
466
+ outFields: config.outFields,
467
+ returnGeometry: true,
468
+ extraParams: {
469
+ resultOffset: 0,
470
+ resultRecordCount: maxFeatureCandidates,
471
+ },
472
+ };
473
+ }
474
+ function createSearchWhereClause(searchableFields, normalizedTerm) {
475
+ const escapedTerm = escapeSqlLiteral(normalizedTerm.toUpperCase());
476
+ return searchableFields.map((field) => `UPPER(${field}) LIKE '%${escapedTerm}%' ESCAPE '\\\\'`).join(" OR ");
477
+ }
478
+ function resolveLayerSearchFieldConfig(layer) {
479
+ const fieldDefinitions = resolveLayerFieldDefinitions(layer);
480
+ const searchableFields = resolveSearchableFieldNames(layer, fieldDefinitions);
481
+ const outFields = resolveSearchOutFields(layer, searchableFields, fieldDefinitions);
482
+ return {
483
+ searchableFields,
484
+ outFields,
485
+ };
486
+ }
487
+ function resolveLayerFieldDefinitions(layer) {
488
+ const fromListFields = resolveLayerFieldsFromListFields(layer);
489
+ if (fromListFields.length > 0) {
490
+ return fromListFields;
491
+ }
492
+ return resolveLayerFieldsFromProperty(layer);
493
+ }
494
+ function resolveLayerFieldsFromListFields(layer) {
495
+ if (typeof layer.listFields !== "function") {
496
+ return [];
497
+ }
498
+ let fields;
499
+ try {
500
+ fields = layer.listFields();
501
+ }
502
+ catch {
503
+ return [];
504
+ }
505
+ return normalizeLayerFieldDefinitions(fields);
506
+ }
507
+ function resolveLayerFieldsFromProperty(layer) {
508
+ if (!Array.isArray(layer.fields)) {
509
+ return [];
510
+ }
511
+ return normalizeLayerFieldDefinitions(layer.fields);
512
+ }
513
+ function normalizeLayerFieldDefinitions(values) {
514
+ const definitions = [];
515
+ const seen = new Set();
516
+ for (const value of values) {
517
+ if (!isRecord(value) || typeof value.name !== "string") {
518
+ continue;
519
+ }
520
+ const normalizedName = normalizeFieldIdentifier(value.name);
521
+ if (!normalizedName) {
522
+ continue;
523
+ }
524
+ const normalizedKey = normalizedName.toLowerCase();
525
+ if (seen.has(normalizedKey)) {
526
+ continue;
527
+ }
528
+ seen.add(normalizedKey);
529
+ definitions.push({
530
+ name: normalizedName,
531
+ type: typeof value.type === "string" ? value.type : undefined,
532
+ });
533
+ }
534
+ return definitions;
535
+ }
536
+ function resolveSearchableFieldNames(layer, fieldDefinitions) {
537
+ const stringFields = fieldDefinitions.filter((field) => isStringFieldType(field.type)).map((field) => field.name);
538
+ const searchable = new Set();
539
+ const addIfAvailable = (fieldName) => {
540
+ if (!fieldName) {
541
+ return;
542
+ }
543
+ const available = fieldDefinitions.find((definition) => definition.name.toLowerCase() === fieldName.toLowerCase());
544
+ if (!available) {
545
+ return;
546
+ }
547
+ searchable.add(available.name);
548
+ };
549
+ addIfAvailable(resolveLayerDisplayField(layer));
550
+ for (const commonName of COMMON_SEARCH_FIELD_NAMES) {
551
+ addIfAvailable(commonName);
552
+ }
553
+ for (const fieldName of stringFields) {
554
+ searchable.add(fieldName);
555
+ if (searchable.size >= MAX_SERVER_SEARCH_FIELDS) {
556
+ break;
557
+ }
558
+ }
559
+ if (searchable.size > 0) {
560
+ return Array.from(searchable).slice(0, MAX_SERVER_SEARCH_FIELDS);
561
+ }
562
+ for (const outField of resolveLayerOutFields(layer)) {
563
+ const normalizedOutField = normalizeFieldIdentifier(outField);
564
+ if (!normalizedOutField || normalizedOutField === "*") {
565
+ continue;
566
+ }
567
+ searchable.add(normalizedOutField);
568
+ if (searchable.size >= MAX_SERVER_SEARCH_FIELDS) {
569
+ break;
570
+ }
571
+ }
572
+ return Array.from(searchable);
573
+ }
574
+ function resolveSearchOutFields(layer, searchableFields, fieldDefinitions) {
575
+ const outFields = new Set();
576
+ for (const field of searchableFields) {
577
+ outFields.add(field);
578
+ }
579
+ const addIfAvailable = (fieldName) => {
580
+ if (!fieldName) {
581
+ return;
582
+ }
583
+ const available = fieldDefinitions.find((definition) => definition.name.toLowerCase() === fieldName.toLowerCase());
584
+ if (!available) {
585
+ return;
586
+ }
587
+ outFields.add(available.name);
588
+ };
589
+ addIfAvailable(resolveLayerDisplayField(layer));
590
+ addIfAvailable(resolveLayerObjectIdField(layer));
591
+ for (const commonName of COMMON_SEARCH_FIELD_NAMES) {
592
+ addIfAvailable(commonName);
593
+ }
594
+ const requestedOutFields = resolveLayerOutFields(layer);
595
+ if (requestedOutFields.includes("*")) {
596
+ return ["*"];
597
+ }
598
+ for (const field of requestedOutFields) {
599
+ const normalizedField = normalizeFieldIdentifier(field);
600
+ if (!normalizedField || normalizedField === "*") {
601
+ continue;
602
+ }
603
+ outFields.add(normalizedField);
604
+ if (outFields.size >= MAX_SERVER_OUT_FIELDS) {
605
+ break;
606
+ }
607
+ }
608
+ const resolved = Array.from(outFields).slice(0, MAX_SERVER_OUT_FIELDS);
609
+ return resolved.length > 0 ? resolved : ["*"];
610
+ }
611
+ function resolveLayerOutFields(layer) {
612
+ if (typeof layer.outFields === "string") {
613
+ return [layer.outFields];
614
+ }
615
+ if (Array.isArray(layer.outFields)) {
616
+ return layer.outFields.filter((value) => typeof value === "string");
617
+ }
618
+ return [];
619
+ }
620
+ function normalizeFallbackOutFields(outFields) {
621
+ if (outFields.includes("*")) {
622
+ return ["*"];
623
+ }
624
+ const normalized = new Set();
625
+ for (const outField of outFields) {
626
+ const fieldName = normalizeFieldIdentifier(outField);
627
+ if (!fieldName || fieldName === "*") {
628
+ continue;
629
+ }
630
+ normalized.add(fieldName);
631
+ if (normalized.size >= MAX_SERVER_OUT_FIELDS) {
632
+ break;
633
+ }
634
+ }
635
+ if (normalized.size > 0) {
636
+ return Array.from(normalized);
637
+ }
638
+ return ["*"];
639
+ }
640
+ function resolveLayerDisplayField(layer) {
641
+ const fromLayer = normalizeFieldIdentifier(typeof layer.displayField === "string" ? layer.displayField : undefined);
642
+ if (fromLayer) {
643
+ return fromLayer;
644
+ }
645
+ if (!isRecord(layer.metadata)) {
646
+ return undefined;
647
+ }
648
+ return normalizeFieldIdentifier(typeof layer.metadata.displayField === "string" ? layer.metadata.displayField : undefined);
649
+ }
650
+ function resolveLayerObjectIdField(layer) {
651
+ const fromLayer = normalizeFieldIdentifier(typeof layer.objectIdField === "string" ? layer.objectIdField : undefined);
652
+ if (fromLayer) {
653
+ return fromLayer;
654
+ }
655
+ if (!isRecord(layer.metadata)) {
656
+ return undefined;
657
+ }
658
+ if (typeof layer.metadata.objectIdField === "string") {
659
+ return normalizeFieldIdentifier(layer.metadata.objectIdField);
660
+ }
661
+ return undefined;
662
+ }
663
+ function normalizeFieldIdentifier(fieldName) {
664
+ if (typeof fieldName !== "string") {
665
+ return undefined;
666
+ }
667
+ const trimmed = fieldName.trim();
668
+ if (trimmed.length === 0) {
669
+ return undefined;
670
+ }
671
+ if (trimmed === "*") {
672
+ return "*";
673
+ }
674
+ if (!/^[A-Za-z_][A-Za-z0-9_$.]*$/.test(trimmed)) {
675
+ return undefined;
676
+ }
677
+ return trimmed;
678
+ }
679
+ function isStringFieldType(type) {
680
+ if (!type) {
681
+ return true;
682
+ }
683
+ const normalized = type.trim().toLowerCase();
684
+ if (normalized.length === 0) {
685
+ return true;
686
+ }
687
+ return normalized.includes("string") || normalized.includes("text");
688
+ }
689
+ function escapeSqlLiteral(value) {
690
+ return value.replace(/\\/g, "\\\\").replace(/'/g, "''").replace(/%/g, "\\%").replace(/_/g, "\\_");
691
+ }
692
+ function extractMapFromView(view) {
693
+ if (!isRecord(view)) {
694
+ return undefined;
695
+ }
696
+ return view.map;
697
+ }
698
+ function extractLayersFromMap(map) {
699
+ if (!isRecord(map)) {
700
+ return [];
701
+ }
702
+ if (Array.isArray(map.allLayers)) {
703
+ return [...map.allLayers];
704
+ }
705
+ if (Array.isArray(map.layers)) {
706
+ return [...map.layers];
707
+ }
708
+ return [];
709
+ }
710
+ function normalizeResultIndex(index, length) {
711
+ if (!Number.isFinite(index)) {
712
+ return -1;
713
+ }
714
+ const normalized = Math.trunc(index);
715
+ if (normalized < 0 || normalized >= length) {
716
+ return -1;
717
+ }
718
+ return normalized;
719
+ }
720
+ function isQueryFeaturesProvider(value) {
721
+ return isRecord(value) && typeof value.queryFeatures === "function";
722
+ }
723
+ function isOgcItemsProvider(value) {
724
+ return isRecord(value) && typeof value.items === "function";
725
+ }
726
+ function normalizeSearchLimit(value, fallback) {
727
+ if (typeof value !== "number" || !Number.isFinite(value)) {
728
+ return fallback;
729
+ }
730
+ return Math.max(1, Math.trunc(value));
731
+ }
732
+ function extractFeatures(response) {
733
+ if (!isRecord(response) || !Array.isArray(response.features)) {
734
+ return [];
735
+ }
736
+ return response.features;
737
+ }
738
+ function featureMatchesTerm(feature, normalizedTerm) {
739
+ const properties = resolveFeatureProperties(feature);
740
+ if (!properties) {
741
+ return false;
742
+ }
743
+ for (const value of Object.values(properties)) {
744
+ if (value === null || value === undefined) {
745
+ continue;
746
+ }
747
+ const text = String(value).toLowerCase();
748
+ if (text.includes(normalizedTerm)) {
749
+ return true;
750
+ }
751
+ }
752
+ return false;
753
+ }
754
+ function describeFeature(feature, layer, index) {
755
+ const properties = resolveFeatureProperties(feature);
756
+ if (properties) {
757
+ for (const key of ["name", "Name", "NAME", "title", "Title", "TITLE"]) {
758
+ const value = properties[key];
759
+ if (typeof value === "string" && value.trim().length > 0) {
760
+ return value;
761
+ }
762
+ }
763
+ }
764
+ const layerTitle = typeof layer.title === "string" ? layer.title : typeof layer.id === "string" ? layer.id : "Result";
765
+ return `${layerTitle} ${index + 1}`;
766
+ }
767
+ function extractFeatureLocation(feature) {
768
+ if (!isRecord(feature) || !isRecord(feature.geometry)) {
769
+ return null;
770
+ }
771
+ const x = feature.geometry.x;
772
+ const y = feature.geometry.y;
773
+ if (typeof x === "number" && Number.isFinite(x) && typeof y === "number" && Number.isFinite(y)) {
774
+ return { x, y };
775
+ }
776
+ const point = extractPointFromGeoJsonGeometry(feature.geometry);
777
+ if (point) {
778
+ return point;
779
+ }
780
+ return feature.geometry;
781
+ }
782
+ function resolveFeatureProperties(feature) {
783
+ if (!isRecord(feature)) {
784
+ return undefined;
785
+ }
786
+ if (isRecord(feature.attributes)) {
787
+ return feature.attributes;
788
+ }
789
+ if (isRecord(feature.properties)) {
790
+ return feature.properties;
791
+ }
792
+ return undefined;
793
+ }
794
+ function extractPointFromGeoJsonGeometry(geometry) {
795
+ const coordinates = extractPointCoordinates(geometry.coordinates);
796
+ if (!coordinates) {
797
+ return undefined;
798
+ }
799
+ return {
800
+ x: coordinates[0],
801
+ y: coordinates[1],
802
+ };
803
+ }
804
+ function extractPointCoordinates(value) {
805
+ if (!Array.isArray(value) || value.length === 0) {
806
+ return undefined;
807
+ }
808
+ const first = value[0];
809
+ const second = value[1];
810
+ if (typeof first === "number" && Number.isFinite(first) && typeof second === "number" && Number.isFinite(second)) {
811
+ return [first, second];
812
+ }
813
+ if (Array.isArray(first)) {
814
+ return extractPointCoordinates(first);
815
+ }
816
+ return undefined;
817
+ }
818
+ function isRecord(value) {
819
+ return typeof value === "object" && value !== null;
820
+ }