@veritone-ce/design-system 2.9.0-next.2 → 2.9.0-next.3

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 (629) hide show
  1. package/dist/cjs/bundled_modules/d3-array/src/ascending.js +9 -0
  2. package/dist/cjs/bundled_modules/d3-array/src/bisect.js +16 -0
  3. package/dist/cjs/bundled_modules/d3-array/src/bisector.js +62 -0
  4. package/dist/cjs/bundled_modules/d3-array/src/descending.js +13 -0
  5. package/dist/cjs/bundled_modules/d3-array/src/deviation.js +12 -0
  6. package/dist/cjs/bundled_modules/d3-array/src/fsum.js +45 -0
  7. package/dist/cjs/bundled_modules/d3-array/src/intersection.js +25 -0
  8. package/dist/cjs/bundled_modules/d3-array/src/max.js +26 -0
  9. package/dist/cjs/bundled_modules/d3-array/src/mean.js +25 -0
  10. package/dist/cjs/bundled_modules/d3-array/src/median.js +11 -0
  11. package/dist/cjs/bundled_modules/d3-array/src/merge.js +15 -0
  12. package/dist/cjs/bundled_modules/d3-array/src/min.js +26 -0
  13. package/dist/cjs/bundled_modules/d3-array/src/number.js +27 -0
  14. package/dist/cjs/bundled_modules/d3-array/src/permute.js +9 -0
  15. package/dist/cjs/bundled_modules/d3-array/src/quantile.js +36 -0
  16. package/dist/cjs/bundled_modules/d3-array/src/quickselect.js +59 -0
  17. package/dist/cjs/bundled_modules/d3-array/src/range.js +19 -0
  18. package/dist/cjs/bundled_modules/d3-array/src/sort.js +20 -0
  19. package/dist/cjs/bundled_modules/d3-array/src/sum.js +17 -0
  20. package/dist/cjs/bundled_modules/d3-array/src/ticks.js +63 -0
  21. package/dist/cjs/bundled_modules/d3-array/src/union.js +17 -0
  22. package/dist/cjs/bundled_modules/d3-array/src/variance.js +31 -0
  23. package/dist/cjs/bundled_modules/d3-color/src/color.js +410 -0
  24. package/dist/cjs/bundled_modules/d3-color/src/cubehelix.js +68 -0
  25. package/dist/cjs/bundled_modules/d3-color/src/define.js +17 -0
  26. package/dist/cjs/bundled_modules/d3-color/src/lab.js +124 -0
  27. package/dist/cjs/bundled_modules/d3-color/src/math.js +7 -0
  28. package/dist/cjs/bundled_modules/d3-delaunay/src/delaunay.js +254 -0
  29. package/dist/cjs/bundled_modules/d3-delaunay/src/path.js +43 -0
  30. package/dist/cjs/bundled_modules/d3-delaunay/src/polygon.js +23 -0
  31. package/dist/cjs/bundled_modules/d3-delaunay/src/voronoi.js +338 -0
  32. package/dist/cjs/bundled_modules/d3-dispatch/src/dispatch.js +88 -0
  33. package/dist/cjs/bundled_modules/d3-dsv/src/dsv.js +170 -0
  34. package/dist/cjs/bundled_modules/d3-force/src/center.js +46 -0
  35. package/dist/cjs/bundled_modules/d3-force/src/collide.js +106 -0
  36. package/dist/cjs/bundled_modules/d3-force/src/constant.js +11 -0
  37. package/dist/cjs/bundled_modules/d3-force/src/jiggle.js +9 -0
  38. package/dist/cjs/bundled_modules/d3-force/src/lcg.js +15 -0
  39. package/dist/cjs/bundled_modules/d3-force/src/link.js +123 -0
  40. package/dist/cjs/bundled_modules/d3-force/src/manyBody.js +122 -0
  41. package/dist/cjs/bundled_modules/d3-force/src/simulation.js +164 -0
  42. package/dist/cjs/bundled_modules/d3-force/src/x.js +47 -0
  43. package/dist/cjs/bundled_modules/d3-force/src/y.js +47 -0
  44. package/dist/cjs/bundled_modules/d3-format/src/defaultLocale.js +24 -0
  45. package/dist/cjs/bundled_modules/d3-format/src/exponent.js +11 -0
  46. package/dist/cjs/bundled_modules/d3-format/src/formatDecimal.js +27 -0
  47. package/dist/cjs/bundled_modules/d3-format/src/formatGroup.js +24 -0
  48. package/dist/cjs/bundled_modules/d3-format/src/formatNumerals.js +13 -0
  49. package/dist/cjs/bundled_modules/d3-format/src/formatPrefixAuto.js +22 -0
  50. package/dist/cjs/bundled_modules/d3-format/src/formatRounded.js +17 -0
  51. package/dist/cjs/bundled_modules/d3-format/src/formatSpecifier.js +54 -0
  52. package/dist/cjs/bundled_modules/d3-format/src/formatTrim.js +17 -0
  53. package/dist/cjs/bundled_modules/d3-format/src/formatTypes.js +25 -0
  54. package/dist/cjs/bundled_modules/d3-format/src/identity.js +9 -0
  55. package/dist/cjs/bundled_modules/d3-format/src/locale.js +154 -0
  56. package/dist/cjs/bundled_modules/d3-format/src/precisionFixed.js +11 -0
  57. package/dist/cjs/bundled_modules/d3-format/src/precisionPrefix.js +11 -0
  58. package/dist/cjs/bundled_modules/d3-format/src/precisionRound.js +12 -0
  59. package/dist/cjs/bundled_modules/d3-geo/src/area.js +83 -0
  60. package/dist/cjs/bundled_modules/d3-geo/src/bounds.js +185 -0
  61. package/dist/cjs/bundled_modules/d3-geo/src/cartesian.js +43 -0
  62. package/dist/cjs/bundled_modules/d3-geo/src/centroid.js +149 -0
  63. package/dist/cjs/bundled_modules/d3-geo/src/circle.js +35 -0
  64. package/dist/cjs/bundled_modules/d3-geo/src/clip/antimeridian.js +98 -0
  65. package/dist/cjs/bundled_modules/d3-geo/src/clip/buffer.js +30 -0
  66. package/dist/cjs/bundled_modules/d3-geo/src/clip/circle.js +183 -0
  67. package/dist/cjs/bundled_modules/d3-geo/src/clip/index.js +137 -0
  68. package/dist/cjs/bundled_modules/d3-geo/src/clip/line.js +65 -0
  69. package/dist/cjs/bundled_modules/d3-geo/src/clip/rectangle.js +174 -0
  70. package/dist/cjs/bundled_modules/d3-geo/src/clip/rejoin.js +109 -0
  71. package/dist/cjs/bundled_modules/d3-geo/src/compose.js +18 -0
  72. package/dist/cjs/bundled_modules/d3-geo/src/graticule.js +107 -0
  73. package/dist/cjs/bundled_modules/d3-geo/src/identity.js +7 -0
  74. package/dist/cjs/bundled_modules/d3-geo/src/math.js +57 -0
  75. package/dist/cjs/bundled_modules/d3-geo/src/noop.js +7 -0
  76. package/dist/cjs/bundled_modules/d3-geo/src/path/area.js +54 -0
  77. package/dist/cjs/bundled_modules/d3-geo/src/path/bounds.js +32 -0
  78. package/dist/cjs/bundled_modules/d3-geo/src/path/centroid.js +104 -0
  79. package/dist/cjs/bundled_modules/d3-geo/src/path/context.js +51 -0
  80. package/dist/cjs/bundled_modules/d3-geo/src/path/index.js +82 -0
  81. package/dist/cjs/bundled_modules/d3-geo/src/path/measure.js +49 -0
  82. package/dist/cjs/bundled_modules/d3-geo/src/path/string.js +92 -0
  83. package/dist/cjs/bundled_modules/d3-geo/src/pointEqual.js +11 -0
  84. package/dist/cjs/bundled_modules/d3-geo/src/polygonContains.js +80 -0
  85. package/dist/cjs/bundled_modules/d3-geo/src/projection/albers.js +16 -0
  86. package/dist/cjs/bundled_modules/d3-geo/src/projection/albersUsa.js +117 -0
  87. package/dist/cjs/bundled_modules/d3-geo/src/projection/azimuthal.js +32 -0
  88. package/dist/cjs/bundled_modules/d3-geo/src/projection/azimuthalEqualArea.js +24 -0
  89. package/dist/cjs/bundled_modules/d3-geo/src/projection/azimuthalEquidistant.js +24 -0
  90. package/dist/cjs/bundled_modules/d3-geo/src/projection/conic.js +19 -0
  91. package/dist/cjs/bundled_modules/d3-geo/src/projection/conicConformal.js +45 -0
  92. package/dist/cjs/bundled_modules/d3-geo/src/projection/conicEqualArea.js +40 -0
  93. package/dist/cjs/bundled_modules/d3-geo/src/projection/conicEquidistant.js +39 -0
  94. package/dist/cjs/bundled_modules/d3-geo/src/projection/cylindricalEqualArea.js +19 -0
  95. package/dist/cjs/bundled_modules/d3-geo/src/projection/equalEarth.js +43 -0
  96. package/dist/cjs/bundled_modules/d3-geo/src/projection/equirectangular.js +19 -0
  97. package/dist/cjs/bundled_modules/d3-geo/src/projection/fit.js +54 -0
  98. package/dist/cjs/bundled_modules/d3-geo/src/projection/gnomonic.js +23 -0
  99. package/dist/cjs/bundled_modules/d3-geo/src/projection/identity.js +91 -0
  100. package/dist/cjs/bundled_modules/d3-geo/src/projection/index.js +184 -0
  101. package/dist/cjs/bundled_modules/d3-geo/src/projection/mercator.js +60 -0
  102. package/dist/cjs/bundled_modules/d3-geo/src/projection/naturalEarth1.js +35 -0
  103. package/dist/cjs/bundled_modules/d3-geo/src/projection/orthographic.js +22 -0
  104. package/dist/cjs/bundled_modules/d3-geo/src/projection/resample.js +108 -0
  105. package/dist/cjs/bundled_modules/d3-geo/src/projection/stereographic.js +25 -0
  106. package/dist/cjs/bundled_modules/d3-geo/src/projection/transverseMercator.js +34 -0
  107. package/dist/cjs/bundled_modules/d3-geo/src/rotation.js +86 -0
  108. package/dist/cjs/bundled_modules/d3-geo/src/stream.js +75 -0
  109. package/dist/cjs/bundled_modules/d3-geo/src/transform.js +24 -0
  110. package/dist/cjs/bundled_modules/d3-geo-projection/src/math.js +28 -0
  111. package/dist/cjs/bundled_modules/d3-geo-projection/src/mollweide.js +38 -0
  112. package/dist/cjs/bundled_modules/d3-hierarchy/src/accessors.js +13 -0
  113. package/dist/cjs/bundled_modules/d3-hierarchy/src/array.js +27 -0
  114. package/dist/cjs/bundled_modules/d3-hierarchy/src/cluster.js +90 -0
  115. package/dist/cjs/bundled_modules/d3-hierarchy/src/constant.js +16 -0
  116. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/ancestors.js +13 -0
  117. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/count.js +18 -0
  118. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/descendants.js +9 -0
  119. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/each.js +13 -0
  120. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/eachAfter.js +21 -0
  121. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/eachBefore.js +18 -0
  122. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/find.js +14 -0
  123. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/index.js +99 -0
  124. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/iterator.js +20 -0
  125. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/leaves.js +15 -0
  126. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/links.js +15 -0
  127. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/path.js +36 -0
  128. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/sort.js +13 -0
  129. package/dist/cjs/bundled_modules/d3-hierarchy/src/hierarchy/sum.js +15 -0
  130. package/dist/cjs/bundled_modules/d3-hierarchy/src/lcg.js +15 -0
  131. package/dist/cjs/bundled_modules/d3-hierarchy/src/pack/enclose.js +122 -0
  132. package/dist/cjs/bundled_modules/d3-hierarchy/src/pack/index.js +87 -0
  133. package/dist/cjs/bundled_modules/d3-hierarchy/src/pack/siblings.js +118 -0
  134. package/dist/cjs/bundled_modules/d3-hierarchy/src/partition.js +58 -0
  135. package/dist/cjs/bundled_modules/d3-hierarchy/src/stratify.js +151 -0
  136. package/dist/cjs/bundled_modules/d3-hierarchy/src/tree.js +243 -0
  137. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/binary.js +52 -0
  138. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/dice.js +18 -0
  139. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/index.js +100 -0
  140. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/resquarify.js +42 -0
  141. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/round.js +12 -0
  142. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/slice.js +18 -0
  143. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/sliceDice.js +12 -0
  144. package/dist/cjs/bundled_modules/d3-hierarchy/src/treemap/squarify.js +74 -0
  145. package/dist/cjs/bundled_modules/d3-interpolate/src/array.js +29 -0
  146. package/dist/cjs/bundled_modules/d3-interpolate/src/basis.js +26 -0
  147. package/dist/cjs/bundled_modules/d3-interpolate/src/basisClosed.js +19 -0
  148. package/dist/cjs/bundled_modules/d3-interpolate/src/color.js +37 -0
  149. package/dist/cjs/bundled_modules/d3-interpolate/src/constant.js +7 -0
  150. package/dist/cjs/bundled_modules/d3-interpolate/src/cubehelix.js +36 -0
  151. package/dist/cjs/bundled_modules/d3-interpolate/src/date.js +12 -0
  152. package/dist/cjs/bundled_modules/d3-interpolate/src/discrete.js +12 -0
  153. package/dist/cjs/bundled_modules/d3-interpolate/src/hcl.js +28 -0
  154. package/dist/cjs/bundled_modules/d3-interpolate/src/hsl.js +28 -0
  155. package/dist/cjs/bundled_modules/d3-interpolate/src/hue.js +15 -0
  156. package/dist/cjs/bundled_modules/d3-interpolate/src/index.js +53 -0
  157. package/dist/cjs/bundled_modules/d3-interpolate/src/lab.js +22 -0
  158. package/dist/cjs/bundled_modules/d3-interpolate/src/number.js +11 -0
  159. package/dist/cjs/bundled_modules/d3-interpolate/src/numberArray.js +21 -0
  160. package/dist/cjs/bundled_modules/d3-interpolate/src/object.js +29 -0
  161. package/dist/cjs/bundled_modules/d3-interpolate/src/piecewise.js +17 -0
  162. package/dist/cjs/bundled_modules/d3-interpolate/src/quantize.js +11 -0
  163. package/dist/cjs/bundled_modules/d3-interpolate/src/rgb.js +63 -0
  164. package/dist/cjs/bundled_modules/d3-interpolate/src/round.js +11 -0
  165. package/dist/cjs/bundled_modules/d3-interpolate/src/string.js +70 -0
  166. package/dist/cjs/bundled_modules/d3-interpolate/src/transform/decompose.js +33 -0
  167. package/dist/cjs/bundled_modules/d3-interpolate/src/transform/index.js +68 -0
  168. package/dist/cjs/bundled_modules/d3-interpolate/src/transform/parse.js +23 -0
  169. package/dist/cjs/bundled_modules/d3-interpolate/src/value.js +28 -0
  170. package/dist/cjs/bundled_modules/d3-interpolate/src/zoom.js +77 -0
  171. package/dist/cjs/bundled_modules/d3-path/src/path.js +157 -0
  172. package/dist/cjs/bundled_modules/d3-quadtree/src/add.js +91 -0
  173. package/dist/cjs/bundled_modules/d3-quadtree/src/cover.js +49 -0
  174. package/dist/cjs/bundled_modules/d3-quadtree/src/data.js +13 -0
  175. package/dist/cjs/bundled_modules/d3-quadtree/src/extent.js +11 -0
  176. package/dist/cjs/bundled_modules/d3-quadtree/src/find.js +76 -0
  177. package/dist/cjs/bundled_modules/d3-quadtree/src/quad.js +13 -0
  178. package/dist/cjs/bundled_modules/d3-quadtree/src/quadtree.js +79 -0
  179. package/dist/cjs/bundled_modules/d3-quadtree/src/remove.js +69 -0
  180. package/dist/cjs/bundled_modules/d3-quadtree/src/root.js +9 -0
  181. package/dist/cjs/bundled_modules/d3-quadtree/src/size.js +13 -0
  182. package/dist/cjs/bundled_modules/d3-quadtree/src/visit.js +22 -0
  183. package/dist/cjs/bundled_modules/d3-quadtree/src/visitAfter.js +27 -0
  184. package/dist/cjs/bundled_modules/d3-quadtree/src/x.js +14 -0
  185. package/dist/cjs/bundled_modules/d3-quadtree/src/y.js +14 -0
  186. package/dist/cjs/bundled_modules/d3-scale/src/constant.js +11 -0
  187. package/dist/cjs/bundled_modules/d3-scale/src/continuous.js +136 -0
  188. package/dist/cjs/bundled_modules/d3-scale/src/diverging.js +116 -0
  189. package/dist/cjs/bundled_modules/d3-scale/src/identity.js +34 -0
  190. package/dist/cjs/bundled_modules/d3-scale/src/init.js +31 -0
  191. package/dist/cjs/bundled_modules/d3-scale/src/linear.js +77 -0
  192. package/dist/cjs/bundled_modules/d3-scale/src/log.js +148 -0
  193. package/dist/cjs/bundled_modules/d3-scale/src/nice.js +24 -0
  194. package/dist/cjs/bundled_modules/d3-scale/src/number.js +9 -0
  195. package/dist/cjs/bundled_modules/d3-scale/src/ordinal.js +53 -0
  196. package/dist/cjs/bundled_modules/d3-scale/src/pow.js +58 -0
  197. package/dist/cjs/bundled_modules/d3-scale/src/quantile.js +65 -0
  198. package/dist/cjs/bundled_modules/d3-scale/src/quantize.js +62 -0
  199. package/dist/cjs/bundled_modules/d3-scale/src/sequential.js +119 -0
  200. package/dist/cjs/bundled_modules/d3-scale/src/symlog.js +42 -0
  201. package/dist/cjs/bundled_modules/d3-scale/src/threshold.js +45 -0
  202. package/dist/cjs/bundled_modules/d3-scale/src/tickFormat.js +39 -0
  203. package/dist/cjs/bundled_modules/d3-scale/src/time.js +85 -0
  204. package/dist/cjs/bundled_modules/d3-scale/src/utcTime.js +21 -0
  205. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Accent.js +9 -0
  206. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Dark2.js +9 -0
  207. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Paired.js +9 -0
  208. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Pastel1.js +9 -0
  209. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Pastel2.js +9 -0
  210. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Set1.js +9 -0
  211. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Set2.js +9 -0
  212. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/Set3.js +9 -0
  213. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/category10.js +9 -0
  214. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/categorical/observable10.js +9 -0
  215. package/dist/cjs/bundled_modules/d3-scale-chromatic/src/colors.js +11 -0
  216. package/dist/cjs/bundled_modules/d3-shape/src/arc.js +274 -0
  217. package/dist/cjs/bundled_modules/d3-shape/src/area.js +118 -0
  218. package/dist/cjs/bundled_modules/d3-shape/src/array.js +11 -0
  219. package/dist/cjs/bundled_modules/d3-shape/src/constant.js +11 -0
  220. package/dist/cjs/bundled_modules/d3-shape/src/curve/basis.js +59 -0
  221. package/dist/cjs/bundled_modules/d3-shape/src/curve/basisClosed.js +58 -0
  222. package/dist/cjs/bundled_modules/d3-shape/src/curve/basisOpen.js +45 -0
  223. package/dist/cjs/bundled_modules/d3-shape/src/curve/bundle.js +62 -0
  224. package/dist/cjs/bundled_modules/d3-shape/src/curve/cardinal.js +69 -0
  225. package/dist/cjs/bundled_modules/d3-shape/src/curve/cardinalClosed.js +68 -0
  226. package/dist/cjs/bundled_modules/d3-shape/src/curve/cardinalOpen.js +56 -0
  227. package/dist/cjs/bundled_modules/d3-shape/src/curve/catmullRom.js +95 -0
  228. package/dist/cjs/bundled_modules/d3-shape/src/curve/catmullRomClosed.js +80 -0
  229. package/dist/cjs/bundled_modules/d3-shape/src/curve/catmullRomOpen.js +68 -0
  230. package/dist/cjs/bundled_modules/d3-shape/src/curve/linear.js +37 -0
  231. package/dist/cjs/bundled_modules/d3-shape/src/curve/linearClosed.js +31 -0
  232. package/dist/cjs/bundled_modules/d3-shape/src/curve/monotone.js +109 -0
  233. package/dist/cjs/bundled_modules/d3-shape/src/curve/natural.js +71 -0
  234. package/dist/cjs/bundled_modules/d3-shape/src/curve/step.js +61 -0
  235. package/dist/cjs/bundled_modules/d3-shape/src/line.js +64 -0
  236. package/dist/cjs/bundled_modules/d3-shape/src/math.js +36 -0
  237. package/dist/cjs/bundled_modules/d3-shape/src/noop.js +7 -0
  238. package/dist/cjs/bundled_modules/d3-shape/src/path.js +23 -0
  239. package/dist/cjs/bundled_modules/d3-shape/src/point.js +12 -0
  240. package/dist/cjs/bundled_modules/d3-shape/src/symbol/circle.js +15 -0
  241. package/dist/cjs/bundled_modules/d3-shape/src/symbol.js +38 -0
  242. package/dist/cjs/bundled_modules/d3-time/src/day.js +41 -0
  243. package/dist/cjs/bundled_modules/d3-time/src/duration.js +17 -0
  244. package/dist/cjs/bundled_modules/d3-time/src/hour.js +31 -0
  245. package/dist/cjs/bundled_modules/d3-time/src/interval.js +73 -0
  246. package/dist/cjs/bundled_modules/d3-time/src/millisecond.js +29 -0
  247. package/dist/cjs/bundled_modules/d3-time/src/minute.js +31 -0
  248. package/dist/cjs/bundled_modules/d3-time/src/month.js +32 -0
  249. package/dist/cjs/bundled_modules/d3-time/src/second.js +18 -0
  250. package/dist/cjs/bundled_modules/d3-time/src/ticks.js +64 -0
  251. package/dist/cjs/bundled_modules/d3-time/src/week.js +73 -0
  252. package/dist/cjs/bundled_modules/d3-time/src/year.js +54 -0
  253. package/dist/cjs/bundled_modules/d3-time-format/src/defaultLocale.js +33 -0
  254. package/dist/cjs/bundled_modules/d3-time-format/src/locale.js +694 -0
  255. package/dist/cjs/bundled_modules/d3-timer/src/interval.js +23 -0
  256. package/dist/cjs/bundled_modules/d3-timer/src/timer.js +117 -0
  257. package/dist/cjs/bundled_modules/delaunator/index.js +485 -0
  258. package/dist/cjs/bundled_modules/internmap/src/index.js +66 -0
  259. package/dist/cjs/bundled_modules/json-stringify-pretty-compact/index.js +104 -0
  260. package/dist/cjs/bundled_modules/robust-predicates/esm/orient2d.js +184 -0
  261. package/dist/cjs/bundled_modules/robust-predicates/esm/util.js +95 -0
  262. package/dist/cjs/bundled_modules/topojson-client/src/feature.js +77 -0
  263. package/dist/cjs/bundled_modules/topojson-client/src/identity.js +9 -0
  264. package/dist/cjs/bundled_modules/topojson-client/src/mesh.js +60 -0
  265. package/dist/cjs/bundled_modules/topojson-client/src/reverse.js +10 -0
  266. package/dist/cjs/bundled_modules/topojson-client/src/stitch.js +79 -0
  267. package/dist/cjs/bundled_modules/topojson-client/src/transform.js +25 -0
  268. package/dist/cjs/bundled_modules/vega/build/vega.module.js +272 -0
  269. package/dist/cjs/bundled_modules/vega-canvas/build/vega-canvas.browser.js +18 -0
  270. package/dist/cjs/bundled_modules/vega-crossfilter/build/vega-crossfilter.js +676 -0
  271. package/dist/cjs/bundled_modules/vega-dataflow/build/vega-dataflow.js +2102 -0
  272. package/dist/cjs/bundled_modules/vega-embed/build/embed.js +2939 -0
  273. package/dist/cjs/bundled_modules/vega-encode/build/vega-encode.js +962 -0
  274. package/dist/cjs/bundled_modules/vega-event-selector/build/vega-event-selector.js +192 -0
  275. package/dist/cjs/bundled_modules/vega-expression/build/vega-expression.js +1615 -0
  276. package/dist/cjs/bundled_modules/vega-force/build/vega-force.js +295 -0
  277. package/dist/cjs/bundled_modules/vega-format/build/vega-format.js +201 -0
  278. package/dist/cjs/bundled_modules/vega-functions/build/vega-functions.js +842 -0
  279. package/dist/cjs/bundled_modules/vega-geo/build/vega-geo.js +1333 -0
  280. package/dist/cjs/bundled_modules/vega-hierarchy/build/vega-hierarchy.js +580 -0
  281. package/dist/cjs/bundled_modules/vega-interpreter/build/vega-interpreter.js +310 -0
  282. package/dist/cjs/bundled_modules/vega-label/build/vega-label.js +876 -0
  283. package/dist/cjs/bundled_modules/vega-lite/build/index.js +20157 -0
  284. package/dist/cjs/bundled_modules/vega-loader/build/vega-loader.browser.js +337 -0
  285. package/dist/cjs/bundled_modules/vega-parser/build/vega-parser.js +3805 -0
  286. package/dist/cjs/bundled_modules/vega-projection/build/vega-projection.js +90 -0
  287. package/dist/cjs/bundled_modules/vega-regression/build/vega-regression.js +236 -0
  288. package/dist/cjs/bundled_modules/vega-runtime/build/vega-runtime.js +588 -0
  289. package/dist/cjs/bundled_modules/vega-scale/build/vega-scale.js +846 -0
  290. package/dist/cjs/bundled_modules/vega-scenegraph/build/vega-scenegraph.js +5040 -0
  291. package/dist/cjs/bundled_modules/vega-schema-url-parser/dist/parser.modern.js +7 -0
  292. package/dist/cjs/bundled_modules/vega-selections/build/vega-selection.js +342 -0
  293. package/dist/cjs/bundled_modules/vega-statistics/build/vega-statistics.js +1193 -0
  294. package/dist/cjs/bundled_modules/vega-themes/build/index.js +853 -0
  295. package/dist/cjs/bundled_modules/vega-time/build/vega-time.js +342 -0
  296. package/dist/cjs/bundled_modules/vega-tooltip/build/index.js +353 -0
  297. package/dist/cjs/bundled_modules/vega-transforms/build/vega-transforms.js +3781 -0
  298. package/dist/cjs/bundled_modules/vega-util/build/vega-util.js +824 -0
  299. package/dist/cjs/bundled_modules/vega-view/build/vega-view.js +1306 -0
  300. package/dist/cjs/bundled_modules/vega-view-transforms/build/vega-view-transforms.js +1313 -0
  301. package/dist/cjs/bundled_modules/vega-voronoi/build/vega-voronoi.js +80 -0
  302. package/dist/cjs/bundled_modules/vega-wordcloud/build/vega-wordcloud.js +540 -0
  303. package/dist/cjs/unstable/extras/chart/BarChart.js +42 -0
  304. package/dist/cjs/unstable/extras/chart/Chart.js +100 -0
  305. package/dist/cjs/unstable/extras/chart/DistributionChart.js +84 -0
  306. package/dist/cjs/unstable/extras/chart/DonutChart.js +43 -0
  307. package/dist/cjs/unstable/extras/chart/LineChart.js +45 -0
  308. package/dist/cjs/unstable/extras/chart/PieChart.js +39 -0
  309. package/dist/cjs/unstable/extras/chart/TimelineChart.js +48 -0
  310. package/dist/cjs/unstable/extras/chart/index.js +23 -0
  311. package/dist/esm/bundled_modules/d3-array/src/ascending.js +5 -0
  312. package/dist/esm/bundled_modules/d3-array/src/bisect.js +10 -0
  313. package/dist/esm/bundled_modules/d3-array/src/bisector.js +58 -0
  314. package/dist/esm/bundled_modules/d3-array/src/descending.js +9 -0
  315. package/dist/esm/bundled_modules/d3-array/src/deviation.js +8 -0
  316. package/dist/esm/bundled_modules/d3-array/src/fsum.js +43 -0
  317. package/dist/esm/bundled_modules/d3-array/src/intersection.js +21 -0
  318. package/dist/esm/bundled_modules/d3-array/src/max.js +22 -0
  319. package/dist/esm/bundled_modules/d3-array/src/mean.js +21 -0
  320. package/dist/esm/bundled_modules/d3-array/src/median.js +7 -0
  321. package/dist/esm/bundled_modules/d3-array/src/merge.js +11 -0
  322. package/dist/esm/bundled_modules/d3-array/src/min.js +22 -0
  323. package/dist/esm/bundled_modules/d3-array/src/number.js +22 -0
  324. package/dist/esm/bundled_modules/d3-array/src/permute.js +5 -0
  325. package/dist/esm/bundled_modules/d3-array/src/quantile.js +31 -0
  326. package/dist/esm/bundled_modules/d3-array/src/quickselect.js +55 -0
  327. package/dist/esm/bundled_modules/d3-array/src/range.js +15 -0
  328. package/dist/esm/bundled_modules/d3-array/src/sort.js +17 -0
  329. package/dist/esm/bundled_modules/d3-array/src/sum.js +13 -0
  330. package/dist/esm/bundled_modules/d3-array/src/ticks.js +57 -0
  331. package/dist/esm/bundled_modules/d3-array/src/union.js +13 -0
  332. package/dist/esm/bundled_modules/d3-array/src/variance.js +27 -0
  333. package/dist/esm/bundled_modules/d3-color/src/color.js +398 -0
  334. package/dist/esm/bundled_modules/d3-color/src/cubehelix.js +63 -0
  335. package/dist/esm/bundled_modules/d3-color/src/define.js +12 -0
  336. package/dist/esm/bundled_modules/d3-color/src/lab.js +117 -0
  337. package/dist/esm/bundled_modules/d3-color/src/math.js +4 -0
  338. package/dist/esm/bundled_modules/d3-delaunay/src/delaunay.js +250 -0
  339. package/dist/esm/bundled_modules/d3-delaunay/src/path.js +39 -0
  340. package/dist/esm/bundled_modules/d3-delaunay/src/polygon.js +19 -0
  341. package/dist/esm/bundled_modules/d3-delaunay/src/voronoi.js +334 -0
  342. package/dist/esm/bundled_modules/d3-dispatch/src/dispatch.js +84 -0
  343. package/dist/esm/bundled_modules/d3-dsv/src/dsv.js +166 -0
  344. package/dist/esm/bundled_modules/d3-force/src/center.js +42 -0
  345. package/dist/esm/bundled_modules/d3-force/src/collide.js +102 -0
  346. package/dist/esm/bundled_modules/d3-force/src/constant.js +7 -0
  347. package/dist/esm/bundled_modules/d3-force/src/jiggle.js +5 -0
  348. package/dist/esm/bundled_modules/d3-force/src/lcg.js +11 -0
  349. package/dist/esm/bundled_modules/d3-force/src/link.js +119 -0
  350. package/dist/esm/bundled_modules/d3-force/src/manyBody.js +118 -0
  351. package/dist/esm/bundled_modules/d3-force/src/simulation.js +158 -0
  352. package/dist/esm/bundled_modules/d3-force/src/x.js +43 -0
  353. package/dist/esm/bundled_modules/d3-force/src/y.js +43 -0
  354. package/dist/esm/bundled_modules/d3-format/src/defaultLocale.js +20 -0
  355. package/dist/esm/bundled_modules/d3-format/src/exponent.js +7 -0
  356. package/dist/esm/bundled_modules/d3-format/src/formatDecimal.js +22 -0
  357. package/dist/esm/bundled_modules/d3-format/src/formatGroup.js +20 -0
  358. package/dist/esm/bundled_modules/d3-format/src/formatNumerals.js +9 -0
  359. package/dist/esm/bundled_modules/d3-format/src/formatPrefixAuto.js +18 -0
  360. package/dist/esm/bundled_modules/d3-format/src/formatRounded.js +13 -0
  361. package/dist/esm/bundled_modules/d3-format/src/formatSpecifier.js +49 -0
  362. package/dist/esm/bundled_modules/d3-format/src/formatTrim.js +13 -0
  363. package/dist/esm/bundled_modules/d3-format/src/formatTypes.js +21 -0
  364. package/dist/esm/bundled_modules/d3-format/src/identity.js +5 -0
  365. package/dist/esm/bundled_modules/d3-format/src/locale.js +150 -0
  366. package/dist/esm/bundled_modules/d3-format/src/precisionFixed.js +7 -0
  367. package/dist/esm/bundled_modules/d3-format/src/precisionPrefix.js +7 -0
  368. package/dist/esm/bundled_modules/d3-format/src/precisionRound.js +8 -0
  369. package/dist/esm/bundled_modules/d3-geo/src/area.js +78 -0
  370. package/dist/esm/bundled_modules/d3-geo/src/bounds.js +181 -0
  371. package/dist/esm/bundled_modules/d3-geo/src/cartesian.js +35 -0
  372. package/dist/esm/bundled_modules/d3-geo/src/centroid.js +145 -0
  373. package/dist/esm/bundled_modules/d3-geo/src/circle.js +33 -0
  374. package/dist/esm/bundled_modules/d3-geo/src/clip/antimeridian.js +94 -0
  375. package/dist/esm/bundled_modules/d3-geo/src/clip/buffer.js +26 -0
  376. package/dist/esm/bundled_modules/d3-geo/src/clip/circle.js +179 -0
  377. package/dist/esm/bundled_modules/d3-geo/src/clip/index.js +133 -0
  378. package/dist/esm/bundled_modules/d3-geo/src/clip/line.js +61 -0
  379. package/dist/esm/bundled_modules/d3-geo/src/clip/rectangle.js +170 -0
  380. package/dist/esm/bundled_modules/d3-geo/src/clip/rejoin.js +105 -0
  381. package/dist/esm/bundled_modules/d3-geo/src/compose.js +14 -0
  382. package/dist/esm/bundled_modules/d3-geo/src/graticule.js +103 -0
  383. package/dist/esm/bundled_modules/d3-geo/src/identity.js +3 -0
  384. package/dist/esm/bundled_modules/d3-geo/src/math.js +33 -0
  385. package/dist/esm/bundled_modules/d3-geo/src/noop.js +3 -0
  386. package/dist/esm/bundled_modules/d3-geo/src/path/area.js +50 -0
  387. package/dist/esm/bundled_modules/d3-geo/src/path/bounds.js +28 -0
  388. package/dist/esm/bundled_modules/d3-geo/src/path/centroid.js +100 -0
  389. package/dist/esm/bundled_modules/d3-geo/src/path/context.js +47 -0
  390. package/dist/esm/bundled_modules/d3-geo/src/path/index.js +78 -0
  391. package/dist/esm/bundled_modules/d3-geo/src/path/measure.js +45 -0
  392. package/dist/esm/bundled_modules/d3-geo/src/path/string.js +88 -0
  393. package/dist/esm/bundled_modules/d3-geo/src/pointEqual.js +7 -0
  394. package/dist/esm/bundled_modules/d3-geo/src/polygonContains.js +76 -0
  395. package/dist/esm/bundled_modules/d3-geo/src/projection/albers.js +12 -0
  396. package/dist/esm/bundled_modules/d3-geo/src/projection/albersUsa.js +113 -0
  397. package/dist/esm/bundled_modules/d3-geo/src/projection/azimuthal.js +29 -0
  398. package/dist/esm/bundled_modules/d3-geo/src/projection/azimuthalEqualArea.js +19 -0
  399. package/dist/esm/bundled_modules/d3-geo/src/projection/azimuthalEquidistant.js +19 -0
  400. package/dist/esm/bundled_modules/d3-geo/src/projection/conic.js +17 -0
  401. package/dist/esm/bundled_modules/d3-geo/src/projection/conicConformal.js +40 -0
  402. package/dist/esm/bundled_modules/d3-geo/src/projection/conicEqualArea.js +35 -0
  403. package/dist/esm/bundled_modules/d3-geo/src/projection/conicEquidistant.js +34 -0
  404. package/dist/esm/bundled_modules/d3-geo/src/projection/cylindricalEqualArea.js +17 -0
  405. package/dist/esm/bundled_modules/d3-geo/src/projection/equalEarth.js +38 -0
  406. package/dist/esm/bundled_modules/d3-geo/src/projection/equirectangular.js +14 -0
  407. package/dist/esm/bundled_modules/d3-geo/src/projection/fit.js +49 -0
  408. package/dist/esm/bundled_modules/d3-geo/src/projection/gnomonic.js +18 -0
  409. package/dist/esm/bundled_modules/d3-geo/src/projection/identity.js +87 -0
  410. package/dist/esm/bundled_modules/d3-geo/src/projection/index.js +179 -0
  411. package/dist/esm/bundled_modules/d3-geo/src/projection/mercator.js +54 -0
  412. package/dist/esm/bundled_modules/d3-geo/src/projection/naturalEarth1.js +30 -0
  413. package/dist/esm/bundled_modules/d3-geo/src/projection/orthographic.js +17 -0
  414. package/dist/esm/bundled_modules/d3-geo/src/projection/resample.js +104 -0
  415. package/dist/esm/bundled_modules/d3-geo/src/projection/stereographic.js +20 -0
  416. package/dist/esm/bundled_modules/d3-geo/src/projection/transverseMercator.js +29 -0
  417. package/dist/esm/bundled_modules/d3-geo/src/rotation.js +81 -0
  418. package/dist/esm/bundled_modules/d3-geo/src/stream.js +71 -0
  419. package/dist/esm/bundled_modules/d3-geo/src/transform.js +22 -0
  420. package/dist/esm/bundled_modules/d3-geo-projection/src/math.js +18 -0
  421. package/dist/esm/bundled_modules/d3-geo-projection/src/mollweide.js +31 -0
  422. package/dist/esm/bundled_modules/d3-hierarchy/src/accessors.js +10 -0
  423. package/dist/esm/bundled_modules/d3-hierarchy/src/array.js +22 -0
  424. package/dist/esm/bundled_modules/d3-hierarchy/src/cluster.js +86 -0
  425. package/dist/esm/bundled_modules/d3-hierarchy/src/constant.js +11 -0
  426. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/ancestors.js +9 -0
  427. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/count.js +14 -0
  428. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/descendants.js +5 -0
  429. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/each.js +9 -0
  430. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/eachAfter.js +17 -0
  431. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/eachBefore.js +14 -0
  432. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/find.js +10 -0
  433. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/index.js +93 -0
  434. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/iterator.js +16 -0
  435. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/leaves.js +11 -0
  436. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/links.js +11 -0
  437. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/path.js +32 -0
  438. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/sort.js +9 -0
  439. package/dist/esm/bundled_modules/d3-hierarchy/src/hierarchy/sum.js +11 -0
  440. package/dist/esm/bundled_modules/d3-hierarchy/src/lcg.js +11 -0
  441. package/dist/esm/bundled_modules/d3-hierarchy/src/pack/enclose.js +120 -0
  442. package/dist/esm/bundled_modules/d3-hierarchy/src/pack/index.js +83 -0
  443. package/dist/esm/bundled_modules/d3-hierarchy/src/pack/siblings.js +116 -0
  444. package/dist/esm/bundled_modules/d3-hierarchy/src/partition.js +54 -0
  445. package/dist/esm/bundled_modules/d3-hierarchy/src/stratify.js +147 -0
  446. package/dist/esm/bundled_modules/d3-hierarchy/src/tree.js +239 -0
  447. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/binary.js +48 -0
  448. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/dice.js +14 -0
  449. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/index.js +96 -0
  450. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/resquarify.js +38 -0
  451. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/round.js +8 -0
  452. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/slice.js +14 -0
  453. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/sliceDice.js +8 -0
  454. package/dist/esm/bundled_modules/d3-hierarchy/src/treemap/squarify.js +68 -0
  455. package/dist/esm/bundled_modules/d3-interpolate/src/array.js +24 -0
  456. package/dist/esm/bundled_modules/d3-interpolate/src/basis.js +21 -0
  457. package/dist/esm/bundled_modules/d3-interpolate/src/basisClosed.js +15 -0
  458. package/dist/esm/bundled_modules/d3-interpolate/src/color.js +31 -0
  459. package/dist/esm/bundled_modules/d3-interpolate/src/constant.js +3 -0
  460. package/dist/esm/bundled_modules/d3-interpolate/src/cubehelix.js +31 -0
  461. package/dist/esm/bundled_modules/d3-interpolate/src/date.js +8 -0
  462. package/dist/esm/bundled_modules/d3-interpolate/src/discrete.js +8 -0
  463. package/dist/esm/bundled_modules/d3-interpolate/src/hcl.js +23 -0
  464. package/dist/esm/bundled_modules/d3-interpolate/src/hsl.js +23 -0
  465. package/dist/esm/bundled_modules/d3-interpolate/src/hue.js +11 -0
  466. package/dist/esm/bundled_modules/d3-interpolate/src/index.js +21 -0
  467. package/dist/esm/bundled_modules/d3-interpolate/src/lab.js +18 -0
  468. package/dist/esm/bundled_modules/d3-interpolate/src/number.js +7 -0
  469. package/dist/esm/bundled_modules/d3-interpolate/src/numberArray.js +16 -0
  470. package/dist/esm/bundled_modules/d3-interpolate/src/object.js +25 -0
  471. package/dist/esm/bundled_modules/d3-interpolate/src/piecewise.js +13 -0
  472. package/dist/esm/bundled_modules/d3-interpolate/src/quantize.js +7 -0
  473. package/dist/esm/bundled_modules/d3-interpolate/src/rgb.js +57 -0
  474. package/dist/esm/bundled_modules/d3-interpolate/src/round.js +7 -0
  475. package/dist/esm/bundled_modules/d3-interpolate/src/string.js +66 -0
  476. package/dist/esm/bundled_modules/d3-interpolate/src/transform/decompose.js +28 -0
  477. package/dist/esm/bundled_modules/d3-interpolate/src/transform/index.js +65 -0
  478. package/dist/esm/bundled_modules/d3-interpolate/src/transform/parse.js +20 -0
  479. package/dist/esm/bundled_modules/d3-interpolate/src/value.js +24 -0
  480. package/dist/esm/bundled_modules/d3-interpolate/src/zoom.js +73 -0
  481. package/dist/esm/bundled_modules/d3-path/src/path.js +154 -0
  482. package/dist/esm/bundled_modules/d3-quadtree/src/add.js +86 -0
  483. package/dist/esm/bundled_modules/d3-quadtree/src/cover.js +45 -0
  484. package/dist/esm/bundled_modules/d3-quadtree/src/data.js +9 -0
  485. package/dist/esm/bundled_modules/d3-quadtree/src/extent.js +7 -0
  486. package/dist/esm/bundled_modules/d3-quadtree/src/find.js +72 -0
  487. package/dist/esm/bundled_modules/d3-quadtree/src/quad.js +9 -0
  488. package/dist/esm/bundled_modules/d3-quadtree/src/quadtree.js +75 -0
  489. package/dist/esm/bundled_modules/d3-quadtree/src/remove.js +64 -0
  490. package/dist/esm/bundled_modules/d3-quadtree/src/root.js +5 -0
  491. package/dist/esm/bundled_modules/d3-quadtree/src/size.js +9 -0
  492. package/dist/esm/bundled_modules/d3-quadtree/src/visit.js +18 -0
  493. package/dist/esm/bundled_modules/d3-quadtree/src/visitAfter.js +23 -0
  494. package/dist/esm/bundled_modules/d3-quadtree/src/x.js +9 -0
  495. package/dist/esm/bundled_modules/d3-quadtree/src/y.js +9 -0
  496. package/dist/esm/bundled_modules/d3-scale/src/constant.js +7 -0
  497. package/dist/esm/bundled_modules/d3-scale/src/continuous.js +129 -0
  498. package/dist/esm/bundled_modules/d3-scale/src/diverging.js +108 -0
  499. package/dist/esm/bundled_modules/d3-scale/src/identity.js +30 -0
  500. package/dist/esm/bundled_modules/d3-scale/src/init.js +28 -0
  501. package/dist/esm/bundled_modules/d3-scale/src/linear.js +72 -0
  502. package/dist/esm/bundled_modules/d3-scale/src/log.js +143 -0
  503. package/dist/esm/bundled_modules/d3-scale/src/nice.js +20 -0
  504. package/dist/esm/bundled_modules/d3-scale/src/number.js +5 -0
  505. package/dist/esm/bundled_modules/d3-scale/src/ordinal.js +48 -0
  506. package/dist/esm/bundled_modules/d3-scale/src/pow.js +52 -0
  507. package/dist/esm/bundled_modules/d3-scale/src/quantile.js +61 -0
  508. package/dist/esm/bundled_modules/d3-scale/src/quantize.js +58 -0
  509. package/dist/esm/bundled_modules/d3-scale/src/sequential.js +110 -0
  510. package/dist/esm/bundled_modules/d3-scale/src/symlog.js +37 -0
  511. package/dist/esm/bundled_modules/d3-scale/src/threshold.js +41 -0
  512. package/dist/esm/bundled_modules/d3-scale/src/tickFormat.js +35 -0
  513. package/dist/esm/bundled_modules/d3-scale/src/time.js +80 -0
  514. package/dist/esm/bundled_modules/d3-scale/src/utcTime.js +17 -0
  515. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Accent.js +5 -0
  516. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Dark2.js +5 -0
  517. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Paired.js +5 -0
  518. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Pastel1.js +5 -0
  519. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Pastel2.js +5 -0
  520. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Set1.js +5 -0
  521. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Set2.js +5 -0
  522. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/Set3.js +5 -0
  523. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/category10.js +5 -0
  524. package/dist/esm/bundled_modules/d3-scale-chromatic/src/categorical/observable10.js +5 -0
  525. package/dist/esm/bundled_modules/d3-scale-chromatic/src/colors.js +7 -0
  526. package/dist/esm/bundled_modules/d3-shape/src/arc.js +270 -0
  527. package/dist/esm/bundled_modules/d3-shape/src/area.js +114 -0
  528. package/dist/esm/bundled_modules/d3-shape/src/array.js +7 -0
  529. package/dist/esm/bundled_modules/d3-shape/src/constant.js +7 -0
  530. package/dist/esm/bundled_modules/d3-shape/src/curve/basis.js +53 -0
  531. package/dist/esm/bundled_modules/d3-shape/src/curve/basisClosed.js +54 -0
  532. package/dist/esm/bundled_modules/d3-shape/src/curve/basisOpen.js +41 -0
  533. package/dist/esm/bundled_modules/d3-shape/src/curve/bundle.js +58 -0
  534. package/dist/esm/bundled_modules/d3-shape/src/curve/cardinal.js +63 -0
  535. package/dist/esm/bundled_modules/d3-shape/src/curve/cardinalClosed.js +63 -0
  536. package/dist/esm/bundled_modules/d3-shape/src/curve/cardinalOpen.js +51 -0
  537. package/dist/esm/bundled_modules/d3-shape/src/curve/catmullRom.js +90 -0
  538. package/dist/esm/bundled_modules/d3-shape/src/curve/catmullRomClosed.js +76 -0
  539. package/dist/esm/bundled_modules/d3-shape/src/curve/catmullRomOpen.js +64 -0
  540. package/dist/esm/bundled_modules/d3-shape/src/curve/linear.js +33 -0
  541. package/dist/esm/bundled_modules/d3-shape/src/curve/linearClosed.js +27 -0
  542. package/dist/esm/bundled_modules/d3-shape/src/curve/monotone.js +106 -0
  543. package/dist/esm/bundled_modules/d3-shape/src/curve/natural.js +67 -0
  544. package/dist/esm/bundled_modules/d3-shape/src/curve/step.js +55 -0
  545. package/dist/esm/bundled_modules/d3-shape/src/line.js +60 -0
  546. package/dist/esm/bundled_modules/d3-shape/src/math.js +22 -0
  547. package/dist/esm/bundled_modules/d3-shape/src/noop.js +3 -0
  548. package/dist/esm/bundled_modules/d3-shape/src/path.js +21 -0
  549. package/dist/esm/bundled_modules/d3-shape/src/point.js +9 -0
  550. package/dist/esm/bundled_modules/d3-shape/src/symbol/circle.js +11 -0
  551. package/dist/esm/bundled_modules/d3-shape/src/symbol.js +34 -0
  552. package/dist/esm/bundled_modules/d3-time/src/day.js +37 -0
  553. package/dist/esm/bundled_modules/d3-time/src/duration.js +9 -0
  554. package/dist/esm/bundled_modules/d3-time/src/hour.js +28 -0
  555. package/dist/esm/bundled_modules/d3-time/src/interval.js +71 -0
  556. package/dist/esm/bundled_modules/d3-time/src/millisecond.js +27 -0
  557. package/dist/esm/bundled_modules/d3-time/src/minute.js +28 -0
  558. package/dist/esm/bundled_modules/d3-time/src/month.js +29 -0
  559. package/dist/esm/bundled_modules/d3-time/src/second.js +16 -0
  560. package/dist/esm/bundled_modules/d3-time/src/ticks.js +59 -0
  561. package/dist/esm/bundled_modules/d3-time/src/week.js +58 -0
  562. package/dist/esm/bundled_modules/d3-time/src/year.js +51 -0
  563. package/dist/esm/bundled_modules/d3-time-format/src/defaultLocale.js +29 -0
  564. package/dist/esm/bundled_modules/d3-time-format/src/locale.js +690 -0
  565. package/dist/esm/bundled_modules/d3-timer/src/interval.js +19 -0
  566. package/dist/esm/bundled_modules/d3-timer/src/timer.js +112 -0
  567. package/dist/esm/bundled_modules/delaunator/index.js +481 -0
  568. package/dist/esm/bundled_modules/internmap/src/index.js +63 -0
  569. package/dist/esm/bundled_modules/json-stringify-pretty-compact/index.js +100 -0
  570. package/dist/esm/bundled_modules/robust-predicates/esm/orient2d.js +182 -0
  571. package/dist/esm/bundled_modules/robust-predicates/esm/util.js +88 -0
  572. package/dist/esm/bundled_modules/topojson-client/src/feature.js +72 -0
  573. package/dist/esm/bundled_modules/topojson-client/src/identity.js +5 -0
  574. package/dist/esm/bundled_modules/topojson-client/src/mesh.js +55 -0
  575. package/dist/esm/bundled_modules/topojson-client/src/reverse.js +6 -0
  576. package/dist/esm/bundled_modules/topojson-client/src/stitch.js +75 -0
  577. package/dist/esm/bundled_modules/topojson-client/src/transform.js +21 -0
  578. package/dist/esm/bundled_modules/vega/build/vega.module.js +38 -0
  579. package/dist/esm/bundled_modules/vega-canvas/build/vega-canvas.browser.js +14 -0
  580. package/dist/esm/bundled_modules/vega-crossfilter/build/vega-crossfilter.js +673 -0
  581. package/dist/esm/bundled_modules/vega-dataflow/build/vega-dataflow.js +2080 -0
  582. package/dist/esm/bundled_modules/vega-embed/build/embed.js +2932 -0
  583. package/dist/esm/bundled_modules/vega-encode/build/vega-encode.js +952 -0
  584. package/dist/esm/bundled_modules/vega-event-selector/build/vega-event-selector.js +190 -0
  585. package/dist/esm/bundled_modules/vega-expression/build/vega-expression.js +1597 -0
  586. package/dist/esm/bundled_modules/vega-force/build/vega-force.js +293 -0
  587. package/dist/esm/bundled_modules/vega-format/build/vega-format.js +191 -0
  588. package/dist/esm/bundled_modules/vega-functions/build/vega-functions.js +779 -0
  589. package/dist/esm/bundled_modules/vega-geo/build/vega-geo.js +1322 -0
  590. package/dist/esm/bundled_modules/vega-hierarchy/build/vega-hierarchy.js +572 -0
  591. package/dist/esm/bundled_modules/vega-interpreter/build/vega-interpreter.js +308 -0
  592. package/dist/esm/bundled_modules/vega-label/build/vega-label.js +874 -0
  593. package/dist/esm/bundled_modules/vega-lite/build/index.js +20110 -0
  594. package/dist/esm/bundled_modules/vega-loader/build/vega-loader.browser.js +328 -0
  595. package/dist/esm/bundled_modules/vega-parser/build/vega-parser.js +3783 -0
  596. package/dist/esm/bundled_modules/vega-projection/build/vega-projection.js +86 -0
  597. package/dist/esm/bundled_modules/vega-regression/build/vega-regression.js +233 -0
  598. package/dist/esm/bundled_modules/vega-runtime/build/vega-runtime.js +586 -0
  599. package/dist/esm/bundled_modules/vega-scale/build/vega-scale.js +799 -0
  600. package/dist/esm/bundled_modules/vega-scenegraph/build/vega-scenegraph.js +4982 -0
  601. package/dist/esm/bundled_modules/vega-schema-url-parser/dist/parser.modern.js +3 -0
  602. package/dist/esm/bundled_modules/vega-selections/build/vega-selection.js +336 -0
  603. package/dist/esm/bundled_modules/vega-statistics/build/vega-statistics.js +1157 -0
  604. package/dist/esm/bundled_modules/vega-themes/build/index.js +837 -0
  605. package/dist/esm/bundled_modules/vega-time/build/vega-time.js +314 -0
  606. package/dist/esm/bundled_modules/vega-tooltip/build/index.js +339 -0
  607. package/dist/esm/bundled_modules/vega-transforms/build/vega-transforms.js +3740 -0
  608. package/dist/esm/bundled_modules/vega-util/build/vega-util.js +753 -0
  609. package/dist/esm/bundled_modules/vega-view/build/vega-view.js +1304 -0
  610. package/dist/esm/bundled_modules/vega-view-transforms/build/vega-view-transforms.js +1306 -0
  611. package/dist/esm/bundled_modules/vega-voronoi/build/vega-voronoi.js +78 -0
  612. package/dist/esm/bundled_modules/vega-wordcloud/build/vega-wordcloud.js +538 -0
  613. package/dist/esm/unstable/extras/chart/BarChart.js +40 -0
  614. package/dist/esm/unstable/extras/chart/Chart.js +96 -0
  615. package/dist/esm/unstable/extras/chart/DistributionChart.js +82 -0
  616. package/dist/esm/unstable/extras/chart/DonutChart.js +41 -0
  617. package/dist/esm/unstable/extras/chart/LineChart.js +43 -0
  618. package/dist/esm/unstable/extras/chart/PieChart.js +37 -0
  619. package/dist/esm/unstable/extras/chart/TimelineChart.js +46 -0
  620. package/dist/esm/unstable/extras/chart/index.js +8 -0
  621. package/dist/types/unstable/extras/chart/BarChart.d.ts +16 -0
  622. package/dist/types/unstable/extras/chart/Chart.d.ts +33 -0
  623. package/dist/types/unstable/extras/chart/DistributionChart.d.ts +18 -0
  624. package/dist/types/unstable/extras/chart/DonutChart.d.ts +16 -0
  625. package/dist/types/unstable/extras/chart/LineChart.d.ts +16 -0
  626. package/dist/types/unstable/extras/chart/PieChart.d.ts +14 -0
  627. package/dist/types/unstable/extras/chart/TimelineChart.d.ts +15 -0
  628. package/dist/types/unstable/extras/chart/index.d.ts +15 -0
  629. package/package.json +1 -1
