@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,332 @@
1
+ /**
2
+ * Pure reducer for `ExplorationState`. Every transition returns a new
3
+ * state object — readers may use referential equality to detect change on
4
+ * any slice (e.g. `prev.filters !== next.filters`).
5
+ *
6
+ * The reducer does not own scheduling, propagation, or events; those live
7
+ * in `./context.ts`.
8
+ *
9
+ * @module
10
+ */
11
+ import { featureSelectionKey } from "./selection.js";
12
+ /**
13
+ * Apply one intent. Returns the next state plus the set of slices that
14
+ * actually changed (by reference). Callers compare the set rather than
15
+ * re-deriving it so that "no-op" intents (e.g. setting the same sort)
16
+ * do not wake listeners.
17
+ */
18
+ export function reduce(state, intent) {
19
+ switch (intent.kind) {
20
+ case "set-filter": {
21
+ const existing = state.filters[intent.id];
22
+ if (existing && filtersEqual(existing, intent.clause)) {
23
+ return { state, changedSlices: EMPTY };
24
+ }
25
+ const filters = { ...state.filters, [intent.id]: intent.clause };
26
+ return { state: { ...state, filters }, changedSlices: only("filters") };
27
+ }
28
+ case "clear-filter": {
29
+ if (!(intent.id in state.filters))
30
+ return { state, changedSlices: EMPTY };
31
+ const filters = { ...state.filters };
32
+ delete filters[intent.id];
33
+ return { state: { ...state, filters }, changedSlices: only("filters") };
34
+ }
35
+ case "set-spatial-filter": {
36
+ if (spatialFiltersEqual(state.spatialFilter, intent.spatialFilter)) {
37
+ return { state, changedSlices: EMPTY };
38
+ }
39
+ return {
40
+ state: cloneWithOptional(state, "spatialFilter", intent.spatialFilter),
41
+ changedSlices: only("spatialFilter"),
42
+ };
43
+ }
44
+ case "set-extent": {
45
+ if (extentsEqual(state.extent, intent.extent)) {
46
+ return { state, changedSlices: EMPTY };
47
+ }
48
+ return {
49
+ state: cloneWithOptional(state, "extent", intent.extent),
50
+ changedSlices: only("extent"),
51
+ };
52
+ }
53
+ case "select": {
54
+ const incoming = intent.ids;
55
+ let selection;
56
+ if (intent.replace === true) {
57
+ selection = dedupeSelection(incoming);
58
+ }
59
+ else {
60
+ selection = dedupeSelection([...state.selection, ...incoming]);
61
+ }
62
+ if (selectionEqual(state.selection, selection)) {
63
+ return { state, changedSlices: EMPTY };
64
+ }
65
+ return {
66
+ state: { ...state, selection },
67
+ changedSlices: only("selection"),
68
+ };
69
+ }
70
+ case "deselect": {
71
+ if (!intent.ids || intent.ids.length === 0) {
72
+ if (state.selection.length === 0)
73
+ return { state, changedSlices: EMPTY };
74
+ return { state: { ...state, selection: [] }, changedSlices: only("selection") };
75
+ }
76
+ const removeSet = new Set(intent.ids.map((target) => featureSelectionKey(target)));
77
+ const selection = state.selection.filter((target) => !removeSet.has(featureSelectionKey(target)));
78
+ if (selection.length === state.selection.length) {
79
+ return { state, changedSlices: EMPTY };
80
+ }
81
+ return { state: { ...state, selection }, changedSlices: only("selection") };
82
+ }
83
+ case "set-sort": {
84
+ if (sortEqual(state.sort, intent.sort))
85
+ return { state, changedSlices: EMPTY };
86
+ return { state: { ...state, sort: [...intent.sort] }, changedSlices: only("sort") };
87
+ }
88
+ case "set-page": {
89
+ if (pageEqual(state.page, intent.page))
90
+ return { state, changedSlices: EMPTY };
91
+ return { state: { ...state, page: { ...intent.page } }, changedSlices: only("page") };
92
+ }
93
+ case "set-visible-fields": {
94
+ if (sequenceEqual(state.visibleFields, intent.fields)) {
95
+ return { state, changedSlices: EMPTY };
96
+ }
97
+ return {
98
+ state: { ...state, visibleFields: [...intent.fields] },
99
+ changedSlices: only("visibleFields"),
100
+ };
101
+ }
102
+ case "set-grouping": {
103
+ if (sequenceEqual(state.grouping, intent.grouping)) {
104
+ return { state, changedSlices: EMPTY };
105
+ }
106
+ return {
107
+ state: { ...state, grouping: [...intent.grouping] },
108
+ changedSlices: only("grouping"),
109
+ };
110
+ }
111
+ case "set-aggregation": {
112
+ if (aggregationEqual(state.aggregation, intent.aggregation)) {
113
+ return { state, changedSlices: EMPTY };
114
+ }
115
+ return {
116
+ state: cloneWithOptional(state, "aggregation", intent.aggregation),
117
+ changedSlices: only("aggregation"),
118
+ };
119
+ }
120
+ case "apply-preset": {
121
+ if (state.preset === intent.preset)
122
+ return { state, changedSlices: EMPTY };
123
+ return { state: { ...state, preset: intent.preset }, changedSlices: only("preset") };
124
+ }
125
+ case "snapshot-restore": {
126
+ const next = intent.snapshot.state;
127
+ const changed = diffSlices(state, next);
128
+ if (changed.size === 0)
129
+ return { state, changedSlices: EMPTY };
130
+ return { state: next, changedSlices: changed };
131
+ }
132
+ }
133
+ }
134
+ const EMPTY = new Set();
135
+ function only(slice) {
136
+ return new Set([slice]);
137
+ }
138
+ function filterMapsEqual(a, b) {
139
+ if (a === b)
140
+ return true;
141
+ const aKeys = Object.keys(a);
142
+ const bKeys = Object.keys(b);
143
+ if (aKeys.length !== bKeys.length)
144
+ return false;
145
+ for (const key of aKeys) {
146
+ if (!Object.hasOwn(b, key))
147
+ return false;
148
+ if (!filtersEqual(a[key], b[key]))
149
+ return false;
150
+ }
151
+ return true;
152
+ }
153
+ function filtersEqual(a, b) {
154
+ if (a.field !== b.field || a.operator !== b.operator)
155
+ return false;
156
+ if (a.value !== b.value) {
157
+ if (Array.isArray(a.value) && Array.isArray(b.value)) {
158
+ if (a.value.length !== b.value.length)
159
+ return false;
160
+ for (let i = 0; i < a.value.length; i++) {
161
+ if (a.value[i] !== b.value[i])
162
+ return false;
163
+ }
164
+ }
165
+ else {
166
+ return false;
167
+ }
168
+ }
169
+ if ((a.appliesTo ?? null) !== (b.appliesTo ?? null)) {
170
+ if (!a.appliesTo || !b.appliesTo)
171
+ return false;
172
+ if (!sequenceEqual(a.appliesTo, b.appliesTo))
173
+ return false;
174
+ }
175
+ return true;
176
+ }
177
+ function spatialFiltersEqual(a, b) {
178
+ if (a === b)
179
+ return true;
180
+ if (!a || !b)
181
+ return false;
182
+ if (a.geometryType !== b.geometryType)
183
+ return false;
184
+ if ((a.spatialRel ?? null) !== (b.spatialRel ?? null))
185
+ return false;
186
+ return geometryEqual(a.geometry, b.geometry);
187
+ }
188
+ function geometryEqual(a, b) {
189
+ if (a === b)
190
+ return true;
191
+ if (typeof a !== typeof b)
192
+ return false;
193
+ if (Array.isArray(a) || Array.isArray(b)) {
194
+ if (!Array.isArray(a) || !Array.isArray(b))
195
+ return false;
196
+ if (a.length !== b.length)
197
+ return false;
198
+ for (let i = 0; i < a.length; i++) {
199
+ if (!geometryEqual(a[i], b[i]))
200
+ return false;
201
+ }
202
+ return true;
203
+ }
204
+ if (a && b && typeof a === "object" && typeof b === "object") {
205
+ const aKeys = Object.keys(a);
206
+ const bKeys = Object.keys(b);
207
+ if (aKeys.length !== bKeys.length)
208
+ return false;
209
+ for (const key of aKeys) {
210
+ if (!Object.hasOwn(b, key))
211
+ return false;
212
+ if (!geometryEqual(a[key], b[key])) {
213
+ return false;
214
+ }
215
+ }
216
+ return true;
217
+ }
218
+ return false;
219
+ }
220
+ function extentsEqual(a, b) {
221
+ if (a === b)
222
+ return true;
223
+ if (!a || !b)
224
+ return false;
225
+ return a.xmin === b.xmin && a.ymin === b.ymin && a.xmax === b.xmax && a.ymax === b.ymax;
226
+ }
227
+ function sortEqual(a, b) {
228
+ if (a === b)
229
+ return true;
230
+ if (a.length !== b.length)
231
+ return false;
232
+ for (let i = 0; i < a.length; i++) {
233
+ if (a[i].field !== b[i].field || (a[i].direction ?? "asc") !== (b[i].direction ?? "asc")) {
234
+ return false;
235
+ }
236
+ }
237
+ return true;
238
+ }
239
+ function pageEqual(a, b) {
240
+ return a.offset === b.offset && a.limit === b.limit;
241
+ }
242
+ function sequenceEqual(a, b) {
243
+ if (a === b)
244
+ return true;
245
+ if (a.length !== b.length)
246
+ return false;
247
+ for (let i = 0; i < a.length; i++) {
248
+ if (a[i] !== b[i])
249
+ return false;
250
+ }
251
+ return true;
252
+ }
253
+ function selectionEqual(a, b) {
254
+ if (a === b)
255
+ return true;
256
+ if (a.length !== b.length)
257
+ return false;
258
+ for (let i = 0; i < a.length; i++) {
259
+ if (featureSelectionKey(a[i]) !== featureSelectionKey(b[i]))
260
+ return false;
261
+ }
262
+ return true;
263
+ }
264
+ function dedupeSelection(values) {
265
+ const seen = new Set();
266
+ const out = [];
267
+ for (const v of values) {
268
+ const key = featureSelectionKey(v);
269
+ if (seen.has(key))
270
+ continue;
271
+ seen.add(key);
272
+ out.push(v);
273
+ }
274
+ return out;
275
+ }
276
+ function cloneWithOptional(state, key, value) {
277
+ // Spread, then either omit or set — keeps the field optional in shape.
278
+ const { spatialFilter, extent, aggregation, ...rest } = state;
279
+ const base = {
280
+ ...rest,
281
+ ...(spatialFilter !== undefined && key !== "spatialFilter" ? { spatialFilter } : {}),
282
+ ...(extent !== undefined && key !== "extent" ? { extent } : {}),
283
+ ...(aggregation !== undefined && key !== "aggregation" ? { aggregation } : {}),
284
+ };
285
+ if (value === undefined)
286
+ return base;
287
+ return { ...base, [key]: value };
288
+ }
289
+ function diffSlices(prev, next) {
290
+ const changed = new Set();
291
+ if (!filterMapsEqual(prev.filters, next.filters))
292
+ changed.add("filters");
293
+ if (!spatialFiltersEqual(prev.spatialFilter, next.spatialFilter))
294
+ changed.add("spatialFilter");
295
+ if (!extentsEqual(prev.extent, next.extent))
296
+ changed.add("extent");
297
+ if (!selectionEqual(prev.selection, next.selection))
298
+ changed.add("selection");
299
+ if (!sortEqual(prev.sort, next.sort))
300
+ changed.add("sort");
301
+ if (!pageEqual(prev.page, next.page))
302
+ changed.add("page");
303
+ if (!sequenceEqual(prev.visibleFields, next.visibleFields))
304
+ changed.add("visibleFields");
305
+ if (!sequenceEqual(prev.grouping, next.grouping))
306
+ changed.add("grouping");
307
+ if (!aggregationEqual(prev.aggregation, next.aggregation))
308
+ changed.add("aggregation");
309
+ if (prev.preset !== next.preset)
310
+ changed.add("preset");
311
+ return changed;
312
+ }
313
+ function aggregationEqual(a, b) {
314
+ if (a === b)
315
+ return true;
316
+ if (!a || !b)
317
+ return false;
318
+ const aGroup = a.groupBy ?? [];
319
+ const bGroup = b.groupBy ?? [];
320
+ if (!sequenceEqual(aGroup, bGroup))
321
+ return false;
322
+ if (a.metrics.length !== b.metrics.length)
323
+ return false;
324
+ for (let i = 0; i < a.metrics.length; i++) {
325
+ const am = a.metrics[i];
326
+ const bm = b.metrics[i];
327
+ if (am.fn !== bm.fn || am.field !== bm.field || (am.alias ?? null) !== (bm.alias ?? null)) {
328
+ return false;
329
+ }
330
+ }
331
+ return true;
332
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Selection target helpers for exploration state.
3
+ *
4
+ * Raw feature ids remain valid for single-source apps. Multi-source apps
5
+ * should use source-qualified targets so the same object id in two sources
6
+ * does not collide in map/table/detail synchronization.
7
+ *
8
+ * @module
9
+ */
10
+ import type { FeatureId, SourceId } from "../contract/types.js";
11
+ import type { FeatureSelectionTarget, SourceQualifiedFeatureSelectionTarget } from "./types.js";
12
+ /** Build a serializable source-qualified selection target. */
13
+ export declare function sourceFeatureSelectionTarget(sourceId: SourceId, id: FeatureId, options?: {
14
+ readonly sourceLayer?: string;
15
+ }): SourceQualifiedFeatureSelectionTarget;
16
+ /** True when a selection target carries source identity. */
17
+ export declare function isSourceQualifiedSelectionTarget(target: FeatureSelectionTarget): target is SourceQualifiedFeatureSelectionTarget;
18
+ /**
19
+ * Stable key for de-duplicating and comparing selection targets.
20
+ *
21
+ * The key intentionally includes raw-id type and source layer so `"101"`,
22
+ * `101`, and vector-tile sublayer features remain distinct.
23
+ */
24
+ export declare function featureSelectionKey(target: FeatureSelectionTarget): string;
25
+ //# sourceMappingURL=selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/exploration/selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,sBAAsB,EAAE,qCAAqC,EAAE,MAAM,YAAY,CAAC;AAEhG,8DAA8D;AAC9D,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,SAAS,EACb,OAAO,GAAE;IAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,qCAAqC,CAMvC;AAED,4DAA4D;AAC5D,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,sBAAsB,GAC7B,MAAM,IAAI,qCAAqC,CAEjD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,MAAM,CAM1E"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Selection target helpers for exploration state.
3
+ *
4
+ * Raw feature ids remain valid for single-source apps. Multi-source apps
5
+ * should use source-qualified targets so the same object id in two sources
6
+ * does not collide in map/table/detail synchronization.
7
+ *
8
+ * @module
9
+ */
10
+ /** Build a serializable source-qualified selection target. */
11
+ export function sourceFeatureSelectionTarget(sourceId, id, options = {}) {
12
+ return {
13
+ sourceId,
14
+ id,
15
+ ...(options.sourceLayer !== undefined ? { sourceLayer: options.sourceLayer } : {}),
16
+ };
17
+ }
18
+ /** True when a selection target carries source identity. */
19
+ export function isSourceQualifiedSelectionTarget(target) {
20
+ return typeof target === "object" && target !== null && "sourceId" in target && "id" in target;
21
+ }
22
+ /**
23
+ * Stable key for de-duplicating and comparing selection targets.
24
+ *
25
+ * The key intentionally includes raw-id type and source layer so `"101"`,
26
+ * `101`, and vector-tile sublayer features remain distinct.
27
+ */
28
+ export function featureSelectionKey(target) {
29
+ if (!isSourceQualifiedSelectionTarget(target)) {
30
+ return `id:${typeof target}:${String(target)}`;
31
+ }
32
+ const layer = target.sourceLayer ?? "";
33
+ return `source:${target.sourceId}\u0000layer:${layer}\u0000id:${typeof target.id}:${String(target.id)}`;
34
+ }
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Selector helpers for linked exploration views.
3
+ *
4
+ * The selectors are framework-neutral: UI adapters subscribe to narrow
5
+ * exploration slices and render derived models instead of synchronizing peer
6
+ * components directly.
7
+ *
8
+ * @module
9
+ */
10
+ import type { AggregationSpec, PaginationSpec, SortSpec, SourceId } from "../contract/types.js";
11
+ import { type SpatialFilter } from "../core/spatial-filter.js";
12
+ import type { HonuaExtent } from "../core/types.js";
13
+ import type { ExplorationState, ExplorationViewChangeEvent, ExplorationViewController, ExplorationViewSubscribeOptions, ExplorationViewSubscription, FeatureSelectionTarget, FilterClause, Unsubscribe } from "./types.js";
14
+ export type LinkedViewSpatialMode = "none" | "state" | "extent" | "state-or-extent";
15
+ export interface LinkedViewQueryProjectionOptions {
16
+ /** Restrict filters whose `appliesTo` list names another source. */
17
+ readonly sourceId?: SourceId;
18
+ /** How spatial state should be projected into query inputs. @default "state-or-extent" */
19
+ readonly spatialMode?: LinkedViewSpatialMode;
20
+ }
21
+ /**
22
+ * Serializable query-facing view of exploration state.
23
+ *
24
+ * Protocol adapters can translate `filters` into SQL, CQL2, OData, or
25
+ * MapLibre expressions while reusing the same spatial, sorting, paging,
26
+ * grouping, and selection state.
27
+ */
28
+ export interface LinkedViewQueryProjection {
29
+ readonly filters: Readonly<Record<string, FilterClause>>;
30
+ readonly spatialFilter?: SpatialFilter;
31
+ readonly extent?: HonuaExtent;
32
+ readonly orderBy: ReadonlyArray<SortSpec>;
33
+ readonly pagination: PaginationSpec;
34
+ readonly outFields?: ReadonlyArray<string>;
35
+ readonly grouping: ReadonlyArray<string>;
36
+ readonly aggregation?: AggregationSpec;
37
+ readonly selection: ReadonlyArray<FeatureSelectionTarget>;
38
+ }
39
+ export type ExplorationSelector<T> = (state: ExplorationState) => T;
40
+ export type ExplorationSelectorListener<T> = (value: T, event: ExplorationViewChangeEvent | undefined) => void;
41
+ export interface ExplorationSelectorSubscribeOptions<T> extends ExplorationViewSubscribeOptions {
42
+ /** Emit the selector's current value before waiting for changes. @default false */
43
+ readonly fireImmediately?: boolean;
44
+ /** Equality check used to suppress unchanged selector output. @default deep value equality */
45
+ readonly equals?: (a: T, b: T) => boolean;
46
+ }
47
+ /** Convert a viewport extent into the standard Honua envelope spatial filter. */
48
+ export declare function extentToSpatialFilter(extent: HonuaExtent): SpatialFilter;
49
+ /** Derive a query-facing projection from the current linked exploration state. */
50
+ export declare function selectLinkedViewQueryProjection(state: ExplorationState, options?: LinkedViewQueryProjectionOptions): LinkedViewQueryProjection;
51
+ /**
52
+ * Subscribe to a narrow state subscription and emit only when a derived
53
+ * selector value changes.
54
+ */
55
+ export declare function subscribeExplorationSelector<T>(view: ExplorationViewController, subscription: ExplorationViewSubscription, selector: ExplorationSelector<T>, listener: ExplorationSelectorListener<T>, options?: ExplorationSelectorSubscribeOptions<T>): Unsubscribe;
56
+ //# sourceMappingURL=selectors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../../src/exploration/selectors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChG,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EACV,gBAAgB,EAChB,0BAA0B,EAC1B,yBAAyB,EACzB,+BAA+B,EAC/B,2BAA2B,EAC3B,sBAAsB,EACtB,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAEpF,MAAM,WAAW,gCAAgC;IAC/C,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,0FAA0F;IAC1F,QAAQ,CAAC,WAAW,CAAC,EAAE,qBAAqB,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;CAC3D;AAED,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,KAAK,CAAC,CAAC;AACpE,MAAM,MAAM,2BAA2B,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,0BAA0B,GAAG,SAAS,KAAK,IAAI,CAAC;AAE/G,MAAM,WAAW,mCAAmC,CAAC,CAAC,CAAE,SAAQ,+BAA+B;IAC7F,mFAAmF;IACnF,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;CAC3C;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAExE;AAED,kFAAkF;AAClF,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,gBAAgB,EACvB,OAAO,GAAE,gCAAqC,GAC7C,yBAAyB,CAa3B;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,EAC5C,IAAI,EAAE,yBAAyB,EAC/B,YAAY,EAAE,2BAA2B,EACzC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAChC,QAAQ,EAAE,2BAA2B,CAAC,CAAC,CAAC,EACxC,OAAO,GAAE,mCAAmC,CAAC,CAAC,CAAM,GACnD,WAAW,CAkBb"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Selector helpers for linked exploration views.
3
+ *
4
+ * The selectors are framework-neutral: UI adapters subscribe to narrow
5
+ * exploration slices and render derived models instead of synchronizing peer
6
+ * components directly.
7
+ *
8
+ * @module
9
+ */
10
+ import { envelope } from "../core/spatial-filter.js";
11
+ /** Convert a viewport extent into the standard Honua envelope spatial filter. */
12
+ export function extentToSpatialFilter(extent) {
13
+ return envelope(extent.xmin, extent.ymin, extent.xmax, extent.ymax, extent.spatialReference);
14
+ }
15
+ /** Derive a query-facing projection from the current linked exploration state. */
16
+ export function selectLinkedViewQueryProjection(state, options = {}) {
17
+ const visibleFields = state.visibleFields.length > 0 ? [...state.visibleFields] : undefined;
18
+ return {
19
+ filters: filtersForSource(state.filters, options.sourceId),
20
+ spatialFilter: spatialFilterForState(state, options.spatialMode ?? "state-or-extent"),
21
+ extent: state.extent,
22
+ orderBy: [...state.sort],
23
+ pagination: { ...state.page },
24
+ outFields: visibleFields,
25
+ grouping: [...state.grouping],
26
+ aggregation: state.aggregation,
27
+ selection: [...state.selection],
28
+ };
29
+ }
30
+ /**
31
+ * Subscribe to a narrow state subscription and emit only when a derived
32
+ * selector value changes.
33
+ */
34
+ export function subscribeExplorationSelector(view, subscription, selector, listener, options = {}) {
35
+ const equals = options.equals ?? valuesEqual;
36
+ let current = selector(view.state);
37
+ if (options.fireImmediately) {
38
+ listener(current, undefined);
39
+ }
40
+ return view.subscribe(subscription, (event) => {
41
+ const next = selector(event.state);
42
+ if (equals(current, next))
43
+ return;
44
+ current = next;
45
+ listener(next, event);
46
+ }, options);
47
+ }
48
+ function spatialFilterForState(state, mode) {
49
+ switch (mode) {
50
+ case "none":
51
+ return undefined;
52
+ case "state":
53
+ return state.spatialFilter;
54
+ case "extent":
55
+ return state.extent ? extentToSpatialFilter(state.extent) : undefined;
56
+ case "state-or-extent":
57
+ return state.spatialFilter ?? (state.extent ? extentToSpatialFilter(state.extent) : undefined);
58
+ }
59
+ }
60
+ function filtersForSource(filters, sourceId) {
61
+ if (!sourceId)
62
+ return filters;
63
+ const out = {};
64
+ for (const [id, clause] of Object.entries(filters)) {
65
+ if (!clause.appliesTo || clause.appliesTo.length === 0 || clause.appliesTo.includes(sourceId)) {
66
+ out[id] = clause;
67
+ }
68
+ }
69
+ return out;
70
+ }
71
+ function valuesEqual(a, b) {
72
+ if (Object.is(a, b))
73
+ return true;
74
+ if (!a || !b || typeof a !== "object" || typeof b !== "object")
75
+ return false;
76
+ if (Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
77
+ return false;
78
+ if (a instanceof Date && b instanceof Date) {
79
+ return a.getTime() === b.getTime();
80
+ }
81
+ if (a instanceof RegExp && b instanceof RegExp) {
82
+ return a.source === b.source && a.flags === b.flags;
83
+ }
84
+ if (Array.isArray(a) || Array.isArray(b)) {
85
+ if (!Array.isArray(a) || !Array.isArray(b))
86
+ return false;
87
+ if (a.length !== b.length)
88
+ return false;
89
+ for (let i = 0; i < a.length; i++) {
90
+ if (!valuesEqual(a[i], b[i]))
91
+ return false;
92
+ }
93
+ return true;
94
+ }
95
+ const left = a;
96
+ const right = b;
97
+ const leftKeys = Object.keys(left);
98
+ const rightKeys = Object.keys(right);
99
+ if (leftKeys.length !== rightKeys.length)
100
+ return false;
101
+ if (leftKeys.length === 0)
102
+ return false;
103
+ for (const key of leftKeys) {
104
+ if (!Object.hasOwn(right, key))
105
+ return false;
106
+ if (!valuesEqual(left[key], right[key]))
107
+ return false;
108
+ }
109
+ return true;
110
+ }