@honua/app-platform 0.1.2-beta.0 → 0.1.7-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 (400) hide show
  1. package/app/index.d.ts.map +1 -1
  2. package/app/index.js +4 -0
  3. package/collaboration/client.d.ts.map +1 -1
  4. package/connect-url-safety.d.ts +53 -0
  5. package/connect-url-safety.js +189 -0
  6. package/contract/discovery.d.ts +34 -0
  7. package/contract/discovery.d.ts.map +1 -1
  8. package/contract/index.d.ts +7 -5
  9. package/contract/index.d.ts.map +1 -1
  10. package/contract/index.js +3 -2
  11. package/contract/pmtiles.d.ts +10 -1
  12. package/contract/pmtiles.d.ts.map +1 -1
  13. package/contract/pmtiles.js +10 -2
  14. package/contract/protocol-module.d.ts +84 -9
  15. package/contract/protocol-module.d.ts.map +1 -1
  16. package/contract/query-filter-fes.d.ts +18 -0
  17. package/contract/query-filter-fes.d.ts.map +1 -0
  18. package/contract/query-filter-fes.js +122 -0
  19. package/contract/query-filter.d.ts +300 -0
  20. package/contract/query-filter.d.ts.map +1 -0
  21. package/contract/query-filter.js +883 -0
  22. package/contract/schema.d.ts +12 -0
  23. package/contract/schema.d.ts.map +1 -1
  24. package/contract/schema.js +34 -0
  25. package/contract/source-capability-support.d.ts.map +1 -1
  26. package/contract/source-capability-support.js +15 -3
  27. package/contract/source.d.ts +45 -25
  28. package/contract/source.d.ts.map +1 -1
  29. package/contract/source.js +719 -479
  30. package/contract/types.d.ts +88 -19
  31. package/contract/types.d.ts.map +1 -1
  32. package/contract/types.js +4 -0
  33. package/contract/widget-source.d.ts.map +1 -1
  34. package/controls/basemap-switcher.d.ts +19 -11
  35. package/controls/basemap-switcher.d.ts.map +1 -1
  36. package/controls/basemap-switcher.js +58 -25
  37. package/controls/catalog.d.ts +105 -0
  38. package/controls/catalog.d.ts.map +1 -0
  39. package/controls/catalog.js +341 -0
  40. package/controls/element-utils.d.ts +9 -0
  41. package/controls/element-utils.d.ts.map +1 -1
  42. package/controls/element-utils.js +17 -0
  43. package/controls/index.d.ts +29 -8
  44. package/controls/index.d.ts.map +1 -1
  45. package/controls/index.js +26 -8
  46. package/controls/layer-list.d.ts +13 -5
  47. package/controls/layer-list.d.ts.map +1 -1
  48. package/controls/layer-list.js +72 -15
  49. package/controls/legend.d.ts +32 -5
  50. package/controls/legend.d.ts.map +1 -1
  51. package/controls/legend.js +95 -25
  52. package/controls/qualification.d.ts +152 -0
  53. package/controls/qualification.d.ts.map +1 -0
  54. package/controls/qualification.js +1265 -0
  55. package/controls/registry.d.ts +104 -0
  56. package/controls/registry.d.ts.map +1 -0
  57. package/controls/registry.js +150 -0
  58. package/controls/swipe-control.d.ts +6 -1
  59. package/controls/swipe-control.d.ts.map +1 -1
  60. package/controls/swipe-control.js +82 -20
  61. package/core/client.d.ts +51 -21
  62. package/core/client.d.ts.map +1 -1
  63. package/core/client.js +234 -54
  64. package/core/error-classifications.d.ts +23 -0
  65. package/core/error-classifications.d.ts.map +1 -1
  66. package/core/error-classifications.js +23 -0
  67. package/core/error-code-registry.d.ts +24 -1
  68. package/core/error-code-registry.d.ts.map +1 -1
  69. package/core/error-code-registry.js +23 -0
  70. package/core/error-envelope.js +2 -0
  71. package/core/errors.d.ts +2 -2
  72. package/core/errors.d.ts.map +1 -1
  73. package/core/errors.js +1 -1
  74. package/core/geoparquet-sql.d.ts +69 -5
  75. package/core/geoparquet-sql.d.ts.map +1 -1
  76. package/core/geoparquet-sql.js +327 -10
  77. package/core/odata-write-codec.d.ts.map +1 -1
  78. package/core/odata-write-codec.js +0 -1
  79. package/core/odata.d.ts +6 -0
  80. package/core/odata.d.ts.map +1 -1
  81. package/core/odata.js +6 -1
  82. package/core/ogc-processes.d.ts +182 -25
  83. package/core/ogc-processes.d.ts.map +1 -1
  84. package/core/ogc-processes.js +602 -30
  85. package/core/process-runner.d.ts +8 -1
  86. package/core/process-runner.d.ts.map +1 -1
  87. package/core/process-runner.js +1 -0
  88. package/core/protocol-transport.d.ts +2 -0
  89. package/core/protocol-transport.d.ts.map +1 -1
  90. package/core/stac.d.ts +32 -0
  91. package/core/stac.d.ts.map +1 -1
  92. package/core/stac.js +158 -23
  93. package/core/surfaces.d.ts.map +1 -1
  94. package/core/surfaces.js +273 -68
  95. package/core/types.d.ts +138 -11
  96. package/core/types.d.ts.map +1 -1
  97. package/core/wfs-axis-order.d.ts +18 -0
  98. package/core/wfs-axis-order.d.ts.map +1 -0
  99. package/core/wfs-axis-order.js +108 -0
  100. package/core/wfs-capabilities.d.ts +65 -24
  101. package/core/wfs-capabilities.d.ts.map +1 -1
  102. package/core/wfs-capabilities.js +237 -27
  103. package/core/wfs-filter.d.ts +26 -3
  104. package/core/wfs-filter.d.ts.map +1 -1
  105. package/core/wfs-filter.js +48 -53
  106. package/core/wfs-protocol-error.d.ts +12 -0
  107. package/core/wfs-protocol-error.d.ts.map +1 -0
  108. package/core/wfs-protocol-error.js +13 -0
  109. package/core/wfs.d.ts +53 -1
  110. package/core/wfs.d.ts.map +1 -1
  111. package/core/wfs.js +251 -29
  112. package/core/wms-feature-info.d.ts +92 -0
  113. package/core/wms-feature-info.d.ts.map +1 -0
  114. package/core/wms-feature-info.js +285 -0
  115. package/core/wms.d.ts +9 -0
  116. package/core/wms.d.ts.map +1 -1
  117. package/core/wms.js +17 -5
  118. package/esri-compat/event-bus.d.ts +20 -0
  119. package/esri-compat/event-bus.d.ts.map +1 -1
  120. package/esri-compat/feature-filter.d.ts +46 -1
  121. package/esri-compat/feature-filter.d.ts.map +1 -1
  122. package/esri-compat/feature-filter.js +49 -0
  123. package/esri-compat/geojson-layer.d.ts +4 -2
  124. package/esri-compat/geojson-layer.d.ts.map +1 -1
  125. package/esri-compat/geojson-layer.js +4 -2
  126. package/esri-compat/identity-manager.js +2 -2
  127. package/esri-compat/imagery-layer.d.ts +2 -1
  128. package/esri-compat/imagery-layer.d.ts.map +1 -1
  129. package/esri-compat/imagery-layer.js +2 -1
  130. package/esri-compat/layer-list.d.ts +8 -1
  131. package/esri-compat/layer-list.d.ts.map +1 -1
  132. package/esri-compat/layer-list.js +11 -4
  133. package/esri-compat/legend.d.ts.map +1 -1
  134. package/esri-compat/legend.js +1 -1
  135. package/esri-compat/locator.d.ts +297 -0
  136. package/esri-compat/locator.d.ts.map +1 -0
  137. package/esri-compat/locator.js +579 -0
  138. package/esri-compat/map-image-layer.d.ts.map +1 -1
  139. package/esri-compat/map-view.d.ts.map +1 -1
  140. package/esri-compat/map-view.js +1 -1
  141. package/esri-compat/scene-view.d.ts.map +1 -1
  142. package/esri-compat/time-slider.d.ts +29 -0
  143. package/esri-compat/time-slider.d.ts.map +1 -1
  144. package/esri-compat/time-slider.js +117 -0
  145. package/esri-compat/wfs-layer.d.ts +2 -1
  146. package/esri-compat/wfs-layer.d.ts.map +1 -1
  147. package/esri-compat/wfs-layer.js +2 -1
  148. package/esri-compat/widget-host.d.ts +42 -6
  149. package/esri-compat/widget-host.d.ts.map +1 -1
  150. package/esri-compat/widget-host.js +99 -10
  151. package/generated-app/projection.d.ts.map +1 -1
  152. package/generated-app/runtime.d.ts.map +1 -1
  153. package/interactions/declarative-contract.d.ts +149 -0
  154. package/interactions/declarative-contract.d.ts.map +1 -0
  155. package/interactions/declarative-contract.js +293 -0
  156. package/interactions/declarative.d.ts +198 -0
  157. package/interactions/declarative.d.ts.map +1 -0
  158. package/interactions/declarative.js +470 -0
  159. package/interactions/feature-state.d.ts +7 -0
  160. package/interactions/feature-state.d.ts.map +1 -1
  161. package/interactions/feature-state.js +10 -2
  162. package/map/data-to-map-bridge.d.ts +1 -1
  163. package/map/data-to-map-bridge.d.ts.map +1 -1
  164. package/map/data-to-map-bridge.js +1 -2
  165. package/map/honua-map.d.ts.map +1 -1
  166. package/map/honua-map.js +1 -1
  167. package/map/index.d.ts +2 -0
  168. package/map/index.d.ts.map +1 -1
  169. package/map/index.js +2 -0
  170. package/map/maplibre-target.js +1 -1
  171. package/map/realtime-reconciliation-adapter.d.ts +98 -0
  172. package/map/realtime-reconciliation-adapter.d.ts.map +1 -0
  173. package/map/realtime-reconciliation-adapter.js +84 -0
  174. package/map/temporal-playback.d.ts +25 -0
  175. package/map/temporal-playback.d.ts.map +1 -1
  176. package/map/temporal-playback.js +29 -1
  177. package/operator/workspace/workspace.d.ts.map +1 -1
  178. package/operator/workspace/workspace.js +0 -2
  179. package/package.json +4 -3
  180. package/query-planner/canonical-filter.d.ts +30 -0
  181. package/query-planner/canonical-filter.d.ts.map +1 -0
  182. package/query-planner/canonical-filter.js +30 -0
  183. package/query-planner/columnar-plan.d.ts +63 -0
  184. package/query-planner/columnar-plan.d.ts.map +1 -0
  185. package/query-planner/columnar-plan.js +94 -0
  186. package/query-planner/diagnostics.d.ts +3 -3
  187. package/query-planner/diagnostics.d.ts.map +1 -1
  188. package/query-planner/diagnostics.js +17 -4
  189. package/query-planner/duckdb.d.ts.map +1 -1
  190. package/query-planner/duckdb.js +16 -2
  191. package/query-planner/execution-context.d.ts.map +1 -1
  192. package/query-planner/execution-context.js +3 -1
  193. package/query-planner/executor.d.ts.map +1 -1
  194. package/query-planner/executor.js +7 -1
  195. package/query-planner/geoservices.d.ts.map +1 -1
  196. package/query-planner/geoservices.js +24 -5
  197. package/query-planner/grpc.d.ts.map +1 -1
  198. package/query-planner/grpc.js +29 -5
  199. package/query-planner/index.d.ts +20 -5
  200. package/query-planner/index.d.ts.map +1 -1
  201. package/query-planner/index.js +16 -3
  202. package/query-planner/ir.d.ts +6 -1
  203. package/query-planner/ir.d.ts.map +1 -1
  204. package/query-planner/ir.js +63 -1
  205. package/query-planner/odata-protocol-module.d.ts +54 -0
  206. package/query-planner/odata-protocol-module.d.ts.map +1 -0
  207. package/query-planner/odata-protocol-module.js +199 -0
  208. package/query-planner/odata-v1.d.ts +23 -0
  209. package/query-planner/odata-v1.d.ts.map +1 -0
  210. package/query-planner/odata-v1.js +202 -0
  211. package/query-planner/odata.d.ts +0 -3
  212. package/query-planner/odata.d.ts.map +1 -1
  213. package/query-planner/odata.js +0 -143
  214. package/query-planner/ogc-features.d.ts.map +1 -1
  215. package/query-planner/ogc-features.js +23 -1
  216. package/query-planner/planner.d.ts +2 -2
  217. package/query-planner/planner.d.ts.map +1 -1
  218. package/query-planner/planner.js +146 -27
  219. package/query-planner/representation.d.ts +59 -0
  220. package/query-planner/representation.d.ts.map +1 -0
  221. package/query-planner/representation.js +140 -0
  222. package/query-planner/types.d.ts +153 -3
  223. package/query-planner/types.d.ts.map +1 -1
  224. package/query-planner/wfs-protocol-module.d.ts +57 -0
  225. package/query-planner/wfs-protocol-module.d.ts.map +1 -0
  226. package/query-planner/wfs-protocol-module.js +731 -0
  227. package/query-planner/wfs-v1.d.ts +41 -0
  228. package/query-planner/wfs-v1.d.ts.map +1 -0
  229. package/query-planner/wfs-v1.js +366 -0
  230. package/query-planner/wfs.d.ts +1 -3
  231. package/query-planner/wfs.d.ts.map +1 -1
  232. package/query-planner/wfs.js +1 -70
  233. package/realtime/checkpoint-store.d.ts +206 -0
  234. package/realtime/checkpoint-store.d.ts.map +1 -0
  235. package/realtime/checkpoint-store.js +504 -0
  236. package/realtime/honua-server.d.ts +8 -0
  237. package/realtime/honua-server.d.ts.map +1 -1
  238. package/realtime/honua-server.js +123 -14
  239. package/realtime/index.d.ts +4 -0
  240. package/realtime/index.d.ts.map +1 -1
  241. package/realtime/index.js +2 -0
  242. package/realtime/reconciliation.d.ts +245 -0
  243. package/realtime/reconciliation.d.ts.map +1 -0
  244. package/realtime/reconciliation.js +377 -0
  245. package/realtime/resumable-transport.d.ts.map +1 -1
  246. package/realtime/sse.d.ts.map +1 -1
  247. package/realtime/sse.js +7 -1
  248. package/realtime/websocket.d.ts.map +1 -1
  249. package/realtime/wire.d.ts +2 -1
  250. package/realtime/wire.d.ts.map +1 -1
  251. package/realtime/wire.js +24 -8
  252. package/replica-sync/errors.d.ts +19 -1
  253. package/replica-sync/errors.d.ts.map +1 -1
  254. package/replica-sync/errors.js +16 -0
  255. package/replica-sync/geoservices.d.ts +260 -0
  256. package/replica-sync/geoservices.d.ts.map +1 -0
  257. package/replica-sync/geoservices.js +1093 -0
  258. package/replica-sync/index.d.ts +5 -1
  259. package/replica-sync/index.d.ts.map +1 -1
  260. package/replica-sync/index.js +3 -1
  261. package/replica-sync/transport-conformance.d.ts +58 -0
  262. package/replica-sync/transport-conformance.d.ts.map +1 -0
  263. package/replica-sync/transport-conformance.js +265 -0
  264. package/replica-sync/types.d.ts +22 -0
  265. package/replica-sync/types.d.ts.map +1 -1
  266. package/runtime/index.d.ts +6 -2
  267. package/runtime/index.d.ts.map +1 -1
  268. package/runtime/index.js +3 -1
  269. package/runtime/load-package.d.ts +24 -0
  270. package/runtime/load-package.d.ts.map +1 -1
  271. package/runtime/load-package.js +45 -1
  272. package/runtime/maplibre-renderer.d.ts +11 -0
  273. package/runtime/maplibre-renderer.d.ts.map +1 -1
  274. package/runtime/maplibre-renderer.js +32 -7
  275. package/runtime/offline-region-protocol.d.ts +73 -0
  276. package/runtime/offline-region-protocol.d.ts.map +1 -0
  277. package/runtime/offline-region-protocol.js +63 -0
  278. package/runtime/offline-region-style.d.ts +78 -0
  279. package/runtime/offline-region-style.d.ts.map +1 -0
  280. package/runtime/offline-region-style.js +147 -0
  281. package/runtime/pmtiles-protocol.d.ts +7 -8
  282. package/runtime/pmtiles-protocol.d.ts.map +1 -1
  283. package/runtime/pmtiles-protocol.js +19 -66
  284. package/runtime/protocol-registry.d.ts +55 -0
  285. package/runtime/protocol-registry.d.ts.map +1 -0
  286. package/runtime/protocol-registry.js +103 -0
  287. package/runtime/runtime.d.ts +2 -0
  288. package/runtime/runtime.d.ts.map +1 -1
  289. package/runtime/runtime.js +6 -1
  290. package/runtime/style-compose.d.ts.map +1 -1
  291. package/runtime/style-compose.js +78 -9
  292. package/scene-workspace/analysis-widgets.d.ts +4 -2
  293. package/scene-workspace/analysis-widgets.d.ts.map +1 -1
  294. package/scene-workspace/analysis-widgets.js +4 -2
  295. package/scene-workspace/camera-correspondence.d.ts +151 -0
  296. package/scene-workspace/camera-correspondence.d.ts.map +1 -0
  297. package/scene-workspace/camera-correspondence.js +220 -0
  298. package/scene-workspace/cesium-adapter.d.ts +230 -29
  299. package/scene-workspace/cesium-adapter.d.ts.map +1 -1
  300. package/scene-workspace/cesium-adapter.js +741 -56
  301. package/scene-workspace/cesium-mount.d.ts +205 -0
  302. package/scene-workspace/cesium-mount.d.ts.map +1 -0
  303. package/scene-workspace/cesium-mount.js +392 -0
  304. package/scene-workspace/cesium-scene-owner.d.ts +160 -0
  305. package/scene-workspace/cesium-scene-owner.d.ts.map +1 -0
  306. package/scene-workspace/cesium-scene-owner.js +205 -0
  307. package/scene-workspace/cesium-state-sync.d.ts +101 -0
  308. package/scene-workspace/cesium-state-sync.d.ts.map +1 -0
  309. package/scene-workspace/cesium-state-sync.js +432 -0
  310. package/scene-workspace/cesium-time.d.ts +346 -0
  311. package/scene-workspace/cesium-time.d.ts.map +1 -0
  312. package/scene-workspace/cesium-time.js +403 -0
  313. package/scene-workspace/index.d.ts +42 -10
  314. package/scene-workspace/index.d.ts.map +1 -1
  315. package/scene-workspace/index.js +32 -7
  316. package/scene-workspace/maplibre-state-sync.d.ts +112 -0
  317. package/scene-workspace/maplibre-state-sync.d.ts.map +1 -0
  318. package/scene-workspace/maplibre-state-sync.js +400 -0
  319. package/scene-workspace/primitives.d.ts +237 -3
  320. package/scene-workspace/primitives.d.ts.map +1 -1
  321. package/scene-workspace/primitives.js +1087 -17
  322. package/scene-workspace/scene-discovery.d.ts +5 -2
  323. package/scene-workspace/scene-discovery.d.ts.map +1 -1
  324. package/scene-workspace/scene-discovery.js +5 -2
  325. package/scene-workspace/scene-view.d.ts +5 -2
  326. package/scene-workspace/scene-view.d.ts.map +1 -1
  327. package/scene-workspace/scene-view.js +5 -2
  328. package/scene-workspace/source-to-cesium.d.ts +141 -8
  329. package/scene-workspace/source-to-cesium.d.ts.map +1 -1
  330. package/scene-workspace/source-to-cesium.js +497 -72
  331. package/scene-workspace/state-sync-port-kit.d.ts +156 -0
  332. package/scene-workspace/state-sync-port-kit.d.ts.map +1 -0
  333. package/scene-workspace/state-sync-port-kit.js +319 -0
  334. package/scene-workspace/state-sync.d.ts +34 -1
  335. package/scene-workspace/state-sync.d.ts.map +1 -1
  336. package/scene-workspace/state-sync.js +48 -0
  337. package/scene-workspace/types.d.ts +8 -0
  338. package/scene-workspace/types.d.ts.map +1 -1
  339. package/scene-workspace/types.js +2 -0
  340. package/scene-workspace/workspace.d.ts +12 -1
  341. package/scene-workspace/workspace.d.ts.map +1 -1
  342. package/scene-workspace/workspace.js +13 -0
  343. package/studio/index.d.ts +24 -7
  344. package/studio/index.d.ts.map +1 -1
  345. package/studio/index.js +21 -7
  346. package/studio/lifecycle-client.d.ts +164 -0
  347. package/studio/lifecycle-client.d.ts.map +1 -0
  348. package/studio/lifecycle-client.js +299 -0
  349. package/studio/lifecycle-errors.d.ts +91 -0
  350. package/studio/lifecycle-errors.d.ts.map +1 -0
  351. package/studio/lifecycle-errors.js +77 -0
  352. package/studio/lifecycle-types.d.ts +321 -0
  353. package/studio/lifecycle-types.d.ts.map +1 -0
  354. package/studio/lifecycle-types.js +22 -0
  355. package/web-components/controller.d.ts.map +1 -1
  356. package/web-components/csp-styles.d.ts +6 -0
  357. package/web-components/csp-styles.d.ts.map +1 -0
  358. package/web-components/csp-styles.js +53 -0
  359. package/web-components/elements.d.ts +158 -2
  360. package/web-components/elements.d.ts.map +1 -1
  361. package/web-components/elements.js +1302 -215
  362. package/web-components/export-redaction.d.ts +252 -0
  363. package/web-components/export-redaction.d.ts.map +1 -0
  364. package/web-components/export-redaction.js +588 -0
  365. package/web-components/export.d.ts +417 -0
  366. package/web-components/export.d.ts.map +1 -0
  367. package/web-components/export.js +719 -0
  368. package/web-components/feature-editor-model.d.ts +265 -0
  369. package/web-components/feature-editor-model.d.ts.map +1 -0
  370. package/web-components/feature-editor-model.js +438 -0
  371. package/web-components/feature-editor-sketch.d.ts +125 -0
  372. package/web-components/feature-editor-sketch.d.ts.map +1 -0
  373. package/web-components/feature-editor-sketch.js +194 -0
  374. package/web-components/feature-editor-workflow.d.ts +286 -0
  375. package/web-components/feature-editor-workflow.d.ts.map +1 -0
  376. package/web-components/feature-editor-workflow.js +889 -0
  377. package/web-components/feature-editor.d.ts +83 -0
  378. package/web-components/feature-editor.d.ts.map +1 -0
  379. package/web-components/feature-editor.js +829 -0
  380. package/web-components/feature-table-engine.d.ts +465 -0
  381. package/web-components/feature-table-engine.d.ts.map +1 -0
  382. package/web-components/feature-table-engine.js +1360 -0
  383. package/web-components/feature-table-view.d.ts +95 -0
  384. package/web-components/feature-table-view.d.ts.map +1 -0
  385. package/web-components/feature-table-view.js +343 -0
  386. package/web-components/index.d.ts +34 -3
  387. package/web-components/index.d.ts.map +1 -1
  388. package/web-components/index.js +35 -2
  389. package/web-components/maplibre-renderer.d.ts.map +1 -1
  390. package/web-components/maplibre-renderer.js +13 -4
  391. package/web-components/measurement.d.ts +3 -1
  392. package/web-components/measurement.d.ts.map +1 -1
  393. package/web-components/measurement.js +62 -18
  394. package/web-components/time-slider.d.ts +122 -0
  395. package/web-components/time-slider.d.ts.map +1 -0
  396. package/web-components/time-slider.js +740 -0
  397. package/web-components/types.d.ts +310 -0
  398. package/web-components/types.d.ts.map +1 -1
  399. package/webmap/convert-label.js +0 -1
  400. package/webmap/convert-symbol.d.ts.map +1 -1
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Pure presentation layer for `<honua-feature-table>` (issue #681).
3
+ *
4
+ * Everything here is a string/value function over a
5
+ * {@link HonuaFeatureTableViewModel}, so the WAI-ARIA grid contract and the
6
+ * keyboard mapping are testable without mounting a custom element, and
7
+ * `./elements.ts` keeps only wiring.
8
+ *
9
+ * The markup implements the WAI-ARIA `grid` pattern needed for the WCAG 2.2 AA
10
+ * workflow (NFR-001): a single roving `tabindex`, `role="row"`/`role="gridcell"`
11
+ * with 1-based `aria-rowindex`/`aria-colindex` so a virtualized window still
12
+ * announces absolute positions, `aria-sort` per column header, `aria-rowcount`
13
+ * of `-1` when the total is genuinely unknown, and a polite live region that
14
+ * announces result truth and reconciliation conflicts.
15
+ *
16
+ * @module
17
+ */
18
+ import type { SortSpec } from "../contract/types.js";
19
+ import { type HonuaFeatureTableConflict, type HonuaFeatureTableCount, type HonuaFeatureTableFocus, type HonuaFeatureTableFocusMove, type HonuaFeatureTableResolvedColumn, type HonuaFeatureTableSnapshot, type HonuaFeatureTableState, type HonuaFeatureTableWindow } from "./feature-table-engine.js";
20
+ import type { HonuaFeatureTableModel } from "./types.js";
21
+ /** One rendered row. `placeholder` rows sit inside the window but are not resident. */
22
+ export interface HonuaFeatureTableViewRow {
23
+ readonly key: string;
24
+ readonly sourceId: string;
25
+ readonly featureId: string;
26
+ /** 1-based absolute grid row index (header is row 1). */
27
+ readonly ariaRowIndex: number;
28
+ readonly selected: boolean;
29
+ readonly cells: readonly string[];
30
+ readonly placeholder: boolean;
31
+ }
32
+ /** Everything the renderer needs. Derived from an engine snapshot. */
33
+ export interface HonuaFeatureTableViewModel {
34
+ readonly label: string;
35
+ readonly state: HonuaFeatureTableState;
36
+ readonly columns: readonly HonuaFeatureTableResolvedColumn[];
37
+ readonly rows: readonly HonuaFeatureTableViewRow[];
38
+ readonly window: HonuaFeatureTableWindow;
39
+ readonly ariaRowCount: number;
40
+ readonly countLabel: string;
41
+ readonly statusLabel: string;
42
+ readonly sort: readonly SortSpec[];
43
+ readonly focus?: HonuaFeatureTableFocus;
44
+ readonly conflicts: readonly HonuaFeatureTableConflict[];
45
+ /** Row height in CSS pixels; drives the virtualization spacers. */
46
+ readonly rowHeight: number;
47
+ readonly busy: boolean;
48
+ }
49
+ /** Caller-supplied labels and announcements for `<honua-feature-table>`. */
50
+ export interface HonuaFeatureTableMessages {
51
+ readonly label?: string;
52
+ readonly count?: (count: HonuaFeatureTableCount) => string;
53
+ readonly status?: Partial<Readonly<Record<HonuaFeatureTableState, string>>>;
54
+ readonly state?: (state: HonuaFeatureTableState, count: HonuaFeatureTableCount, message?: string) => string;
55
+ }
56
+ /** Human/screen-reader summary of the table's lifecycle state. */
57
+ export declare function describeFeatureTableState(state: HonuaFeatureTableState, count: HonuaFeatureTableCount, message: string | undefined, messages?: HonuaFeatureTableMessages): string;
58
+ /** Project an engine snapshot onto the renderer's view model. */
59
+ export declare function featureTableViewModel<T>(snapshot: HonuaFeatureTableSnapshot<T>, options?: {
60
+ readonly label?: string;
61
+ readonly rowHeight?: number;
62
+ readonly messages?: HonuaFeatureTableMessages;
63
+ }): HonuaFeatureTableViewModel;
64
+ /**
65
+ * Project the legacy single-page {@link HonuaFeatureTableModel} onto the same
66
+ * view model, so a `<honua-feature-table>` with no bounded engine attached
67
+ * still renders the full accessible grid. Result truth is derived
68
+ * conservatively: a model that exceeded its transfer limit reports `partial`
69
+ * with no total, never the returned row count dressed up as one.
70
+ */
71
+ export declare function legacyFeatureTableViewModel<T>(model: HonuaFeatureTableModel<T>, options?: {
72
+ readonly label?: string;
73
+ readonly rowHeight?: number;
74
+ readonly selectedFeatureId?: string;
75
+ readonly messages?: HonuaFeatureTableMessages;
76
+ }): HonuaFeatureTableViewModel;
77
+ /**
78
+ * Map a `KeyboardEvent.key` (plus modifiers) onto a grid navigation move.
79
+ * Returns `undefined` for keys the grid must not swallow.
80
+ */
81
+ export declare function featureTableFocusMoveForKey(key: string, modifiers?: {
82
+ readonly ctrl?: boolean;
83
+ readonly meta?: boolean;
84
+ }): HonuaFeatureTableFocusMove | undefined;
85
+ /**
86
+ * Render the accessible, virtualized grid.
87
+ *
88
+ * The window is positioned with two spacer rows sized in `rowHeight`
89
+ * increments, so only the resident window exists in the DOM while the scroll
90
+ * height still reflects the known total (REQ-002).
91
+ */
92
+ export declare function featureTableGridHtml(model: HonuaFeatureTableViewModel): string;
93
+ /** Grid styles layered on top of the kit's shared `tableStyles()`. */
94
+ export declare function featureTableGridStyles(): string;
95
+ //# sourceMappingURL=feature-table-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-table-view.d.ts","sourceRoot":"","sources":["../../../src/web-components/feature-table-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,343 @@
1
+ /**
2
+ * Pure presentation layer for `<honua-feature-table>` (issue #681).
3
+ *
4
+ * Everything here is a string/value function over a
5
+ * {@link HonuaFeatureTableViewModel}, so the WAI-ARIA grid contract and the
6
+ * keyboard mapping are testable without mounting a custom element, and
7
+ * `./elements.ts` keeps only wiring.
8
+ *
9
+ * The markup implements the WAI-ARIA `grid` pattern needed for the WCAG 2.2 AA
10
+ * workflow (NFR-001): a single roving `tabindex`, `role="row"`/`role="gridcell"`
11
+ * with 1-based `aria-rowindex`/`aria-colindex` so a virtualized window still
12
+ * announces absolute positions, `aria-sort` per column header, `aria-rowcount`
13
+ * of `-1` when the total is genuinely unknown, and a polite live region that
14
+ * announces result truth and reconciliation conflicts.
15
+ *
16
+ * @module
17
+ */
18
+ import { describeFeatureTableCount, featureTableAriaRowCount, featureTableAriaSort, formatFeatureTableCell, } from "./feature-table-engine.js";
19
+ /** Human/screen-reader summary of the table's lifecycle state. */
20
+ export function describeFeatureTableState(state, count, message, messages) {
21
+ if (messages?.state)
22
+ return messages.state(state, count, message);
23
+ const countLabel = messages?.count?.(count) ?? describeFeatureTableCount(count);
24
+ const statusLabel = messages?.status?.[state];
25
+ if (statusLabel !== undefined)
26
+ return statusLabel;
27
+ switch (state) {
28
+ case "idle":
29
+ return "Not loaded";
30
+ case "loading":
31
+ return "Loading rows";
32
+ case "ready":
33
+ return countLabel;
34
+ case "partial":
35
+ return `Partial results — ${countLabel}`;
36
+ case "stale":
37
+ return `Stale results — ${message ?? countLabel}`;
38
+ case "cancelled":
39
+ return message ?? "The request was cancelled";
40
+ case "unsupported":
41
+ return message ?? "This table configuration is not supported by the source";
42
+ default:
43
+ return message ?? "The table query failed";
44
+ }
45
+ }
46
+ /** Project an engine snapshot onto the renderer's view model. */
47
+ export function featureTableViewModel(snapshot, options = {}) {
48
+ const columns = snapshot.visibleColumns.length > 0 ? snapshot.visibleColumns : snapshot.columns;
49
+ const rows = snapshot.rows.map((row, offset) => row ? viewRow(row, columns, snapshot.selection) : placeholderRow(snapshot.window.startIndex + offset, columns));
50
+ return Object.freeze({
51
+ label: options.label ?? options.messages?.label ?? "Features",
52
+ state: snapshot.state,
53
+ columns,
54
+ rows: Object.freeze(rows),
55
+ window: snapshot.window,
56
+ ariaRowCount: featureTableAriaRowCount(snapshot.count),
57
+ countLabel: options.messages?.count?.(snapshot.count) ?? describeFeatureTableCount(snapshot.count),
58
+ statusLabel: describeFeatureTableState(snapshot.state, snapshot.count, snapshot.message, options.messages),
59
+ sort: snapshot.sort,
60
+ ...(snapshot.focus ? { focus: snapshot.focus } : {}),
61
+ conflicts: snapshot.conflicts,
62
+ rowHeight: options.rowHeight ?? 32,
63
+ busy: snapshot.state === "loading",
64
+ });
65
+ }
66
+ /**
67
+ * Project the legacy single-page {@link HonuaFeatureTableModel} onto the same
68
+ * view model, so a `<honua-feature-table>` with no bounded engine attached
69
+ * still renders the full accessible grid. Result truth is derived
70
+ * conservatively: a model that exceeded its transfer limit reports `partial`
71
+ * with no total, never the returned row count dressed up as one.
72
+ */
73
+ export function legacyFeatureTableViewModel(model, options = {}) {
74
+ const columns = resolveLegacyColumns(model.fields);
75
+ const partial = model.exceededTransferLimit === true;
76
+ const count = partial
77
+ ? { kind: "partial", loaded: model.rows.length, evidence: "loaded-rows" }
78
+ : { kind: "known", value: model.totalCount, loaded: model.rows.length, evidence: "result-total-count" };
79
+ const state = legacyState(model.status, partial);
80
+ const rows = model.rows.map((row, index) => Object.freeze({
81
+ key: `${row.sourceId}:${String(row.id)}`,
82
+ sourceId: row.sourceId,
83
+ featureId: String(row.id),
84
+ ariaRowIndex: index + 2,
85
+ selected: options.selectedFeatureId !== undefined && options.selectedFeatureId === String(row.id),
86
+ cells: Object.freeze(columns.map((column) => formatFeatureTableCell(row.attributes[column.field]))),
87
+ placeholder: false,
88
+ }));
89
+ return Object.freeze({
90
+ label: options.label ?? options.messages?.label ?? "Features",
91
+ state,
92
+ columns,
93
+ rows: Object.freeze(rows),
94
+ window: Object.freeze({ startIndex: 0, endIndex: rows.length }),
95
+ ariaRowCount: featureTableAriaRowCount(count),
96
+ countLabel: options.messages?.count?.(count) ?? describeFeatureTableCount(count),
97
+ statusLabel: describeFeatureTableState(state, count, undefined, options.messages),
98
+ sort: Object.freeze([]),
99
+ conflicts: Object.freeze([]),
100
+ rowHeight: options.rowHeight ?? 32,
101
+ busy: model.status === "loading",
102
+ });
103
+ }
104
+ function legacyState(status, partial) {
105
+ if (status === "error")
106
+ return "error";
107
+ if (status === "unsupported")
108
+ return "unsupported";
109
+ if (status === "loading")
110
+ return "loading";
111
+ if (status === "idle")
112
+ return "idle";
113
+ return partial ? "partial" : "ready";
114
+ }
115
+ function resolveLegacyColumns(fields) {
116
+ return Object.freeze(fields.map((field) => Object.freeze({ field, label: field, type: "unknown", visible: true, sortable: false })));
117
+ }
118
+ function viewRow(row, columns, selection) {
119
+ const attributes = row.attributes;
120
+ return Object.freeze({
121
+ key: row.key,
122
+ sourceId: row.sourceId,
123
+ featureId: String(row.id),
124
+ ariaRowIndex: row.index + 2,
125
+ selected: selection.includes(row.key),
126
+ cells: Object.freeze(columns.map((column) => formatFeatureTableCell(attributes[column.field], column))),
127
+ placeholder: false,
128
+ });
129
+ }
130
+ function placeholderRow(index, columns) {
131
+ return Object.freeze({
132
+ key: `placeholder:${index}`,
133
+ sourceId: "",
134
+ featureId: "",
135
+ ariaRowIndex: index + 2,
136
+ selected: false,
137
+ cells: Object.freeze(columns.map(() => "")),
138
+ placeholder: true,
139
+ });
140
+ }
141
+ /**
142
+ * Map a `KeyboardEvent.key` (plus modifiers) onto a grid navigation move.
143
+ * Returns `undefined` for keys the grid must not swallow.
144
+ */
145
+ export function featureTableFocusMoveForKey(key, modifiers = {}) {
146
+ const jump = Boolean(modifiers.ctrl ?? modifiers.meta);
147
+ switch (key) {
148
+ case "ArrowUp":
149
+ return "up";
150
+ case "ArrowDown":
151
+ return "down";
152
+ case "ArrowLeft":
153
+ return "left";
154
+ case "ArrowRight":
155
+ return "right";
156
+ case "Home":
157
+ return jump ? "grid-start" : "row-start";
158
+ case "End":
159
+ return jump ? "grid-end" : "row-end";
160
+ case "PageUp":
161
+ return "page-up";
162
+ case "PageDown":
163
+ return "page-down";
164
+ default:
165
+ return undefined;
166
+ }
167
+ }
168
+ /**
169
+ * Render the accessible, virtualized grid.
170
+ *
171
+ * The window is positioned with two spacer rows sized in `rowHeight`
172
+ * increments, so only the resident window exists in the DOM while the scroll
173
+ * height still reflects the known total (REQ-002).
174
+ */
175
+ export function featureTableGridHtml(model) {
176
+ const columnCount = Math.max(1, model.columns.length);
177
+ const leading = model.window.startIndex * model.rowHeight;
178
+ const knownRows = model.ariaRowCount > 0 ? model.ariaRowCount - 1 : model.window.endIndex;
179
+ const trailing = Math.max(0, (knownRows - model.window.endIndex) * model.rowHeight);
180
+ const focusedRow = model.focus?.rowKey;
181
+ const focusedField = model.focus?.field;
182
+ const hasFocus = model.rows.some((row) => row.key === focusedRow);
183
+ return `
184
+ <style>
185
+ [data-leading] { height: ${leading}px; }
186
+ [data-trailing] { height: ${trailing}px; }
187
+ </style>
188
+ <section class="table-panel" part="panel">
189
+ <div class="table-panel__bar">
190
+ <h2 id="honua-ft-label">${escapeHtml(model.label)}</h2>
191
+ <span class="count" data-count>${escapeHtml(model.countLabel)}</span>
192
+ </div>
193
+ <p class="status" data-status role="status" aria-live="polite">${escapeHtml(statusText(model))}</p>
194
+ <div class="table-wrap" data-scroller>
195
+ <div class="spacer" data-leading></div>
196
+ <table
197
+ role="grid"
198
+ aria-labelledby="honua-ft-label"
199
+ aria-rowcount="${model.ariaRowCount}"
200
+ aria-colcount="${columnCount}"
201
+ aria-busy="${String(model.busy)}"
202
+ data-grid
203
+ >
204
+ <thead>
205
+ <tr role="row" aria-rowindex="1">
206
+ ${model.columns
207
+ .map((column, index) => `
208
+ <th
209
+ role="columnheader"
210
+ scope="col"
211
+ aria-colindex="${index + 1}"
212
+ aria-sort="${featureTableAriaSort(column.field, model.sort)}"
213
+ data-field="${escapeAttribute(column.field)}"
214
+ >
215
+ ${column.sortable
216
+ ? `<button type="button" data-sort-field="${escapeAttribute(column.field)}">${escapeHtml(column.label)}</button>`
217
+ : escapeHtml(column.label)}
218
+ </th>`)
219
+ .join("")}
220
+ </tr>
221
+ </thead>
222
+ <tbody>
223
+ ${model.rows.length === 0
224
+ ? `<tr role="row"><td role="gridcell" colspan="${columnCount}" class="empty">${escapeHtml(model.statusLabel)}</td></tr>`
225
+ : model.rows
226
+ .map((row, rowOffset) => bodyRowHtml(row, rowOffset, model, focusedRow, focusedField, hasFocus))
227
+ .join("")}
228
+ </tbody>
229
+ </table>
230
+ <div class="spacer" data-trailing></div>
231
+ </div>
232
+ </section>
233
+ `;
234
+ }
235
+ function bodyRowHtml(row, rowOffset, model, focusedRow, focusedField, hasFocus) {
236
+ // Roving tabindex: exactly one cell in the grid is tabbable. When the focused
237
+ // row scrolled out of the window, the first cell of the first row takes it so
238
+ // the grid never becomes keyboard-unreachable.
239
+ //
240
+ // Rows carry `tabindex="-1"`: programmatically focusable (so a host app — or a
241
+ // test — can reveal and focus a whole row, which the pre-grid markup allowed
242
+ // via `tabindex="0"`) while staying out of the tab sequence, which the cells
243
+ // own. Row-level Enter/Space still selects; see `#bindGrid`.
244
+ const rovingRow = hasFocus ? row.key === focusedRow : rowOffset === 0;
245
+ return `
246
+ <tr
247
+ role="row"
248
+ tabindex="-1"
249
+ aria-rowindex="${row.ariaRowIndex}"
250
+ aria-selected="${String(row.selected)}"
251
+ ${row.placeholder ? 'data-placeholder="true"' : `data-row-key="${escapeAttribute(row.key)}"`}
252
+ ${row.placeholder ? "" : `data-source-id="${escapeAttribute(row.sourceId)}"`}
253
+ ${row.placeholder ? "" : `data-feature-id="${escapeAttribute(row.featureId)}"`}
254
+ >
255
+ ${row.cells
256
+ .map((cell, cellIndex) => {
257
+ const column = model.columns[cellIndex];
258
+ const field = column?.field ?? "";
259
+ const roving = rovingRow && (hasFocus ? field === focusedField : cellIndex === 0);
260
+ // `data-cell-key` is grid-unique. The kit restores focus after
261
+ // a re-render by matching the active element's first `data-`
262
+ // attribute alphabetically, and `data-field` alone matches the
263
+ // same column in *every* row — which silently dragged focus to
264
+ // row 1. This sorts before `data-field`, so focus returns to
265
+ // the exact cell that had it.
266
+ return `<td
267
+ role="gridcell"
268
+ aria-colindex="${cellIndex + 1}"
269
+ tabindex="${roving ? "0" : "-1"}"
270
+ data-cell-key="${escapeAttribute(`${row.key}::${field}`)}"
271
+ data-field="${escapeAttribute(field)}"
272
+ >${escapeHtml(cell)}</td>`;
273
+ })
274
+ .join("")}
275
+ </tr>`;
276
+ }
277
+ function statusText(model) {
278
+ if (model.conflicts.length === 0)
279
+ return model.statusLabel;
280
+ return `${model.statusLabel}. ${model.conflicts.map((conflict) => conflict.message).join(" ")}`;
281
+ }
282
+ /** Grid styles layered on top of the kit's shared `tableStyles()`. */
283
+ export function featureTableGridStyles() {
284
+ return `
285
+ .table-panel { max-width: 100%; min-width: 0; }
286
+ .table-panel__bar { gap: 8px; min-width: 0; }
287
+ .table-panel__bar h2 { min-width: 0; overflow-wrap: anywhere; }
288
+ .table-wrap { max-width: 100%; overflow-x: auto; overflow-y: auto; }
289
+ .table-wrap table { min-width: 100%; width: 100%; }
290
+ .table-panel__bar .count { color: var(--honua-ui-muted); font-variant-numeric: tabular-nums; }
291
+ .status {
292
+ color: var(--honua-ui-muted);
293
+ margin: 0;
294
+ padding-block: 4px;
295
+ padding-inline: 10px;
296
+ }
297
+ .status:empty { display: none; }
298
+ .spacer { width: 1px; }
299
+ [role="columnheader"] button {
300
+ appearance: none;
301
+ background: none;
302
+ border: 0;
303
+ color: inherit;
304
+ cursor: pointer;
305
+ font: inherit;
306
+ font-weight: 650;
307
+ padding: 0;
308
+ text-align: start;
309
+ width: 100%;
310
+ }
311
+ [role="columnheader"][aria-sort="ascending"] button::after { content: " \\2191"; }
312
+ [role="columnheader"][aria-sort="descending"] button::after { content: " \\2193"; }
313
+ [role="gridcell"]:focus-visible,
314
+ [role="gridcell"]:focus {
315
+ outline: 2px solid var(--honua-ui-accent);
316
+ outline-offset: -2px;
317
+ }
318
+ [data-placeholder="true"] [role="gridcell"] { color: transparent; }
319
+ [data-placeholder="true"] [role="gridcell"]::after {
320
+ background: var(--honua-ui-border);
321
+ border-radius: 3px;
322
+ content: "";
323
+ display: block;
324
+ height: 8px;
325
+ opacity: 0.6;
326
+ width: 60%;
327
+ }
328
+ @media (max-width: 320px) {
329
+ .table-wrap th,
330
+ .table-wrap td {
331
+ overflow-wrap: anywhere;
332
+ text-overflow: clip;
333
+ white-space: normal;
334
+ }
335
+ }
336
+ `;
337
+ }
338
+ function escapeHtml(value) {
339
+ return value.split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;");
340
+ }
341
+ function escapeAttribute(value) {
342
+ return escapeHtml(value).split("'").join("&#39;");
343
+ }
@@ -19,13 +19,44 @@
19
19
  * distance/area drawing on the map's pointer events, computed with
20
20
  * `@honua/geometry` ops) — needs no external drawing provider.
