@honua/react 0.1.0-beta.0 → 0.1.2-beta.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 (315) hide show
  1. package/contract/discovery.d.ts +231 -0
  2. package/contract/discovery.d.ts.map +1 -0
  3. package/contract/discovery.js +554 -0
  4. package/contract/edit-sketch.d.ts +8 -0
  5. package/contract/edit-sketch.d.ts.map +1 -1
  6. package/contract/edit-sketch.js +15 -0
  7. package/contract/edit-snapping.d.ts +160 -0
  8. package/contract/edit-snapping.d.ts.map +1 -0
  9. package/contract/edit-snapping.js +675 -0
  10. package/contract/generated/projjson-v0.7-crs-validator.d.ts +35 -0
  11. package/contract/generated/projjson-v0.7-crs-validator.d.ts.map +1 -0
  12. package/contract/generated/projjson-v0.7-crs-validator.js +3941 -0
  13. package/contract/index.d.ts +11 -2
  14. package/contract/index.d.ts.map +1 -1
  15. package/contract/index.js +4 -1
  16. package/contract/pmtiles.d.ts +31 -0
  17. package/contract/pmtiles.d.ts.map +1 -1
  18. package/contract/pmtiles.js +60 -20
  19. package/contract/protocol-module.d.ts +70 -0
  20. package/contract/protocol-module.d.ts.map +1 -0
  21. package/contract/protocol-module.js +1 -0
  22. package/contract/schema-envelope.d.ts +26 -0
  23. package/contract/schema-envelope.d.ts.map +1 -0
  24. package/contract/schema-envelope.js +25 -0
  25. package/contract/schema.d.ts +582 -0
  26. package/contract/schema.d.ts.map +1 -0
  27. package/contract/schema.js +2483 -0
  28. package/contract/source-capability-support.d.ts +6 -0
  29. package/contract/source-capability-support.d.ts.map +1 -0
  30. package/contract/source-capability-support.js +154 -0
  31. package/contract/source.d.ts +35 -17
  32. package/contract/source.d.ts.map +1 -1
  33. package/contract/source.js +267 -71
  34. package/contract/types.d.ts +140 -4
  35. package/contract/types.d.ts.map +1 -1
  36. package/contract/types.js +6 -14
  37. package/core/bounded-json.d.ts +4 -0
  38. package/core/bounded-json.d.ts.map +1 -0
  39. package/core/bounded-json.js +38 -0
  40. package/core/cache-state.d.ts +9 -0
  41. package/core/cache-state.d.ts.map +1 -1
  42. package/core/cache-state.js +10 -0
  43. package/core/capabilities-xml.d.ts +33 -0
  44. package/core/capabilities-xml.d.ts.map +1 -0
  45. package/core/capabilities-xml.js +331 -0
  46. package/core/client.d.ts +4 -1
  47. package/core/client.d.ts.map +1 -1
  48. package/core/client.js +115 -29
  49. package/core/error-classifications.d.ts +153 -0
  50. package/core/error-classifications.d.ts.map +1 -0
  51. package/core/error-classifications.js +140 -0
  52. package/core/error-code-registry.d.ts +158 -0
  53. package/core/error-code-registry.d.ts.map +1 -0
  54. package/core/error-code-registry.js +143 -0
  55. package/core/error-envelope.d.ts +68 -0
  56. package/core/error-envelope.d.ts.map +1 -0
  57. package/core/error-envelope.js +357 -0
  58. package/core/errors.d.ts +45 -29
  59. package/core/errors.d.ts.map +1 -1
  60. package/core/errors.js +97 -50
  61. package/core/geoparquet-sql.d.ts +30 -2
  62. package/core/geoparquet-sql.d.ts.map +1 -1
  63. package/core/geoparquet-sql.js +38 -3
  64. package/core/odata-key-path.d.ts +12 -0
  65. package/core/odata-key-path.d.ts.map +1 -0
  66. package/core/odata-key-path.js +28 -0
  67. package/core/odata-write-codec.d.ts +66 -0
  68. package/core/odata-write-codec.d.ts.map +1 -0
  69. package/core/odata-write-codec.js +1083 -0
  70. package/core/odata.d.ts +59 -7
  71. package/core/odata.d.ts.map +1 -1
  72. package/core/odata.js +431 -99
  73. package/core/ogc-features.d.ts.map +1 -1
  74. package/core/ogc-features.js +3 -0
  75. package/core/ogc-maps.d.ts +7 -0
  76. package/core/ogc-maps.d.ts.map +1 -1
  77. package/core/ogc-maps.js +46 -7
  78. package/core/ogc-processes.d.ts +2 -1
  79. package/core/ogc-processes.d.ts.map +1 -1
  80. package/core/ogc-processes.js +33 -5
  81. package/core/ogc-records.d.ts +9 -0
  82. package/core/ogc-records.d.ts.map +1 -1
  83. package/core/ogc-records.js +78 -29
  84. package/core/ogc-tiles.d.ts +10 -1
  85. package/core/ogc-tiles.d.ts.map +1 -1
  86. package/core/ogc-tiles.js +56 -17
  87. package/core/path-utils.d.ts +9 -0
  88. package/core/path-utils.d.ts.map +1 -1
  89. package/core/path-utils.js +19 -0
  90. package/core/protocol-transport.d.ts +1 -0
  91. package/core/protocol-transport.d.ts.map +1 -1
  92. package/core/request-pipeline.d.ts.map +1 -1
  93. package/core/request-pipeline.js +1 -1
  94. package/core/spatial-filter.d.ts +8 -4
  95. package/core/spatial-filter.d.ts.map +1 -1
  96. package/core/spatial-filter.js +206 -16
  97. package/core/stac-static.d.ts +6 -2
  98. package/core/stac-static.d.ts.map +1 -1
  99. package/core/stac-static.js +260 -69
  100. package/core/surfaces.d.ts.map +1 -1
  101. package/core/surfaces.js +69 -5
  102. package/core/types.d.ts +125 -7
  103. package/core/types.d.ts.map +1 -1
  104. package/core/wfs-capabilities.d.ts +2 -0
  105. package/core/wfs-capabilities.d.ts.map +1 -1
  106. package/core/wfs-capabilities.js +8 -1
  107. package/core/wfs.d.ts.map +1 -1
  108. package/core/wfs.js +10 -0
  109. package/core/wms-capabilities.d.ts +56 -84
  110. package/core/wms-capabilities.d.ts.map +1 -1
  111. package/core/wms-capabilities.js +212 -509
  112. package/core/wmts-capabilities.d.ts +62 -62
  113. package/core/wmts-capabilities.d.ts.map +1 -1
  114. package/core/wmts-capabilities.js +224 -371
  115. package/esri-compat/editor.d.ts +8 -0
  116. package/esri-compat/editor.d.ts.map +1 -1
  117. package/esri-compat/editor.js +13 -0
  118. package/esri-compat/feature-layer.d.ts +2 -0
  119. package/esri-compat/feature-layer.d.ts.map +1 -1
  120. package/esri-compat/feature-layer.js +1 -0
  121. package/esri-compat/layer-list.d.ts +11 -0
  122. package/esri-compat/layer-list.d.ts.map +1 -1
  123. package/esri-compat/layer-list.js +49 -0
  124. package/esri-compat/legend.d.ts +10 -0
  125. package/esri-compat/legend.d.ts.map +1 -1
  126. package/esri-compat/legend.js +27 -0
  127. package/esri-compat/portal.d.ts +197 -0
  128. package/esri-compat/portal.d.ts.map +1 -0
  129. package/esri-compat/portal.js +251 -0
  130. package/esri-compat/renderer-objects.d.ts +40 -0
  131. package/esri-compat/renderer-objects.d.ts.map +1 -0
  132. package/esri-compat/renderer-objects.js +62 -0
  133. package/esri-compat/sketch.d.ts +43 -0
  134. package/esri-compat/sketch.d.ts.map +1 -1
  135. package/esri-compat/sketch.js +46 -0
  136. package/esri-compat/snapping.d.ts +43 -0
  137. package/esri-compat/snapping.d.ts.map +1 -0
  138. package/esri-compat/snapping.js +45 -0
  139. package/esri-compat/url.d.ts.map +1 -1
  140. package/esri-compat/url.js +1 -1
  141. package/esri-compat/widget-host.d.ts +84 -0
  142. package/esri-compat/widget-host.d.ts.map +1 -0
  143. package/esri-compat/widget-host.js +159 -0
  144. package/filter-registry/index.d.ts +145 -0
  145. package/filter-registry/index.d.ts.map +1 -0
  146. package/filter-registry/index.js +531 -0
  147. package/generated-app/errors.d.ts +18 -2
  148. package/generated-app/errors.d.ts.map +1 -1
  149. package/generated-app/errors.js +44 -11
  150. package/map/automatic-mount-integration.d.ts +134 -0
  151. package/map/automatic-mount-integration.d.ts.map +1 -0
  152. package/map/automatic-mount-integration.js +305 -0
  153. package/map/automatic-source-strategy.d.ts +125 -0
  154. package/map/automatic-source-strategy.d.ts.map +1 -0
  155. package/map/automatic-source-strategy.js +494 -0
  156. package/map/data-to-map-bridge.d.ts +293 -0
  157. package/map/data-to-map-bridge.d.ts.map +1 -0
  158. package/map/data-to-map-bridge.js +817 -0
  159. package/map/geojson-projection.d.ts +33 -0
  160. package/map/geojson-projection.d.ts.map +1 -0
  161. package/map/geojson-projection.js +118 -0
  162. package/map/index.d.ts +14 -0
  163. package/map/index.d.ts.map +1 -1
  164. package/map/index.js +8 -0
  165. package/map/raster-source-spec.d.ts +30 -0
  166. package/map/raster-source-spec.d.ts.map +1 -0
  167. package/map/raster-source-spec.js +190 -0
  168. package/map/raster-source-strategy.d.ts +65 -0
  169. package/map/raster-source-strategy.d.ts.map +1 -0
  170. package/map/raster-source-strategy.js +232 -0
  171. package/map/source-to-maplibre.d.ts +91 -0
  172. package/map/source-to-maplibre.d.ts.map +1 -0
  173. package/map/source-to-maplibre.js +454 -0
  174. package/map/temporal-playback.d.ts +139 -0
  175. package/map/temporal-playback.d.ts.map +1 -0
  176. package/map/temporal-playback.js +247 -0
  177. package/package.json +14 -1
  178. package/query-planner/canonical.d.ts +7 -0
  179. package/query-planner/canonical.d.ts.map +1 -0
  180. package/query-planner/canonical.js +145 -0
  181. package/query-planner/cql2-json.d.ts +17 -0
  182. package/query-planner/cql2-json.d.ts.map +1 -0
  183. package/query-planner/cql2-json.js +646 -0
  184. package/query-planner/diagnostics.d.ts +35 -0
  185. package/query-planner/diagnostics.d.ts.map +1 -0
  186. package/query-planner/diagnostics.js +373 -0
  187. package/query-planner/duckdb.d.ts +79 -0
  188. package/query-planner/duckdb.d.ts.map +1 -0
  189. package/query-planner/duckdb.js +758 -0
  190. package/query-planner/execution-context.d.ts +5 -0
  191. package/query-planner/execution-context.d.ts.map +1 -0
  192. package/query-planner/execution-context.js +50 -0
  193. package/query-planner/executor.d.ts +5 -0
  194. package/query-planner/executor.d.ts.map +1 -0
  195. package/query-planner/executor.js +223 -0
  196. package/query-planner/geoservices.d.ts +91 -0
  197. package/query-planner/geoservices.d.ts.map +1 -0
  198. package/query-planner/geoservices.js +667 -0
  199. package/query-planner/grpc.d.ts +100 -0
  200. package/query-planner/grpc.d.ts.map +1 -0
  201. package/query-planner/grpc.js +736 -0
  202. package/query-planner/index.d.ts +44 -0
  203. package/query-planner/index.d.ts.map +1 -0
  204. package/query-planner/index.js +30 -0
  205. package/query-planner/ir.d.ts +20 -0
  206. package/query-planner/ir.d.ts.map +1 -0
  207. package/query-planner/ir.js +417 -0
  208. package/query-planner/local-aggregate.d.ts +5 -0
  209. package/query-planner/local-aggregate.d.ts.map +1 -0
  210. package/query-planner/local-aggregate.js +126 -0
  211. package/query-planner/odata.d.ts +48 -0
  212. package/query-planner/odata.d.ts.map +1 -0
  213. package/query-planner/odata.js +662 -0
  214. package/query-planner/ogc-compiler.d.ts +55 -0
  215. package/query-planner/ogc-compiler.d.ts.map +1 -0
  216. package/query-planner/ogc-compiler.js +480 -0
  217. package/query-planner/ogc-features.d.ts +53 -0
  218. package/query-planner/ogc-features.d.ts.map +1 -0
  219. package/query-planner/ogc-features.js +617 -0
  220. package/query-planner/planner.d.ts +17 -0
  221. package/query-planner/planner.d.ts.map +1 -0
  222. package/query-planner/planner.js +818 -0
  223. package/query-planner/resource.d.ts +94 -0
  224. package/query-planner/resource.d.ts.map +1 -0
  225. package/query-planner/resource.js +526 -0
  226. package/query-planner/semantic-canonical.d.ts +15 -0
  227. package/query-planner/semantic-canonical.d.ts.map +1 -0
  228. package/query-planner/semantic-canonical.js +62 -0
  229. package/query-planner/semantic-compat.d.ts +10 -0
  230. package/query-planner/semantic-compat.d.ts.map +1 -0
  231. package/query-planner/semantic-compat.js +35 -0
  232. package/query-planner/semantic-compiler.d.ts +64 -0
  233. package/query-planner/semantic-compiler.d.ts.map +1 -0
  234. package/query-planner/semantic-compiler.js +81 -0
  235. package/query-planner/semantic-literals.d.ts +30 -0
  236. package/query-planner/semantic-literals.d.ts.map +1 -0
  237. package/query-planner/semantic-literals.js +133 -0
  238. package/query-planner/semantic-types.d.ts +265 -0
  239. package/query-planner/semantic-types.d.ts.map +1 -0
  240. package/query-planner/semantic-types.js +1 -0
  241. package/query-planner/semantic.d.ts +54 -0
  242. package/query-planner/semantic.d.ts.map +1 -0
  243. package/query-planner/semantic.js +1421 -0
  244. package/query-planner/types.d.ts +560 -0
  245. package/query-planner/types.d.ts.map +1 -0
  246. package/query-planner/types.js +49 -0
  247. package/query-planner/wfs-semantic.d.ts +58 -0
  248. package/query-planner/wfs-semantic.d.ts.map +1 -0
  249. package/query-planner/wfs-semantic.js +547 -0
  250. package/query-planner/wfs.d.ts +6 -0
  251. package/query-planner/wfs.d.ts.map +1 -0
  252. package/query-planner/wfs.js +71 -0
  253. package/react/external-map.d.ts +67 -0
  254. package/react/external-map.d.ts.map +1 -0
  255. package/react/external-map.js +63 -0
  256. package/react/honua-map.d.ts.map +1 -1
  257. package/react/honua-map.js +3 -2
  258. package/react/honua-source-layer.d.ts +110 -0
  259. package/react/honua-source-layer.d.ts.map +1 -0
  260. package/react/honua-source-layer.js +101 -0
  261. package/react/hooks.d.ts +28 -0
  262. package/react/hooks.d.ts.map +1 -1
  263. package/react/hooks.js +26 -4
  264. package/react/index.d.ts +8 -0
  265. package/react/index.d.ts.map +1 -1
  266. package/react/index.js +5 -0
  267. package/react/query-cache.d.ts +26 -4
  268. package/react/query-cache.d.ts.map +1 -1
  269. package/react/query-cache.js +51 -8
  270. package/react/selection.d.ts +177 -0
  271. package/react/selection.d.ts.map +1 -0
  272. package/react/selection.js +0 -0
  273. package/react/use-mounted-source.d.ts +69 -0
  274. package/react/use-mounted-source.d.ts.map +1 -0
  275. package/react/use-mounted-source.js +346 -0
  276. package/runtime/edit-snapping.d.ts +107 -0
  277. package/runtime/edit-snapping.d.ts.map +1 -0
  278. package/runtime/edit-snapping.js +190 -0
  279. package/runtime/errors.d.ts +3 -2
  280. package/runtime/errors.d.ts.map +1 -1
  281. package/runtime/errors.js +19 -2
  282. package/runtime/index.d.ts +6 -0
  283. package/runtime/index.d.ts.map +1 -1
  284. package/runtime/index.js +3 -0
  285. package/runtime/maplibre-renderer.d.ts +41 -0
  286. package/runtime/maplibre-renderer.d.ts.map +1 -0
  287. package/runtime/maplibre-renderer.js +322 -0
  288. package/runtime/query-tiles.d.ts +2 -1
  289. package/runtime/query-tiles.d.ts.map +1 -1
  290. package/runtime/query-tiles.js +6 -2
  291. package/runtime/source-bridge.d.ts +4 -4
  292. package/runtime/source-bridge.d.ts.map +1 -1
  293. package/runtime/source-bridge.js +9 -56
  294. package/runtime/style-interactions.d.ts +3 -2
  295. package/runtime/style-interactions.d.ts.map +1 -1
  296. package/runtime/style-interactions.js +11 -3
  297. package/runtime/terra-draw-sketch.d.ts +275 -0
  298. package/runtime/terra-draw-sketch.d.ts.map +1 -0
  299. package/runtime/terra-draw-sketch.js +404 -0
  300. package/source-capability-registry.d.ts +1 -0
  301. package/source-capability-registry.js +1 -0
  302. package/source-capability-types.d.ts +186 -0
  303. package/source-capability-types.js +7 -0
  304. package/style/index.d.ts +2 -0
  305. package/style/index.d.ts.map +1 -1
  306. package/style/index.js +2 -0
  307. package/style/renderers.d.ts +326 -0
  308. package/style/renderers.d.ts.map +1 -0
  309. package/style/renderers.js +517 -0
  310. package/webmap/convert-renderer.d.ts +24 -3
  311. package/webmap/convert-renderer.d.ts.map +1 -1
  312. package/webmap/convert-renderer.js +93 -112
  313. package/webmap/index.d.ts +1 -1
  314. package/webmap/index.d.ts.map +1 -1
  315. package/webmap/index.js +1 -1
