@veritone-ce/design-system 2.8.13-next.1 → 2.8.13

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 (694) hide show
  1. package/dist/cjs/Dialog/components.js +90 -29
  2. package/dist/cjs/Dialog/state.js +8 -2
  3. package/dist/cjs/Dialog/styles.module.scss.js +2 -2
  4. package/dist/cjs/FileUploader/controlled.js +0 -7
  5. package/dist/cjs/Menu/controlled.js +77 -2
  6. package/dist/cjs/Select/controlled.js +3 -0
  7. package/dist/cjs/Table/AutoTable/controlled.js +1 -2
  8. package/dist/cjs/Table/AutoTable/styles.module.scss.js +1 -1
  9. package/dist/cjs/TablePagination/index.js +8 -21
  10. package/dist/cjs/index.js +0 -11
  11. package/dist/cjs/styles/createPalette.js +0 -11
  12. package/dist/cjs/styles.css +1 -1
  13. package/dist/cjs/unstable/Card/index.js +33 -0
  14. package/dist/cjs/unstable/Card/styles.module.scss.js +1 -1
  15. package/dist/cjs/unstable/index.js +13 -39
  16. package/dist/esm/Dialog/components.js +89 -28
  17. package/dist/esm/Dialog/state.js +8 -2
  18. package/dist/esm/Dialog/styles.module.scss.js +2 -2
  19. package/dist/esm/FileUploader/controlled.js +0 -7
  20. package/dist/esm/Menu/controlled.js +77 -2
  21. package/dist/esm/Select/controlled.js +3 -0
  22. package/dist/esm/Table/AutoTable/controlled.js +1 -2
  23. package/dist/esm/Table/AutoTable/styles.module.scss.js +1 -1
  24. package/dist/esm/TablePagination/index.js +8 -21
  25. package/dist/esm/index.js +1 -1
  26. package/dist/esm/styles/createPalette.js +1 -1
  27. package/dist/esm/styles.css +1 -1
  28. package/dist/esm/unstable/Card/index.js +29 -0
  29. package/dist/esm/unstable/Card/styles.module.scss.js +1 -1
  30. package/dist/esm/unstable/index.js +1 -5
  31. package/dist/types/Dialog/components.d.ts +20 -27
  32. package/dist/types/Dialog/factory.d.ts +5 -4
  33. package/dist/types/Dialog/state.d.ts +15 -1
  34. package/dist/types/Menu/controlled.d.ts +9 -1
  35. package/dist/types/Select/types.d.ts +8 -0
  36. package/dist/types/TablePagination/index.d.ts +1 -1
  37. package/dist/types/styles/createPalette.d.ts +2 -13
  38. package/dist/types/unstable/Card/index.d.ts +11 -2
  39. package/dist/types/unstable/extras/chart/index.d.ts +33 -15
  40. package/dist/types/unstable/index.d.ts +0 -3
  41. package/package.json +7 -1
  42. package/dist/cjs/bundled_modules/d3-array/src/ascending.js +0 -9
  43. package/dist/cjs/bundled_modules/d3-array/src/bisect.js +0 -16
  44. package/dist/cjs/bundled_modules/d3-array/src/bisector.js +0 -62
  45. package/dist/cjs/bundled_modules/d3-array/src/descending.js +0 -13
  46. package/dist/cjs/bundled_modules/d3-array/src/deviation.js +0 -12
  47. package/dist/cjs/bundled_modules/d3-array/src/fsum.js +0 -45
  48. package/dist/cjs/bundled_modules/d3-array/src/intersection.js +0 -25
  49. package/dist/cjs/bundled_modules/d3-array/src/max.js +0 -26
  50. package/dist/cjs/bundled_modules/d3-array/src/mean.js +0 -25
  51. package/dist/cjs/bundled_modules/d3-array/src/median.js +0 -11
  52. package/dist/cjs/bundled_modules/d3-array/src/merge.js +0 -15
  53. package/dist/cjs/bundled_modules/d3-array/src/min.js +0 -26
  54. package/dist/cjs/bundled_modules/d3-array/src/number.js +0 -27
  55. package/dist/cjs/bundled_modules/d3-array/src/permute.js +0 -9
  56. package/dist/cjs/bundled_modules/d3-array/src/quantile.js +0 -36
  57. package/dist/cjs/bundled_modules/d3-array/src/quickselect.js +0 -59
  58. package/dist/cjs/bundled_modules/d3-array/src/range.js +0 -19
  59. package/dist/cjs/bundled_modules/d3-array/src/sort.js +0 -20
  60. package/dist/cjs/bundled_modules/d3-array/src/sum.js +0 -17
  61. package/dist/cjs/bundled_modules/d3-array/src/ticks.js +0 -63
  62. package/dist/cjs/bundled_modules/d3-array/src/union.js +0 -17
  63. package/dist/cjs/bundled_modules/d3-array/src/variance.js +0 -31
  64. package/dist/cjs/bundled_modules/d3-color/src/color.js +0 -410
  65. package/dist/cjs/bundled_modules/d3-color/src/cubehelix.js +0 -68
  66. package/dist/cjs/bundled_modules/d3-color/src/define.js +0 -17
  67. package/dist/cjs/bundled_modules/d3-color/src/lab.js +0 -124
  68. package/dist/cjs/bundled_modules/d3-color/src/math.js +0 -7
  69. package/dist/cjs/bundled_modules/d3-delaunay/src/delaunay.js +0 -254
  70. package/dist/cjs/bundled_modules/d3-delaunay/src/path.js +0 -43
  71. package/dist/cjs/bundled_modules/d3-delaunay/src/polygon.js +0 -23
  72. package/dist/cjs/bundled_modules/d3-delaunay/src/voronoi.js +0 -338
  73. package/dist/cjs/bundled_modules/d3-dispatch/src/dispatch.js +0 -88
  74. package/dist/cjs/bundled_modules/d3-dsv/src/dsv.js +0 -170
  75. package/dist/cjs/bundled_modules/d3-force/src/center.js +0 -46
  76. package/dist/cjs/bundled_modules/d3-force/src/collide.js +0 -106
  77. package/dist/cjs/bundled_modules/d3-force/src/constant.js +0 -11
  78. package/dist/cjs/bundled_modules/d3-force/src/jiggle.js +0 -9
  79. package/dist/cjs/bundled_modules/d3-force/src/lcg.js +0 -15
  80. package/dist/cjs/bundled_modules/d3-force/src/link.js +0 -123
  81. package/dist/cjs/bundled_modules/d3-force/src/manyBody.js +0 -122
  82. package/dist/cjs/bundled_modules/d3-force/src/simulation.js +0 -164
  83. package/dist/cjs/bundled_modules/d3-force/src/x.js +0 -47
  84. package/dist/cjs/bundled_modules/d3-force/src/y.js +0 -47
  85. package/dist/cjs/bundled_modules/d3-format/src/defaultLocale.js +0 -24
  86. package/dist/cjs/bundled_modules/d3-format/src/exponent.js +0 -11
  87. package/dist/cjs/bundled_modules/d3-format/src/formatDecimal.js +0 -27
  88. package/dist/cjs/bundled_modules/d3-format/src/formatGroup.js +0 -24
  89. package/dist/cjs/bundled_modules/d3-format/src/formatNumerals.js +0 -13
  90. package/dist/cjs/bundled_modules/d3-format/src/formatPrefixAuto.js +0 -22
  91. package/dist/cjs/bundled_modules/d3-format/src/formatRounded.js +0 -17
  92. package/dist/cjs/bundled_modules/d3-format/src/formatSpecifier.js +0 -54
  93. package/dist/cjs/bundled_modules/d3-format/src/formatTrim.js +0 -17
  94. package/dist/cjs/bundled_modules/d3-format/src/formatTypes.js +0 -25
  95. package/dist/cjs/bundled_modules/d3-format/src/identity.js +0 -9
  96. package/dist/cjs/bundled_modules/d3-format/src/locale.js +0 -154
  97. package/dist/cjs/bundled_modules/d3-format/src/precisionFixed.js +0 -11
  98. package/dist/cjs/bundled_modules/d3-format/src/precisionPrefix.js +0 -11
  99. package/dist/cjs/bundled_modules/d3-format/src/precisionRound.js +0 -12
  100. package/dist/cjs/bundled_modules/d3-geo/src/area.js +0 -83
  101. package/dist/cjs/bundled_modules/d3-geo/src/bounds.js +0 -185
  102. package/dist/cjs/bundled_modules/d3-geo/src/cartesian.js +0 -43
  103. package/dist/cjs/bundled_modules/d3-geo/src/centroid.js +0 -149
  104. package/dist/cjs/bundled_modules/d3-geo/src/circle.js +0 -35
  105. package/dist/cjs/bundled_modules/d3-geo/src/clip/antimeridian.js +0 -98
  106. package/dist/cjs/bundled_modules/d3-geo/src/clip/buffer.js +0 -30
  107. package/dist/cjs/bundled_modules/d3-geo/src/clip/circle.js +0 -183
  108. package/dist/cjs/bundled_modules/d3-geo/src/clip/index.js +0 -137
  109. package/dist/cjs/bundled_modules/d3-geo/src/clip/line.js +0 -65
  110. package/dist/cjs/bundled_modules/d3-geo/src/clip/rectangle.js +0 -174
  111. package/dist/cjs/bundled_modules/d3-geo/src/clip/rejoin.js +0 -109
  112. package/dist/cjs/bundled_modules/d3-geo/src/compose.js +0 -18
  113. package/dist/cjs/bundled_modules/d3-geo/src/graticule.js +0 -107
  114. package/dist/cjs/bundled_modules/d3-geo/src/identity.js +0 -7
  115. package/dist/cjs/bundled_modules/d3-geo/src/math.js +0 -57
  116. package/dist/cjs/bundled_modules/d3-geo/src/noop.js +0 -7
  117. package/dist/cjs/bundled_modules/d3-geo/src/path/area.js +0 -54
  118. package/dist/cjs/bundled_modules/d3-geo/src/path/bounds.js +0 -32
  119. package/dist/cjs/bundled_modules/d3-geo/src/path/centroid.js +0 -104
  120. package/dist/cjs/bundled_modules/d3-geo/src/path/context.js +0 -51
  121. package/dist/cjs/bundled_modules/d3-geo/src/path/index.js +0 -82
  122. package/dist/cjs/bundled_modules/d3-geo/src/path/measure.js +0 -49
  123. package/dist/cjs/bundled_modules/d3-geo/src/path/string.js +0 -92
  124. package/dist/cjs/bundled_modules/d3-geo/src/pointEqual.js +0 -11
  125. package/dist/cjs/bundled_modules/d3-geo/src/polygonContains.js +0 -80
  126. package/dist/cjs/bundled_modules/d3-geo/src/projection/albers.js +0 -16
  127. package/dist/cjs/bundled_modules/d3-geo/src/projection/albersUsa.js +0 -117
  128. package/dist/cjs/bundled_modules/d3-geo/src/projection/azimuthal.js +0 -32
  129. package/dist/cjs/bundled_modules/d3-geo/src/projection/azimuthalEqualArea.js +0 -24
  130. package/dist/cjs/bundled_modules/d3-geo/src/projection/azimuthalEquidistant.js +0 -24
  131. package/dist/cjs/bundled_modules/d3-geo/src/projection/conic.js +0 -19
  132. package/dist/cjs/bundled_modules/d3-geo/src/projection/conicConformal.js +0 -45
  133. package/dist/cjs/bundled_modules/d3-geo/src/projection/conicEqualArea.js +0 -40
  134. package/dist/cjs/bundled_modules/d3-geo/src/projection/conicEquidistant.js +0 -39
  135. package/dist/cjs/bundled_modules/d3-geo/src/projection/cylindricalEqualArea.js +0 -19
  136. package/dist/cjs/bundled_modules/d3-geo/src/projection/equalEarth.js +0 -43
  137. package/dist/cjs/bundled_modules/d3-geo/src/projection/equirectangular.js +0 -19
  138. package/dist/cjs/bundled_modules/d3-geo/src/projection/fit.js +0 -54
  139. package/dist/cjs/bundled_modules/d3-geo/src/projection/gnomonic.js +0 -23
  140. package/dist/cjs/bundled_modules/d3-geo/src/projection/identity.js +0 -91
  141. package/dist/cjs/bundled_modules/d3-geo/src/projection/index.js +0 -184
  142. package/dist/cjs/bundled_modules/d3-geo/src/projection/mercator.js +0 -60
  143. package/dist/cjs/bundled_modules/d3-geo/src/projection/naturalEarth1.js +0 -35
  144. package/dist/cjs/bundled_modules/d3-geo/src/projection/orthographic.js +0 -22
  145. package/dist/cjs/bundled_modules/d3-geo/src/projection/resample.js +0 -108
  146. package/dist/cjs/bundled_modules/d3-geo/src/projection/stereographic.js +0 -25
  147. package/dist/cjs/bundled_modules/d3-geo/src/projection/transverseMercator.js +0 -34
  148. package/dist/cjs/bundled_modules/d3-geo/src/rotation.js +0 -86
  149. package/dist/cjs/bundled_modules/d3-geo/src/stream.js +0 -75
  150. package/dist/cjs/bundled_modules/d3-geo/src/transform.js +0 -24
  151. package/dist/cjs/bundled_modules/d3-geo-projection/src/math.js +0 -28
  152. package/dist/cjs/bundled_modules/d3-geo-projection/src/mollweide.js +0 -38
  153. package/dist/cjs/bundled_modules/d3-hierarchy/src/accessors.js +0 -13
  154. package/dist/cjs/bundled_modules/d3-hierarchy/src/array.js +0 -27
  155. package/dist/cjs/bundled_modules/d3-hierarchy/src/cluster.js +0 -90
  156. package/dist/cjs/bundled_modules/d3-hierarchy/src/constant.js +0 -16
  157. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/ancestors.js +0 -13
  158. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/count.js +0 -18
  159. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/descendants.js +0 -9
  160. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/each.js +0 -13
  161. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/eachAfter.js +0 -21
  162. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/eachBefore.js +0 -18
  163. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/find.js +0 -14
  164. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/index.js +0 -99
  165. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/iterator.js +0 -20
  166. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/leaves.js +0 -15
  167. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/links.js +0 -15
  168. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/path.js +0 -36
  169. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/sort.js +0 -13
  170. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/sum.js +0 -15
  171. package/dist/cjs/bundled_modules/d3-hierarchy/src/lcg.js +0 -15
  172. package/dist/cjs/bundled_modules/d3-hierarchy/src/pack/enclose.js +0 -122
  173. package/dist/cjs/bundled_modules/d3-hierarchy/src/pack/index.js +0 -87
  174. package/dist/cjs/bundled_modules/d3-hierarchy/src/pack/siblings.js +0 -118
  175. package/dist/cjs/bundled_modules/d3-hierarchy/src/partition.js +0 -58
  176. package/dist/cjs/bundled_modules/d3-hierarchy/src/stratify.js +0 -151
  177. package/dist/cjs/bundled_modules/d3-hierarchy/src/tree.js +0 -243
  178. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/binary.js +0 -52
  179. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/dice.js +0 -18
  180. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/index.js +0 -100
  181. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/resquarify.js +0 -42
  182. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/round.js +0 -12
  183. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/slice.js +0 -18
  184. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/sliceDice.js +0 -12
  185. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/squarify.js +0 -74
  186. package/dist/cjs/bundled_modules/d3-interpolate/src/array.js +0 -29
  187. package/dist/cjs/bundled_modules/d3-interpolate/src/basis.js +0 -26
  188. package/dist/cjs/bundled_modules/d3-interpolate/src/basisClosed.js +0 -19
  189. package/dist/cjs/bundled_modules/d3-interpolate/src/color.js +0 -37
  190. package/dist/cjs/bundled_modules/d3-interpolate/src/constant.js +0 -7
  191. package/dist/cjs/bundled_modules/d3-interpolate/src/cubehelix.js +0 -36
  192. package/dist/cjs/bundled_modules/d3-interpolate/src/date.js +0 -12
  193. package/dist/cjs/bundled_modules/d3-interpolate/src/discrete.js +0 -12
  194. package/dist/cjs/bundled_modules/d3-interpolate/src/hcl.js +0 -28
  195. package/dist/cjs/bundled_modules/d3-interpolate/src/hsl.js +0 -28
  196. package/dist/cjs/bundled_modules/d3-interpolate/src/hue.js +0 -15
  197. package/dist/cjs/bundled_modules/d3-interpolate/src/index.js +0 -53
  198. package/dist/cjs/bundled_modules/d3-interpolate/src/lab.js +0 -22
  199. package/dist/cjs/bundled_modules/d3-interpolate/src/number.js +0 -11
  200. package/dist/cjs/bundled_modules/d3-interpolate/src/numberArray.js +0 -21
  201. package/dist/cjs/bundled_modules/d3-interpolate/src/object.js +0 -29
  202. package/dist/cjs/bundled_modules/d3-interpolate/src/piecewise.js +0 -17
  203. package/dist/cjs/bundled_modules/d3-interpolate/src/quantize.js +0 -11
  204. package/dist/cjs/bundled_modules/d3-interpolate/src/rgb.js +0 -63
  205. package/dist/cjs/bundled_modules/d3-interpolate/src/round.js +0 -11
  206. package/dist/cjs/bundled_modules/d3-interpolate/src/string.js +0 -70
  207. package/dist/cjs/bundled_modules/d3-interpolate/src/transform/decompose.js +0 -33
  208. package/dist/cjs/bundled_modules/d3-interpolate/src/transform/index.js +0 -68
  209. package/dist/cjs/bundled_modules/d3-interpolate/src/transform/parse.js +0 -23
  210. package/dist/cjs/bundled_modules/d3-interpolate/src/value.js +0 -28
  211. package/dist/cjs/bundled_modules/d3-interpolate/src/zoom.js +0 -77
  212. package/dist/cjs/bundled_modules/d3-path/src/path.js +0 -157
  213. package/dist/cjs/bundled_modules/d3-quadtree/src/add.js +0 -91
  214. package/dist/cjs/bundled_modules/d3-quadtree/src/cover.js +0 -49
  215. package/dist/cjs/bundled_modules/d3-quadtree/src/data.js +0 -13
  216. package/dist/cjs/bundled_modules/d3-quadtree/src/extent.js +0 -11
  217. package/dist/cjs/bundled_modules/d3-quadtree/src/find.js +0 -76
  218. package/dist/cjs/bundled_modules/d3-quadtree/src/quad.js +0 -13
  219. package/dist/cjs/bundled_modules/d3-quadtree/src/quadtree.js +0 -79
  220. package/dist/cjs/bundled_modules/d3-quadtree/src/remove.js +0 -69
  221. package/dist/cjs/bundled_modules/d3-quadtree/src/root.js +0 -9
  222. package/dist/cjs/bundled_modules/d3-quadtree/src/size.js +0 -13
  223. package/dist/cjs/bundled_modules/d3-quadtree/src/visit.js +0 -22
  224. package/dist/cjs/bundled_modules/d3-quadtree/src/visitAfter.js +0 -27
  225. package/dist/cjs/bundled_modules/d3-quadtree/src/x.js +0 -14
  226. package/dist/cjs/bundled_modules/d3-quadtree/src/y.js +0 -14
  227. package/dist/cjs/bundled_modules/d3-scale/src/constant.js +0 -11
  228. package/dist/cjs/bundled_modules/d3-scale/src/continuous.js +0 -136
  229. package/dist/cjs/bundled_modules/d3-scale/src/diverging.js +0 -116
  230. package/dist/cjs/bundled_modules/d3-scale/src/identity.js +0 -34
  231. package/dist/cjs/bundled_modules/d3-scale/src/init.js +0 -31
  232. package/dist/cjs/bundled_modules/d3-scale/src/linear.js +0 -77
  233. package/dist/cjs/bundled_modules/d3-scale/src/log.js +0 -148
  234. package/dist/cjs/bundled_modules/d3-scale/src/nice.js +0 -24
  235. package/dist/cjs/bundled_modules/d3-scale/src/number.js +0 -9
  236. package/dist/cjs/bundled_modules/d3-scale/src/ordinal.js +0 -53
  237. package/dist/cjs/bundled_modules/d3-scale/src/pow.js +0 -58
  238. package/dist/cjs/bundled_modules/d3-scale/src/quantile.js +0 -65
  239. package/dist/cjs/bundled_modules/d3-scale/src/quantize.js +0 -62
  240. package/dist/cjs/bundled_modules/d3-scale/src/sequential.js +0 -119
  241. package/dist/cjs/bundled_modules/d3-scale/src/symlog.js +0 -42
  242. package/dist/cjs/bundled_modules/d3-scale/src/threshold.js +0 -45
  243. package/dist/cjs/bundled_modules/d3-scale/src/tickFormat.js +0 -39
  244. package/dist/cjs/bundled_modules/d3-scale/src/time.js +0 -85
  245. package/dist/cjs/bundled_modules/d3-scale/src/utcTime.js +0 -21
  246. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Accent.js +0 -9
  247. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Dark2.js +0 -9
  248. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Paired.js +0 -9
  249. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Pastel1.js +0 -9
  250. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Pastel2.js +0 -9
  251. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Set1.js +0 -9
  252. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Set2.js +0 -9
  253. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Set3.js +0 -9
  254. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/category10.js +0 -9
  255. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/observable10.js +0 -9
  256. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/colors.js +0 -11
  257. package/dist/cjs/bundled_modules/d3-shape/src/arc.js +0 -274
  258. package/dist/cjs/bundled_modules/d3-shape/src/area.js +0 -118
  259. package/dist/cjs/bundled_modules/d3-shape/src/array.js +0 -11
  260. package/dist/cjs/bundled_modules/d3-shape/src/constant.js +0 -11
  261. package/dist/cjs/bundled_modules/d3-shape/src/curve/basis.js +0 -59
  262. package/dist/cjs/bundled_modules/d3-shape/src/curve/basisClosed.js +0 -58
  263. package/dist/cjs/bundled_modules/d3-shape/src/curve/basisOpen.js +0 -45
  264. package/dist/cjs/bundled_modules/d3-shape/src/curve/bundle.js +0 -62
  265. package/dist/cjs/bundled_modules/d3-shape/src/curve/cardinal.js +0 -69
  266. package/dist/cjs/bundled_modules/d3-shape/src/curve/cardinalClosed.js +0 -68
  267. package/dist/cjs/bundled_modules/d3-shape/src/curve/cardinalOpen.js +0 -56
  268. package/dist/cjs/bundled_modules/d3-shape/src/curve/catmullRom.js +0 -95
  269. package/dist/cjs/bundled_modules/d3-shape/src/curve/catmullRomClosed.js +0 -80
  270. package/dist/cjs/bundled_modules/d3-shape/src/curve/catmullRomOpen.js +0 -68
  271. package/dist/cjs/bundled_modules/d3-shape/src/curve/linear.js +0 -37
  272. package/dist/cjs/bundled_modules/d3-shape/src/curve/linearClosed.js +0 -31
  273. package/dist/cjs/bundled_modules/d3-shape/src/curve/monotone.js +0 -109
  274. package/dist/cjs/bundled_modules/d3-shape/src/curve/natural.js +0 -71
  275. package/dist/cjs/bundled_modules/d3-shape/src/curve/step.js +0 -61
  276. package/dist/cjs/bundled_modules/d3-shape/src/line.js +0 -64
  277. package/dist/cjs/bundled_modules/d3-shape/src/math.js +0 -36
  278. package/dist/cjs/bundled_modules/d3-shape/src/noop.js +0 -7
  279. package/dist/cjs/bundled_modules/d3-shape/src/path.js +0 -23
  280. package/dist/cjs/bundled_modules/d3-shape/src/point.js +0 -12
  281. package/dist/cjs/bundled_modules/d3-shape/src/symbol/circle.js +0 -15
  282. package/dist/cjs/bundled_modules/d3-shape/src/symbol.js +0 -38
  283. package/dist/cjs/bundled_modules/d3-time/src/day.js +0 -41
  284. package/dist/cjs/bundled_modules/d3-time/src/duration.js +0 -17
  285. package/dist/cjs/bundled_modules/d3-time/src/hour.js +0 -31
  286. package/dist/cjs/bundled_modules/d3-time/src/interval.js +0 -73
  287. package/dist/cjs/bundled_modules/d3-time/src/millisecond.js +0 -29
  288. package/dist/cjs/bundled_modules/d3-time/src/minute.js +0 -31
  289. package/dist/cjs/bundled_modules/d3-time/src/month.js +0 -32
  290. package/dist/cjs/bundled_modules/d3-time/src/second.js +0 -18
  291. package/dist/cjs/bundled_modules/d3-time/src/ticks.js +0 -64
  292. package/dist/cjs/bundled_modules/d3-time/src/week.js +0 -73
  293. package/dist/cjs/bundled_modules/d3-time/src/year.js +0 -54
  294. package/dist/cjs/bundled_modules/d3-time-format/src/defaultLocale.js +0 -33
  295. package/dist/cjs/bundled_modules/d3-time-format/src/locale.js +0 -694
  296. package/dist/cjs/bundled_modules/d3-timer/src/interval.js +0 -23
  297. package/dist/cjs/bundled_modules/d3-timer/src/timer.js +0 -117
  298. package/dist/cjs/bundled_modules/delaunator/index.js +0 -485
  299. package/dist/cjs/bundled_modules/internmap/src/index.js +0 -66
  300. package/dist/cjs/bundled_modules/json-stringify-pretty-compact/index.js +0 -104
  301. package/dist/cjs/bundled_modules/robust-predicates/esm/orient2d.js +0 -184
  302. package/dist/cjs/bundled_modules/robust-predicates/esm/util.js +0 -95
  303. package/dist/cjs/bundled_modules/topojson-client/src/feature.js +0 -77
  304. package/dist/cjs/bundled_modules/topojson-client/src/identity.js +0 -9
  305. package/dist/cjs/bundled_modules/topojson-client/src/mesh.js +0 -60
  306. package/dist/cjs/bundled_modules/topojson-client/src/reverse.js +0 -10
  307. package/dist/cjs/bundled_modules/topojson-client/src/stitch.js +0 -79
  308. package/dist/cjs/bundled_modules/topojson-client/src/transform.js +0 -25
  309. package/dist/cjs/bundled_modules/vega/build/vega.module.js +0 -272
  310. package/dist/cjs/bundled_modules/vega-canvas/build/vega-canvas.browser.js +0 -18
  311. package/dist/cjs/bundled_modules/vega-crossfilter/build/vega-crossfilter.js +0 -676
  312. package/dist/cjs/bundled_modules/vega-dataflow/build/vega-dataflow.js +0 -2102
  313. package/dist/cjs/bundled_modules/vega-embed/build/embed.js +0 -2939
  314. package/dist/cjs/bundled_modules/vega-encode/build/vega-encode.js +0 -962
  315. package/dist/cjs/bundled_modules/vega-event-selector/build/vega-event-selector.js +0 -192
  316. package/dist/cjs/bundled_modules/vega-expression/build/vega-expression.js +0 -1615
  317. package/dist/cjs/bundled_modules/vega-force/build/vega-force.js +0 -295
  318. package/dist/cjs/bundled_modules/vega-format/build/vega-format.js +0 -201
  319. package/dist/cjs/bundled_modules/vega-functions/build/vega-functions.js +0 -842
  320. package/dist/cjs/bundled_modules/vega-geo/build/vega-geo.js +0 -1333
  321. package/dist/cjs/bundled_modules/vega-hierarchy/build/vega-hierarchy.js +0 -580
  322. package/dist/cjs/bundled_modules/vega-interpreter/build/vega-interpreter.js +0 -310
  323. package/dist/cjs/bundled_modules/vega-label/build/vega-label.js +0 -876
  324. package/dist/cjs/bundled_modules/vega-lite/build/index.js +0 -20157
  325. package/dist/cjs/bundled_modules/vega-loader/build/vega-loader.browser.js +0 -337
  326. package/dist/cjs/bundled_modules/vega-parser/build/vega-parser.js +0 -3805
  327. package/dist/cjs/bundled_modules/vega-projection/build/vega-projection.js +0 -90
  328. package/dist/cjs/bundled_modules/vega-regression/build/vega-regression.js +0 -236
  329. package/dist/cjs/bundled_modules/vega-runtime/build/vega-runtime.js +0 -588
  330. package/dist/cjs/bundled_modules/vega-scale/build/vega-scale.js +0 -846
  331. package/dist/cjs/bundled_modules/vega-scenegraph/build/vega-scenegraph.js +0 -5040
  332. package/dist/cjs/bundled_modules/vega-schema-url-parser/dist/parser.modern.js +0 -7
  333. package/dist/cjs/bundled_modules/vega-selections/build/vega-selection.js +0 -342
  334. package/dist/cjs/bundled_modules/vega-statistics/build/vega-statistics.js +0 -1193
  335. package/dist/cjs/bundled_modules/vega-themes/build/index.js +0 -853
  336. package/dist/cjs/bundled_modules/vega-time/build/vega-time.js +0 -342
  337. package/dist/cjs/bundled_modules/vega-tooltip/build/index.js +0 -353
  338. package/dist/cjs/bundled_modules/vega-transforms/build/vega-transforms.js +0 -3781
  339. package/dist/cjs/bundled_modules/vega-util/build/vega-util.js +0 -824
  340. package/dist/cjs/bundled_modules/vega-view/build/vega-view.js +0 -1306
  341. package/dist/cjs/bundled_modules/vega-view-transforms/build/vega-view-transforms.js +0 -1313
  342. package/dist/cjs/bundled_modules/vega-voronoi/build/vega-voronoi.js +0 -80
  343. package/dist/cjs/bundled_modules/vega-wordcloud/build/vega-wordcloud.js +0 -540
  344. package/dist/cjs/styles/entrypoint.scss.js +0 -7
  345. package/dist/cjs/unstable/Card/components.js +0 -213
  346. package/dist/cjs/unstable/Card/state.js +0 -53
  347. package/dist/cjs/unstable/StatCard/index.js +0 -124
  348. package/dist/cjs/unstable/StatCard/index.module.scss.js +0 -7
  349. package/dist/cjs/unstable/extras/chart/BarChart.js +0 -42
  350. package/dist/cjs/unstable/extras/chart/Chart.js +0 -100
  351. package/dist/cjs/unstable/extras/chart/DistributionChart.js +0 -84
  352. package/dist/cjs/unstable/extras/chart/DonutChart.js +0 -43
  353. package/dist/cjs/unstable/extras/chart/LineChart.js +0 -45
  354. package/dist/cjs/unstable/extras/chart/PieChart.js +0 -39
  355. package/dist/cjs/unstable/extras/chart/TimelineChart.js +0 -48
  356. package/dist/cjs/unstable/extras/chart/index.js +0 -23
  357. package/dist/cjs/unstable/skeleton/index.js +0 -74
  358. package/dist/cjs/unstable/skeleton/index.module.scss.js +0 -7
  359. package/dist/cjs/unstable/suspense/index.js +0 -18
  360. package/dist/cjs/unstable/suspense/index.module.scss.js +0 -7
  361. package/dist/cjs/unstable/suspense/loader.js +0 -23
  362. package/dist/esm/bundled_modules/d3-array/src/ascending.js +0 -5
  363. package/dist/esm/bundled_modules/d3-array/src/bisect.js +0 -10
  364. package/dist/esm/bundled_modules/d3-array/src/bisector.js +0 -58
  365. package/dist/esm/bundled_modules/d3-array/src/descending.js +0 -9
  366. package/dist/esm/bundled_modules/d3-array/src/deviation.js +0 -8
  367. package/dist/esm/bundled_modules/d3-array/src/fsum.js +0 -43
  368. package/dist/esm/bundled_modules/d3-array/src/intersection.js +0 -21
  369. package/dist/esm/bundled_modules/d3-array/src/max.js +0 -22
  370. package/dist/esm/bundled_modules/d3-array/src/mean.js +0 -21
  371. package/dist/esm/bundled_modules/d3-array/src/median.js +0 -7
  372. package/dist/esm/bundled_modules/d3-array/src/merge.js +0 -11
  373. package/dist/esm/bundled_modules/d3-array/src/min.js +0 -22
  374. package/dist/esm/bundled_modules/d3-array/src/number.js +0 -22
  375. package/dist/esm/bundled_modules/d3-array/src/permute.js +0 -5
  376. package/dist/esm/bundled_modules/d3-array/src/quantile.js +0 -31
  377. package/dist/esm/bundled_modules/d3-array/src/quickselect.js +0 -55
  378. package/dist/esm/bundled_modules/d3-array/src/range.js +0 -15
  379. package/dist/esm/bundled_modules/d3-array/src/sort.js +0 -17
  380. package/dist/esm/bundled_modules/d3-array/src/sum.js +0 -13
  381. package/dist/esm/bundled_modules/d3-array/src/ticks.js +0 -57
  382. package/dist/esm/bundled_modules/d3-array/src/union.js +0 -13
  383. package/dist/esm/bundled_modules/d3-array/src/variance.js +0 -27
  384. package/dist/esm/bundled_modules/d3-color/src/color.js +0 -398
  385. package/dist/esm/bundled_modules/d3-color/src/cubehelix.js +0 -63
  386. package/dist/esm/bundled_modules/d3-color/src/define.js +0 -12
  387. package/dist/esm/bundled_modules/d3-color/src/lab.js +0 -117
  388. package/dist/esm/bundled_modules/d3-color/src/math.js +0 -4
  389. package/dist/esm/bundled_modules/d3-delaunay/src/delaunay.js +0 -250
  390. package/dist/esm/bundled_modules/d3-delaunay/src/path.js +0 -39
  391. package/dist/esm/bundled_modules/d3-delaunay/src/polygon.js +0 -19
  392. package/dist/esm/bundled_modules/d3-delaunay/src/voronoi.js +0 -334
  393. package/dist/esm/bundled_modules/d3-dispatch/src/dispatch.js +0 -84
  394. package/dist/esm/bundled_modules/d3-dsv/src/dsv.js +0 -166
  395. package/dist/esm/bundled_modules/d3-force/src/center.js +0 -42
  396. package/dist/esm/bundled_modules/d3-force/src/collide.js +0 -102
  397. package/dist/esm/bundled_modules/d3-force/src/constant.js +0 -7
  398. package/dist/esm/bundled_modules/d3-force/src/jiggle.js +0 -5
  399. package/dist/esm/bundled_modules/d3-force/src/lcg.js +0 -11
  400. package/dist/esm/bundled_modules/d3-force/src/link.js +0 -119
  401. package/dist/esm/bundled_modules/d3-force/src/manyBody.js +0 -118
  402. package/dist/esm/bundled_modules/d3-force/src/simulation.js +0 -158
  403. package/dist/esm/bundled_modules/d3-force/src/x.js +0 -43
  404. package/dist/esm/bundled_modules/d3-force/src/y.js +0 -43
  405. package/dist/esm/bundled_modules/d3-format/src/defaultLocale.js +0 -20
  406. package/dist/esm/bundled_modules/d3-format/src/exponent.js +0 -7
  407. package/dist/esm/bundled_modules/d3-format/src/formatDecimal.js +0 -22
  408. package/dist/esm/bundled_modules/d3-format/src/formatGroup.js +0 -20
  409. package/dist/esm/bundled_modules/d3-format/src/formatNumerals.js +0 -9
  410. package/dist/esm/bundled_modules/d3-format/src/formatPrefixAuto.js +0 -18
  411. package/dist/esm/bundled_modules/d3-format/src/formatRounded.js +0 -13
  412. package/dist/esm/bundled_modules/d3-format/src/formatSpecifier.js +0 -49
  413. package/dist/esm/bundled_modules/d3-format/src/formatTrim.js +0 -13
  414. package/dist/esm/bundled_modules/d3-format/src/formatTypes.js +0 -21
  415. package/dist/esm/bundled_modules/d3-format/src/identity.js +0 -5
  416. package/dist/esm/bundled_modules/d3-format/src/locale.js +0 -150
  417. package/dist/esm/bundled_modules/d3-format/src/precisionFixed.js +0 -7
  418. package/dist/esm/bundled_modules/d3-format/src/precisionPrefix.js +0 -7
  419. package/dist/esm/bundled_modules/d3-format/src/precisionRound.js +0 -8
  420. package/dist/esm/bundled_modules/d3-geo/src/area.js +0 -78
  421. package/dist/esm/bundled_modules/d3-geo/src/bounds.js +0 -181
  422. package/dist/esm/bundled_modules/d3-geo/src/cartesian.js +0 -35
  423. package/dist/esm/bundled_modules/d3-geo/src/centroid.js +0 -145
  424. package/dist/esm/bundled_modules/d3-geo/src/circle.js +0 -33
  425. package/dist/esm/bundled_modules/d3-geo/src/clip/antimeridian.js +0 -94
  426. package/dist/esm/bundled_modules/d3-geo/src/clip/buffer.js +0 -26
  427. package/dist/esm/bundled_modules/d3-geo/src/clip/circle.js +0 -179
  428. package/dist/esm/bundled_modules/d3-geo/src/clip/index.js +0 -133
  429. package/dist/esm/bundled_modules/d3-geo/src/clip/line.js +0 -61
  430. package/dist/esm/bundled_modules/d3-geo/src/clip/rectangle.js +0 -170
  431. package/dist/esm/bundled_modules/d3-geo/src/clip/rejoin.js +0 -105
  432. package/dist/esm/bundled_modules/d3-geo/src/compose.js +0 -14
  433. package/dist/esm/bundled_modules/d3-geo/src/graticule.js +0 -103
  434. package/dist/esm/bundled_modules/d3-geo/src/identity.js +0 -3
  435. package/dist/esm/bundled_modules/d3-geo/src/math.js +0 -33
  436. package/dist/esm/bundled_modules/d3-geo/src/noop.js +0 -3
  437. package/dist/esm/bundled_modules/d3-geo/src/path/area.js +0 -50
  438. package/dist/esm/bundled_modules/d3-geo/src/path/bounds.js +0 -28
  439. package/dist/esm/bundled_modules/d3-geo/src/path/centroid.js +0 -100
  440. package/dist/esm/bundled_modules/d3-geo/src/path/context.js +0 -47
  441. package/dist/esm/bundled_modules/d3-geo/src/path/index.js +0 -78
  442. package/dist/esm/bundled_modules/d3-geo/src/path/measure.js +0 -45
  443. package/dist/esm/bundled_modules/d3-geo/src/path/string.js +0 -88
  444. package/dist/esm/bundled_modules/d3-geo/src/pointEqual.js +0 -7
  445. package/dist/esm/bundled_modules/d3-geo/src/polygonContains.js +0 -76
  446. package/dist/esm/bundled_modules/d3-geo/src/projection/albers.js +0 -12
  447. package/dist/esm/bundled_modules/d3-geo/src/projection/albersUsa.js +0 -113
  448. package/dist/esm/bundled_modules/d3-geo/src/projection/azimuthal.js +0 -29
  449. package/dist/esm/bundled_modules/d3-geo/src/projection/azimuthalEqualArea.js +0 -19
  450. package/dist/esm/bundled_modules/d3-geo/src/projection/azimuthalEquidistant.js +0 -19
  451. package/dist/esm/bundled_modules/d3-geo/src/projection/conic.js +0 -17
  452. package/dist/esm/bundled_modules/d3-geo/src/projection/conicConformal.js +0 -40
  453. package/dist/esm/bundled_modules/d3-geo/src/projection/conicEqualArea.js +0 -35
  454. package/dist/esm/bundled_modules/d3-geo/src/projection/conicEquidistant.js +0 -34
  455. package/dist/esm/bundled_modules/d3-geo/src/projection/cylindricalEqualArea.js +0 -17
  456. package/dist/esm/bundled_modules/d3-geo/src/projection/equalEarth.js +0 -38
  457. package/dist/esm/bundled_modules/d3-geo/src/projection/equirectangular.js +0 -14
  458. package/dist/esm/bundled_modules/d3-geo/src/projection/fit.js +0 -49
  459. package/dist/esm/bundled_modules/d3-geo/src/projection/gnomonic.js +0 -18
  460. package/dist/esm/bundled_modules/d3-geo/src/projection/identity.js +0 -87
  461. package/dist/esm/bundled_modules/d3-geo/src/projection/index.js +0 -179
  462. package/dist/esm/bundled_modules/d3-geo/src/projection/mercator.js +0 -54
  463. package/dist/esm/bundled_modules/d3-geo/src/projection/naturalEarth1.js +0 -30
  464. package/dist/esm/bundled_modules/d3-geo/src/projection/orthographic.js +0 -17
  465. package/dist/esm/bundled_modules/d3-geo/src/projection/resample.js +0 -104
  466. package/dist/esm/bundled_modules/d3-geo/src/projection/stereographic.js +0 -20
  467. package/dist/esm/bundled_modules/d3-geo/src/projection/transverseMercator.js +0 -29
  468. package/dist/esm/bundled_modules/d3-geo/src/rotation.js +0 -81
  469. package/dist/esm/bundled_modules/d3-geo/src/stream.js +0 -71
  470. package/dist/esm/bundled_modules/d3-geo/src/transform.js +0 -22
  471. package/dist/esm/bundled_modules/d3-geo-projection/src/math.js +0 -18
  472. package/dist/esm/bundled_modules/d3-geo-projection/src/mollweide.js +0 -31
  473. package/dist/esm/bundled_modules/d3-hierarchy/src/accessors.js +0 -10
  474. package/dist/esm/bundled_modules/d3-hierarchy/src/array.js +0 -22
  475. package/dist/esm/bundled_modules/d3-hierarchy/src/cluster.js +0 -86
  476. package/dist/esm/bundled_modules/d3-hierarchy/src/constant.js +0 -11
  477. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/ancestors.js +0 -9
  478. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/count.js +0 -14
  479. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/descendants.js +0 -5
  480. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/each.js +0 -9
  481. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/eachAfter.js +0 -17
  482. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/eachBefore.js +0 -14
  483. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/find.js +0 -10
  484. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/index.js +0 -93
  485. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/iterator.js +0 -16
  486. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/leaves.js +0 -11
  487. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/links.js +0 -11
  488. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/path.js +0 -32
  489. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/sort.js +0 -9
  490. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/sum.js +0 -11
  491. package/dist/esm/bundled_modules/d3-hierarchy/src/lcg.js +0 -11
  492. package/dist/esm/bundled_modules/d3-hierarchy/src/pack/enclose.js +0 -120
  493. package/dist/esm/bundled_modules/d3-hierarchy/src/pack/index.js +0 -83
  494. package/dist/esm/bundled_modules/d3-hierarchy/src/pack/siblings.js +0 -116
  495. package/dist/esm/bundled_modules/d3-hierarchy/src/partition.js +0 -54
  496. package/dist/esm/bundled_modules/d3-hierarchy/src/stratify.js +0 -147
  497. package/dist/esm/bundled_modules/d3-hierarchy/src/tree.js +0 -239
  498. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/binary.js +0 -48
  499. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/dice.js +0 -14
  500. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/index.js +0 -96
  501. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/resquarify.js +0 -38
  502. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/round.js +0 -8
  503. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/slice.js +0 -14
  504. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/sliceDice.js +0 -8
  505. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/squarify.js +0 -68
  506. package/dist/esm/bundled_modules/d3-interpolate/src/array.js +0 -24
  507. package/dist/esm/bundled_modules/d3-interpolate/src/basis.js +0 -21
  508. package/dist/esm/bundled_modules/d3-interpolate/src/basisClosed.js +0 -15
  509. package/dist/esm/bundled_modules/d3-interpolate/src/color.js +0 -31
  510. package/dist/esm/bundled_modules/d3-interpolate/src/constant.js +0 -3
  511. package/dist/esm/bundled_modules/d3-interpolate/src/cubehelix.js +0 -31
  512. package/dist/esm/bundled_modules/d3-interpolate/src/date.js +0 -8
  513. package/dist/esm/bundled_modules/d3-interpolate/src/discrete.js +0 -8
  514. package/dist/esm/bundled_modules/d3-interpolate/src/hcl.js +0 -23
  515. package/dist/esm/bundled_modules/d3-interpolate/src/hsl.js +0 -23
  516. package/dist/esm/bundled_modules/d3-interpolate/src/hue.js +0 -11
  517. package/dist/esm/bundled_modules/d3-interpolate/src/index.js +0 -21
  518. package/dist/esm/bundled_modules/d3-interpolate/src/lab.js +0 -18
  519. package/dist/esm/bundled_modules/d3-interpolate/src/number.js +0 -7
  520. package/dist/esm/bundled_modules/d3-interpolate/src/numberArray.js +0 -16
  521. package/dist/esm/bundled_modules/d3-interpolate/src/object.js +0 -25
  522. package/dist/esm/bundled_modules/d3-interpolate/src/piecewise.js +0 -13
  523. package/dist/esm/bundled_modules/d3-interpolate/src/quantize.js +0 -7
  524. package/dist/esm/bundled_modules/d3-interpolate/src/rgb.js +0 -57
  525. package/dist/esm/bundled_modules/d3-interpolate/src/round.js +0 -7
  526. package/dist/esm/bundled_modules/d3-interpolate/src/string.js +0 -66
  527. package/dist/esm/bundled_modules/d3-interpolate/src/transform/decompose.js +0 -28
  528. package/dist/esm/bundled_modules/d3-interpolate/src/transform/index.js +0 -65
  529. package/dist/esm/bundled_modules/d3-interpolate/src/transform/parse.js +0 -20
  530. package/dist/esm/bundled_modules/d3-interpolate/src/value.js +0 -24
  531. package/dist/esm/bundled_modules/d3-interpolate/src/zoom.js +0 -73
  532. package/dist/esm/bundled_modules/d3-path/src/path.js +0 -154
  533. package/dist/esm/bundled_modules/d3-quadtree/src/add.js +0 -86
  534. package/dist/esm/bundled_modules/d3-quadtree/src/cover.js +0 -45
  535. package/dist/esm/bundled_modules/d3-quadtree/src/data.js +0 -9
  536. package/dist/esm/bundled_modules/d3-quadtree/src/extent.js +0 -7
  537. package/dist/esm/bundled_modules/d3-quadtree/src/find.js +0 -72
  538. package/dist/esm/bundled_modules/d3-quadtree/src/quad.js +0 -9
  539. package/dist/esm/bundled_modules/d3-quadtree/src/quadtree.js +0 -75
  540. package/dist/esm/bundled_modules/d3-quadtree/src/remove.js +0 -64
  541. package/dist/esm/bundled_modules/d3-quadtree/src/root.js +0 -5
  542. package/dist/esm/bundled_modules/d3-quadtree/src/size.js +0 -9
  543. package/dist/esm/bundled_modules/d3-quadtree/src/visit.js +0 -18
  544. package/dist/esm/bundled_modules/d3-quadtree/src/visitAfter.js +0 -23
  545. package/dist/esm/bundled_modules/d3-quadtree/src/x.js +0 -9
  546. package/dist/esm/bundled_modules/d3-quadtree/src/y.js +0 -9
  547. package/dist/esm/bundled_modules/d3-scale/src/constant.js +0 -7
  548. package/dist/esm/bundled_modules/d3-scale/src/continuous.js +0 -129
  549. package/dist/esm/bundled_modules/d3-scale/src/diverging.js +0 -108
  550. package/dist/esm/bundled_modules/d3-scale/src/identity.js +0 -30
  551. package/dist/esm/bundled_modules/d3-scale/src/init.js +0 -28
  552. package/dist/esm/bundled_modules/d3-scale/src/linear.js +0 -72
  553. package/dist/esm/bundled_modules/d3-scale/src/log.js +0 -143
  554. package/dist/esm/bundled_modules/d3-scale/src/nice.js +0 -20
  555. package/dist/esm/bundled_modules/d3-scale/src/number.js +0 -5
  556. package/dist/esm/bundled_modules/d3-scale/src/ordinal.js +0 -48
  557. package/dist/esm/bundled_modules/d3-scale/src/pow.js +0 -52
  558. package/dist/esm/bundled_modules/d3-scale/src/quantile.js +0 -61
  559. package/dist/esm/bundled_modules/d3-scale/src/quantize.js +0 -58
  560. package/dist/esm/bundled_modules/d3-scale/src/sequential.js +0 -110
  561. package/dist/esm/bundled_modules/d3-scale/src/symlog.js +0 -37
  562. package/dist/esm/bundled_modules/d3-scale/src/threshold.js +0 -41
  563. package/dist/esm/bundled_modules/d3-scale/src/tickFormat.js +0 -35
  564. package/dist/esm/bundled_modules/d3-scale/src/time.js +0 -80
  565. package/dist/esm/bundled_modules/d3-scale/src/utcTime.js +0 -17
  566. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Accent.js +0 -5
  567. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Dark2.js +0 -5
  568. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Paired.js +0 -5
  569. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Pastel1.js +0 -5
  570. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Pastel2.js +0 -5
  571. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Set1.js +0 -5
  572. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Set2.js +0 -5
  573. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Set3.js +0 -5
  574. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/category10.js +0 -5
  575. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/observable10.js +0 -5
  576. package/dist/esm/bundled_modules/d3-scale-chromatic/src/colors.js +0 -7
  577. package/dist/esm/bundled_modules/d3-shape/src/arc.js +0 -270
  578. package/dist/esm/bundled_modules/d3-shape/src/area.js +0 -114
  579. package/dist/esm/bundled_modules/d3-shape/src/array.js +0 -7
  580. package/dist/esm/bundled_modules/d3-shape/src/constant.js +0 -7
  581. package/dist/esm/bundled_modules/d3-shape/src/curve/basis.js +0 -53
  582. package/dist/esm/bundled_modules/d3-shape/src/curve/basisClosed.js +0 -54
  583. package/dist/esm/bundled_modules/d3-shape/src/curve/basisOpen.js +0 -41
  584. package/dist/esm/bundled_modules/d3-shape/src/curve/bundle.js +0 -58
  585. package/dist/esm/bundled_modules/d3-shape/src/curve/cardinal.js +0 -63
  586. package/dist/esm/bundled_modules/d3-shape/src/curve/cardinalClosed.js +0 -63
  587. package/dist/esm/bundled_modules/d3-shape/src/curve/cardinalOpen.js +0 -51
  588. package/dist/esm/bundled_modules/d3-shape/src/curve/catmullRom.js +0 -90
  589. package/dist/esm/bundled_modules/d3-shape/src/curve/catmullRomClosed.js +0 -76
  590. package/dist/esm/bundled_modules/d3-shape/src/curve/catmullRomOpen.js +0 -64
  591. package/dist/esm/bundled_modules/d3-shape/src/curve/linear.js +0 -33
  592. package/dist/esm/bundled_modules/d3-shape/src/curve/linearClosed.js +0 -27
  593. package/dist/esm/bundled_modules/d3-shape/src/curve/monotone.js +0 -106
  594. package/dist/esm/bundled_modules/d3-shape/src/curve/natural.js +0 -67
  595. package/dist/esm/bundled_modules/d3-shape/src/curve/step.js +0 -55
  596. package/dist/esm/bundled_modules/d3-shape/src/line.js +0 -60
  597. package/dist/esm/bundled_modules/d3-shape/src/math.js +0 -22
  598. package/dist/esm/bundled_modules/d3-shape/src/noop.js +0 -3
  599. package/dist/esm/bundled_modules/d3-shape/src/path.js +0 -21
  600. package/dist/esm/bundled_modules/d3-shape/src/point.js +0 -9
  601. package/dist/esm/bundled_modules/d3-shape/src/symbol/circle.js +0 -11
  602. package/dist/esm/bundled_modules/d3-shape/src/symbol.js +0 -34
  603. package/dist/esm/bundled_modules/d3-time/src/day.js +0 -37
  604. package/dist/esm/bundled_modules/d3-time/src/duration.js +0 -9
  605. package/dist/esm/bundled_modules/d3-time/src/hour.js +0 -28
  606. package/dist/esm/bundled_modules/d3-time/src/interval.js +0 -71
  607. package/dist/esm/bundled_modules/d3-time/src/millisecond.js +0 -27
  608. package/dist/esm/bundled_modules/d3-time/src/minute.js +0 -28
  609. package/dist/esm/bundled_modules/d3-time/src/month.js +0 -29
  610. package/dist/esm/bundled_modules/d3-time/src/second.js +0 -16
  611. package/dist/esm/bundled_modules/d3-time/src/ticks.js +0 -59
  612. package/dist/esm/bundled_modules/d3-time/src/week.js +0 -58
  613. package/dist/esm/bundled_modules/d3-time/src/year.js +0 -51
  614. package/dist/esm/bundled_modules/d3-time-format/src/defaultLocale.js +0 -29
  615. package/dist/esm/bundled_modules/d3-time-format/src/locale.js +0 -690
  616. package/dist/esm/bundled_modules/d3-timer/src/interval.js +0 -19
  617. package/dist/esm/bundled_modules/d3-timer/src/timer.js +0 -112
  618. package/dist/esm/bundled_modules/delaunator/index.js +0 -481
  619. package/dist/esm/bundled_modules/internmap/src/index.js +0 -63
  620. package/dist/esm/bundled_modules/json-stringify-pretty-compact/index.js +0 -100
  621. package/dist/esm/bundled_modules/robust-predicates/esm/orient2d.js +0 -182
  622. package/dist/esm/bundled_modules/robust-predicates/esm/util.js +0 -88
  623. package/dist/esm/bundled_modules/topojson-client/src/feature.js +0 -72
  624. package/dist/esm/bundled_modules/topojson-client/src/identity.js +0 -5
  625. package/dist/esm/bundled_modules/topojson-client/src/mesh.js +0 -55
  626. package/dist/esm/bundled_modules/topojson-client/src/reverse.js +0 -6
  627. package/dist/esm/bundled_modules/topojson-client/src/stitch.js +0 -75
  628. package/dist/esm/bundled_modules/topojson-client/src/transform.js +0 -21
  629. package/dist/esm/bundled_modules/vega/build/vega.module.js +0 -38
  630. package/dist/esm/bundled_modules/vega-canvas/build/vega-canvas.browser.js +0 -14
  631. package/dist/esm/bundled_modules/vega-crossfilter/build/vega-crossfilter.js +0 -673
  632. package/dist/esm/bundled_modules/vega-dataflow/build/vega-dataflow.js +0 -2080
  633. package/dist/esm/bundled_modules/vega-embed/build/embed.js +0 -2932
  634. package/dist/esm/bundled_modules/vega-encode/build/vega-encode.js +0 -952
  635. package/dist/esm/bundled_modules/vega-event-selector/build/vega-event-selector.js +0 -190
  636. package/dist/esm/bundled_modules/vega-expression/build/vega-expression.js +0 -1597
  637. package/dist/esm/bundled_modules/vega-force/build/vega-force.js +0 -293
  638. package/dist/esm/bundled_modules/vega-format/build/vega-format.js +0 -191
  639. package/dist/esm/bundled_modules/vega-functions/build/vega-functions.js +0 -779
  640. package/dist/esm/bundled_modules/vega-geo/build/vega-geo.js +0 -1322
  641. package/dist/esm/bundled_modules/vega-hierarchy/build/vega-hierarchy.js +0 -572
  642. package/dist/esm/bundled_modules/vega-interpreter/build/vega-interpreter.js +0 -308
  643. package/dist/esm/bundled_modules/vega-label/build/vega-label.js +0 -874
  644. package/dist/esm/bundled_modules/vega-lite/build/index.js +0 -20110
  645. package/dist/esm/bundled_modules/vega-loader/build/vega-loader.browser.js +0 -328
  646. package/dist/esm/bundled_modules/vega-parser/build/vega-parser.js +0 -3783
  647. package/dist/esm/bundled_modules/vega-projection/build/vega-projection.js +0 -86
  648. package/dist/esm/bundled_modules/vega-regression/build/vega-regression.js +0 -233
  649. package/dist/esm/bundled_modules/vega-runtime/build/vega-runtime.js +0 -586
  650. package/dist/esm/bundled_modules/vega-scale/build/vega-scale.js +0 -799
  651. package/dist/esm/bundled_modules/vega-scenegraph/build/vega-scenegraph.js +0 -4982
  652. package/dist/esm/bundled_modules/vega-schema-url-parser/dist/parser.modern.js +0 -3
  653. package/dist/esm/bundled_modules/vega-selections/build/vega-selection.js +0 -336
  654. package/dist/esm/bundled_modules/vega-statistics/build/vega-statistics.js +0 -1157
  655. package/dist/esm/bundled_modules/vega-themes/build/index.js +0 -837
  656. package/dist/esm/bundled_modules/vega-time/build/vega-time.js +0 -314
  657. package/dist/esm/bundled_modules/vega-tooltip/build/index.js +0 -339
  658. package/dist/esm/bundled_modules/vega-transforms/build/vega-transforms.js +0 -3740
  659. package/dist/esm/bundled_modules/vega-util/build/vega-util.js +0 -753
  660. package/dist/esm/bundled_modules/vega-view/build/vega-view.js +0 -1304
  661. package/dist/esm/bundled_modules/vega-view-transforms/build/vega-view-transforms.js +0 -1306
  662. package/dist/esm/bundled_modules/vega-voronoi/build/vega-voronoi.js +0 -78
  663. package/dist/esm/bundled_modules/vega-wordcloud/build/vega-wordcloud.js +0 -538
  664. package/dist/esm/styles/entrypoint.scss.js +0 -3
  665. package/dist/esm/unstable/Card/components.js +0 -182
  666. package/dist/esm/unstable/Card/state.js +0 -30
  667. package/dist/esm/unstable/StatCard/index.js +0 -116
  668. package/dist/esm/unstable/StatCard/index.module.scss.js +0 -3
  669. package/dist/esm/unstable/extras/chart/BarChart.js +0 -40
  670. package/dist/esm/unstable/extras/chart/Chart.js +0 -96
  671. package/dist/esm/unstable/extras/chart/DistributionChart.js +0 -82
  672. package/dist/esm/unstable/extras/chart/DonutChart.js +0 -41
  673. package/dist/esm/unstable/extras/chart/LineChart.js +0 -43
  674. package/dist/esm/unstable/extras/chart/PieChart.js +0 -37
  675. package/dist/esm/unstable/extras/chart/TimelineChart.js +0 -46
  676. package/dist/esm/unstable/extras/chart/index.js +0 -8
  677. package/dist/esm/unstable/skeleton/index.js +0 -69
  678. package/dist/esm/unstable/skeleton/index.module.scss.js +0 -3
  679. package/dist/esm/unstable/suspense/index.js +0 -15
  680. package/dist/esm/unstable/suspense/index.module.scss.js +0 -3
  681. package/dist/esm/unstable/suspense/loader.js +0 -20
  682. package/dist/types/unstable/Card/components.d.ts +0 -90
  683. package/dist/types/unstable/Card/state.d.ts +0 -20
  684. package/dist/types/unstable/StatCard/index.d.ts +0 -33
  685. package/dist/types/unstable/extras/chart/BarChart.d.ts +0 -16
  686. package/dist/types/unstable/extras/chart/Chart.d.ts +0 -33
  687. package/dist/types/unstable/extras/chart/DistributionChart.d.ts +0 -18
  688. package/dist/types/unstable/extras/chart/DonutChart.d.ts +0 -16
  689. package/dist/types/unstable/extras/chart/LineChart.d.ts +0 -16
  690. package/dist/types/unstable/extras/chart/PieChart.d.ts +0 -14
  691. package/dist/types/unstable/extras/chart/TimelineChart.d.ts +0 -15
  692. package/dist/types/unstable/skeleton/index.d.ts +0 -15
  693. package/dist/types/unstable/suspense/index.d.ts +0 -9
  694. package/dist/types/unstable/suspense/loader.d.ts +0 -7