21
21
  *
22
+ * `<honua-legend>` and `<honua-layer-list>` are also each contested by the
23
+ * `controls` kit's own framework-free implementation. This kit's classes are
24
+ * both tags' canonical/default registrant: importing `./web-components` —
25
+ * alone, or alongside `@honua/sdk-js/controls` in either order — always
26
+ * registers these tags with the classes exported here (issue #679; see
27
+ * `./catalog.js` for the full ownership record and `./registry.js` for the
28
+ * catalog-id-addressable registration APIs re-exported below).
29
+ *
22
30
  * @experimental This entrypoint is not yet covered by the SDK's semver contract
23
31
  * — the surface may change in any minor release prior to `1.0.0`.
24
32
  * @module
25
33
  */
26
- import "./elements.js";
27
34
  export { HonuaInMemoryWebComponentController, createHonuaWebComponentController, createHonuaWebComponentControllerFromRuntime, layersFromMapPackage, legendFromMapPackage, } from "./controller.js";
28
- export { HonuaActionPanelElement, HonuaBasemapControlElement, HonuaBookmarksElement, HonuaChartElement, HonuaEditorElement, HonuaFeatureTableElement, HonuaLayerListElement, HonuaLegendElement, HonuaLocateControlElement, HonuaMapElement, HonuaMapStatusElement, HonuaMeasureControlElement, HonuaPrintExportElement, HonuaSearchElement, HonuaSketchControlElement, defineHonuaWebComponents, } from "./elements.js";
35
+ export { HONUA_COMPONENT_CATALOG, describeDeprecatedComponentImport, getCanonicalComponentCatalogEntry, getComponentCatalogEntriesForTag, getComponentCatalogEntry, listComponentCatalogEntries, listDeprecatedComponentImports, } from "../controls/catalog.js";
36
+ export type { HonuaComponentCatalogEntry, HonuaComponentSource, HonuaComponentSupportTier, HonuaDeprecatedComponentDiagnostic, } from "../controls/catalog.js";
37
+ export { HonuaComponentCatalogError, createComponentRegistry, registerAllComponents, registerComponent, registerComponents, } from "../controls/registry.js";
38
+ export type { HonuaComponentCatalogId, HonuaComponentRegistrationOptions, HonuaComponentRegistry, } from "../controls/registry.js";
39
+ export { HonuaActionPanelElement, HonuaBasemapControlElement, HonuaBookmarksElement, HonuaChartElement, HonuaEditorElement, HonuaFeatureTableElement, HonuaLayerListElement, HonuaLegendElement, HonuaLocateControlElement, HonuaMapElement, HonuaMapStatusElement, HonuaMeasureControlElement, HonuaPrintExportElement, HonuaSearchElement, HonuaSketchControlElement, defineHonuaWebComponent, defineHonuaWebComponents, honuaExportKindFromFormat, } from "./elements.js";
40
+ export type { HonuaFeatureTableConflictDetail } from "./elements.js";
29
41
  export { HonuaMeasurementElement, defineHonuaMeasurement } from "./measurement.js";
