@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,293 @@
1
+ /**
2
+ * Standalone data-to-map bridge: mount any contract `Source` as a live,
3
+ * styled MapLibre layer set — no MapPackage, no Honua server, no
4
+ * app-platform import. This is the `connection.mount(target)` slice of the
5
+ * kernel ADR (`docs/decisions/north-star-sdk-application-kernel.md`) scoped
6
+ * to a caller-owned MapLibre host.
7
+ *
8
+ * The module is peer-injected and safe to import in Node/SSR/worker code:
9
+ * it never imports `maplibre-gl`. The host passes a duck-typed map (any
10
+ * MapLibre GL `Map` instance satisfies {@link DataToMapLibreMap}).
11
+ *
12
+ * @module
13
+ */
14
+ import type { QueryTileSourceDescriptor } from "../contract/tiles.js";
15
+ import type { Query, Source } from "../contract/types.js";
16
+ import { type HonuaErrorOptions, HonuaSdkError } from "../core/error-envelope.js";
17
+ import type { PopupFactory, PopupFeature } from "../runtime/popups.js";
18
+ import type { Renderer } from "../style/renderers.js";
19
+ import { type MapLibreGeometryKind } from "./geojson-projection.js";
20
+ import type { SourceToMapLibreMap } from "./source-to-maplibre.js";
21
+ /**
22
+ * Materialization strategy chosen by the bridge.
23
+ *
24
+ * - `"geojson"` — drain the source through `queryAll` into one bounded
25
+ * GeoJSON source; filter changes diff-update through `setData`.
26
+ * - `"query-tiles"` — reuse the existing dynamic query-tile path: the map
27
+ * pulls viewport-bounded vector tiles and the source's own tile cache
28
+ * applies; filter changes rewrite the tile URL template where possible.
29
+ *
30
+ * @experimental
31
+ */
32
+ export type DataToMapStrategy = "geojson" | "query-tiles";
33
+ /** Machine-readable reason and event codes recorded on {@link MountedSourceDiagnostics}. @experimental */
34
+ export type DataToMapDiagnosticCode = "strategy-override" | "query-capability" | "tiles-capability" | "tile-endpoint-missing" | "count-probe-unavailable" | "count-probe-failed" | "result-size-within-limit" | "result-size-exceeds-limit" | "result-size-unknown" | "overflow-truncated" | "geometry-unsupported" | "source-degraded" | "tile-support" | "filter-applied" | "filter-recreated-source" | "refresh-applied" | "renderer-applied" | "renderer-recreated-layers" | "renderer-recreated-source";
35
+ /** One strategy reason or lifecycle event. @experimental */
36
+ export interface DataToMapDiagnostic {
37
+ readonly code: DataToMapDiagnosticCode;
38
+ readonly severity: "info" | "warning";
39
+ readonly message: string;
40
+ readonly detail?: Readonly<Record<string, unknown>>;
41
+ }
42
+ /** Pagination-truncation report for the bounded GeoJSON path. @experimental */
43
+ export interface DataToMapOverflow {
44
+ /** True when more matching rows exist than were materialized. */
45
+ readonly truncated: boolean;
46
+ /** Rows actually rendered on the map. */
47
+ readonly renderedFeatureCount: number;
48
+ /** The bound that produced the truncation ({@link MountSourceOptions.maxGeoJsonFeatures}). */
49
+ readonly limit: number;
50
+ /** Matching row count when the source reported one. */
51
+ readonly totalCount?: number;
52
+ }
53
+ /**
54
+ * Explain/diagnostics surface returned on the handle: the chosen strategy,
55
+ * why it was chosen, and the current materialization state.
56
+ *
57
+ * @experimental
58
+ */
59
+ export interface MountedSourceDiagnostics {
60
+ readonly strategy: DataToMapStrategy;
61
+ /** Why the strategy was selected (capabilities, probes, overrides). */
62
+ readonly reasons: readonly DataToMapDiagnostic[];
63
+ /** Lifecycle events appended by `setFilter` / `refresh`. */
64
+ readonly updates: readonly DataToMapDiagnostic[];
65
+ /** Rendered feature count (GeoJSON strategy only). */
66
+ readonly featureCount?: number;
67
+ /** Matching row count when known (GeoJSON strategy only). */
68
+ readonly totalCount?: number;
69
+ /** Set when pagination limits truncated the materialized data. */
70
+ readonly overflow?: DataToMapOverflow;
71
+ /** Geometry kinds present in the materialized data (GeoJSON strategy only). */
72
+ readonly geometryKinds?: readonly MapLibreGeometryKind[];
73
+ }
74
+ /** Strategy selection result from {@link explainDataToMapStrategy}. @experimental */
75
+ export interface DataToMapStrategyExplanation {
76
+ readonly strategy: DataToMapStrategy;
77
+ readonly reasons: readonly DataToMapDiagnostic[];
78
+ /** Matching row count observed by the size probe, when one ran. */
79
+ readonly probedCount?: number;
80
+ }
81
+ /** Error codes raised by the bridge. @experimental */
82
+ export type DataToMapBridgeErrorCode = "invalid-option" | "disposed" | "source-conflict" | "layer-conflict" | "map-mutation-failed" | "interaction-unsupported" | "filter-unsupported";
83
+ /** A stable, machine-readable bridge failure. @experimental */
84
+ export declare class HonuaDataToMapBridgeError extends HonuaSdkError {
85
+ readonly code: DataToMapBridgeErrorCode;
86
+ readonly detail?: Readonly<Record<string, unknown>> | undefined;
87
+ constructor(code: DataToMapBridgeErrorCode, message: string, detail?: Readonly<Record<string, unknown>> | undefined, options?: HonuaErrorOptions);
88
+ }
89
+ /**
90
+ * Minimal injected MapLibre map surface. Source/layer mutation is required;
91
+ * event and feature-state methods are needed only when `popup` / `hover`
92
+ * options are requested, and `fitBounds` only when `fitBounds` is requested.
93
+ * A real `maplibre-gl` `Map` satisfies the whole interface.
94
+ *
95
+ * @experimental
96
+ */
97
+ export interface DataToMapLibreMap extends SourceToMapLibreMap {
98
+ on?(event: string, layerOrHandler: string | ((...args: unknown[]) => void), handler?: (...args: unknown[]) => void): void;
99
+ off?(event: string, layerOrHandler: string | ((...args: unknown[]) => void), handler?: (...args: unknown[]) => void): void;
100
+ setFeatureState?(target: {
101
+ source: string;
102
+ id: string | number;
103
+ sourceLayer?: string;
104
+ }, state: Record<string, unknown>): void;
105
+ setPaintProperty?(layerId: string, name: string, value: unknown): void;
106
+ setLayoutProperty?(layerId: string, name: string, value: unknown): void;
107
+ setFilter?(layerId: string, filter: unknown): void;
108
+ getFeatureState?(target: {
109
+ source: string;
110
+ id: string | number;
111
+ sourceLayer?: string;
112
+ }): Record<string, unknown>;
113
+ removeFeatureState?(target: {
114
+ source: string;
115
+ id: string | number;
116
+ sourceLayer?: string;
117
+ }, key?: string): void;
118
+ fitBounds?(bounds: [number, number, number, number], options?: Record<string, unknown>): void;
119
+ }
120
+ /** Click-popup configuration. @experimental */
121
+ export interface MountSourcePopupOptions {
122
+ /** Creates one popup handle per click — usually `() => new maplibregl.Popup()`. */
123
+ readonly factory: PopupFactory;
124
+ /** Restrict the default renderer to these properties, in order. */
125
+ readonly fields?: readonly string[];
126
+ /** Custom formatter; return `undefined` to suppress the popup for a click. */
127
+ readonly render?: (context: MountSourcePopupContext) => Node | string | undefined;
128
+ /** Title rendered by the default formatter. */
129
+ readonly title?: string;
130
+ }
131
+ /** Click context passed to a custom popup formatter. @experimental */
132
+ export interface MountSourcePopupContext {
133
+ readonly features: readonly PopupFeature[];
134
+ readonly lngLat: readonly [number, number];
135
+ }
136
+ /** Options for {@link mountSource}. @experimental */
137
+ export interface MountSourceOptions<T = Record<string, unknown>> {
138
+ /**
139
+ * Force a strategy instead of capability + result-size selection.
140
+ * `"query-tiles"` requires {@link MountSourceOptions.queryTiles}.
141
+ */
142
+ readonly strategy?: DataToMapStrategy;
143
+ /** Initial filter applied to the mounted data. Replaced by `setFilter`. */
144
+ readonly query?: Readonly<Omit<Query<T>, "signal">>;
145
+ /**
146
+ * Bound (and result-size heuristic threshold) for GeoJSON materialization.
147
+ * Truncation is reported through {@link MountedSourceDiagnostics.overflow}.
148
+ * @default 10000
149
+ */
150
+ readonly maxGeoJsonFeatures?: number;
151
+ /**
152
+ * Dynamic query-tile source descriptor enabling the `"query-tiles"`
153
+ * strategy (see `@honua/sdk-js/runtime` query-tile helpers). Without it the
154
+ * bridge can only materialize GeoJSON, even when the source declares the
155
+ * `tiles` capability.
156
+ */
157
+ readonly queryTiles?: QueryTileSourceDescriptor<T>;
158
+ /** Vector `source-layer` for the tile strategy. Defaults to the tile descriptor's `sourceId`. */
159
+ readonly sourceLayer?: string;
160
+ /** MapLibre source id. @default `honua-<descriptor id>` */
161
+ readonly sourceId?: string;
162
+ /** Base layer id; geometry suffixes (`-point`, `-line`, …) are appended. Defaults to the source id. */
163
+ readonly layerId?: string;
164
+ /** Existing layer id to insert the bridge layers before. */
165
+ readonly beforeId?: string;
166
+ /**
167
+ * Restrict default styling to one geometry kind, or `"auto"` (default) to
168
+ * install the stable point/line/polygon(+outline) matrix so filter changes
169
+ * can move between geometry kinds without structural layer churn.
170
+ */
171
+ readonly geometry?: MapLibreGeometryKind | "auto";
172
+ /**
173
+ * Full layer override: the bridge adds these layers verbatim (injecting
174
+ * `source`, and `source-layer` for the tile strategy, when absent) instead
175
+ * of the geometry-appropriate defaults. Each entry must carry a unique `id`.
176
+ */
177
+ readonly layers?: readonly Readonly<Record<string, unknown>>[];
178
+ /**
179
+ * First-class renderer object from `@honua/sdk-js/style`
180
+ * (`classBreaksRenderer`, `uniqueValueRenderer`, `heatmapRenderer`,
181
+ * `clusterRenderer`). Layers and paint derive from the renderer instead of
182
+ * the geometry defaults; `paint`/`layout` overrides still win per property.
183
+ * A cluster renderer additionally configures GeoJSON-source clustering and
184
+ * requires the `"geojson"` strategy. Mutually exclusive with `layers`.
185
+ * Swap at runtime with {@link MountedSource.setRenderer}.
186
+ */
187
+ readonly renderer?: Renderer;
188
+ /** Per-geometry paint overrides merged over the defaults. */
189
+ readonly paint?: Partial<Readonly<Record<MapLibreGeometryKind | "polygonOutline", Readonly<Record<string, unknown>>>>>;
190
+ /** Per-geometry layout overrides. */
191
+ readonly layout?: Partial<Readonly<Record<MapLibreGeometryKind | "polygonOutline", Readonly<Record<string, unknown>>>>>;
192
+ /** Attribution override; defaults to the source descriptor's attribution. */
193
+ readonly attribution?: string;
194
+ /** Fit the map to the mounted data (GeoJSON bbox or tile descriptor bounds). */
195
+ readonly fitBounds?: boolean | {
196
+ readonly padding?: number;
197
+ };
198
+ /** Open a popup on layer click. Requires `map.on`/`map.off`. */
199
+ readonly popup?: MountSourcePopupOptions;
200
+ /**
201
+ * Toggle a boolean feature-state key (default `"hover"`) while the pointer
202
+ * is over a feature. Requires event and feature-state map methods, and
203
+ * feature ids (`schema.primaryKey` or GeoJSON feature ids).
204
+ */
205
+ readonly hover?: boolean | {
206
+ readonly stateKey?: string;
207
+ };
208
+ /** Cancels mounting and any in-flight refresh work. */
209
+ readonly signal?: AbortSignal;
210
+ }
211
+ /**
212
+ * Live handle returned by {@link mountSource}. Owns every MapLibre resource
213
+ * the bridge created (source, layers, event listeners); `dispose()` is
214
+ * idempotent and removes all of them.
215
+ *
216
+ * @experimental
217
+ */
218
+ export interface MountedSource<T = Record<string, unknown>> extends AsyncDisposable {
219
+ readonly strategy: DataToMapStrategy;
220
+ readonly sourceId: string;
221
+ readonly layerIds: readonly string[];
222
+ /**
223
+ * Resolved vector `source-layer` used by the mounted layers — the explicit
224
+ * option, or the default derived from the query-tile descriptor. Always
225
+ * `undefined` for the GeoJSON strategy. Feature-state operations against a
226
+ * vector tile source must target this same value.
227
+ */
228
+ readonly sourceLayer?: string;
229
+ readonly state: "ready" | "disposed";
230
+ readonly diagnostics: MountedSourceDiagnostics;
231
+ /**
232
+ * Replace the mounted filter and diff-update in place: `setData` for the
233
+ * GeoJSON strategy, tile URL rewrite (`setTiles`) for the tile strategy.
234
+ * Passing `undefined` clears the filter.
235
+ */
236
+ setFilter(query: Readonly<Omit<Query<T>, "signal">> | undefined): Promise<MountedSourceDiagnostics>;
237
+ /**
238
+ * Swap the mounted renderer and diff-update in place where MapLibre
239
+ * allows: when the layer structure is unchanged, paint/layout/filter are
240
+ * updated per property (`setPaintProperty`/`setLayoutProperty`/
241
+ * `setFilter`) without layer teardown; a structural change (e.g. to or
242
+ * from a cluster/heatmap renderer) recreates only the owned layers, and
243
+ * changed GeoJSON cluster options recreate the source. Passing
244
+ * `undefined` restores the geometry-default styling.
245
+ */
246
+ setRenderer(renderer: Renderer | undefined): Promise<MountedSourceDiagnostics>;
247
+ /** Re-execute the current filter and diff-update the mounted data. */
248
+ refresh(): Promise<MountedSourceDiagnostics>;
249
+ /** Remove every owned source, layer, and listener. Safe to call twice. */
250
+ dispose(): void;
251
+ }
252
+ /**
253
+ * Explain which materialization strategy {@link mountSource} would pick for
254
+ * a source, without touching a map. Runs the same capability checks and (when
255
+ * both strategies are viable) the same result-size probe.
256
+ *
257
+ * @experimental
258
+ */
259
+ export declare function explainDataToMapStrategy<T>(source: Source<T>, options?: MountSourceOptions<T>): Promise<DataToMapStrategyExplanation>;
260
+ /**
261
+ * Mount a contract `Source` onto a caller-owned MapLibre map as a styled,
262
+ * interactive layer set and return a disposable handle that owns everything
263
+ * it created.
264
+ *
265
+ * The bridge selects GeoJSON materialization or the dynamic query-tile path
266
+ * from declared capabilities and a result-size heuristic (override with
267
+ * `options.strategy`), applies geometry-appropriate default styling, and can
268
+ * wire click popups and hover feature-state.
269
+ *
270
+ * @example
271
+ * ```ts
272
+ * import maplibregl from "maplibre-gl";
273
+ * import { connect } from "@honua/sdk-js";
274
+ * import { mountSource } from "@honua/sdk-js/map";
275
+ *
276
+ * const connection = await connect({
277
+ * endpoint: FEATURE_LAYER_URL,
278
+ * protocol: "auto",
279
+ * authorizationScopeFingerprint: "public",
280
+ * });
281
+ * const mounted = await mountSource(map, connection.source(), {
282
+ * popup: { factory: () => new maplibregl.Popup() },
283
+ * hover: true,
284
+ * fitBounds: true,
285
+ * });
286
+ * console.log(mounted.diagnostics.strategy, mounted.diagnostics.reasons);
287
+ * // Later: mounted.dispose(); // or `await using mounted = …`
288
+ * ```
289
+ *
290
+ * @experimental
291
+ */
292
+ export declare function mountSource<T = Record<string, unknown>>(map: DataToMapLibreMap, source: Source<T>, options?: MountSourceOptions<T>): Promise<MountedSource<T>>;
293
+ //# sourceMappingURL=data-to-map-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-to-map-bridge.d.ts","sourceRoot":"","sources":["../../../src/map/data-to-map-bridge.ts"],"names":[],"mappings":"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"}