@@ -1,3783 +0,0 @@
1
- import { stringValue as $, isObject, error, mergeConfig, array, hasOwnProperty as has$1, extend, isArray, isString, peek, splitAccessPath } from '../../vega-util/build/vega-util.js';
2
- import { parseExpression as parser } from '../../vega-functions/build/vega-functions.js';
3
- import { parseSelector as eventSelector } from '../../vega-event-selector/build/vega-event-selector.js';
4
- import { isValidScaleType, isDiscrete, isContinuous, isDiscretizing, isQuantile } from '../../vega-scale/build/vega-scale.js';
5
- import { definition as definition$1 } from '../../vega-dataflow/build/vega-dataflow.js';
6
-
7
- function parseAutosize (spec) {
8
- return isObject(spec) ? spec : {
9
- type: spec || 'pad'
10
- };
11
- }
12
-
13
- const number = _ => +_ || 0;
14
- const paddingObject = _ => ({
15
- top: _,
16
- bottom: _,
17
- left: _,
18
- right: _
19
- });
20
- function parsePadding (spec) {
21
- return !isObject(spec) ? paddingObject(number(spec)) : spec.signal ? spec : {
22
- top: number(spec.top),
23
- bottom: number(spec.bottom),
24
- left: number(spec.left),
25
- right: number(spec.right)
26
- };
27
- }
28
-
29
- const encoder = _ => isObject(_) && !isArray(_) ? extend({}, _) : {
30
- value: _
31
- };
32
- function addEncode(object, name, value, set) {
33
- if (value != null) {
34
- const isEncoder = isObject(value) && !isArray(value) || isArray(value) && value.length && isObject(value[0]);
35
-
36
- // Always assign signal to update, even if the signal is from the enter block
37
- if (isEncoder) {
38
- object.update[name] = value;
39
- } else {
40
- object[set || 'enter'][name] = {
41
- value: value
42
- };
43
- }
44
- return 1;
45
- } else {
46
- return 0;
47
- }
48
- }
49
- function addEncoders(object, enter, update) {
50
- for (const name in enter) {
51
- addEncode(object, name, enter[name]);
52
- }
53
- for (const name in update) {
54
- addEncode(object, name, update[name], 'update');
55
- }
56
- }
57
- function extendEncode(encode, extra, skip) {
58
- for (const name in extra) {
59
- if (skip && has$1(skip, name)) continue;
60
- encode[name] = extend(encode[name] || {}, extra[name]);
61
- }
62
- return encode;
63
- }
64
- function has(key, encode) {
65
- return encode && (encode.enter && encode.enter[key] || encode.update && encode.update[key]);
66
- }
67
-
68
- const MarkRole = 'mark';
69
- const FrameRole = 'frame';
70
- const ScopeRole = 'scope';
71
- const AxisRole = 'axis';
72
- const AxisDomainRole = 'axis-domain';
73
- const AxisGridRole = 'axis-grid';
74
- const AxisLabelRole = 'axis-label';
75
- const AxisTickRole = 'axis-tick';
76
- const AxisTitleRole = 'axis-title';
77
- const LegendRole = 'legend';
78
- const LegendBandRole = 'legend-band';
79
- const LegendEntryRole = 'legend-entry';
80
- const LegendGradientRole = 'legend-gradient';
81
- const LegendLabelRole = 'legend-label';
82
- const LegendSymbolRole = 'legend-symbol';
83
- const LegendTitleRole = 'legend-title';
84
- const TitleRole = 'title';
85
- const TitleTextRole = 'title-text';
86
- const TitleSubtitleRole = 'title-subtitle';
87
-
88
- function applyDefaults (encode, type, role, style, config) {
89
- const defaults = {},
90
- enter = {};
91
- let update, key, skip, props;
92
-
93
- // if text mark, apply global lineBreak settings (#2370)
94
- key = 'lineBreak';
95
- if (type === 'text' && config[key] != null && !has(key, encode)) {
96
- applyDefault(defaults, key, config[key]);
97
- }
98
-
99
- // ignore legend and axis roles
100
- if (role == 'legend' || String(role).startsWith('axis')) {
101
- role = null;
102
- }
103
-
104
- // resolve mark config
105
- props = role === FrameRole ? config.group : role === MarkRole ? extend({}, config.mark, config[type]) : null;
106
- for (key in props) {
107
- // do not apply defaults if relevant fields are defined
108
- skip = has(key, encode) || (key === 'fill' || key === 'stroke') && (has('fill', encode) || has('stroke', encode));
109
- if (!skip) applyDefault(defaults, key, props[key]);
110
- }
111
-
112
- // resolve styles, apply with increasing precedence
113
- array(style).forEach(name => {
114
- const props = config.style && config.style[name];
115
- for (const key in props) {
116
- if (!has(key, encode)) {
117
- applyDefault(defaults, key, props[key]);
118
- }
119
- }
120
- });
121
- encode = extend({}, encode); // defensive copy
122
- for (key in defaults) {
123
- props = defaults[key];
124
- if (props.signal) {
125
- (update = update || {})[key] = props;
126
- } else {
127
- enter[key] = props;
128
- }
129
- }
130
- encode.enter = extend(enter, encode.enter);
131
- if (update) encode.update = extend(update, encode.update);
132
- return encode;
133
- }
134
- function applyDefault(defaults, key, value) {
135
- defaults[key] = value && value.signal ? {
136
- signal: value.signal
137
- } : {
138
- value: value
139
- };
140
- }
141
-
142
- const scaleRef = scale => isString(scale) ? $(scale) : scale.signal ? `(${scale.signal})` : field(scale);
143
- function entry$1(enc) {
144
- if (enc.gradient != null) {
145
- return gradient(enc);
146
- }
147
- let value = enc.signal ? `(${enc.signal})` : enc.color ? color(enc.color) : enc.field != null ? field(enc.field) : enc.value !== undefined ? $(enc.value) : undefined;
148
- if (enc.scale != null) {
149
- value = scale(enc, value);
150
- }
151
- if (value === undefined) {
152
- value = null;
153
- }
154
- if (enc.exponent != null) {
155
- value = `pow(${value},${property(enc.exponent)})`;
156
- }
157
- if (enc.mult != null) {
158
- value += `*${property(enc.mult)}`;
159
- }
160
- if (enc.offset != null) {
161
- value += `+${property(enc.offset)}`;
162
- }
163
- if (enc.round) {
164
- value = `round(${value})`;
165
- }
166
- return value;
167
- }
168
- const _color = (type, x, y, z) => `(${type}(${[x, y, z].map(entry$1).join(',')})+'')`;
169
- function color(enc) {
170
- return enc.c ? _color('hcl', enc.h, enc.c, enc.l) : enc.h || enc.s ? _color('hsl', enc.h, enc.s, enc.l) : enc.l || enc.a ? _color('lab', enc.l, enc.a, enc.b) : enc.r || enc.g || enc.b ? _color('rgb', enc.r, enc.g, enc.b) : null;
171
- }
172
- function gradient(enc) {
173
- // map undefined to null; expression lang does not allow undefined
174
- const args = [enc.start, enc.stop, enc.count].map(_ => _ == null ? null : $(_));
175
-
176
- // trim null inputs from the end
177
- while (args.length && peek(args) == null) args.pop();
178
- args.unshift(scaleRef(enc.gradient));
179
- return `gradient(${args.join(',')})`;
180
- }
181
- function property(property) {
182
- return isObject(property) ? '(' + entry$1(property) + ')' : property;
183
- }
184
- function field(ref) {
185
- return resolveField(isObject(ref) ? ref : {
186
- datum: ref
187
- });
188
- }
189
- function resolveField(ref) {
190
- let object, level, field;
191
- if (ref.signal) {
192
- object = 'datum';
193
- field = ref.signal;
194
- } else if (ref.group || ref.parent) {
195
- level = Math.max(1, ref.level || 1);
196
- object = 'item';
197
- while (level-- > 0) {
198
- object += '.mark.group';
199
- }
200
- if (ref.parent) {
201
- field = ref.parent;
202
- object += '.datum';
203
- } else {
204
- field = ref.group;
205
- }
206
- } else if (ref.datum) {
207
- object = 'datum';
208
- field = ref.datum;
209
- } else {
210
- error('Invalid field reference: ' + $(ref));
211
- }
212
- if (!ref.signal) {
213
- field = isString(field) ? splitAccessPath(field).map($).join('][') : resolveField(field);
214
- }
215
- return object + '[' + field + ']';
216
- }
217
- function scale(enc, value) {
218
- const scale = scaleRef(enc.scale);
219
- if (enc.range != null) {
220
- // pull value from scale range
221
- value = `lerp(_range(${scale}), ${+enc.range})`;
222
- } else {
223
- // run value through scale and/or pull scale bandwidth
224
- if (value !== undefined) value = `_scale(${scale}, ${value})`;
225
- if (enc.band) {
226
- value = (value ? value + '+' : '') + `_bandwidth(${scale})` + (+enc.band === 1 ? '' : '*' + property(enc.band));
227
- if (enc.extra) {
228
- // include logic to handle extraneous elements
229
- value = `(datum.extra ? _scale(${scale}, datum.extra.value) : ${value})`;
230
- }
231
- }
232
- if (value == null) value = '0';
233
- }
234
- return value;
235
- }
236
-
237
- function rule (enc) {
238
- let code = '';
239
- enc.forEach(rule => {
240
- const value = entry$1(rule);
241
- code += rule.test ? `(${rule.test})?${value}:` : value;
242
- });
243
-
244
- // if no else clause, terminate with null (#1366)
245
- if (peek(code) === ':') {
246
- code += 'null';
247
- }
248
- return code;
249
- }
250
-
251
- function parseEncode (encode, type, role, style, scope, params) {
252
- const enc = {};
253
- params = params || {};
254
- params.encoders = {
255
- $encode: enc
256
- };
257
- encode = applyDefaults(encode, type, role, style, scope.config);
258
- for (const key in encode) {
259
- enc[key] = parseBlock(encode[key], type, params, scope);
260
- }
261
- return params;
262
- }
263
- function parseBlock(block, marktype, params, scope) {
264
- const channels = {},
265
- fields = {};
266
- for (const name in block) {
267
- if (block[name] != null) {
268
- // skip any null entries
269
- channels[name] = parse$1(expr(block[name]), scope, params, fields);
270
- }
271
- }
272
- return {
273
- $expr: {
274
- marktype,
275
- channels
276
- },
277
- $fields: Object.keys(fields),
278
- $output: Object.keys(block)
279
- };
280
- }
281
- function expr(enc) {
282
- return isArray(enc) ? rule(enc) : entry$1(enc);
283
- }
284
- function parse$1(code, scope, params, fields) {
285
- const expr = parser(code, scope);
286
- expr.$fields.forEach(name => fields[name] = 1);
287
- extend(params, expr.$params);
288
- return expr.$expr;
289
- }
290
-
291
- const OUTER = 'outer',
292
- OUTER_INVALID = ['value', 'update', 'init', 'react', 'bind'];
293
- function outerError(prefix, name) {
294
- error(prefix + ' for "outer" push: ' + $(name));
295
- }
296
- function parseSignal (signal, scope) {
297
- const name = signal.name;
298
- if (signal.push === OUTER) {
299
- // signal must already be defined, raise error if not
300
- if (!scope.signals[name]) outerError('No prior signal definition', name);
301
- // signal push must not use properties reserved for standard definition
302
- OUTER_INVALID.forEach(prop => {
303
- if (signal[prop] !== undefined) outerError('Invalid property ', prop);
304
- });
305
- } else {
306
- // define a new signal in the current scope
307
- const op = scope.addSignal(name, signal.value);
308
- if (signal.react === false) op.react = false;
309
- if (signal.bind) scope.addBinding(name, signal.bind);
310
- }
311
- }
312
-
313
- function Entry(type, value, params, parent) {
314
- this.id = -1;
315
- this.type = type;
316
- this.value = value;
317
- this.params = params;
318
- if (parent) this.parent = parent;
319
- }
320
- function entry(type, value, params, parent) {
321
- return new Entry(type, value, params, parent);
322
- }
323
- function operator(value, params) {
324
- return entry('operator', value, params);
325
- }
326
-
327
- // -----
328
-
329
- function ref(op) {
330
- const ref = {
331
- $ref: op.id
332
- };
333
- // if operator not yet registered, cache ref to resolve later
334
- if (op.id < 0) (op.refs = op.refs || []).push(ref);
335
- return ref;
336
- }
337
- function fieldRef$1(field, name) {
338
- return name ? {
339
- $field: field,
340
- $name: name
341
- } : {
342
- $field: field
343
- };
344
- }
345
- const keyFieldRef = fieldRef$1('key');
346
- function compareRef(fields, orders) {
347
- return {
348
- $compare: fields,
349
- $order: orders
350
- };
351
- }
352
- function keyRef(fields, flat) {
353
- const ref = {
354
- $key: fields
355
- };
356
- if (flat) ref.$flat = true;
357
- return ref;
358
- }
359
-
360
- // -----
361
-
362
- const Ascending = 'ascending';
363
- const Descending = 'descending';
364
- function sortKey(sort) {
365
- return !isObject(sort) ? '' : (sort.order === Descending ? '-' : '+') + aggrField(sort.op, sort.field);
366
- }
367
- function aggrField(op, field) {
368
- return (op && op.signal ? '$' + op.signal : op || '') + (op && field ? '_' : '') + (field && field.signal ? '$' + field.signal : field || '');
369
- }
370
-
371
- // -----
372
-
373
- const Scope$1 = 'scope';
374
- const View = 'view';
375
- function isSignal(_) {
376
- return _ && _.signal;
377
- }
378
- function isExpr$1(_) {
379
- return _ && _.expr;
380
- }
381
- function hasSignal(_) {
382
- if (isSignal(_)) return true;
383
- if (isObject(_)) for (const key in _) {
384
- if (hasSignal(_[key])) return true;
385
- }
386
- return false;
387
- }
388
- function value(specValue, defaultValue) {
389
- return specValue != null ? specValue : defaultValue;
390
- }
391
- function deref(v) {
392
- return v && v.signal || v;
393
- }
394
-
395
- const Timer = 'timer';
396
- function parseStream(stream, scope) {
397
- const method = stream.merge ? mergeStream : stream.stream ? nestedStream : stream.type ? eventStream : error('Invalid stream specification: ' + $(stream));
398
- return method(stream, scope);
399
- }
400
- function eventSource(source) {
401
- return source === Scope$1 ? View : source || View;
402
- }
403
- function mergeStream(stream, scope) {
404
- const list = stream.merge.map(s => parseStream(s, scope)),
405
- entry = streamParameters({
406
- merge: list
407
- }, stream, scope);
408
- return scope.addStream(entry).id;
409
- }
410
- function nestedStream(stream, scope) {
411
- const id = parseStream(stream.stream, scope),
412
- entry = streamParameters({
413
- stream: id
414
- }, stream, scope);
415
- return scope.addStream(entry).id;
416
- }
417
- function eventStream(stream, scope) {
418
- let id;
419
- if (stream.type === Timer) {
420
- id = scope.event(Timer, stream.throttle);
421
- stream = {
422
- between: stream.between,
423
- filter: stream.filter
424
- };
425
- } else {
426
- id = scope.event(eventSource(stream.source), stream.type);
427
- }
428
- const entry = streamParameters({
429
- stream: id
430
- }, stream, scope);
431
- return Object.keys(entry).length === 1 ? id : scope.addStream(entry).id;
432
- }
433
- function streamParameters(entry, stream, scope) {
434
- let param = stream.between;
435
- if (param) {
436
- if (param.length !== 2) {
437
- error('Stream "between" parameter must have 2 entries: ' + $(stream));
438
- }
439
- entry.between = [parseStream(param[0], scope), parseStream(param[1], scope)];
440
- }
441
- param = stream.filter ? [].concat(stream.filter) : [];
442
- if (stream.marktype || stream.markname || stream.markrole) {
443
- // add filter for mark type, name and/or role
444
- param.push(filterMark(stream.marktype, stream.markname, stream.markrole));
445
- }
446
- if (stream.source === Scope$1) {
447
- // add filter to limit events from sub-scope only
448
- param.push('inScope(event.item)');
449
- }
450
- if (param.length) {
451
- entry.filter = parser('(' + param.join(')&&(') + ')', scope).$expr;
452
- }
453
- if ((param = stream.throttle) != null) {
454
- entry.throttle = +param;
455
- }
456
- if ((param = stream.debounce) != null) {
457
- entry.debounce = +param;
458
- }
459
- if (stream.consume) {
460
- entry.consume = true;
461
- }
462
- return entry;
463
- }
464
- function filterMark(type, name, role) {
465
- const item = 'event.item';
466
- return item + (type && type !== '*' ? '&&' + item + '.mark.marktype===\'' + type + '\'' : '') + (role ? '&&' + item + '.mark.role===\'' + role + '\'' : '') + (name ? '&&' + item + '.mark.name===\'' + name + '\'' : '');
467
- }
468
-
469
- // bypass expression parser for internal operator references
470
- const OP_VALUE_EXPR = {
471
- code: '_.$value',
472
- ast: {
473
- type: 'Identifier',
474
- value: 'value'
475
- }
476
- };
477
- function parseUpdate (spec, scope, target) {
478
- const encode = spec.encode,
479
- entry = {
480
- target: target
481
- };
482
- let events = spec.events,
483
- update = spec.update,
484
- sources = [];
485
- if (!events) {
486
- error('Signal update missing events specification.');
487
- }
488
-
489
- // interpret as an event selector string
490
- if (isString(events)) {
491
- events = eventSelector(events, scope.isSubscope() ? Scope$1 : View);
492
- }
493
-
494
- // separate event streams from signal updates
495
- events = array(events).filter(s => s.signal || s.scale ? (sources.push(s), 0) : 1);
496
-
497
- // merge internal operator listeners
498
- if (sources.length > 1) {
499
- sources = [mergeSources(sources)];
500
- }
501
-
502
- // merge event streams, include as source
503
- if (events.length) {
504
- sources.push(events.length > 1 ? {
505
- merge: events
506
- } : events[0]);
507
- }
508
- if (encode != null) {
509
- if (update) error('Signal encode and update are mutually exclusive.');
510
- update = 'encode(item(),' + $(encode) + ')';
511
- }
512
-
513
- // resolve update value
514
- entry.update = isString(update) ? parser(update, scope) : update.expr != null ? parser(update.expr, scope) : update.value != null ? update.value : update.signal != null ? {
515
- $expr: OP_VALUE_EXPR,
516
- $params: {
517
- $value: scope.signalRef(update.signal)
518
- }
519
- } : error('Invalid signal update specification.');
520
- if (spec.force) {
521
- entry.options = {
522
- force: true
523
- };
524
- }
525
- sources.forEach(source => scope.addUpdate(extend(streamSource(source, scope), entry)));
526
- }
527
- function streamSource(stream, scope) {
528
- return {
529
- source: stream.signal ? scope.signalRef(stream.signal) : stream.scale ? scope.scaleRef(stream.scale) : parseStream(stream, scope)
530
- };
531
- }
532
- function mergeSources(sources) {
533
- return {
534
- signal: '[' + sources.map(s => s.scale ? 'scale("' + s.scale + '")' : s.signal) + ']'
535
- };
536
- }
537
-
538
- function parseSignalUpdates (signal, scope) {
539
- const op = scope.getSignal(signal.name);
540
- let expr = signal.update;
541
- if (signal.init) {
542
- if (expr) {
543
- error('Signals can not include both init and update expressions.');
544
- } else {
545
- expr = signal.init;
546
- op.initonly = true;
547
- }
548
- }
549
- if (expr) {
550
- expr = parser(expr, scope);
551
- op.update = expr.$expr;
552
- op.params = expr.$params;
553
- }
554
- if (signal.on) {
555
- signal.on.forEach(_ => parseUpdate(_, scope, op.id));
556
- }
557
- }
558
-
559
- const transform = name => (params, value, parent) => entry(name, value, params || undefined, parent);
560
- const Aggregate = transform('aggregate');
561
- const AxisTicks = transform('axisticks');
562
- const Bound = transform('bound');
563
- const Collect = transform('collect');
564
- const Compare = transform('compare');
565
- const DataJoin = transform('datajoin');
566
- const Encode = transform('encode');
567
- const Expression = transform('expression');
568
- const Facet = transform('facet');
569
- const Field = transform('field');
570
- const Key = transform('key');
571
- const LegendEntries = transform('legendentries');
572
- const Load = transform('load');
573
- const Mark = transform('mark');
574
- const MultiExtent = transform('multiextent');
575
- const MultiValues = transform('multivalues');
576
- const Overlap = transform('overlap');
577
- const Params = transform('params');
578
- const PreFacet = transform('prefacet');
579
- const Projection = transform('projection');
580
- const Proxy = transform('proxy');
581
- const Relay = transform('relay');
582
- const Render = transform('render');
583
- const Scale = transform('scale');
584
- const Sieve = transform('sieve');
585
- const SortItems = transform('sortitems');
586
- const ViewLayout = transform('viewlayout');
587
- const Values = transform('values');
588
-
589
- let FIELD_REF_ID = 0;
590
- const MULTIDOMAIN_SORT_OPS = {
591
- min: 'min',
592
- max: 'max',
593
- count: 'sum'
594
- };
595
- function initScale(spec, scope) {
596
- const type = spec.type || 'linear';
597
- if (!isValidScaleType(type)) {
598
- error('Unrecognized scale type: ' + $(type));
599
- }
600
- scope.addScale(spec.name, {
601
- type,
602
- domain: undefined
603
- });
604
- }
605
- function parseScale(spec, scope) {
606
- const params = scope.getScale(spec.name).params;
607
- let key;
608
- params.domain = parseScaleDomain(spec.domain, spec, scope);
609
- if (spec.range != null) {
610
- params.range = parseScaleRange(spec, scope, params);
611
- }
612
- if (spec.interpolate != null) {
613
- parseScaleInterpolate(spec.interpolate, params);
614
- }
615
- if (spec.nice != null) {
616
- params.nice = parseScaleNice(spec.nice, scope);
617
- }
618
- if (spec.bins != null) {
619
- params.bins = parseScaleBins(spec.bins, scope);
620
- }
621
- for (key in spec) {
622
- if (has$1(params, key) || key === 'name') continue;
623
- params[key] = parseLiteral(spec[key], scope);
624
- }
625
- }
626
- function parseLiteral(v, scope) {
627
- return !isObject(v) ? v : v.signal ? scope.signalRef(v.signal) : error('Unsupported object: ' + $(v));
628
- }
629
- function parseArray(v, scope) {
630
- return v.signal ? scope.signalRef(v.signal) : v.map(v => parseLiteral(v, scope));
631
- }
632
- function dataLookupError(name) {
633
- error('Can not find data set: ' + $(name));
634
- }
635
-
636
- // -- SCALE DOMAIN ----
637
-
638
- function parseScaleDomain(domain, spec, scope) {
639
- if (!domain) {
640
- if (spec.domainMin != null || spec.domainMax != null) {
641
- error('No scale domain defined for domainMin/domainMax to override.');
642
- }
643
- return; // default domain
644
- }
645
- return domain.signal ? scope.signalRef(domain.signal) : (isArray(domain) ? explicitDomain : domain.fields ? multipleDomain : singularDomain)(domain, spec, scope);
646
- }
647
- function explicitDomain(domain, spec, scope) {
648
- return domain.map(v => parseLiteral(v, scope));
649
- }
650
- function singularDomain(domain, spec, scope) {
651
- const data = scope.getData(domain.data);
652
- if (!data) dataLookupError(domain.data);
653
- return isDiscrete(spec.type) ? data.valuesRef(scope, domain.field, parseSort(domain.sort, false)) : isQuantile(spec.type) ? data.domainRef(scope, domain.field) : data.extentRef(scope, domain.field);
654
- }
655
- function multipleDomain(domain, spec, scope) {
656
- const data = domain.data,
657
- fields = domain.fields.reduce((dom, d) => {
658
- d = isString(d) ? {
659
- data: data,
660
- field: d
661
- } : isArray(d) || d.signal ? fieldRef(d, scope) : d;
662
- dom.push(d);
663
- return dom;
664
- }, []);
665
- return (isDiscrete(spec.type) ? ordinalMultipleDomain : isQuantile(spec.type) ? quantileMultipleDomain : numericMultipleDomain)(domain, scope, fields);
666
- }
667
- function fieldRef(data, scope) {
668
- const name = '_:vega:_' + FIELD_REF_ID++,
669
- coll = Collect({});
670
- if (isArray(data)) {
671
- coll.value = {
672
- $ingest: data
673
- };
674
- } else if (data.signal) {
675
- const code = 'setdata(' + $(name) + ',' + data.signal + ')';
676
- coll.params.input = scope.signalRef(code);
677
- }
678
- scope.addDataPipeline(name, [coll, Sieve({})]);
679
- return {
680
- data: name,
681
- field: 'data'
682
- };
683
- }
684
- function ordinalMultipleDomain(domain, scope, fields) {
685
- const sort = parseSort(domain.sort, true);
686
- let a, v;
687
-
688
- // get value counts for each domain field
689
- const counts = fields.map(f => {
690
- const data = scope.getData(f.data);
691
- if (!data) dataLookupError(f.data);
692
- return data.countsRef(scope, f.field, sort);
693
- });
694
-
695
- // aggregate the results from each domain field
696
- const p = {
697
- groupby: keyFieldRef,
698
- pulse: counts
699
- };
700
- if (sort) {
701
- a = sort.op || 'count';
702
- v = sort.field ? aggrField(a, sort.field) : 'count';
703
- p.ops = [MULTIDOMAIN_SORT_OPS[a]];
704
- p.fields = [scope.fieldRef(v)];
705
- p.as = [v];
706
- }
707
- a = scope.add(Aggregate(p));
708
-
709
- // collect aggregate output
710
- const c = scope.add(Collect({
711
- pulse: ref(a)
712
- }));
713
-
714
- // extract values for combined domain
715
- v = scope.add(Values({
716
- field: keyFieldRef,
717
- sort: scope.sortRef(sort),
718
- pulse: ref(c)
719
- }));
720
- return ref(v);
721
- }
722
- function parseSort(sort, multidomain) {
723
- if (sort) {
724
- if (!sort.field && !sort.op) {
725
- if (isObject(sort)) sort.field = 'key';else sort = {
726
- field: 'key'
727
- };
728
- } else if (!sort.field && sort.op !== 'count') {
729
- error('No field provided for sort aggregate op: ' + sort.op);
730
- } else if (multidomain && sort.field) {
731
- if (sort.op && !MULTIDOMAIN_SORT_OPS[sort.op]) {
732
- error('Multiple domain scales can not be sorted using ' + sort.op);
733
- }
734
- }
735
- }
736
- return sort;
737
- }
738
- function quantileMultipleDomain(domain, scope, fields) {
739
- // get value arrays for each domain field
740
- const values = fields.map(f => {
741
- const data = scope.getData(f.data);
742
- if (!data) dataLookupError(f.data);
743
- return data.domainRef(scope, f.field);
744
- });
745
-
746
- // combine value arrays
747
- return ref(scope.add(MultiValues({
748
- values: values
749
- })));
750
- }
751
- function numericMultipleDomain(domain, scope, fields) {
752
- // get extents for each domain field
753
- const extents = fields.map(f => {
754
- const data = scope.getData(f.data);
755
- if (!data) dataLookupError(f.data);
756
- return data.extentRef(scope, f.field);
757
- });
758
-
759
- // combine extents
760
- return ref(scope.add(MultiExtent({
761
- extents: extents
762
- })));
763
- }
764
-
765
- // -- SCALE BINS -----
766
-
767
- function parseScaleBins(v, scope) {
768
- return v.signal || isArray(v) ? parseArray(v, scope) : scope.objectProperty(v);
769
- }
770
-
771
- // -- SCALE NICE -----
772
-
773
- function parseScaleNice(nice, scope) {
774
- return nice.signal ? scope.signalRef(nice.signal) : isObject(nice) ? {
775
- interval: parseLiteral(nice.interval),
776
- step: parseLiteral(nice.step)
777
- } : parseLiteral(nice);
778
- }
779
-
780
- // -- SCALE INTERPOLATION -----
781
-
782
- function parseScaleInterpolate(interpolate, params) {
783
- params.interpolate = parseLiteral(interpolate.type || interpolate);
784
- if (interpolate.gamma != null) {
785
- params.interpolateGamma = parseLiteral(interpolate.gamma);
786
- }
787
- }
788
-
789
- // -- SCALE RANGE -----
790
-
791
- function parseScaleRange(spec, scope, params) {
792
- const config = scope.config.range;
793
- let range = spec.range;
794
- if (range.signal) {
795
- return scope.signalRef(range.signal);
796
- } else if (isString(range)) {
797
- if (config && has$1(config, range)) {
798
- spec = extend({}, spec, {
799
- range: config[range]
800
- });
801
- return parseScaleRange(spec, scope, params);
802
- } else if (range === 'width') {
803
- range = [0, {
804
- signal: 'width'
805
- }];
806
- } else if (range === 'height') {
807
- range = isDiscrete(spec.type) ? [0, {
808
- signal: 'height'
809
- }] : [{
810
- signal: 'height'
811
- }, 0];
812
- } else {
813
- error('Unrecognized scale range value: ' + $(range));
814
- }
815
- } else if (range.scheme) {
816
- params.scheme = isArray(range.scheme) ? parseArray(range.scheme, scope) : parseLiteral(range.scheme, scope);
817
- if (range.extent) params.schemeExtent = parseArray(range.extent, scope);
818
- if (range.count) params.schemeCount = parseLiteral(range.count, scope);
819
- return;
820
- } else if (range.step) {
821
- params.rangeStep = parseLiteral(range.step, scope);
822
- return;
823
- } else if (isDiscrete(spec.type) && !isArray(range)) {
824
- return parseScaleDomain(range, spec, scope);
825
- } else if (!isArray(range)) {
826
- error('Unsupported range type: ' + $(range));
827
- }
828
- return range.map(v => (isArray(v) ? parseArray : parseLiteral)(v, scope));
829
- }
830
-
831
- function parseProjection (proj, scope) {
832
- const config = scope.config.projection || {},
833
- params = {};
834
- for (const name in proj) {
835
- if (name === 'name') continue;
836
- params[name] = parseParameter$1(proj[name], name, scope);
837
- }
838
-
839
- // apply projection defaults from config
840
- for (const name in config) {
841
- if (params[name] == null) {
842
- params[name] = parseParameter$1(config[name], name, scope);
843
- }
844
- }
845
- scope.addProjection(proj.name, params);
846
- }
847
- function parseParameter$1(_, name, scope) {
848
- return isArray(_) ? _.map(_ => parseParameter$1(_, name, scope)) : !isObject(_) ? _ : _.signal ? scope.signalRef(_.signal) : name === 'fit' ? _ : error('Unsupported parameter object: ' + $(_));
849
- }
850
-
851
- const Top = 'top';
852
- const Left = 'left';
853
- const Right = 'right';
854
- const Bottom = 'bottom';
855
- const Center = 'center';
856
- const Vertical = 'vertical';
857
- const Start = 'start';
858
- const Middle = 'middle';
859
- const End = 'end';
860
- const Index = 'index';
861
- const Label = 'label';
862
- const Offset = 'offset';
863
- const Perc = 'perc';
864
- const Perc2 = 'perc2';
865
- const Value = 'value';
866
- const GuideLabelStyle = 'guide-label';
867
- const GuideTitleStyle = 'guide-title';
868
- const GroupTitleStyle = 'group-title';
869
- const GroupSubtitleStyle = 'group-subtitle';
870
-
871
- /** All values of LegendType */
872
- const Symbols = 'symbol';
873
- const Gradient = 'gradient';
874
- const Discrete = 'discrete';
875
- const Size = 'size';
876
- const Shape = 'shape';
877
- const Fill = 'fill';
878
- const Stroke = 'stroke';
879
- const StrokeWidth = 'strokeWidth';
880
- const StrokeDash = 'strokeDash';
881
- const Opacity = 'opacity';
882
-
883
- // Encoding channels supported by legends
884
- // In priority order of 'canonical' scale
885
- const LegendScales = [Size, Shape, Fill, Stroke, StrokeWidth, StrokeDash, Opacity];
886
- const Skip = {
887
- name: 1,
888
- style: 1,
889
- interactive: 1
890
- };
891
- const zero = {
892
- value: 0
893
- };
894
- const one = {
895
- value: 1
896
- };
897
-
898
- const GroupMark = 'group';
899
- const RectMark = 'rect';
900
- const RuleMark = 'rule';
901
- const SymbolMark = 'symbol';
902
- const TextMark = 'text';
903
-
904
- function guideGroup (mark) {
905
- mark.type = GroupMark;
906
- mark.interactive = mark.interactive || false;
907
- return mark;
908
- }
909
-
910
- function lookup(spec, config) {
911
- const _ = (name, dflt) => value(spec[name], value(config[name], dflt));
912
- _.isVertical = s => Vertical === value(spec.direction, config.direction || (s ? config.symbolDirection : config.gradientDirection));
913
- _.gradientLength = () => value(spec.gradientLength, config.gradientLength || config.gradientWidth);
914
- _.gradientThickness = () => value(spec.gradientThickness, config.gradientThickness || config.gradientHeight);
915
- _.entryColumns = () => value(spec.columns, value(config.columns, +_.isVertical(true)));
916
- return _;
917
- }
918
- function getEncoding(name, encode) {
919
- const v = encode && (encode.update && encode.update[name] || encode.enter && encode.enter[name]);
920
- return v && v.signal ? v : v ? v.value : null;
921
- }
922
- function getStyle(name, scope, style) {
923
- const s = scope.config.style[style];
924
- return s && s[name];
925
- }
926
- function anchorExpr(s, e, m) {
927
- return `item.anchor === '${Start}' ? ${s} : item.anchor === '${End}' ? ${e} : ${m}`;
928
- }
929
- const alignExpr$1 = anchorExpr($(Left), $(Right), $(Center));
930
- function tickBand(_) {
931
- const v = _('tickBand');
932
- let offset = _('tickOffset'),
933
- band,
934
- extra;
935
- if (!v) {
936
- // if no tick band entry, fall back on other properties
937
- band = _('bandPosition');
938
- extra = _('tickExtra');
939
- } else if (v.signal) {
940
- // if signal, augment code to interpret values
941
- band = {
942
- signal: `(${v.signal}) === 'extent' ? 1 : 0.5`
943
- };
944
- extra = {
945
- signal: `(${v.signal}) === 'extent'`
946
- };
947
- if (!isObject(offset)) {
948
- offset = {
949
- signal: `(${v.signal}) === 'extent' ? 0 : ${offset}`
950
- };
951
- }
952
- } else if (v === 'extent') {
953
- // if constant, simply set values
954
- band = 1;
955
- extra = true;
956
- offset = 0;
957
- } else {
958
- band = 0.5;
959
- extra = false;
960
- }
961
- return {
962
- extra,
963
- band,
964
- offset
965
- };
966
- }
967
- function extendOffset(value, offset) {
968
- return !offset ? value : !value ? offset : !isObject(value) ? {
969
- value,
970
- offset
971
- } : Object.assign({}, value, {
972
- offset: extendOffset(value.offset, offset)
973
- });
974
- }
975
-
976
- function guideMark (mark, extras) {
977
- if (extras) {
978
- mark.name = extras.name;
979
- mark.style = extras.style || mark.style;
980
- mark.interactive = !!extras.interactive;
981
- mark.encode = extendEncode(mark.encode, extras, Skip);
982
- } else {
983
- mark.interactive = false;
984
- }
985
- return mark;
986
- }
987
-
988
- function legendGradient (spec, scale, config, userEncode) {
989
- const _ = lookup(spec, config),
990
- vertical = _.isVertical(),
991
- thickness = _.gradientThickness(),
992
- length = _.gradientLength();
993
- let enter, start, stop, width, height;
994
- if (vertical) {
995
- start = [0, 1];
996
- stop = [0, 0];
997
- width = thickness;
998
- height = length;
999
- } else {
1000
- start = [0, 0];
1001
- stop = [1, 0];
1002
- width = length;
1003
- height = thickness;
1004
- }
1005
- const encode = {
1006
- enter: enter = {
1007
- opacity: zero,
1008
- x: zero,
1009
- y: zero,
1010
- width: encoder(width),
1011
- height: encoder(height)
1012
- },
1013
- update: extend({}, enter, {
1014
- opacity: one,
1015
- fill: {
1016
- gradient: scale,
1017
- start: start,
1018
- stop: stop
1019
- }
1020
- }),
1021
- exit: {
1022
- opacity: zero
1023
- }
1024
- };
1025
- addEncoders(encode, {
1026
- stroke: _('gradientStrokeColor'),
1027
- strokeWidth: _('gradientStrokeWidth')
1028
- }, {
1029
- // update
1030
- opacity: _('gradientOpacity')
1031
- });
1032
- return guideMark({
1033
- type: RectMark,
1034
- role: LegendGradientRole,
1035
- encode
1036
- }, userEncode);
1037
- }
1038
-
1039
- function legendGradientDiscrete (spec, scale, config, userEncode, dataRef) {
1040
- const _ = lookup(spec, config),
1041
- vertical = _.isVertical(),
1042
- thickness = _.gradientThickness(),
1043
- length = _.gradientLength();
1044
- let u,
1045
- v,
1046
- uu,
1047
- vv,
1048
- adjust = '';
1049
- vertical ? (u = 'y', uu = 'y2', v = 'x', vv = 'width', adjust = '1-') : (u = 'x', uu = 'x2', v = 'y', vv = 'height');
1050
- const enter = {
1051
- opacity: zero,
1052
- fill: {
1053
- scale: scale,
1054
- field: Value
1055
- }
1056
- };
1057
- enter[u] = {
1058
- signal: adjust + 'datum.' + Perc,
1059
- mult: length
1060
- };
1061
- enter[v] = zero;
1062
- enter[uu] = {
1063
- signal: adjust + 'datum.' + Perc2,
1064
- mult: length
1065
- };
1066
- enter[vv] = encoder(thickness);
1067
- const encode = {
1068
- enter: enter,
1069
- update: extend({}, enter, {
1070
- opacity: one
1071
- }),
1072
- exit: {
1073
- opacity: zero
1074
- }
1075
- };
1076
- addEncoders(encode, {
1077
- stroke: _('gradientStrokeColor'),
1078
- strokeWidth: _('gradientStrokeWidth')
1079
- }, {
1080
- // update
1081
- opacity: _('gradientOpacity')
1082
- });
1083
- return guideMark({
1084
- type: RectMark,
1085
- role: LegendBandRole,
1086
- key: Value,
1087
- from: dataRef,
1088
- encode
1089
- }, userEncode);
1090
- }
1091
-
1092
- const alignExpr = `datum.${Perc}<=0?"${Left}":datum.${Perc}>=1?"${Right}":"${Center}"`,
1093
- baselineExpr = `datum.${Perc}<=0?"${Bottom}":datum.${Perc}>=1?"${Top}":"${Middle}"`;
1094
- function legendGradientLabels (spec, config, userEncode, dataRef) {
1095
- const _ = lookup(spec, config),
1096
- vertical = _.isVertical(),
1097
- thickness = encoder(_.gradientThickness()),
1098
- length = _.gradientLength();
1099
- let overlap = _('labelOverlap'),
1100
- enter,
1101
- update,
1102
- u,
1103
- v,
1104
- adjust = '';
1105
- const encode = {
1106
- enter: enter = {
1107
- opacity: zero
1108
- },
1109
- update: update = {
1110
- opacity: one,
1111
- text: {
1112
- field: Label
1113
- }
1114
- },
1115
- exit: {
1116
- opacity: zero
1117
- }
1118
- };
1119
- addEncoders(encode, {
1120
- fill: _('labelColor'),
1121
- fillOpacity: _('labelOpacity'),
1122
- font: _('labelFont'),
1123
- fontSize: _('labelFontSize'),
1124
- fontStyle: _('labelFontStyle'),
1125
- fontWeight: _('labelFontWeight'),
1126
- limit: value(spec.labelLimit, config.gradientLabelLimit)
1127
- });
1128
- if (vertical) {
1129
- enter.align = {
1130
- value: 'left'
1131
- };
1132
- enter.baseline = update.baseline = {
1133
- signal: baselineExpr
1134
- };
1135
- u = 'y';
1136
- v = 'x';
1137
- adjust = '1-';
1138
- } else {
1139
- enter.align = update.align = {
1140
- signal: alignExpr
1141
- };
1142
- enter.baseline = {
1143
- value: 'top'
1144
- };
1145
- u = 'x';
1146
- v = 'y';
1147
- }
1148
- enter[u] = update[u] = {
1149
- signal: adjust + 'datum.' + Perc,
1150
- mult: length
1151
- };
1152
- enter[v] = update[v] = thickness;
1153
- thickness.offset = value(spec.labelOffset, config.gradientLabelOffset) || 0;
1154
- overlap = overlap ? {
1155
- separation: _('labelSeparation'),
1156
- method: overlap,
1157
- order: 'datum.' + Index
1158
- } : undefined;
1159
-
1160
- // type, role, style, key, dataRef, encode, extras
1161
- return guideMark({
1162
- type: TextMark,
1163
- role: LegendLabelRole,
1164
- style: GuideLabelStyle,
1165
- key: Value,
1166
- from: dataRef,
1167
- encode,
1168
- overlap
1169
- }, userEncode);
1170
- }
1171
-
1172
- // userEncode is top-level, includes entries, symbols, labels
1173
- function legendSymbolGroups (spec, config, userEncode, dataRef, columns) {
1174
- const _ = lookup(spec, config),
1175
- entries = userEncode.entries,
1176
- interactive = !!(entries && entries.interactive),
1177
- name = entries ? entries.name : undefined,
1178
- height = _('clipHeight'),
1179
- symbolOffset = _('symbolOffset'),
1180
- valueRef = {
1181
- data: 'value'
1182
- },
1183
- xSignal = `(${columns}) ? datum.${Offset} : datum.${Size}`,
1184
- yEncode = height ? encoder(height) : {
1185
- field: Size
1186
- },
1187
- index = `datum.${Index}`,
1188
- ncols = `max(1, ${columns})`;
1189
- let encode, enter, update, nrows, sort;
1190
- yEncode.mult = 0.5;
1191
-
1192
- // -- LEGEND SYMBOLS --
1193
- encode = {
1194
- enter: enter = {
1195
- opacity: zero,
1196
- x: {
1197
- signal: xSignal,
1198
- mult: 0.5,
1199
- offset: symbolOffset
1200
- },
1201
- y: yEncode
1202
- },
1203
- update: update = {
1204
- opacity: one,
1205
- x: enter.x,
1206
- y: enter.y
1207
- },
1208
- exit: {
1209
- opacity: zero
1210
- }
1211
- };
1212
- let baseFill = null,
1213
- baseStroke = null;
1214
- if (!spec.fill) {
1215
- baseFill = config.symbolBaseFillColor;
1216
- baseStroke = config.symbolBaseStrokeColor;
1217
- }
1218
- addEncoders(encode, {
1219
- fill: _('symbolFillColor', baseFill),
1220
- shape: _('symbolType'),
1221
- size: _('symbolSize'),
1222
- stroke: _('symbolStrokeColor', baseStroke),
1223
- strokeDash: _('symbolDash'),
1224
- strokeDashOffset: _('symbolDashOffset'),
1225
- strokeWidth: _('symbolStrokeWidth')
1226
- }, {
1227
- // update
1228
- opacity: _('symbolOpacity')
1229
- });
1230
- LegendScales.forEach(scale => {
1231
- if (spec[scale]) {
1232
- update[scale] = enter[scale] = {
1233
- scale: spec[scale],
1234
- field: Value
1235
- };
1236
- }
1237
- });
1238
- const symbols = guideMark({
1239
- type: SymbolMark,
1240
- role: LegendSymbolRole,
1241
- key: Value,
1242
- from: valueRef,
1243
- clip: height ? true : undefined,
1244
- encode
1245
- }, userEncode.symbols);
1246
-
1247
- // -- LEGEND LABELS --
1248
- const labelOffset = encoder(symbolOffset);
1249
- labelOffset.offset = _('labelOffset');
1250
- encode = {
1251
- enter: enter = {
1252
- opacity: zero,
1253
- x: {
1254
- signal: xSignal,
1255
- offset: labelOffset
1256
- },
1257
- y: yEncode
1258
- },
1259
- update: update = {
1260
- opacity: one,
1261
- text: {
1262
- field: Label
1263
- },
1264
- x: enter.x,
1265
- y: enter.y
1266
- },
1267
- exit: {
1268
- opacity: zero
1269
- }
1270
- };
1271
- addEncoders(encode, {
1272
- align: _('labelAlign'),
1273
- baseline: _('labelBaseline'),
1274
- fill: _('labelColor'),
1275
- fillOpacity: _('labelOpacity'),
1276
- font: _('labelFont'),
1277
- fontSize: _('labelFontSize'),
1278
- fontStyle: _('labelFontStyle'),
1279
- fontWeight: _('labelFontWeight'),
1280
- limit: _('labelLimit')
1281
- });
1282
- const labels = guideMark({
1283
- type: TextMark,
1284
- role: LegendLabelRole,
1285
- style: GuideLabelStyle,
1286
- key: Value,
1287
- from: valueRef,
1288
- encode
1289
- }, userEncode.labels);
1290
-
1291
- // -- LEGEND ENTRY GROUPS --
1292
- encode = {
1293
- enter: {
1294
- noBound: {
1295
- value: !height
1296
- },
1297
- // ignore width/height in bounds calc
1298
- width: zero,
1299
- height: height ? encoder(height) : zero,
1300
- opacity: zero
1301
- },
1302
- exit: {
1303
- opacity: zero
1304
- },
1305
- update: update = {
1306
- opacity: one,
1307
- row: {
1308
- signal: null
1309
- },
1310
- column: {
1311
- signal: null
1312
- }
1313
- }
1314
- };
1315
-
1316
- // annotate and sort groups to ensure correct ordering
1317
- if (_.isVertical(true)) {
1318
- nrows = `ceil(item.mark.items.length / ${ncols})`;
1319
- update.row.signal = `${index}%${nrows}`;
1320
- update.column.signal = `floor(${index} / ${nrows})`;
1321
- sort = {
1322
- field: ['row', index]
1323
- };
1324
- } else {
1325
- update.row.signal = `floor(${index} / ${ncols})`;
1326
- update.column.signal = `${index} % ${ncols}`;
1327
- sort = {
1328
- field: index
1329
- };
1330
- }
1331
- // handle zero column case (implies infinite columns)
1332
- update.column.signal = `(${columns})?${update.column.signal}:${index}`;
1333
-
1334
- // facet legend entries into sub-groups
1335
- dataRef = {
1336
- facet: {
1337
- data: dataRef,
1338
- name: 'value',
1339
- groupby: Index
1340
- }
1341
- };
1342
- return guideGroup({
1343
- role: ScopeRole,
1344
- from: dataRef,
1345
- encode: extendEncode(encode, entries, Skip),
1346
- marks: [symbols, labels],
1347
- name,
1348
- interactive,
1349
- sort
1350
- });
1351
- }
1352
- function legendSymbolLayout(spec, config) {
1353
- const _ = lookup(spec, config);
1354
-
1355
- // layout parameters for legend entries
1356
- return {
1357
- align: _('gridAlign'),
1358
- columns: _.entryColumns(),
1359
- center: {
1360
- row: true,
1361
- column: false
1362
- },
1363
- padding: {
1364
- row: _('rowPadding'),
1365
- column: _('columnPadding')
1366
- }
1367
- };
1368
- }
1369
-
1370
- // expression logic for align, anchor, angle, and baseline calculation
1371
- const isL = 'item.orient === "left"',
1372
- isR = 'item.orient === "right"',
1373
- isLR = `(${isL} || ${isR})`,
1374
- isVG = `datum.vgrad && ${isLR}`,
1375
- baseline = anchorExpr('"top"', '"bottom"', '"middle"'),
1376
- alignFlip = anchorExpr('"right"', '"left"', '"center"'),
1377
- exprAlign = `datum.vgrad && ${isR} ? (${alignFlip}) : (${isLR} && !(datum.vgrad && ${isL})) ? "left" : ${alignExpr$1}`,
1378
- exprAnchor = `item._anchor || (${isLR} ? "middle" : "start")`,
1379
- exprAngle = `${isVG} ? (${isL} ? -90 : 90) : 0`,
1380
- exprBaseline = `${isLR} ? (datum.vgrad ? (${isR} ? "bottom" : "top") : ${baseline}) : "top"`;
1381
- function legendTitle (spec, config, userEncode, dataRef) {
1382
- const _ = lookup(spec, config);
1383
- const encode = {
1384
- enter: {
1385
- opacity: zero
1386
- },
1387
- update: {
1388
- opacity: one,
1389
- x: {
1390
- field: {
1391
- group: 'padding'
1392
- }
1393
- },
1394
- y: {
1395
- field: {
1396
- group: 'padding'
1397
- }
1398
- }
1399
- },
1400
- exit: {
1401
- opacity: zero
1402
- }
1403
- };
1404
- addEncoders(encode, {
1405
- orient: _('titleOrient'),
1406
- _anchor: _('titleAnchor'),
1407
- anchor: {
1408
- signal: exprAnchor
1409
- },
1410
- angle: {
1411
- signal: exprAngle
1412
- },
1413
- align: {
1414
- signal: exprAlign
1415
- },
1416
- baseline: {
1417
- signal: exprBaseline
1418
- },
1419
- text: spec.title,
1420
- fill: _('titleColor'),
1421
- fillOpacity: _('titleOpacity'),
1422
- font: _('titleFont'),
1423
- fontSize: _('titleFontSize'),
1424
- fontStyle: _('titleFontStyle'),
1425
- fontWeight: _('titleFontWeight'),
1426
- limit: _('titleLimit'),
1427
- lineHeight: _('titleLineHeight')
1428
- }, {
1429
- // require update
1430
- align: _('titleAlign'),
1431
- baseline: _('titleBaseline')
1432
- });
1433
- return guideMark({
1434
- type: TextMark,
1435
- role: LegendTitleRole,
1436
- style: GuideTitleStyle,
1437
- from: dataRef,
1438
- encode
1439
- }, userEncode);
1440
- }
1441
-
1442
- function clip (clip, scope) {
1443
- let expr;
1444
- if (isObject(clip)) {
1445
- if (clip.signal) {
1446
- expr = clip.signal;
1447
- } else if (clip.path) {
1448
- expr = 'pathShape(' + param(clip.path) + ')';
1449
- } else if (clip.sphere) {
1450
- expr = 'geoShape(' + param(clip.sphere) + ', {type: "Sphere"})';
1451
- }
1452
- }
1453
- return expr ? scope.signalRef(expr) : !!clip;
1454
- }
1455
- function param(value) {
1456
- return isObject(value) && value.signal ? value.signal : $(value);
1457
- }
1458
-
1459
- function getRole (spec) {
1460
- const role = spec.role || '';
1461
- return role.startsWith('axis') || role.startsWith('legend') || role.startsWith('title') ? role : spec.type === GroupMark ? ScopeRole : role || MarkRole;
1462
- }
1463
-
1464
- function definition (spec) {
1465
- return {
1466
- marktype: spec.type,
1467
- name: spec.name || undefined,
1468
- role: spec.role || getRole(spec),
1469
- zindex: +spec.zindex || undefined,
1470
- aria: spec.aria,
1471
- description: spec.description
1472
- };
1473
- }
1474
-
1475
- function interactive (spec, scope) {
1476
- return spec && spec.signal ? scope.signalRef(spec.signal) : spec === false ? false : true;
1477
- }
1478
-
1479
- /**
1480
- * Parse a data transform specification.
1481
- */
1482
- function parseTransform (spec, scope) {
1483
- const def = definition$1(spec.type);
1484
- if (!def) error('Unrecognized transform type: ' + $(spec.type));
1485
- const t = entry(def.type.toLowerCase(), null, parseParameters(def, spec, scope));
1486
- if (spec.signal) scope.addSignal(spec.signal, scope.proxy(t));
1487
- t.metadata = def.metadata || {};
1488
- return t;
1489
- }
1490
-
1491
- /**
1492
- * Parse all parameters of a data transform.
1493
- */
1494
- function parseParameters(def, spec, scope) {
1495
- const params = {},
1496
- n = def.params.length;
1497
- for (let i = 0; i < n; ++i) {
1498
- const pdef = def.params[i];
1499
- params[pdef.name] = parseParameter(pdef, spec, scope);
1500
- }
1501
- return params;
1502
- }
1503
-
1504
- /**
1505
- * Parse a data transform parameter.
1506
- */
1507
- function parseParameter(def, spec, scope) {
1508
- const type = def.type,
1509
- value = spec[def.name];
1510
- if (type === 'index') {
1511
- return parseIndexParameter(def, spec, scope);
1512
- } else if (value === undefined) {
1513
- if (def.required) {
1514
- error('Missing required ' + $(spec.type) + ' parameter: ' + $(def.name));
1515
- }
1516
- return;
1517
- } else if (type === 'param') {
1518
- return parseSubParameters(def, spec, scope);
1519
- } else if (type === 'projection') {
1520
- return scope.projectionRef(spec[def.name]);
1521
- }
1522
- return def.array && !isSignal(value) ? value.map(v => parameterValue(def, v, scope)) : parameterValue(def, value, scope);
1523
- }
1524
-
1525
- /**
1526
- * Parse a single parameter value.
1527
- */
1528
- function parameterValue(def, value, scope) {
1529
- const type = def.type;
1530
- if (isSignal(value)) {
1531
- return isExpr(type) ? error('Expression references can not be signals.') : isField(type) ? scope.fieldRef(value) : isCompare(type) ? scope.compareRef(value) : scope.signalRef(value.signal);
1532
- } else {
1533
- const expr = def.expr || isField(type);
1534
- return expr && outerExpr(value) ? scope.exprRef(value.expr, value.as) : expr && outerField(value) ? fieldRef$1(value.field, value.as) : isExpr(type) ? parser(value, scope) : isData(type) ? ref(scope.getData(value).values) : isField(type) ? fieldRef$1(value) : isCompare(type) ? scope.compareRef(value) : value;
1535
- }
1536
- }
1537
-
1538
- /**
1539
- * Parse parameter for accessing an index of another data set.
1540
- */
1541
- function parseIndexParameter(def, spec, scope) {
1542
- if (!isString(spec.from)) {
1543
- error('Lookup "from" parameter must be a string literal.');
1544
- }
1545
- return scope.getData(spec.from).lookupRef(scope, spec.key);
1546
- }
1547
-
1548
- /**
1549
- * Parse a parameter that contains one or more sub-parameter objects.
1550
- */
1551
- function parseSubParameters(def, spec, scope) {
1552
- const value = spec[def.name];
1553
- if (def.array) {
1554
- if (!isArray(value)) {
1555
- // signals not allowed!
1556
- error('Expected an array of sub-parameters. Instead: ' + $(value));
1557
- }
1558
- return value.map(v => parseSubParameter(def, v, scope));
1559
- } else {
1560
- return parseSubParameter(def, value, scope);
1561
- }
1562
- }
1563
-
1564
- /**
1565
- * Parse a sub-parameter object.
1566
- */
1567
- function parseSubParameter(def, value, scope) {
1568
- const n = def.params.length;
1569
- let pdef;
1570
-
1571
- // loop over defs to find matching key
1572
- for (let i = 0; i < n; ++i) {
1573
- pdef = def.params[i];
1574
- for (const k in pdef.key) {
1575
- if (pdef.key[k] !== value[k]) {
1576
- pdef = null;
1577
- break;
1578
- }
1579
- }
1580
- if (pdef) break;
1581
- }
1582
- // raise error if matching key not found
1583
- if (!pdef) error('Unsupported parameter: ' + $(value));
1584
-
1585
- // parse params, create Params transform, return ref
1586
- const params = extend(parseParameters(pdef, value, scope), pdef.key);
1587
- return ref(scope.add(Params(params)));
1588
- }
1589
-
1590
- // -- Utilities -----
1591
-
1592
- const outerExpr = _ => _ && _.expr;
1593
- const outerField = _ => _ && _.field;
1594
- const isData = _ => _ === 'data';
1595
- const isExpr = _ => _ === 'expr';
1596
- const isField = _ => _ === 'field';
1597
- const isCompare = _ => _ === 'compare';
1598
-
1599
- function parseData$1 (from, group, scope) {
1600
- let facet, key, op, dataRef, parent;
1601
-
1602
- // if no source data, generate singleton datum
1603
- if (!from) {
1604
- dataRef = ref(scope.add(Collect(null, [{}])));
1605
- }
1606
-
1607
- // if faceted, process facet specification
1608
- else if (facet = from.facet) {
1609
- if (!group) error('Only group marks can be faceted.');
1610
-
1611
- // use pre-faceted source data, if available
1612
- if (facet.field != null) {
1613
- dataRef = parent = getDataRef(facet, scope);
1614
- } else {
1615
- // generate facet aggregates if no direct data specification
1616
- if (!from.data) {
1617
- op = parseTransform(extend({
1618
- type: 'aggregate',
1619
- groupby: array(facet.groupby)
1620
- }, facet.aggregate), scope);
1621
- op.params.key = scope.keyRef(facet.groupby);
1622
- op.params.pulse = getDataRef(facet, scope);
1623
- dataRef = parent = ref(scope.add(op));
1624
- } else {
1625
- parent = ref(scope.getData(from.data).aggregate);
1626
- }
1627
- key = scope.keyRef(facet.groupby, true);
1628
- }
1629
- }
1630
-
1631
- // if not yet defined, get source data reference
1632
- if (!dataRef) {
1633
- dataRef = getDataRef(from, scope);
1634
- }
1635
- return {
1636
- key: key,
1637
- pulse: dataRef,
1638
- parent: parent
1639
- };
1640
- }
1641
- function getDataRef(from, scope) {
1642
- return from.$ref ? from : from.data && from.data.$ref ? from.data : ref(scope.getData(from.data).output);
1643
- }
1644
-
1645
- function DataScope(scope, input, output, values, aggr) {
1646
- this.scope = scope; // parent scope object
1647
- this.input = input; // first operator in pipeline (tuple input)
1648
- this.output = output; // last operator in pipeline (tuple output)
1649
- this.values = values; // operator for accessing tuples (but not tuple flow)
1650
-
1651
- // last aggregate in transform pipeline
1652
- this.aggregate = aggr;
1653
-
1654
- // lookup table of field indices
1655
- this.index = {};
1656
- }
1657
- DataScope.fromEntries = function (scope, entries) {
1658
- const n = entries.length,
1659
- values = entries[n - 1],
1660
- output = entries[n - 2];
1661
- let input = entries[0],
1662
- aggr = null,
1663
- i = 1;
1664
- if (input && input.type === 'load') {
1665
- input = entries[1];
1666
- }
1667
-
1668
- // add operator entries to this scope, wire up pulse chain
1669
- scope.add(entries[0]);
1670
- for (; i < n; ++i) {
1671
- entries[i].params.pulse = ref(entries[i - 1]);
1672
- scope.add(entries[i]);
1673
- if (entries[i].type === 'aggregate') aggr = entries[i];
1674
- }
1675
- return new DataScope(scope, input, output, values, aggr);
1676
- };
1677
- function fieldKey(field) {
1678
- return isString(field) ? field : null;
1679
- }
1680
- function addSortField(scope, p, sort) {
1681
- const as = aggrField(sort.op, sort.field);
1682
- let s;
1683
- if (p.ops) {
1684
- for (let i = 0, n = p.as.length; i < n; ++i) {
1685
- if (p.as[i] === as) return;
1686
- }
1687
- } else {
1688
- p.ops = ['count'];
1689
- p.fields = [null];
1690
- p.as = ['count'];
1691
- }
1692
- if (sort.op) {
1693
- p.ops.push((s = sort.op.signal) ? scope.signalRef(s) : sort.op);
1694
- p.fields.push(scope.fieldRef(sort.field));
1695
- p.as.push(as);
1696
- }
1697
- }
1698
- function cache(scope, ds, name, optype, field, counts, index) {
1699
- const cache = ds[name] || (ds[name] = {}),
1700
- sort = sortKey(counts);
1701
- let k = fieldKey(field),
1702
- v,
1703
- op;
1704
- if (k != null) {
1705
- scope = ds.scope;
1706
- k = k + (sort ? '|' + sort : '');
1707
- v = cache[k];
1708
- }
1709
- if (!v) {
1710
- const params = counts ? {
1711
- field: keyFieldRef,
1712
- pulse: ds.countsRef(scope, field, counts)
1713
- } : {
1714
- field: scope.fieldRef(field),
1715
- pulse: ref(ds.output)
1716
- };
1717
- if (sort) params.sort = scope.sortRef(counts);
1718
- op = scope.add(entry(optype, undefined, params));
1719
- if (index) ds.index[field] = op;
1720
- v = ref(op);
1721
- if (k != null) cache[k] = v;
1722
- }
1723
- return v;
1724
- }
1725
- DataScope.prototype = {
1726
- countsRef(scope, field, sort) {
1727
- const ds = this,
1728
- cache = ds.counts || (ds.counts = {}),
1729
- k = fieldKey(field);
1730
- let v, a, p;
1731
- if (k != null) {
1732
- scope = ds.scope;
1733
- v = cache[k];
1734
- }
1735
- if (!v) {
1736
- p = {
1737
- groupby: scope.fieldRef(field, 'key'),
1738
- pulse: ref(ds.output)
1739
- };
1740
- if (sort && sort.field) addSortField(scope, p, sort);
1741
- a = scope.add(Aggregate(p));
1742
- v = scope.add(Collect({
1743
- pulse: ref(a)
1744
- }));
1745
- v = {
1746
- agg: a,
1747
- ref: ref(v)
1748
- };
1749
- if (k != null) cache[k] = v;
1750
- } else if (sort && sort.field) {
1751
- addSortField(scope, v.agg.params, sort);
1752
- }
1753
- return v.ref;
1754
- },
1755
- tuplesRef() {
1756
- return ref(this.values);
1757
- },
1758
- extentRef(scope, field) {
1759
- return cache(scope, this, 'extent', 'extent', field, false);
1760
- },
1761
- domainRef(scope, field) {
1762
- return cache(scope, this, 'domain', 'values', field, false);
1763
- },
1764
- valuesRef(scope, field, sort) {
1765
- return cache(scope, this, 'vals', 'values', field, sort || true);
1766
- },
1767
- lookupRef(scope, field) {
1768
- return cache(scope, this, 'lookup', 'tupleindex', field, false);
1769
- },
1770
- indataRef(scope, field) {
1771
- return cache(scope, this, 'indata', 'tupleindex', field, true, true);
1772
- }
1773
- };
1774
-
1775
- function parseFacet (spec, scope, group) {
1776
- const facet = spec.from.facet,
1777
- name = facet.name,
1778
- data = getDataRef(facet, scope);
1779
- let op;
1780
- if (!facet.name) {
1781
- error('Facet must have a name: ' + $(facet));
1782
- }
1783
- if (!facet.data) {
1784
- error('Facet must reference a data set: ' + $(facet));
1785
- }
1786
- if (facet.field) {
1787
- op = scope.add(PreFacet({
1788
- field: scope.fieldRef(facet.field),
1789
- pulse: data
1790
- }));
1791
- } else if (facet.groupby) {
1792
- op = scope.add(Facet({
1793
- key: scope.keyRef(facet.groupby),
1794
- group: ref(scope.proxy(group.parent)),
1795
- pulse: data
1796
- }));
1797
- } else {
1798
- error('Facet must specify groupby or field: ' + $(facet));
1799
- }
1800
-
1801
- // initialize facet subscope
1802
- const subscope = scope.fork(),
1803
- source = subscope.add(Collect()),
1804
- values = subscope.add(Sieve({
1805
- pulse: ref(source)
1806
- }));
1807
- subscope.addData(name, new DataScope(subscope, source, source, values));
1808
- subscope.addSignal('parent', null);
1809
-
1810
- // parse faceted subflow
1811
- op.params.subflow = {
1812
- $subflow: subscope.parse(spec).toRuntime()
1813
- };
1814
- }
1815
-
1816
- function parseSubflow (spec, scope, input) {
1817
- const op = scope.add(PreFacet({
1818
- pulse: input.pulse
1819
- })),
1820
- subscope = scope.fork();
1821
- subscope.add(Sieve());
1822
- subscope.addSignal('parent', null);
1823
-
1824
- // parse group mark subflow
1825
- op.params.subflow = {
1826
- $subflow: subscope.parse(spec).toRuntime()
1827
- };
1828
- }
1829
-
1830
- function parseTrigger (spec, scope, name) {
1831
- const remove = spec.remove,
1832
- insert = spec.insert,
1833
- toggle = spec.toggle,
1834
- modify = spec.modify,
1835
- values = spec.values,
1836
- op = scope.add(operator());
1837
- const update = 'if(' + spec.trigger + ',modify("' + name + '",' + [insert, remove, toggle, modify, values].map(_ => _ == null ? 'null' : _).join(',') + '),0)';
1838
- const expr = parser(update, scope);
1839
- op.update = expr.$expr;
1840
- op.params = expr.$params;
1841
- }
1842
-
1843
- function parseMark (spec, scope) {
1844
- const role = getRole(spec),
1845
- group = spec.type === GroupMark,
1846
- facet = spec.from && spec.from.facet,
1847
- overlap = spec.overlap;
1848
- let layout = spec.layout || role === ScopeRole || role === FrameRole,
1849
- ops,
1850
- op,
1851
- store,
1852
- enc,
1853
- name,
1854
- layoutRef,
1855
- boundRef;
1856
- const nested = role === MarkRole || layout || facet;
1857
-
1858
- // resolve input data
1859
- const input = parseData$1(spec.from, group, scope);
1860
-
1861
- // data join to map tuples to visual items
1862
- op = scope.add(DataJoin({
1863
- key: input.key || (spec.key ? fieldRef$1(spec.key) : undefined),
1864
- pulse: input.pulse,
1865
- clean: !group
1866
- }));
1867
- const joinRef = ref(op);
1868
-
1869
- // collect visual items
1870
- op = store = scope.add(Collect({
1871
- pulse: joinRef
1872
- }));
1873
-
1874
- // connect visual items to scenegraph
1875
- op = scope.add(Mark({
1876
- markdef: definition(spec),
1877
- interactive: interactive(spec.interactive, scope),
1878
- clip: clip(spec.clip, scope),
1879
- context: {
1880
- $context: true
1881
- },
1882
- groups: scope.lookup(),
1883
- parent: scope.signals.parent ? scope.signalRef('parent') : null,
1884
- index: scope.markpath(),
1885
- pulse: ref(op)
1886
- }));
1887
- const markRef = ref(op);
1888
-
1889
- // add visual encoders
1890
- op = enc = scope.add(Encode(parseEncode(spec.encode, spec.type, role, spec.style, scope, {
1891
- mod: false,
1892
- pulse: markRef
1893
- })));
1894
-
1895
- // monitor parent marks to propagate changes
1896
- op.params.parent = scope.encode();
1897
-
1898
- // add post-encoding transforms, if defined
1899
- if (spec.transform) {
1900
- spec.transform.forEach(_ => {
1901
- const tx = parseTransform(_, scope),
1902
- md = tx.metadata;
1903
- if (md.generates || md.changes) {
1904
- error('Mark transforms should not generate new data.');
1905
- }
1906
- if (!md.nomod) enc.params.mod = true; // update encode mod handling
1907
- tx.params.pulse = ref(op);
1908
- scope.add(op = tx);
1909
- });
1910
- }
1911
-
1912
- // if item sort specified, perform post-encoding
1913
- if (spec.sort) {
1914
- op = scope.add(SortItems({
1915
- sort: scope.compareRef(spec.sort),
1916
- pulse: ref(op)
1917
- }));
1918
- }
1919
- const encodeRef = ref(op);
1920
-
1921
- // add view layout operator if needed
1922
- if (facet || layout) {
1923
- layout = scope.add(ViewLayout({
1924
- layout: scope.objectProperty(spec.layout),
1925
- legends: scope.legends,
1926
- mark: markRef,
1927
- pulse: encodeRef
1928
- }));
1929
- layoutRef = ref(layout);
1930
- }
1931
-
1932
- // compute bounding boxes
1933
- const bound = scope.add(Bound({
1934
- mark: markRef,
1935
- pulse: layoutRef || encodeRef
1936
- }));
1937
- boundRef = ref(bound);
1938
-
1939
- // if group mark, recurse to parse nested content
1940
- if (group) {
1941
- // juggle layout & bounds to ensure they run *after* any faceting transforms
1942
- if (nested) {
1943
- ops = scope.operators;
1944
- ops.pop();
1945
- if (layout) ops.pop();
1946
- }
1947
- scope.pushState(encodeRef, layoutRef || boundRef, joinRef);
1948
- facet ? parseFacet(spec, scope, input) // explicit facet
1949
- : nested ? parseSubflow(spec, scope, input) // standard mark group
1950
- : scope.parse(spec); // guide group, we can avoid nested scopes
1951
- scope.popState();
1952
- if (nested) {
1953
- if (layout) ops.push(layout);
1954
- ops.push(bound);
1955
- }
1956
- }
1957
-
1958
- // if requested, add overlap removal transform
1959
- if (overlap) {
1960
- boundRef = parseOverlap(overlap, boundRef, scope);
1961
- }
1962
-
1963
- // render / sieve items
1964
- const render = scope.add(Render({
1965
- pulse: boundRef
1966
- })),
1967
- sieve = scope.add(Sieve({
1968
- pulse: ref(render)
1969
- }, undefined, scope.parent()));
1970
-
1971
- // if mark is named, make accessible as reactive geometry
1972
- // add trigger updates if defined
1973
- if (spec.name != null) {
1974
- name = spec.name;
1975
- scope.addData(name, new DataScope(scope, store, render, sieve));
1976
- if (spec.on) spec.on.forEach(on => {
1977
- if (on.insert || on.remove || on.toggle) {
1978
- error('Marks only support modify triggers.');
1979
- }
1980
- parseTrigger(on, scope, name);
1981
- });
1982
- }
1983
- }
1984
- function parseOverlap(overlap, source, scope) {
1985
- const method = overlap.method,
1986
- bound = overlap.bound,
1987
- sep = overlap.separation;
1988
- const params = {
1989
- separation: isSignal(sep) ? scope.signalRef(sep.signal) : sep,
1990
- method: isSignal(method) ? scope.signalRef(method.signal) : method,
1991
- pulse: source
1992
- };
1993
- if (overlap.order) {
1994
- params.sort = scope.compareRef({
1995
- field: overlap.order
1996
- });
1997
- }
1998
- if (bound) {
1999
- const tol = bound.tolerance;
2000
- params.boundTolerance = isSignal(tol) ? scope.signalRef(tol.signal) : +tol;
2001
- params.boundScale = scope.scaleRef(bound.scale);
2002
- params.boundOrient = bound.orient;
2003
- }
2004
- return ref(scope.add(Overlap(params)));
2005
- }
2006
-
2007
- function parseLegend (spec, scope) {
2008
- const config = scope.config.legend,
2009
- encode = spec.encode || {},
2010
- _ = lookup(spec, config),
2011
- legendEncode = encode.legend || {},
2012
- name = legendEncode.name || undefined,
2013
- interactive = legendEncode.interactive,
2014
- style = legendEncode.style,
2015
- scales = {};
2016
- let scale = 0,
2017
- entryLayout,
2018
- params,
2019
- children;
2020
-
2021
- // resolve scales and 'canonical' scale name
2022
- LegendScales.forEach(s => spec[s] ? (scales[s] = spec[s], scale = scale || spec[s]) : 0);
2023
- if (!scale) error('Missing valid scale for legend.');
2024
-
2025
- // resolve legend type (symbol, gradient, or discrete gradient)
2026
- const type = legendType(spec, scope.scaleType(scale));
2027
-
2028
- // single-element data source for legend group
2029
- const datum = {
2030
- title: spec.title != null,
2031
- scales: scales,
2032
- type: type,
2033
- vgrad: type !== 'symbol' && _.isVertical()
2034
- };
2035
- const dataRef = ref(scope.add(Collect(null, [datum])));
2036
-
2037
- // encoding properties for legend entry sub-group
2038
- const entryEncode = {
2039
- enter: {
2040
- x: {
2041
- value: 0
2042
- },
2043
- y: {
2044
- value: 0
2045
- }
2046
- }
2047
- };
2048
-
2049
- // data source for legend values
2050
- const entryRef = ref(scope.add(LegendEntries(params = {
2051
- type: type,
2052
- scale: scope.scaleRef(scale),
2053
- count: scope.objectProperty(_('tickCount')),
2054
- limit: scope.property(_('symbolLimit')),
2055
- values: scope.objectProperty(spec.values),
2056
- minstep: scope.property(spec.tickMinStep),
2057
- formatType: scope.property(spec.formatType),
2058
- formatSpecifier: scope.property(spec.format)
2059
- })));
2060
-
2061
- // continuous gradient legend
2062
- if (type === Gradient) {
2063
- children = [legendGradient(spec, scale, config, encode.gradient), legendGradientLabels(spec, config, encode.labels, entryRef)];
2064
- // adjust default tick count based on the gradient length
2065
- params.count = params.count || scope.signalRef(`max(2,2*floor((${deref(_.gradientLength())})/100))`);
2066
- }
2067
-
2068
- // discrete gradient legend
2069
- else if (type === Discrete) {
2070
- children = [legendGradientDiscrete(spec, scale, config, encode.gradient, entryRef), legendGradientLabels(spec, config, encode.labels, entryRef)];
2071
- }
2072
-
2073
- // symbol legend
2074
- else {
2075
- // determine legend symbol group layout
2076
- entryLayout = legendSymbolLayout(spec, config);
2077
- children = [legendSymbolGroups(spec, config, encode, entryRef, deref(entryLayout.columns))];
2078
- // pass symbol size information to legend entry generator
2079
- params.size = sizeExpression(spec, scope, children[0].marks);
2080
- }
2081
-
2082
- // generate legend marks
2083
- children = [guideGroup({
2084
- role: LegendEntryRole,
2085
- from: dataRef,
2086
- encode: entryEncode,
2087
- marks: children,
2088
- layout: entryLayout,
2089
- interactive
2090
- })];
2091
-
2092
- // include legend title if defined
2093
- if (datum.title) {
2094
- children.push(legendTitle(spec, config, encode.title, dataRef));
2095
- }
2096
-
2097
- // parse legend specification
2098
- return parseMark(guideGroup({
2099
- role: LegendRole,
2100
- from: dataRef,
2101
- encode: extendEncode(buildLegendEncode(_, spec, config), legendEncode, Skip),
2102
- marks: children,
2103
- aria: _('aria'),
2104
- description: _('description'),
2105
- zindex: _('zindex'),
2106
- name,
2107
- interactive,
2108
- style
2109
- }), scope);
2110
- }
2111
- function legendType(spec, scaleType) {
2112
- let type = spec.type || Symbols;
2113
- if (!spec.type && scaleCount(spec) === 1 && (spec.fill || spec.stroke)) {
2114
- type = isContinuous(scaleType) ? Gradient : isDiscretizing(scaleType) ? Discrete : Symbols;
2115
- }
2116
- return type !== Gradient ? type : isDiscretizing(scaleType) ? Discrete : Gradient;
2117
- }
2118
- function scaleCount(spec) {
2119
- return LegendScales.reduce((count, type) => count + (spec[type] ? 1 : 0), 0);
2120
- }
2121
- function buildLegendEncode(_, spec, config) {
2122
- const encode = {
2123
- enter: {},
2124
- update: {}
2125
- };
2126
- addEncoders(encode, {
2127
- orient: _('orient'),
2128
- offset: _('offset'),
2129
- padding: _('padding'),
2130
- titlePadding: _('titlePadding'),
2131
- cornerRadius: _('cornerRadius'),
2132
- fill: _('fillColor'),
2133
- stroke: _('strokeColor'),
2134
- strokeWidth: config.strokeWidth,
2135
- strokeDash: config.strokeDash,
2136
- x: _('legendX'),
2137
- y: _('legendY'),
2138
- // accessibility support
2139
- format: spec.format,
2140
- formatType: spec.formatType
2141
- });
2142
- return encode;
2143
- }
2144
- function sizeExpression(spec, scope, marks) {
2145
- const size = deref(getChannel('size', spec, marks)),
2146
- strokeWidth = deref(getChannel('strokeWidth', spec, marks)),
2147
- fontSize = deref(getFontSize(marks[1].encode, scope, GuideLabelStyle));
2148
- return parser(`max(ceil(sqrt(${size})+${strokeWidth}),${fontSize})`, scope);
2149
- }
2150
- function getChannel(name, spec, marks) {
2151
- return spec[name] ? `scale("${spec[name]}",datum)` : getEncoding(name, marks[0].encode);
2152
- }
2153
- function getFontSize(encode, scope, style) {
2154
- return getEncoding('fontSize', encode) || getStyle('fontSize', scope, style);
2155
- }
2156
-
2157
- const angleExpr = `item.orient==="${Left}"?-90:item.orient==="${Right}"?90:0`;
2158
- function parseTitle (spec, scope) {
2159
- spec = isString(spec) ? {
2160
- text: spec
2161
- } : spec;
2162
- const _ = lookup(spec, scope.config.title),
2163
- encode = spec.encode || {},
2164
- userEncode = encode.group || {},
2165
- name = userEncode.name || undefined,
2166
- interactive = userEncode.interactive,
2167
- style = userEncode.style,
2168
- children = [];
2169
-
2170
- // single-element data source for group title
2171
- const datum = {},
2172
- dataRef = ref(scope.add(Collect(null, [datum])));
2173
-
2174
- // include title text
2175
- children.push(buildTitle(spec, _, titleEncode(spec), dataRef));
2176
-
2177
- // include subtitle text
2178
- if (spec.subtitle) {
2179
- children.push(buildSubTitle(spec, _, encode.subtitle, dataRef));
2180
- }
2181
-
2182
- // parse title specification
2183
- return parseMark(guideGroup({
2184
- role: TitleRole,
2185
- from: dataRef,
2186
- encode: groupEncode(_, userEncode),
2187
- marks: children,
2188
- aria: _('aria'),
2189
- description: _('description'),
2190
- zindex: _('zindex'),
2191
- name,
2192
- interactive,
2193
- style
2194
- }), scope);
2195
- }
2196
-
2197
- // provide backwards-compatibility for title custom encode;
2198
- // the top-level encode block has been *deprecated*.
2199
- function titleEncode(spec) {
2200
- const encode = spec.encode;
2201
- return encode && encode.title || extend({
2202
- name: spec.name,
2203
- interactive: spec.interactive,
2204
- style: spec.style
2205
- }, encode);
2206
- }
2207
- function groupEncode(_, userEncode) {
2208
- const encode = {
2209
- enter: {},
2210
- update: {}
2211
- };
2212
- addEncoders(encode, {
2213
- orient: _('orient'),
2214
- anchor: _('anchor'),
2215
- align: {
2216
- signal: alignExpr$1
2217
- },
2218
- angle: {
2219
- signal: angleExpr
2220
- },
2221
- limit: _('limit'),
2222
- frame: _('frame'),
2223
- offset: _('offset') || 0,
2224
- padding: _('subtitlePadding')
2225
- });
2226
- return extendEncode(encode, userEncode, Skip);
2227
- }
2228
- function buildTitle(spec, _, userEncode, dataRef) {
2229
- const zero = {
2230
- value: 0
2231
- },
2232
- text = spec.text,
2233
- encode = {
2234
- enter: {
2235
- opacity: zero
2236
- },
2237
- update: {
2238
- opacity: {
2239
- value: 1
2240
- }
2241
- },
2242
- exit: {
2243
- opacity: zero
2244
- }
2245
- };
2246
- addEncoders(encode, {
2247
- text: text,
2248
- align: {
2249
- signal: 'item.mark.group.align'
2250
- },
2251
- angle: {
2252
- signal: 'item.mark.group.angle'
2253
- },
2254
- limit: {
2255
- signal: 'item.mark.group.limit'
2256
- },
2257
- baseline: 'top',
2258
- dx: _('dx'),
2259
- dy: _('dy'),
2260
- fill: _('color'),
2261
- font: _('font'),
2262
- fontSize: _('fontSize'),
2263
- fontStyle: _('fontStyle'),
2264
- fontWeight: _('fontWeight'),
2265
- lineHeight: _('lineHeight')
2266
- }, {
2267
- // update
2268
- align: _('align'),
2269
- angle: _('angle'),
2270
- baseline: _('baseline')
2271
- });
2272
- return guideMark({
2273
- type: TextMark,
2274
- role: TitleTextRole,
2275
- style: GroupTitleStyle,
2276
- from: dataRef,
2277
- encode
2278
- }, userEncode);
2279
- }
2280
- function buildSubTitle(spec, _, userEncode, dataRef) {
2281
- const zero = {
2282
- value: 0
2283
- },
2284
- text = spec.subtitle,
2285
- encode = {
2286
- enter: {
2287
- opacity: zero
2288
- },
2289
- update: {
2290
- opacity: {
2291
- value: 1
2292
- }
2293
- },
2294
- exit: {
2295
- opacity: zero
2296
- }
2297
- };
2298
- addEncoders(encode, {
2299
- text: text,
2300
- align: {
2301
- signal: 'item.mark.group.align'
2302
- },
2303
- angle: {
2304
- signal: 'item.mark.group.angle'
2305
- },
2306
- limit: {
2307
- signal: 'item.mark.group.limit'
2308
- },
2309
- baseline: 'top',
2310
- dx: _('dx'),
2311
- dy: _('dy'),
2312
- fill: _('subtitleColor'),
2313
- font: _('subtitleFont'),
2314
- fontSize: _('subtitleFontSize'),
2315
- fontStyle: _('subtitleFontStyle'),
2316
- fontWeight: _('subtitleFontWeight'),
2317
- lineHeight: _('subtitleLineHeight')
2318
- }, {
2319
- // update
2320
- align: _('align'),
2321
- angle: _('angle'),
2322
- baseline: _('baseline')
2323
- });
2324
- return guideMark({
2325
- type: TextMark,
2326
- role: TitleSubtitleRole,
2327
- style: GroupSubtitleStyle,
2328
- from: dataRef,
2329
- encode
2330
- }, userEncode);
2331
- }
2332
-
2333
- function parseData(data, scope) {
2334
- const transforms = [];
2335
- if (data.transform) {
2336
- data.transform.forEach(tx => {
2337
- transforms.push(parseTransform(tx, scope));
2338
- });
2339
- }
2340
- if (data.on) {
2341
- data.on.forEach(on => {
2342
- parseTrigger(on, scope, data.name);
2343
- });
2344
- }
2345
- scope.addDataPipeline(data.name, analyze(data, scope, transforms));
2346
- }
2347
-
2348
- /**
2349
- * Analyze a data pipeline, add needed operators.
2350
- */
2351
- function analyze(data, scope, ops) {
2352
- const output = [];
2353
- let source = null,
2354
- modify = false,
2355
- generate = false,
2356
- upstream,
2357
- i,
2358
- n,
2359
- t,
2360
- m;
2361
- if (data.values) {
2362
- // hard-wired input data set
2363
- if (isSignal(data.values) || hasSignal(data.format)) {
2364
- // if either values is signal or format has signal, use dynamic loader
2365
- output.push(load(scope, data));
2366
- output.push(source = collect());
2367
- } else {
2368
- // otherwise, ingest upon dataflow init
2369
- output.push(source = collect({
2370
- $ingest: data.values,
2371
- $format: data.format
2372
- }));
2373
- }
2374
- } else if (data.url) {
2375
- // load data from external source
2376
- if (hasSignal(data.url) || hasSignal(data.format)) {
2377
- // if either url or format has signal, use dynamic loader
2378
- output.push(load(scope, data));
2379
- output.push(source = collect());
2380
- } else {
2381
- // otherwise, request load upon dataflow init
2382
- output.push(source = collect({
2383
- $request: data.url,
2384
- $format: data.format
2385
- }));
2386
- }
2387
- } else if (data.source) {
2388
- // derives from one or more other data sets
2389
- source = upstream = array(data.source).map(d => ref(scope.getData(d).output));
2390
- output.push(null); // populate later
2391
- }
2392
-
2393
- // scan data transforms, add collectors as needed
2394
- for (i = 0, n = ops.length; i < n; ++i) {
2395
- t = ops[i];
2396
- m = t.metadata;
2397
- if (!source && !m.source) {
2398
- output.push(source = collect());
2399
- }
2400
- output.push(t);
2401
- if (m.generates) generate = true;
2402
- if (m.modifies && !generate) modify = true;
2403
- if (m.source) source = t;else if (m.changes) source = null;
2404
- }
2405
- if (upstream) {
2406
- n = upstream.length - 1;
2407
- output[0] = Relay({
2408
- derive: modify,
2409
- pulse: n ? upstream : upstream[0]
2410
- });
2411
- if (modify || n) {
2412
- // collect derived and multi-pulse tuples
2413
- output.splice(1, 0, collect());
2414
- }
2415
- }
2416
- if (!source) output.push(collect());
2417
- output.push(Sieve({}));
2418
- return output;
2419
- }
2420
- function collect(values) {
2421
- const s = Collect({}, values);
2422
- s.metadata = {
2423
- source: true
2424
- };
2425
- return s;
2426
- }
2427
- function load(scope, data) {
2428
- return Load({
2429
- url: data.url ? scope.property(data.url) : undefined,
2430
- async: data.async ? scope.property(data.async) : undefined,
2431
- values: data.values ? scope.property(data.values) : undefined,
2432
- format: scope.objectProperty(data.format)
2433
- });
2434
- }
2435
-
2436
- const isX = orient => orient === Bottom || orient === Top;
2437
-
2438
- // get sign coefficient based on axis orient
2439
- const getSign = (orient, a, b) => isSignal(orient) ? ifLeftTopExpr(orient.signal, a, b) : orient === Left || orient === Top ? a : b;
2440
-
2441
- // condition on axis x-direction
2442
- const ifX = (orient, a, b) => isSignal(orient) ? ifXEnc(orient.signal, a, b) : isX(orient) ? a : b;
2443
-
2444
- // condition on axis y-direction
2445
- const ifY = (orient, a, b) => isSignal(orient) ? ifYEnc(orient.signal, a, b) : isX(orient) ? b : a;
2446
- const ifTop = (orient, a, b) => isSignal(orient) ? ifTopExpr(orient.signal, a, b) : orient === Top ? {
2447
- value: a
2448
- } : {
2449
- value: b
2450
- };
2451
- const ifRight = (orient, a, b) => isSignal(orient) ? ifRightExpr(orient.signal, a, b) : orient === Right ? {
2452
- value: a
2453
- } : {
2454
- value: b
2455
- };
2456
- const ifXEnc = ($orient, a, b) => ifEnc(`${$orient} === '${Top}' || ${$orient} === '${Bottom}'`, a, b);
2457
- const ifYEnc = ($orient, a, b) => ifEnc(`${$orient} !== '${Top}' && ${$orient} !== '${Bottom}'`, a, b);
2458
- const ifLeftTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Left}' || ${$orient} === '${Top}'`, a, b);
2459
- const ifTopExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Top}'`, a, b);
2460
- const ifRightExpr = ($orient, a, b) => ifExpr(`${$orient} === '${Right}'`, a, b);
2461
- const ifEnc = (test, a, b) => {
2462
- // ensure inputs are encoder objects (or null)
2463
- a = a != null ? encoder(a) : a;
2464
- b = b != null ? encoder(b) : b;
2465
- if (isSimple(a) && isSimple(b)) {
2466
- // if possible generate simple signal expression
2467
- a = a ? a.signal || $(a.value) : null;
2468
- b = b ? b.signal || $(b.value) : null;
2469
- return {
2470
- signal: `${test} ? (${a}) : (${b})`
2471
- };
2472
- } else {
2473
- // otherwise generate rule set
2474
- return [extend({
2475
- test
2476
- }, a)].concat(b || []);
2477
- }
2478
- };
2479
- const isSimple = enc => enc == null || Object.keys(enc).length === 1;
2480
- const ifExpr = (test, a, b) => ({
2481
- signal: `${test} ? (${toExpr(a)}) : (${toExpr(b)})`
2482
- });
2483
- const ifOrient = ($orient, t, b, l, r) => ({
2484
- signal: (l != null ? `${$orient} === '${Left}' ? (${toExpr(l)}) : ` : '') + (b != null ? `${$orient} === '${Bottom}' ? (${toExpr(b)}) : ` : '') + (r != null ? `${$orient} === '${Right}' ? (${toExpr(r)}) : ` : '') + (t != null ? `${$orient} === '${Top}' ? (${toExpr(t)}) : ` : '') + '(null)'
2485
- });
2486
- const toExpr = v => isSignal(v) ? v.signal : v == null ? null : $(v);
2487
- const mult = (sign, value) => value === 0 ? 0 : isSignal(sign) ? {
2488
- signal: `(${sign.signal}) * ${value}`
2489
- } : {
2490
- value: sign * value
2491
- };
2492
- const patch = (value, base) => {
2493
- const s = value.signal;
2494
- return s && s.endsWith('(null)') ? {
2495
- signal: s.slice(0, -6) + base.signal
2496
- } : value;
2497
- };
2498
-
2499
- function fallback(prop, config, axisConfig, style) {
2500
- let styleProp;
2501
- if (config && has$1(config, prop)) {
2502
- return config[prop];
2503
- } else if (has$1(axisConfig, prop)) {
2504
- return axisConfig[prop];
2505
- } else if (prop.startsWith('title')) {
2506
- switch (prop) {
2507
- case 'titleColor':
2508
- styleProp = 'fill';
2509
- break;
2510
- case 'titleFont':
2511
- case 'titleFontSize':
2512
- case 'titleFontWeight':
2513
- styleProp = prop[5].toLowerCase() + prop.slice(6);
2514
- }
2515
- return style[GuideTitleStyle][styleProp];
2516
- } else if (prop.startsWith('label')) {
2517
- switch (prop) {
2518
- case 'labelColor':
2519
- styleProp = 'fill';
2520
- break;
2521
- case 'labelFont':
2522
- case 'labelFontSize':
2523
- styleProp = prop[5].toLowerCase() + prop.slice(6);
2524
- }
2525
- return style[GuideLabelStyle][styleProp];
2526
- }
2527
- return null;
2528
- }
2529
- function keys(objects) {
2530
- const map = {};
2531
- for (const obj of objects) {
2532
- if (!obj) continue;
2533
- for (const key in obj) map[key] = 1;
2534
- }
2535
- return Object.keys(map);
2536
- }
2537
- function axisConfig (spec, scope) {
2538
- var config = scope.config,
2539
- style = config.style,
2540
- axis = config.axis,
2541
- band = scope.scaleType(spec.scale) === 'band' && config.axisBand,
2542
- orient = spec.orient,
2543
- xy,
2544
- or,
2545
- key;
2546
- if (isSignal(orient)) {
2547
- const xyKeys = keys([config.axisX, config.axisY]),
2548
- orientKeys = keys([config.axisTop, config.axisBottom, config.axisLeft, config.axisRight]);
2549
- xy = {};
2550
- for (key of xyKeys) {
2551
- xy[key] = ifX(orient, fallback(key, config.axisX, axis, style), fallback(key, config.axisY, axis, style));
2552
- }
2553
- or = {};
2554
- for (key of orientKeys) {
2555
- or[key] = ifOrient(orient.signal, fallback(key, config.axisTop, axis, style), fallback(key, config.axisBottom, axis, style), fallback(key, config.axisLeft, axis, style), fallback(key, config.axisRight, axis, style));
2556
- }
2557
- } else {
2558
- xy = orient === Top || orient === Bottom ? config.axisX : config.axisY;
2559
- or = config['axis' + orient[0].toUpperCase() + orient.slice(1)];
2560
- }
2561
- const result = xy || or || band ? extend({}, axis, xy, or, band) : axis;
2562
- return result;
2563
- }
2564
-
2565
- function axisDomain (spec, config, userEncode, dataRef) {
2566
- const _ = lookup(spec, config),
2567
- orient = spec.orient;
2568
- let enter, update;
2569
- const encode = {
2570
- enter: enter = {
2571
- opacity: zero
2572
- },
2573
- update: update = {
2574
- opacity: one
2575
- },
2576
- exit: {
2577
- opacity: zero
2578
- }
2579
- };
2580
- addEncoders(encode, {
2581
- stroke: _('domainColor'),
2582
- strokeCap: _('domainCap'),
2583
- strokeDash: _('domainDash'),
2584
- strokeDashOffset: _('domainDashOffset'),
2585
- strokeWidth: _('domainWidth'),
2586
- strokeOpacity: _('domainOpacity')
2587
- });
2588
- const pos0 = position(spec, 0);
2589
- const pos1 = position(spec, 1);
2590
- enter.x = update.x = ifX(orient, pos0, zero);
2591
- enter.x2 = update.x2 = ifX(orient, pos1);
2592
- enter.y = update.y = ifY(orient, pos0, zero);
2593
- enter.y2 = update.y2 = ifY(orient, pos1);
2594
- return guideMark({
2595
- type: RuleMark,
2596
- role: AxisDomainRole,
2597
- from: dataRef,
2598
- encode
2599
- }, userEncode);
2600
- }
2601
- function position(spec, pos) {
2602
- return {
2603
- scale: spec.scale,
2604
- range: pos
2605
- };
2606
- }
2607
-
2608
- function axisGrid (spec, config, userEncode, dataRef, band) {
2609
- const _ = lookup(spec, config),
2610
- orient = spec.orient,
2611
- vscale = spec.gridScale,
2612
- sign = getSign(orient, 1, -1),
2613
- offset = offsetValue(spec.offset, sign);
2614
- let enter, exit, update;
2615
- const encode = {
2616
- enter: enter = {
2617
- opacity: zero
2618
- },
2619
- update: update = {
2620
- opacity: one
2621
- },
2622
- exit: exit = {
2623
- opacity: zero
2624
- }
2625
- };
2626
- addEncoders(encode, {
2627
- stroke: _('gridColor'),
2628
- strokeCap: _('gridCap'),
2629
- strokeDash: _('gridDash'),
2630
- strokeDashOffset: _('gridDashOffset'),
2631
- strokeOpacity: _('gridOpacity'),
2632
- strokeWidth: _('gridWidth')
2633
- });
2634
- const tickPos = {
2635
- scale: spec.scale,
2636
- field: Value,
2637
- band: band.band,
2638
- extra: band.extra,
2639
- offset: band.offset,
2640
- round: _('tickRound')
2641
- };
2642
- const sz = ifX(orient, {
2643
- signal: 'height'
2644
- }, {
2645
- signal: 'width'
2646
- });
2647
- const gridStart = vscale ? {
2648
- scale: vscale,
2649
- range: 0,
2650
- mult: sign,
2651
- offset: offset
2652
- } : {
2653
- value: 0,
2654
- offset: offset
2655
- };
2656
- const gridEnd = vscale ? {
2657
- scale: vscale,
2658
- range: 1,
2659
- mult: sign,
2660
- offset: offset
2661
- } : extend(sz, {
2662
- mult: sign,
2663
- offset: offset
2664
- });
2665
- enter.x = update.x = ifX(orient, tickPos, gridStart);
2666
- enter.y = update.y = ifY(orient, tickPos, gridStart);
2667
- enter.x2 = update.x2 = ifY(orient, gridEnd);
2668
- enter.y2 = update.y2 = ifX(orient, gridEnd);
2669
- exit.x = ifX(orient, tickPos);
2670
- exit.y = ifY(orient, tickPos);
2671
- return guideMark({
2672
- type: RuleMark,
2673
- role: AxisGridRole,
2674
- key: Value,
2675
- from: dataRef,
2676
- encode
2677
- }, userEncode);
2678
- }
2679
- function offsetValue(offset, sign) {
2680
- if (sign === 1) ; else if (!isObject(offset)) {
2681
- offset = isSignal(sign) ? {
2682
- signal: `(${sign.signal}) * (${offset || 0})`
2683
- } : sign * (offset || 0);
2684
- } else {
2685
- let entry = offset = extend({}, offset);
2686
- while (entry.mult != null) {
2687
- if (!isObject(entry.mult)) {
2688
- entry.mult = isSignal(sign) // no offset if sign === 1
2689
- ? {
2690
- signal: `(${entry.mult}) * (${sign.signal})`
2691
- } : entry.mult * sign;
2692
- return offset;
2693
- } else {
2694
- entry = entry.mult = extend({}, entry.mult);
2695
- }
2696
- }
2697
- entry.mult = sign;
2698
- }
2699
- return offset;
2700
- }
2701
-
2702
- function axisTicks (spec, config, userEncode, dataRef, size, band) {
2703
- const _ = lookup(spec, config),
2704
- orient = spec.orient,
2705
- sign = getSign(orient, -1, 1);
2706
- let enter, exit, update;
2707
- const encode = {
2708
- enter: enter = {
2709
- opacity: zero
2710
- },
2711
- update: update = {
2712
- opacity: one
2713
- },
2714
- exit: exit = {
2715
- opacity: zero
2716
- }
2717
- };
2718
- addEncoders(encode, {
2719
- stroke: _('tickColor'),
2720
- strokeCap: _('tickCap'),
2721
- strokeDash: _('tickDash'),
2722
- strokeDashOffset: _('tickDashOffset'),
2723
- strokeOpacity: _('tickOpacity'),
2724
- strokeWidth: _('tickWidth')
2725
- });
2726
- const tickSize = encoder(size);
2727
- tickSize.mult = sign;
2728
- const tickPos = {
2729
- scale: spec.scale,
2730
- field: Value,
2731
- band: band.band,
2732
- extra: band.extra,
2733
- offset: band.offset,
2734
- round: _('tickRound')
2735
- };
2736
- update.y = enter.y = ifX(orient, zero, tickPos);
2737
- update.y2 = enter.y2 = ifX(orient, tickSize);
2738
- exit.x = ifX(orient, tickPos);
2739
- update.x = enter.x = ifY(orient, zero, tickPos);
2740
- update.x2 = enter.x2 = ifY(orient, tickSize);
2741
- exit.y = ifY(orient, tickPos);
2742
- return guideMark({
2743
- type: RuleMark,
2744
- role: AxisTickRole,
2745
- key: Value,
2746
- from: dataRef,
2747
- encode
2748
- }, userEncode);
2749
- }
2750
-
2751
- function flushExpr(scale, threshold, a, b, c) {
2752
- return {
2753
- signal: 'flush(range("' + scale + '"), ' + 'scale("' + scale + '", datum.value), ' + threshold + ',' + a + ',' + b + ',' + c + ')'
2754
- };
2755
- }
2756
- function axisLabels (spec, config, userEncode, dataRef, size, band) {
2757
- const _ = lookup(spec, config),
2758
- orient = spec.orient,
2759
- scale = spec.scale,
2760
- sign = getSign(orient, -1, 1),
2761
- flush = deref(_('labelFlush')),
2762
- flushOffset = deref(_('labelFlushOffset')),
2763
- labelAlign = _('labelAlign'),
2764
- labelBaseline = _('labelBaseline');
2765
- let flushOn = flush === 0 || !!flush,
2766
- update;
2767
- const tickSize = encoder(size);
2768
- tickSize.mult = sign;
2769
- tickSize.offset = encoder(_('labelPadding') || 0);
2770
- tickSize.offset.mult = sign;
2771
- const tickPos = {
2772
- scale: scale,
2773
- field: Value,
2774
- band: 0.5,
2775
- offset: extendOffset(band.offset, _('labelOffset'))
2776
- };
2777
- const align = ifX(orient, flushOn ? flushExpr(scale, flush, '"left"', '"right"', '"center"') : {
2778
- value: 'center'
2779
- }, ifRight(orient, 'left', 'right'));
2780
- const baseline = ifX(orient, ifTop(orient, 'bottom', 'top'), flushOn ? flushExpr(scale, flush, '"top"', '"bottom"', '"middle"') : {
2781
- value: 'middle'
2782
- });
2783
- const offsetExpr = flushExpr(scale, flush, `-(${flushOffset})`, flushOffset, 0);
2784
- flushOn = flushOn && flushOffset;
2785
- const enter = {
2786
- opacity: zero,
2787
- x: ifX(orient, tickPos, tickSize),
2788
- y: ifY(orient, tickPos, tickSize)
2789
- };
2790
- const encode = {
2791
- enter: enter,
2792
- update: update = {
2793
- opacity: one,
2794
- text: {
2795
- field: Label
2796
- },
2797
- x: enter.x,
2798
- y: enter.y,
2799
- align,
2800
- baseline
2801
- },
2802
- exit: {
2803
- opacity: zero,
2804
- x: enter.x,
2805
- y: enter.y
2806
- }
2807
- };
2808
- addEncoders(encode, {
2809
- dx: !labelAlign && flushOn ? ifX(orient, offsetExpr) : null,
2810
- dy: !labelBaseline && flushOn ? ifY(orient, offsetExpr) : null
2811
- });
2812
- addEncoders(encode, {
2813
- angle: _('labelAngle'),
2814
- fill: _('labelColor'),
2815
- fillOpacity: _('labelOpacity'),
2816
- font: _('labelFont'),
2817
- fontSize: _('labelFontSize'),
2818
- fontWeight: _('labelFontWeight'),
2819
- fontStyle: _('labelFontStyle'),
2820
- limit: _('labelLimit'),
2821
- lineHeight: _('labelLineHeight')
2822
- }, {
2823
- align: labelAlign,
2824
- baseline: labelBaseline
2825
- });
2826
- const bound = _('labelBound');
2827
- let overlap = _('labelOverlap');
2828
-
2829
- // if overlap method or bound defined, request label overlap removal
2830
- overlap = overlap || bound ? {
2831
- separation: _('labelSeparation'),
2832
- method: overlap,
2833
- order: 'datum.index',
2834
- bound: bound ? {
2835
- scale,
2836
- orient,
2837
- tolerance: bound
2838
- } : null
2839
- } : undefined;
2840
- if (update.align !== align) {
2841
- update.align = patch(update.align, align);
2842
- }
2843
- if (update.baseline !== baseline) {
2844
- update.baseline = patch(update.baseline, baseline);
2845
- }
2846
- return guideMark({
2847
- type: TextMark,
2848
- role: AxisLabelRole,
2849
- style: GuideLabelStyle,
2850
- key: Value,
2851
- from: dataRef,
2852
- encode,
2853
- overlap
2854
- }, userEncode);
2855
- }
2856
-
2857
- function axisTitle (spec, config, userEncode, dataRef) {
2858
- const _ = lookup(spec, config),
2859
- orient = spec.orient,
2860
- sign = getSign(orient, -1, 1);
2861
- let enter, update;
2862
- const encode = {
2863
- enter: enter = {
2864
- opacity: zero,
2865
- anchor: encoder(_('titleAnchor', null)),
2866
- align: {
2867
- signal: alignExpr$1
2868
- }
2869
- },
2870
- update: update = extend({}, enter, {
2871
- opacity: one,
2872
- text: encoder(spec.title)
2873
- }),
2874
- exit: {
2875
- opacity: zero
2876
- }
2877
- };
2878
- const titlePos = {
2879
- signal: `lerp(range("${spec.scale}"), ${anchorExpr(0, 1, 0.5)})`
2880
- };
2881
- update.x = ifX(orient, titlePos);
2882
- update.y = ifY(orient, titlePos);
2883
- enter.angle = ifX(orient, zero, mult(sign, 90));
2884
- enter.baseline = ifX(orient, ifTop(orient, Bottom, Top), {
2885
- value: Bottom
2886
- });
2887
- update.angle = enter.angle;
2888
- update.baseline = enter.baseline;
2889
- addEncoders(encode, {
2890
- fill: _('titleColor'),
2891
- fillOpacity: _('titleOpacity'),
2892
- font: _('titleFont'),
2893
- fontSize: _('titleFontSize'),
2894
- fontStyle: _('titleFontStyle'),
2895
- fontWeight: _('titleFontWeight'),
2896
- limit: _('titleLimit'),
2897
- lineHeight: _('titleLineHeight')
2898
- }, {
2899
- // require update
2900
- align: _('titleAlign'),
2901
- angle: _('titleAngle'),
2902
- baseline: _('titleBaseline')
2903
- });
2904
- autoLayout(_, orient, encode, userEncode);
2905
- encode.update.align = patch(encode.update.align, enter.align);
2906
- encode.update.angle = patch(encode.update.angle, enter.angle);
2907
- encode.update.baseline = patch(encode.update.baseline, enter.baseline);
2908
- return guideMark({
2909
- type: TextMark,
2910
- role: AxisTitleRole,
2911
- style: GuideTitleStyle,
2912
- from: dataRef,
2913
- encode
2914
- }, userEncode);
2915
- }
2916
- function autoLayout(_, orient, encode, userEncode) {
2917
- const auto = (value, dim) => value != null ? (encode.update[dim] = patch(encoder(value), encode.update[dim]), false) : !has(dim, userEncode) ? true : false;
2918
- const autoY = auto(_('titleX'), 'x'),
2919
- autoX = auto(_('titleY'), 'y');
2920
- encode.enter.auto = autoX === autoY ? encoder(autoX) : ifX(orient, encoder(autoX), encoder(autoY));
2921
- }
2922
-
2923
- function parseAxis (spec, scope) {
2924
- const config = axisConfig(spec, scope),
2925
- encode = spec.encode || {},
2926
- axisEncode = encode.axis || {},
2927
- name = axisEncode.name || undefined,
2928
- interactive = axisEncode.interactive,
2929
- style = axisEncode.style,
2930
- _ = lookup(spec, config),
2931
- band = tickBand(_);
2932
-
2933
- // single-element data source for axis group
2934
- const datum = {
2935
- scale: spec.scale,
2936
- ticks: !!_('ticks'),
2937
- labels: !!_('labels'),
2938
- grid: !!_('grid'),
2939
- domain: !!_('domain'),
2940
- title: spec.title != null
2941
- };
2942
- const dataRef = ref(scope.add(Collect({}, [datum])));
2943
-
2944
- // data source for axis ticks
2945
- const ticksRef = ref(scope.add(AxisTicks({
2946
- scale: scope.scaleRef(spec.scale),
2947
- extra: scope.property(band.extra),
2948
- count: scope.objectProperty(spec.tickCount),
2949
- values: scope.objectProperty(spec.values),
2950
- minstep: scope.property(spec.tickMinStep),
2951
- formatType: scope.property(spec.formatType),
2952
- formatSpecifier: scope.property(spec.format)
2953
- })));
2954
-
2955
- // generate axis marks
2956
- const children = [];
2957
- let size;
2958
-
2959
- // include axis gridlines if requested
2960
- if (datum.grid) {
2961
- children.push(axisGrid(spec, config, encode.grid, ticksRef, band));
2962
- }
2963
-
2964
- // include axis ticks if requested
2965
- if (datum.ticks) {
2966
- size = _('tickSize');
2967
- children.push(axisTicks(spec, config, encode.ticks, ticksRef, size, band));
2968
- }
2969
-
2970
- // include axis labels if requested
2971
- if (datum.labels) {
2972
- size = datum.ticks ? size : 0;
2973
- children.push(axisLabels(spec, config, encode.labels, ticksRef, size, band));
2974
- }
2975
-
2976
- // include axis domain path if requested
2977
- if (datum.domain) {
2978
- children.push(axisDomain(spec, config, encode.domain, dataRef));
2979
- }
2980
-
2981
- // include axis title if defined
2982
- if (datum.title) {
2983
- children.push(axisTitle(spec, config, encode.title, dataRef));
2984
- }
2985
-
2986
- // parse axis specification
2987
- return parseMark(guideGroup({
2988
- role: AxisRole,
2989
- from: dataRef,
2990
- encode: extendEncode(buildAxisEncode(_, spec), axisEncode, Skip),
2991
- marks: children,
2992
- aria: _('aria'),
2993
- description: _('description'),
2994
- zindex: _('zindex'),
2995
- name,
2996
- interactive,
2997
- style
2998
- }), scope);
2999
- }
3000
- function buildAxisEncode(_, spec) {
3001
- const encode = {
3002
- enter: {},
3003
- update: {}
3004
- };
3005
- addEncoders(encode, {
3006
- orient: _('orient'),
3007
- offset: _('offset') || 0,
3008
- position: value(spec.position, 0),
3009
- titlePadding: _('titlePadding'),
3010
- minExtent: _('minExtent'),
3011
- maxExtent: _('maxExtent'),
3012
- range: {
3013
- signal: `abs(span(range("${spec.scale}")))`
3014
- },
3015
- translate: _('translate'),
3016
- // accessibility support
3017
- format: spec.format,
3018
- formatType: spec.formatType
3019
- });
3020
- return encode;
3021
- }
3022
-
3023
- function parseScope (spec, scope, preprocessed) {
3024
- const signals = array(spec.signals),
3025
- scales = array(spec.scales);
3026
-
3027
- // parse signal definitions, if not already preprocessed
3028
- if (!preprocessed) signals.forEach(_ => parseSignal(_, scope));
3029
-
3030
- // parse cartographic projection definitions
3031
- array(spec.projections).forEach(_ => parseProjection(_, scope));
3032
-
3033
- // initialize scale references
3034
- scales.forEach(_ => initScale(_, scope));
3035
-
3036
- // parse data sources
3037
- array(spec.data).forEach(_ => parseData(_, scope));
3038
-
3039
- // parse scale definitions
3040
- scales.forEach(_ => parseScale(_, scope));
3041
-
3042
- // parse signal updates
3043
- (preprocessed || signals).forEach(_ => parseSignalUpdates(_, scope));
3044
-
3045
- // parse axis definitions
3046
- array(spec.axes).forEach(_ => parseAxis(_, scope));
3047
-
3048
- // parse mark definitions
3049
- array(spec.marks).forEach(_ => parseMark(_, scope));
3050
-
3051
- // parse legend definitions
3052
- array(spec.legends).forEach(_ => parseLegend(_, scope));
3053
-
3054
- // parse title, if defined
3055
- if (spec.title) parseTitle(spec.title, scope);
3056
-
3057
- // parse collected lambda (anonymous) expressions
3058
- scope.parseLambdas();
3059
- return scope;
3060
- }
3061
-
3062
- const rootEncode = spec => extendEncode({
3063
- enter: {
3064
- x: {
3065
- value: 0
3066
- },
3067
- y: {
3068
- value: 0
3069
- }
3070
- },
3071
- update: {
3072
- width: {
3073
- signal: 'width'
3074
- },
3075
- height: {
3076
- signal: 'height'
3077
- }
3078
- }
3079
- }, spec);
3080
- function parseView(spec, scope) {
3081
- const config = scope.config;
3082
-
3083
- // add scenegraph root
3084
- const root = ref(scope.root = scope.add(operator()));
3085
-
3086
- // parse top-level signal definitions
3087
- const signals = collectSignals(spec, config);
3088
- signals.forEach(_ => parseSignal(_, scope));
3089
-
3090
- // assign description, event, legend, and locale configuration
3091
- scope.description = spec.description || config.description;
3092
- scope.eventConfig = config.events;
3093
- scope.legends = scope.objectProperty(config.legend && config.legend.layout);
3094
- scope.locale = config.locale;
3095
-
3096
- // store root group item
3097
- const input = scope.add(Collect());
3098
-
3099
- // encode root group item
3100
- const encode = scope.add(Encode(parseEncode(rootEncode(spec.encode), GroupMark, FrameRole, spec.style, scope, {
3101
- pulse: ref(input)
3102
- })));
3103
-
3104
- // perform view layout
3105
- const parent = scope.add(ViewLayout({
3106
- layout: scope.objectProperty(spec.layout),
3107
- legends: scope.legends,
3108
- autosize: scope.signalRef('autosize'),
3109
- mark: root,
3110
- pulse: ref(encode)
3111
- }));
3112
- scope.operators.pop();
3113
-
3114
- // parse remainder of specification
3115
- scope.pushState(ref(encode), ref(parent), null);
3116
- parseScope(spec, scope, signals);
3117
- scope.operators.push(parent);
3118
-
3119
- // bound / render / sieve root item
3120
- let op = scope.add(Bound({
3121
- mark: root,
3122
- pulse: ref(parent)
3123
- }));
3124
- op = scope.add(Render({
3125
- pulse: ref(op)
3126
- }));
3127
- op = scope.add(Sieve({
3128
- pulse: ref(op)
3129
- }));
3130
-
3131
- // track metadata for root item
3132
- scope.addData('root', new DataScope(scope, input, input, op));
3133
- return scope;
3134
- }
3135
- function signalObject(name, value) {
3136
- return value && value.signal ? {
3137
- name,
3138
- update: value.signal
3139
- } : {
3140
- name,
3141
- value
3142
- };
3143
- }
3144
-
3145
- /**
3146
- * Collect top-level signals, merging values as needed. Signals
3147
- * defined in the config signals arrays are added only if that
3148
- * signal is not explicitly defined in the specification.
3149
- * Built-in signals (autosize, background, padding, width, height)
3150
- * receive special treatment. They are initialized using the
3151
- * top-level spec property, or, if undefined in the spec, using
3152
- * the corresponding top-level config property. If this property
3153
- * is a signal reference object, the signal expression maps to the
3154
- * signal 'update' property. If the spec's top-level signal array
3155
- * contains an entry that matches a built-in signal, that entry
3156
- * will be merged with the built-in specification, potentially
3157
- * overwriting existing 'value' or 'update' properties.
3158
- */
3159
- function collectSignals(spec, config) {
3160
- const _ = name => value(spec[name], config[name]),
3161
- signals = [signalObject('background', _('background')), signalObject('autosize', parseAutosize(_('autosize'))), signalObject('padding', parsePadding(_('padding'))), signalObject('width', _('width') || 0), signalObject('height', _('height') || 0)],
3162
- pre = signals.reduce((p, s) => (p[s.name] = s, p), {}),
3163
- map = {};
3164
-
3165
- // add spec signal array
3166
- array(spec.signals).forEach(s => {
3167
- if (has$1(pre, s.name)) {
3168
- // merge if built-in signal
3169
- s = extend(pre[s.name], s);
3170
- } else {
3171
- // otherwise add to signal list
3172
- signals.push(s);
3173
- }
3174
- map[s.name] = s;
3175
- });
3176
-
3177
- // add config signal array
3178
- array(config.signals).forEach(s => {
3179
- if (!has$1(map, s.name) && !has$1(pre, s.name)) {
3180
- // add to signal list if not already defined
3181
- signals.push(s);
3182
- }
3183
- });
3184
- return signals;
3185
- }
3186
-
3187
- function Scope(config, options) {
3188
- this.config = config || {};
3189
- this.options = options || {};
3190
- this.bindings = [];
3191
- this.field = {};
3192
- this.signals = {};
3193
- this.lambdas = {};
3194
- this.scales = {};
3195
- this.events = {};
3196
- this.data = {};
3197
- this.streams = [];
3198
- this.updates = [];
3199
- this.operators = [];
3200
- this.eventConfig = null;
3201
- this.locale = null;
3202
- this._id = 0;
3203
- this._subid = 0;
3204
- this._nextsub = [0];
3205
- this._parent = [];
3206
- this._encode = [];
3207
- this._lookup = [];
3208
- this._markpath = [];
3209
- }
3210
- function Subscope(scope) {
3211
- this.config = scope.config;
3212
- this.options = scope.options;
3213
- this.legends = scope.legends;
3214
- this.field = Object.create(scope.field);
3215
- this.signals = Object.create(scope.signals);
3216
- this.lambdas = Object.create(scope.lambdas);
3217
- this.scales = Object.create(scope.scales);
3218
- this.events = Object.create(scope.events);
3219
- this.data = Object.create(scope.data);
3220
- this.streams = [];
3221
- this.updates = [];
3222
- this.operators = [];
3223
- this._id = 0;
3224
- this._subid = ++scope._nextsub[0];
3225
- this._nextsub = scope._nextsub;
3226
- this._parent = scope._parent.slice();
3227
- this._encode = scope._encode.slice();
3228
- this._lookup = scope._lookup.slice();
3229
- this._markpath = scope._markpath;
3230
- }
3231
- Scope.prototype = Subscope.prototype = {
3232
- parse(spec) {
3233
- return parseScope(spec, this);
3234
- },
3235
- fork() {
3236
- return new Subscope(this);
3237
- },
3238
- isSubscope() {
3239
- return this._subid > 0;
3240
- },
3241
- toRuntime() {
3242
- this.finish();
3243
- return {
3244
- description: this.description,
3245
- operators: this.operators,
3246
- streams: this.streams,
3247
- updates: this.updates,
3248
- bindings: this.bindings,
3249
- eventConfig: this.eventConfig,
3250
- locale: this.locale
3251
- };
3252
- },
3253
- id() {
3254
- return (this._subid ? this._subid + ':' : 0) + this._id++;
3255
- },
3256
- add(op) {
3257
- this.operators.push(op);
3258
- op.id = this.id();
3259
- // if pre-registration references exist, resolve them now
3260
- if (op.refs) {
3261
- op.refs.forEach(ref => {
3262
- ref.$ref = op.id;
3263
- });
3264
- op.refs = null;
3265
- }
3266
- return op;
3267
- },
3268
- proxy(op) {
3269
- const vref = op instanceof Entry ? ref(op) : op;
3270
- return this.add(Proxy({
3271
- value: vref
3272
- }));
3273
- },
3274
- addStream(stream) {
3275
- this.streams.push(stream);
3276
- stream.id = this.id();
3277
- return stream;
3278
- },
3279
- addUpdate(update) {
3280
- this.updates.push(update);
3281
- return update;
3282
- },
3283
- // Apply metadata
3284
- finish() {
3285
- let name, ds;
3286
-
3287
- // annotate root
3288
- if (this.root) this.root.root = true;
3289
-
3290
- // annotate signals
3291
- for (name in this.signals) {
3292
- this.signals[name].signal = name;
3293
- }
3294
-
3295
- // annotate scales
3296
- for (name in this.scales) {
3297
- this.scales[name].scale = name;
3298
- }
3299
-
3300
- // annotate data sets
3301
- function annotate(op, name, type) {
3302
- let data, list;
3303
- if (op) {
3304
- data = op.data || (op.data = {});
3305
- list = data[name] || (data[name] = []);
3306
- list.push(type);
3307
- }
3308
- }
3309
- for (name in this.data) {
3310
- ds = this.data[name];
3311
- annotate(ds.input, name, 'input');
3312
- annotate(ds.output, name, 'output');
3313
- annotate(ds.values, name, 'values');
3314
- for (const field in ds.index) {
3315
- annotate(ds.index[field], name, 'index:' + field);
3316
- }
3317
- }
3318
- return this;
3319
- },
3320
- // ----
3321
-
3322
- pushState(encode, parent, lookup) {
3323
- this._encode.push(ref(this.add(Sieve({
3324
- pulse: encode
3325
- }))));
3326
- this._parent.push(parent);
3327
- this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);
3328
- this._markpath.push(-1);
3329
- },
3330
- popState() {
3331
- this._encode.pop();
3332
- this._parent.pop();
3333
- this._lookup.pop();
3334
- this._markpath.pop();
3335
- },
3336
- parent() {
3337
- return peek(this._parent);
3338
- },
3339
- encode() {
3340
- return peek(this._encode);
3341
- },
3342
- lookup() {
3343
- return peek(this._lookup);
3344
- },
3345
- markpath() {
3346
- const p = this._markpath;
3347
- return ++p[p.length - 1];
3348
- },
3349
- // ----
3350
-
3351
- fieldRef(field, name) {
3352
- if (isString(field)) return fieldRef$1(field, name);
3353
- if (!field.signal) {
3354
- error('Unsupported field reference: ' + $(field));
3355
- }
3356
- const s = field.signal;
3357
- let f = this.field[s];
3358
- if (!f) {
3359
- const params = {
3360
- name: this.signalRef(s)
3361
- };
3362
- if (name) params.as = name;
3363
- this.field[s] = f = ref(this.add(Field(params)));
3364
- }
3365
- return f;
3366
- },
3367
- compareRef(cmp) {
3368
- let signal = false;
3369
- const check = _ => isSignal(_) ? (signal = true, this.signalRef(_.signal)) : isExpr$1(_) ? (signal = true, this.exprRef(_.expr)) : _;
3370
- const fields = array(cmp.field).map(check),
3371
- orders = array(cmp.order).map(check);
3372
- return signal ? ref(this.add(Compare({
3373
- fields: fields,
3374
- orders: orders
3375
- }))) : compareRef(fields, orders);
3376
- },
3377
- keyRef(fields, flat) {
3378
- let signal = false;
3379
- const check = _ => isSignal(_) ? (signal = true, ref(sig[_.signal])) : _;
3380
- const sig = this.signals;
3381
- fields = array(fields).map(check);
3382
- return signal ? ref(this.add(Key({
3383
- fields: fields,
3384
- flat: flat
3385
- }))) : keyRef(fields, flat);
3386
- },
3387
- sortRef(sort) {
3388
- if (!sort) return sort;
3389
-
3390
- // including id ensures stable sorting
3391
- const a = aggrField(sort.op, sort.field),
3392
- o = sort.order || Ascending;
3393
- return o.signal ? ref(this.add(Compare({
3394
- fields: a,
3395
- orders: this.signalRef(o.signal)
3396
- }))) : compareRef(a, o);
3397
- },
3398
- // ----
3399
-
3400
- event(source, type) {
3401
- const key = source + ':' + type;
3402
- if (!this.events[key]) {
3403
- const id = this.id();
3404
- this.streams.push({
3405
- id: id,
3406
- source: source,
3407
- type: type
3408
- });
3409
- this.events[key] = id;
3410
- }
3411
- return this.events[key];
3412
- },
3413
- // ----
3414
-
3415
- hasOwnSignal(name) {
3416
- return has$1(this.signals, name);
3417
- },
3418
- addSignal(name, value) {
3419
- if (this.hasOwnSignal(name)) {
3420
- error('Duplicate signal name: ' + $(name));
3421
- }
3422
- const op = value instanceof Entry ? value : this.add(operator(value));
3423
- return this.signals[name] = op;
3424
- },
3425
- getSignal(name) {
3426
- if (!this.signals[name]) {
3427
- error('Unrecognized signal name: ' + $(name));
3428
- }
3429
- return this.signals[name];
3430
- },
3431
- signalRef(s) {
3432
- if (this.signals[s]) {
3433
- return ref(this.signals[s]);
3434
- } else if (!has$1(this.lambdas, s)) {
3435
- this.lambdas[s] = this.add(operator(null));
3436
- }
3437
- return ref(this.lambdas[s]);
3438
- },
3439
- parseLambdas() {
3440
- const code = Object.keys(this.lambdas);
3441
- for (let i = 0, n = code.length; i < n; ++i) {
3442
- const s = code[i],
3443
- e = parser(s, this),
3444
- op = this.lambdas[s];
3445
- op.params = e.$params;
3446
- op.update = e.$expr;
3447
- }
3448
- },
3449
- property(spec) {
3450
- return spec && spec.signal ? this.signalRef(spec.signal) : spec;
3451
- },
3452
- objectProperty(spec) {
3453
- return !spec || !isObject(spec) ? spec : this.signalRef(spec.signal || propertyLambda(spec));
3454
- },
3455
- exprRef(code, name) {
3456
- const params = {
3457
- expr: parser(code, this)
3458
- };
3459
- if (name) params.expr.$name = name;
3460
- return ref(this.add(Expression(params)));
3461
- },
3462
- addBinding(name, bind) {
3463
- if (!this.bindings) {
3464
- error('Nested signals do not support binding: ' + $(name));
3465
- }
3466
- this.bindings.push(extend({
3467
- signal: name
3468
- }, bind));
3469
- },
3470
- // ----
3471
-
3472
- addScaleProj(name, transform) {
3473
- if (has$1(this.scales, name)) {
3474
- error('Duplicate scale or projection name: ' + $(name));
3475
- }
3476
- this.scales[name] = this.add(transform);
3477
- },
3478
- addScale(name, params) {
3479
- this.addScaleProj(name, Scale(params));
3480
- },
3481
- addProjection(name, params) {
3482
- this.addScaleProj(name, Projection(params));
3483
- },
3484
- getScale(name) {
3485
- if (!this.scales[name]) {
3486
- error('Unrecognized scale name: ' + $(name));
3487
- }
3488
- return this.scales[name];
3489
- },
3490
- scaleRef(name) {
3491
- return ref(this.getScale(name));
3492
- },
3493
- scaleType(name) {
3494
- return this.getScale(name).params.type;
3495
- },
3496
- projectionRef(name) {
3497
- return this.scaleRef(name);
3498
- },
3499
- projectionType(name) {
3500
- return this.scaleType(name);
3501
- },
3502
- // ----
3503
-
3504
- addData(name, dataScope) {
3505
- if (has$1(this.data, name)) {
3506
- error('Duplicate data set name: ' + $(name));
3507
- }
3508
- return this.data[name] = dataScope;
3509
- },
3510
- getData(name) {
3511
- if (!this.data[name]) {
3512
- error('Undefined data set name: ' + $(name));
3513
- }
3514
- return this.data[name];
3515
- },
3516
- addDataPipeline(name, entries) {
3517
- if (has$1(this.data, name)) {
3518
- error('Duplicate data set name: ' + $(name));
3519
- }
3520
- return this.addData(name, DataScope.fromEntries(this, entries));
3521
- }
3522
- };
3523
- function propertyLambda(spec) {
3524
- return (isArray(spec) ? arrayLambda : objectLambda)(spec);
3525
- }
3526
- function arrayLambda(array) {
3527
- const n = array.length;
3528
- let code = '[';
3529
- for (let i = 0; i < n; ++i) {
3530
- const value = array[i];
3531
- code += (i > 0 ? ',' : '') + (isObject(value) ? value.signal || propertyLambda(value) : $(value));
3532
- }
3533
- return code + ']';
3534
- }
3535
- function objectLambda(obj) {
3536
- let code = '{',
3537
- i = 0,
3538
- key,
3539
- value;
3540
- for (key in obj) {
3541
- value = obj[key];
3542
- code += (++i > 1 ? ',' : '') + $(key) + ':' + (isObject(value) ? value.signal || propertyLambda(value) : $(value));
3543
- }
3544
- return code + '}';
3545
- }
3546
-
3547
- /**
3548
- * Standard configuration defaults for Vega specification parsing.
3549
- * Users can provide their own (sub-)set of these default values
3550
- * by passing in a config object to the top-level parse method.
3551
- */
3552
- function defaults () {
3553
- const defaultFont = 'sans-serif',
3554
- defaultSymbolSize = 30,
3555
- defaultStrokeWidth = 2,
3556
- defaultColor = '#4c78a8',
3557
- black = '#000',
3558
- gray = '#888',
3559
- lightGray = '#ddd';
3560
- return {
3561
- // default visualization description
3562
- description: 'Vega visualization',
3563
- // default padding around visualization
3564
- padding: 0,
3565
- // default for automatic sizing; options: 'none', 'pad', 'fit'
3566
- // or provide an object (e.g., {'type': 'pad', 'resize': true})
3567
- autosize: 'pad',
3568
- // default view background color
3569
- // covers the entire view component
3570
- background: null,
3571
- // default event handling configuration
3572
- // preventDefault for view-sourced event types except 'wheel'
3573
- events: {
3574
- defaults: {
3575
- allow: ['wheel']
3576
- }
3577
- },
3578
- // defaults for top-level group marks
3579
- // accepts mark properties (fill, stroke, etc)
3580
- // covers the data rectangle within group width/height
3581
- group: null,
3582
- // defaults for basic mark types
3583
- // each subset accepts mark properties (fill, stroke, etc)
3584
- mark: null,
3585
- arc: {
3586
- fill: defaultColor
3587
- },
3588
- area: {
3589
- fill: defaultColor
3590
- },
3591
- image: null,
3592
- line: {
3593
- stroke: defaultColor,
3594
- strokeWidth: defaultStrokeWidth
3595
- },
3596
- path: {
3597
- stroke: defaultColor
3598
- },
3599
- rect: {
3600
- fill: defaultColor
3601
- },
3602
- rule: {
3603
- stroke: black
3604
- },
3605
- shape: {
3606
- stroke: defaultColor
3607
- },
3608
- symbol: {
3609
- fill: defaultColor,
3610
- size: 64
3611
- },
3612
- text: {
3613
- fill: black,
3614
- font: defaultFont,
3615
- fontSize: 11
3616
- },
3617
- trail: {
3618
- fill: defaultColor,
3619
- size: defaultStrokeWidth
3620
- },
3621
- // style definitions
3622
- style: {
3623
- // axis & legend labels
3624
- 'guide-label': {
3625
- fill: black,
3626
- font: defaultFont,
3627
- fontSize: 10
3628
- },
3629
- // axis & legend titles
3630
- 'guide-title': {
3631
- fill: black,
3632
- font: defaultFont,
3633
- fontSize: 11,
3634
- fontWeight: 'bold'
3635
- },
3636
- // headers, including chart title
3637
- 'group-title': {
3638
- fill: black,
3639
- font: defaultFont,
3640
- fontSize: 13,
3641
- fontWeight: 'bold'
3642
- },
3643
- // chart subtitle
3644
- 'group-subtitle': {
3645
- fill: black,
3646
- font: defaultFont,
3647
- fontSize: 12
3648
- },
3649
- // defaults for styled point marks in Vega-Lite
3650
- point: {
3651
- size: defaultSymbolSize,
3652
- strokeWidth: defaultStrokeWidth,
3653
- shape: 'circle'
3654
- },
3655
- circle: {
3656
- size: defaultSymbolSize,
3657
- strokeWidth: defaultStrokeWidth
3658
- },
3659
- square: {
3660
- size: defaultSymbolSize,
3661
- strokeWidth: defaultStrokeWidth,
3662
- shape: 'square'
3663
- },
3664
- // defaults for styled group marks in Vega-Lite
3665
- cell: {
3666
- fill: 'transparent',
3667
- stroke: lightGray
3668
- },
3669
- view: {
3670
- fill: 'transparent'
3671
- }
3672
- },
3673
- // defaults for title
3674
- title: {
3675
- orient: 'top',
3676
- anchor: 'middle',
3677
- offset: 4,
3678
- subtitlePadding: 3
3679
- },
3680
- // defaults for axes
3681
- axis: {
3682
- minExtent: 0,
3683
- maxExtent: 200,
3684
- bandPosition: 0.5,
3685
- domain: true,
3686
- domainWidth: 1,
3687
- domainColor: gray,
3688
- grid: false,
3689
- gridWidth: 1,
3690
- gridColor: lightGray,
3691
- labels: true,
3692
- labelAngle: 0,
3693
- labelLimit: 180,
3694
- labelOffset: 0,
3695
- labelPadding: 2,
3696
- ticks: true,
3697
- tickColor: gray,
3698
- tickOffset: 0,
3699
- tickRound: true,
3700
- tickSize: 5,
3701
- tickWidth: 1,
3702
- titlePadding: 4
3703
- },
3704
- // correction for centering bias
3705
- axisBand: {
3706
- tickOffset: -0.5
3707
- },
3708
- // defaults for cartographic projection
3709
- projection: {
3710
- type: 'mercator'
3711
- },
3712
- // defaults for legends
3713
- legend: {
3714
- orient: 'right',
3715
- padding: 0,
3716
- gridAlign: 'each',
3717
- columnPadding: 10,
3718
- rowPadding: 2,
3719
- symbolDirection: 'vertical',
3720
- gradientDirection: 'vertical',
3721
- gradientLength: 200,
3722
- gradientThickness: 16,
3723
- gradientStrokeColor: lightGray,
3724
- gradientStrokeWidth: 0,
3725
- gradientLabelOffset: 2,
3726
- labelAlign: 'left',
3727
- labelBaseline: 'middle',
3728
- labelLimit: 160,
3729
- labelOffset: 4,
3730
- labelOverlap: true,
3731
- symbolLimit: 30,
3732
- symbolType: 'circle',
3733
- symbolSize: 100,
3734
- symbolOffset: 0,
3735
- symbolStrokeWidth: 1.5,
3736
- symbolBaseFillColor: 'transparent',
3737
- symbolBaseStrokeColor: gray,
3738
- titleLimit: 180,
3739
- titleOrient: 'top',
3740
- titlePadding: 5,
3741
- layout: {
3742
- offset: 18,
3743
- direction: 'horizontal',
3744
- left: {
3745
- direction: 'vertical'
3746
- },
3747
- right: {
3748
- direction: 'vertical'
3749
- }
3750
- }
3751
- },
3752
- // defaults for scale ranges
3753
- range: {
3754
- category: {
3755
- scheme: 'tableau10'
3756
- },
3757
- ordinal: {
3758
- scheme: 'blues'
3759
- },
3760
- heatmap: {
3761
- scheme: 'yellowgreenblue'
3762
- },
3763
- ramp: {
3764
- scheme: 'blues'
3765
- },
3766
- diverging: {
3767
- scheme: 'blueorange',
3768
- extent: [1, 0]
3769
- },
3770
- symbol: ['circle', 'square', 'triangle-up', 'cross', 'diamond', 'triangle-right', 'triangle-down', 'triangle-left']
3771
- }
3772
- };
3773
- }
3774
-
3775
- function parse (spec, config, options) {
3776
- if (!isObject(spec)) {
3777
- error('Input Vega specification must be an object.');
3778
- }
3779
- config = mergeConfig(defaults(), config, spec.config);
3780
- return parseView(spec, new Scope(config, options)).toRuntime();
3781
- }
3782
-
3783
- export { AxisDomainRole, AxisGridRole, AxisLabelRole, AxisRole, AxisTickRole, AxisTitleRole, DataScope, FrameRole, LegendEntryRole, LegendLabelRole, LegendRole, LegendSymbolRole, LegendTitleRole, MarkRole, Scope, ScopeRole, defaults as config, parse, parseSignal as signal, parseSignalUpdates as signalUpdates, parseStream as stream };