30
- export type { HonuaActionDetail, HonuaActionPanelAction, HonuaBasemapChangeDetail, HonuaBookmark, HonuaBookmarkChangeDetail, CreateHonuaWebComponentControllerOptions, HonuaChartDatum, HonuaChartModel, HonuaComponentStatus, HonuaControllerReadyDetail, HonuaControllerStateListener, HonuaControllerSubscription, HonuaEditCapabilities, HonuaEditChangeDetail, HonuaEditRequest, HonuaEditorModel, HonuaExportDetail, HonuaFeatureRecord, HonuaFeatureStateEntry, HonuaFeatureStateTarget, HonuaFeatureTableModel, HonuaFilterChangeDetail, HonuaFilterState, HonuaFullscreenChangeDetail, HonuaGeocodeSelectDetail, HonuaLayerModel, HonuaLayerOpacityChangeDetail, HonuaLayerOrderChangeDetail, HonuaLayerVisibilityChangeDetail, HonuaLegendItem, HonuaLocateChangeDetail, HonuaMapClickDetail, HonuaMapErrorDetail, HonuaMapHoverDetail, HonuaMapInteractionDetail, HonuaMapInteractionPoint, HonuaMapReadyDetail, HonuaMeasureChangeDetail, HonuaMeasureMode, HonuaMeasureProvider, HonuaMeasureResult, HonuaMeasurementMap, HonuaQueryFeaturesOptions, HonuaSearchDetail, HonuaSearchGeocodeCandidate, HonuaSearchGeocodeSuggestion, HonuaSearchGeocoderLike, HonuaSearchOptions, HonuaSearchResult, HonuaSelectionChangeDetail, HonuaSelectionState, HonuaSketchChangeDetail, HonuaSketchMode, HonuaSketchProvider, HonuaSketchResult, HonuaViewportChangeDetail, HonuaViewportState, HonuaWebComponentController, HonuaWebComponentRuntimeLike, HonuaWebComponentState, } from "./types.js";
42
+ export { HonuaTimeSliderElement, defineHonuaTimeSlider } from "./time-slider.js";
43
+ export { HONUA_EXPORT_KINDS, HonuaExportError, approximateHonuaScaleLabel, assertHonuaExportProvenanceComplete, assertHonuaExportReady, buildHonuaExportProvenance, createBrowserPrintExportAdapter, createHonuaExportAdapter, runHonuaExport, } from "./export.js";
44
+ export type { BuildHonuaExportProvenanceOptions, CreateHonuaExportAdapterOptions, HonuaExportAdapter, HonuaExportCapabilities, HonuaExportContext, HonuaExportKind, HonuaExportOwnership, HonuaExportPayload, HonuaExportProvenance, HonuaExportRequest, HonuaExportResult, HonuaExportStatus, HonuaPrintWindowLike, HonuaSnapshotCanvasLike, HonuaSnapshotSource, } from "./export.js";
45
+ export { HONUA_EXPORT_REDACTED, HONUA_EXPORT_STATE_SCHEMA, HonuaExportSafetyError, assertCredentialFreeExportBytes, assertCredentialFreeExportText, containsCredentialMaterial, extractPrintableRuns, isSensitiveExportKey, projectExportEndpoint, redactHonuaExportText, sanitizeHonuaExportFilename, sanitizeHonuaExportHeaders, sanitizeHonuaExportState, } from "./export-redaction.js";
46
+ export type { HonuaExportEndpointProjection, HonuaExportRedaction, HonuaExportRedactionReason, HonuaExportStateSanitizationResult, HonuaSanitizedExportFilter, HonuaSanitizedExportLayer, HonuaSanitizedExportLegendItem, HonuaSanitizedExportSelection, HonuaSanitizedExportSource, HonuaSanitizedExportState, SanitizeHonuaExportFilenameOptions, SanitizeHonuaExportStateOptions, } from "./export-redaction.js";
47
+ export { HONUA_COMPONENT_QUALIFICATION_DATA_VERSION, HONUA_COMPONENT_QUALIFICATION_GATES, HONUA_COMPONENT_QUALIFICATION_STATUSES, describeComponentQualificationGate, getComponentQualification, isComponentProductionQualified, listOpenQualificationGates, listComponentQualifications, summarizeComponentQualification, } from "../controls/qualification.js";
48
+ export type { HonuaComponentQualification, HonuaComponentQualificationGate, HonuaComponentQualificationGateId, HonuaComponentQualificationRequirement, HonuaComponentQualificationStatus, HonuaComponentQualificationSummary, HonuaComponentQualificationCell, } from "../controls/qualification.js";
49
+ export { DEFAULT_FEATURE_TABLE_BUDGETS, createHonuaFeatureTable, describeFeatureTableCount, explorationClauseToFilterClause, filterClauseToExplorationClause, featureTableAriaRowCount, featureTableAriaSort, featureTablePageCacheKey, featureTableRowKey, featureTableWindow, featureTableWorkByTier, formatFeatureTableCell, linkFeatureTableToExploration, } from "./feature-table-engine.js";
50
+ export type { CreateHonuaFeatureTableOptions, HonuaFeatureTable, HonuaFeatureTableBudgetKind, HonuaFeatureTableBudgetLedger, HonuaFeatureTableBudgets, HonuaFeatureTableColumn, HonuaFeatureTableColumnType, HonuaFeatureTableConflict, HonuaFeatureTableConflictCode, HonuaFeatureTableCount, HonuaFeatureTableCountEvidence, HonuaFeatureTableExport, HonuaFeatureTableExportRequest, HonuaFeatureTableFocus, HonuaFeatureTableFocusMove, HonuaFeatureTablePageIdentity, HonuaFeatureTablePaging, HonuaFeatureTablePagingMode, HonuaFeatureTablePlanner, HonuaFeatureTableQueryEvidence, HonuaFeatureTableQuerySource, HonuaFeatureTableRealtimeDiff, HonuaFeatureTableRealtimeOutcome, HonuaFeatureTableResolvedColumn, HonuaFeatureTableRow, HonuaFeatureTableRowKey, HonuaFeatureTableScrollMetrics, HonuaFeatureTableSnapshot, HonuaFeatureTableState, HonuaFeatureTableWindow, HonuaFeatureTableWorkConcern, HonuaFeatureTableWorkItem, HonuaFeatureTableWorkTier, LinkFeatureTableToExplorationOptions, } from "./feature-table-engine.js";
51
+ export { describeFeatureTableState, featureTableFocusMoveForKey, featureTableGridHtml, featureTableGridStyles, featureTableViewModel, legacyFeatureTableViewModel, } from "./feature-table-view.js";
52
+ export type { HonuaFeatureTableMessages, HonuaFeatureTableViewModel, HonuaFeatureTableViewRow, } from "./feature-table-view.js";
53
+ export { HonuaFeatureEditorElement, defineHonuaFeatureEditor } from "./feature-editor.js";
54
+ export type { HonuaFeatureEditChangeDetail, HonuaFeatureEditCommitDetail } from "./feature-editor.js";
55
+ export { HonuaFeatureEditorWorkflow, createFeatureEditorWorkflow } from "./feature-editor-workflow.js";
56
+ export type { HonuaFeatureEditorCommit, HonuaFeatureEditorConflict, HonuaFeatureEditorConflictChoice, HonuaFeatureEditorExternalChangeOutcome, HonuaFeatureEditorFailure, HonuaFeatureEditorIdentity, HonuaFeatureEditorOptions, HonuaFeatureEditorSketchState, HonuaFeatureEditorSnapshot, HonuaFeatureEditorStatus, } from "./feature-editor-workflow.js";
57
+ export { buildEditorFormModel, coerceEditorFieldValue, editorControlKind, editorDomainFromSchema, editorFieldInputValue, editorFieldsFromSchema, editorOperationAvailability, hiddenEditorFieldNames, redactEditorAttachment, resolveActiveEditorSubtype, resolveEditorFields, resolveEditorOperations, } from "./feature-editor-model.js";
58
+ export type { BuildEditorFormModelInput, HonuaEditorAttachmentDraft, HonuaEditorAttachmentMutationLike, HonuaEditorCapabilityDecisionLike, HonuaEditorChoice, HonuaEditorControlKind, HonuaEditorFieldControl, HonuaEditorFormModel, HonuaEditorOperation, HonuaEditorOperationAvailability, HonuaEditorOperationOverride, HonuaEditorOperationOverrides, HonuaEditorSchemaDomainLike, HonuaEditorSchemaFieldLike, HonuaEditorSubtype, HonuaEditorSubtypeConfig, HonuaEditorSubtypeFieldOverride, HonuaEditorUnavailableCode, ResolveEditorOperationsInput, } from "./feature-editor-model.js";
59
+ export { bindEditorSketch, createTerraDrawEditorSketch, editorSnappingOptions } from "./feature-editor-sketch.js";
60
+ export type { CreateTerraDrawEditorSketchOptions, HonuaEditorSketchAdapter, HonuaEditorSketchOptions, HonuaEditorSnappingOptions, } from "./feature-editor-sketch.js";
61
+ export type { HonuaActionDetail, HonuaActionPanelAction, HonuaActionPanelMessages, HonuaBasemapChangeDetail, HonuaBasemapControlMessages, HonuaBookmark, HonuaBookmarkChangeDetail, HonuaBookmarksMessages, CreateHonuaWebComponentControllerOptions, HonuaChartDatum, HonuaChartModel, HonuaChartMessages, HonuaComponentStatus, HonuaControllerReadyDetail, HonuaControllerStateListener, HonuaControllerSubscription, HonuaEditCapabilities, HonuaEditChangeDetail, HonuaEditRequest, HonuaEditorMessages, HonuaEditorModel, HonuaExportDetail, HonuaFeatureRecord, HonuaFeatureEditorMessages, HonuaFeatureStateEntry, HonuaFeatureStateTarget, HonuaFeatureTableModel, HonuaFilterChangeDetail, HonuaFilterState, HonuaFullscreenChangeDetail, HonuaGeocodeSelectDetail, HonuaLayerListMessages, HonuaLayerModel, HonuaLayerOpacityChangeDetail, HonuaLayerOrderChangeDetail, HonuaLayerVisibilityChangeDetail, HonuaLegendItem, HonuaLegendMessages, HonuaLocateControlMessages, HonuaLocateChangeDetail, HonuaMapMessages, HonuaMapStatusMessages, HonuaMapClickDetail, HonuaMapErrorDetail, HonuaMapHoverDetail, HonuaMapInteractionDetail, HonuaMapInteractionPoint, HonuaMapReadyDetail, HonuaMeasureChangeDetail, HonuaMeasureControlMessages, HonuaMeasureMode, HonuaMeasurementMessages, HonuaPrintExportMessages, HonuaMeasureProvider, HonuaMeasureResult, HonuaMeasurementMap, HonuaQueryFeaturesOptions, HonuaSearchDetail, HonuaSearchMessages, HonuaSearchGeocodeCandidate, HonuaSearchGeocodeSuggestion, HonuaSearchGeocoderLike, HonuaSearchOptions, HonuaSearchResult, HonuaSelectionChangeDetail, HonuaSelectionState, HonuaSketchChangeDetail, HonuaSketchControlMessages, HonuaSketchMode, HonuaSketchProvider, HonuaSketchResult, HonuaTimeChangeDetail, HonuaTimePlaybackChangeDetail, HonuaTimeSliderMessages, HonuaTimeSliderPlayback, HonuaTimeSliderWindow, HonuaViewportChangeDetail, HonuaViewportState, HonuaWebComponentController, HonuaWebComponentRuntimeLike, HonuaWebComponentState, } from "./types.js";
31
62
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web-components/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,eAAe,CAAC;AAEvB,OAAO,EACL,mCAAmC,EACnC,iCAAiC,EACjC,4CAA4C,EAC5C,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EACvB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAEnF,YAAY,EACV,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,aAAa,EACb,yBAAyB,EACzB,wCAAwC,EACxC,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACxB,eAAe,EACf,6BAA6B,EAC7B,2BAA2B,EAC3B,gCAAgC,EAChC,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,mBAAmB,EACnB,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,2BAA2B,EAC3B,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,mBAAmB,EACnB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,yBAAyB,EACzB,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/web-components/index.ts"],"names":[],"mappings":"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"}
@@ -19,11 +19,44 @@
19
19
  * distance/area drawing on the map's pointer events, computed with
