@sqlrooms/deck 0.29.0-rc.10 → 0.29.0-rc.12

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 (173) hide show
  1. package/README.md +88 -16
  2. package/dist/BlockMapSettings.d.ts.map +1 -1
  3. package/dist/BlockMapSettings.js +4 -16
  4. package/dist/BlockMapSettings.js.map +1 -1
  5. package/dist/DashboardMapSettings.d.ts.map +1 -1
  6. package/dist/DashboardMapSettings.js +7 -10
  7. package/dist/DashboardMapSettings.js.map +1 -1
  8. package/dist/DeckJsonMap.d.ts.map +1 -1
  9. package/dist/DeckJsonMap.js +20 -18
  10. package/dist/DeckJsonMap.js.map +1 -1
  11. package/dist/DeckJsonMapSpec.d.ts +916 -53
  12. package/dist/DeckJsonMapSpec.d.ts.map +1 -1
  13. package/dist/DeckJsonMapSpec.js +9 -0
  14. package/dist/DeckJsonMapSpec.js.map +1 -1
  15. package/dist/DeckMapDefaultStylesProvider.d.ts +3 -4
  16. package/dist/DeckMapDefaultStylesProvider.d.ts.map +1 -1
  17. package/dist/DeckMapDefaultStylesProvider.js +13 -7
  18. package/dist/DeckMapDefaultStylesProvider.js.map +1 -1
  19. package/dist/DeckMapSurface.d.ts +1 -1
  20. package/dist/DeckMapSurface.js +1 -1
  21. package/dist/DeckMapSurface.js.map +1 -1
  22. package/dist/MapSettings.d.ts +14 -0
  23. package/dist/MapSettings.d.ts.map +1 -1
  24. package/dist/MapSettings.js +555 -186
  25. package/dist/MapSettings.js.map +1 -1
  26. package/dist/MapSettingsControls.d.ts +8 -1
  27. package/dist/MapSettingsControls.d.ts.map +1 -1
  28. package/dist/MapSettingsControls.js +24 -2
  29. package/dist/MapSettingsControls.js.map +1 -1
  30. package/dist/ai.d.ts +19 -5
  31. package/dist/ai.d.ts.map +1 -1
  32. package/dist/ai.js +63 -112
  33. package/dist/ai.js.map +1 -1
  34. package/dist/aiNormalize.d.ts +31 -0
  35. package/dist/aiNormalize.d.ts.map +1 -0
  36. package/dist/aiNormalize.js +630 -0
  37. package/dist/aiNormalize.js.map +1 -0
  38. package/dist/block.d.ts +1 -1
  39. package/dist/block.d.ts.map +1 -1
  40. package/dist/block.js +1 -1
  41. package/dist/block.js.map +1 -1
  42. package/dist/createOrUpdateDeckMapResource.d.ts +6 -2
  43. package/dist/createOrUpdateDeckMapResource.d.ts.map +1 -1
  44. package/dist/createOrUpdateDeckMapResource.js +57 -4
  45. package/dist/createOrUpdateDeckMapResource.js.map +1 -1
  46. package/dist/dashboard.d.ts.map +1 -1
  47. package/dist/dashboard.js +72 -8
  48. package/dist/dashboard.js.map +1 -1
  49. package/dist/dashboardConfig.d.ts +10 -1
  50. package/dist/dashboardConfig.d.ts.map +1 -1
  51. package/dist/dashboardConfig.js +55 -22
  52. package/dist/dashboardConfig.js.map +1 -1
  53. package/dist/datasets/PreparedDatasetStore.d.ts +3 -4
  54. package/dist/datasets/PreparedDatasetStore.d.ts.map +1 -1
  55. package/dist/datasets/PreparedDatasetStore.js +35 -10
  56. package/dist/datasets/PreparedDatasetStore.js.map +1 -1
  57. package/dist/datasets/helpers.d.ts +39 -2
  58. package/dist/datasets/helpers.d.ts.map +1 -1
  59. package/dist/datasets/helpers.js +86 -3
  60. package/dist/datasets/helpers.js.map +1 -1
  61. package/dist/datasets/usePreparedDatasetStates.d.ts.map +1 -1
  62. package/dist/datasets/usePreparedDatasetStates.js +12 -8
  63. package/dist/datasets/usePreparedDatasetStates.js.map +1 -1
  64. package/dist/datasets/wrapGeometryAsWkb.d.ts +20 -0
  65. package/dist/datasets/wrapGeometryAsWkb.d.ts.map +1 -0
  66. package/dist/datasets/wrapGeometryAsWkb.js +65 -0
  67. package/dist/datasets/wrapGeometryAsWkb.js.map +1 -0
  68. package/dist/index.d.ts +3 -2
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +2 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/json/colorScaleFunction.d.ts +12 -4
  73. package/dist/json/colorScaleFunction.d.ts.map +1 -1
  74. package/dist/json/colorScaleFunction.js.map +1 -1
  75. package/dist/json/compileColorScale.d.ts +3 -2
  76. package/dist/json/compileColorScale.d.ts.map +1 -1
  77. package/dist/json/compileColorScale.js +16 -1
  78. package/dist/json/compileColorScale.js.map +1 -1
  79. package/dist/json/compileGeoArrowAccessor.d.ts +5 -0
  80. package/dist/json/compileGeoArrowAccessor.d.ts.map +1 -1
  81. package/dist/json/compileGeoArrowAccessor.js +17 -3
  82. package/dist/json/compileGeoArrowAccessor.js.map +1 -1
  83. package/dist/json/createDeckJsonConfiguration.d.ts.map +1 -1
  84. package/dist/json/createDeckJsonConfiguration.js +278 -151
  85. package/dist/json/createDeckJsonConfiguration.js.map +1 -1
  86. package/dist/json/defaultClasses.d.ts.map +1 -1
  87. package/dist/json/defaultClasses.js +3 -3
  88. package/dist/json/defaultClasses.js.map +1 -1
  89. package/dist/json/extractColorScaleLegends.d.ts.map +1 -1
  90. package/dist/json/extractColorScaleLegends.js +43 -14
  91. package/dist/json/extractColorScaleLegends.js.map +1 -1
  92. package/dist/json/heatmapDefaults.d.ts +17 -7
  93. package/dist/json/heatmapDefaults.d.ts.map +1 -1
  94. package/dist/json/heatmapDefaults.js +54 -12
  95. package/dist/json/heatmapDefaults.js.map +1 -1
  96. package/dist/json/layers/DeckH3HexagonLayer.d.ts.map +1 -1
  97. package/dist/json/layers/DeckH3HexagonLayer.js +9 -14
  98. package/dist/json/layers/DeckH3HexagonLayer.js.map +1 -1
  99. package/dist/json/layers/DeckHeatmapLayer.d.ts +32 -0
  100. package/dist/json/layers/DeckHeatmapLayer.d.ts.map +1 -0
  101. package/dist/json/layers/DeckHeatmapLayer.js +69 -0
  102. package/dist/json/layers/DeckHeatmapLayer.js.map +1 -0
  103. package/dist/json/layers/h3IndexFormat.d.ts +6 -0
  104. package/dist/json/layers/h3IndexFormat.d.ts.map +1 -0
  105. package/dist/json/layers/h3IndexFormat.js +17 -0
  106. package/dist/json/layers/h3IndexFormat.js.map +1 -0
  107. package/dist/json/layers/index.d.ts +2 -0
  108. package/dist/json/layers/index.d.ts.map +1 -1
  109. package/dist/json/layers/index.js +2 -0
  110. package/dist/json/layers/index.js.map +1 -1
  111. package/dist/json/rewriteGeoArrowAccessors.d.ts.map +1 -1
  112. package/dist/json/rewriteGeoArrowAccessors.js +22 -5
  113. package/dist/json/rewriteGeoArrowAccessors.js.map +1 -1
  114. package/dist/json/scaleFunction.d.ts +27 -0
  115. package/dist/json/scaleFunction.d.ts.map +1 -0
  116. package/dist/json/scaleFunction.js +151 -0
  117. package/dist/json/scaleFunction.js.map +1 -0
  118. package/dist/mapAiConfig.d.ts +8 -0
  119. package/dist/mapAiConfig.d.ts.map +1 -1
  120. package/dist/mapAiConfig.js +9 -1
  121. package/dist/mapAiConfig.js.map +1 -1
  122. package/dist/mapAiSharedInstructions.d.ts +3 -0
  123. package/dist/mapAiSharedInstructions.d.ts.map +1 -0
  124. package/dist/mapAiSharedInstructions.js +16 -0
  125. package/dist/mapAiSharedInstructions.js.map +1 -0
  126. package/dist/mapConfig.d.ts +7 -1
  127. package/dist/mapConfig.d.ts.map +1 -1
  128. package/dist/mapConfig.js.map +1 -1
  129. package/dist/mapConfigUtils.d.ts +22 -0
  130. package/dist/mapConfigUtils.d.ts.map +1 -1
  131. package/dist/mapConfigUtils.js +147 -3
  132. package/dist/mapConfigUtils.js.map +1 -1
  133. package/dist/mapFit.d.ts +16 -0
  134. package/dist/mapFit.d.ts.map +1 -1
  135. package/dist/mapFit.js +208 -30
  136. package/dist/mapFit.js.map +1 -1
  137. package/dist/mapLayerConfigUtils.d.ts +64 -1
  138. package/dist/mapLayerConfigUtils.d.ts.map +1 -1
  139. package/dist/mapLayerConfigUtils.js +277 -16
  140. package/dist/mapLayerConfigUtils.js.map +1 -1
  141. package/dist/mapResourceAuthoring.d.ts +3 -1
  142. package/dist/mapResourceAuthoring.d.ts.map +1 -1
  143. package/dist/mapResourceAuthoring.js +413 -20
  144. package/dist/mapResourceAuthoring.js.map +1 -1
  145. package/dist/mosaic.d.ts +1 -1
  146. package/dist/mosaic.d.ts.map +1 -1
  147. package/dist/mosaic.js.map +1 -1
  148. package/dist/prepare/geoarrow.js.map +1 -1
  149. package/dist/prepare/prepareDeckDataset.d.ts.map +1 -1
  150. package/dist/prepare/prepareDeckDataset.js +1 -0
  151. package/dist/prepare/prepareDeckDataset.js.map +1 -1
  152. package/dist/prepare/types.d.ts +3 -0
  153. package/dist/prepare/types.d.ts.map +1 -1
  154. package/dist/prepare/types.js.map +1 -1
  155. package/dist/prepare/wkbDecoder.d.ts +10 -0
  156. package/dist/prepare/wkbDecoder.d.ts.map +1 -1
  157. package/dist/prepare/wkbDecoder.js +141 -20
  158. package/dist/prepare/wkbDecoder.js.map +1 -1
  159. package/dist/prepare/wkbParser.d.ts +9 -0
  160. package/dist/prepare/wkbParser.d.ts.map +1 -1
  161. package/dist/prepare/wkbParser.js +22 -0
  162. package/dist/prepare/wkbParser.js.map +1 -1
  163. package/dist/selectStarAsWkbCollision.d.ts +3 -0
  164. package/dist/selectStarAsWkbCollision.d.ts.map +1 -0
  165. package/dist/selectStarAsWkbCollision.js +78 -0
  166. package/dist/selectStarAsWkbCollision.js.map +1 -0
  167. package/dist/types.d.ts +1 -1
  168. package/dist/types.d.ts.map +1 -1
  169. package/dist/types.js.map +1 -1
  170. package/dist/useDeckMapFitToBounds.d.ts.map +1 -1
  171. package/dist/useDeckMapFitToBounds.js +1 -1
  172. package/dist/useDeckMapFitToBounds.js.map +1 -1
  173. package/package.json +15 -15