@@ -0,0 +1,84 @@
1
+ /**
2
+ * `HonuaWidgetHost` — mounts the app-platform survival-tier web components
3
+ * (`@honua/sdk-js/web-components`, moving to `@honua/app-platform`) into the
4
+ * `container` an esri-compat widget shim was constructed with, so shim UI
5
+ * renders through the shared component set instead of shim-only markup
6
+ * (issue #493, REQ-004).
7
+ *
8
+ * The host **never imports the web-component kit** — not even dynamically:
9
+ * the `/esri-compat` entrypoint is bundle-budgeted, and any intra-package
10
+ * import (static or `import()`) would pull the whole kit plus its geometry
11
+ * closure into every compat bundle. Instead the application injects the kit
12
+ * once via {@link registerHonuaWidgetKit}:
13
+ *
14
+ * ```ts doc-test=skip reason="wiring snippet requires an application host"
15
+ * import { registerHonuaWidgetKit } from "@honua/sdk-esri-compat";
16
+ *
17
+ * // Eager (module object) or lazy (loader) — both work:
18
+ * registerHonuaWidgetKit(() => import("@honua/sdk-js/web-components"));
19
+ * ```
20
+ *
21
+ * The host is deliberately defensive:
22
+ *
23
+ * - It resolves the ArcGIS-style `container` option (an `HTMLElement` or an
24
+ * element id) only when a DOM is present; headless (Node) shim usage keeps
25
+ * working with no DOM side effects.
26
+ * - Without a registered kit — the default, and the only possibility in the
27
+ * standalone `@honua/sdk-esri-compat` split package unless the app installs
28
+ * the kit — mounting quietly no-ops and the shims stay state-model-only,
29
+ * exactly their pre-delegation behavior.
30
+ * - The delegation tag must be owned by the kit's own element class; a
31
+ * foreign registrant (e.g. the controls kit's `honua-legend`, which has a
32
+ * different `entries` API) also falls back to the headless behavior.
33
+ *
34
+ * @module
35
+ */
36
+ /** Element surface the host hands back to shim update callbacks. */
37
+ export interface HonuaWidgetHostElement extends HTMLElement {
38
+ [key: string]: unknown;
39
+ }
40
+ /**
41
+ * Structural slice of the `@honua/sdk-js/web-components` module the host
42
+ * needs: the element classes (to verify tag ownership) and the registration
43
+ * helper. Passing the whole module object satisfies this interface.
44
+ */
45
+ export interface HonuaWidgetKitLike {
46
+ HonuaLegendElement?: CustomElementConstructor;
47
+ HonuaLayerListElement?: CustomElementConstructor;
48
+ HonuaSearchElement?: CustomElementConstructor;
49
+ HonuaMeasurementElement?: CustomElementConstructor;
50
+ defineHonuaWebComponents?: (registry?: CustomElementRegistry) => void;
51
+ }
52
+ /** A kit module object, or a (possibly async) loader for one. */
53
+ export type HonuaWidgetKitSource = HonuaWidgetKitLike | (() => HonuaWidgetKitLike | Promise<HonuaWidgetKitLike>);
54
+ /**
55
+ * Injects the web-component kit that {@link HonuaWidgetHost} delegates to.
56
+ * Call once from application code with the `@honua/sdk-js/web-components`
57
+ * (or `@honua/app-platform/web-components`) module — eagerly or as a lazy
58
+ * loader. Pass `undefined` to unregister (shims return to headless mode).
59
+ */
60
+ export declare function registerHonuaWidgetKit(source: HonuaWidgetKitSource | undefined): void;
61
+ export declare class HonuaWidgetHost {
62
+ #private;
63
+ constructor(tagName: string, container: unknown);
64
+ /** Whether a usable container was resolved (requires a DOM). */
65
+ get available(): boolean;
66
+ /** The mounted element, when {@link mount} has completed. */
67
+ get element(): HonuaWidgetHostElement | undefined;
68
+ /**
69
+ * Ensures the injected web-component kit is registered and the element is
70
+ * mounted into the container. Returns the element, or `undefined` when no
71
+ * DOM / container / kit is available (headless shims, or an application
72
+ * that never called {@link registerHonuaWidgetKit}).
73
+ */
74
+ mount(): Promise<HonuaWidgetHostElement | undefined>;
75
+ /**
76
+ * Mounts (when needed) and applies `assign` to the element. Fire-and-forget
77
+ * friendly: shims call `void host.update(...)` from synchronous refresh
78
+ * paths.
79
+ */
80
+ update(assign: (element: HonuaWidgetHostElement) => void): Promise<void>;
81
+ /** Removes the mounted element from the container. */
82
+ destroy(): void;
83
+ }
84
+ //# sourceMappingURL=widget-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widget-host.d.ts","sourceRoot":"","sources":["../../../src/esri-compat/widget-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AASH,oEAAoE;AACpE,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,qBAAqB,CAAC,EAAE,wBAAwB,CAAC;IACjD,kBAAkB,CAAC,EAAE,wBAAwB,CAAC;IAC9C,uBAAuB,CAAC,EAAE,wBAAwB,CAAC;IACnD,wBAAwB,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CACvE;AAED,iEAAiE;AACjE,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,GAAG,CAAC,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAIjH;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,GAAG,IAAI,CAErF;AAED,qBAAa,eAAe;;gBAOP,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO;IAKtD,gEAAgE;IAChE,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED,6DAA6D;IAC7D,IAAW,OAAO,IAAI,sBAAsB,GAAG,SAAS,CAEvD;IAED;;;;;OAKG;IACU,KAAK,IAAI,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC;IAYjE;;;;OAIG;IACU,MAAM,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrF,sDAAsD;IAC/C,OAAO,IAAI,IAAI;CAmCvB"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * `HonuaWidgetHost` — mounts the app-platform survival-tier web components
3
+ * (`@honua/sdk-js/web-components`, moving to `@honua/app-platform`) into the
4
+ * `container` an esri-compat widget shim was constructed with, so shim UI
5
+ * renders through the shared component set instead of shim-only markup
6
+ * (issue #493, REQ-004).
7
+ *
8
+ * The host **never imports the web-component kit** — not even dynamically:
9
+ * the `/esri-compat` entrypoint is bundle-budgeted, and any intra-package
10
+ * import (static or `import()`) would pull the whole kit plus its geometry
11
+ * closure into every compat bundle. Instead the application injects the kit
12
+ * once via {@link registerHonuaWidgetKit}:
13
+ *
14
+ * ```ts doc-test=skip reason="wiring snippet requires an application host"
15
+ * import { registerHonuaWidgetKit } from "@honua/sdk-esri-compat";
16
+ *
17
+ * // Eager (module object) or lazy (loader) — both work:
18
+ * registerHonuaWidgetKit(() => import("@honua/sdk-js/web-components"));
19
+ * ```
20
+ *
21
+ * The host is deliberately defensive:
22
+ *
23
+ * - It resolves the ArcGIS-style `container` option (an `HTMLElement` or an
24
+ * element id) only when a DOM is present; headless (Node) shim usage keeps
25
+ * working with no DOM side effects.
26
+ * - Without a registered kit — the default, and the only possibility in the
27
+ * standalone `@honua/sdk-esri-compat` split package unless the app installs
28
+ * the kit — mounting quietly no-ops and the shims stay state-model-only,
29
+ * exactly their pre-delegation behavior.
30
+ * - The delegation tag must be owned by the kit's own element class; a
31
+ * foreign registrant (e.g. the controls kit's `honua-legend`, which has a
32
+ * different `entries` API) also falls back to the headless behavior.
33
+ *
34
+ * @module
35
+ */
36
+ const globalDom = globalThis;
37
+ let widgetKitSource;
38
+ /**
39
+ * Injects the web-component kit that {@link HonuaWidgetHost} delegates to.
40
+ * Call once from application code with the `@honua/sdk-js/web-components`
41
+ * (or `@honua/app-platform/web-components`) module — eagerly or as a lazy
42
+ * loader. Pass `undefined` to unregister (shims return to headless mode).
43
+ */
44
+ export function registerHonuaWidgetKit(source) {
45
+ widgetKitSource = source;
46
+ }
47
+ export class HonuaWidgetHost {
48
+ #tagName;
49
+ #container;
50
+ #element;
51
+ #kitLoad;
52
+ #kitLoadSource;
53
+ constructor(tagName, container) {
54
+ this.#tagName = tagName;
55
+ this.#container = resolveContainer(container);
56
+ }
57
+ /** Whether a usable container was resolved (requires a DOM). */
58
+ get available() {
59
+ return this.#container !== undefined;
60
+ }
61
+ /** The mounted element, when {@link mount} has completed. */
62
+ get element() {
63
+ return this.#element;
64
+ }
65
+ /**
66
+ * Ensures the injected web-component kit is registered and the element is
67
+ * mounted into the container. Returns the element, or `undefined` when no
68
+ * DOM / container / kit is available (headless shims, or an application
69
+ * that never called {@link registerHonuaWidgetKit}).
70
+ */
71
+ async mount() {
72
+ const container = this.#container;
73
+ if (!container || !globalDom.document)
74
+ return undefined;
75
+ if (!(await this.#loadKit()))
76
+ return undefined;
77
+ if (!this.#element || !this.#element.isConnected) {
78
+ const element = globalDom.document.createElement(this.#tagName);
79
+ container.replaceChildren(element);
80
+ this.#element = element;
81
+ }
82
+ return this.#element;
83
+ }
84
+ /**
85
+ * Mounts (when needed) and applies `assign` to the element. Fire-and-forget
86
+ * friendly: shims call `void host.update(...)` from synchronous refresh
87
+ * paths.
88
+ */
89
+ async update(assign) {
90
+ const element = await this.mount();
91
+ if (element)
92
+ assign(element);
93
+ }
94
+ /** Removes the mounted element from the container. */
95
+ destroy() {
96
+ this.#element?.remove();
97
+ this.#element = undefined;
98
+ }
99
+ #loadKit() {
100
+ const source = widgetKitSource;
101
+ // No kit injected (yet): stay headless without caching, so a later
102
+ // registerHonuaWidgetKit call is picked up by the next refresh.
103
+ if (!source)
104
+ return Promise.resolve(false);
105
+ if (!this.#kitLoad || this.#kitLoadSource !== source) {
106
+ this.#kitLoadSource = source;
107
+ this.#kitLoad = (async () => {
108
+ let kit;
109
+ try {
110
+ kit = typeof source === "function" ? await source() : source;
111
+ // Importing the kit module registers the elements as a side effect;
112
+ // calling the helper again is an if-missing no-op, but covers kits
113
+ // handed over as plain objects in scoped-registry setups.
114
+ kit.defineHonuaWebComponents?.();
115
+ }
116
+ catch {
117
+ return false;
118
+ }
119
+ // The tag must be owned by the kit's own class. Another registrant
120
+ // can win the tag (e.g. the controls kit registers its own
121
+ // `honua-legend` with a different `entries` API when imported first);
122
+ // mounting that element and assigning the web-components properties
123
+ // would render nothing, so fall back to the headless shim behavior.
124
+ const expected = expectedKitConstructor(kit, this.#tagName);
125
+ const registered = globalDom.customElements?.get(this.#tagName);
126
+ return expected !== undefined && registered === expected;
127
+ })();
128
+ }
129
+ return this.#kitLoad;
130
+ }
131
+ }
132
+ /** Resolves the web-components kit class that must own `tagName` for delegation. */
133
+ function expectedKitConstructor(kit, tagName) {
134
+ switch (tagName) {
135
+ case "honua-legend":
136
+ return kit.HonuaLegendElement;
137
+ case "honua-layer-list":
138
+ return kit.HonuaLayerListElement;
139
+ case "honua-search":
140
+ return kit.HonuaSearchElement;
141
+ case "honua-measurement":
142
+ return kit.HonuaMeasurementElement;
143
+ default:
144
+ return undefined;
145
+ }
146
+ }
147
+ function resolveContainer(container) {
148
+ if (!globalDom.document)
149
+ return undefined;
150
+ if (typeof container === "string") {
151
+ return globalDom.document.getElementById(container) ?? undefined;
152
+ }
153
+ if (typeof container === "object" &&
154
+ container !== null &&
155
+ typeof container.appendChild === "function") {
156
+ return container;
157
+ }
158
+ return undefined;
159
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * `@honua/sdk-js/filter-registry` — shared filter / crossfilter registry.
3
+ *
4
+ * Protocol-neutral state container for map, chart, table, search, and control
5
+ * filters. Projection helpers translate active clauses into existing SDK
6
+ * query, linked-view, widget, runtime-style, and URL state.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { createFilterRegistry, projectFilterRegistryToQuery } from "@honua/sdk-js/filter-registry";
11
+ *
12
+ * const registry = createFilterRegistry();
13
+ * registry.set("status", { field: "STATUS", op: "=", value: "ACTIVE" });
14
+ * registry.set("severity", { field: "SEVERITY", op: ">=", value: 3 });
15
+ *
16
+ * const query = projectFilterRegistryToQuery(registry, { sourceId: "incidents" });
17
+ * const { features } = await dataset.source("incidents")!.queryAll(query);
18
+ * ```
19
+ *
20
+ * @packageDocumentation
21
+ */
22
+ import type { DegradedReason, Query, SourceDescriptor, SourceId } from "../contract/types.js";
23
+ import type { WidgetSourceProjection } from "../contract/widget-source.js";
24
+ import type { SpatialFilter } from "../core/spatial-filter.js";
25
+ import type { HonuaExtent } from "../core/types.js";
26
+ import type { LinkedViewQueryProjection } from "../exploration/selectors.js";
27
+ import type { FilterOperator } from "../exploration/types.js";
28
+ export type FilterRegistryOwner = {
29
+ readonly kind: "map";
30
+ readonly id: string;
31
+ } | {
32
+ readonly kind: "chart";
33
+ readonly id: string;
34
+ } | {
35
+ readonly kind: "table";
36
+ readonly id: string;
37
+ } | {
38
+ readonly kind: "search";
39
+ readonly id: string;
40
+ } | {
41
+ readonly kind: "control";
42
+ readonly id: string;
43
+ } | {
44
+ readonly kind: "component";
45
+ readonly id: string;
46
+ };
47
+ export type FilterLifecycle = "persistent" | "session" | "transient";
48
+ export type FilterEffect = "filter" | "crossfilter" | "selection" | "search" | "spatial-mask";
49
+ export type FilterSourceScope = "all" | readonly SourceId[];
50
+ export type FilterRuntimeApplyMode = "server" | "runtime" | "client";
51
+ export type RuntimeStyleFilterExpression = readonly unknown[];
52
+ export interface FilterValuePolicy {
53
+ /** Omit this value from URL/share serialization. */
54
+ readonly secret?: boolean;
55
+ /** Omit values whose stable JSON representation exceeds this size. @default 2048 */
56
+ readonly maxSerializedBytes?: number;
57
+ }
58
+ export interface RegistrySpatialScope {
59
+ readonly filter?: SpatialFilter;
60
+ readonly extent?: HonuaExtent;
61
+ }
62
+ export interface FilterClause {
63
+ readonly id: string;
64
+ readonly owner: FilterRegistryOwner;
65
+ readonly sourceScope?: FilterSourceScope;
66
+ readonly field?: string;
67
+ readonly operator?: FilterOperator;
68
+ readonly value?: unknown;
69
+ readonly spatialScope?: RegistrySpatialScope;
70
+ readonly lifecycle?: FilterLifecycle;
71
+ readonly effect?: FilterEffect;
72
+ readonly enabled?: boolean;
73
+ readonly cacheable?: boolean;
74
+ readonly valuePolicy?: FilterValuePolicy;
75
+ }
76
+ export interface FilterRegistrySnapshot {
77
+ readonly version: 1;
78
+ readonly clauses: readonly FilterClause[];
79
+ }
80
+ export interface ShareableFilterRegistryState {
81
+ readonly version: 1;
82
+ readonly clauses: readonly FilterClause[];
83
+ }
84
+ export interface FilterRegistryChangeEvent {
85
+ readonly snapshot: FilterRegistrySnapshot;
86
+ readonly previous: FilterRegistrySnapshot;
87
+ readonly changedIds: ReadonlySet<string>;
88
+ }
89
+ export type FilterRegistryListener = (event: FilterRegistryChangeEvent) => void;
90
+ export type FilterRegistrySelector<T> = (snapshot: FilterRegistrySnapshot) => T;
91
+ export type FilterRegistrySelectorListener<T> = (value: T, event: FilterRegistryChangeEvent | undefined) => void;
92
+ export type FilterRegistryUnsubscribe = () => void;
93
+ export interface FilterRegistrySelectorOptions<T> {
94
+ readonly fireImmediately?: boolean;
95
+ readonly equals?: (left: T, right: T) => boolean;
96
+ }
97
+ export interface FilterRegistry {
98
+ readonly snapshot: FilterRegistrySnapshot;
99
+ upsert(clause: FilterClause): void;
100
+ remove(id: string): void;
101
+ clearOwner(owner: FilterRegistryOwner): void;
102
+ clearSource(sourceId: SourceId): void;
103
+ setEnabled(id: string, enabled: boolean): void;
104
+ replace(snapshot: FilterRegistrySnapshot): void;
105
+ subscribe(listener: FilterRegistryListener): FilterRegistryUnsubscribe;
106
+ select<T>(selector: FilterRegistrySelector<T>, listener: FilterRegistrySelectorListener<T>, options?: FilterRegistrySelectorOptions<T>): FilterRegistryUnsubscribe;
107
+ }
108
+ export interface CreateFilterRegistryOptions {
109
+ readonly initialClauses?: readonly FilterClause[];
110
+ }
111
+ export interface FilterRegistryProjectionOptions {
112
+ readonly sourceId?: SourceId;
113
+ readonly includeDisabled?: boolean;
114
+ }
115
+ export interface FilterRegistryQueryProjectionOptions extends FilterRegistryProjectionOptions {
116
+ readonly baseQuery?: Query;
117
+ readonly source?: Pick<SourceDescriptor, "id" | "protocol" | "capabilities">;
118
+ }
119
+ export interface FilterRegistryQueryProjection {
120
+ readonly query: Query;
121
+ readonly where?: string;
122
+ readonly projection: WidgetSourceProjection;
123
+ readonly linkedView: LinkedViewQueryProjection;
124
+ readonly runtimeFilter?: RuntimeStyleFilterExpression;
125
+ readonly degraded?: readonly DegradedReason[];
126
+ readonly cacheKey: string;
127
+ readonly cacheable: boolean;
128
+ }
129
+ /** Create an in-memory filter registry with owner-scoped mutation helpers. */
130
+ export declare function createFilterRegistry(options?: CreateFilterRegistryOptions): FilterRegistry;
131
+ /** Return active clauses in deterministic id order, optionally source-scoped. */
132
+ export declare function selectActiveFilterClauses(snapshot: FilterRegistrySnapshot, options?: FilterRegistryProjectionOptions): readonly FilterClause[];
133
+ /** Project active registry clauses into query/widget/linked-view/runtime state. */
134
+ export declare function projectFilterRegistryToQuery(snapshot: FilterRegistrySnapshot, options?: FilterRegistryQueryProjectionOptions): FilterRegistryQueryProjection;
135
+ /** Project active clauses directly into a `WidgetSourceProjection`. */
136
+ export declare function projectFilterRegistryToWidgetProjection(snapshot: FilterRegistrySnapshot, options?: FilterRegistryProjectionOptions): WidgetSourceProjection;
137
+ /** Project active clauses into the linked-view projection consumed by existing helpers. */
138
+ export declare function projectFilterRegistryToLinkedView(snapshot: FilterRegistrySnapshot, options?: FilterRegistryQueryProjectionOptions): LinkedViewQueryProjection;
139
+ /** Compile active field clauses into a MapLibre-compatible expression tree. */
140
+ export declare function compileRuntimeStyleFilter(clauses: readonly FilterClause[]): RuntimeStyleFilterExpression | undefined;
141
+ /** Deterministic URL/cache serialization. Secret or large values are omitted. */
142
+ export declare function serializeFilterRegistry(snapshot: FilterRegistrySnapshot, options?: FilterRegistryProjectionOptions): string;
143
+ /** Parse a registry serialization produced by `serializeFilterRegistry`. */
144
+ export declare function parseFilterRegistry(value: string | null | undefined): FilterRegistrySnapshot;
145
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/filter-registry/index.ts"],"names":[],"mappings":"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"}