@@ -0,0 +1,2102 @@
1
+ 'use strict';
2
+
3
+ var vegaUtil = require('../../vega-util/build/vega-util.js');
4
+ var vegaLoader_browser = require('../../vega-loader/build/vega-loader.browser.js');
5
+ var vegaFormat = require('../../vega-format/build/vega-format.js');
6
+
7
+ function UniqueList(idFunc) {
8
+ const $ = idFunc || vegaUtil.identity,
9
+ list = [],
10
+ ids = {};
11
+ list.add = _ => {
12
+ const id = $(_);
13
+ if (!ids[id]) {
14
+ ids[id] = 1;
15
+ list.push(_);
16
+ }
17
+ return list;
18
+ };
19
+ list.remove = _ => {
20
+ const id = $(_);
21
+ if (ids[id]) {
22
+ ids[id] = 0;
23
+ const idx = list.indexOf(_);
24
+ if (idx >= 0) list.splice(idx, 1);
25
+ }
26
+ return list;
27
+ };
28
+ return list;
29
+ }
30
+
31
+ /**
32
+ * Invoke and await a potentially async callback function. If
33
+ * an error occurs, trap it and route to Dataflow.error.
34
+ * @param {Dataflow} df - The dataflow instance
35
+ * @param {function} callback - A callback function to invoke
36
+ * and then await. The dataflow will be passed as the single
37
+ * argument to the function.
38
+ */
39
+ async function asyncCallback (df, callback) {
40
+ try {
41
+ await callback(df);
42
+ } catch (err) {
43
+ df.error(err);
44
+ }
45
+ }
46
+
47
+ const TUPLE_ID_KEY = Symbol('vega_id');
48
+ let TUPLE_ID = 1;
49
+
50
+ /**
51
+ * Checks if an input value is a registered tuple.
52
+ * @param {*} t - The value to check.
53
+ * @return {boolean} True if the input is a tuple, false otherwise.
54
+ */
55
+ function isTuple(t) {
56
+ return !!(t && tupleid(t));
57
+ }
58
+
59
+ /**
60
+ * Returns the id of a tuple.
61
+ * @param {object} t - The input tuple.
62
+ * @return {*} the tuple id.
63
+ */
64
+ function tupleid(t) {
65
+ return t[TUPLE_ID_KEY];
66
+ }
67
+
68
+ /**
69
+ * Sets the id of a tuple.
70
+ * @param {object} t - The input tuple.
71
+ * @param {*} id - The id value to set.
72
+ * @return {object} the input tuple.
73
+ */
74
+ function setid(t, id) {
75
+ t[TUPLE_ID_KEY] = id;
76
+ return t;
77
+ }
78
+
79
+ /**
80
+ * Ingest an object or value as a data tuple.
81
+ * If the input value is an object, an id field will be added to it. For
82
+ * efficiency, the input object is modified directly. A copy is not made.
83
+ * If the input value is a literal, it will be wrapped in a new object
84
+ * instance, with the value accessible as the 'data' property.
85
+ * @param datum - The value to ingest.
86
+ * @return {object} The ingested data tuple.
87
+ */
88
+ function ingest$1(datum) {
89
+ const t = datum === Object(datum) ? datum : {
90
+ data: datum
91
+ };
92
+ return tupleid(t) ? t : setid(t, TUPLE_ID++);
93
+ }
94
+
95
+ /**
96
+ * Given a source tuple, return a derived copy.
97
+ * @param {object} t - The source tuple.
98
+ * @return {object} The derived tuple.
99
+ */
100
+ function derive(t) {
101
+ return rederive(t, ingest$1({}));
102
+ }
103
+
104
+ /**
105
+ * Rederive a derived tuple by copying values from the source tuple.
106
+ * @param {object} t - The source tuple.
107
+ * @param {object} d - The derived tuple.
108
+ * @return {object} The derived tuple.
109
+ */
110
+ function rederive(t, d) {
111
+ for (const k in t) d[k] = t[k];
112
+ return d;
113
+ }
114
+
115
+ /**
116
+ * Replace an existing tuple with a new tuple.
117
+ * @param {object} t - The existing data tuple.
118
+ * @param {object} d - The new tuple that replaces the old.
119
+ * @return {object} The new tuple.
120
+ */
121
+ function replace(t, d) {
122
+ return setid(d, tupleid(t));
123
+ }
124
+
125
+ /**
126
+ * Generate an augmented comparator function that provides stable
127
+ * sorting by tuple id when the given comparator produces ties.
128
+ * @param {function} cmp - The comparator to augment.
129
+ * @param {function} [f] - Optional tuple accessor function.
130
+ * @return {function} An augmented comparator function.
131
+ */
132
+ function stableCompare(cmp, f) {
133
+ return !cmp ? null : f ? (a, b) => cmp(a, b) || tupleid(f(a)) - tupleid(f(b)) : (a, b) => cmp(a, b) || tupleid(a) - tupleid(b);
134
+ }
135
+
136
+ function isChangeSet(v) {
137
+ return v && v.constructor === changeset;
138
+ }
139
+ function changeset() {
140
+ const add = [],
141
+ // insert tuples
142
+ rem = [],
143
+ // remove tuples
144
+ mod = [],
145
+ // modify tuples
146
+ remp = [],
147
+ // remove by predicate
148
+ modp = []; // modify by predicate
149
+ let clean = null,
150
+ reflow = false;
151
+ return {
152
+ constructor: changeset,
153
+ insert(t) {
154
+ const d = vegaUtil.array(t),
155
+ n = d.length;
156
+ for (let i = 0; i < n; ++i) add.push(d[i]);
157
+ return this;
158
+ },
159
+ remove(t) {
160
+ const a = vegaUtil.isFunction(t) ? remp : rem,
161
+ d = vegaUtil.array(t),
162
+ n = d.length;
163
+ for (let i = 0; i < n; ++i) a.push(d[i]);
164
+ return this;
165
+ },
166
+ modify(t, field, value) {
167
+ const m = {
168
+ field: field,
169
+ value: vegaUtil.constant(value)
170
+ };
171
+ if (vegaUtil.isFunction(t)) {
172
+ m.filter = t;
173
+ modp.push(m);
174
+ } else {
175
+ m.tuple = t;
176
+ mod.push(m);
177
+ }
178
+ return this;
179
+ },
180
+ encode(t, set) {
181
+ if (vegaUtil.isFunction(t)) modp.push({
182
+ filter: t,
183
+ field: set
184
+ });else mod.push({
185
+ tuple: t,
186
+ field: set
187
+ });
188
+ return this;
189
+ },
190
+ clean(value) {
191
+ clean = value;
192
+ return this;
193
+ },
194
+ reflow() {
195
+ reflow = true;
196
+ return this;
197
+ },
198
+ pulse(pulse, tuples) {
199
+ const cur = {},
200
+ out = {};
201
+ let i, n, m, f, t, id;
202
+
203
+ // build lookup table of current tuples
204
+ for (i = 0, n = tuples.length; i < n; ++i) {
205
+ cur[tupleid(tuples[i])] = 1;
206
+ }
207
+
208
+ // process individual tuples to remove
209
+ for (i = 0, n = rem.length; i < n; ++i) {
210
+ t = rem[i];
211
+ cur[tupleid(t)] = -1;
212
+ }
213
+
214
+ // process predicate-based removals
215
+ for (i = 0, n = remp.length; i < n; ++i) {
216
+ f = remp[i];
217
+ tuples.forEach(t => {
218
+ if (f(t)) cur[tupleid(t)] = -1;
219
+ });
220
+ }
221
+
222
+ // process all add tuples
223
+ for (i = 0, n = add.length; i < n; ++i) {
224
+ t = add[i];
225
+ id = tupleid(t);
226
+ if (cur[id]) {
227
+ // tuple already resides in dataset
228
+ // if flagged for both add and remove, cancel
229
+ cur[id] = 1;
230
+ } else {
231
+ // tuple does not reside in dataset, add
232
+ pulse.add.push(ingest$1(add[i]));
233
+ }
234
+ }
235
+
236
+ // populate pulse rem list
237
+ for (i = 0, n = tuples.length; i < n; ++i) {
238
+ t = tuples[i];
239
+ if (cur[tupleid(t)] < 0) pulse.rem.push(t);
240
+ }
241
+
242
+ // modify helper method
243
+ function modify(t, f, v) {
244
+ if (v) {
245
+ t[f] = v(t);
246
+ } else {
247
+ pulse.encode = f;
248
+ }
249
+ if (!reflow) out[tupleid(t)] = t;
250
+ }
251
+
252
+ // process individual tuples to modify
253
+ for (i = 0, n = mod.length; i < n; ++i) {
254
+ m = mod[i];
255
+ t = m.tuple;
256
+ f = m.field;
257
+ id = cur[tupleid(t)];
258
+ if (id > 0) {
259
+ modify(t, f, m.value);
260
+ pulse.modifies(f);
261
+ }
262
+ }
263
+
264
+ // process predicate-based modifications
265
+ for (i = 0, n = modp.length; i < n; ++i) {
266
+ m = modp[i];
267
+ f = m.filter;
268
+ tuples.forEach(t => {
269
+ if (f(t) && cur[tupleid(t)] > 0) {
270
+ modify(t, m.field, m.value);
271
+ }
272
+ });
273
+ pulse.modifies(m.field);
274
+ }
275
+
276
+ // upon reflow request, populate mod with all non-removed tuples
277
+ // otherwise, populate mod with modified tuples only
278
+ if (reflow) {
279
+ pulse.mod = rem.length || remp.length ? tuples.filter(t => cur[tupleid(t)] > 0) : tuples.slice();
280
+ } else {
281
+ for (id in out) pulse.mod.push(out[id]);
282
+ }
283
+
284
+ // set pulse garbage collection request
285
+ if (clean || clean == null && (rem.length || remp.length)) {
286
+ pulse.clean(true);
287
+ }
288
+ return pulse;
289
+ }
290
+ };
291
+ }
292
+
293
+ const CACHE = '_:mod:_';
294
+
295
+ /**
296
+ * Hash that tracks modifications to assigned values.
297
+ * Callers *must* use the set method to update values.
298
+ */
299
+ function Parameters() {
300
+ Object.defineProperty(this, CACHE, {
301
+ writable: true,
302
+ value: {}
303
+ });
304
+ }
305
+ Parameters.prototype = {
306
+ /**
307
+ * Set a parameter value. If the parameter value changes, the parameter
308
+ * will be recorded as modified.
309
+ * @param {string} name - The parameter name.
310
+ * @param {number} index - The index into an array-value parameter. Ignored if
311
+ * the argument is undefined, null or less than zero.
312
+ * @param {*} value - The parameter value to set.
313
+ * @param {boolean} [force=false] - If true, records the parameter as modified
314
+ * even if the value is unchanged.
315
+ * @return {Parameters} - This parameter object.
316
+ */
317
+ set(name, index, value, force) {
318
+ const o = this,
319
+ v = o[name],
320
+ mod = o[CACHE];
321
+ if (index != null && index >= 0) {
322
+ if (v[index] !== value || force) {
323
+ v[index] = value;
324
+ mod[index + ':' + name] = -1;
325
+ mod[name] = -1;
326
+ }
327
+ } else if (v !== value || force) {
328
+ o[name] = value;
329
+ mod[name] = vegaUtil.isArray(value) ? 1 + value.length : -1;
330
+ }
331
+ return o;
332
+ },
333
+ /**
334
+ * Tests if one or more parameters has been modified. If invoked with no
335
+ * arguments, returns true if any parameter value has changed. If the first
336
+ * argument is array, returns trues if any parameter name in the array has
337
+ * changed. Otherwise, tests if the given name and optional array index has
338
+ * changed.
339
+ * @param {string} name - The parameter name to test.
340
+ * @param {number} [index=undefined] - The parameter array index to test.
341
+ * @return {boolean} - Returns true if a queried parameter was modified.
342
+ */
343
+ modified(name, index) {
344
+ const mod = this[CACHE];
345
+ if (!arguments.length) {
346
+ for (const k in mod) {
347
+ if (mod[k]) return true;
348
+ }
349
+ return false;
350
+ } else if (vegaUtil.isArray(name)) {
351
+ for (let k = 0; k < name.length; ++k) {
352
+ if (mod[name[k]]) return true;
353
+ }
354
+ return false;
355
+ }
356
+ return index != null && index >= 0 ? index + 1 < mod[name] || !!mod[index + ':' + name] : !!mod[name];
357
+ },
358
+ /**
359
+ * Clears the modification records. After calling this method,
360
+ * all parameters are considered unmodified.
361
+ */
362
+ clear() {
363
+ this[CACHE] = {};
364
+ return this;
365
+ }
366
+ };
367
+
368
+ let OP_ID = 0;
369
+ const PULSE = 'pulse',
370
+ NO_PARAMS = new Parameters();
371
+
372
+ // Boolean Flags
373
+ const SKIP$1 = 1,
374
+ MODIFIED = 2;
375
+
376
+ /**
377
+ * An Operator is a processing node in a dataflow graph.
378
+ * Each operator stores a value and an optional value update function.
379
+ * Operators can accept a hash of named parameters. Parameter values can
380
+ * either be direct (JavaScript literals, arrays, objects) or indirect
381
+ * (other operators whose values will be pulled dynamically). Operators
382
+ * included as parameters will have this operator added as a dependency.
383
+ * @constructor
384
+ * @param {*} [init] - The initial value for this operator.
385
+ * @param {function(object, Pulse)} [update] - An update function. Upon
386
+ * evaluation of this operator, the update function will be invoked and the
387
+ * return value will be used as the new value of this operator.
388
+ * @param {object} [params] - The parameters for this operator.
389
+ * @param {boolean} [react=true] - Flag indicating if this operator should
390
+ * listen for changes to upstream operators included as parameters.
391
+ * @see parameters
392
+ */
393
+ function Operator(init, update, params, react) {
394
+ this.id = ++OP_ID;
395
+ this.value = init;
396
+ this.stamp = -1;
397
+ this.rank = -1;
398
+ this.qrank = -1;
399
+ this.flags = 0;
400
+ if (update) {
401
+ this._update = update;
402
+ }
403
+ if (params) this.parameters(params, react);
404
+ }
405
+ function flag(bit) {
406
+ return function (state) {
407
+ const f = this.flags;
408
+ if (arguments.length === 0) return !!(f & bit);
409
+ this.flags = state ? f | bit : f & ~bit;
410
+ return this;
411
+ };
412
+ }
413
+ Operator.prototype = {
414
+ /**
415
+ * Returns a list of target operators dependent on this operator.
416
+ * If this list does not exist, it is created and then returned.
417
+ * @return {UniqueList}
418
+ */
419
+ targets() {
420
+ return this._targets || (this._targets = UniqueList(vegaUtil.id));
421
+ },
422
+ /**
423
+ * Sets the value of this operator.
424
+ * @param {*} value - the value to set.
425
+ * @return {Number} Returns 1 if the operator value has changed
426
+ * according to strict equality, returns 0 otherwise.
427
+ */
428
+ set(value) {
429
+ if (this.value !== value) {
430
+ this.value = value;
431
+ return 1;
432
+ } else {
433
+ return 0;
434
+ }
435
+ },
436
+ /**
437
+ * Indicates that operator evaluation should be skipped on the next pulse.
438
+ * This operator will still propagate incoming pulses, but its update function
439
+ * will not be invoked. The skip flag is reset after every pulse, so calling
440
+ * this method will affect processing of the next pulse only.
441
+ */
442
+ skip: flag(SKIP$1),
443
+ /**
444
+ * Indicates that this operator's value has been modified on its most recent
445
+ * pulse. Normally modification is checked via strict equality; however, in
446
+ * some cases it is more efficient to update the internal state of an object.
447
+ * In those cases, the modified flag can be used to trigger propagation. Once
448
+ * set, the modification flag persists across pulses until unset. The flag can
449
+ * be used with the last timestamp to test if a modification is recent.
450
+ */
451
+ modified: flag(MODIFIED),
452
+ /**
453
+ * Sets the parameters for this operator. The parameter values are analyzed for
454
+ * operator instances. If found, this operator will be added as a dependency
455
+ * of the parameterizing operator. Operator values are dynamically marshalled
456
+ * from each operator parameter prior to evaluation. If a parameter value is
457
+ * an array, the array will also be searched for Operator instances. However,
458
+ * the search does not recurse into sub-arrays or object properties.
459
+ * @param {object} params - A hash of operator parameters.
460
+ * @param {boolean} [react=true] - A flag indicating if this operator should
461
+ * automatically update (react) when parameter values change. In other words,
462
+ * this flag determines if the operator registers itself as a listener on
463
+ * any upstream operators included in the parameters.
464
+ * @param {boolean} [initonly=false] - A flag indicating if this operator
465
+ * should calculate an update only upon its initial evaluation, then
466
+ * deregister dependencies and suppress all future update invocations.
467
+ * @return {Operator[]} - An array of upstream dependencies.
468
+ */
469
+ parameters(params, react, initonly) {
470
+ react = react !== false;
471
+ const argval = this._argval = this._argval || new Parameters(),
472
+ argops = this._argops = this._argops || [],
473
+ deps = [];
474
+ let name, value, n, i;
475
+ const add = (name, index, value) => {
476
+ if (value instanceof Operator) {
477
+ if (value !== this) {
478
+ if (react) value.targets().add(this);
479
+ deps.push(value);
480
+ }
481
+ argops.push({
482
+ op: value,
483
+ name: name,
484
+ index: index
485
+ });
486
+ } else {
487
+ argval.set(name, index, value);
488
+ }
489
+ };
490
+ for (name in params) {
491
+ value = params[name];
492
+ if (name === PULSE) {
493
+ vegaUtil.array(value).forEach(op => {
494
+ if (!(op instanceof Operator)) {
495
+ vegaUtil.error('Pulse parameters must be operator instances.');
496
+ } else if (op !== this) {
497
+ op.targets().add(this);
498
+ deps.push(op);
499
+ }
500
+ });
501
+ this.source = value;
502
+ } else if (vegaUtil.isArray(value)) {
503
+ argval.set(name, -1, Array(n = value.length));
504
+ for (i = 0; i < n; ++i) add(name, i, value[i]);
505
+ } else {
506
+ add(name, -1, value);
507
+ }
508
+ }
509
+ this.marshall().clear(); // initialize values
510
+ if (initonly) argops.initonly = true;
511
+ return deps;
512
+ },
513
+ /**
514
+ * Internal method for marshalling parameter values.
515
+ * Visits each operator dependency to pull the latest value.
516
+ * @return {Parameters} A Parameters object to pass to the update function.
517
+ */
518
+ marshall(stamp) {
519
+ const argval = this._argval || NO_PARAMS,
520
+ argops = this._argops;
521
+ let item, i, op, mod;
522
+ if (argops) {
523
+ const n = argops.length;
524
+ for (i = 0; i < n; ++i) {
525
+ item = argops[i];
526
+ op = item.op;
527
+ mod = op.modified() && op.stamp === stamp;
528
+ argval.set(item.name, item.index, op.value, mod);
529
+ }
530
+ if (argops.initonly) {
531
+ for (i = 0; i < n; ++i) {
532
+ item = argops[i];
533
+ item.op.targets().remove(this);
534
+ }
535
+ this._argops = null;
536
+ this._update = null;
537
+ }
538
+ }
539
+ return argval;
540
+ },
541
+ /**
542
+ * Detach this operator from the dataflow.
543
+ * Unregisters listeners on upstream dependencies.
544
+ */
545
+ detach() {
546
+ const argops = this._argops;
547
+ let i, n, item, op;
548
+ if (argops) {
549
+ for (i = 0, n = argops.length; i < n; ++i) {
550
+ item = argops[i];
551
+ op = item.op;
552
+ if (op._targets) {
553
+ op._targets.remove(this);
554
+ }
555
+ }
556
+ }
557
+
558
+ // remove references to the source and pulse object,
559
+ // if present, to prevent memory leaks of old data.
560
+ this.pulse = null;
561
+ this.source = null;
562
+ },
563
+ /**
564
+ * Delegate method to perform operator processing.
565
+ * Subclasses can override this method to perform custom processing.
566
+ * By default, it marshalls parameters and calls the update function
567
+ * if that function is defined. If the update function does not
568
+ * change the operator value then StopPropagation is returned.
569
+ * If no update function is defined, this method does nothing.
570
+ * @param {Pulse} pulse - the current dataflow pulse.
571
+ * @return The output pulse or StopPropagation. A falsy return value
572
+ * (including undefined) will let the input pulse pass through.
573
+ */
574
+ evaluate(pulse) {
575
+ const update = this._update;
576
+ if (update) {
577
+ const params = this.marshall(pulse.stamp),
578
+ v = update.call(this, params, pulse);
579
+ params.clear();
580
+ if (v !== this.value) {
581
+ this.value = v;
582
+ } else if (!this.modified()) {
583
+ return pulse.StopPropagation;
584
+ }
585
+ }
586
+ },
587
+ /**
588
+ * Run this operator for the current pulse. If this operator has already
589
+ * been run at (or after) the pulse timestamp, returns StopPropagation.
590
+ * Internally, this method calls {@link evaluate} to perform processing.
591
+ * If {@link evaluate} returns a falsy value, the input pulse is returned.
592
+ * This method should NOT be overridden, instead overrride {@link evaluate}.
593
+ * @param {Pulse} pulse - the current dataflow pulse.
594
+ * @return the output pulse for this operator (or StopPropagation)
595
+ */
596
+ run(pulse) {
597
+ if (pulse.stamp < this.stamp) return pulse.StopPropagation;
598
+ let rv;
599
+ if (this.skip()) {
600
+ this.skip(false);
601
+ rv = 0;
602
+ } else {
603
+ rv = this.evaluate(pulse);
604
+ }
605
+ return this.pulse = rv || pulse;
606
+ }
607
+ };
608
+
609
+ /**
610
+ * Add an operator to the dataflow graph. This function accepts a
611
+ * variety of input argument types. The basic signature supports an
612
+ * initial value, update function and parameters. If the first parameter
613
+ * is an Operator instance, it will be added directly. If it is a
614
+ * constructor for an Operator subclass, a new instance will be instantiated.
615
+ * Otherwise, if the first parameter is a function instance, it will be used
616
+ * as the update function and a null initial value is assumed.
617
+ * @param {*} init - One of: the operator to add, the initial value of
618
+ * the operator, an operator class to instantiate, or an update function.
619
+ * @param {function} [update] - The operator update function.
620
+ * @param {object} [params] - The operator parameters.
621
+ * @param {boolean} [react=true] - Flag indicating if this operator should
622
+ * listen for changes to upstream operators included as parameters.
623
+ * @return {Operator} - The added operator.
624
+ */
625
+ function add (init, update, params, react) {
626
+ let shift = 1,
627
+ op;
628
+ if (init instanceof Operator) {
629
+ op = init;
630
+ } else if (init && init.prototype instanceof Operator) {
631
+ op = new init();
632
+ } else if (vegaUtil.isFunction(init)) {
633
+ op = new Operator(null, init);
634
+ } else {
635
+ shift = 0;
636
+ op = new Operator(init, update);
637
+ }
638
+ this.rank(op);
639
+ if (shift) {
640
+ react = params;
641
+ params = update;
642
+ }
643
+ if (params) this.connect(op, op.parameters(params, react));
644
+ this.touch(op);
645
+ return op;
646
+ }
647
+
648
+ /**
649
+ * Connect a target operator as a dependent of source operators.
650
+ * If necessary, this method will rerank the target operator and its
651
+ * dependents to ensure propagation proceeds in a topologically sorted order.
652
+ * @param {Operator} target - The target operator.
653
+ * @param {Array<Operator>} - The source operators that should propagate
654
+ * to the target operator.
655
+ */
656
+ function connect (target, sources) {
657
+ const targetRank = target.rank,
658
+ n = sources.length;
659
+ for (let i = 0; i < n; ++i) {
660
+ if (targetRank < sources[i].rank) {
661
+ this.rerank(target);
662
+ return;
663
+ }
664
+ }
665
+ }
666
+
667
+ let STREAM_ID = 0;
668
+
669
+ /**
670
+ * Models an event stream.
671
+ * @constructor
672
+ * @param {function(Object, number): boolean} [filter] - Filter predicate.
673
+ * Events pass through when truthy, events are suppressed when falsy.
674
+ * @param {function(Object): *} [apply] - Applied to input events to produce
675
+ * new event values.
676
+ * @param {function(Object)} [receive] - Event callback function to invoke
677
+ * upon receipt of a new event. Use to override standard event processing.
678
+ */
679
+ function EventStream(filter, apply, receive) {
680
+ this.id = ++STREAM_ID;
681
+ this.value = null;
682
+ if (receive) this.receive = receive;
683
+ if (filter) this._filter = filter;
684
+ if (apply) this._apply = apply;
685
+ }
686
+
687
+ /**
688
+ * Creates a new event stream instance with the provided
689
+ * (optional) filter, apply and receive functions.
690
+ * @param {function(Object, number): boolean} [filter] - Filter predicate.
691
+ * Events pass through when truthy, events are suppressed when falsy.
692
+ * @param {function(Object): *} [apply] - Applied to input events to produce
693
+ * new event values.
694
+ * @see EventStream
695
+ */
696
+ function stream(filter, apply, receive) {
697
+ return new EventStream(filter, apply, receive);
698
+ }
699
+ EventStream.prototype = {
700
+ _filter: vegaUtil.truthy,
701
+ _apply: vegaUtil.identity,
702
+ targets() {
703
+ return this._targets || (this._targets = UniqueList(vegaUtil.id));
704
+ },
705
+ consume(_) {
706
+ if (!arguments.length) return !!this._consume;
707
+ this._consume = !!_;
708
+ return this;
709
+ },
710
+ receive(evt) {
711
+ if (this._filter(evt)) {
712
+ const val = this.value = this._apply(evt),
713
+ trg = this._targets,
714
+ n = trg ? trg.length : 0;
715
+ for (let i = 0; i < n; ++i) trg[i].receive(val);
716
+ if (this._consume) {
717
+ evt.preventDefault();
718
+ evt.stopPropagation();
719
+ }
720
+ }
721
+ },
722
+ filter(filter) {
723
+ const s = stream(filter);
724
+ this.targets().add(s);
725
+ return s;
726
+ },
727
+ apply(apply) {
728
+ const s = stream(null, apply);
729
+ this.targets().add(s);
730
+ return s;
731
+ },
732
+ merge() {
733
+ const s = stream();
734
+ this.targets().add(s);
735
+ for (let i = 0, n = arguments.length; i < n; ++i) {
736
+ arguments[i].targets().add(s);
737
+ }
738
+ return s;
739
+ },
740
+ throttle(pause) {
741
+ let t = -1;
742
+ return this.filter(() => {
743
+ const now = Date.now();
744
+ if (now - t > pause) {
745
+ t = now;
746
+ return 1;
747
+ } else {
748
+ return 0;
749
+ }
750
+ });
751
+ },
752
+ debounce(delay) {
753
+ const s = stream();
754
+ this.targets().add(stream(null, null, vegaUtil.debounce(delay, e => {
755
+ const df = e.dataflow;
756
+ s.receive(e);
757
+ if (df && df.run) df.run();
758
+ })));
759
+ return s;
760
+ },
761
+ between(a, b) {
762
+ let active = false;
763
+ a.targets().add(stream(null, null, () => active = true));
764
+ b.targets().add(stream(null, null, () => active = false));
765
+ return this.filter(() => active);
766
+ },
767
+ detach() {
768
+ // ensures compatibility with operators (#2753)
769
+ // remove references to other streams and filter functions that may
770
+ // be bound to subcontexts that need to be garbage collected.
771
+ this._filter = vegaUtil.truthy;
772
+ this._targets = null;
773
+ }
774
+ };
775
+
776
+ /**
777
+ * Create a new event stream from an event source.
778
+ * @param {object} source - The event source to monitor. The input must
779
+ * support the addEventListener method.
780
+ * @param {string} type - The event type.
781
+ * @param {function(object): boolean} [filter] - Event filter function.
782
+ * @param {function(object): *} [apply] - Event application function.
783
+ * If provided, this function will be invoked and the result will be
784
+ * used as the downstream event value.
785
+ * @return {EventStream}
786
+ */
787
+ function events (source, type, filter, apply) {
788
+ const df = this,
789
+ s = stream(filter, apply),
790
+ send = function (e) {
791
+ e.dataflow = df;
792
+ try {
793
+ s.receive(e);
794
+ } catch (error) {
795
+ df.error(error);
796
+ } finally {
797
+ df.run();
798
+ }
799
+ };
800
+ let sources;
801
+ if (typeof source === 'string' && typeof document !== 'undefined') {
802
+ sources = document.querySelectorAll(source);
803
+ } else {
804
+ sources = vegaUtil.array(source);
805
+ }
806
+ const n = sources.length;
807
+ for (let i = 0; i < n; ++i) {
808
+ sources[i].addEventListener(type, send);
809
+ }
810
+ return s;
811
+ }
812
+
813
+ function parse(data, format) {
814
+ const locale = this.locale();
815
+ return vegaLoader_browser.read(data, format, locale.timeParse, locale.utcParse);
816
+ }
817
+
818
+ /**
819
+ * Ingests new data into the dataflow. First parses the data using the
820
+ * vega-loader read method, then pulses a changeset to the target operator.
821
+ * @param {Operator} target - The Operator to target with ingested data,
822
+ * typically a Collect transform instance.
823
+ * @param {*} data - The input data, prior to parsing. For JSON this may
824
+ * be a string or an object. For CSV, TSV, etc should be a string.
825
+ * @param {object} format - The data format description for parsing
826
+ * loaded data. This object is passed to the vega-loader read method.
827
+ * @returns {Dataflow}
828
+ */
829
+ function ingest(target, data, format) {
830
+ data = this.parse(data, format);
831
+ return this.pulse(target, this.changeset().insert(data));
832
+ }
833
+
834
+ /**
835
+ * Request data from an external source, parse it, and return a Promise.
836
+ * @param {string} url - The URL from which to load the data. This string
837
+ * is passed to the vega-loader load method.
838
+ * @param {object} [format] - The data format description for parsing
839
+ * loaded data. This object is passed to the vega-loader read method.
840
+ * @return {Promise} A Promise that resolves upon completion of the request.
841
+ * The resolved object contains the following properties:
842
+ * - data: an array of parsed data (or null upon error)
843
+ * - status: a code for success (0), load fail (-1), or parse fail (-2)
844
+ */
845
+ async function request(url, format) {
846
+ const df = this;
847
+ let status = 0,
848
+ data;
849
+ try {
850
+ data = await df.loader().load(url, {
851
+ context: 'dataflow',
852
+ response: vegaLoader_browser.responseType(format && format.type)
853
+ });
854
+ try {
855
+ data = df.parse(data, format);
856
+ } catch (err) {
857
+ status = -2;
858
+ df.warn('Data ingestion failed', url, err);
859
+ }
860
+ } catch (err) {
861
+ status = -1;
862
+ df.warn('Loading failed', url, err);
863
+ }
864
+ return {
865
+ data,
866
+ status
867
+ };
868
+ }
869
+ async function preload(target, url, format) {
870
+ const df = this,
871
+ pending = df._pending || loadPending(df);
872
+ pending.requests += 1;
873
+ const res = await df.request(url, format);
874
+ df.pulse(target, df.changeset().remove(vegaUtil.truthy).insert(res.data || []));
875
+ pending.done();
876
+ return res;
877
+ }
878
+ function loadPending(df) {
879
+ let accept;
880
+ const pending = new Promise(a => accept = a);
881
+ pending.requests = 0;
882
+ pending.done = () => {
883
+ if (--pending.requests === 0) {
884
+ df._pending = null;
885
+ accept(df);
886
+ }
887
+ };
888
+ return df._pending = pending;
889
+ }
890
+
891
+ const SKIP = {
892
+ skip: true
893
+ };
894
+
895
+ /**
896
+ * Perform operator updates in response to events. Applies an
897
+ * update function to compute a new operator value. If the update function
898
+ * returns a {@link ChangeSet}, the operator will be pulsed with those tuple
899
+ * changes. Otherwise, the operator value will be updated to the return value.
900
+ * @param {EventStream|Operator} source - The event source to react to.
901
+ * This argument can be either an EventStream or an Operator.
902
+ * @param {Operator|function(object):Operator} target - The operator to update.
903
+ * This argument can either be an Operator instance or (if the source
904
+ * argument is an EventStream), a function that accepts an event object as
905
+ * input and returns an Operator to target.
906
+ * @param {function(Parameters,Event): *} [update] - Optional update function
907
+ * to compute the new operator value, or a literal value to set. Update
908
+ * functions expect to receive a parameter object and event as arguments.
909
+ * This function can either return a new operator value or (if the source
910
+ * argument is an EventStream) a {@link ChangeSet} instance to pulse
911
+ * the target operator with tuple changes.
912
+ * @param {object} [params] - The update function parameters.
913
+ * @param {object} [options] - Additional options hash. If not overridden,
914
+ * updated operators will be skipped by default.
915
+ * @param {boolean} [options.skip] - If true, the operator will
916
+ * be skipped: it will not be evaluated, but its dependents will be.
917
+ * @param {boolean} [options.force] - If true, the operator will
918
+ * be re-evaluated even if its value has not changed.
919
+ * @return {Dataflow}
920
+ */
921
+ function on (source, target, update, params, options) {
922
+ const fn = source instanceof Operator ? onOperator : onStream;
923
+ fn(this, source, target, update, params, options);
924
+ return this;
925
+ }
926
+ function onStream(df, stream, target, update, params, options) {
927
+ const opt = vegaUtil.extend({}, options, SKIP);
928
+ let func, op;
929
+ if (!vegaUtil.isFunction(target)) target = vegaUtil.constant(target);
930
+ if (update === undefined) {
931
+ func = e => df.touch(target(e));
932
+ } else if (vegaUtil.isFunction(update)) {
933
+ op = new Operator(null, update, params, false);
934
+ func = e => {
935
+ op.evaluate(e);
936
+ const t = target(e),
937
+ v = op.value;
938
+ isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);
939
+ };
940
+ } else {
941
+ func = e => df.update(target(e), update, opt);
942
+ }
943
+ stream.apply(func);
944
+ }
945
+ function onOperator(df, source, target, update, params, options) {
946
+ if (update === undefined) {
947
+ source.targets().add(target);
948
+ } else {
949
+ const opt = options || {},
950
+ op = new Operator(null, updater(target, update), params, false);
951
+ op.modified(opt.force);
952
+ op.rank = source.rank; // immediately follow source
953
+ source.targets().add(op); // add dependency
954
+
955
+ if (target) {
956
+ op.skip(true); // skip first invocation
957
+ op.value = target.value; // initialize value
958
+ op.targets().add(target); // chain dependencies
959
+ df.connect(target, [op]); // rerank as needed, #1672
960
+ }
961
+ }
962
+ }
963
+ function updater(target, update) {
964
+ update = vegaUtil.isFunction(update) ? update : vegaUtil.constant(update);
965
+ return target ? function (_, pulse) {
966
+ const value = update(_, pulse);
967
+ if (!target.skip()) {
968
+ target.skip(value !== this.value).value = value;
969
+ }
970
+ return value;
971
+ } : update;
972
+ }
973
+
974
+ /**
975
+ * Assigns a rank to an operator. Ranks are assigned in increasing order
976
+ * by incrementing an internal rank counter.
977
+ * @param {Operator} op - The operator to assign a rank.
978
+ */
979
+ function rank(op) {
980
+ op.rank = ++this._rank;
981
+ }
982
+
983
+ /**
984
+ * Re-ranks an operator and all downstream target dependencies. This
985
+ * is necessary when upstream dependencies of higher rank are added to
986
+ * a target operator.
987
+ * @param {Operator} op - The operator to re-rank.
988
+ */
989
+ function rerank(op) {
990
+ const queue = [op];
991
+ let cur, list, i;
992
+ while (queue.length) {
993
+ this.rank(cur = queue.pop());
994
+ if (list = cur._targets) {
995
+ for (i = list.length; --i >= 0;) {
996
+ queue.push(cur = list[i]);
997
+ if (cur === op) vegaUtil.error('Cycle detected in dataflow graph.');
998
+ }
999
+ }
1000
+ }
1001
+ }
1002
+
1003
+ /**
1004
+ * Sentinel value indicating pulse propagation should stop.
1005
+ */
1006
+ const StopPropagation = {};
1007
+
1008
+ // Pulse visit type flags
1009
+ const ADD = 1 << 0,
1010
+ REM = 1 << 1,
1011
+ MOD = 1 << 2,
1012
+ ADD_REM = ADD | REM,
1013
+ ADD_MOD = ADD | MOD,
1014
+ ALL = ADD | REM | MOD,
1015
+ REFLOW = 1 << 3,
1016
+ SOURCE = 1 << 4,
1017
+ NO_SOURCE = 1 << 5,
1018
+ NO_FIELDS = 1 << 6;
1019
+
1020
+ /**
1021
+ * A Pulse enables inter-operator communication during a run of the
1022
+ * dataflow graph. In addition to the current timestamp, a pulse may also
1023
+ * contain a change-set of added, removed or modified data tuples, as well as
1024
+ * a pointer to a full backing data source. Tuple change sets may not
1025
+ * be fully materialized; for example, to prevent needless array creation
1026
+ * a change set may include larger arrays and corresponding filter functions.
1027
+ * The pulse provides a {@link visit} method to enable proper and efficient
1028
+ * iteration over requested data tuples.
1029
+ *
1030
+ * In addition, each pulse can track modification flags for data tuple fields.
1031
+ * Responsible transform operators should call the {@link modifies} method to
1032
+ * indicate changes to data fields. The {@link modified} method enables
1033
+ * querying of this modification state.
1034
+ *
1035
+ * @constructor
1036
+ * @param {Dataflow} dataflow - The backing dataflow instance.
1037
+ * @param {number} stamp - The current propagation timestamp.
1038
+ * @param {string} [encode] - An optional encoding set name, which is then
1039
+ * accessible as Pulse.encode. Operators can respond to (or ignore) this
1040
+ * setting as appropriate. This parameter can be used in conjunction with
1041
+ * the Encode transform in the vega-encode module.
1042
+ */
1043
+ function Pulse(dataflow, stamp, encode) {
1044
+ this.dataflow = dataflow;
1045
+ this.stamp = stamp == null ? -1 : stamp;
1046
+ this.add = [];
1047
+ this.rem = [];
1048
+ this.mod = [];
1049
+ this.fields = null;
1050
+ this.encode = encode || null;
1051
+ }
1052
+ function materialize(data, filter) {
1053
+ const out = [];
1054
+ vegaUtil.visitArray(data, filter, _ => out.push(_));
1055
+ return out;
1056
+ }
1057
+ function filter(pulse, flags) {
1058
+ const map = {};
1059
+ pulse.visit(flags, t => {
1060
+ map[tupleid(t)] = 1;
1061
+ });
1062
+ return t => map[tupleid(t)] ? null : t;
1063
+ }
1064
+ function addFilter(a, b) {
1065
+ return a ? (t, i) => a(t, i) && b(t, i) : b;
1066
+ }
1067
+ Pulse.prototype = {
1068
+ /**
1069
+ * Sentinel value indicating pulse propagation should stop.
1070
+ */
1071
+ StopPropagation,
1072
+ /**
1073
+ * Boolean flag indicating ADD (added) tuples.
1074
+ */
1075
+ ADD,
1076
+ /**
1077
+ * Boolean flag indicating REM (removed) tuples.
1078
+ */
1079
+ REM,
1080
+ /**
1081
+ * Boolean flag indicating MOD (modified) tuples.
1082
+ */
1083
+ MOD,
1084
+ /**
1085
+ * Boolean flag indicating ADD (added) and REM (removed) tuples.
1086
+ */
1087
+ ADD_REM,
1088
+ /**
1089
+ * Boolean flag indicating ADD (added) and MOD (modified) tuples.
1090
+ */
1091
+ ADD_MOD,
1092
+ /**
1093
+ * Boolean flag indicating ADD, REM and MOD tuples.
1094
+ */
1095
+ ALL,
1096
+ /**
1097
+ * Boolean flag indicating all tuples in a data source
1098
+ * except for the ADD, REM and MOD tuples.
1099
+ */
1100
+ REFLOW,
1101
+ /**
1102
+ * Boolean flag indicating a 'pass-through' to a
1103
+ * backing data source, ignoring ADD, REM and MOD tuples.
1104
+ */
1105
+ SOURCE,
1106
+ /**
1107
+ * Boolean flag indicating that source data should be
1108
+ * suppressed when creating a forked pulse.
1109
+ */
1110
+ NO_SOURCE,
1111
+ /**
1112
+ * Boolean flag indicating that field modifications should be
1113
+ * suppressed when creating a forked pulse.
1114
+ */
1115
+ NO_FIELDS,
1116
+ /**
1117
+ * Creates a new pulse based on the values of this pulse.
1118
+ * The dataflow, time stamp and field modification values are copied over.
1119
+ * By default, new empty ADD, REM and MOD arrays are created.
1120
+ * @param {number} flags - Integer of boolean flags indicating which (if any)
1121
+ * tuple arrays should be copied to the new pulse. The supported flag values
1122
+ * are ADD, REM and MOD. Array references are copied directly: new array
1123
+ * instances are not created.
1124
+ * @return {Pulse} - The forked pulse instance.
1125
+ * @see init
1126
+ */
1127
+ fork(flags) {
1128
+ return new Pulse(this.dataflow).init(this, flags);
1129
+ },
1130
+ /**
1131
+ * Creates a copy of this pulse with new materialized array
1132
+ * instances for the ADD, REM, MOD, and SOURCE arrays.
1133
+ * The dataflow, time stamp and field modification values are copied over.
1134
+ * @return {Pulse} - The cloned pulse instance.
1135
+ * @see init
1136
+ */
1137
+ clone() {
1138
+ const p = this.fork(ALL);
1139
+ p.add = p.add.slice();
1140
+ p.rem = p.rem.slice();
1141
+ p.mod = p.mod.slice();
1142
+ if (p.source) p.source = p.source.slice();
1143
+ return p.materialize(ALL | SOURCE);
1144
+ },
1145
+ /**
1146
+ * Returns a pulse that adds all tuples from a backing source. This is
1147
+ * useful for cases where operators are added to a dataflow after an
1148
+ * upstream data pipeline has already been processed, ensuring that
1149
+ * new operators can observe all tuples within a stream.
1150
+ * @return {Pulse} - A pulse instance with all source tuples included
1151
+ * in the add array. If the current pulse already has all source
1152
+ * tuples in its add array, it is returned directly. If the current
1153
+ * pulse does not have a backing source, it is returned directly.
1154
+ */
1155
+ addAll() {
1156
+ let p = this;
1157
+ const reuse = !p.source || p.add === p.rem // special case for indexed set (e.g., crossfilter)
1158
+ || !p.rem.length && p.source.length === p.add.length;
1159
+ if (reuse) {
1160
+ return p;
1161
+ } else {
1162
+ p = new Pulse(this.dataflow).init(this);
1163
+ p.add = p.source;
1164
+ p.rem = []; // new operators can ignore rem #2769
1165
+ return p;
1166
+ }
1167
+ },
1168
+ /**
1169
+ * Initialize this pulse based on the values of another pulse. This method
1170
+ * is used internally by {@link fork} to initialize a new forked tuple.
1171
+ * The dataflow, time stamp and field modification values are copied over.
1172
+ * By default, new empty ADD, REM and MOD arrays are created.
1173
+ * @param {Pulse} src - The source pulse to copy from.
1174
+ * @param {number} flags - Integer of boolean flags indicating which (if any)
1175
+ * tuple arrays should be copied to the new pulse. The supported flag values
1176
+ * are ADD, REM and MOD. Array references are copied directly: new array
1177
+ * instances are not created. By default, source data arrays are copied
1178
+ * to the new pulse. Use the NO_SOURCE flag to enforce a null source.
1179
+ * @return {Pulse} - Returns this Pulse instance.
1180
+ */
1181
+ init(src, flags) {
1182
+ const p = this;
1183
+ p.stamp = src.stamp;
1184
+ p.encode = src.encode;
1185
+ if (src.fields && !(flags & NO_FIELDS)) {
1186
+ p.fields = src.fields;
1187
+ }
1188
+ if (flags & ADD) {
1189
+ p.addF = src.addF;
1190
+ p.add = src.add;
1191
+ } else {
1192
+ p.addF = null;
1193
+ p.add = [];
1194
+ }
1195
+ if (flags & REM) {
1196
+ p.remF = src.remF;
1197
+ p.rem = src.rem;
1198
+ } else {
1199
+ p.remF = null;
1200
+ p.rem = [];
1201
+ }
1202
+ if (flags & MOD) {
1203
+ p.modF = src.modF;
1204
+ p.mod = src.mod;
1205
+ } else {
1206
+ p.modF = null;
1207
+ p.mod = [];
1208
+ }
1209
+ if (flags & NO_SOURCE) {
1210
+ p.srcF = null;
1211
+ p.source = null;
1212
+ } else {
1213
+ p.srcF = src.srcF;
1214
+ p.source = src.source;
1215
+ if (src.cleans) p.cleans = src.cleans;
1216
+ }
1217
+ return p;
1218
+ },
1219
+ /**
1220
+ * Schedules a function to run after pulse propagation completes.
1221
+ * @param {function} func - The function to run.
1222
+ */
1223
+ runAfter(func) {
1224
+ this.dataflow.runAfter(func);
1225
+ },
1226
+ /**
1227
+ * Indicates if tuples have been added, removed or modified.
1228
+ * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.
1229
+ * Defaults to ALL, returning true if any tuple type has changed.
1230
+ * @return {boolean} - Returns true if one or more queried tuple types have
1231
+ * changed, false otherwise.
1232
+ */
1233
+ changed(flags) {
1234
+ const f = flags || ALL;
1235
+ return f & ADD && this.add.length || f & REM && this.rem.length || f & MOD && this.mod.length;
1236
+ },
1237
+ /**
1238
+ * Forces a "reflow" of tuple values, such that all tuples in the backing
1239
+ * source are added to the MOD set, unless already present in the ADD set.
1240
+ * @param {boolean} [fork=false] - If true, returns a forked copy of this
1241
+ * pulse, and invokes reflow on that derived pulse.
1242
+ * @return {Pulse} - The reflowed pulse instance.
1243
+ */
1244
+ reflow(fork) {
1245
+ if (fork) return this.fork(ALL).reflow();
1246
+ const len = this.add.length,
1247
+ src = this.source && this.source.length;
1248
+ if (src && src !== len) {
1249
+ this.mod = this.source;
1250
+ if (len) this.filter(MOD, filter(this, ADD));
1251
+ }
1252
+ return this;
1253
+ },
1254
+ /**
1255
+ * Get/set metadata to pulse requesting garbage collection
1256
+ * to reclaim currently unused resources.
1257
+ */
1258
+ clean(value) {
1259
+ if (arguments.length) {
1260
+ this.cleans = !!value;
1261
+ return this;
1262
+ } else {
1263
+ return this.cleans;
1264
+ }
1265
+ },
1266
+ /**
1267
+ * Marks one or more data field names as modified to assist dependency
1268
+ * tracking and incremental processing by transform operators.
1269
+ * @param {string|Array<string>} _ - The field(s) to mark as modified.
1270
+ * @return {Pulse} - This pulse instance.
1271
+ */
1272
+ modifies(_) {
1273
+ const hash = this.fields || (this.fields = {});
1274
+ if (vegaUtil.isArray(_)) {
1275
+ _.forEach(f => hash[f] = true);
1276
+ } else {
1277
+ hash[_] = true;
1278
+ }
1279
+ return this;
1280
+ },
1281
+ /**
1282
+ * Checks if one or more data fields have been modified during this pulse
1283
+ * propagation timestamp.
1284
+ * @param {string|Array<string>} _ - The field(s) to check for modified.
1285
+ * @param {boolean} nomod - If true, will check the modified flag even if
1286
+ * no mod tuples exist. If false (default), mod tuples must be present.
1287
+ * @return {boolean} - Returns true if any of the provided fields has been
1288
+ * marked as modified, false otherwise.
1289
+ */
1290
+ modified(_, nomod) {
1291
+ const fields = this.fields;
1292
+ return !((nomod || this.mod.length) && fields) ? false : !arguments.length ? !!fields : vegaUtil.isArray(_) ? _.some(f => fields[f]) : fields[_];
1293
+ },
1294
+ /**
1295
+ * Adds a filter function to one more tuple sets. Filters are applied to
1296
+ * backing tuple arrays, to determine the actual set of tuples considered
1297
+ * added, removed or modified. They can be used to delay materialization of
1298
+ * a tuple set in order to avoid expensive array copies. In addition, the
1299
+ * filter functions can serve as value transformers: unlike standard predicate
1300
+ * function (which return boolean values), Pulse filters should return the
1301
+ * actual tuple value to process. If a tuple set is already filtered, the
1302
+ * new filter function will be appended into a conjuntive ('and') query.
1303
+ * @param {number} flags - Flags indicating the tuple set(s) to filter.
1304
+ * @param {function(*):object} filter - Filter function that will be applied
1305
+ * to the tuple set array, and should return a data tuple if the value
1306
+ * should be included in the tuple set, and falsy (or null) otherwise.
1307
+ * @return {Pulse} - Returns this pulse instance.
1308
+ */
1309
+ filter(flags, filter) {
1310
+ const p = this;
1311
+ if (flags & ADD) p.addF = addFilter(p.addF, filter);
1312
+ if (flags & REM) p.remF = addFilter(p.remF, filter);
1313
+ if (flags & MOD) p.modF = addFilter(p.modF, filter);
1314
+ if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);
1315
+ return p;
1316
+ },
1317
+ /**
1318
+ * Materialize one or more tuple sets in this pulse. If the tuple set(s) have
1319
+ * a registered filter function, it will be applied and the tuple set(s) will
1320
+ * be replaced with materialized tuple arrays.
1321
+ * @param {number} flags - Flags indicating the tuple set(s) to materialize.
1322
+ * @return {Pulse} - Returns this pulse instance.
1323
+ */
1324
+ materialize(flags) {
1325
+ flags = flags || ALL;
1326
+ const p = this;
1327
+ if (flags & ADD && p.addF) {
1328
+ p.add = materialize(p.add, p.addF);
1329
+ p.addF = null;
1330
+ }
1331
+ if (flags & REM && p.remF) {
1332
+ p.rem = materialize(p.rem, p.remF);
1333
+ p.remF = null;
1334
+ }
1335
+ if (flags & MOD && p.modF) {
1336
+ p.mod = materialize(p.mod, p.modF);
1337
+ p.modF = null;
1338
+ }
1339
+ if (flags & SOURCE && p.srcF) {
1340
+ p.source = p.source.filter(p.srcF);
1341
+ p.srcF = null;
1342
+ }
1343
+ return p;
1344
+ },
1345
+ /**
1346
+ * Visit one or more tuple sets in this pulse.
1347
+ * @param {number} flags - Flags indicating the tuple set(s) to visit.
1348
+ * Legal values are ADD, REM, MOD and SOURCE (if a backing data source
1349
+ * has been set).
1350
+ * @param {function(object):*} - Visitor function invoked per-tuple.
1351
+ * @return {Pulse} - Returns this pulse instance.
1352
+ */
1353
+ visit(flags, visitor) {
1354
+ const p = this,
1355
+ v = visitor;
1356
+ if (flags & SOURCE) {
1357
+ vegaUtil.visitArray(p.source, p.srcF, v);
1358
+ return p;
1359
+ }
1360
+ if (flags & ADD) vegaUtil.visitArray(p.add, p.addF, v);
1361
+ if (flags & REM) vegaUtil.visitArray(p.rem, p.remF, v);
1362
+ if (flags & MOD) vegaUtil.visitArray(p.mod, p.modF, v);
1363
+ const src = p.source;
1364
+ if (flags & REFLOW && src) {
1365
+ const sum = p.add.length + p.mod.length;
1366
+ if (sum === src.length) ; else if (sum) {
1367
+ vegaUtil.visitArray(src, filter(p, ADD_MOD), v);
1368
+ } else {
1369
+ // if no add/rem/mod tuples, visit source
1370
+ vegaUtil.visitArray(src, p.srcF, v);
1371
+ }
1372
+ }
1373
+ return p;
1374
+ }
1375
+ };
1376
+
1377
+ /**
1378
+ * Represents a set of multiple pulses. Used as input for operators
1379
+ * that accept multiple pulses at a time. Contained pulses are
1380
+ * accessible via the public "pulses" array property. This pulse doe
1381
+ * not carry added, removed or modified tuples directly. However,
1382
+ * the visit method can be used to traverse all such tuples contained
1383
+ * in sub-pulses with a timestamp matching this parent multi-pulse.
1384
+ * @constructor
1385
+ * @param {Dataflow} dataflow - The backing dataflow instance.
1386
+ * @param {number} stamp - The timestamp.
1387
+ * @param {Array<Pulse>} pulses - The sub-pulses for this multi-pulse.
1388
+ */
1389
+ function MultiPulse(dataflow, stamp, pulses, encode) {
1390
+ const p = this;
1391
+ let c = 0;
1392
+ this.dataflow = dataflow;
1393
+ this.stamp = stamp;
1394
+ this.fields = null;
1395
+ this.encode = encode || null;
1396
+ this.pulses = pulses;
1397
+ for (const pulse of pulses) {
1398
+ if (pulse.stamp !== stamp) continue;
1399
+ if (pulse.fields) {
1400
+ const hash = p.fields || (p.fields = {});
1401
+ for (const f in pulse.fields) {
1402
+ hash[f] = 1;
1403
+ }
1404
+ }
1405
+ if (pulse.changed(p.ADD)) c |= p.ADD;
1406
+ if (pulse.changed(p.REM)) c |= p.REM;
1407
+ if (pulse.changed(p.MOD)) c |= p.MOD;
1408
+ }
1409
+ this.changes = c;
1410
+ }
1411
+ vegaUtil.inherits(MultiPulse, Pulse, {
1412
+ /**
1413
+ * Creates a new pulse based on the values of this pulse.
1414
+ * The dataflow, time stamp and field modification values are copied over.
1415
+ * @return {Pulse}
1416
+ */
1417
+ fork(flags) {
1418
+ const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);
1419
+ if (flags !== undefined) {
1420
+ if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));
1421
+ if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));
1422
+ if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));
1423
+ }
1424
+ return p;
1425
+ },
1426
+ changed(flags) {
1427
+ return this.changes & flags;
1428
+ },
1429
+ modified(_) {
1430
+ const p = this,
1431
+ fields = p.fields;
1432
+ return !(fields && p.changes & p.MOD) ? 0 : vegaUtil.isArray(_) ? _.some(f => fields[f]) : fields[_];
1433
+ },
1434
+ filter() {
1435
+ vegaUtil.error('MultiPulse does not support filtering.');
1436
+ },
1437
+ materialize() {
1438
+ vegaUtil.error('MultiPulse does not support materialization.');
1439
+ },
1440
+ visit(flags, visitor) {
1441
+ const p = this,
1442
+ pulses = p.pulses,
1443
+ n = pulses.length;
1444
+ let i = 0;
1445
+ if (flags & p.SOURCE) {
1446
+ for (; i < n; ++i) {
1447
+ pulses[i].visit(flags, visitor);
1448
+ }
1449
+ } else {
1450
+ for (; i < n; ++i) {
1451
+ if (pulses[i].stamp === p.stamp) {
1452
+ pulses[i].visit(flags, visitor);
1453
+ }
1454
+ }
1455
+ }
1456
+ return p;
1457
+ }
1458
+ });
1459
+
1460
+ /**
1461
+ * Evaluates the dataflow and returns a Promise that resolves when pulse
1462
+ * propagation completes. This method will increment the current timestamp
1463
+ * and process all updated, pulsed and touched operators. When invoked for
1464
+ * the first time, all registered operators will be processed. This method
1465
+ * should not be invoked by third-party clients, use {@link runAsync} or
1466
+ * {@link run} instead.
1467
+ * @param {string} [encode] - The name of an encoding set to invoke during
1468
+ * propagation. This value is added to generated Pulse instances;
1469
+ * operators can then respond to (or ignore) this setting as appropriate.
1470
+ * This parameter can be used in conjunction with the Encode transform in
1471
+ * the vega-encode package.
1472
+ * @param {function} [prerun] - An optional callback function to invoke
1473
+ * immediately before dataflow evaluation commences.
1474
+ * @param {function} [postrun] - An optional callback function to invoke
1475
+ * after dataflow evaluation completes. The callback will be invoked
1476
+ * after those registered via {@link runAfter}.
1477
+ * @return {Promise} - A promise that resolves to this dataflow after
1478
+ * evaluation completes.
1479
+ */
1480
+ async function evaluate(encode, prerun, postrun) {
1481
+ const df = this,
1482
+ async = [];
1483
+
1484
+ // if the pulse value is set, this is a re-entrant call
1485
+ if (df._pulse) return reentrant(df);
1486
+
1487
+ // wait for pending datasets to load
1488
+ if (df._pending) await df._pending;
1489
+
1490
+ // invoke prerun function, if provided
1491
+ if (prerun) await asyncCallback(df, prerun);
1492
+
1493
+ // exit early if there are no updates
1494
+ if (!df._touched.length) {
1495
+ df.debug('Dataflow invoked, but nothing to do.');
1496
+ return df;
1497
+ }
1498
+
1499
+ // increment timestamp clock
1500
+ const stamp = ++df._clock;
1501
+
1502
+ // set the current pulse
1503
+ df._pulse = new Pulse(df, stamp, encode);
1504
+
1505
+ // initialize priority queue, reset touched operators
1506
+ df._touched.forEach(op => df._enqueue(op, true));
1507
+ df._touched = UniqueList(vegaUtil.id);
1508
+ let count = 0,
1509
+ op,
1510
+ next,
1511
+ error;
1512
+ try {
1513
+ while (df._heap.size() > 0) {
1514
+ // dequeue operator with highest priority
1515
+ op = df._heap.pop();
1516
+
1517
+ // re-queue if rank changed
1518
+ if (op.rank !== op.qrank) {
1519
+ df._enqueue(op, true);
1520
+ continue;
1521
+ }
1522
+
1523
+ // otherwise, evaluate the operator
1524
+ next = op.run(df._getPulse(op, encode));
1525
+ if (next.then) {
1526
+ // await if operator returns a promise directly
1527
+ next = await next;
1528
+ } else if (next.async) {
1529
+ // queue parallel asynchronous execution
1530
+ async.push(next.async);
1531
+ next = StopPropagation;
1532
+ }
1533
+
1534
+ // propagate evaluation, enqueue dependent operators
1535
+ if (next !== StopPropagation) {
1536
+ if (op._targets) op._targets.forEach(op => df._enqueue(op));
1537
+ }
1538
+
1539
+ // increment visit counter
1540
+ ++count;
1541
+ }
1542
+ } catch (err) {
1543
+ df._heap.clear();
1544
+ error = err;
1545
+ }
1546
+
1547
+ // reset pulse map
1548
+ df._input = {};
1549
+ df._pulse = null;
1550
+ df.debug(`Pulse ${stamp}: ${count} operators`);
1551
+ if (error) {
1552
+ df._postrun = [];
1553
+ df.error(error);
1554
+ }
1555
+
1556
+ // invoke callbacks queued via runAfter
1557
+ if (df._postrun.length) {
1558
+ const pr = df._postrun.sort((a, b) => b.priority - a.priority);
1559
+ df._postrun = [];
1560
+ for (let i = 0; i < pr.length; ++i) {
1561
+ await asyncCallback(df, pr[i].callback);
1562
+ }
1563
+ }
1564
+
1565
+ // invoke postrun function, if provided
1566
+ if (postrun) await asyncCallback(df, postrun);
1567
+
1568
+ // handle non-blocking asynchronous callbacks
1569
+ if (async.length) {
1570
+ Promise.all(async).then(cb => df.runAsync(null, () => {
1571
+ cb.forEach(f => {
1572
+ try {
1573
+ f(df);
1574
+ } catch (err) {
1575
+ df.error(err);
1576
+ }
1577
+ });
1578
+ }));
1579
+ }
1580
+ return df;
1581
+ }
1582
+
1583
+ /**
1584
+ * Queues dataflow evaluation to run once any other queued evaluations have
1585
+ * completed and returns a Promise that resolves when the queued pulse
1586
+ * propagation completes. If provided, a callback function will be invoked
1587
+ * immediately before evaluation commences. This method will ensure a
1588
+ * separate evaluation is invoked for each time it is called.
1589
+ * @param {string} [encode] - The name of an encoding set to invoke during
1590
+ * propagation. This value is added to generated Pulse instances;
1591
+ * operators can then respond to (or ignore) this setting as appropriate.
1592
+ * This parameter can be used in conjunction with the Encode transform in
1593
+ * the vega-encode package.
1594
+ * @param {function} [prerun] - An optional callback function to invoke
1595
+ * immediately before dataflow evaluation commences.
1596
+ * @param {function} [postrun] - An optional callback function to invoke
1597
+ * after dataflow evaluation completes. The callback will be invoked
1598
+ * after those registered via {@link runAfter}.
1599
+ * @return {Promise} - A promise that resolves to this dataflow after
1600
+ * evaluation completes.
1601
+ */
1602
+ async function runAsync(encode, prerun, postrun) {
1603
+ // await previously queued functions
1604
+ while (this._running) await this._running;
1605
+
1606
+ // run dataflow, manage running promise
1607
+ const clear = () => this._running = null;
1608
+ (this._running = this.evaluate(encode, prerun, postrun)).then(clear, clear);
1609
+ return this._running;
1610
+ }
1611
+
1612
+ /**
1613
+ * Requests dataflow evaluation and the immediately returns this dataflow
1614
+ * instance. If there are pending data loading or other asynchronous
1615
+ * operations, the dataflow will evaluate asynchronously after this method
1616
+ * has been invoked. To track when dataflow evaluation completes, use the
1617
+ * {@link runAsync} method instead. This method will raise an error if
1618
+ * invoked while the dataflow is already in the midst of evaluation.
1619
+ * @param {string} [encode] - The name of an encoding set to invoke during
1620
+ * propagation. This value is added to generated Pulse instances;
1621
+ * operators can then respond to (or ignore) this setting as appropriate.
1622
+ * This parameter can be used in conjunction with the Encode transform in
1623
+ * the vega-encode module.
1624
+ * @param {function} [prerun] - An optional callback function to invoke
1625
+ * immediately before dataflow evaluation commences.
1626
+ * @param {function} [postrun] - An optional callback function to invoke
1627
+ * after dataflow evaluation completes. The callback will be invoked
1628
+ * after those registered via {@link runAfter}.
1629
+ * @return {Dataflow} - This dataflow instance.
1630
+ */
1631
+ function run(encode, prerun, postrun) {
1632
+ return this._pulse ? reentrant(this) : (this.evaluate(encode, prerun, postrun), this);
1633
+ }
1634
+
1635
+ /**
1636
+ * Schedules a callback function to be invoked after the current pulse
1637
+ * propagation completes. If no propagation is currently occurring,
1638
+ * the function is invoked immediately. Callbacks scheduled via runAfter
1639
+ * are invoked immediately upon completion of the current cycle, before
1640
+ * any request queued via runAsync. This method is primarily intended for
1641
+ * internal use. Third-party callers using runAfter to schedule a callback
1642
+ * that invokes {@link run} or {@link runAsync} should not use this method,
1643
+ * but instead use {@link runAsync} with prerun or postrun arguments.
1644
+ * @param {function(Dataflow)} callback - The callback function to run.
1645
+ * The callback will be invoked with this Dataflow instance as its
1646
+ * sole argument.
1647
+ * @param {boolean} enqueue - A boolean flag indicating that the
1648
+ * callback should be queued up to run after the next propagation
1649
+ * cycle, suppressing immediate invocation when propagation is not
1650
+ * currently occurring.
1651
+ * @param {number} [priority] - A priority value used to sort registered
1652
+ * callbacks to determine execution order. This argument is intended
1653
+ * for internal Vega use only.
1654
+ */
1655
+ function runAfter(callback, enqueue, priority) {
1656
+ if (this._pulse || enqueue) {
1657
+ // pulse propagation is currently running, queue to run after
1658
+ this._postrun.push({
1659
+ priority: priority || 0,
1660
+ callback: callback
1661
+ });
1662
+ } else {
1663
+ // pulse propagation already complete, invoke immediately
1664
+ try {
1665
+ callback(this);
1666
+ } catch (err) {
1667
+ this.error(err);
1668
+ }
1669
+ }
1670
+ }
1671
+
1672
+ /**
1673
+ * Raise an error for re-entrant dataflow evaluation.
1674
+ */
1675
+ function reentrant(df) {
1676
+ df.error('Dataflow already running. Use runAsync() to chain invocations.');
1677
+ return df;
1678
+ }
1679
+
1680
+ /**
1681
+ * Enqueue an operator into the priority queue for evaluation. The operator
1682
+ * will be enqueued if it has no registered pulse for the current cycle, or if
1683
+ * the force argument is true. Upon enqueue, this method also sets the
1684
+ * operator's qrank to the current rank value.
1685
+ * @param {Operator} op - The operator to enqueue.
1686
+ * @param {boolean} [force] - A flag indicating if the operator should be
1687
+ * forceably added to the queue, even if it has already been previously
1688
+ * enqueued during the current pulse propagation. This is useful when the
1689
+ * dataflow graph is dynamically modified and the operator rank changes.
1690
+ */
1691
+ function enqueue(op, force) {
1692
+ const q = op.stamp < this._clock;
1693
+ if (q) op.stamp = this._clock;
1694
+ if (q || force) {
1695
+ op.qrank = op.rank;
1696
+ this._heap.push(op);
1697
+ }
1698
+ }
1699
+
1700
+ /**
1701
+ * Provide a correct pulse for evaluating an operator. If the operator has an
1702
+ * explicit source operator, we will try to pull the pulse(s) from it.
1703
+ * If there is an array of source operators, we build a multi-pulse.
1704
+ * Otherwise, we return a current pulse with correct source data.
1705
+ * If the pulse is the pulse map has an explicit target set, we use that.
1706
+ * Else if the pulse on the upstream source operator is current, we use that.
1707
+ * Else we use the pulse from the pulse map, but copy the source tuple array.
1708
+ * @param {Operator} op - The operator for which to get an input pulse.
1709
+ * @param {string} [encode] - An (optional) encoding set name with which to
1710
+ * annotate the returned pulse. See {@link run} for more information.
1711
+ */
1712
+ function getPulse(op, encode) {
1713
+ const s = op.source,
1714
+ stamp = this._clock;
1715
+ return s && vegaUtil.isArray(s) ? new MultiPulse(this, stamp, s.map(_ => _.pulse), encode) : this._input[op.id] || singlePulse(this._pulse, s && s.pulse);
1716
+ }
1717
+ function singlePulse(p, s) {
1718
+ if (s && s.stamp === p.stamp) {
1719
+ return s;
1720
+ }
1721
+ p = p.fork();
1722
+ if (s && s !== StopPropagation) {
1723
+ p.source = s.source;
1724
+ }
1725
+ return p;
1726
+ }
1727
+
1728
+ const NO_OPT = {
1729
+ skip: false,
1730
+ force: false
1731
+ };
1732
+
1733
+ /**
1734
+ * Touches an operator, scheduling it to be evaluated. If invoked outside of
1735
+ * a pulse propagation, the operator will be evaluated the next time this
1736
+ * dataflow is run. If invoked in the midst of pulse propagation, the operator
1737
+ * will be queued for evaluation if and only if the operator has not yet been
1738
+ * evaluated on the current propagation timestamp.
1739
+ * @param {Operator} op - The operator to touch.
1740
+ * @param {object} [options] - Additional options hash.
1741
+ * @param {boolean} [options.skip] - If true, the operator will
1742
+ * be skipped: it will not be evaluated, but its dependents will be.
1743
+ * @return {Dataflow}
1744
+ */
1745
+ function touch(op, options) {
1746
+ const opt = options || NO_OPT;
1747
+ if (this._pulse) {
1748
+ // if in midst of propagation, add to priority queue
1749
+ this._enqueue(op);
1750
+ } else {
1751
+ // otherwise, queue for next propagation
1752
+ this._touched.add(op);
1753
+ }
1754
+ if (opt.skip) op.skip(true);
1755
+ return this;
1756
+ }
1757
+
1758
+ /**
1759
+ * Updates the value of the given operator.
1760
+ * @param {Operator} op - The operator to update.
1761
+ * @param {*} value - The value to set.
1762
+ * @param {object} [options] - Additional options hash.
1763
+ * @param {boolean} [options.force] - If true, the operator will
1764
+ * be re-evaluated even if its value has not changed.
1765
+ * @param {boolean} [options.skip] - If true, the operator will
1766
+ * be skipped: it will not be evaluated, but its dependents will be.
1767
+ * @return {Dataflow}
1768
+ */
1769
+ function update(op, value, options) {
1770
+ const opt = options || NO_OPT;
1771
+ if (op.set(value) || opt.force) {
1772
+ this.touch(op, opt);
1773
+ }
1774
+ return this;
1775
+ }
1776
+
1777
+ /**
1778
+ * Pulses an operator with a changeset of tuples. If invoked outside of
1779
+ * a pulse propagation, the pulse will be applied the next time this
1780
+ * dataflow is run. If invoked in the midst of pulse propagation, the pulse
1781
+ * will be added to the set of active pulses and will be applied if and
1782
+ * only if the target operator has not yet been evaluated on the current
1783
+ * propagation timestamp.
1784
+ * @param {Operator} op - The operator to pulse.
1785
+ * @param {ChangeSet} value - The tuple changeset to apply.
1786
+ * @param {object} [options] - Additional options hash.
1787
+ * @param {boolean} [options.skip] - If true, the operator will
1788
+ * be skipped: it will not be evaluated, but its dependents will be.
1789
+ * @return {Dataflow}
1790
+ */
1791
+ function pulse(op, changeset, options) {
1792
+ this.touch(op, options || NO_OPT);
1793
+ const p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),
1794
+ t = op.pulse && op.pulse.source || [];
1795
+ p.target = op;
1796
+ this._input[op.id] = changeset.pulse(p, t);
1797
+ return this;
1798
+ }
1799
+
1800
+ function Heap(cmp) {
1801
+ let nodes = [];
1802
+ return {
1803
+ clear: () => nodes = [],
1804
+ size: () => nodes.length,
1805
+ peek: () => nodes[0],
1806
+ push: x => {
1807
+ nodes.push(x);
1808
+ return siftdown(nodes, 0, nodes.length - 1, cmp);
1809
+ },
1810
+ pop: () => {
1811
+ const last = nodes.pop();
1812
+ let item;
1813
+ if (nodes.length) {
1814
+ item = nodes[0];
1815
+ nodes[0] = last;
1816
+ siftup(nodes, 0, cmp);
1817
+ } else {
1818
+ item = last;
1819
+ }
1820
+ return item;
1821
+ }
1822
+ };
1823
+ }
1824
+ function siftdown(array, start, idx, cmp) {
1825
+ let parent, pidx;
1826
+ const item = array[idx];
1827
+ while (idx > start) {
1828
+ pidx = idx - 1 >> 1;
1829
+ parent = array[pidx];
1830
+ if (cmp(item, parent) < 0) {
1831
+ array[idx] = parent;
1832
+ idx = pidx;
1833
+ continue;
1834
+ }
1835
+ break;
1836
+ }
1837
+ return array[idx] = item;
1838
+ }
1839
+ function siftup(array, idx, cmp) {
1840
+ const start = idx,
1841
+ end = array.length,
1842
+ item = array[idx];
1843
+ let cidx = (idx << 1) + 1,
1844
+ ridx;
1845
+ while (cidx < end) {
1846
+ ridx = cidx + 1;
1847
+ if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {
1848
+ cidx = ridx;
1849
+ }
1850
+ array[idx] = array[cidx];
1851
+ idx = cidx;
1852
+ cidx = (idx << 1) + 1;
1853
+ }
1854
+ array[idx] = item;
1855
+ return siftdown(array, start, idx, cmp);
1856
+ }
1857
+
1858
+ /**
1859
+ * A dataflow graph for reactive processing of data streams.
1860
+ * @constructor
1861
+ */
1862
+ function Dataflow() {
1863
+ this.logger(vegaUtil.logger());
1864
+ this.logLevel(vegaUtil.Error);
1865
+ this._clock = 0;
1866
+ this._rank = 0;
1867
+ this._locale = vegaFormat.defaultLocale();
1868
+ try {
1869
+ this._loader = vegaLoader_browser.loader();
1870
+ } catch (e) {
1871
+ // do nothing if loader module is unavailable
1872
+ }
1873
+ this._touched = UniqueList(vegaUtil.id);
1874
+ this._input = {};
1875
+ this._pulse = null;
1876
+ this._heap = Heap((a, b) => a.qrank - b.qrank);
1877
+ this._postrun = [];
1878
+ }
1879
+ function logMethod(method) {
1880
+ return function () {
1881
+ return this._log[method].apply(this, arguments);
1882
+ };
1883
+ }
1884
+ Dataflow.prototype = {
1885
+ /**
1886
+ * The current timestamp of this dataflow. This value reflects the
1887
+ * timestamp of the previous dataflow run. The dataflow is initialized
1888
+ * with a stamp value of 0. The initial run of the dataflow will have
1889
+ * a timestap of 1, and so on. This value will match the
1890
+ * {@link Pulse.stamp} property.
1891
+ * @return {number} - The current timestamp value.
1892
+ */
1893
+ stamp() {
1894
+ return this._clock;
1895
+ },
1896
+ /**
1897
+ * Gets or sets the loader instance to use for data file loading. A
1898
+ * loader object must provide a "load" method for loading files and a
1899
+ * "sanitize" method for checking URL/filename validity. Both methods
1900
+ * should accept a URI and options hash as arguments, and return a Promise
1901
+ * that resolves to the loaded file contents (load) or a hash containing
1902
+ * sanitized URI data with the sanitized url assigned to the "href" property
1903
+ * (sanitize).
1904
+ * @param {object} _ - The loader instance to use.
1905
+ * @return {object|Dataflow} - If no arguments are provided, returns
1906
+ * the current loader instance. Otherwise returns this Dataflow instance.
1907
+ */
1908
+ loader(_) {
1909
+ if (arguments.length) {
1910
+ this._loader = _;
1911
+ return this;
1912
+ } else {
1913
+ return this._loader;
1914
+ }
1915
+ },
1916
+ /**
1917
+ * Gets or sets the locale instance to use for formatting and parsing
1918
+ * string values. The locale object should be provided by the
1919
+ * vega-format library, and include methods such as format, timeFormat,
1920
+ * utcFormat, timeParse, and utcParse.
1921
+ * @param {object} _ - The locale instance to use.
1922
+ * @return {object|Dataflow} - If no arguments are provided, returns
1923
+ * the current locale instance. Otherwise returns this Dataflow instance.
1924
+ */
1925
+ locale(_) {
1926
+ if (arguments.length) {
1927
+ this._locale = _;
1928
+ return this;
1929
+ } else {
1930
+ return this._locale;
1931
+ }
1932
+ },
1933
+ /**
1934
+ * Get or set the logger instance used to log messages. If no arguments are
1935
+ * provided, returns the current logger instance. Otherwise, sets the logger
1936
+ * and return this Dataflow instance. Provided loggers must support the full
1937
+ * API of logger objects generated by the vega-util logger method. Note that
1938
+ * by default the log level of the new logger will be used; use the logLevel
1939
+ * method to adjust the log level as needed.
1940
+ */
1941
+ logger(logger) {
1942
+ if (arguments.length) {
1943
+ this._log = logger;
1944
+ return this;
1945
+ } else {
1946
+ return this._log;
1947
+ }
1948
+ },
1949
+ /**
1950
+ * Logs an error message. By default, logged messages are written to console
1951
+ * output. The message will only be logged if the current log level is high
1952
+ * enough to permit error messages.
1953
+ */
1954
+ error: logMethod('error'),
1955
+ /**
1956
+ * Logs a warning message. By default, logged messages are written to console
1957
+ * output. The message will only be logged if the current log level is high
1958
+ * enough to permit warning messages.
1959
+ */
1960
+ warn: logMethod('warn'),
1961
+ /**
1962
+ * Logs a information message. By default, logged messages are written to
1963
+ * console output. The message will only be logged if the current log level is
1964
+ * high enough to permit information messages.
1965
+ */
1966
+ info: logMethod('info'),
1967
+ /**
1968
+ * Logs a debug message. By default, logged messages are written to console
1969
+ * output. The message will only be logged if the current log level is high
1970
+ * enough to permit debug messages.
1971
+ */
1972
+ debug: logMethod('debug'),
1973
+ /**
1974
+ * Get or set the current log level. If an argument is provided, it
1975
+ * will be used as the new log level.
1976
+ * @param {number} [level] - Should be one of None, Warn, Info
1977
+ * @return {number} - The current log level.
1978
+ */
1979
+ logLevel: logMethod('level'),
1980
+ /**
1981
+ * Empty entry threshold for garbage cleaning. Map data structures will
1982
+ * perform cleaning once the number of empty entries exceeds this value.
1983
+ */
1984
+ cleanThreshold: 1e4,
1985
+ // OPERATOR REGISTRATION
1986
+ add,
1987
+ connect,
1988
+ rank,
1989
+ rerank,
1990
+ // OPERATOR UPDATES
1991
+ pulse,
1992
+ touch,
1993
+ update,
1994
+ changeset,
1995
+ // DATA LOADING
1996
+ ingest,
1997
+ parse,
1998
+ preload,
1999
+ request,
2000
+ // EVENT HANDLING
2001
+ events,
2002
+ on,
2003
+ // PULSE PROPAGATION
2004
+ evaluate,
2005
+ run,
2006
+ runAsync,
2007
+ runAfter,
2008
+ _enqueue: enqueue,
2009
+ _getPulse: getPulse
2010
+ };
2011
+
2012
+ /**
2013
+ * Abstract class for operators that process data tuples.
2014
+ * Subclasses must provide a {@link transform} method for operator processing.
2015
+ * @constructor
2016
+ * @param {*} [init] - The initial value for this operator.
2017
+ * @param {object} [params] - The parameters for this operator.
2018
+ * @param {Operator} [source] - The operator from which to receive pulses.
2019
+ */
2020
+ function Transform(init, params) {
2021
+ Operator.call(this, init, null, params);
2022
+ }
2023
+ vegaUtil.inherits(Transform, Operator, {
2024
+ /**
2025
+ * Overrides {@link Operator.evaluate} for transform operators.
2026
+ * Internally, this method calls {@link evaluate} to perform processing.
2027
+ * If {@link evaluate} returns a falsy value, the input pulse is returned.
2028
+ * This method should NOT be overridden, instead overrride {@link evaluate}.
2029
+ * @param {Pulse} pulse - the current dataflow pulse.
2030
+ * @return the output pulse for this operator (or StopPropagation)
2031
+ */
2032
+ run(pulse) {
2033
+ if (pulse.stamp < this.stamp) return pulse.StopPropagation;
2034
+ let rv;
2035
+ if (this.skip()) {
2036
+ this.skip(false);
2037
+ } else {
2038
+ rv = this.evaluate(pulse);
2039
+ }
2040
+ rv = rv || pulse;
2041
+ if (rv.then) {
2042
+ rv = rv.then(_ => this.pulse = _);
2043
+ } else if (rv !== pulse.StopPropagation) {
2044
+ this.pulse = rv;
2045
+ }
2046
+ return rv;
2047
+ },
2048
+ /**
2049
+ * Overrides {@link Operator.evaluate} for transform operators.
2050
+ * Marshalls parameter values and then invokes {@link transform}.
2051
+ * @param {Pulse} pulse - the current dataflow pulse.
2052
+ * @return {Pulse} The output pulse (or StopPropagation). A falsy return
2053
+ value (including undefined) will let the input pulse pass through.
2054
+ */
2055
+ evaluate(pulse) {
2056
+ const params = this.marshall(pulse.stamp),
2057
+ out = this.transform(params, pulse);
2058
+ params.clear();
2059
+ return out;
2060
+ },
2061
+ /**
2062
+ * Process incoming pulses.
2063
+ * Subclasses should override this method to implement transforms.
2064
+ * @param {Parameters} _ - The operator parameter values.
2065
+ * @param {Pulse} pulse - The current dataflow pulse.
2066
+ * @return {Pulse} The output pulse (or StopPropagation). A falsy return
2067
+ * value (including undefined) will let the input pulse pass through.
2068
+ */
2069
+ transform() {}
2070
+ });
2071
+
2072
+ const transforms = {};
2073
+ function definition(type) {
2074
+ const t = transform(type);
2075
+ return t && t.Definition || null;
2076
+ }
2077
+ function transform(type) {
2078
+ type = type && type.toLowerCase();
2079
+ return vegaUtil.hasOwnProperty(transforms, type) ? transforms[type] : null;
2080
+ }
2081
+
2082
+ exports.Dataflow = Dataflow;
2083
+ exports.EventStream = EventStream;
2084
+ exports.MultiPulse = MultiPulse;
2085
+ exports.Operator = Operator;
2086
+ exports.Parameters = Parameters;
2087
+ exports.Pulse = Pulse;
2088
+ exports.Transform = Transform;
2089
+ exports.UniqueList = UniqueList;
2090
+ exports.asyncCallback = asyncCallback;
2091
+ exports.changeset = changeset;
2092
+ exports.definition = definition;
2093
+ exports.derive = derive;
2094
+ exports.ingest = ingest$1;
2095
+ exports.isChangeSet = isChangeSet;
2096
+ exports.isTuple = isTuple;
2097
+ exports.rederive = rederive;
2098
+ exports.replace = replace;
2099
+ exports.stableCompare = stableCompare;
2100
+ exports.transform = transform;
2101
+ exports.transforms = transforms;
2102
+ exports.tupleid = tupleid;