20
20
  * `@honua/geometry` ops) — needs no external drawing provider.
21
21
  *
22
+ * `<honua-legend>` and `<honua-layer-list>` are also each contested by the
23
+ * `controls` kit's own framework-free implementation. This kit's classes are
24
+ * both tags' canonical/default registrant: importing `./web-components` —
25
+ * alone, or alongside `@honua/sdk-js/controls` in either order — always
26
+ * registers these tags with the classes exported here (issue #679; see
27
+ * `./catalog.js` for the full ownership record and `./registry.js` for the
28
+ * catalog-id-addressable registration APIs re-exported below).
29
+ *
22
30
  * @experimental This entrypoint is not yet covered by the SDK's semver contract
23
31
  * — the surface may change in any minor release prior to `1.0.0`.
24
32
  * @module
25
33
  */
26
- import "./elements.js";
34
+ import { defineHonuaWebComponents } from "./elements.js";
35
+ // The blanket auto-registration side effect lives here, not in `./elements.js`
36
+ // (issue #679 PR review): `./elements.js` must stay side-effect-free on
37
+ // import so `../controls/registry.js` can dynamically `import()` it to
38
+ // register one tag without also claiming every tag the kit owns. This is
39
+ // every existing `@honua/sdk-js/web-components` consumer's actual entry
40
+ // point, so the observable behavior — importing this module registers all 16
41
+ // tags when a `customElements` registry is present — is unchanged.
42
+ defineHonuaWebComponents();
27
43
  export { HonuaInMemoryWebComponentController, createHonuaWebComponentController, createHonuaWebComponentControllerFromRuntime, layersFromMapPackage, legendFromMapPackage, } from "./controller.js";