@@ -1 +1 @@
1
- {"version":3,"file":"DeckJsonMapSpec.d.ts","sourceRoot":"","sources":["../src/DeckJsonMapSpec.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,oBAAoB;;;;EAAqC,CAAC;AACvE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAK9B,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAQ7B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;iBAE5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAiBlE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmC/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAOxE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"DeckJsonMapSpec.d.ts","sourceRoot":"","sources":["../src/DeckJsonMapSpec.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AAEtB,eAAO,MAAM,oBAAoB;;;;EAAqC,CAAC;AACvE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAO9B,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAQ7B,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;iBAE5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAiBlE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA0C/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAOxE,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAO1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -3,6 +3,8 @@ import { z } from 'zod';
3
3
  export const GeometryEncodingHint = z.enum(['geoarrow', 'wkb', 'wkt']);
4
4
  export const ColorScaleFunction = z.intersection(z.object({
5
5
  '@@function': z.literal('colorScale'),
6
+ /** Per-accessor opacity 0–1. */
7
+ opacity: z.number().min(0).max(1).optional(),
6
8
  }), ColorScaleConfig);
7
9
  export const LayerBindingConfig = z.object({
8
10
  dataset: z.string().min(1).optional(),
@@ -43,10 +45,17 @@ export const DeckJsonMapLayerSpec = z.looseObject({
43
45
  radiusUnits: z.string().optional(),
44
46
  radiusMinPixels: z.number().optional(),
45
47
  radiusMaxPixels: z.number().optional(),
48
+ pointRadiusScale: z.number().optional(),
49
+ pointRadiusUnits: z.string().optional(),
50
+ pointRadiusMinPixels: z.number().optional(),
51
+ pointRadiusMaxPixels: z.number().optional(),
46
52
  lineWidthMinPixels: z.number().optional(),
53
+ lineWidthMaxPixels: z.number().optional(),
47
54
  lineWidthScale: z.number().optional(),
48
55
  lineWidthUnits: z.string().optional(),
49
56
  getRadius: JsonAccessor.optional(),
57
+ getPointRadius: JsonAccessor.optional(),
58
+ getLineWidth: JsonAccessor.optional(),
50
59
  getFillColor: JsonAccessor.optional(),
51
60
  getLineColor: JsonAccessor.optional(),
52
61
  getColor: JsonAccessor.optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"DeckJsonMapSpec.js","sourceRoot":"","sources":["../src/DeckJsonMapSpec.ts"],"names":[],"mappings":"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","sourcesContent":["import {ColorScaleConfig, RGBAColor} from '@sqlrooms/color-scales';\nimport {z} from 'zod';\n\nexport const GeometryEncodingHint = z.enum(['geoarrow', 'wkb', 'wkt']);\nexport type GeometryEncodingHint = z.infer<typeof GeometryEncodingHint>;\n\nexport const ColorScaleFunction = z.intersection(\n z.object({\n '@@function': z.literal('colorScale'),\n }),\n ColorScaleConfig,\n);\nexport type ColorScaleFunction = z.infer<typeof ColorScaleFunction>;\n\nexport const LayerBindingConfig = z.object({\n dataset: z.string().min(1).optional(),\n geometryColumn: z.string().min(1).optional(),\n geometryEncodingHint: GeometryEncodingHint.optional(),\n sourceGeometryColumn: z.string().min(1).optional(),\n targetGeometryColumn: z.string().min(1).optional(),\n timestampColumn: z.string().min(1).optional(),\n hexagonColumn: z.string().min(1).optional(),\n});\nexport type LayerBindingConfig = z.infer<typeof LayerBindingConfig>;\n\nexport const LayerBindingProps = z.object({\n _sqlroomsBinding: LayerBindingConfig.optional(),\n});\nexport type LayerBindingProps = z.infer<typeof LayerBindingProps>;\n\nconst JsonAccessor = z.union([\n z.string(),\n z.number(),\n RGBAColor,\n z.array(z.number()),\n ColorScaleFunction,\n z.record(z.string(), z.unknown()),\n]);\n\n// Keep the layer spec loose for now because `DeckJsonMap` accepts deck.gl JSON as an\n// external spec format, and that surface is much broader than SQLRooms-owned\n// `_sqlroomsBinding` extensions. We validate the binding config fully and a handful of\n// common deck props we know we rely on, while allowing the rest through.\n// TODO(deck-json-schema): Replace this with fuller schemas when deck.gl/json\n// exposes reusable validators or we decide to maintain a broader local schema.\nexport const DeckJsonMapLayerSpec = z.looseObject({\n '@@type': z.string().optional(),\n id: z.string().optional(),\n data: z.unknown().optional(),\n visible: z.boolean().optional(),\n pickable: z.boolean().optional(),\n filled: z.boolean().optional(),\n stroked: z.boolean().optional(),\n extruded: z.boolean().optional(),\n radiusScale: z.number().optional(),\n radiusUnits: z.string().optional(),\n radiusMinPixels: z.number().optional(),\n radiusMaxPixels: z.number().optional(),\n lineWidthMinPixels: z.number().optional(),\n lineWidthScale: z.number().optional(),\n lineWidthUnits: z.string().optional(),\n getRadius: JsonAccessor.optional(),\n getFillColor: JsonAccessor.optional(),\n getLineColor: JsonAccessor.optional(),\n getColor: JsonAccessor.optional(),\n getWeight: JsonAccessor.optional(),\n getWidth: JsonAccessor.optional(),\n getHeight: JsonAccessor.optional(),\n getTilt: JsonAccessor.optional(),\n getElevation: JsonAccessor.optional(),\n getSourceColor: JsonAccessor.optional(),\n getTargetColor: JsonAccessor.optional(),\n getPosition: JsonAccessor.optional(),\n getSourcePosition: JsonAccessor.optional(),\n getTargetPosition: JsonAccessor.optional(),\n getPolygon: JsonAccessor.optional(),\n getPath: JsonAccessor.optional(),\n getHexagon: JsonAccessor.optional(),\n getTimestamps: JsonAccessor.optional(),\n _sqlroomsBinding: LayerBindingConfig.optional(),\n});\nexport type DeckJsonMapLayerSpec = z.infer<typeof DeckJsonMapLayerSpec>;\n\n// Keep the top-level spec loose for the same reason as `DeckJsonMapLayerSpec`: deck.gl\n// JSON supports many runtime-level props, and SQLRooms currently only needs a\n// validated subset plus open-ended compatibility with upstream deck specs.\n// TODO(deck-json-schema): Replace this with fuller schemas when we have a more\n// complete upstream or local model of deck.gl/json top-level props.\nexport const DeckJsonMapSpec = z.looseObject({\n initialViewState: z.record(z.string(), z.unknown()).optional(),\n viewState: z.record(z.string(), z.unknown()).optional(),\n controller: z\n .union([z.boolean(), z.record(z.string(), z.unknown())])\n .optional(),\n layers: z.array(DeckJsonMapLayerSpec).optional(),\n});\nexport type DeckJsonMapSpec = z.infer<typeof DeckJsonMapSpec>;\n"]}
1
+ {"version":3,"file":"DeckJsonMapSpec.js","sourceRoot":"","sources":["../src/DeckJsonMapSpec.ts"],"names":[],"mappings":"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","sourcesContent":["import {ColorScaleConfig, RGBAColor} from '@sqlrooms/color-scales';\nimport {z} from 'zod';\n\nexport const GeometryEncodingHint = z.enum(['geoarrow', 'wkb', 'wkt']);\nexport type GeometryEncodingHint = z.infer<typeof GeometryEncodingHint>;\n\nexport const ColorScaleFunction = z.intersection(\n z.object({\n '@@function': z.literal('colorScale'),\n /** Per-accessor opacity 0–1. */\n opacity: z.number().min(0).max(1).optional(),\n }),\n ColorScaleConfig,\n);\nexport type ColorScaleFunction = z.infer<typeof ColorScaleFunction>;\n\nexport const LayerBindingConfig = z.object({\n dataset: z.string().min(1).optional(),\n geometryColumn: z.string().min(1).optional(),\n geometryEncodingHint: GeometryEncodingHint.optional(),\n sourceGeometryColumn: z.string().min(1).optional(),\n targetGeometryColumn: z.string().min(1).optional(),\n timestampColumn: z.string().min(1).optional(),\n hexagonColumn: z.string().min(1).optional(),\n});\nexport type LayerBindingConfig = z.infer<typeof LayerBindingConfig>;\n\nexport const LayerBindingProps = z.object({\n _sqlroomsBinding: LayerBindingConfig.optional(),\n});\nexport type LayerBindingProps = z.infer<typeof LayerBindingProps>;\n\nconst JsonAccessor = z.union([\n z.string(),\n z.number(),\n RGBAColor,\n z.array(z.number()),\n ColorScaleFunction,\n z.record(z.string(), z.unknown()),\n]);\n\n// Keep the layer spec loose for now because `DeckJsonMap` accepts deck.gl JSON as an\n// external spec format, and that surface is much broader than SQLRooms-owned\n// `_sqlroomsBinding` extensions. We validate the binding config fully and a handful of\n// common deck props we know we rely on, while allowing the rest through.\n// TODO(deck-json-schema): Replace this with fuller schemas when deck.gl/json\n// exposes reusable validators or we decide to maintain a broader local schema.\nexport const DeckJsonMapLayerSpec = z.looseObject({\n '@@type': z.string().optional(),\n id: z.string().optional(),\n data: z.unknown().optional(),\n visible: z.boolean().optional(),\n pickable: z.boolean().optional(),\n filled: z.boolean().optional(),\n stroked: z.boolean().optional(),\n extruded: z.boolean().optional(),\n radiusScale: z.number().optional(),\n radiusUnits: z.string().optional(),\n radiusMinPixels: z.number().optional(),\n radiusMaxPixels: z.number().optional(),\n pointRadiusScale: z.number().optional(),\n pointRadiusUnits: z.string().optional(),\n pointRadiusMinPixels: z.number().optional(),\n pointRadiusMaxPixels: z.number().optional(),\n lineWidthMinPixels: z.number().optional(),\n lineWidthMaxPixels: z.number().optional(),\n lineWidthScale: z.number().optional(),\n lineWidthUnits: z.string().optional(),\n getRadius: JsonAccessor.optional(),\n getPointRadius: JsonAccessor.optional(),\n getLineWidth: JsonAccessor.optional(),\n getFillColor: JsonAccessor.optional(),\n getLineColor: JsonAccessor.optional(),\n getColor: JsonAccessor.optional(),\n getWeight: JsonAccessor.optional(),\n getWidth: JsonAccessor.optional(),\n getHeight: JsonAccessor.optional(),\n getTilt: JsonAccessor.optional(),\n getElevation: JsonAccessor.optional(),\n getSourceColor: JsonAccessor.optional(),\n getTargetColor: JsonAccessor.optional(),\n getPosition: JsonAccessor.optional(),\n getSourcePosition: JsonAccessor.optional(),\n getTargetPosition: JsonAccessor.optional(),\n getPolygon: JsonAccessor.optional(),\n getPath: JsonAccessor.optional(),\n getHexagon: JsonAccessor.optional(),\n getTimestamps: JsonAccessor.optional(),\n _sqlroomsBinding: LayerBindingConfig.optional(),\n});\nexport type DeckJsonMapLayerSpec = z.infer<typeof DeckJsonMapLayerSpec>;\n\n// Keep the top-level spec loose for the same reason as `DeckJsonMapLayerSpec`: deck.gl\n// JSON supports many runtime-level props, and SQLRooms currently only needs a\n// validated subset plus open-ended compatibility with upstream deck specs.\n// TODO(deck-json-schema): Replace this with fuller schemas when we have a more\n// complete upstream or local model of deck.gl/json top-level props.\nexport const DeckJsonMapSpec = z.looseObject({\n initialViewState: z.record(z.string(), z.unknown()).optional(),\n viewState: z.record(z.string(), z.unknown()).optional(),\n controller: z\n .union([z.boolean(), z.record(z.string(), z.unknown())])\n .optional(),\n layers: z.array(DeckJsonMapLayerSpec).optional(),\n});\nexport type DeckJsonMapSpec = z.infer<typeof DeckJsonMapSpec>;\n"]}
@@ -14,10 +14,9 @@ export declare const DeckMapDefaultStylesProvider: FC<PropsWithChildren<{
14
14
  }>>;
15
15
  /** Returns theme-aware host map defaults from the nearest provider, if any. */
16
16
  export declare function useDeckMapDefaultStyles(): Partial<Record<ResolvedTheme, DeckMapStyle>> | undefined;
17
- /**
18
- * Resolves the effective map style from explicit config, map props, host
19
- * defaults, and finally the package fallback for the active theme.
20
- */
17
+ /** True for `mapbox://` style URLs (MapLibre cannot load them without a token). */
18
+ export declare function isMapboxStyleUrl(style: unknown): boolean;
19
+ /** Resolve map style; skips `mapbox://` so the map can still load. */
21
20
  export declare function resolveDeckMapStyle(options: {
22
21
  mapStyle?: string;
23
22
  mapPropsMapStyle?: MapProps['mapStyle'];
@@ -1 +1 @@
1
- {"version":3,"file":"DeckMapDefaultStylesProvider.d.ts","sourceRoot":"","sources":["../src/DeckMapDefaultStylesProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAGL,KAAK,EAAE,EACP,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAE7D,0EAA0E;AAC1E,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;AAMhF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,EAAE,CAC3C,iBAAiB,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAC,CAAC,CAKlD,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,uBAAuB,6DAEtC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxC,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;IACzC,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CAC/C,GAAG,YAAY,CAOf"}
1
+ {"version":3,"file":"DeckMapDefaultStylesProvider.d.ts","sourceRoot":"","sources":["../src/DeckMapDefaultStylesProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAGL,KAAK,EAAE,EACP,KAAK,iBAAiB,EACvB,MAAM,OAAO,CAAC;AAEf,qEAAqE;AACrE,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AAE7D,0EAA0E;AAC1E,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;AAMhF;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,EAAE,CAC3C,iBAAiB,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAA;CAAC,CAAC,CAKlD,CAAC;AAEF,+EAA+E;AAC/E,wBAAgB,uBAAuB,6DAEtC;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAExD;AASD,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IACxC,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;IACzC,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;CAC/C,GAAG,YAAY,CAOf"}
@@ -10,14 +10,20 @@ export const DeckMapDefaultStylesProvider = ({ styles, children }) => (_jsx(Deck
10
10
  export function useDeckMapDefaultStyles() {
11
11
  return useContext(DeckMapDefaultStylesContext);
12
12
  }
13
- /**
14
- * Resolves the effective map style from explicit config, map props, host
15
- * defaults, and finally the package fallback for the active theme.
16
- */
13
+ /** True for `mapbox://` style URLs (MapLibre cannot load them without a token). */
14
+ export function isMapboxStyleUrl(style) {
15
+ return typeof style === 'string' && /^mapbox:/i.test(style.trim());
16
+ }
17
+ function usableMapStyle(style) {
18
+ if (style == null || isMapboxStyleUrl(style))
19
+ return undefined;
20
+ return style;
21
+ }
22
+ /** Resolve map style; skips `mapbox://` so the map can still load. */
17
23
  export function resolveDeckMapStyle(options) {
18
- return (options.mapStyle ??
19
- options.mapPropsMapStyle ??
20
- options.hostDefaultStyles?.[options.resolvedTheme] ??
24
+ return (usableMapStyle(options.mapStyle) ??
25
+ usableMapStyle(options.mapPropsMapStyle) ??
26
+ usableMapStyle(options.hostDefaultStyles?.[options.resolvedTheme]) ??
21
27
  options.fallbackStyles[options.resolvedTheme]);
22
28
  }
23
29
  //# sourceMappingURL=DeckMapDefaultStylesProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeckMapDefaultStylesProvider.js","sourceRoot":"","sources":["../src/DeckMapDefaultStylesProvider.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,aAAa,EACb,UAAU,GAGX,MAAM,OAAO,CAAC;AAQf,MAAM,2BAA2B,GAAG,aAAa,CAE/C,SAAS,CAAC,CAAC;AAEb;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAErC,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,EAAE,EAAE,CAAC,CAC1B,KAAC,2BAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAChD,QAAQ,GAC4B,CACxC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB;IACrC,OAAO,UAAU,CAAC,2BAA2B,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAMnC;IACC,OAAO,CACL,OAAO,CAAC,QAAQ;QAChB,OAAO,CAAC,gBAAgB;QACxB,OAAO,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;QAClD,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAC9C,CAAC;AACJ,CAAC","sourcesContent":["import type {ResolvedTheme} from '@sqlrooms/ui';\nimport type {MapProps} from 'react-map-gl/maplibre';\nimport {\n createContext,\n useContext,\n type FC,\n type PropsWithChildren,\n} from 'react';\n\n/** A MapLibre-compatible style accepted by the Deck map renderer. */\nexport type DeckMapStyle = NonNullable<MapProps['mapStyle']>;\n\n/** Optional host-provided basemap defaults keyed by resolved UI theme. */\nexport type DeckMapDefaultStyles = Partial<Record<ResolvedTheme, DeckMapStyle>>;\n\nconst DeckMapDefaultStylesContext = createContext<\n DeckMapDefaultStyles | undefined\n>(undefined);\n\n/**\n * Supplies host-owned, theme-aware basemap defaults without persisting them in\n * individual map resources. Explicit map config styles still take precedence.\n */\nexport const DeckMapDefaultStylesProvider: FC<\n PropsWithChildren<{styles: DeckMapDefaultStyles}>\n> = ({styles, children}) => (\n <DeckMapDefaultStylesContext.Provider value={styles}>\n {children}\n </DeckMapDefaultStylesContext.Provider>\n);\n\n/** Returns theme-aware host map defaults from the nearest provider, if any. */\nexport function useDeckMapDefaultStyles() {\n return useContext(DeckMapDefaultStylesContext);\n}\n\n/**\n * Resolves the effective map style from explicit config, map props, host\n * defaults, and finally the package fallback for the active theme.\n */\nexport function resolveDeckMapStyle(options: {\n mapStyle?: string;\n mapPropsMapStyle?: MapProps['mapStyle'];\n hostDefaultStyles?: DeckMapDefaultStyles;\n resolvedTheme: ResolvedTheme;\n fallbackStyles: Record<ResolvedTheme, string>;\n}): DeckMapStyle {\n return (\n options.mapStyle ??\n options.mapPropsMapStyle ??\n options.hostDefaultStyles?.[options.resolvedTheme] ??\n options.fallbackStyles[options.resolvedTheme]\n );\n}\n"]}
1
+ {"version":3,"file":"DeckMapDefaultStylesProvider.js","sourceRoot":"","sources":["../src/DeckMapDefaultStylesProvider.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,aAAa,EACb,UAAU,GAGX,MAAM,OAAO,CAAC;AAQf,MAAM,2BAA2B,GAAG,aAAa,CAE/C,SAAS,CAAC,CAAC;AAEb;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAErC,CAAC,EAAC,MAAM,EAAE,QAAQ,EAAC,EAAE,EAAE,CAAC,CAC1B,KAAC,2BAA2B,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAChD,QAAQ,GAC4B,CACxC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,UAAU,uBAAuB;IACrC,OAAO,UAAU,CAAC,2BAA2B,CAAC,CAAC;AACjD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,cAAc,CACrB,KAAgD;IAEhD,IAAI,KAAK,IAAI,IAAI,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/D,OAAO,KAAqB,CAAC;AAC/B,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,mBAAmB,CAAC,OAMnC;IACC,OAAO,CACL,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;QAChC,cAAc,CAAC,OAAO,CAAC,gBAAgB,CAAC;QACxC,cAAc,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAClE,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,CAC9C,CAAC;AACJ,CAAC","sourcesContent":["import type {ResolvedTheme} from '@sqlrooms/ui';\nimport type {MapProps} from 'react-map-gl/maplibre';\nimport {\n createContext,\n useContext,\n type FC,\n type PropsWithChildren,\n} from 'react';\n\n/** A MapLibre-compatible style accepted by the Deck map renderer. */\nexport type DeckMapStyle = NonNullable<MapProps['mapStyle']>;\n\n/** Optional host-provided basemap defaults keyed by resolved UI theme. */\nexport type DeckMapDefaultStyles = Partial<Record<ResolvedTheme, DeckMapStyle>>;\n\nconst DeckMapDefaultStylesContext = createContext<\n DeckMapDefaultStyles | undefined\n>(undefined);\n\n/**\n * Supplies host-owned, theme-aware basemap defaults without persisting them in\n * individual map resources. Explicit map config styles still take precedence.\n */\nexport const DeckMapDefaultStylesProvider: FC<\n PropsWithChildren<{styles: DeckMapDefaultStyles}>\n> = ({styles, children}) => (\n <DeckMapDefaultStylesContext.Provider value={styles}>\n {children}\n </DeckMapDefaultStylesContext.Provider>\n);\n\n/** Returns theme-aware host map defaults from the nearest provider, if any. */\nexport function useDeckMapDefaultStyles() {\n return useContext(DeckMapDefaultStylesContext);\n}\n\n/** True for `mapbox://` style URLs (MapLibre cannot load them without a token). */\nexport function isMapboxStyleUrl(style: unknown): boolean {\n return typeof style === 'string' && /^mapbox:/i.test(style.trim());\n}\n\nfunction usableMapStyle(\n style: string | MapProps['mapStyle'] | undefined,\n): DeckMapStyle | undefined {\n if (style == null || isMapboxStyleUrl(style)) return undefined;\n return style as DeckMapStyle;\n}\n\n/** Resolve map style; skips `mapbox://` so the map can still load. */\nexport function resolveDeckMapStyle(options: {\n mapStyle?: string;\n mapPropsMapStyle?: MapProps['mapStyle'];\n hostDefaultStyles?: DeckMapDefaultStyles;\n resolvedTheme: ResolvedTheme;\n fallbackStyles: Record<ResolvedTheme, string>;\n}): DeckMapStyle {\n return (\n usableMapStyle(options.mapStyle) ??\n usableMapStyle(options.mapPropsMapStyle) ??\n usableMapStyle(options.hostDefaultStyles?.[options.resolvedTheme]) ??\n options.fallbackStyles[options.resolvedTheme]\n );\n}\n"]}
@@ -3,7 +3,7 @@ import { type ReactNode } from 'react';
3
3
  import type { DeckMapResource, DeckMapRuntimeIssue } from './DeckMapsSlice';
4
4
  import type { DeckDatasetInput } from './types';
5
5
  /**
6
- * Host-neutral data boundary for Deck map resources. Worksheet maps use the
6
+ * Host-neutral data boundary for Deck map resources. Document maps use the
7
7
  * direct adapter below and are intentionally independent: no Mosaic selection
8
8
  * or cross-filter state is read or published.
9
9
  */
@@ -123,7 +123,7 @@ export function DeckMapSurface({ mapId, map, onReportIssue, onClearIssue, fitReq
123
123
  onError: handleFitError,
124
124
  });
125
125
  if (configIssues.length > 0) {
126
- return (_jsx("div", { className: "text-destructive flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm", children: `Invalid map configuration: ${configIssues[0].path}: ${configIssues[0].message}` }));
126
+ return (_jsx("div", { className: "text-destructive flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm", children: `Invalid map configuration: ${configIssues[0].path}: ${configIssues[0].message}. Open map settings to change the layer type or fix the config.` }));
127
127
  }
128
128
  if (Object.keys(datasets).length === 0) {
129
129
  return (_jsx("div", { className: "text-muted-foreground flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm", children: "Select a geospatial table to configure this map." }));
@@ -1 +1 @@
1
- {"version":3,"file":"DeckMapSurface.js","sourceRoot":"","sources":["../src/DeckMapSurface.tsx"],"names":[],"mappings":";AACA,OAAO,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GAET,MAAM,OAAO,CAAC;AACf,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EAAC,kCAAkC,EAAC,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EACL,yBAAyB,EACzB,2BAA2B,GAC5B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAC,oBAAoB,EAAyB,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAC,8BAA8B,EAAC,MAAM,wBAAwB,CAAC;AACtE,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,UAAU,CAAC;AAOlB,SAAS,gBAAgB,CAAC,GAAW,EAAE,OAAe;IACpD,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;IAC3D,OAAO,kBAAkB,SAAS,kBAAkB,OAAO,OAAO,CAAC;AACrE,CAAC;AAED,SAAS,eAAe,CACtB,KAAuB,EACvB,MAAyB;IAEzB,IAAI,MAAM,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,IAAI,UAAU,IAAI,KAAK,EAAE,CAAC;QACxB,OAAO,EAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAC,CAAC;IACzE,CAAC;IACD,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO;YACL,GAAG,KAAK;YACR,YAAY,EAAE,gBAAgB,CAC5B,KAAK,CAAC,YAAY;gBAChB,iBAAiB,kCAAkC,EAAE,EACvD,OAAO,CACR;SACF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAqBD,SAAS,4BAA4B,CACnC,GAAoB,EACpB,UAA8B;IAE9B,MAAM,QAAQ,GAAqC,EAAE,CAAC;IACtD,0EAA0E;IAC1E,0EAA0E;IAC1E,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CACjE,CAAC,OAAO,EAAE,EAAE,CAAC,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CACzD,CAAC,MAAM,CAAC;IACT,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvE,MAAM,EAAC,MAAM,EAAE,GAAG,aAAa,EAAC,GAAG,OAAO,CAAC;QAC3C,IAAI,KAAmC,CAAC;QACxC,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,KAAK,GAAG,EAAC,GAAG,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAC,CAAC;QACxD,CAAC;aAAM,IAAI,2BAA2B,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,KAAK,GAAG;gBACN,GAAG,aAAa;gBAChB,SAAS,EACP,iBAAiB,KAAK,CAAC;oBACrB,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC,SAAS,CAAC;oBACzC,CAAC,CAAC,MAAM,CAAC,SAAS;gBACtB,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,CAAC,SAAS,CAAC,GAAG,UAAU;gBAC9B,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,UAAU,CAAC;gBACpC,CAAC,CAAC,KAAK,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAuB;IAC1D,eAAe,EAAE,CAAC,EAAC,GAAG,EAAC,EAAE,EAAE,CACzB,4BAA4B,CAAC,GAAG,EAAE,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrE,iBAAiB,EAAE,CAAC,EAAC,GAAG,EAAE,SAAS,EAAC,EAAE,EAAE,CACtC,4BAA4B,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;CAC/C,CAAC;AAiBF,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,GAAG,EACH,aAAa,EACb,YAAY,EACZ,iBAAiB,GAAG,CAAC,EACrB,WAAW,GAAG,wBAAwB,GAClB;IACpB,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;IACxE,MAAM,UAAU,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,OAAO,CACtB,GAAG,EAAE,CAAC,WAAW,CAAC,eAAe,CAAC,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,EAC/C,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,CAAC,CAC1B,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CAAC,8BAA8B,CAAC,GAAG,CAAC,MAAM,EAAE,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,EACpE,CAAC,GAAG,CAAC,MAAM,CAAC,CACb,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,aAAa,CAAC;gBACZ,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAE,CAAC,OAAO,EAAE;gBAChE,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE,EAAC,MAAM,EAAE,YAAY,EAAC;aAChC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,cAAc,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAChD,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,MAAgD,EAAE,EAAE;QACnD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACxC,CACE,KAAK,EAC0D,EAAE,CACjE,KAAK,CAAC,MAAM,KAAK,OAAO,CAC3B,CAAC;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,aAAa,CAAC;gBACZ,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO;gBAC9B,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC;aAAM,IACL,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,EAChE,CAAC;YACD,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,EACD,CAAC,YAAY,EAAE,aAAa,CAAC,CAC9B,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpE,YAAY,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,MAAM,CAAC,EACzC,CAAC,GAAG,CAAC,MAAM,CAAC,CACb,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,UAAU,GACd,WAAW,CAAC,iBAAiB,EAAE,CAAC;YAC9B,KAAK;YACL,GAAG;YACH,SAAS,EAAE,SAAS,CAAC,OAAO;SAC7B,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,KAAY,EAAE,EAAE,CACf,aAAa,CAAC;QACZ,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,IAAI;KAClB,CAAC,EACJ,CAAC,aAAa,CAAC,CAChB,CAAC;IACF,MAAM,gBAAgB,GAAG,WAAW,CAClC,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,EAC/B,CAAC,YAAY,CAAC,CACf,CAAC;IACF,uBAAuB,CAAC;QACtB,OAAO,EAAE,KAAK;QACd,SAAS;QACT,MAAM,EAAE,SAAS;QACjB,SAAS;QACT,UAAU;QACV,cAAc,EAAE,iBAAiB;QACjC,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,gBAAgB;QAC3B,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CACL,cAAK,SAAS,EAAC,gGAAgG,YAC5G,8BAA8B,YAAY,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAE,CAAC,OAAO,EAAE,GAC/E,CACP,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,CACL,cAAK,SAAS,EAAC,qGAAqG,iEAE9G,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,cAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAC,sBAAsB,YACtD,KAAC,WAAW,IACV,GAAG,EAAE,UAAU,EACf,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,EACrB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,EAC7B,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EACnC,SAAS,EAAC,sBAAsB,EAChC,qBAAqB,EAAE,mBAAmB,EAC1C,gBAAgB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC1B,aAAa,CAAC;gBACZ,IAAI,EAAE,cAAc;gBACpB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW,EAAE,IAAI;aAClB,CAAC,GAEJ,GACE,CACP,CAAC;AACJ,CAAC","sourcesContent":["import type {DataTable} from '@sqlrooms/duckdb';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport {DeckJsonMap} from './DeckJsonMap';\nimport type {DeckMapResource, DeckMapRuntimeIssue} from './DeckMapsSlice';\nimport {DECK_TABLE_DATASET_SOURCE_RELATION} from './datasets/tableDatasetSql';\nimport {\n isDeckMapSqlDatasetSource,\n isDeckMapTableDatasetSource,\n} from './mapConfig';\nimport {getDeckMapDataPolicy, type DeckMapDataPolicy} from './mapDataPolicy';\nimport {getDeckMapResourceConfigIssues} from './mapResourceAuthoring';\nimport {\n getDeckMapDatasetSource,\n resolveDeckMapFitToData,\n useDeckMapFitController,\n} from './mapFit';\nimport type {\n DeckDatasetInput,\n DeckJsonMapHandle,\n PreparedDeckDatasetState,\n} from './types';\n\nfunction sampleDatasetSql(sql: string, maxRows: number) {\n const sourceSql = sql.trim().replace(/(?:\\s*;+\\s*)+$/, '');\n return `SELECT * FROM (${sourceSql}) USING SAMPLE ${maxRows} ROWS`;\n}\n\nfunction applyDataPolicy(\n input: DeckDatasetInput,\n policy: DeckMapDataPolicy,\n): DeckDatasetInput {\n if (policy.disabled) return input;\n const maxRows = Math.max(1, Math.floor(policy.maxRows));\n if ('sqlQuery' in input) {\n return {...input, sqlQuery: sampleDatasetSql(input.sqlQuery, maxRows)};\n }\n if ('tableName' in input) {\n return {\n ...input,\n transformSql: sampleDatasetSql(\n input.transformSql ??\n `SELECT * FROM ${DECK_TABLE_DATASET_SOURCE_RELATION}`,\n maxRows,\n ),\n };\n }\n return input;\n}\n\n/**\n * Host-neutral data boundary for Deck map resources. Worksheet maps use the\n * direct adapter below and are intentionally independent: no Mosaic selection\n * or cross-filter state is read or published.\n */\nexport type DeckMapDataAdapter = {\n resolveDatasets: (options: {\n mapId: string;\n map: DeckMapResource;\n }) => Record<string, DeckDatasetInput>;\n /** Resolves an unsampled dataset input for fit-to-data bounds queries. */\n resolveFitDataset?: (options: {\n mapId: string;\n map: DeckMapResource;\n datasetId: string;\n }) => DeckDatasetInput | undefined;\n getTableColumns?: (tableName: string) => DataTable['columns'] | undefined;\n};\n\nfunction resolveDirectDeckMapDatasets(\n map: DeckMapResource,\n dataPolicy?: DeckMapDataPolicy,\n) {\n const resolved: Record<string, DeckDatasetInput> = {};\n // A top-level selected table is only an unambiguous override when the map\n // has one table-backed dataset. Multi-source maps retain authored tables.\n const tableDatasetCount = Object.values(map.config.datasets).filter(\n (dataset) => isDeckMapTableDatasetSource(dataset.source),\n ).length;\n for (const [datasetId, dataset] of Object.entries(map.config.datasets)) {\n const {source, ...datasetConfig} = dataset;\n let input: DeckDatasetInput | undefined;\n if (isDeckMapSqlDatasetSource(source)) {\n input = {...datasetConfig, sqlQuery: source.sqlQuery};\n } else if (isDeckMapTableDatasetSource(source)) {\n input = {\n ...datasetConfig,\n tableName:\n tableDatasetCount === 1\n ? (map.selectedTable ?? source.tableName)\n : source.tableName,\n transformSql: source.transformSql,\n };\n }\n if (input) {\n resolved[datasetId] = dataPolicy\n ? applyDataPolicy(input, dataPolicy)\n : input;\n }\n }\n return resolved;\n}\n\nexport const directDeckMapDataAdapter: DeckMapDataAdapter = {\n resolveDatasets: ({map}) =>\n resolveDirectDeckMapDatasets(map, getDeckMapDataPolicy(map.config)),\n resolveFitDataset: ({map, datasetId}) =>\n resolveDirectDeckMapDatasets(map)[datasetId],\n};\n\nexport type DeckMapSurfaceProps = {\n mapId: string;\n map: DeckMapResource;\n readOnly?: boolean;\n selected?: boolean;\n caption?: string;\n headerActions?: ReactNode;\n fitRequestVersion?: number;\n onUpdateMap: (patch: Partial<DeckMapResource>) => void;\n onReportIssue: (issue: Omit<DeckMapRuntimeIssue, 'mapId'>) => void;\n /** Clears the current issue when its kind matches, or all issues when omitted. */\n onClearIssue: (kind?: DeckMapRuntimeIssue['kind']) => void;\n dataAdapter?: DeckMapDataAdapter;\n};\n\nexport function DeckMapSurface({\n mapId,\n map,\n onReportIssue,\n onClearIssue,\n fitRequestVersion = 0,\n dataAdapter = directDeckMapDataAdapter,\n}: DeckMapSurfaceProps) {\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const deckMapRef = useRef<DeckJsonMapHandle>(null);\n const datasets = useMemo(\n () => dataAdapter.resolveDatasets({mapId, map}),\n [dataAdapter, map, mapId],\n );\n const configIssues = useMemo(\n () => getDeckMapResourceConfigIssues(map.config, {allowEmpty: true}),\n [map.config],\n );\n useEffect(() => {\n if (configIssues.length > 0) {\n onReportIssue({\n kind: 'config-error',\n message: `${configIssues[0]!.path}: ${configIssues[0]!.message}`,\n recoverable: true,\n details: {issues: configIssues},\n });\n } else {\n onClearIssue('config-error');\n }\n }, [configIssues, onClearIssue, onReportIssue]);\n const handleDatasetStates = useCallback(\n (states: Record<string, PreparedDeckDatasetState>) => {\n const failure = Object.values(states).find(\n (\n state,\n ): state is Extract<PreparedDeckDatasetState, {status: 'error'}> =>\n state.status === 'error',\n );\n if (failure) {\n onReportIssue({\n kind: 'sql-error',\n message: failure.error.message,\n recoverable: true,\n });\n } else if (\n Object.values(states).every((state) => state.status === 'ready')\n ) {\n onClearIssue('sql-error');\n }\n },\n [onClearIssue, onReportIssue],\n );\n useEffect(() => {\n if (configIssues.length === 0 && Object.keys(datasets).length === 0) {\n onClearIssue();\n }\n }, [configIssues, datasets, onClearIssue]);\n const fitToData = useMemo(\n () => resolveDeckMapFitToData(map.config),\n [map.config],\n );\n const fitSource = useMemo(() => {\n if (!fitToData) return null;\n const fitDataset =\n dataAdapter.resolveFitDataset?.({\n mapId,\n map,\n datasetId: fitToData.dataset,\n }) ?? datasets[fitToData.dataset];\n return getDeckMapDatasetSource(fitDataset);\n }, [dataAdapter, datasets, fitToData, map, mapId]);\n const handleFitError = useCallback(\n (error: Error) =>\n onReportIssue({\n kind: 'fit-error',\n message: error.message,\n recoverable: true,\n }),\n [onReportIssue],\n );\n const handleFitSuccess = useCallback(\n () => onClearIssue('fit-error'),\n [onClearIssue],\n );\n useDeckMapFitController({\n scopeId: mapId,\n fitToData,\n source: fitSource,\n container,\n deckMapRef,\n requestVersion: fitRequestVersion,\n autoFit: true,\n onSuccess: handleFitSuccess,\n onError: handleFitError,\n });\n\n if (configIssues.length > 0) {\n return (\n <div className=\"text-destructive flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm\">\n {`Invalid map configuration: ${configIssues[0]!.path}: ${configIssues[0]!.message}`}\n </div>\n );\n }\n if (Object.keys(datasets).length === 0) {\n return (\n <div className=\"text-muted-foreground flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm\">\n Select a geospatial table to configure this map.\n </div>\n );\n }\n return (\n <div ref={setContainer} className=\"h-full min-h-[320px]\">\n <DeckJsonMap\n ref={deckMapRef}\n spec={map.config.spec}\n datasets={datasets}\n mapStyle={map.config.mapStyle}\n mapProps={map.config.mapProps}\n showLegends={map.config.showLegends}\n className=\"h-full min-h-[320px]\"\n onDatasetStatesChange={handleDatasetStates}\n onRenderingError={(error) =>\n onReportIssue({\n kind: 'render-error',\n message: error.message,\n recoverable: true,\n })\n }\n />\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"DeckMapSurface.js","sourceRoot":"","sources":["../src/DeckMapSurface.tsx"],"names":[],"mappings":"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","sourcesContent":["import type {DataTable} from '@sqlrooms/duckdb';\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from 'react';\nimport {DeckJsonMap} from './DeckJsonMap';\nimport type {DeckMapResource, DeckMapRuntimeIssue} from './DeckMapsSlice';\nimport {DECK_TABLE_DATASET_SOURCE_RELATION} from './datasets/tableDatasetSql';\nimport {\n isDeckMapSqlDatasetSource,\n isDeckMapTableDatasetSource,\n} from './mapConfig';\nimport {getDeckMapDataPolicy, type DeckMapDataPolicy} from './mapDataPolicy';\nimport {getDeckMapResourceConfigIssues} from './mapResourceAuthoring';\nimport {\n getDeckMapDatasetSource,\n resolveDeckMapFitToData,\n useDeckMapFitController,\n} from './mapFit';\nimport type {\n DeckDatasetInput,\n DeckJsonMapHandle,\n PreparedDeckDatasetState,\n} from './types';\n\nfunction sampleDatasetSql(sql: string, maxRows: number) {\n const sourceSql = sql.trim().replace(/(?:\\s*;+\\s*)+$/, '');\n return `SELECT * FROM (${sourceSql}) USING SAMPLE ${maxRows} ROWS`;\n}\n\nfunction applyDataPolicy(\n input: DeckDatasetInput,\n policy: DeckMapDataPolicy,\n): DeckDatasetInput {\n if (policy.disabled) return input;\n const maxRows = Math.max(1, Math.floor(policy.maxRows));\n if ('sqlQuery' in input) {\n return {...input, sqlQuery: sampleDatasetSql(input.sqlQuery, maxRows)};\n }\n if ('tableName' in input) {\n return {\n ...input,\n transformSql: sampleDatasetSql(\n input.transformSql ??\n `SELECT * FROM ${DECK_TABLE_DATASET_SOURCE_RELATION}`,\n maxRows,\n ),\n };\n }\n return input;\n}\n\n/**\n * Host-neutral data boundary for Deck map resources. Document maps use the\n * direct adapter below and are intentionally independent: no Mosaic selection\n * or cross-filter state is read or published.\n */\nexport type DeckMapDataAdapter = {\n resolveDatasets: (options: {\n mapId: string;\n map: DeckMapResource;\n }) => Record<string, DeckDatasetInput>;\n /** Resolves an unsampled dataset input for fit-to-data bounds queries. */\n resolveFitDataset?: (options: {\n mapId: string;\n map: DeckMapResource;\n datasetId: string;\n }) => DeckDatasetInput | undefined;\n getTableColumns?: (tableName: string) => DataTable['columns'] | undefined;\n};\n\nfunction resolveDirectDeckMapDatasets(\n map: DeckMapResource,\n dataPolicy?: DeckMapDataPolicy,\n) {\n const resolved: Record<string, DeckDatasetInput> = {};\n // A top-level selected table is only an unambiguous override when the map\n // has one table-backed dataset. Multi-source maps retain authored tables.\n const tableDatasetCount = Object.values(map.config.datasets).filter(\n (dataset) => isDeckMapTableDatasetSource(dataset.source),\n ).length;\n for (const [datasetId, dataset] of Object.entries(map.config.datasets)) {\n const {source, ...datasetConfig} = dataset;\n let input: DeckDatasetInput | undefined;\n if (isDeckMapSqlDatasetSource(source)) {\n input = {...datasetConfig, sqlQuery: source.sqlQuery};\n } else if (isDeckMapTableDatasetSource(source)) {\n input = {\n ...datasetConfig,\n tableName:\n tableDatasetCount === 1\n ? (map.selectedTable ?? source.tableName)\n : source.tableName,\n transformSql: source.transformSql,\n };\n }\n if (input) {\n resolved[datasetId] = dataPolicy\n ? applyDataPolicy(input, dataPolicy)\n : input;\n }\n }\n return resolved;\n}\n\nexport const directDeckMapDataAdapter: DeckMapDataAdapter = {\n resolveDatasets: ({map}) =>\n resolveDirectDeckMapDatasets(map, getDeckMapDataPolicy(map.config)),\n resolveFitDataset: ({map, datasetId}) =>\n resolveDirectDeckMapDatasets(map)[datasetId],\n};\n\nexport type DeckMapSurfaceProps = {\n mapId: string;\n map: DeckMapResource;\n readOnly?: boolean;\n selected?: boolean;\n caption?: string;\n headerActions?: ReactNode;\n fitRequestVersion?: number;\n onUpdateMap: (patch: Partial<DeckMapResource>) => void;\n onReportIssue: (issue: Omit<DeckMapRuntimeIssue, 'mapId'>) => void;\n /** Clears the current issue when its kind matches, or all issues when omitted. */\n onClearIssue: (kind?: DeckMapRuntimeIssue['kind']) => void;\n dataAdapter?: DeckMapDataAdapter;\n};\n\nexport function DeckMapSurface({\n mapId,\n map,\n onReportIssue,\n onClearIssue,\n fitRequestVersion = 0,\n dataAdapter = directDeckMapDataAdapter,\n}: DeckMapSurfaceProps) {\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const deckMapRef = useRef<DeckJsonMapHandle>(null);\n const datasets = useMemo(\n () => dataAdapter.resolveDatasets({mapId, map}),\n [dataAdapter, map, mapId],\n );\n const configIssues = useMemo(\n () => getDeckMapResourceConfigIssues(map.config, {allowEmpty: true}),\n [map.config],\n );\n useEffect(() => {\n if (configIssues.length > 0) {\n onReportIssue({\n kind: 'config-error',\n message: `${configIssues[0]!.path}: ${configIssues[0]!.message}`,\n recoverable: true,\n details: {issues: configIssues},\n });\n } else {\n onClearIssue('config-error');\n }\n }, [configIssues, onClearIssue, onReportIssue]);\n const handleDatasetStates = useCallback(\n (states: Record<string, PreparedDeckDatasetState>) => {\n const failure = Object.values(states).find(\n (\n state,\n ): state is Extract<PreparedDeckDatasetState, {status: 'error'}> =>\n state.status === 'error',\n );\n if (failure) {\n onReportIssue({\n kind: 'sql-error',\n message: failure.error.message,\n recoverable: true,\n });\n } else if (\n Object.values(states).every((state) => state.status === 'ready')\n ) {\n onClearIssue('sql-error');\n }\n },\n [onClearIssue, onReportIssue],\n );\n useEffect(() => {\n if (configIssues.length === 0 && Object.keys(datasets).length === 0) {\n onClearIssue();\n }\n }, [configIssues, datasets, onClearIssue]);\n const fitToData = useMemo(\n () => resolveDeckMapFitToData(map.config),\n [map.config],\n );\n const fitSource = useMemo(() => {\n if (!fitToData) return null;\n const fitDataset =\n dataAdapter.resolveFitDataset?.({\n mapId,\n map,\n datasetId: fitToData.dataset,\n }) ?? datasets[fitToData.dataset];\n return getDeckMapDatasetSource(fitDataset);\n }, [dataAdapter, datasets, fitToData, map, mapId]);\n const handleFitError = useCallback(\n (error: Error) =>\n onReportIssue({\n kind: 'fit-error',\n message: error.message,\n recoverable: true,\n }),\n [onReportIssue],\n );\n const handleFitSuccess = useCallback(\n () => onClearIssue('fit-error'),\n [onClearIssue],\n );\n useDeckMapFitController({\n scopeId: mapId,\n fitToData,\n source: fitSource,\n container,\n deckMapRef,\n requestVersion: fitRequestVersion,\n autoFit: true,\n onSuccess: handleFitSuccess,\n onError: handleFitError,\n });\n\n if (configIssues.length > 0) {\n return (\n <div className=\"text-destructive flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm\">\n {`Invalid map configuration: ${configIssues[0]!.path}: ${configIssues[0]!.message}. Open map settings to change the layer type or fix the config.`}\n </div>\n );\n }\n if (Object.keys(datasets).length === 0) {\n return (\n <div className=\"text-muted-foreground flex h-full min-h-[320px] items-center justify-center p-4 text-center text-sm\">\n Select a geospatial table to configure this map.\n </div>\n );\n }\n return (\n <div ref={setContainer} className=\"h-full min-h-[320px]\">\n <DeckJsonMap\n ref={deckMapRef}\n spec={map.config.spec}\n datasets={datasets}\n mapStyle={map.config.mapStyle}\n mapProps={map.config.mapProps}\n showLegends={map.config.showLegends}\n className=\"h-full min-h-[320px]\"\n onDatasetStatesChange={handleDatasetStates}\n onRenderingError={(error) =>\n onReportIssue({\n kind: 'render-error',\n message: error.message,\n recoverable: true,\n })\n }\n />\n </div>\n );\n}\n"]}
@@ -1,6 +1,12 @@
1
1
  import { FC } from 'react';
2
2
  import { type DataTable } from '@sqlrooms/duckdb';
3
+ import type { ColorScaleConfig } from '@sqlrooms/color-scales';
3
4
  import { type DeckMapConfig } from './mapConfig';
5
+ /** Pick field first, then coerce scale type to match that field. */
6
+ export declare function resolveColorScaleFieldAndType(columns: DataTable['columns'], preferredType: ColorScaleConfig['type'], preferredField?: string): {
7
+ field: string;
8
+ type: ColorScaleConfig['type'];
9
+ } | undefined;
4
10
  export interface DeckMapSettingsPanelProps {
5
11
  title: string;
6
12
  selectedTable?: string;
@@ -11,6 +17,14 @@ export interface DeckMapSettingsPanelProps {
11
17
  onTitleChange: (title: string) => void;
12
18
  onConfigChange: (config: DeckMapConfig) => void;
13
19
  readOnly?: boolean;
20
+ /** Custom maps stay on the JSON editor so basic controls cannot clobber them. */
21
+ customConfig?: boolean;
22
+ /**
23
+ * Document maps own their dataset in `config.datasets`. Prefer that table
24
+ * over `selectedTable`, which is only a sidecar. Dashboards leave this false
25
+ * so the shared dashboard selected table is shown.
26
+ */
27
+ preferDatasetSource?: boolean;
14
28
  }
15
29
  export declare const DeckMapSettingsPanel: FC<DeckMapSettingsPanelProps>;
16
30
  //# sourceMappingURL=MapSettings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MapSettings.d.ts","sourceRoot":"","sources":["../src/MapSettings.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,EAAE,EAAiC,MAAM,OAAO,CAAC;AACzD,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAqB1B,OAAO,EAA8B,KAAK,aAAa,EAAC,MAAM,aAAa,CAAC;AAoF5E,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC1C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAeD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CAs5B9D,CAAC"}
1
+ {"version":3,"file":"MapSettings.d.ts","sourceRoot":"","sources":["../src/MapSettings.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,EAAE,EAQH,MAAM,OAAO,CAAC;AACf,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAW1B,OAAO,KAAK,EAAC,gBAAgB,EAAmB,MAAM,wBAAwB,CAAC;AAqB/E,OAAO,EAA8B,KAAK,aAAa,EAAC,MAAM,aAAa,CAAC;AAmG5E,oEAAoE;AACpE,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,EAC7B,aAAa,EAAE,gBAAgB,CAAC,MAAM,CAAC,EACvC,cAAc,CAAC,EAAE,MAAM,GACtB;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAA;CAAC,GAAG,SAAS,CAW7D;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAC1C,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,cAAc,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AA80BD,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,yBAAyB,CAq+B9D,CAAC"}