@honua/react 0.1.0-beta.0 → 0.1.1-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
@@ -1,12 +1,16 @@
1
1
  /**
2
2
  * Converts Esri renderer JSON to MapLibre paint/layout properties.
3
3
  *
4
- * Handles simple, uniqueValue, and classBreaks renderers. Produces
5
- * data-driven expressions (match, step) for categorized/graduated renderers.
4
+ * Since issue #497 this module emits first-class renderer objects
5
+ * (`src/style/renderers.ts`) for uniqueValue/classBreaks renderers and
6
+ * compiles them through the shared `/expr`-based compiler, so WebMap
7
+ * conversion, esri-compat, and standalone renderer objects share a single
8
+ * implementation. The compiled style output is unchanged.
6
9
  *
7
10
  * @module
8
11
  */
9
- import { convertSymbol, esriColorToCss } from "./convert-symbol.js";
12
+ import { classBreaksRenderer, uniqueValueRenderer } from "../style/renderers.js";
13
+ import { convertSymbol } from "./convert-symbol.js";
10
14
  export function convertRenderer(renderer, warn) {
11
15
  if (!renderer)
12
16
  return undefined;
@@ -30,132 +34,109 @@ function convertUniqueValueRenderer(renderer, warn) {
30
34
  if (infos.length === 0) {
31
35
  return convertSymbol(renderer.defaultSymbol, warn);
32
36
  }
33
- // Determine the layer type from the first valid symbol
34
- const firstResult = convertSymbol(infos[0].symbol, warn);
35
- if (!firstResult)
37
+ const rendererObject = uniqueValueRendererFromWebMap(renderer, warn);
38
+ if (!rendererObject)
36
39
  return undefined;
37
- const { layerType } = firstResult;
38
- // Build the field expression
39
- const fieldExpr = buildFieldExpression(renderer);
40
- // Build paint properties with match expressions
41
- const paintKeys = collectPaintKeys(infos, warn, layerType);
42
- const paint = {};
43
- const layout = {};
44
- for (const key of paintKeys) {
45
- const matchArgs = [fieldExpr];
46
- for (const info of infos) {
47
- const symbolResult = convertSymbol(info.symbol, warn);
48
- if (!symbolResult)
49
- continue;
50
- matchArgs.push(info.value);
51
- matchArgs.push(symbolResult.paint[key] ?? symbolResult.layout[key]);
52
- }
53
- // Default value from defaultSymbol or first symbol
54
- const defaultResult = renderer.defaultSymbol ? convertSymbol(renderer.defaultSymbol, warn) : firstResult;
55
- const defaultVal = defaultResult?.paint[key] ?? defaultResult?.layout[key] ?? "transparent";
56
- matchArgs.push(defaultVal);
57
- if (isLayoutProperty(key)) {
58
- layout[key] = ["match", ...matchArgs];
59
- }
60
- else {
61
- paint[key] = ["match", ...matchArgs];
62
- }
63
- }
64
- return { layerType, paint, layout };
40
+ return compileRendererObject(rendererObject);
65
41
  }
66
42
  function convertClassBreaksRenderer(renderer, warn) {
67
43
  const breaks = renderer.classBreakInfos ?? [];
68
44
  if (breaks.length === 0) {
69
45
  return convertSymbol(renderer.defaultSymbol, warn);
70
46
  }
47
+ const rendererObject = classBreaksRendererFromWebMap(renderer, warn);
48
+ if (!rendererObject)
49
+ return undefined;
50
+ return compileRendererObject(rendererObject);
51
+ }
52
+ /**
53
+ * Build a first-class unique-value renderer object from WebMap renderer
54
+ * JSON. Returns `undefined` when the renderer has no value infos or the
55
+ * first symbol cannot be converted (matching `convertRenderer` behavior).
56
+ *
57
+ * @experimental
58
+ */
59
+ export function uniqueValueRendererFromWebMap(renderer, warn) {
60
+ const infos = renderer.uniqueValueInfos ?? [];
61
+ if (infos.length === 0)
62
+ return undefined;
63
+ // The first valid symbol determines the layer type.
64
+ const firstResult = convertSymbol(infos[0].symbol, warn);
65
+ if (!firstResult)
66
+ return undefined;
67
+ const values = [];
68
+ for (const info of infos) {
69
+ const symbolResult = convertSymbol(info.symbol, warn);
70
+ if (!symbolResult)
71
+ continue;
72
+ values.push({
73
+ value: info.value,
74
+ ...(info.label !== undefined ? { label: info.label } : {}),
75
+ style: { paint: symbolResult.paint, layout: symbolResult.layout },
76
+ });
77
+ }
78
+ return uniqueValueRenderer({
79
+ field: renderer.field1 ?? "",
80
+ ...(renderer.field2 !== undefined ? { field2: renderer.field2 } : {}),
81
+ ...(renderer.field3 !== undefined ? { field3: renderer.field3 } : {}),
82
+ ...(renderer.fieldDelimiter !== undefined ? { fieldDelimiter: renderer.fieldDelimiter } : {}),
83
+ values,
84
+ ...(renderer.defaultLabel !== undefined ? { defaultLabel: renderer.defaultLabel } : {}),
85
+ ...defaultStyleFromSymbol(renderer.defaultSymbol, warn),
86
+ layerType: firstResult.layerType,
87
+ });
88
+ }
89
+ /**
90
+ * Build a first-class class-breaks renderer object from WebMap renderer
91
+ * JSON. Returns `undefined` when the renderer has no break infos, no field,
92
+ * or the first symbol cannot be converted (matching `convertRenderer`
93
+ * behavior).
94
+ *
95
+ * @experimental
96
+ */
97
+ export function classBreaksRendererFromWebMap(renderer, warn) {
98
+ const breaks = renderer.classBreakInfos ?? [];
99
+ if (breaks.length === 0)
100
+ return undefined;
71
101
  const firstResult = convertSymbol(breaks[0].symbol, warn);
72
102
  if (!firstResult)
73
103
  return undefined;
74
- const { layerType } = firstResult;
75
104
  const field = renderer.field;
76
105
  if (!field) {
77
106
  warn.warn("missing-field", "classBreaks renderer missing field property");
78
107
  return undefined;
79
108
  }
80
- const paintKeys = collectPaintKeysFromBreaks(breaks, warn, layerType);
81
- const paint = {};
82
- const layout = {};
83
- for (const key of paintKeys) {
84
- // Default value
85
- const defaultResult = renderer.defaultSymbol ? convertSymbol(renderer.defaultSymbol, warn) : firstResult;
86
- const defaultVal = defaultResult?.paint[key] ?? defaultResult?.layout[key] ?? "transparent";
87
- const stepArgs = [["get", field], defaultVal];
88
- for (const brk of breaks) {
89
- const symbolResult = convertSymbol(brk.symbol, warn);
90
- if (!symbolResult)
91
- continue;
92
- const threshold = brk.classMinValue ?? brk.classMaxValue;
93
- stepArgs.push(threshold);
94
- stepArgs.push(symbolResult.paint[key] ?? symbolResult.layout[key]);
95
- }
96
- if (isLayoutProperty(key)) {
97
- layout[key] = ["step", ...stepArgs];
98
- }
99
- else {
100
- paint[key] = ["step", ...stepArgs];
101
- }
102
- }
103
- return { layerType, paint, layout };
104
- }
105
- function buildFieldExpression(renderer) {
106
- if (!renderer.field2 && !renderer.field3) {
107
- return ["get", renderer.field1 ?? ""];
108
- }
109
- // Multi-field: concatenate with delimiter
110
- const delim = renderer.fieldDelimiter ?? ",";
111
- const fields = [];
112
- if (renderer.field1)
113
- fields.push(["get", renderer.field1]);
114
- if (renderer.field2) {
115
- fields.push(delim);
116
- fields.push(["get", renderer.field2]);
117
- }
118
- if (renderer.field3) {
119
- fields.push(delim);
120
- fields.push(["get", renderer.field3]);
121
- }
122
- return ["concat", ...fields];
123
- }
124
- function collectPaintKeys(infos, warn, layerType) {
125
- const keys = new Set();
126
- for (const info of infos) {
127
- const result = convertSymbol(info.symbol, warn);
128
- if (!result)
109
+ const entries = [];
110
+ for (const brk of breaks) {
111
+ const symbolResult = convertSymbol(brk.symbol, warn);
112
+ if (!symbolResult)
129
113
  continue;
130
- for (const k of Object.keys(result.paint))
131
- keys.add(k);
132
- for (const k of Object.keys(result.layout))
133
- keys.add(k);
114
+ entries.push({
115
+ ...(brk.classMinValue !== undefined ? { min: brk.classMinValue } : {}),
116
+ ...(brk.classMaxValue !== undefined ? { max: brk.classMaxValue } : {}),
117
+ ...(brk.label !== undefined ? { label: brk.label } : {}),
118
+ style: { paint: symbolResult.paint, layout: symbolResult.layout },
119
+ });
134
120
  }
135
- return keys;
121
+ return classBreaksRenderer({
122
+ field,
123
+ breaks: entries,
124
+ ...(renderer.defaultLabel !== undefined ? { defaultLabel: renderer.defaultLabel } : {}),
125
+ ...defaultStyleFromSymbol(renderer.defaultSymbol, warn),
126
+ layerType: firstResult.layerType,
127
+ });
136
128
  }
137
- function collectPaintKeysFromBreaks(breaks, warn, layerType) {
138
- return collectPaintKeys(breaks, warn, layerType);
129
+ function defaultStyleFromSymbol(defaultSymbol, warn) {
130
+ if (!defaultSymbol)
131
+ return {};
132
+ const converted = convertSymbol(defaultSymbol, warn);
133
+ // A default symbol that fails conversion still overrides the first-entry
134
+ // fallback: every property defaults to "transparent" (legacy behavior).
135
+ return { defaultStyle: converted ? { paint: converted.paint, layout: converted.layout } : {} };
139
136
  }
140
- const LAYOUT_PROPERTIES = new Set([
141
- "icon-image",
142
- "icon-size",
143
- "icon-offset",
144
- "icon-anchor",
145
- "icon-rotate",
146
- "text-field",
147
- "text-font",
148
- "text-size",
149
- "text-offset",
150
- "text-anchor",
151
- "text-max-width",
152
- "text-letter-spacing",
153
- "text-justify",
154
- "text-rotate",
155
- "symbol-placement",
156
- "symbol-spacing",
157
- "visibility",
158
- ]);
159
- function isLayoutProperty(key) {
160
- return LAYOUT_PROPERTIES.has(key);
137
+ function compileRendererObject(renderer) {
138
+ // The descriptor carries the symbol-derived layer type, so the geometry
139
+ // argument is inert here; "polygon" is an arbitrary stand-in.
140
+ const [fragment] = renderer.toMapLibre("polygon");
141
+ return { layerType: fragment.type, paint: fragment.paint, layout: fragment.layout };
161
142
  }
package/webmap/index.d.ts CHANGED
@@ -29,7 +29,7 @@ export { CONTRACT, getContractSummary } from "./contract.js";
29
29
  export type { ContractEntry, ContractSupport, ContractSummary } from "./contract.js";
30
30
  export { convertSymbol, esriColorToCss, esriLineStyleToDashArray } from "./convert-symbol.js";
31
31
  export type { SymbolConversionResult } from "./convert-symbol.js";
32
- export { convertRenderer } from "./convert-renderer.js";
32
+ export { classBreaksRendererFromWebMap, convertRenderer, uniqueValueRendererFromWebMap, } from "./convert-renderer.js";
33
33
  export type { RendererConversionResult } from "./convert-renderer.js";
34
34
  export { convertPopupInfo } from "./convert-popup.js";
35
35
  export type { HonuaPopupConfig, HonuaPopupFieldInfo, HonuaPopupMediaInfo } from "./convert-popup.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webmap/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EACV,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,EACzB,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,6BAA6B,EAC7B,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,GACV,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webmap/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,6BAA6B,EAC7B,eAAe,EACf,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EACV,UAAU,EACV,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,yBAAyB,EACzB,yBAAyB,EACzB,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,YAAY,EACZ,WAAW,EACX,eAAe,EACf,6BAA6B,EAC7B,kBAAkB,EAClB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,SAAS,GACV,MAAM,YAAY,CAAC"}
package/webmap/index.js CHANGED
@@ -25,7 +25,7 @@ export { parseWebMap } from "./parse.js";
25
25
  export { createWarningCollector } from "./warnings.js";
26
26
  export { CONTRACT, getContractSummary } from "./contract.js";
27
27
  export { convertSymbol, esriColorToCss, esriLineStyleToDashArray } from "./convert-symbol.js";
28
- export { convertRenderer } from "./convert-renderer.js";
28
+ export { classBreaksRendererFromWebMap, convertRenderer, uniqueValueRendererFromWebMap, } from "./convert-renderer.js";
29
29
  export { convertPopupInfo } from "./convert-popup.js";
30
30
  export { convertLabelingInfo } from "./convert-label.js";
31
31
  export { convertBasemap } from "./convert-basemap.js";