@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
package/react/hooks.js ADDED
@@ -0,0 +1,206 @@
1
+ /**
2
+ * `@honua/react` hooks: {@link useHonuaClient}, {@link useDataset},
3
+ * {@link useQuery}, {@link useCapabilities}, {@link useMapRuntime}, and
4
+ * {@link useRealtime}.
5
+ *
6
+ * All data hooks are AbortController-wired and StrictMode-safe, and expose
7
+ * `loading` / `error` / `data` state. Query results are referentially stable
8
+ * until the underlying data changes (NFR-001) because reads go through
9
+ * `useSyncExternalStore` over the provider's {@link HonuaQueryCache}.
10
+ *
11
+ * @module
12
+ */
13
+ import { useCallback, useContext, useDebugValue, useEffect, useMemo, useSyncExternalStore } from "react";
14
+ import { createDataset } from "../contract/index.js";
15
+ import { HonuaContext, HonuaMapContext } from "./context.js";
16
+ import { idleSnapshot, stableQueryHash } from "./query-cache.js";
17
+ function useHonuaContext(hookName) {
18
+ const value = useContext(HonuaContext);
19
+ if (value === null) {
20
+ throw new Error(`${hookName} must be used within a <HonuaProvider>.`);
21
+ }
22
+ return value;
23
+ }
24
+ /**
25
+ * Access the {@link HonuaClient} published by the nearest {@link HonuaProvider}.
26
+ *
27
+ * @throws if called outside a `HonuaProvider`.
28
+ */
29
+ export function useHonuaClient() {
30
+ return useHonuaContext("useHonuaClient").client;
31
+ }
32
+ /**
33
+ * Access the provider's {@link HonuaQueryCache}. Rarely needed directly;
34
+ * exposed for advanced invalidation (`cache.invalidate(key)` / `cache.clear()`).
35
+ */
36
+ export function useHonuaQueryCache() {
37
+ return useHonuaContext("useHonuaQueryCache").cache;
38
+ }
39
+ function datasetSignature(options) {
40
+ const descriptors = options.sources
41
+ .map((descriptor) => stableQueryHash({ ...descriptor, capabilities: descriptor.capabilities }))
42
+ .join("|");
43
+ return [
44
+ options.id,
45
+ options.capabilityPolicy ?? "strict",
46
+ options.skipCompatibilityCheck ? "1" : "0",
47
+ descriptors,
48
+ ].join("::");
49
+ }
50
+ /**
51
+ * Build a memoized {@link Dataset} bound to the provider's client. The dataset
52
+ * identity is stable until its `id`, source descriptors, or policy change, so
53
+ * it is safe to pass its sources into {@link useQuery} across re-renders.
54
+ *
55
+ * @example
56
+ * ```tsx
57
+ * const dataset = useDataset({
58
+ * id: "incidents",
59
+ * sources: [{ id: "incidents", protocol: "geoservices-feature-service",
60
+ * locator: { url, serviceId: "incidents", layerId: 0 },
61
+ * capabilities: PROTOCOL_DEFAULT_CAPABILITIES["geoservices-feature-service"] }],
62
+ * });
63
+ * ```
64
+ */
65
+ export function useDataset(options) {
66
+ const client = useHonuaClient();
67
+ const signature = datasetSignature(options);
68
+ // `signature` captures id/sources/policy; `resolveSource` is a function
69
+ // identity folded in so a new resolver rebuilds the dataset. Callers should
70
+ // memoize `resolveSource` to keep the dataset stable.
71
+ // biome-ignore lint/correctness/useExhaustiveDependencies: options.* are captured through `signature`.
72
+ const dataset = useMemo(() => createDataset({
73
+ id: options.id,
74
+ client,
75
+ sources: options.sources,
76
+ capabilityPolicy: options.capabilityPolicy,
77
+ skipCompatibilityCheck: options.skipCompatibilityCheck,
78
+ resolveSource: options.resolveSource,
79
+ }), [client, signature, options.resolveSource]);
80
+ useDebugValue(dataset.id);
81
+ return dataset;
82
+ }
83
+ /**
84
+ * Execute a contract {@link Query} against a {@link Source} with loading /
85
+ * error / data state. Results are cached per `(source, query-hash)` inside the
86
+ * provider and are referentially stable until the data changes. The request is
87
+ * aborted when the component unmounts or the query key changes; superseded
88
+ * responses are ignored (no races).
89
+ *
90
+ * @example
91
+ * ```tsx
92
+ * const { data, isLoading, error, refetch } = useQuery(
93
+ * dataset.source("incidents"),
94
+ * { where: "STATUS = 'OPEN'", returnGeometry: true },
95
+ * );
96
+ * ```
97
+ */
98
+ export function useQuery(source, query, options = {}) {
99
+ const { cache } = useHonuaContext("useQuery");
100
+ const enabled = options.enabled ?? true;
101
+ const drainAllPages = options.drainAllPages ?? false;
102
+ const sourceId = source?.descriptor.id;
103
+ const queryHash = stableQueryHash(query ?? {});
104
+ // `key` (and thus every effect below) intentionally re-derives from the
105
+ // stable `queryHash` rather than the `query` object identity, so an inline
106
+ // query literal does not thrash the cache.
107
+ const key = useMemo(() => {
108
+ if (!source || sourceId === undefined || !enabled)
109
+ return null;
110
+ return `query::${String(sourceId)}::${drainAllPages ? "all" : "page"}::${queryHash}`;
111
+ }, [source, sourceId, enabled, drainAllPages, queryHash]);
112
+ const subscribe = useCallback((onStoreChange) => (key ? cache.subscribe(key, onStoreChange) : () => { }), [cache, key]);
113
+ const getSnapshot = useCallback(() => (key ? cache.getSnapshot(key) : idleSnapshot()), [cache, key]);
114
+ const snapshot = useSyncExternalStore(subscribe, getSnapshot, () => idleSnapshot());
115
+ // biome-ignore lint/correctness/useExhaustiveDependencies: `key` already encodes source id + query + mode.
116
+ useEffect(() => {
117
+ if (!key || !source)
118
+ return;
119
+ cache.ensure(key, (signal) => drainAllPages ? source.queryAll({ ...query, signal }) : source.query({ ...query, signal }));
120
+ }, [cache, key]);
121
+ // biome-ignore lint/correctness/useExhaustiveDependencies: `key` already encodes source id + query + mode.
122
+ const refetch = useCallback(() => {
123
+ if (!key || !source)
124
+ return;
125
+ cache.run(key, (signal) => drainAllPages ? source.queryAll({ ...query, signal }) : source.query({ ...query, signal }));
126
+ }, [cache, key]);
127
+ useDebugValue(snapshot.status);
128
+ return useMemo(() => ({ ...snapshot, refetch }), [snapshot, refetch]);
129
+ }
130
+ /**
131
+ * Fetch the Honua server's capability / compatibility descriptor
132
+ * (`serverVersion`, `releaseChannel`, feature flags) with loading / error /
133
+ * data state. Cached per-request inside the provider.
134
+ */
135
+ export function useCapabilities(options = {}) {
136
+ const { client, cache } = useHonuaContext("useCapabilities");
137
+ const enabled = options.enabled ?? true;
138
+ const requestHash = stableQueryHash(options.request ?? {});
139
+ const key = useMemo(() => (enabled ? `capabilities::${requestHash}` : null), [enabled, requestHash]);
140
+ const subscribe = useCallback((onStoreChange) => (key ? cache.subscribe(key, onStoreChange) : () => { }), [cache, key]);
141
+ const getSnapshot = useCallback(() => (key ? cache.getSnapshot(key) : idleSnapshot()), [cache, key]);
142
+ const snapshot = useSyncExternalStore(subscribe, getSnapshot, () => idleSnapshot());
143
+ // biome-ignore lint/correctness/useExhaustiveDependencies: request identity is captured through `requestHash`.
144
+ const fetcher = useCallback((signal) => client.getCompatibility({ ...options.request, signal }), [client, requestHash]);
145
+ useEffect(() => {
146
+ if (!key)
147
+ return;
148
+ cache.ensure(key, fetcher);
149
+ }, [cache, key, fetcher]);
150
+ const refetch = useCallback(() => {
151
+ if (!key)
152
+ return;
153
+ cache.run(key, fetcher);
154
+ }, [cache, key, fetcher]);
155
+ useDebugValue(snapshot.status);
156
+ return useMemo(() => ({ ...snapshot, refetch }), [snapshot, refetch]);
157
+ }
158
+ /**
159
+ * Access the {@link HonuaMapRuntime} owned by the nearest {@link HonuaMap}.
160
+ * Returns `null` until the map has finished loading its package, and when
161
+ * called outside a `HonuaMap`.
162
+ */
163
+ export function useMapRuntime() {
164
+ return useContext(HonuaMapContext)?.runtime ?? null;
165
+ }
166
+ /**
167
+ * Open a realtime subscription for the lifetime of the component and tear it
168
+ * down on unmount (StrictMode-safe: the effect's cleanup runs between the
169
+ * double-invoked mounts, so no duplicate subscriptions leak).
170
+ *
171
+ * `factory` should open the subscription and return its cleanup handle. It is
172
+ * re-run whenever `deps` change. Works with the SDK realtime store
173
+ * (`store.connect(...)` returns `{ close() }`) or any `() => void` unsubscribe.
174
+ *
175
+ * @example
176
+ * ```tsx
177
+ * useRealtime(() => store.connect(transport, request), [transport, request]);
178
+ * ```
179
+ */
180
+ export function useRealtime(factory, deps = []) {
181
+ // biome-ignore lint/correctness/useExhaustiveDependencies: the caller-supplied dependency list controls re-subscription.
182
+ useEffect(() => {
183
+ if (!factory)
184
+ return;
185
+ const handle = factory();
186
+ return () => {
187
+ runCleanup(handle);
188
+ };
189
+ }, deps);
190
+ }
191
+ function runCleanup(handle) {
192
+ if (!handle)
193
+ return;
194
+ if (typeof handle === "function") {
195
+ handle();
196
+ }
197
+ else if ("close" in handle) {
198
+ handle.close();
199
+ }
200
+ else if ("remove" in handle) {
201
+ handle.remove();
202
+ }
203
+ else {
204
+ handle.unsubscribe();
205
+ }
206
+ }
@@ -0,0 +1,42 @@
1
+ /**
2
+ * `@honua/react` — idiomatic React bindings for the Honua SDK: a provider,
3
+ * data hooks, and declarative map components over the framework-neutral
4
+ * `@honua/sdk-js` core.
5
+ *
6
+ * The core SDK stays React-free; this entry point is the only place React is
7
+ * imported. It is SSR-safe (no `window`/`document` access at import time) and
8
+ * StrictMode-safe under React 18 and 19.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * import { HonuaClient } from "@honua/sdk-js/honua";
13
+ * import { HonuaProvider, useDataset, useQuery } from "@honua/react";
14
+ *
15
+ * const client = new HonuaClient({ baseUrl: "https://honua.example.com" });
16
+ *
17
+ * function App() {
18
+ * return (
19
+ * <HonuaProvider client={client}>
20
+ * <Incidents />
21
+ * </HonuaProvider>
22
+ * );
23
+ * }
24
+ * ```
25
+ *
26
+ * @packageDocumentation
27
+ */
28
+ export { HonuaProvider } from "./provider.js";
29
+ export type { HonuaProviderProps } from "./provider.js";
30
+ export { useHonuaClient, useHonuaQueryCache, useDataset, useQuery, useCapabilities, useMapRuntime, useRealtime, } from "./hooks.js";
31
+ export type { UseDatasetOptions, UseQueryOptions, UseQueryResult, UseCapabilitiesOptions, UseCapabilitiesResult, RealtimeCleanup, } from "./hooks.js";
32
+ export { HonuaMap } from "./honua-map.js";
33
+ export type { HonuaMapProps, MapLibreGlModule, MapLibreMapOptions } from "./honua-map.js";
34
+ export { HonuaLayer } from "./honua-layer.js";
35
+ export type { HonuaLayerProps, HonuaLayerSource } from "./honua-layer.js";
36
+ export { HonuaPopup } from "./honua-popup.js";
37
+ export type { HonuaPopupProps } from "./honua-popup.js";
38
+ export { HonuaContext, HonuaMapContext } from "./context.js";
39
+ export type { HonuaContextValue, HonuaMapContextValue } from "./context.js";
40
+ export { HonuaQueryCache, stableQueryHash, idleSnapshot } from "./query-cache.js";
41
+ export type { QueryStatus, QuerySnapshot, QueryFetcher } from "./query-cache.js";
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClF,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC"}
package/react/index.js ADDED
@@ -0,0 +1,34 @@
1
+ /**
2
+ * `@honua/react` — idiomatic React bindings for the Honua SDK: a provider,
3
+ * data hooks, and declarative map components over the framework-neutral
4
+ * `@honua/sdk-js` core.
5
+ *
6
+ * The core SDK stays React-free; this entry point is the only place React is
7
+ * imported. It is SSR-safe (no `window`/`document` access at import time) and
8
+ * StrictMode-safe under React 18 and 19.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * import { HonuaClient } from "@honua/sdk-js/honua";
13
+ * import { HonuaProvider, useDataset, useQuery } from "@honua/react";
14
+ *
15
+ * const client = new HonuaClient({ baseUrl: "https://honua.example.com" });
16
+ *
17
+ * function App() {
18
+ * return (
19
+ * <HonuaProvider client={client}>
20
+ * <Incidents />
21
+ * </HonuaProvider>
22
+ * );
23
+ * }
24
+ * ```
25
+ *
26
+ * @packageDocumentation
27
+ */
28
+ export { HonuaProvider } from "./provider.js";
29
+ export { useHonuaClient, useHonuaQueryCache, useDataset, useQuery, useCapabilities, useMapRuntime, useRealtime, } from "./hooks.js";
30
+ export { HonuaMap } from "./honua-map.js";
31
+ export { HonuaLayer } from "./honua-layer.js";
32
+ export { HonuaPopup } from "./honua-popup.js";
33
+ export { HonuaContext, HonuaMapContext } from "./context.js";
34
+ export { HonuaQueryCache, stableQueryHash, idleSnapshot } from "./query-cache.js";
@@ -0,0 +1,36 @@
1
+ /**
2
+ * {@link HonuaProvider} — the root of every `@honua/react` tree. Publishes an
3
+ * active {@link HonuaClient} plus a per-provider {@link HonuaQueryCache} to the
4
+ * hooks and map components below it.
5
+ *
6
+ * @module
7
+ */
8
+ import { type ReactNode } from "react";
9
+ import type { HonuaClient } from "../core/client.js";
10
+ import { HonuaQueryCache } from "./query-cache.js";
11
+ /** Props for {@link HonuaProvider}. */
12
+ export interface HonuaProviderProps {
13
+ /** The client every descendant hook/component queries through. */
14
+ client: HonuaClient;
15
+ /**
16
+ * Optional externally-owned query cache. Supply one to share cached results
17
+ * across providers or to pre-seed a cache in tests; omit to let the provider
18
+ * own a fresh, session-scoped cache.
19
+ */
20
+ cache?: HonuaQueryCache;
21
+ children?: ReactNode;
22
+ }
23
+ /**
24
+ * Wrap an application (or subtree) to make a `HonuaClient` available to the
25
+ * `@honua/react` hooks and map components.
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * const client = new HonuaClient({ baseUrl: "https://honua.example.com" });
30
+ * <HonuaProvider client={client}>
31
+ * <App />
32
+ * </HonuaProvider>
33
+ * ```
34
+ */
35
+ export declare function HonuaProvider({ client, cache, children }: HonuaProviderProps): ReactNode;
36
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/react/provider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,OAAO,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,kEAAkE;IAClE,MAAM,EAAE,WAAW,CAAC;IACpB;;;;OAIG;IACH,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,GAAG,SAAS,CAgBxF"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * {@link HonuaProvider} — the root of every `@honua/react` tree. Publishes an
4
+ * active {@link HonuaClient} plus a per-provider {@link HonuaQueryCache} to the
5
+ * hooks and map components below it.
6
+ *
7
+ * @module
8
+ */
9
+ import { useMemo, useRef } from "react";
10
+ import { HonuaContext } from "./context.js";
11
+ import { HonuaQueryCache } from "./query-cache.js";
12
+ /**
13
+ * Wrap an application (or subtree) to make a `HonuaClient` available to the
14
+ * `@honua/react` hooks and map components.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * const client = new HonuaClient({ baseUrl: "https://honua.example.com" });
19
+ * <HonuaProvider client={client}>
20
+ * <App />
21
+ * </HonuaProvider>
22
+ * ```
23
+ */
24
+ export function HonuaProvider({ client, cache, children }) {
25
+ // Own a stable cache for the provider's lifetime unless the caller supplies
26
+ // one. `useRef` keeps the same instance across re-renders and StrictMode's
27
+ // double-invoke of render.
28
+ const ownedCacheRef = useRef(null);
29
+ if (ownedCacheRef.current === null) {
30
+ ownedCacheRef.current = new HonuaQueryCache();
31
+ }
32
+ const activeCache = cache ?? ownedCacheRef.current;
33
+ const value = useMemo(() => ({ client, cache: activeCache }), [client, activeCache]);
34
+ return _jsx(HonuaContext.Provider, { value: value, children: children });
35
+ }
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Framework-neutral query cache used by the `@honua/react` hooks. Lives
3
+ * outside React so it can back `useSyncExternalStore` (referentially stable
4
+ * snapshots, StrictMode-safe subscriptions) and be shared across every hook
5
+ * mounted under a single {@link HonuaProvider}.
6
+ *
7
+ * The cache keys results per `(source, query-hash)` string. It never persists
8
+ * across sessions and holds no cross-`HonuaProvider` state: each provider owns
9
+ * one cache instance.
10
+ *
11
+ * @module
12
+ */
13
+ /** Lifecycle state of a single cached query. */
14
+ export type QueryStatus = "idle" | "loading" | "success" | "error";
15
+ /**
16
+ * Immutable snapshot of a cached query. The same object reference is returned
17
+ * from {@link HonuaQueryCache.getSnapshot} until the underlying state changes,
18
+ * which is what gives hooks their referential stability (NFR-001).
19
+ */
20
+ export interface QuerySnapshot<T> {
21
+ readonly status: QueryStatus;
22
+ /** Last resolved value. Preserved across background refetches. */
23
+ readonly data: T | undefined;
24
+ /** Last rejection reason, cleared on the next successful fetch. */
25
+ readonly error: unknown;
26
+ /** True only while the first fetch (no data yet) is in flight. */
27
+ readonly isLoading: boolean;
28
+ /** True whenever a fetch is in flight, including background refetches. */
29
+ readonly isFetching: boolean;
30
+ }
31
+ /**
32
+ * Returns the shared idle snapshot. Exposed so the SSR / disabled-query paths
33
+ * can hand back a stable reference without allocating.
34
+ */
35
+ export declare function idleSnapshot<T>(): QuerySnapshot<T>;
36
+ /** A fetcher receives the cache-owned `AbortSignal` for cooperative cancellation. */
37
+ export type QueryFetcher<T> = (signal: AbortSignal) => Promise<T>;
38
+ /**
39
+ * Per-`HonuaProvider` cache of query results. Not a React construct; it is
40
+ * driven by the hooks via {@link subscribe} / {@link getSnapshot} / {@link ensure}.
41
+ */
42
+ export declare class HonuaQueryCache {
43
+ private readonly entries;
44
+ /** Read the current snapshot for `key`; a stable idle snapshot if unseen. */
45
+ getSnapshot<T>(key: string): QuerySnapshot<T>;
46
+ /**
47
+ * Subscribe `listener` to changes for `key`. When the final listener for a
48
+ * key unsubscribes and a fetch is still in flight, the fetch is aborted so
49
+ * unmounting the last consumer cancels the underlying request.
50
+ */
51
+ subscribe(key: string, listener: () => void): () => void;
52
+ /**
53
+ * Kick off a fetch for `key` only when it has never resolved and is not
54
+ * already in flight. This is the idempotent entry point hooks call from an
55
+ * effect; StrictMode's double-invoke therefore does not double-fetch.
56
+ */
57
+ ensure<T>(key: string, fetcher: QueryFetcher<T>): void;
58
+ /**
59
+ * Force a (re)fetch for `key`, superseding any in-flight request. The last
60
+ * resolved `data` is preserved while the refetch runs.
61
+ */
62
+ run<T>(key: string, fetcher: QueryFetcher<T>): void;
63
+ /** Drop the cached result for `key` and abort any in-flight fetch. */
64
+ invalidate(key: string): void;
65
+ /** Abort every in-flight fetch and clear all cached results. */
66
+ clear(): void;
67
+ private entryFor;
68
+ private write;
69
+ }
70
+ /**
71
+ * Deterministic, key-order-independent hash of a query-like object. Used to
72
+ * build the `(source, query-hash)` cache key. `AbortSignal` and `undefined`
73
+ * values are ignored so they do not perturb the identity of a query.
74
+ */
75
+ export declare function stableQueryHash(value: unknown): string;
76
+ //# sourceMappingURL=query-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-cache.d.ts","sourceRoot":"","sources":["../../../src/react/query-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,gDAAgD;AAChD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnE;;;;GAIG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IAC7B,mEAAmE;IACnE,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AAkBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,CAElD;AAED,qFAAqF;AACrF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAElE;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IAEzD,6EAA6E;IAC7E,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC;IAI7C;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IA+BxD;;;;OAIG;IACH,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IAOtD;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI;IA2CnD,sEAAsE;IACtE,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAS7B,gEAAgE;IAChE,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,KAAK;CAMd;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtD"}
@@ -0,0 +1,188 @@
1
+ /**
2
+ * Framework-neutral query cache used by the `@honua/react` hooks. Lives
3
+ * outside React so it can back `useSyncExternalStore` (referentially stable
4
+ * snapshots, StrictMode-safe subscriptions) and be shared across every hook
5
+ * mounted under a single {@link HonuaProvider}.
6
+ *
7
+ * The cache keys results per `(source, query-hash)` string. It never persists
8
+ * across sessions and holds no cross-`HonuaProvider` state: each provider owns
9
+ * one cache instance.
10
+ *
11
+ * @module
12
+ */
13
+ const IDLE_SNAPSHOT = Object.freeze({
14
+ status: "idle",
15
+ data: undefined,
16
+ error: undefined,
17
+ isLoading: false,
18
+ isFetching: false,
19
+ });
20
+ /**
21
+ * Returns the shared idle snapshot. Exposed so the SSR / disabled-query paths
22
+ * can hand back a stable reference without allocating.
23
+ */
24
+ export function idleSnapshot() {
25
+ return IDLE_SNAPSHOT;
26
+ }
27
+ /**
28
+ * Per-`HonuaProvider` cache of query results. Not a React construct; it is
29
+ * driven by the hooks via {@link subscribe} / {@link getSnapshot} / {@link ensure}.
30
+ */
31
+ export class HonuaQueryCache {
32
+ entries = new Map();
33
+ /** Read the current snapshot for `key`; a stable idle snapshot if unseen. */
34
+ getSnapshot(key) {
35
+ return (this.entries.get(key)?.snapshot ?? IDLE_SNAPSHOT);
36
+ }
37
+ /**
38
+ * Subscribe `listener` to changes for `key`. When the final listener for a
39
+ * key unsubscribes and a fetch is still in flight, the fetch is aborted so
40
+ * unmounting the last consumer cancels the underlying request.
41
+ */
42
+ subscribe(key, listener) {
43
+ const entry = this.entryFor(key);
44
+ entry.listeners.add(listener);
45
+ return () => {
46
+ entry.listeners.delete(listener);
47
+ if (entry.listeners.size === 0 && entry.controller) {
48
+ // Last consumer left while a fetch was in flight: abort it and
49
+ // invalidate the run so its (now irrelevant) settlement is ignored.
50
+ entry.controller.abort();
51
+ entry.controller = undefined;
52
+ entry.token += 1;
53
+ // If nothing had resolved yet, drop back to `idle` so the next
54
+ // subscriber (e.g. a StrictMode remount) re-fetches from a clean
55
+ // state instead of being stuck on a `loading` snapshot that will
56
+ // never settle. A previously-resolved value is preserved.
57
+ if (entry.snapshot.status === "loading") {
58
+ entry.snapshot =
59
+ entry.snapshot.data === undefined
60
+ ? IDLE_SNAPSHOT
61
+ : {
62
+ status: "success",
63
+ data: entry.snapshot.data,
64
+ error: undefined,
65
+ isLoading: false,
66
+ isFetching: false,
67
+ };
68
+ }
69
+ }
70
+ };
71
+ }
72
+ /**
73
+ * Kick off a fetch for `key` only when it has never resolved and is not
74
+ * already in flight. This is the idempotent entry point hooks call from an
75
+ * effect; StrictMode's double-invoke therefore does not double-fetch.
76
+ */
77
+ ensure(key, fetcher) {
78
+ const entry = this.entryFor(key);
79
+ if (entry.snapshot.status === "idle") {
80
+ this.run(key, fetcher);
81
+ }
82
+ }
83
+ /**
84
+ * Force a (re)fetch for `key`, superseding any in-flight request. The last
85
+ * resolved `data` is preserved while the refetch runs.
86
+ */
87
+ run(key, fetcher) {
88
+ const entry = this.entryFor(key);
89
+ entry.controller?.abort();
90
+ const controller = new AbortController();
91
+ const token = entry.token + 1;
92
+ entry.token = token;
93
+ entry.controller = controller;
94
+ this.write(entry, {
95
+ status: "loading",
96
+ data: entry.snapshot.data,
97
+ error: undefined,
98
+ isLoading: entry.snapshot.data === undefined,
99
+ isFetching: true,
100
+ });
101
+ fetcher(controller.signal).then((value) => {
102
+ if (entry.token !== token)
103
+ return;
104
+ entry.controller = undefined;
105
+ this.write(entry, {
106
+ status: "success",
107
+ data: value,
108
+ error: undefined,
109
+ isLoading: false,
110
+ isFetching: false,
111
+ });
112
+ }, (error) => {
113
+ if (entry.token !== token || controller.signal.aborted)
114
+ return;
115
+ entry.controller = undefined;
116
+ this.write(entry, {
117
+ status: "error",
118
+ data: entry.snapshot.data,
119
+ error,
120
+ isLoading: false,
121
+ isFetching: false,
122
+ });
123
+ });
124
+ }
125
+ /** Drop the cached result for `key` and abort any in-flight fetch. */
126
+ invalidate(key) {
127
+ const entry = this.entries.get(key);
128
+ if (!entry)
129
+ return;
130
+ entry.controller?.abort();
131
+ entry.controller = undefined;
132
+ entry.token += 1;
133
+ this.write(entry, IDLE_SNAPSHOT);
134
+ }
135
+ /** Abort every in-flight fetch and clear all cached results. */
136
+ clear() {
137
+ for (const entry of this.entries.values()) {
138
+ entry.controller?.abort();
139
+ entry.controller = undefined;
140
+ entry.token += 1;
141
+ }
142
+ this.entries.clear();
143
+ }
144
+ entryFor(key) {
145
+ let entry = this.entries.get(key);
146
+ if (!entry) {
147
+ entry = { snapshot: IDLE_SNAPSHOT, listeners: new Set(), controller: undefined, token: 0 };
148
+ this.entries.set(key, entry);
149
+ }
150
+ return entry;
151
+ }
152
+ write(entry, snapshot) {
153
+ entry.snapshot = snapshot;
154
+ for (const listener of entry.listeners) {
155
+ listener();
156
+ }
157
+ }
158
+ }
159
+ /**
160
+ * Deterministic, key-order-independent hash of a query-like object. Used to
161
+ * build the `(source, query-hash)` cache key. `AbortSignal` and `undefined`
162
+ * values are ignored so they do not perturb the identity of a query.
163
+ */
164
+ export function stableQueryHash(value) {
165
+ return stableStringify(value);
166
+ }
167
+ function stableStringify(value) {
168
+ if (value === null || typeof value !== "object") {
169
+ return JSON.stringify(value) ?? "null";
170
+ }
171
+ if (value instanceof AbortSignal) {
172
+ return '"[signal]"';
173
+ }
174
+ if (Array.isArray(value)) {
175
+ return `[${value.map((entry) => stableStringify(entry)).join(",")}]`;
176
+ }
177
+ if (value instanceof Set) {
178
+ return `[${[...value]
179
+ .map((entry) => stableStringify(entry))
180
+ .sort()
181
+ .join(",")}]`;
182
+ }
183
+ const record = value;
184
+ const keys = Object.keys(record)
185
+ .filter((key) => record[key] !== undefined && !(record[key] instanceof AbortSignal))
186
+ .sort();
187
+ return `{${keys.map((key) => `${JSON.stringify(key)}:${stableStringify(record[key])}`).join(",")}}`;
188
+ }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Diff primitives for incremental `updatePackage` application.
3
+ *
4
+ * The runtime uses stable IDs (`sourceId`, `layer.id`) as the diff key
5
+ * and falls back to a full `map.setStyle` only when structural change
6
+ * makes incremental patching unsafe (e.g. layer reorder, mapSpec version
7
+ * mismatch, source type change).
8
+ *
9
+ * @module
10
+ */
11
+ import type { HonuaMapPackage, HonuaMapPackageSourceBinding } from "./map-package.js";
12
+ export interface MapPackageDiff {
13
+ /** Bindings present in `next` but not `previous`. */
14
+ addedSourceBindings: HonuaMapPackageSourceBinding[];
15
+ /** sourceIds present in `previous` but not `next`. */
16
+ removedSourceIds: string[];
17
+ /** sourceIds whose locator / filter changed — requires add-then-remove. */
18
+ changedSourceIds: string[];
19
+ /** Layer ids newly added in `next`. */
20
+ addedLayerIds: string[];
21
+ /** Layer ids removed in `next`. */
22
+ removedLayerIds: string[];
23
+ /** Layer ids whose raw layer spec changed. */
24
+ changedLayerIds: string[];
25
+ /** Whether the diff is safe to apply incrementally. */
26
+ incremental: boolean;
27
+ /** Human-readable reason when `incremental` is false. */
28
+ structuralReason?: string;
29
+ }
30
+ export declare function diffPackages(previous: HonuaMapPackage, next: HonuaMapPackage): MapPackageDiff;
31
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/runtime/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,mBAAmB,EAAE,4BAA4B,EAAE,CAAC;IACpD,sDAAsD;IACtD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,uCAAuC;IACvC,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,mCAAmC;IACnC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,8CAA8C;IAC9C,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,uDAAuD;IACvD,WAAW,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,GAAG,cAAc,CA6C7F"}