venn.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.Venn = void 0;
  4. const venn_1 = require("./utils/venn");
  5. /**
  6. * Layout venn data, get the path string for each set.
  7. */
  8. const Venn = (options) => {
  9. const { sets = 'sets', size = 'size', as = ['key', 'path'], padding = 0, } = options;
  10. const [key, path] = as;
  11. return (data) => {
  12. // Transform the data, venn layout use `sets` and `size` field.
  13. const vennData = data.map((d) => (Object.assign(Object.assign({}, d), { sets: d[sets], size: d[size], [key]: d.sets.join('&') })));
  14. // Sort data, avoid data occlusion.
  15. vennData.sort((a, b) => a.sets.length - b.sets.length);
  16. // Layout venn data.
  17. const solution = (0, venn_1.venn)(vennData);
  18. let circles;
  19. return vennData.map((datum) => {
  20. const setsValue = datum[sets];
  21. const pathFunc = ({ width, height }) => {
  22. circles = circles
  23. ? circles
  24. : (0, venn_1.scaleSolution)(solution, width, height, padding);
  25. const setCircles = setsValue.map((set) => circles[set]);
  26. let p = (0, venn_1.intersectionAreaPath)(setCircles);
  27. // Close the path for event picker.
  28. if (!/[zZ]$/.test(p))
  29. p += ' Z';
  30. return p;
  31. };
  32. return Object.assign(Object.assign({}, datum), { [path]: pathFunc });
  33. });
  34. };
  35. };
  36. exports.Venn = Venn;
  37. exports.Venn.props = {};
  38. //# sourceMappingURL=venn.js.map