@genome-spy/core 0.78.0 → 0.79.1

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 (292) hide show
  1. package/dist/bundle/{browser-KWU9rWZT.js → browser-CETrb2cm.js} +53 -33
  2. package/dist/bundle/esm-BdLYkz-m.js +248 -0
  3. package/dist/bundle/esm-BwiDsqSb.js +1367 -0
  4. package/dist/bundle/esm-CDFd1cjk.js +441 -0
  5. package/dist/bundle/{esm-DVOHLB1e.js → esm-CTUHLDbv.js} +30 -30
  6. package/dist/bundle/{esm-NIYEaYkc.js → esm-Cx-EbkOj.js} +13 -13
  7. package/dist/bundle/esm-DlYGqi79.js +128 -0
  8. package/dist/bundle/{esm-BygJiwh0.js → esm-k9p3oHkt.js} +133 -158
  9. package/dist/bundle/{esm-CT3ygiMq.js → esm-zAZJQO6D.js} +226 -212
  10. package/dist/bundle/index.es.js +14879 -11656
  11. package/dist/bundle/index.js +119 -108
  12. package/dist/bundle/{parquetRead-DG_-F5j5.js → parquetRead-Cad1SOVV.js} +473 -399
  13. package/dist/schema.json +18940 -6914
  14. package/dist/src/config/axisConfig.d.ts +2 -2
  15. package/dist/src/config/axisConfig.d.ts.map +1 -1
  16. package/dist/src/config/axisConfig.js +28 -44
  17. package/dist/src/config/configLayers.d.ts +45 -0
  18. package/dist/src/config/configLayers.d.ts.map +1 -0
  19. package/dist/src/config/configLayers.js +110 -0
  20. package/dist/src/config/defaultConfig.d.ts.map +1 -1
  21. package/dist/src/config/defaultConfig.js +8 -1
  22. package/dist/src/config/defaults/legendDefaults.d.ts +14 -0
  23. package/dist/src/config/defaults/legendDefaults.d.ts.map +1 -0
  24. package/dist/src/config/defaults/legendDefaults.js +46 -0
  25. package/dist/src/config/defaults/titleDefaults.d.ts.map +1 -1
  26. package/dist/src/config/defaults/titleDefaults.js +26 -18
  27. package/dist/src/config/legendConfig.d.ts +11 -0
  28. package/dist/src/config/legendConfig.d.ts.map +1 -0
  29. package/dist/src/config/legendConfig.js +63 -0
  30. package/dist/src/config/styleUtils.d.ts +8 -2
  31. package/dist/src/config/styleUtils.d.ts.map +1 -1
  32. package/dist/src/config/styleUtils.js +25 -1
  33. package/dist/src/config/themes.d.ts.map +1 -1
  34. package/dist/src/config/themes.js +21 -2
  35. package/dist/src/config/titleConfig.d.ts.map +1 -1
  36. package/dist/src/config/titleConfig.js +2 -18
  37. package/dist/src/data/collector.d.ts.map +1 -1
  38. package/dist/src/data/collector.js +40 -18
  39. package/dist/src/data/flowInit.d.ts +6 -0
  40. package/dist/src/data/flowInit.d.ts.map +1 -1
  41. package/dist/src/data/flowInit.js +1 -1
  42. package/dist/src/data/flowNode.d.ts +32 -0
  43. package/dist/src/data/flowNode.d.ts.map +1 -1
  44. package/dist/src/data/flowNode.js +59 -0
  45. package/dist/src/data/sources/lazy/bamSource.d.ts +0 -1
  46. package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
  47. package/dist/src/data/sources/lazy/bamSource.js +39 -30
  48. package/dist/src/data/sources/lazy/bigBedSource.d.ts +0 -10
  49. package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
  50. package/dist/src/data/sources/lazy/bigBedSource.js +127 -62
  51. package/dist/src/data/sources/lazy/bigWigSource.d.ts +2 -2
  52. package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
  53. package/dist/src/data/sources/lazy/bigWigSource.js +234 -81
  54. package/dist/src/data/sources/lazy/gff3Source.d.ts +7 -3
  55. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  56. package/dist/src/data/sources/lazy/gff3Source.js +7 -8
  57. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts +1 -1
  58. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  59. package/dist/src/data/sources/lazy/indexedFastaSource.js +28 -19
  60. package/dist/src/data/sources/lazy/legendEntriesSource.d.ts +24 -0
  61. package/dist/src/data/sources/lazy/legendEntriesSource.d.ts.map +1 -0
  62. package/dist/src/data/sources/lazy/legendEntriesSource.js +218 -0
  63. package/dist/src/data/sources/lazy/legendGradientSource.d.ts +30 -0
  64. package/dist/src/data/sources/lazy/legendGradientSource.d.ts.map +1 -0
  65. package/dist/src/data/sources/lazy/legendGradientSource.js +388 -0
  66. package/dist/src/data/sources/lazy/mockLazySource.d.ts +4 -1
  67. package/dist/src/data/sources/lazy/mockLazySource.d.ts.map +1 -1
  68. package/dist/src/data/sources/lazy/mockLazySource.js +49 -4
  69. package/dist/src/data/sources/lazy/registerCoreLazySources.js +2 -0
  70. package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
  71. package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +3 -4
  72. package/dist/src/data/sources/lazy/tabixSource.d.ts +9 -4
  73. package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -1
  74. package/dist/src/data/sources/lazy/tabixSource.js +201 -70
  75. package/dist/src/data/sources/lazy/tabixTsvSource.d.ts +2 -3
  76. package/dist/src/data/sources/lazy/tabixTsvSource.d.ts.map +1 -1
  77. package/dist/src/data/sources/lazy/tabixTsvSource.js +14 -12
  78. package/dist/src/data/sources/lazy/vcfSource.d.ts +7 -3
  79. package/dist/src/data/sources/lazy/vcfSource.d.ts.map +1 -1
  80. package/dist/src/data/sources/lazy/vcfSource.js +7 -8
  81. package/dist/src/data/sources/urlDescriptor.d.ts +165 -0
  82. package/dist/src/data/sources/urlDescriptor.d.ts.map +1 -0
  83. package/dist/src/data/sources/urlDescriptor.js +473 -0
  84. package/dist/src/data/sources/urlDescriptorController.d.ts +25 -0
  85. package/dist/src/data/sources/urlDescriptorController.d.ts.map +1 -0
  86. package/dist/src/data/sources/urlDescriptorController.js +72 -0
  87. package/dist/src/data/sources/urlDescriptorState.d.ts +47 -0
  88. package/dist/src/data/sources/urlDescriptorState.d.ts.map +1 -0
  89. package/dist/src/data/sources/urlDescriptorState.js +129 -0
  90. package/dist/src/data/sources/urlSource.d.ts.map +1 -1
  91. package/dist/src/data/sources/urlSource.js +101 -61
  92. package/dist/src/data/transforms/packLegendLabels.d.ts +21 -0
  93. package/dist/src/data/transforms/packLegendLabels.d.ts.map +1 -0
  94. package/dist/src/data/transforms/packLegendLabels.js +189 -0
  95. package/dist/src/data/transforms/transformFactory.d.ts.map +1 -1
  96. package/dist/src/data/transforms/transformFactory.js +4 -0
  97. package/dist/src/data/transforms/truncateText.d.ts +27 -0
  98. package/dist/src/data/transforms/truncateText.d.ts.map +1 -0
  99. package/dist/src/data/transforms/truncateText.js +94 -0
  100. package/dist/src/debug/dataflowDebugSnapshot.d.ts +58 -0
  101. package/dist/src/debug/dataflowDebugSnapshot.d.ts.map +1 -0
  102. package/dist/src/debug/dataflowDebugSnapshot.js +159 -0
  103. package/dist/src/debug/markDebugSnapshot.d.ts +54 -0
  104. package/dist/src/debug/markDebugSnapshot.d.ts.map +1 -0
  105. package/dist/src/debug/markDebugSnapshot.js +100 -0
  106. package/dist/src/debug/paramDebugSnapshot.d.ts +53 -0
  107. package/dist/src/debug/paramDebugSnapshot.d.ts.map +1 -0
  108. package/dist/src/debug/paramDebugSnapshot.js +86 -0
  109. package/dist/src/debug/resolutionDebugSnapshot.d.ts +155 -0
  110. package/dist/src/debug/resolutionDebugSnapshot.d.ts.map +1 -0
  111. package/dist/src/debug/resolutionDebugSnapshot.js +291 -0
  112. package/dist/src/debug/valuePreview.d.ts +9 -0
  113. package/dist/src/debug/valuePreview.d.ts.map +1 -0
  114. package/dist/src/debug/valuePreview.js +57 -0
  115. package/dist/src/debug/viewDebugSnapshot.d.ts +131 -0
  116. package/dist/src/debug/viewDebugSnapshot.d.ts.map +1 -0
  117. package/dist/src/debug/viewDebugSnapshot.js +390 -0
  118. package/dist/src/embedFactory.d.ts.map +1 -1
  119. package/dist/src/embedFactory.js +6 -1
  120. package/dist/src/encoder/encoder.d.ts +2 -2
  121. package/dist/src/encoder/encoder.d.ts.map +1 -1
  122. package/dist/src/encoder/encoder.js +5 -4
  123. package/dist/src/fonts/bmFontManager.d.ts +1 -1
  124. package/dist/src/fonts/bmFontManager.d.ts.map +1 -1
  125. package/dist/src/fonts/bmFontManager.js +45 -10
  126. package/dist/src/fonts/textMetrics.d.ts +69 -0
  127. package/dist/src/fonts/textMetrics.d.ts.map +1 -0
  128. package/dist/src/fonts/textMetrics.js +73 -0
  129. package/dist/src/genomeSpy/headlessBootstrap.d.ts.map +1 -1
  130. package/dist/src/genomeSpy/headlessBootstrap.js +6 -0
  131. package/dist/src/genomeSpy/renderCoordinator.d.ts.map +1 -1
  132. package/dist/src/genomeSpy/renderCoordinator.js +25 -3
  133. package/dist/src/genomeSpy/viewDataInit.d.ts +14 -0
  134. package/dist/src/genomeSpy/viewDataInit.d.ts.map +1 -1
  135. package/dist/src/genomeSpy/viewDataInit.js +45 -8
  136. package/dist/src/genomeSpyBase.d.ts +6 -0
  137. package/dist/src/genomeSpyBase.d.ts.map +1 -1
  138. package/dist/src/genomeSpyBase.js +20 -3
  139. package/dist/src/gl/glslScaleGenerator.d.ts +17 -0
  140. package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
  141. package/dist/src/gl/glslScaleGenerator.js +39 -2
  142. package/dist/src/gl/includes/common.glsl.js +1 -1
  143. package/dist/src/gl/vertexRangeIndex.d.ts.map +1 -1
  144. package/dist/src/gl/vertexRangeIndex.js +4 -2
  145. package/dist/src/gl/webGLHelper.d.ts +1 -1
  146. package/dist/src/gl/webGLHelper.d.ts.map +1 -1
  147. package/dist/src/gl/webGLHelper.js +13 -8
  148. package/dist/src/marks/__snapshots__/shaderSnapshot.test.js.snap +140 -3
  149. package/dist/src/marks/mark.d.ts +47 -4
  150. package/dist/src/marks/mark.d.ts.map +1 -1
  151. package/dist/src/marks/mark.js +158 -54
  152. package/dist/src/marks/point.d.ts.map +1 -1
  153. package/dist/src/marks/point.js +4 -0
  154. package/dist/src/marks/point.vertex.glsl.js +1 -1
  155. package/dist/src/marks/text.d.ts +1 -1
  156. package/dist/src/marks/text.d.ts.map +1 -1
  157. package/dist/src/marks/text.js +2 -7
  158. package/dist/src/marks/text.vertex.glsl.js +1 -1
  159. package/dist/src/paramRuntime/paramUtils.d.ts +43 -9
  160. package/dist/src/paramRuntime/paramUtils.d.ts.map +1 -1
  161. package/dist/src/paramRuntime/paramUtils.js +61 -1
  162. package/dist/src/paramRuntime/viewParamRuntime.d.ts +32 -0
  163. package/dist/src/paramRuntime/viewParamRuntime.d.ts.map +1 -1
  164. package/dist/src/paramRuntime/viewParamRuntime.js +63 -0
  165. package/dist/src/scales/axisResolution.d.ts +35 -0
  166. package/dist/src/scales/axisResolution.d.ts.map +1 -1
  167. package/dist/src/scales/axisResolution.js +115 -7
  168. package/dist/src/scales/legendResolution.d.ts +83 -0
  169. package/dist/src/scales/legendResolution.d.ts.map +1 -0
  170. package/dist/src/scales/legendResolution.js +461 -0
  171. package/dist/src/scales/scaleResolution.d.ts +36 -0
  172. package/dist/src/scales/scaleResolution.d.ts.map +1 -1
  173. package/dist/src/scales/scaleResolution.js +59 -0
  174. package/dist/src/scales/viewLevelGuideConfig.d.ts +53 -0
  175. package/dist/src/scales/viewLevelGuideConfig.d.ts.map +1 -0
  176. package/dist/src/scales/viewLevelGuideConfig.js +224 -0
  177. package/dist/src/scales/viewLevelScaleConfig.d.ts.map +1 -1
  178. package/dist/src/scales/viewLevelScaleConfig.js +13 -2
  179. package/dist/src/spec/axis.d.ts +109 -3
  180. package/dist/src/spec/channel.d.ts +23 -4
  181. package/dist/src/spec/config.d.ts +59 -4
  182. package/dist/src/spec/data.d.ts +177 -17
  183. package/dist/src/spec/legend.d.ts +246 -0
  184. package/dist/src/spec/mark.d.ts +16 -4
  185. package/dist/src/spec/title.d.ts +58 -1
  186. package/dist/src/spec/transform.d.ts +149 -0
  187. package/dist/src/spec/view.d.ts +39 -6
  188. package/dist/src/types/embedApi.d.ts +262 -6
  189. package/dist/src/types/rendering.d.ts +19 -3
  190. package/dist/src/types/viewContext.d.ts +18 -2
  191. package/dist/src/utils/arrayUtils.d.ts +11 -0
  192. package/dist/src/utils/arrayUtils.d.ts.map +1 -1
  193. package/dist/src/utils/arrayUtils.js +23 -0
  194. package/dist/src/utils/suspension.d.ts +17 -0
  195. package/dist/src/utils/suspension.d.ts.map +1 -0
  196. package/dist/src/utils/suspension.js +41 -0
  197. package/dist/src/view/axisGridView.d.ts.map +1 -1
  198. package/dist/src/view/axisGridView.js +1 -4
  199. package/dist/src/view/axisView.d.ts +18 -2
  200. package/dist/src/view/axisView.d.ts.map +1 -1
  201. package/dist/src/view/axisView.js +180 -75
  202. package/dist/src/view/concatView.d.ts +10 -2
  203. package/dist/src/view/concatView.d.ts.map +1 -1
  204. package/dist/src/view/concatView.js +46 -9
  205. package/dist/src/view/containerMutationHelper.d.ts +20 -1
  206. package/dist/src/view/containerMutationHelper.d.ts.map +1 -1
  207. package/dist/src/view/containerMutationHelper.js +196 -33
  208. package/dist/src/view/facetView.d.ts +1 -1
  209. package/dist/src/view/gridView/gridChild.d.ts +54 -4
  210. package/dist/src/view/gridView/gridChild.d.ts.map +1 -1
  211. package/dist/src/view/gridView/gridChild.js +301 -120
  212. package/dist/src/view/gridView/gridChildLegends.d.ts +57 -0
  213. package/dist/src/view/gridView/gridChildLegends.d.ts.map +1 -0
  214. package/dist/src/view/gridView/gridChildLegends.js +503 -0
  215. package/dist/src/view/gridView/gridView.d.ts +25 -0
  216. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  217. package/dist/src/view/gridView/gridView.js +490 -78
  218. package/dist/src/view/gridView/legendLayout.d.ts +30 -0
  219. package/dist/src/view/gridView/legendLayout.d.ts.map +1 -0
  220. package/dist/src/view/gridView/legendLayout.js +115 -0
  221. package/dist/src/view/gridView/scrollbar.d.ts.map +1 -1
  222. package/dist/src/view/gridView/scrollbar.js +1 -4
  223. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  224. package/dist/src/view/gridView/selectionRect.js +1 -4
  225. package/dist/src/view/gridView/separatorView.d.ts.map +1 -1
  226. package/dist/src/view/gridView/separatorView.js +1 -4
  227. package/dist/src/view/layerView.d.ts +9 -2
  228. package/dist/src/view/layerView.d.ts.map +1 -1
  229. package/dist/src/view/layerView.js +18 -1
  230. package/dist/src/view/layout/flexLayout.d.ts +20 -4
  231. package/dist/src/view/layout/flexLayout.d.ts.map +1 -1
  232. package/dist/src/view/layout/flexLayout.js +331 -31
  233. package/dist/src/view/layout/rectangle.d.ts +14 -0
  234. package/dist/src/view/layout/rectangle.d.ts.map +1 -1
  235. package/dist/src/view/layout/rectangle.js +40 -0
  236. package/dist/src/view/legend/legendEntries.d.ts +20 -0
  237. package/dist/src/view/legend/legendEntries.d.ts.map +1 -0
  238. package/dist/src/view/legend/legendEntries.js +21 -0
  239. package/dist/src/view/legendView.d.ts +137 -0
  240. package/dist/src/view/legendView.d.ts.map +1 -0
  241. package/dist/src/view/legendView.js +1654 -0
  242. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -1
  243. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +26 -4
  244. package/dist/src/view/renderingContext/clipOptions.d.ts +44 -0
  245. package/dist/src/view/renderingContext/clipOptions.d.ts.map +1 -0
  246. package/dist/src/view/renderingContext/clipOptions.js +140 -0
  247. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts.map +1 -1
  248. package/dist/src/view/renderingContext/simpleViewRenderingContext.js +12 -1
  249. package/dist/src/view/resolutionPlanner.d.ts +2 -1
  250. package/dist/src/view/resolutionPlanner.d.ts.map +1 -1
  251. package/dist/src/view/resolutionPlanner.js +89 -25
  252. package/dist/src/view/testUtils.d.ts +4 -2
  253. package/dist/src/view/testUtils.d.ts.map +1 -1
  254. package/dist/src/view/testUtils.js +60 -7
  255. package/dist/src/view/titleView.d.ts +37 -0
  256. package/dist/src/view/titleView.d.ts.map +1 -0
  257. package/dist/src/view/titleView.js +584 -0
  258. package/dist/src/view/unitView.d.ts +3 -3
  259. package/dist/src/view/unitView.d.ts.map +1 -1
  260. package/dist/src/view/unitView.js +3 -2
  261. package/dist/src/view/view.d.ts +25 -24
  262. package/dist/src/view/view.d.ts.map +1 -1
  263. package/dist/src/view/view.js +126 -16
  264. package/dist/src/view/viewChrome.d.ts +33 -0
  265. package/dist/src/view/viewChrome.d.ts.map +1 -0
  266. package/dist/src/view/viewChrome.js +64 -0
  267. package/dist/src/view/viewFactory.d.ts +2 -5
  268. package/dist/src/view/viewFactory.d.ts.map +1 -1
  269. package/dist/src/view/viewFactory.js +1 -2
  270. package/dist/src/view/viewIdentityRegistry.d.ts +37 -0
  271. package/dist/src/view/viewIdentityRegistry.d.ts.map +1 -0
  272. package/dist/src/view/viewIdentityRegistry.js +71 -0
  273. package/dist/src/view/viewMutationAcidTestUtils.d.ts +112 -0
  274. package/dist/src/view/viewMutationAcidTestUtils.d.ts.map +1 -0
  275. package/dist/src/view/viewMutationAcidTestUtils.js +234 -0
  276. package/dist/src/view/viewMutationApi.d.ts +42 -0
  277. package/dist/src/view/viewMutationApi.d.ts.map +1 -0
  278. package/dist/src/view/viewMutationApi.js +811 -0
  279. package/dist/src/view/viewSelectors.d.ts +11 -9
  280. package/dist/src/view/viewSelectors.d.ts.map +1 -1
  281. package/dist/src/view/viewSelectors.js +28 -17
  282. package/package.json +4 -4
  283. package/dist/bundle/esm-CuMSzCHy.js +0 -298
  284. package/dist/bundle/esm-DAnOffpD.js +0 -1426
  285. package/dist/bundle/esm-DMXpJXM4.js +0 -369
  286. package/dist/bundle/esm-DNtC3H80.js +0 -121
  287. package/dist/src/view/title.d.ts +0 -13
  288. package/dist/src/view/title.d.ts.map +0 -1
  289. package/dist/src/view/title.js +0 -154
  290. /package/dist/bundle/{AbortablePromiseCache-3gHJdF3E.js → AbortablePromiseCache-BTmAcN-t.js} +0 -0
  291. /package/dist/bundle/{esm-CuVa5T98.js → esm-VvpZ9hsq.js} +0 -0
  292. /package/dist/bundle/{chunk-DmhlhrBa.js → rolldown-runtime-Dy4uBu1J.js} +0 -0