28
- export { HonuaActionPanelElement, HonuaBasemapControlElement, HonuaBookmarksElement, HonuaChartElement, HonuaEditorElement, HonuaFeatureTableElement, HonuaLayerListElement, HonuaLegendElement, HonuaLocateControlElement, HonuaMapElement, HonuaMapStatusElement, HonuaMeasureControlElement, HonuaPrintExportElement, HonuaSearchElement, HonuaSketchControlElement, defineHonuaWebComponents, } from "./elements.js";
44
+ export { HONUA_COMPONENT_CATALOG, describeDeprecatedComponentImport, getCanonicalComponentCatalogEntry, getComponentCatalogEntriesForTag, getComponentCatalogEntry, listComponentCatalogEntries, listDeprecatedComponentImports, } from "../controls/catalog.js";
45
+ export { HonuaComponentCatalogError, createComponentRegistry, registerAllComponents, registerComponent, registerComponents, } from "../controls/registry.js";
46
+ export { HonuaActionPanelElement, HonuaBasemapControlElement, HonuaBookmarksElement, HonuaChartElement, HonuaEditorElement, HonuaFeatureTableElement, HonuaLayerListElement, HonuaLegendElement, HonuaLocateControlElement, HonuaMapElement, HonuaMapStatusElement, HonuaMeasureControlElement, HonuaPrintExportElement, HonuaSearchElement, HonuaSketchControlElement, defineHonuaWebComponent, defineHonuaWebComponents, honuaExportKindFromFormat, } from "./elements.js";
29
47
  export { HonuaMeasurementElement, defineHonuaMeasurement } from "./measurement.js";
