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