@@ -9,7 +9,7 @@ import {
9
9
  setUniformBlock,
10
10
  setUniforms,
11
11
  } from "twgl.js";
12
- import { isContinuous, isDiscrete } from "vega-scale";
12
+ import { isContinuous, isDiscrete, isDiscretizing } from "vega-scale";
13
13
  import createEncoders, {
14
14
  findChannelDefWithScale,
15
15
  getSecondaryChannel,
@@ -29,6 +29,7 @@ import {
29
29
  generateDynamicValueGlslAndUniform,
30
30
  splitLargeHighPrecision,
31
31
  getRangeForGlsl,
32
+ getDiscretizingDomainForGlsl,
32
33
  getAttributeAndArrayTypes,
33
34
  generateDataGlsl,
34
35
  generateDatumGlslAndUniform,
@@ -65,6 +66,11 @@ export const SAMPLE_FACET_TEXTURE = "SAMPLE_FACET_TEXTURE";
65
66
 
66
67
  export const SELECTION_TEXTURE_PREFIX = "uSelectionTexture_";
67
68
 
69
+ /**
70
+ * @typedef {import("../types/rendering.js").ClipOptions} ClipOptions
71
+ * @typedef {import("../view/layout/rectangle.js").default} Rectangle
72
+ */
73
+
68
74
  /**
69
75
  *
70
76
  * @typedef {import("../types/rendering.js").RenderingOptions} RenderingOptions
@@ -80,6 +86,14 @@ export const SELECTION_TEXTURE_PREFIX = "uSelectionTexture_";
80
86
  * @typedef {"intersects" | "encloses" | "endpoints"} HitTestMode
81
87
  */
82
88
 
89
+ /**
90
+ * @typedef {object} MarkDebugState
91
+ * @prop {boolean} markUniformsAltered
92
+ * @prop {number | undefined} vertexCount
93
+ * @prop {number | undefined} allocatedVertices
94
+ * @prop {Record<string, any>} properties
95
+ */
96
+
83
97
  /**
84
98
  * @template {MarkProps} [P=MarkProps]
85
99
  */
@@ -184,19 +198,22 @@ export default class Mark {
184
198
  get clip() {
185
199
  return getCachedOrCall(mark, "defaultClip", () => {
186
200
  // TODO: Only check channels that are used
187
- // TODO: provide more fine-grained xClip and yClip props
188
- for (const channel of /** @type {import("../spec/channel.js").PositionalChannel[]} */ ([
189
- "x",
190
- "y",
191
- ])) {
192
- if (
193
- unitView.getScaleResolution(channel)?.isZoomable()
194
- ) {
195
- return true;
196
- }
201
+ const clipX = unitView
202
+ .getScaleResolution("x")
203
+ ?.isZoomable();
204
+ const clipY = unitView
205
+ .getScaleResolution("y")
206
+ ?.isZoomable();
207
+
208
+ if (clipX && clipY) {
209
+ return true;
210
+ } else if (clipX) {
211
+ return "x";
212
+ } else if (clipY) {
213
+ return "y";
214
+ } else {
215
+ return false;
197
216
  }
198
-
199
- return false;
200
217
  });
201
218
  },
202
219
  xOffset: 0,
@@ -493,9 +510,15 @@ export default class Mark {
493
510
  const shaderChannels = this.getAttributes();
494
511
  const encoders = this.encoders;
495
512
  const sampleFacetMode = this.getSampleFacetMode();
513
+ const useVisibleRangeCulling = Boolean(
514
+ this.properties.cullByVisibleRange
515
+ );
496
516
  if (sampleFacetMode) {
497
517
  extraHeaders.push(`#define ${sampleFacetMode}`);
498
518
  }
519
+ if (useVisibleRangeCulling) {
520
+ extraHeaders.push("#define VISIBLE_RANGE_CULLING");
521
+ }
499
522
 
500
523
  // For debugging
501
524
  const debugHeader = "// view: " + this.unitView.getPathString();
@@ -884,9 +907,14 @@ export default class Mark {
884
907
  const domainSetter =
885
908
  this.createMarkUniformSetter(domainUniformName);
886
909
  const set = () => {
887
- const domain = isDiscrete(scale.type)
888
- ? [0, scale.domain().length]
889
- : scale.domain();
910
+ let domain;
911
+ if (isDiscrete(scale.type)) {
912
+ domain = [0, scale.domain().length];
913
+ } else if (isDiscretizing(scale.type)) {
914
+ domain = getDiscretizingDomainForGlsl(scale);
915
+ } else {
916
+ domain = scale.domain();
917
+ }
890
918
 
891
919
  domainSetter(
892
920
  isHighPrecisionScale(scale.type)
@@ -1212,6 +1240,34 @@ export default class Mark {
1212
1240
  return true;
1213
1241
  }
1214
1242
 
1243
+ /**
1244
+ * @returns {MarkDebugState}
1245
+ */
1246
+ getDebugState() {
1247
+ const specProperties =
1248
+ typeof this.unitView.spec.mark == "object"
1249
+ ? this.unitView.spec.mark
1250
+ : {};
1251
+ const propertyKeys = new Set([
1252
+ ...Object.keys(this.defaultProperties),
1253
+ ...Object.keys(specProperties),
1254
+ ]);
1255
+ /** @type {Record<string, any>} */
1256
+ const properties = {};
1257
+ for (const key of propertyKeys) {
1258
+ properties[key] = /** @type {Record<string, any>} */ (
1259
+ this.properties
1260
+ )[key];
1261
+ }
1262
+
1263
+ return {
1264
+ markUniformsAltered: this.markUniformsAltered,
1265
+ vertexCount: this.bufferInfo?.numElements,
1266
+ allocatedVertices: this.bufferInfo?.allocatedVertices,
1267
+ properties,
1268
+ };
1269
+ }
1270
+
1215
1271
  /**
1216
1272
  * @protected
1217
1273
  */
@@ -1437,10 +1493,11 @@ export default class Mark {
1437
1493
  * @param {{width: number, height: number}} canvasSize Size of the canvas in logical pixels
1438
1494
  * @param {number} dpr Device pixel ratio
1439
1495
  * @param {import("../view/layout/rectangle.js").default} coords
1440
- * @param {import("../view/layout/rectangle.js").default} [clipRect]
1496
+ * @param {ClipOptions} [clip]
1497
+ * @param {ClipOptions} [cullClip]
1441
1498
  * @returns {boolean} true if the viewport is renderable (size > 0)
1442
1499
  */
1443
- setViewport(canvasSize, dpr, coords, clipRect) {
1500
+ setViewport(canvasSize, dpr, coords, clip, cullClip) {
1444
1501
  coords = coords.flatten();
1445
1502
 
1446
1503
  const gl = this.gl;
@@ -1457,41 +1514,24 @@ export default class Mark {
1457
1514
  /** @type {object} */
1458
1515
  let uniforms;
1459
1516
 
1460
- let clippedCoords = coords;
1461
-
1462
- if (props.clip !== "never" && (props.clip || clipRect)) {
1463
- let xClipOffset = 0;
1464
- let yClipOffset = 0;
1465
-
1466
- /** @type {[number, number]} */
1467
- let uViewScale;
1468
-
1469
- if (clipRect) {
1470
- // The following fails with axes that are handled by a GridView
1471
- // that itself is scrollable. The axes are clipped to the viewport
1472
- // but also to the axis view, resulting in clipped axes where
1473
- // not necessary.
1474
- clippedCoords = coords.intersect(clipRect).flatten();
1475
- if (!clippedCoords.isDefined()) {
1476
- return false;
1477
- }
1478
-
1479
- uViewScale = [
1480
- coords.width / clippedCoords.width,
1481
- coords.height / clippedCoords.height,
1482
- ];
1517
+ const viewportScope = createViewportScope(
1518
+ canvasSize,
1519
+ coords,
1520
+ props.clip === "never" ? undefined : clip,
1521
+ false
1522
+ );
1523
+ const scopedCoords = viewportScope.coords;
1483
1524
 
1484
- yClipOffset = Math.max(0, coords.y2 - clipRect.y2);
1485
- xClipOffset = Math.min(0, coords.x - clipRect.x);
1486
- } else {
1487
- uViewScale = [1, 1];
1525
+ if (viewportScope.requiresScissor) {
1526
+ if (!scopedCoords.isDefined()) {
1527
+ return false;
1488
1528
  }
1489
1529
 
1490
1530
  const physicalGlCoords = [
1491
- clippedCoords.x,
1492
- canvasSize.height - clippedCoords.y2,
1493
- clippedCoords.width,
1494
- clippedCoords.height,
1531
+ scopedCoords.x,
1532
+ canvasSize.height - scopedCoords.y2,
1533
+ scopedCoords.width,
1534
+ scopedCoords.height,
1495
1535
  ].map((x) => x * dpr);
1496
1536
 
1497
1537
  // Because glViewport accepts only integers, we subtract the rounding
@@ -1510,12 +1550,15 @@ export default class Mark {
1510
1550
 
1511
1551
  uniforms = {
1512
1552
  uViewOffset: [
1513
- (xOffset + xClipOffset + xError / dpr) /
1514
- clippedCoords.width,
1515
- -(yOffset + yClipOffset - yError / dpr) /
1516
- clippedCoords.height,
1553
+ (coords.x - scopedCoords.x + xOffset + xError / dpr) /
1554
+ scopedCoords.width,
1555
+ (scopedCoords.y2 - coords.y2 - yOffset + yError / dpr) /
1556
+ scopedCoords.height,
1557
+ ],
1558
+ uViewScale: [
1559
+ coords.width / scopedCoords.width,
1560
+ coords.height / scopedCoords.height,
1517
1561
  ],
1518
- uViewScale,
1519
1562
  };
1520
1563
  } else {
1521
1564
  if (!coords.isDefined()) {
@@ -1548,6 +1591,17 @@ export default class Mark {
1548
1591
  setBlockUniforms(this.viewUniformInfo, {
1549
1592
  ...uniforms,
1550
1593
  uViewportSize: [coords.width, coords.height],
1594
+ uLogicalVisibleRect: createLogicalVisibleRect(coords, cullClip),
1595
+ uCullByVisibleRange: [
1596
+ props.cullByVisibleRange === true ||
1597
+ props.cullByVisibleRange === "x"
1598
+ ? 1
1599
+ : 0,
1600
+ props.cullByVisibleRange === true ||
1601
+ props.cullByVisibleRange === "y"
1602
+ ? 1
1603
+ : 0,
1604
+ ],
1551
1605
  uDevicePixelRatio: dpr,
1552
1606
  });
1553
1607
 
@@ -1617,3 +1671,53 @@ class RangeMap extends InternMap {
1617
1671
  }
1618
1672
  }
1619
1673
  }
1674
+
1675
+ /**
1676
+ * @param {{ width: number, height: number }} canvasSize
1677
+ * @param {Rectangle} coords
1678
+ * @param {ClipOptions | undefined} clip
1679
+ * @param {boolean} [clipSelf]
1680
+ */
1681
+ export function createViewportScope(canvasSize, coords, clip, clipSelf = true) {
1682
+ if (!clip || (!clip.clipX && !clip.clipY)) {
1683
+ return {
1684
+ requiresScissor: false,
1685
+ coords,
1686
+ };
1687
+ }
1688
+
1689
+ let clippedCoords = clipSelf ? coords.intersect(clip.rect) : clip.rect;
1690
+
1691
+ if (!clip.clipX) {
1692
+ clippedCoords = clippedCoords.modify({
1693
+ x: 0,
1694
+ width: canvasSize.width,
1695
+ });
1696
+ }
1697
+
1698
+ if (!clip.clipY) {
1699
+ clippedCoords = clippedCoords.modify({
1700
+ y: 0,
1701
+ height: canvasSize.height,
1702
+ });
1703
+ }
1704
+
1705
+ return {
1706
+ requiresScissor: true,
1707
+ coords: clippedCoords.flatten(),
1708
+ };
1709
+ }
1710
+
1711
+ /**
1712
+ * @param {Rectangle} coords
1713
+ * @param {ClipOptions | undefined} clip
1714
+ * @returns {[number, number, number, number]}
1715
+ */
1716
+ export function createLogicalVisibleRect(coords, clip) {
1717
+ const x1 = clip?.clipX ? (clip.rect.x - coords.x) / coords.width : 0;
1718
+ const x2 = clip?.clipX ? (clip.rect.x2 - coords.x) / coords.width : 1;
1719
+ const y1 = clip?.clipY ? (coords.y2 - clip.rect.y2) / coords.height : 0;
1720
+ const y2 = clip?.clipY ? (coords.y2 - clip.rect.y) / coords.height : 1;
1721
+
1722
+ return [x1, y1, x2, y2];
1723
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/marks/point.js"],"names":[],"mappings":"AAoBA;;GAEG;AACH;IAGI;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EAyB/C;IA6EO,iDAMC;IAkET,+BAkBC;;CAgDJ;iBAhQgB,WAAW"}
1
+ {"version":3,"file":"point.d.ts","sourceRoot":"","sources":["../../../src/marks/point.js"],"names":[],"mappings":"AAoBA;;GAEG;AACH;IAGI;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EAyB/C;IA6EO,iDAMC;IAkET,+BAsBC;;CAgDJ;iBApQgB,WAAW"}
@@ -201,6 +201,10 @@ export default class PointMark extends Mark {
201
201
 
202
202
  getSemanticThreshold() {
203
203
  if (this.sampledSemanticScores) {
204
+ if (this.sampledSemanticScores.length === 0) {
205
+ return -1;
206
+ }
207
+
204
208
  const p = Math.max(
205
209
  0,
206
210
  1 - this.#semanticZoomFraction() * this.unitView.getZoomLevel()
@@ -1,2 +1,2 @@
1
- const shader = "flat out float vRadius;flat out float vRadiusWithPadding;flat out lowp vec4 vFillColor;flat out lowp vec4 vStrokeColor;flat out lowp float vShape;flat out lowp float vHalfStrokeWidth;flat out mat2 vRotationMatrix;const float CIRCLE=0.0;const float SQUARE=1.0;const float CROSS=2.0;const float DIAMOND=3.0;const float TRIANGLE_UP=4.0;const float TRIANGLE_RIGHT=5.0;const float TRIANGLE_DOWN=6.0;const float TRIANGLE_LEFT=7.0;const float TICK_UP=8.0;const float TICK_RIGHT=9.0;const float TICK_DOWN=10.0;const float TICK_LEFT=11.0;float computeSemanticThresholdFactor(){return getScaled_semanticScore()>=uSemanticThreshold ? 1.0 : 0.0;}vec2 getDxDy(){\n#if defined(dx_DEFINED) || defined(dy_DEFINED)\nreturn vec2(getScaled_dx(),getScaled_dy())/uViewportSize;\n#else\nreturn vec2(0.0,0.0);\n#endif\n}void main(void){float shapeAngle=0.0;float semanticThresholdFactor=isPointSelected()? 1.0: computeSemanticThresholdFactor();if(semanticThresholdFactor<=0.0){gl_PointSize=0.0;gl_Position=vec4(100.0,0.0,0.0,0.0);return;}float size=getScaled_size();vec2 pos=vec2(getScaled_x(),getScaled_y())+getDxDy();gl_Position=unitToNdc(applySampleFacet(pos));float strokeWidth=getScaled_strokeWidth();float diameter=sqrt(size)*uScaleFactor*semanticThresholdFactor;float opacity=uViewOpacity;if(strokeWidth<=0.0||uInwardStroke){float minDiameter=1.0/uDevicePixelRatio;if(diameter<minDiameter){opacity*=pow(diameter/minDiameter,2.5);diameter=minDiameter;}}float fillOpa=getScaled_fillOpacity()*opacity;float strokeOpa=getScaled_strokeOpacity()*opacity;vShape=getScaled_shape();bool circle=vShape==0.0;if(vShape>TICK_UP&&vShape<=TICK_LEFT){shapeAngle=(vShape-TICK_UP)*90.0;vShape=TICK_UP;}else if(vShape>TRIANGLE_UP&&vShape<=TRIANGLE_LEFT){shapeAngle=(vShape-TRIANGLE_UP)*90.0;vShape=TRIANGLE_UP;}float angleInDegrees=getScaled_angle();float angle=-(shapeAngle+angleInDegrees)*PI/180.0;float sinTheta=sin(angle);float cosTheta=cos(angle);vRotationMatrix=mat2(cosTheta,sinTheta,-sinTheta,cosTheta);float roomForRotation=circle ? 1.0 : sin(mod(angle,PI/2.0)+PI/4.0)/sin(PI/4.0);float aaPadding=1.0/uDevicePixelRatio;float rotationPadding=(diameter*roomForRotation)-diameter;float strokePadding=uInwardStroke ? 0.0 : strokeWidth*(circle ? 1.0 : sqrt(3.0));float padding=rotationPadding+strokePadding+aaPadding;gl_PointSize=max((diameter+padding),uPickingEnabled ? uMinPickingSize : 0.0)*uDevicePixelRatio;vRadius=diameter/2.0;vRadiusWithPadding=vRadius+padding/2.0;vHalfStrokeWidth=strokeWidth/2.0;vFillColor=vec4(getScaled_fill()*fillOpa,fillOpa);vStrokeColor=vec4(getScaled_stroke()*strokeOpa,strokeOpa);setupPicking();}";
1
+ const shader = "flat out float vRadius;flat out float vRadiusWithPadding;flat out lowp vec4 vFillColor;flat out lowp vec4 vStrokeColor;flat out lowp float vShape;flat out lowp float vHalfStrokeWidth;flat out mat2 vRotationMatrix;const float CIRCLE=0.0;const float SQUARE=1.0;const float CROSS=2.0;const float DIAMOND=3.0;const float TRIANGLE_UP=4.0;const float TRIANGLE_RIGHT=5.0;const float TRIANGLE_DOWN=6.0;const float TRIANGLE_LEFT=7.0;const float TICK_UP=8.0;const float TICK_RIGHT=9.0;const float TICK_DOWN=10.0;const float TICK_LEFT=11.0;float computeSemanticThresholdFactor(){return getScaled_semanticScore()>=uSemanticThreshold ? 1.0 : 0.0;}vec2 getDxDy(){\n#if defined(dx_DEFINED) || defined(dy_DEFINED)\nreturn vec2(getScaled_dx(),getScaled_dy())/uViewportSize;\n#else\nreturn vec2(0.0,0.0);\n#endif\n}void main(void){float shapeAngle=0.0;float semanticThresholdFactor=isPointSelected()? 1.0: computeSemanticThresholdFactor();if(semanticThresholdFactor<=0.0){gl_PointSize=0.0;gl_Position=vec4(100.0,0.0,0.0,0.0);return;}float size=getScaled_size();vec2 pos=vec2(getScaled_x(),getScaled_y())+getDxDy();vec2 facetedPos=applySampleFacet(pos);\n#ifdef VISIBLE_RANGE_CULLING\nif(isOutsideVisibleRange(facetedPos)){gl_PointSize=0.0;gl_Position=vec4(100.0,0.0,0.0,0.0);return;}\n#endif\ngl_Position=unitToNdc(facetedPos);float strokeWidth=getScaled_strokeWidth();float diameter=sqrt(size)*uScaleFactor*semanticThresholdFactor;float opacity=uViewOpacity;if(strokeWidth<=0.0||uInwardStroke){float minDiameter=1.0/uDevicePixelRatio;if(diameter<minDiameter){opacity*=pow(diameter/minDiameter,2.5);diameter=minDiameter;}}float fillOpa=getScaled_fillOpacity()*opacity;float strokeOpa=getScaled_strokeOpacity()*opacity;vShape=getScaled_shape();bool circle=vShape==0.0;if(vShape>TICK_UP&&vShape<=TICK_LEFT){shapeAngle=(vShape-TICK_UP)*90.0;vShape=TICK_UP;}else if(vShape>TRIANGLE_UP&&vShape<=TRIANGLE_LEFT){shapeAngle=(vShape-TRIANGLE_UP)*90.0;vShape=TRIANGLE_UP;}float angleInDegrees=getScaled_angle();float angle=-(shapeAngle+angleInDegrees)*PI/180.0;float sinTheta=sin(angle);float cosTheta=cos(angle);vRotationMatrix=mat2(cosTheta,sinTheta,-sinTheta,cosTheta);float roomForRotation=circle ? 1.0 : sin(mod(angle,PI/2.0)+PI/4.0)/sin(PI/4.0);float aaPadding=1.0/uDevicePixelRatio;float rotationPadding=(diameter*roomForRotation)-diameter;float strokePadding=uInwardStroke ? 0.0 : strokeWidth*(circle ? 1.0 : sqrt(3.0));float padding=rotationPadding+strokePadding+aaPadding;gl_PointSize=max((diameter+padding),uPickingEnabled ? uMinPickingSize : 0.0)*uDevicePixelRatio;vRadius=diameter/2.0;vRadiusWithPadding=vRadius+padding/2.0;vHalfStrokeWidth=strokeWidth/2.0;vFillColor=vec4(getScaled_fill()*fillOpa,fillOpa);vStrokeColor=vec4(getScaled_stroke()*strokeOpa,strokeOpa);setupPicking();}";
2
2
  export default shader;
@@ -16,7 +16,7 @@ export default class TextMark extends Mark<import("../spec/mark.js").TextProps>
16
16
  * @param {import("../view/unitView.js").default} unitView
17
17
  */
18
18
  constructor(unitView: import("../view/unitView.js").default);
19
- font: import("../fonts/bmFontManager.js").FontEntry;
19
+ font: import("../fonts/textMetrics.js").FontEntryLike;
20
20
  }
21
21
  import Mark from "./mark.js";
22
22
  //# sourceMappingURL=text.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/marks/text.js"],"names":[],"mappings":"AAiCA;;;;;;;;;GASG;AACH;IACI;;OAEG;IACH;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EAiB/C;IAbG,oDAMmD;CAyM1D;iBAtPgB,WAAW"}
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/marks/text.js"],"names":[],"mappings":"AAkCA;;;;;;;;;GASG;AACH;IACI;;OAEG;IACH;;OAEG;IACH,sBAFW,OAAO,qBAAqB,EAAE,OAAO,EAW/C;IAPG,sDAAsE;CAyM7E;iBAjPgB,WAAW"}
@@ -14,6 +14,7 @@ import { TextVertexBuilder } from "../gl/dataToVertices.js";
14
14
  import Mark from "./mark.js";
15
15
  import { fixCoveragePositional, fixHalfOpenRangedText } from "./markUtils.js";
16
16
  import { primaryPositionalChannels } from "../encoder/encoder.js";
17
+ import { requestFont } from "../fonts/textMetrics.js";
17
18
 
18
19
  /** For GLSL uniforms */
19
20
  const alignments = {
@@ -50,13 +51,7 @@ export default class TextMark extends Mark {
50
51
  */
51
52
  constructor(unitView) {
52
53
  super(unitView);
53
- this.font = this.properties.font
54
- ? unitView.context.fontManager.getFont(
55
- this.properties.font,
56
- this.properties.fontStyle,
57
- this.properties.fontWeight
58
- )
59
- : unitView.context.fontManager.getDefaultFont();
54
+ this.font = requestFont(unitView.context.fontManager, this.properties);
60
55
 
61
56
  this.setupExprRefsNeedingGraphicsUpdate([
62
57
  "text",
@@ -1,2 +1,2 @@
1
- const shader = "in mediump vec2 vertexCoord;in lowp vec2 textureCoord;in float width;out vec2 vTexCoord;out float vEdgeFadeOpacity;flat out vec4 vColor;flat out float vSlope;flat out float vGamma;struct RangeResult{float pos;float scale;};float minValue(vec4 v){return min(min(v.x,v.y),min(v.z,v.w));}float maxValue(vec4 v){return max(max(v.x,v.y),max(v.z,v.w));}/***All measures are in[0,1]*/RangeResult positionInsideRange(float a,float b,float width,float padding,int align,bool flush){float span=b-a;float paddedWidth=width+2.0*padding;if(a>1.0||b<0.0){return RangeResult(0.0,0.0);}float extra=max(0.0,span-paddedWidth);float pos;if(align==0){float centre=a+b;if(flush){float leftOver=max(0.0,paddedWidth-centre);centre+=min(leftOver,extra);float rightOver=max(0.0,paddedWidth+centre-2.0);centre-=min(rightOver,extra);}pos=centre/2.0;}else if(align<0){float edge=a;if(flush){float over=max(0.0,-edge);edge+=min(over,extra);}pos=edge+padding;}else{float edge=b;if(flush){float over=max(0.0,edge-1.0);edge-=min(over,extra);}pos=edge-padding;}float scale=clamp((span-padding)/paddedWidth,0.0,1.0);return RangeResult(pos,scale);}vec2 calculateRotatedDimensions(float width,mat2 rotationMatrix){vec2 a=abs(rotationMatrix*vec2(width/2.0,0.5));vec2 b=abs(rotationMatrix*vec2(width/2.0,-0.5));return vec2(max(a.x,b.x),max(a.y,b.y))*2.0;}ivec2 fixAlignForAngle(ivec2 align,float angleInDegrees){float a=mod(angleInDegrees+45.0,360.0);int x=align.x;int y=-align.y;if(a<90.0){return ivec2(x,y);}else if(a<180.0){return ivec2(y,-x);}else if(a<270.0){return ivec2(-x,y);}else{return ivec2(-y,x);}}void main(void){float opacity=getScaled_opacity()*uViewOpacity;vec2 size=vec2(getScaled_size());float x=getScaled_x();float y=getScaled_y();float scale=1.0;float angleInDegrees=getScaled_angle();float angle=-angleInDegrees*PI/180.0;float sinTheta=sin(angle);float cosTheta=cos(angle);mat2 rotationMatrix=mat2(cosTheta,sinTheta,-sinTheta,cosTheta);vec2 flushSize=calculateRotatedDimensions(width,rotationMatrix);\n#if defined(x2_DEFINED) || defined(y2_DEFINED)\nivec2 align=fixAlignForAngle(uAlign,angleInDegrees);\n#else\nivec2 align=uAlign;\n#endif\n#ifdef x2_DEFINED\nfloat x2=getScaled_x2();if(uLogoLetter){size.x=(x2-x)*uViewportSize.x;x+=(x2-x)/2.0;}else{float x2=getScaled_x2();RangeResult result=positionInsideRange(min(x,x2),max(x,x2),size.x*scale*flushSize.x/uViewportSize.x,uPaddingX/uViewportSize.x,align.x,uFlushX);x=result.pos;scale*=result.scale;}\n#endif\nvec2 pos=applySampleFacet(vec2(x,y));\n#ifdef y2_DEFINED\nfloat y2=getScaled_y2();vec2 pos2=applySampleFacet(vec2(x,y2));if(uLogoLetter){size.y=(pos2.y-pos.y)*uViewportSize.y;pos.y+=(pos2.y-pos.y)/2.0;}else{RangeResult result=positionInsideRange(min(pos.y,pos2.y),max(pos.y,pos2.y),size.y*scale*flushSize.y/uViewportSize.y,uPaddingY/uViewportSize.y,align.y,uFlushY);pos.y=result.pos;scale*=result.scale;}\n#endif\nif(scale<1.0){if(uSqueeze){vec2 scaleFadeExtent=vec2(3.0,6.0)/size;if(scale<scaleFadeExtent[0]){gl_Position=vec4(0.0);return;}size*=scale;opacity*=linearstep(scaleFadeExtent[0],scaleFadeExtent[1],scale);}else if(scale<1.0){gl_Position=vec4(0.0);return;}}vec2 charPos=rotationMatrix*(vertexCoord*size+uD);vec2 unitPos=pos+charPos/uViewportSize;gl_Position=unitToNdc(unitPos);vSlope=max(1.0,min(size.x,size.y)/uSdfNumerator*uDevicePixelRatio);vec3 color=getScaled_color();vColor=vec4(color*opacity,opacity);vGamma=getGammaForColor(color);vTexCoord=textureCoord;if(maxValue(uViewportEdgeFadeDistance)>-pow(10.0,10.0)){vEdgeFadeOpacity=minValue(((vec4(1.0,1.0,0.0,0.0)+vec4(-1.0,-1.0,1.0,1.0)*unitPos.yxyx)*uViewportSize.yxyx-uViewportEdgeFadeDistance)/uViewportEdgeFadeWidth);}else{vEdgeFadeOpacity=1.0;}setupPicking();}";
1
+ const shader = "in mediump vec2 vertexCoord;in lowp vec2 textureCoord;in float width;out vec2 vTexCoord;out float vEdgeFadeOpacity;flat out vec4 vColor;flat out float vSlope;flat out float vGamma;struct RangeResult{float pos;float scale;};float minValue(vec4 v){return min(min(v.x,v.y),min(v.z,v.w));}float maxValue(vec4 v){return max(max(v.x,v.y),max(v.z,v.w));}/***All measures are in[0,1]*/RangeResult positionInsideRange(float a,float b,float width,float padding,int align,bool flush){float span=b-a;float paddedWidth=width+2.0*padding;if(a>1.0||b<0.0){return RangeResult(0.0,0.0);}float extra=max(0.0,span-paddedWidth);float pos;if(align==0){float centre=a+b;if(flush){float leftOver=max(0.0,paddedWidth-centre);centre+=min(leftOver,extra);float rightOver=max(0.0,paddedWidth+centre-2.0);centre-=min(rightOver,extra);}pos=centre/2.0;}else if(align<0){float edge=a;if(flush){float over=max(0.0,-edge);edge+=min(over,extra);}pos=edge+padding;}else{float edge=b;if(flush){float over=max(0.0,edge-1.0);edge-=min(over,extra);}pos=edge-padding;}float scale=clamp((span-padding)/paddedWidth,0.0,1.0);return RangeResult(pos,scale);}vec2 calculateRotatedDimensions(float width,mat2 rotationMatrix){vec2 a=abs(rotationMatrix*vec2(width/2.0,0.5));vec2 b=abs(rotationMatrix*vec2(width/2.0,-0.5));return vec2(max(a.x,b.x),max(a.y,b.y))*2.0;}ivec2 fixAlignForAngle(ivec2 align,float angleInDegrees){float a=mod(angleInDegrees+45.0,360.0);int x=align.x;int y=-align.y;if(a<90.0){return ivec2(x,y);}else if(a<180.0){return ivec2(y,-x);}else if(a<270.0){return ivec2(-x,y);}else{return ivec2(-y,x);}}void main(void){float opacity=getScaled_opacity()*uViewOpacity;vec2 size=vec2(getScaled_size());float x=getScaled_x();float y=getScaled_y();float scale=1.0;float angleInDegrees=getScaled_angle();float angle=-angleInDegrees*PI/180.0;float sinTheta=sin(angle);float cosTheta=cos(angle);mat2 rotationMatrix=mat2(cosTheta,sinTheta,-sinTheta,cosTheta);vec2 flushSize=calculateRotatedDimensions(width,rotationMatrix);\n#if defined(x2_DEFINED) || defined(y2_DEFINED)\nivec2 align=fixAlignForAngle(uAlign,angleInDegrees);\n#else\nivec2 align=uAlign;\n#endif\n#ifdef x2_DEFINED\nfloat x2=getScaled_x2();if(uLogoLetter){size.x=(x2-x)*uViewportSize.x;x+=(x2-x)/2.0;}else{float x2=getScaled_x2();RangeResult result=positionInsideRange(min(x,x2),max(x,x2),size.x*scale*flushSize.x/uViewportSize.x,uPaddingX/uViewportSize.x,align.x,uFlushX);x=result.pos;scale*=result.scale;}\n#endif\nvec2 pos=applySampleFacet(vec2(x,y));\n#ifdef y2_DEFINED\nfloat y2=getScaled_y2();vec2 pos2=applySampleFacet(vec2(x,y2));if(uLogoLetter){size.y=(pos2.y-pos.y)*uViewportSize.y;pos.y+=(pos2.y-pos.y)/2.0;}else{RangeResult result=positionInsideRange(min(pos.y,pos2.y),max(pos.y,pos2.y),size.y*scale*flushSize.y/uViewportSize.y,uPaddingY/uViewportSize.y,align.y,uFlushY);pos.y=result.pos;scale*=result.scale;}\n#endif\n#ifdef VISIBLE_RANGE_CULLING\nif(isOutsideVisibleRange(pos)){gl_Position=vec4(0.0);return;}\n#endif\nif(scale<1.0){if(uSqueeze){vec2 scaleFadeExtent=vec2(3.0,6.0)/size;if(scale<scaleFadeExtent[0]){gl_Position=vec4(0.0);return;}size*=scale;opacity*=linearstep(scaleFadeExtent[0],scaleFadeExtent[1],scale);}else if(scale<1.0){gl_Position=vec4(0.0);return;}}vec2 charPos=rotationMatrix*(vertexCoord*size+uD);vec2 unitPos=pos+charPos/uViewportSize;gl_Position=unitToNdc(unitPos);vSlope=max(1.0,min(size.x,size.y)/uSdfNumerator*uDevicePixelRatio);vec3 color=getScaled_color();vColor=vec4(color*opacity,opacity);vGamma=getGammaForColor(color);vTexCoord=textureCoord;if(maxValue(uViewportEdgeFadeDistance)>-pow(10.0,10.0)){vEdgeFadeOpacity=minValue(((vec4(1.0,1.0,0.0,0.0)+vec4(-1.0,-1.0,1.0,1.0)*unitPos.yxyx)*uViewportSize.yxyx-uViewportEdgeFadeDistance)/uViewportEdgeFadeWidth);}else{vEdgeFadeOpacity=1.0;}setupPicking();}";
2
2
  export default shader;
@@ -5,6 +5,23 @@
5
5
  * identifier: () => string
6
6
  * }} ExprRefFunction
7
7
  */
8
+ /**
9
+ * @typedef {{
10
+ * scopeOwned?: boolean,
11
+ * registerDisposer?: (disposer: () => void) => void
12
+ * }} WatchExpressionOptions
13
+ */
14
+ /**
15
+ * @typedef {{
16
+ * createExpression: (expr: string) => ExprRefFunction,
17
+ * watchExpression?: (
18
+ * expr: string,
19
+ * listener: () => void,
20
+ * options?: WatchExpressionOptions
21
+ * ) => ExprRefFunction,
22
+ * whenPropagated?: () => Promise<void>
23
+ * }} ExprRefRuntime
24
+ */
8
25
  /**
9
26
  * @param {any} x
10
27
  * @returns {x is import("../spec/parameter.js").ExprRef}
@@ -53,7 +70,7 @@ export function getDefaultParamValue(param: import("../spec/parameter.js").Param
53
70
  * ExprRefs to getters and setups a listener that is called when any of the
54
71
  * expressions (upstream parameters) change.
55
72
  *
56
- * @param {{ createExpression: (expr: string) => ExprRefFunction, watchExpression?: (expr: string, listener: () => void, options?: { scopeOwned?: boolean, registerDisposer?: (disposer: () => void) => void }) => ExprRefFunction, whenPropagated?: () => Promise<void> }} paramRuntime
73
+ * @param {ExprRefRuntime} paramRuntime
57
74
  * @param {T} props The properties object
58
75
  * @param {(props: ReadonlySet<keyof T>) => void} [listener] Listener to be called when any of the expressions change
59
76
  * @param {(disposer: () => void) => void} [registerDisposer]
@@ -61,16 +78,24 @@ export function getDefaultParamValue(param: import("../spec/parameter.js").Param
61
78
  * @returns T
62
79
  * @template {Record<string, any | import("../spec/parameter.js").ExprRef>} T
63
80
  */
64
- export function activateExprRefProps<T extends Record<string, any | import("../spec/parameter.js").ExprRef>>(paramRuntime: {
65
- createExpression: (expr: string) => ExprRefFunction;
66
- watchExpression?: (expr: string, listener: () => void, options?: {
67
- scopeOwned?: boolean;
68
- registerDisposer?: (disposer: () => void) => void;
69
- }) => ExprRefFunction;
70
- whenPropagated?: () => Promise<void>;
71
- }, props: T, listener?: (props: ReadonlySet<keyof T>) => void, registerDisposer?: (disposer: () => void) => void, options?: {
81
+ export function activateExprRefProps<T extends Record<string, any | import("../spec/parameter.js").ExprRef>>(paramRuntime: ExprRefRuntime, props: T, listener?: (props: ReadonlySet<keyof T>) => void, registerDisposer?: (disposer: () => void) => void, options?: {
72
82
  batchMode?: "microtask" | "whenPropagated";
73
83
  }): T;
84
+ /**
85
+ * Resolves a literal or ExprRef for properties that may be parameterized during
86
+ * view construction but are not safe to update reactively. This is intended for
87
+ * structural options, such as layout regions or view ownership, where a later
88
+ * value change would require rebuilding part of the view hierarchy. ExprRefs
89
+ * are evaluated once and subscribed with a fail-fast listener.
90
+ *
91
+ * @param {ExprRefRuntime} paramRuntime
92
+ * @param {T | import("../spec/parameter.js").ExprRef} value
93
+ * @param {string} errorMessage Error thrown if an ExprRef changes after initialization
94
+ * @param {(disposer: () => void) => void} [registerDisposer]
95
+ * @returns {T}
96
+ * @template T
97
+ */
98
+ export function resolveInitOnlyExprRef<T>(paramRuntime: ExprRefRuntime, value: T | import("../spec/parameter.js").ExprRef, errorMessage: string, registerDisposer?: (disposer: () => void) => void): T;
74
99
  /**
75
100
  * Creates a function that always returns the same value.
76
101
  *
@@ -83,4 +108,13 @@ export type ExprRefFunction = import("../utils/expression.js").ExpressionFunctio
83
108
  invalidate: () => void;
84
109
  identifier: () => string;
85
110
  };
111
+ export type WatchExpressionOptions = {
112
+ scopeOwned?: boolean;
113
+ registerDisposer?: (disposer: () => void) => void;
114
+ };
115
+ export type ExprRefRuntime = {
116
+ createExpression: (expr: string) => ExprRefFunction;
117
+ watchExpression?: (expr: string, listener: () => void, options?: WatchExpressionOptions) => ExprRefFunction;
118
+ whenPropagated?: () => Promise<void>;
119
+ };
86
120
  //# sourceMappingURL=paramUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paramUtils.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/paramUtils.js"],"names":[],"mappings":"AAUA;;;;;;GAMG;AAEH;;;GAGG;AACH,6BAHW,GAAG,GACD,CAAC,IAAI,OAAO,sBAAsB,EAAE,OAAO,CAIvD;AAED;;;;;;;GAOG;AACH,+BAHa,CAAC,KADH,CAAC,GAAG,OAAO,sBAAsB,EAAE,OAAO,GAExC,CAAC,CAWb;AAED;;;GAGG;AACH,2CAHW,OAAO,sBAAsB,EAAE,SAAS,GACtC,KAAK,IAAI,OAAO,sBAAsB,EAAE,iBAAiB,CAIrE;AAED;;;GAGG;AACH,4CAHW,OAAO,sBAAsB,EAAE,SAAS,GACtC,KAAK,IAAI,OAAO,sBAAsB,EAAE,kBAAkB,CAItE;AAED;;;;;;GAMG;AACH,4CAHW,MAAM,GACJ,MAAM,CAYlB;AAED;;;;;;;GAOG;AACH,4CALW,OAAO,sBAAsB,EAAE,SAAS,iBACxC;IAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAA;CAAE,WACvD,eAAe,GACb,GAAG,CA0Cf;AAED;;;;;;;;;;;;GAYG;AACH,qCAF4E,CAAC,SAA/D,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,sBAAsB,EAAE,OAAO,CAAE,gBANhE;IAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAAC,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;KAAE,KAAK,eAAe,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,SAC/P,CAAC,aACD,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,qBACrC,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,YAC9B;IAAE,SAAS,CAAC,EAAE,WAAW,GAAG,gBAAgB,CAAA;CAAE,GAkHnC,CAAC,CACtB;AAED;;;;;GAKG;AACH,2CAHW,GAAG,GACD,eAAe,CAW3B;8BApQY,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAC9D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,MAAM,CAAA;CACzB"}
1
+ {"version":3,"file":"paramUtils.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/paramUtils.js"],"names":[],"mappings":"AAUA;;;;;;GAMG;AAEH;;;;;GAKG;AAEH;;;;;;;;;;GAUG;AAEH;;;GAGG;AACH,6BAHW,GAAG,GACD,CAAC,IAAI,OAAO,sBAAsB,EAAE,OAAO,CAIvD;AAED;;;;;;;GAOG;AACH,+BAHa,CAAC,KADH,CAAC,GAAG,OAAO,sBAAsB,EAAE,OAAO,GAExC,CAAC,CAWb;AAED;;;GAGG;AACH,2CAHW,OAAO,sBAAsB,EAAE,SAAS,GACtC,KAAK,IAAI,OAAO,sBAAsB,EAAE,iBAAiB,CAIrE;AAED;;;GAGG;AACH,4CAHW,OAAO,sBAAsB,EAAE,SAAS,GACtC,KAAK,IAAI,OAAO,sBAAsB,EAAE,kBAAkB,CAItE;AAED;;;;;;GAMG;AACH,4CAHW,MAAM,GACJ,MAAM,CAYlB;AAED;;;;;;;GAOG;AACH,4CALW,OAAO,sBAAsB,EAAE,SAAS,iBACxC;IAAE,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAA;CAAE,WACvD,eAAe,GACb,GAAG,CA0Cf;AAED;;;;;;;;;;;;GAYG;AACH,qCAF4E,CAAC,SAA/D,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,sBAAsB,EAAE,OAAO,CAAE,gBANhE,cAAc,SACd,CAAC,aACD,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,qBACrC,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,YAC9B;IAAE,SAAS,CAAC,EAAE,WAAW,GAAG,gBAAgB,CAAA;CAAE,GAkHnC,CAAC,CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,uCAFa,CAAC,gBALH,cAAc,SACd,CAAC,GAAG,OAAO,sBAAsB,EAAE,OAAO,gBAC1C,MAAM,qBACN,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,GAC5B,CAAC,CA4Bb;AAED;;;;;GAKG;AACH,2CAHW,GAAG,GACD,eAAe,CAW3B;8BAhUY,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAC9D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAChD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,MAAM,CAAA;CACzB;qCAIS;IACR,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;CAClD;6BAIS;IACR,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IACpD,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,IAAI,EACpB,OAAO,CAAC,EAAE,sBAAsB,KAC7B,eAAe,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACrC"}
@@ -16,6 +16,25 @@ import {
16
16
  * }} ExprRefFunction
17
17
  */
18
18
 
19
+ /**
20
+ * @typedef {{
21
+ * scopeOwned?: boolean,
22
+ * registerDisposer?: (disposer: () => void) => void
23
+ * }} WatchExpressionOptions
24
+ */
25
+
26
+ /**
27
+ * @typedef {{
28
+ * createExpression: (expr: string) => ExprRefFunction,
29
+ * watchExpression?: (
30
+ * expr: string,
31
+ * listener: () => void,
32
+ * options?: WatchExpressionOptions
33
+ * ) => ExprRefFunction,
34
+ * whenPropagated?: () => Promise<void>
35
+ * }} ExprRefRuntime
36
+ */
37
+
19
38
  /**
20
39
  * @param {any} x
21
40
  * @returns {x is import("../spec/parameter.js").ExprRef}
@@ -133,7 +152,7 @@ export function getDefaultParamValue(param, paramRuntime, exprFn) {
133
152
  * ExprRefs to getters and setups a listener that is called when any of the
134
153
  * expressions (upstream parameters) change.
135
154
  *
136
- * @param {{ createExpression: (expr: string) => ExprRefFunction, watchExpression?: (expr: string, listener: () => void, options?: { scopeOwned?: boolean, registerDisposer?: (disposer: () => void) => void }) => ExprRefFunction, whenPropagated?: () => Promise<void> }} paramRuntime
155
+ * @param {ExprRefRuntime} paramRuntime
137
156
  * @param {T} props The properties object
138
157
  * @param {(props: ReadonlySet<keyof T>) => void} [listener] Listener to be called when any of the expressions change
139
158
  * @param {(disposer: () => void) => void} [registerDisposer]
@@ -254,6 +273,47 @@ export function activateExprRefProps(
254
273
  return /** @type {T} */ (activatedProps);
255
274
  }
256
275
 
276
+ /**
277
+ * Resolves a literal or ExprRef for properties that may be parameterized during
278
+ * view construction but are not safe to update reactively. This is intended for
279
+ * structural options, such as layout regions or view ownership, where a later
280
+ * value change would require rebuilding part of the view hierarchy. ExprRefs
281
+ * are evaluated once and subscribed with a fail-fast listener.
282
+ *
283
+ * @param {ExprRefRuntime} paramRuntime
284
+ * @param {T | import("../spec/parameter.js").ExprRef} value
285
+ * @param {string} errorMessage Error thrown if an ExprRef changes after initialization
286
+ * @param {(disposer: () => void) => void} [registerDisposer]
287
+ * @returns {T}
288
+ * @template T
289
+ */
290
+ export function resolveInitOnlyExprRef(
291
+ paramRuntime,
292
+ value,
293
+ errorMessage,
294
+ registerDisposer
295
+ ) {
296
+ if (!isExprRef(value)) {
297
+ return value;
298
+ }
299
+
300
+ const throwUnsupportedChange = () => {
301
+ throw new Error(errorMessage);
302
+ };
303
+ const fn = paramRuntime.watchExpression
304
+ ? paramRuntime.watchExpression(value.expr, throwUnsupportedChange, {
305
+ scopeOwned: false,
306
+ registerDisposer,
307
+ })
308
+ : paramRuntime.createExpression(value.expr);
309
+ if (!paramRuntime.watchExpression) {
310
+ const unsubscribe = fn.subscribe(throwUnsupportedChange);
311
+ registerDisposer?.(unsubscribe);
312
+ }
313
+
314
+ return fn();
315
+ }
316
+
257
317
  /**
258
318
  * Creates a function that always returns the same value.
259
319
  *
@@ -1,3 +1,18 @@
1
+ /**
2
+ * @typedef {object} ViewParamRuntimeDebugState
3
+ * @prop {string} scopeId
4
+ * @prop {boolean} disposed
5
+ * @prop {ViewParamDebugState[]} params
6
+ */
7
+ /**
8
+ * @typedef {object} ViewParamDebugState
9
+ * @prop {string} name
10
+ * @prop {"auto" | "base" | "derived" | "selection" | "push"} kind
11
+ * @prop {any} value
12
+ * @prop {boolean} writable
13
+ * @prop {boolean} configured
14
+ * @prop {import("../spec/parameter.js").Parameter | undefined} config
15
+ */
1
16
  /**
2
17
  * A class that manages parameters and expressions.
3
18
  * Supports nesting and scoped parameters through a shared runtime graph.
@@ -97,6 +112,10 @@ export default class ViewParamRuntime {
97
112
  * @returns {ViewParamRuntime}
98
113
  */
99
114
  findRuntimeForParam(paramName: string): ViewParamRuntime;
115
+ /**
116
+ * @returns {ViewParamRuntimeDebugState}
117
+ */
118
+ getDebugState(): ViewParamRuntimeDebugState;
100
119
  /**
101
120
  * Parse expr and return a function that returns the value of the parameter.
102
121
  *
@@ -168,6 +187,19 @@ export default class ViewParamRuntime {
168
187
  hasPointSelections(): boolean;
169
188
  #private;
170
189
  }
190
+ export type ViewParamRuntimeDebugState = {
191
+ scopeId: string;
192
+ disposed: boolean;
193
+ params: ViewParamDebugState[];
194
+ };
195
+ export type ViewParamDebugState = {
196
+ name: string;
197
+ kind: "auto" | "base" | "derived" | "selection" | "push";
198
+ value: any;
199
+ writable: boolean;
200
+ configured: boolean;
201
+ config: import("../spec/parameter.js").Parameter | undefined;
202
+ };
171
203
  /**
172
204
  * A class that manages parameters and expressions.
173
205
  * Supports nesting and scoped parameters through a shared runtime graph.
@@ -1 +1 @@
1
- {"version":3,"file":"viewParamRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/viewParamRuntime.js"],"names":[],"mappings":"AAmBA;;;;;;;;GAQG;AACH;IAwCI;;;;;;OAMG;IACH,2BANW,MAAM,gBAAgB,4BACtB,CAAC,OAAO,EAAE,OAAO,oBAAoB,EAAE,gBAAgB,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,EAkBhI;IAED;;;;;;;;;;;OAWG;IACH,wEAvEqB,GAAG,KAAK,IAAI,CAkKhC;IAED;;;;;;;OAOG;IACH,eAFa,CAAC,aAJH,MAAM,gBACN,CAAC,YACD,OAAO,GACL,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAgC9B;IAED;;;;;;;;OAQG;IACH,oBAHW,MAAM,SACN,GAAG,QAWb;IAED;;;OAGG;IACH,oBAFW,MAAM,OAIhB;IAED;;;;;;;;OAQG;IACH,qBAJW,MAAM,YACN,MAAM,IAAI,GACR,MAAM,IAAI,CAiBtB;IAED;;;OAGG;IACH,qBAFW,MAAM,OAKhB;IAED;;OAEG;IACH,oBACsB,WAAW,CAAC,MAAM,2CAAY,CAGnD;IAED;;;;;OAKG;IACH,yBAHW,MAAM,GACJ,OAAO,CAKnB;IAED;;;;;;;;;;OAUG;IACH,0CAHW,MAAM,GACJ,OAAO,CAanB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,gBAAgB,CAQ5B;IAKD;;;;OAIG;IACH,uBAFW,MAAM,wCAMhB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,sBALW,MAAM,YACN,MAAM,IAAI;;;;;;;qBA3VX,OAAO;;;;;;2BAKP,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI;QAwV3B,eAAe,CAY3B;IA0BD;;;;OAIG;IACH,qBAFW,MAAM,OAKhB;IAED;;;;OAIG;IACH,iBAJa,CAAC,MACH,MAAM,CAAC,GACL,CAAC,CAIb;IAED,iBAEC;IAED;;;;;OAKG;IACH,yBAFW;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,iBAItD;IAED,gBAUC;IAED;;;;;OAKG;IACH,sBAFa,OAAO,CAiBnB;;CACJ;;;;;;;;8BA9cY,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,MAAM,CAAA;CAAC"}
1
+ {"version":3,"file":"viewParamRuntime.d.ts","sourceRoot":"","sources":["../../../src/paramRuntime/viewParamRuntime.js"],"names":[],"mappings":"AAmBA;;;;;GAKG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;GAQG;AACH;IAwCI;;;;;;OAMG;IACH,2BANW,MAAM,gBAAgB,4BACtB,CAAC,OAAO,EAAE,OAAO,oBAAoB,EAAE,gBAAgB,KAAK,OAAO,8BAA8B,EAAE,OAAO,GAAG,SAAS,EAkBhI;IAED;;;;;;;;;;;OAWG;IACH,wEAvEqB,GAAG,KAAK,IAAI,CAkKhC;IAED;;;;;;;OAOG;IACH,eAFa,CAAC,aAJH,MAAM,gBACN,CAAC,YACD,OAAO,GACL,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAgC9B;IAED;;;;;;;;OAQG;IACH,oBAHW,MAAM,SACN,GAAG,QAWb;IAED;;;OAGG;IACH,oBAFW,MAAM,OAIhB;IAED;;;;;;;;OAQG;IACH,qBAJW,MAAM,YACN,MAAM,IAAI,GACR,MAAM,IAAI,CAiBtB;IAED;;;OAGG;IACH,qBAFW,MAAM,OAKhB;IAED;;OAEG;IACH,oBACsB,WAAW,CAAC,MAAM,2CAAY,CAGnD;IAED;;;;;OAKG;IACH,yBAHW,MAAM,GACJ,OAAO,CAKnB;IAED;;;;;;;;;;OAUG;IACH,0CAHW,MAAM,GACJ,OAAO,CAanB;IAED;;;;OAIG;IACH,+BAHW,MAAM,GACJ,gBAAgB,CAQ5B;IAED;;OAEG;IACH,iBAFa,0BAA0B,CAuBtC;IAKD;;;;OAIG;IACH,uBAFW,MAAM,wCAMhB;IAED;;;;;;;;;;;;;;;;OAgBG;IACH,sBALW,MAAM,YACN,MAAM,IAAI;;;;;;;qBArXX,OAAO;;;;;;2BAKP,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI;QAkX3B,eAAe,CAY3B;IA0BD;;;;OAIG;IACH,qBAFW,MAAM,OAKhB;IAED;;;;OAIG;IACH,iBAJa,CAAC,MACH,MAAM,CAAC,GACL,CAAC,CAIb;IAED,iBAEC;IAED;;;;;OAKG;IACH,yBAFW;QAAE,MAAM,CAAC,EAAE,WAAW,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,iBAItD;IAED,gBAUC;IAED;;;;;OAKG;IACH,sBAFa,OAAO,CAiBnB;;CACJ;;aA9fS,MAAM;cACN,OAAO;YACP,mBAAmB,EAAE;;;UAKrB,MAAM;UACN,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM;WAClD,GAAG;cACH,OAAO;gBACP,OAAO;YACP,OAAO,sBAAsB,EAAE,SAAS,GAAG,SAAS;;;;;;;;;8BAUjD,OAAO,wBAAwB,EAAE,kBAAkB,GAAG;IAAE,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,MAAM,CAAA;CAAC"}