48
+ // ── time slider over the temporal playback controller (issue #959) ───────
49
+ export { HonuaTimeSliderElement, defineHonuaTimeSlider } from "./time-slider.js";
50
+ // ── secure export contract (issue #683) ──────────────────────────────────
51
+ export { HONUA_EXPORT_KINDS, HonuaExportError, approximateHonuaScaleLabel, assertHonuaExportProvenanceComplete, assertHonuaExportReady, buildHonuaExportProvenance, createBrowserPrintExportAdapter, createHonuaExportAdapter, runHonuaExport, } from "./export.js";
52
+ export { HONUA_EXPORT_REDACTED, HONUA_EXPORT_STATE_SCHEMA, HonuaExportSafetyError, assertCredentialFreeExportBytes, assertCredentialFreeExportText, containsCredentialMaterial, extractPrintableRuns, isSensitiveExportKey, projectExportEndpoint, redactHonuaExportText, sanitizeHonuaExportFilename, sanitizeHonuaExportHeaders, sanitizeHonuaExportState, } from "./export-redaction.js";
53
+ // ── production qualification matrix (issue #683) ─────────────────────────
54
+ export { HONUA_COMPONENT_QUALIFICATION_DATA_VERSION, HONUA_COMPONENT_QUALIFICATION_GATES, HONUA_COMPONENT_QUALIFICATION_STATUSES, describeComponentQualificationGate, getComponentQualification, isComponentProductionQualified, listOpenQualificationGates, listComponentQualifications, summarizeComponentQualification, } from "../controls/qualification.js";
55
+ // Bounded production feature table (issue #681).
56
+ export { DEFAULT_FEATURE_TABLE_BUDGETS, createHonuaFeatureTable, describeFeatureTableCount, explorationClauseToFilterClause, filterClauseToExplorationClause, featureTableAriaRowCount, featureTableAriaSort, featureTablePageCacheKey, featureTableRowKey, featureTableWindow, featureTableWorkByTier, formatFeatureTableCell, linkFeatureTableToExploration, } from "./feature-table-engine.js";
57
+ export { describeFeatureTableState, featureTableFocusMoveForKey, featureTableGridHtml, featureTableGridStyles, featureTableViewModel, legacyFeatureTableViewModel, } from "./feature-table-view.js";
58
+ // ── production-tier feature editor (issue #680) ──────────────────────────
59
+ export { HonuaFeatureEditorElement, defineHonuaFeatureEditor } from "./feature-editor.js";
60
+ export { HonuaFeatureEditorWorkflow, createFeatureEditorWorkflow } from "./feature-editor-workflow.js";
61
+ export { buildEditorFormModel, coerceEditorFieldValue, editorControlKind, editorDomainFromSchema, editorFieldInputValue, editorFieldsFromSchema, editorOperationAvailability, hiddenEditorFieldNames, redactEditorAttachment, resolveActiveEditorSubtype, resolveEditorFields, resolveEditorOperations, } from "./feature-editor-model.js";
62
+ export { bindEditorSketch, createTerraDrawEditorSketch, editorSnappingOptions } from "./feature-editor-sketch.js";
@@ -1 +1 @@
1
- {"version":3,"file":"maplibre-renderer.d.ts","sourceRoot":"","sources":["../../../src/web-components/maplibre-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAGV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAqCpB,MAAM,WAAW,4BAA4B,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,IAAI,WAAW,GAAG,SAAS,CAAC;IACrC,aAAa,IAAI,2BAA2B,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC5D,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,UAAU,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,WAAW,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC1D;AAED,qBAAa,qBAAqB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;gBAgBzC,OAAO,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAI3D,IAAW,GAAG,IAAI,OAAO,GAAG,SAAS,CAEpC;IAED,IAAW,OAAO,IAAI,4BAA4B,CAAC,CAAC,CAAC,GAAG,SAAS,CAEhE;IAEY,UAAU,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjE,UAAU,IAAI,IAAI;CAwW1B"}
1
+ {"version":3,"file":"maplibre-renderer.d.ts","sourceRoot":"","sources":["../../../src/web-components/maplibre-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAGV,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,0BAA0B,EAC1B,yBAAyB,EACzB,2BAA2B,EAC3B,4BAA4B,EAC5B,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAqCpB,MAAM,WAAW,4BAA4B,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,SAAS,EAAE,WAAW,CAAC;IACvB,SAAS,IAAI,WAAW,GAAG,SAAS,CAAC;IACrC,aAAa,IAAI,2BAA2B,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IAC5D,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,UAAU,CAAC,MAAM,EAAE,yBAAyB,GAAG,IAAI,CAAC;IACpD,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9C,WAAW,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;CAC1D;AAED,qBAAa,qBAAqB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;gBAgBzC,OAAO,EAAE,4BAA4B,CAAC,CAAC,CAAC;IAI3D,IAAW,GAAG,IAAI,OAAO,GAAG,SAAS,CAEpC;IAED,IAAW,OAAO,IAAI,4BAA4B,CAAC,CAAC,CAAC,GAAG,SAAS,CAEhE;IAEY,UAAU,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBjE,UAAU,IAAI,IAAI;CAoX1B"}
@@ -64,9 +64,13 @@ export class HonuaMapLibreRenderer {
64
64
  ]);
65
65
  if (token !== this.#loadToken)
66
66
  return;
67
- const MapCtor = maplibregl.default?.Map ?? maplibregl.Map;
68
- if (!MapCtor)
69
- throw new Error("maplibre-gl did not export Map.");
67
+ // MapLibre 6 is ESM-only and publishes named exports; MapLibre 5 is
68
+ // reachable through either shape depending on how the host bundles it.
69
+ // Accept both so one renderer covers the whole `^5 || ^6` peer range.
70
+ const MapCtor = maplibregl.Map ?? maplibregl.default?.Map;
71
+ if (!MapCtor) {
72
+ throw new Error("maplibre-gl did not export a Map constructor; install maplibre-gl 5.x or 6.x (the SDK peer range is ^5.0.0 || ^6.0.0).");
73
+ }
70
74
  const map = new MapCtor({
71
75
  container: this.#options.container,
72
76
  style: emptyStyle(),
@@ -75,7 +79,12 @@ export class HonuaMapLibreRenderer {
75
79
  bearing: mapPackage.initialView?.bearing ?? 0,
76
80
  pitch: mapPackage.initialView?.pitch ?? 0,
77
81
  attributionControl: false,
78
- preserveDrawingBuffer: true,
82
+ // WebGL context attributes moved under `canvasContextAttributes` in
83
+ // MapLibre 5.0 and stayed there in 6.x. A top-level
84
+ // `preserveDrawingBuffer` is silently ignored by both majors, which
85
+ // would leave `<honua-map>` snapshot export (src/web-components/export.ts)
86
+ // reading an unreadable canvas.
87
+ canvasContextAttributes: { preserveDrawingBuffer: true },
79
88
  });
80
89
  this.#map = map;
81
90
  const runtime = await loadMapPackage(mapPackage, map, {
@@ -33,12 +33,14 @@
33
33
  *
34
34
  * @module
35
35
  */
36
- import type { HonuaMeasureMode, HonuaMeasureResult, HonuaMeasurementMap } from "./types.js";
36
+ import type { HonuaMeasureMode, HonuaMeasureResult, HonuaMeasurementMap, HonuaMeasurementMessages } from "./types.js";
37
37
  declare const HTMLElementBase: typeof HTMLElement;
38
38
  type LngLat = readonly [number, number];
39
39
  export declare class HonuaMeasurementElement extends HTMLElementBase {
40
40
  #private;
41
41
  static get observedAttributes(): string[];
42
+ get messages(): HonuaMeasurementMessages;
43
+ set messages(messages: HonuaMeasurementMessages | undefined);
42
44
  /** The MapLibre map this widget draws on. */
43
45
  get map(): HonuaMeasurementMap | undefined;
44
46
  set map(map: HonuaMeasurementMap | undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"measurement.d.ts","sourceRoot":"","sources":["../../../src/web-components/measurement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAGH,OAAO,KAAK,EAA4B,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAQtH,QAAA,MAAM,eAAe,EAAE,OAAO,WAAkF,CAAC;AAMjH,KAAK,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExC,qBAAa,uBAAwB,SAAQ,eAAe;;IAC1D,WAAkB,kBAAkB,IAAI,MAAM,EAAE,CAE/C;IAaD,6CAA6C;IAC7C,IAAW,GAAG,IAAI,mBAAmB,GAAG,SAAS,CAEhD;IAED,IAAW,GAAG,CAAC,GAAG,EAAE,mBAAmB,GAAG,SAAS,EAMlD;IAED,wEAAwE;IACjE,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;IAI9C,+BAA+B;IAC/B,IAAW,IAAI,IAAI,gBAAgB,CAElC;IAED,yDAAyD;IACzD,IAAW,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAElD;IAED,4DAA4D;IAC5D,IAAW,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEvC;IAED,wEAAwE;IACjE,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAY5C,4DAA4D;IACrD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAatC,8DAA8D;IACvD,MAAM,IAAI,IAAI;IASrB,8EAA8E;IACvE,MAAM,IAAI,IAAI;IAUd,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ5C,iBAAiB,IAAI,IAAI;IAQzB,oBAAoB,IAAI,IAAI;IAsMnC,SAAS,CAAC,MAAM,IAAI,IAAI;CAgFzB;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,QAAQ,wBAA2B,GAAG,IAAI,CAKhF"}
1
+ {"version":3,"file":"measurement.d.ts","sourceRoot":"","sources":["../../../src/web-components/measurement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,KAAK,EAEV,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,YAAY,CAAC;AAQpB,QAAA,MAAM,eAAe,EAAE,OAAO,WAAkF,CAAC;AAMjH,KAAK,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExC,qBAAa,uBAAwB,SAAQ,eAAe;;IAC1D,WAAkB,kBAAkB,IAAI,MAAM,EAAE,CAE/C;IASD,IAAW,QAAQ,IAAI,wBAAwB,CAE9C;IACD,IAAW,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,GAAG,SAAS,EAGjE;IAOD,6CAA6C;IAC7C,IAAW,GAAG,IAAI,mBAAmB,GAAG,SAAS,CAEhD;IAED,IAAW,GAAG,CAAC,GAAG,EAAE,mBAAmB,GAAG,SAAS,EAMlD;IAED,wEAAwE;IACjE,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI;IAI9C,+BAA+B;IAC/B,IAAW,IAAI,IAAI,gBAAgB,CAElC;IAED,yDAAyD;IACzD,IAAW,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAElD;IAED,4DAA4D;IAC5D,IAAW,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEvC;IAED,wEAAwE;IACjE,OAAO,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAY5C,4DAA4D;IACrD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAatC,8DAA8D;IACvD,MAAM,IAAI,IAAI;IASrB,8EAA8E;IACvE,MAAM,IAAI,IAAI;IAUd,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ5C,iBAAiB,IAAI,IAAI;IAQzB,oBAAoB,IAAI,IAAI;IAsMnC,SAAS,CAAC,MAAM,IAAI,IAAI;CAwGzB;AAED,gFAAgF;AAChF,wBAAgB,sBAAsB,CAAC,QAAQ,wBAA2B,GAAG,IAAI,CAKhF"}