@unovis/ts 1.4.0-version.12 → 1.4.1-beta.0

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 (91) hide show
  1. package/components/annotations/config.d.ts +19 -0
  2. package/components/annotations/config.js +6 -0
  3. package/components/annotations/config.js.map +1 -0
  4. package/components/annotations/index.d.ts +26 -0
  5. package/components/annotations/index.js +110 -0
  6. package/components/annotations/index.js.map +1 -0
  7. package/components/annotations/style.d.ts +16 -0
  8. package/components/annotations/style.js +47 -0
  9. package/components/annotations/style.js.map +1 -0
  10. package/components/annotations/types.d.ts +32 -0
  11. package/components/annotations/types.js +2 -0
  12. package/components/annotations/types.js.map +1 -0
  13. package/components/area/config.d.ts +1 -1
  14. package/components/area/config.js.map +1 -1
  15. package/components/area/index.js +2 -0
  16. package/components/area/index.js.map +1 -1
  17. package/components/bullet-legend/config.d.ts +4 -2
  18. package/components/bullet-legend/config.js +1 -2
  19. package/components/bullet-legend/config.js.map +1 -1
  20. package/components/bullet-legend/index.js +16 -15
  21. package/components/bullet-legend/index.js.map +1 -1
  22. package/components/bullet-legend/modules/shape.d.ts +2 -2
  23. package/components/bullet-legend/modules/shape.js +67 -46
  24. package/components/bullet-legend/modules/shape.js.map +1 -1
  25. package/components/bullet-legend/style.js +3 -3
  26. package/components/bullet-legend/style.js.map +1 -1
  27. package/components/bullet-legend/types.d.ts +14 -5
  28. package/components/bullet-legend/types.js +4 -6
  29. package/components/bullet-legend/types.js.map +1 -1
  30. package/components/chord-diagram/index.d.ts +3 -3
  31. package/components/chord-diagram/index.js +24 -15
  32. package/components/chord-diagram/index.js.map +1 -1
  33. package/components/chord-diagram/modules/label.js +16 -18
  34. package/components/chord-diagram/modules/label.js.map +1 -1
  35. package/components/chord-diagram/modules/layout.js +9 -5
  36. package/components/chord-diagram/modules/layout.js.map +1 -1
  37. package/components/chord-diagram/modules/link.js +1 -1
  38. package/components/chord-diagram/modules/link.js.map +1 -1
  39. package/components/chord-diagram/style.js +1 -1
  40. package/components/chord-diagram/style.js.map +1 -1
  41. package/components/crosshair/config.d.ts +4 -0
  42. package/components/crosshair/config.js +1 -1
  43. package/components/crosshair/config.js.map +1 -1
  44. package/components/crosshair/index.js +12 -4
  45. package/components/crosshair/index.js.map +1 -1
  46. package/components/crosshair/style.js +4 -2
  47. package/components/crosshair/style.js.map +1 -1
  48. package/components/crosshair/types.d.ts +2 -0
  49. package/components/nested-donut/config.d.ts +14 -2
  50. package/components/nested-donut/config.js +1 -1
  51. package/components/nested-donut/config.js.map +1 -1
  52. package/components/nested-donut/index.js +16 -10
  53. package/components/nested-donut/index.js.map +1 -1
  54. package/components/sankey/modules/node.js +1 -1
  55. package/components/sankey/modules/node.js.map +1 -1
  56. package/components/stacked-bar/index.js.map +1 -1
  57. package/components/vis-controls/index.d.ts +0 -3
  58. package/components/vis-controls/index.js +1 -6
  59. package/components/vis-controls/index.js.map +1 -1
  60. package/components/xy-labels/index.js +1 -1
  61. package/components/xy-labels/index.js.map +1 -1
  62. package/components.d.ts +2 -0
  63. package/components.js +1 -0
  64. package/components.js.map +1 -1
  65. package/containers/single-container/config.d.ts +3 -0
  66. package/containers/single-container/config.js +1 -1
  67. package/containers/single-container/config.js.map +1 -1
  68. package/containers/single-container/index.d.ts +1 -1
  69. package/containers/single-container/index.js +11 -1
  70. package/containers/single-container/index.js.map +1 -1
  71. package/containers/xy-container/config.d.ts +3 -0
  72. package/containers/xy-container/config.js +1 -1
  73. package/containers/xy-container/config.js.map +1 -1
  74. package/containers/xy-container/index.d.ts +2 -2
  75. package/containers/xy-container/index.js +19 -6
  76. package/containers/xy-container/index.js.map +1 -1
  77. package/index.js +1 -0
  78. package/index.js.map +1 -1
  79. package/package.json +1 -1
  80. package/types/misc.d.ts +1 -0
  81. package/types/scale.d.ts +3 -2
  82. package/types/scale.js +2 -1
  83. package/types/scale.js.map +1 -1
  84. package/types.d.ts +1 -0
  85. package/types.js +1 -0
  86. package/types.js.map +1 -1
  87. package/utils/data.js +1 -1
  88. package/utils/data.js.map +1 -1
  89. package/utils/misc.d.ts +2 -1
  90. package/utils/misc.js +13 -1
  91. package/utils/misc.js.map +1 -1
@@ -61,7 +61,7 @@ function updateNodes(sel, config, width, bleed, hasLinks, duration) {
61
61
  nodeIcon$1
62
62
  .attr('visibility', null)
63
63
  .attr('text-anchor', 'middle')
64
- .attr('alignment-baseline', 'middle')
64
+ .style('dominant-baseline', 'central')
65
65
  .style('stroke', (d) => getColor(d, config.nodeIconColor))
66
66
  .style('fill', (d) => getColor(d, config.nodeIconColor))
67
67
  .style('font-size', (d) => {
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sources":["../../../../src/components/sankey/modules/node.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { getColor } from 'utils/color'\nimport { getString } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Spacing } from 'types/spacing'\n\n// Local Types\nimport { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyInputLink, SankeyInputNode, SankeyNode, SankeyNodeAlign } from '../types'\n\n// Config\nimport { SankeyConfigInterface } from '../config'\n\n// Helpers\nimport { renderLabel } from './label'\n\n// Styles\nimport * as s from '../style'\n\nexport function createNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing\n): void {\n const { enterTransitionType } = config\n\n // Node\n sel.append('rect')\n .attr('class', s.node)\n .attr('width', config.nodeWidth)\n .attr('height', d => d.y1 - d.y0)\n .style('fill', node => getColor(node, config.nodeColor))\n\n // Labels\n const labelGroup = sel.append('g').attr('class', s.labelGroup)\n labelGroup.append('path').attr('class', s.labelBackground)\n labelGroup.append('text').attr('class', s.label)\n labelGroup.append('text').attr('class', s.sublabel)\n\n // Node icon\n sel.append('text').attr('class', s.nodeIcon)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.5px')\n\n sel\n .attr('transform', d => {\n const x = (enterTransitionType === SankeyEnterTransitionType.FromAncestor && d.targetLinks?.[0]) ? d.targetLinks[0].source.x0 : d.x0\n return `translate(${sel.size() === 1 ? width * 0.5 - bleed.left : x}, ${d.y0})`\n })\n .style('opacity', 0)\n}\n\nfunction getNodeXPos<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing,\n hasLinks: boolean\n): number {\n if (hasLinks) return d.x0\n\n switch (config.nodeAlign) {\n case SankeyNodeAlign.Left: return d.x0\n case SankeyNodeAlign.Right: return width - bleed.right\n case SankeyNodeAlign.Center:\n case SankeyNodeAlign.Justify:\n default: return width * 0.5 - bleed.left\n }\n}\n\nexport function updateNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing,\n hasLinks: boolean,\n duration: number\n): void {\n smartTransition(sel, duration)\n .attr('transform', d => `translate(${getNodeXPos(d, config, width, bleed, hasLinks)},${d.y0})`)\n .style('opacity', d => d._state.greyout ? 0.2 : 1)\n\n // Node\n smartTransition(sel.select(`.${s.node}`), duration)\n .attr('width', config.nodeWidth)\n .attr('height', (d: SankeyNode<N, L>) => d.y1 - d.y0)\n .style('cursor', (d: SankeyNode<N, L>) => getString(d, config.nodeCursor))\n .style('fill', (d: SankeyNode<N, L>) => getColor(d, config.nodeColor))\n\n // Label Rendering\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n renderNodeLabels(sel, config, width, duration)\n\n // Node Icon\n const nodeIcon = sel.select(`.${s.nodeIcon}`)\n if (config.nodeIcon) {\n nodeIcon\n .attr('visibility', null)\n .attr('text-anchor', 'middle')\n .attr('alignment-baseline', 'middle')\n .style('stroke', (d: SankeyNode<N, L>) => getColor(d, config.nodeIconColor))\n .style('fill', (d: SankeyNode<N, L>) => getColor(d, config.nodeIconColor))\n .style('font-size', (d: SankeyNode<N, L>) => {\n const nodeHeight = d.y1 - d.y0\n return nodeHeight < s.SANKEY_ICON_SIZE ? `${nodeHeight * 0.65}px` : null\n })\n .html((d: SankeyNode<N, L>) => getString(d, config.nodeIcon))\n\n smartTransition(nodeIcon, duration)\n .attr('x', config.nodeWidth / 2)\n .attr('y', (d: SankeyNode<N, L>) => (d.y1 - d.y0) / 2)\n } else {\n nodeIcon\n .attr('visibility', 'hidden')\n }\n}\n\nexport function renderNodeLabels<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n duration: number,\n enforceNodeVisibility?: SankeyNode<N, L>\n): void {\n // Label Rendering\n const labelGroupSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, any> = sel.select(`.${s.labelGroup}`)\n const labelGroupEls = labelGroupSelection.nodes() || []\n\n // After rendering Label return a BBox so we can do intersection detection and hide some of tem\n const labelGroupBBoxes = labelGroupEls.map(g => {\n const gSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, any> = select(g)\n const datum = gSelection.datum()\n return renderLabel(gSelection, datum, config, width, duration, enforceNodeVisibility === datum)\n })\n\n if (config.labelVisibility) {\n for (const b of labelGroupBBoxes) {\n const datum = b.selection.datum() as SankeyNode<N, L>\n const box = { x: b.x, y: b.y, width: b.width, height: b.height }\n b.hidden = !config.labelVisibility(datum, box, enforceNodeVisibility === datum)\n }\n } else {\n // Detect intersecting labels\n const maxLayer = Math.max(...labelGroupBBoxes.map(b => b.layer))\n for (let layer = 0; layer <= maxLayer; layer += 1) {\n const boxes = labelGroupBBoxes.filter(b => (b.layer === layer))\n boxes.sort((a, b) => a.y - b.y)\n\n let lastVisibleIdx = 0\n for (let i = 1; i < boxes.length; i += 1) {\n const b0 = boxes[lastVisibleIdx]\n const b1 = boxes[i]\n\n const shouldBeHidden = b1.y < (b0.y + b0.height)\n if (shouldBeHidden) {\n if (b1.selection.datum() === enforceNodeVisibility) b0.hidden = true // If the hovered node should be hidden, hide the previous one instead\n else b1.hidden = true\n }\n\n if (!b1.hidden) lastVisibleIdx = i\n }\n }\n }\n\n // Hide intersecting labels\n for (const b of labelGroupBBoxes) {\n b.selection.classed(s.hidden, b.hidden)\n }\n}\n\nexport function removeNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n selection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n duration: number\n): void {\n const { exitTransitionType } = config\n\n selection.each((d, i, els) => {\n const node = select(els[i])\n const transition = smartTransition(node, duration)\n if ((exitTransitionType === SankeyExitTransitionType.ToAncestor) && d.targetLinks?.[0]) {\n transition.attr('transform', `translate(${d.targetLinks[0].source.x0},${d.y0})`)\n }\n\n transition\n .style('opacity', 0)\n .remove()\n })\n}\n\nexport function onNodeMouseOver<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number\n): void {\n const labelGroup = nodeSelection.raise()\n .select<SVGGElement>(`.${s.labelGroup}`)\n\n if ((config.labelExpandTrimmedOnHover && labelGroup.classed(s.labelTrimmed)) || labelGroup.classed(s.hidden)) {\n renderLabel(labelGroup, d, config, width, 0, true)\n }\n labelGroup.classed(s.forceShow, true)\n}\n\nexport function onNodeMouseOut<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number\n): void {\n const labelGroup = nodeSelection.select<SVGGElement>(`.${s.labelGroup}`)\n if (config.labelExpandTrimmedOnHover || labelGroup.classed(s.hidden)) {\n renderLabel(labelGroup, d, config, width, 0)\n }\n labelGroup.classed(s.forceShow, false)\n}\n"],"names":["s.node","labelGroup","s.labelGroup","s.labelBackground","s.label","s.sublabel","s.nodeIcon","nodeIcon","s.SANKEY_ICON_SIZE","s.hidden","s.labelTrimmed","s.forceShow"],"mappings":"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"}
1
+ {"version":3,"file":"node.js","sources":["../../../../src/components/sankey/modules/node.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { getColor } from 'utils/color'\nimport { getString } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Spacing } from 'types/spacing'\n\n// Local Types\nimport { SankeyEnterTransitionType, SankeyExitTransitionType, SankeyInputLink, SankeyInputNode, SankeyNode, SankeyNodeAlign } from '../types'\n\n// Config\nimport { SankeyConfigInterface } from '../config'\n\n// Helpers\nimport { renderLabel } from './label'\n\n// Styles\nimport * as s from '../style'\n\nexport function createNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing\n): void {\n const { enterTransitionType } = config\n\n // Node\n sel.append('rect')\n .attr('class', s.node)\n .attr('width', config.nodeWidth)\n .attr('height', d => d.y1 - d.y0)\n .style('fill', node => getColor(node, config.nodeColor))\n\n // Labels\n const labelGroup = sel.append('g').attr('class', s.labelGroup)\n labelGroup.append('path').attr('class', s.labelBackground)\n labelGroup.append('text').attr('class', s.label)\n labelGroup.append('text').attr('class', s.sublabel)\n\n // Node icon\n sel.append('text').attr('class', s.nodeIcon)\n .attr('text-anchor', 'middle')\n .attr('dy', '0.5px')\n\n sel\n .attr('transform', d => {\n const x = (enterTransitionType === SankeyEnterTransitionType.FromAncestor && d.targetLinks?.[0]) ? d.targetLinks[0].source.x0 : d.x0\n return `translate(${sel.size() === 1 ? width * 0.5 - bleed.left : x}, ${d.y0})`\n })\n .style('opacity', 0)\n}\n\nfunction getNodeXPos<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing,\n hasLinks: boolean\n): number {\n if (hasLinks) return d.x0\n\n switch (config.nodeAlign) {\n case SankeyNodeAlign.Left: return d.x0\n case SankeyNodeAlign.Right: return width - bleed.right\n case SankeyNodeAlign.Center:\n case SankeyNodeAlign.Justify:\n default: return width * 0.5 - bleed.left\n }\n}\n\nexport function updateNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n bleed: Spacing,\n hasLinks: boolean,\n duration: number\n): void {\n smartTransition(sel, duration)\n .attr('transform', d => `translate(${getNodeXPos(d, config, width, bleed, hasLinks)},${d.y0})`)\n .style('opacity', d => d._state.greyout ? 0.2 : 1)\n\n // Node\n smartTransition(sel.select(`.${s.node}`), duration)\n .attr('width', config.nodeWidth)\n .attr('height', (d: SankeyNode<N, L>) => d.y1 - d.y0)\n .style('cursor', (d: SankeyNode<N, L>) => getString(d, config.nodeCursor))\n .style('fill', (d: SankeyNode<N, L>) => getColor(d, config.nodeColor))\n\n // Label Rendering\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n renderNodeLabels(sel, config, width, duration)\n\n // Node Icon\n const nodeIcon = sel.select(`.${s.nodeIcon}`)\n if (config.nodeIcon) {\n nodeIcon\n .attr('visibility', null)\n .attr('text-anchor', 'middle')\n .style('dominant-baseline', 'central')\n .style('stroke', (d: SankeyNode<N, L>) => getColor(d, config.nodeIconColor))\n .style('fill', (d: SankeyNode<N, L>) => getColor(d, config.nodeIconColor))\n .style('font-size', (d: SankeyNode<N, L>) => {\n const nodeHeight = d.y1 - d.y0\n return nodeHeight < s.SANKEY_ICON_SIZE ? `${nodeHeight * 0.65}px` : null\n })\n .html((d: SankeyNode<N, L>) => getString(d, config.nodeIcon))\n\n smartTransition(nodeIcon, duration)\n .attr('x', config.nodeWidth / 2)\n .attr('y', (d: SankeyNode<N, L>) => (d.y1 - d.y0) / 2)\n } else {\n nodeIcon\n .attr('visibility', 'hidden')\n }\n}\n\nexport function renderNodeLabels<N extends SankeyInputNode, L extends SankeyInputLink> (\n sel: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number,\n duration: number,\n enforceNodeVisibility?: SankeyNode<N, L>\n): void {\n // Label Rendering\n const labelGroupSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, any> = sel.select(`.${s.labelGroup}`)\n const labelGroupEls = labelGroupSelection.nodes() || []\n\n // After rendering Label return a BBox so we can do intersection detection and hide some of tem\n const labelGroupBBoxes = labelGroupEls.map(g => {\n const gSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, any> = select(g)\n const datum = gSelection.datum()\n return renderLabel(gSelection, datum, config, width, duration, enforceNodeVisibility === datum)\n })\n\n if (config.labelVisibility) {\n for (const b of labelGroupBBoxes) {\n const datum = b.selection.datum() as SankeyNode<N, L>\n const box = { x: b.x, y: b.y, width: b.width, height: b.height }\n b.hidden = !config.labelVisibility(datum, box, enforceNodeVisibility === datum)\n }\n } else {\n // Detect intersecting labels\n const maxLayer = Math.max(...labelGroupBBoxes.map(b => b.layer))\n for (let layer = 0; layer <= maxLayer; layer += 1) {\n const boxes = labelGroupBBoxes.filter(b => (b.layer === layer))\n boxes.sort((a, b) => a.y - b.y)\n\n let lastVisibleIdx = 0\n for (let i = 1; i < boxes.length; i += 1) {\n const b0 = boxes[lastVisibleIdx]\n const b1 = boxes[i]\n\n const shouldBeHidden = b1.y < (b0.y + b0.height)\n if (shouldBeHidden) {\n if (b1.selection.datum() === enforceNodeVisibility) b0.hidden = true // If the hovered node should be hidden, hide the previous one instead\n else b1.hidden = true\n }\n\n if (!b1.hidden) lastVisibleIdx = i\n }\n }\n }\n\n // Hide intersecting labels\n for (const b of labelGroupBBoxes) {\n b.selection.classed(s.hidden, b.hidden)\n }\n}\n\nexport function removeNodes<N extends SankeyInputNode, L extends SankeyInputLink> (\n selection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n duration: number\n): void {\n const { exitTransitionType } = config\n\n selection.each((d, i, els) => {\n const node = select(els[i])\n const transition = smartTransition(node, duration)\n if ((exitTransitionType === SankeyExitTransitionType.ToAncestor) && d.targetLinks?.[0]) {\n transition.attr('transform', `translate(${d.targetLinks[0].source.x0},${d.y0})`)\n }\n\n transition\n .style('opacity', 0)\n .remove()\n })\n}\n\nexport function onNodeMouseOver<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number\n): void {\n const labelGroup = nodeSelection.raise()\n .select<SVGGElement>(`.${s.labelGroup}`)\n\n if ((config.labelExpandTrimmedOnHover && labelGroup.classed(s.labelTrimmed)) || labelGroup.classed(s.hidden)) {\n renderLabel(labelGroup, d, config, width, 0, true)\n }\n labelGroup.classed(s.forceShow, true)\n}\n\nexport function onNodeMouseOut<N extends SankeyInputNode, L extends SankeyInputLink> (\n d: SankeyNode<N, L>,\n nodeSelection: Selection<SVGGElement, SankeyNode<N, L>, SVGGElement, unknown>,\n config: SankeyConfigInterface<N, L>,\n width: number\n): void {\n const labelGroup = nodeSelection.select<SVGGElement>(`.${s.labelGroup}`)\n if (config.labelExpandTrimmedOnHover || labelGroup.classed(s.hidden)) {\n renderLabel(labelGroup, d, config, width, 0)\n }\n labelGroup.classed(s.forceShow, false)\n}\n"],"names":["s.node","labelGroup","s.labelGroup","s.labelBackground","s.label","s.sublabel","s.nodeIcon","nodeIcon","s.SANKEY_ICON_SIZE","s.hidden","s.labelTrimmed","s.forceShow"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/stacked-bar/index.ts"],"sourcesContent":["import { min, max } from 'd3-array'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { isNumber, isArray, isEmpty, clamp, getStackedExtent, getString, getNumber, getStackedData, getExtent } from 'utils/data'\nimport { roundedRectPath } from 'utils/path'\nimport { smartTransition } from 'utils/d3'\nimport { getColor } from 'utils/color'\n\n// Types\nimport { ContinuousScale } from 'types/scale'\nimport { NumericAccessor } from 'types/accessor'\nimport { Spacing } from 'types/spacing'\nimport { Orientation } from 'types/position'\n\n// Local Types\nimport { StackedBarDataRecord } from './types'\n\n// Config\nimport { StackedBarDefaultConfig, StackedBarConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class StackedBar<Datum> extends XYComponentCore<Datum, StackedBarConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig = StackedBarDefaultConfig as StackedBarConfigInterface<Datum>\n public config: StackedBarConfigInterface<Datum> = this._defaultConfig\n\n getAccessors = (): NumericAccessor<Datum>[] => (isArray(this.config.y) ? this.config.y : [this.config.y])\n stacked = true\n events = {}\n private _prevNegative: boolean[] | undefined // To help guessing the bar direction when an accessor was set to null or 0\n private _barData: Datum[] = []\n\n constructor (config?: StackedBarConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n }\n\n get bleed (): Spacing {\n this._barData = this._getVisibleData()\n if (this._barData.length === 0) return { top: 0, bottom: 0, left: 0, right: 0 }\n\n // By default, horizontal orientation is \"flipped\", i.e. the `yDirection` of `XYContainer` is set to `Direction.North`\n const isHorizontalAndFlipped = !this.isVertical() && (this.dataScale.range()[0] > this.dataScale.range()[1])\n const dataDomain = this.dataScale.domain()\n const halfGroupWidth = this._getBarWidth() / 2\n\n const dataScaleValues = this._barData.map((d, i) => getNumber(d, this.config.x, i))\n const firstDataValue = min(dataScaleValues)\n const lastDataValue = max(dataScaleValues)\n const firstValuePx = this.dataScale(firstDataValue)\n const lastValuePx = this.dataScale(lastDataValue)\n\n const dataDomainRequiredStart = this.dataScale.invert(firstValuePx + (isHorizontalAndFlipped ? halfGroupWidth : -halfGroupWidth))\n const dataDomainRequiredEnd = this.dataScale.invert(lastValuePx + (isHorizontalAndFlipped ? -halfGroupWidth : halfGroupWidth))\n const bleedPxStart = dataDomainRequiredStart <= dataDomain[0] ? this.dataScale(dataDomain[0]) - this.dataScale(dataDomainRequiredStart) : 0\n const bleedPxEnd = dataDomainRequiredEnd > dataDomain[1] ? this.dataScale(dataDomainRequiredEnd) - this.dataScale(dataDomain[1]) : 0\n\n return {\n top: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxEnd : bleedPxStart),\n bottom: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxStart : bleedPxEnd),\n left: this.isVertical() ? bleedPxStart : 0,\n right: this.isVertical() ? bleedPxEnd : 0,\n }\n }\n\n private get dataScale (): ContinuousScale {\n return this.isVertical() ? this.xScale : this.yScale\n }\n\n private get valueScale (): ContinuousScale {\n return this.isVertical() ? this.yScale : this.xScale\n }\n\n private isVertical (): boolean {\n return this.config.orientation === Orientation.Vertical\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n\n const yAccessors = this.getAccessors()\n const stacked = getStackedData(this._barData, 0, yAccessors, this._prevNegative)\n this._prevNegative = stacked.map(s => !!s.negative)\n\n const barGroups = this.g\n .selectAll<SVGGElement, Datum>(`.${s.barGroup}`)\n .data(this._barData, (d, i) => `${getString(d, config.id, i) ?? i}`)\n\n const getBarGroupsTransform = (d: Datum, i: number): string => {\n const v = this.dataScale(getNumber(d, config.x, i))\n const x = this.isVertical() ? v : 0\n const y = this.isVertical() ? 0 : v\n return `translate(${x},${y})`\n }\n\n const barGroupsEnter = barGroups.enter().append('g')\n .attr('class', s.barGroup)\n .attr('transform', getBarGroupsTransform)\n .style('opacity', 1)\n\n const barGroupsMerged = barGroupsEnter.merge(barGroups)\n smartTransition(barGroupsMerged, duration)\n .attr('transform', getBarGroupsTransform)\n .style('opacity', 1)\n\n const barGroupExit = barGroups.exit()\n .attr('class', s.barGroupExit)\n\n smartTransition(barGroupExit, duration)\n .style('opacity', 0)\n .remove()\n\n // Animate bars from exiting groups going down\n smartTransition(barGroupExit.selectAll(`.${s.bar}`), duration)\n .attr('transform', this.isVertical()\n ? `translate(0,${this._height / 3})`\n : `translate(${this._width / 6},0)`\n )\n\n // Render Bars\n const bars = barGroupsMerged\n .selectAll<SVGPathElement, StackedBarDataRecord<Datum>>(`.${s.bar}`)\n .data((d, j) => stacked.map((s) =>\n ({ ...d, _stacked: s[j], _negative: s.negative, _ending: s.ending }))\n )\n\n const barsEnter = bars.enter().append('path')\n .attr('class', s.bar)\n .attr('d', (d, j) => this._getBarPath(d, j, true))\n .style('fill', (d, j) => getColor(d, config.color, j))\n\n const barsMerged = barsEnter.merge(bars)\n\n smartTransition(barsMerged, duration)\n .attr('d', (d, j) => this._getBarPath(d, j))\n .style('fill', (d, j) => getColor(d, config.color, j))\n .style('cursor', (d, j) => getString(d, config.cursor, j))\n\n smartTransition(bars.exit(), duration)\n .style('opacity', 0)\n .remove()\n }\n\n _getBarWidth (): number {\n const { config, datamodel: { data } } = this\n if (isEmpty(data)) return 0\n if (config.barWidth) return min([config.barWidth, config.barMaxWidth])\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const isOrdinal = this.dataScale.bandwidth\n const domain = (this.dataScale.domain ? this.dataScale.domain() : []) as number[]\n const domainLength = isOrdinal ? domain.length : domain[1] - domain[0]\n\n // If the dataStep property is provided the amount of data elements is calculates as domainLength / dataStep\n // otherwise we get the number of data elements within the domain range\n // Or if the scale is ordinal we use data.length\n let dataSize = (1 + domainLength / config.dataStep) ||\n (!isOrdinal && data.filter((d, i) => {\n const value = getNumber(d, config.x, i)\n return (value >= domain[0]) && (value <= domain[1])\n }).length) ||\n data.length\n\n // We increase the dataSize by 1 to take into account possible additional domain space\n if (!isOrdinal && dataSize >= 2) dataSize += 1\n\n const c = dataSize < 2 ? 1 : 1 - config.barPadding\n const barWidth = c * (this.isVertical() ? this._width : this._height) / dataSize\n\n return min([barWidth, config.barMaxWidth])\n }\n\n _getVisibleData (): Datum[] {\n const { config, datamodel: { data } } = this\n\n const groupWidth = this._getBarWidth()\n const halfGroupWidthPx = data.length < 2 ? 0 : groupWidth / 2\n\n const scale = this.dataScale\n const halfGroupWidth = Math.abs((scale.invert(halfGroupWidthPx) as number) - (scale.invert(0) as number))\n const filtered = data?.filter((d, i) => {\n const v = getNumber(d, config.x, i)\n const domain: number[] | Date[] = scale.domain()\n const domainMin = +domain[0]\n const domainMax = +domain[1]\n return (v >= (domainMin - halfGroupWidth)) && (v <= (domainMax + halfGroupWidth))\n })\n\n return filtered\n }\n\n _getBarPath (d: StackedBarDataRecord<Datum>, accessorIndex: number, isEntering = false): string {\n const { config } = this\n const yAccessors = this.getAccessors()\n const barWidth = this._getBarWidth()\n\n const isNegative = d._negative\n const isEnding = d._ending // The most top bar or, if the value is negative, the most bottom bar\n // Todo: Find a way to pass the datum index to `getNumber` below\n const value = getNumber(d, yAccessors[accessorIndex])\n\n const height = isEntering ? 0 : Math.abs(this.valueScale(d._stacked[0]) - this.valueScale(d._stacked[1]))\n const h = !isEntering && config.barMinHeight1Px && (height < 1) && isFinite(value) && (value !== config.barMinHeightZeroValue) ? 1 : height\n const y = isEntering\n ? this.valueScale(0)\n : this.valueScale(isNegative ? d._stacked[0] : d._stacked[1]) - (height < 1 && config.barMinHeight1Px ? 1 : 0)\n\n const x = -barWidth / 2\n const width = barWidth\n\n const cornerRadius = config.roundedCorners\n ? isNumber(config.roundedCorners) ? +config.roundedCorners : width / 2\n : 0\n const cornerRadiusClamped = clamp(cornerRadius, 0, Math.min(height, width) / 2)\n const isNorthDirected = this.yScale.range()[0] > this.yScale.range()[1]\n\n return roundedRectPath({\n x: this.isVertical() ? x : y - h,\n y: this.isVertical() ? y + (isNorthDirected ? 0 : -h) : x,\n w: this.isVertical() ? width : h,\n h: this.isVertical() ? h : width,\n tl: isEnding && (this.isVertical()\n ? (!isNegative && isNorthDirected) || (isNegative && !isNorthDirected)\n : isNegative\n ),\n tr: isEnding && (this.isVertical()\n ? (!isNegative && isNorthDirected) || (isNegative && !isNorthDirected)\n : !isNegative\n ),\n br: isEnding && (this.isVertical()\n ? (isNegative && isNorthDirected) || (!isNegative && !isNorthDirected)\n : !isNegative\n ),\n bl: isEnding && (this.isVertical()\n ? (isNegative && isNorthDirected) || (!isNegative && !isNorthDirected)\n : isNegative\n ),\n r: cornerRadiusClamped,\n })\n }\n\n getValueScaleExtent (scaleByVisibleData: boolean): number[] {\n const { datamodel } = this\n const yAccessors = this.getAccessors()\n\n const data = scaleByVisibleData ? this._getVisibleData() : datamodel.data\n return getStackedExtent(data, ...yAccessors)\n }\n\n getDataScaleExtent (): number[] {\n const { config, datamodel } = this\n return getExtent(datamodel.data, config.x)\n }\n\n getYDataExtent (scaleByVisibleData: boolean): number[] {\n return this.isVertical() ? this.getValueScaleExtent(scaleByVisibleData) : this.getDataScaleExtent()\n }\n\n getXDataExtent (): number[] {\n return this.isVertical() ? this.getDataScaleExtent() : this.getValueScaleExtent(false)\n }\n}\n"],"names":["s.barGroup","barGroupExit","s.barGroupExit","s.bar","s"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/stacked-bar/index.ts"],"sourcesContent":["import { min, max } from 'd3-array'\n\n// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { isNumber, isArray, isEmpty, clamp, getStackedExtent, getString, getNumber, getStackedData, getExtent } from 'utils/data'\nimport { roundedRectPath } from 'utils/path'\nimport { smartTransition } from 'utils/d3'\nimport { getColor } from 'utils/color'\n\n// Types\nimport { ContinuousScale } from 'types/scale'\nimport { NumericAccessor } from 'types/accessor'\nimport { Spacing } from 'types/spacing'\nimport { Orientation } from 'types/position'\n\n// Local Types\nimport { StackedBarDataRecord } from './types'\n\n// Config\nimport { StackedBarDefaultConfig, StackedBarConfigInterface } from './config'\n\n// Styles\nimport * as s from './style'\n\nexport class StackedBar<Datum> extends XYComponentCore<Datum, StackedBarConfigInterface<Datum>> {\n static selectors = s\n protected _defaultConfig = StackedBarDefaultConfig as StackedBarConfigInterface<Datum>\n public config: StackedBarConfigInterface<Datum> = this._defaultConfig\n\n getAccessors = (): NumericAccessor<Datum>[] => (isArray(this.config.y) ? this.config.y : [this.config.y])\n stacked = true\n events = {}\n private _prevNegative: boolean[] | undefined // To help guessing the bar direction when an accessor was set to null or 0\n private _barData: Datum[] = []\n\n constructor (config?: StackedBarConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n }\n\n get bleed (): Spacing {\n this._barData = this._getVisibleData()\n if (this._barData.length === 0) return { top: 0, bottom: 0, left: 0, right: 0 }\n\n // By default, horizontal orientation is \"flipped\", i.e. the `yDirection` of `XYContainer` is set to `Direction.North`\n const isHorizontalAndFlipped = !this.isVertical() && (this.dataScale.range()[0] > this.dataScale.range()[1])\n const dataDomain = this.dataScale.domain()\n const halfGroupWidth = this._getBarWidth() / 2\n\n const dataScaleValues = this._barData.map((d, i) => getNumber(d, this.config.x, i))\n const firstDataValue = min(dataScaleValues)\n const lastDataValue = max(dataScaleValues)\n const firstValuePx = this.dataScale(firstDataValue)\n const lastValuePx = this.dataScale(lastDataValue)\n\n const dataDomainRequiredStart = this.dataScale.invert(firstValuePx + (isHorizontalAndFlipped ? halfGroupWidth : -halfGroupWidth))\n const dataDomainRequiredEnd = this.dataScale.invert(lastValuePx + (isHorizontalAndFlipped ? -halfGroupWidth : halfGroupWidth))\n const bleedPxStart = dataDomainRequiredStart <= dataDomain[0] ? this.dataScale(dataDomain[0]) - this.dataScale(dataDomainRequiredStart) : 0\n const bleedPxEnd = dataDomainRequiredEnd > dataDomain[1] ? this.dataScale(dataDomainRequiredEnd) - this.dataScale(dataDomain[1]) : 0\n\n return {\n top: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxEnd : bleedPxStart),\n bottom: this.isVertical() ? 0 : (isHorizontalAndFlipped ? -bleedPxStart : bleedPxEnd),\n left: this.isVertical() ? bleedPxStart : 0,\n right: this.isVertical() ? bleedPxEnd : 0,\n }\n }\n\n private get dataScale (): ContinuousScale {\n return this.isVertical() ? this.xScale : this.yScale\n }\n\n private get valueScale (): ContinuousScale {\n return this.isVertical() ? this.yScale : this.xScale\n }\n\n private isVertical (): boolean {\n return this.config.orientation === Orientation.Vertical\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n\n const yAccessors = this.getAccessors()\n const stacked = getStackedData(this._barData, 0, yAccessors, this._prevNegative)\n this._prevNegative = stacked.map(s => !!s.negative)\n\n const barGroups = this.g\n .selectAll<SVGGElement, Datum>(`.${s.barGroup}`)\n .data(this._barData, (d, i) => `${getString(d, config.id, i) ?? i}`)\n\n const getBarGroupsTransform = (d: Datum, i: number): string => {\n const v = this.dataScale(getNumber(d, config.x, i))\n const x = this.isVertical() ? v : 0\n const y = this.isVertical() ? 0 : v\n return `translate(${x},${y})`\n }\n\n const barGroupsEnter = barGroups.enter().append('g')\n .attr('class', s.barGroup)\n .attr('transform', getBarGroupsTransform)\n .style('opacity', 1)\n\n const barGroupsMerged = barGroupsEnter.merge(barGroups)\n smartTransition(barGroupsMerged, duration)\n .attr('transform', getBarGroupsTransform)\n .style('opacity', 1)\n\n const barGroupExit = barGroups.exit()\n .attr('class', s.barGroupExit)\n\n smartTransition(barGroupExit, duration)\n .style('opacity', 0)\n .remove()\n\n // Animate bars from exiting groups going down\n smartTransition(barGroupExit.selectAll(`.${s.bar}`), duration)\n .attr('transform', this.isVertical()\n ? `translate(0,${this._height / 3})`\n : `translate(${this._width / 6},0)`\n )\n\n // Render Bars\n const bars = barGroupsMerged\n .selectAll<SVGPathElement, StackedBarDataRecord<Datum>>(`.${s.bar}`)\n .data((d, j) => stacked.map((s) =>\n ({ ...d, _stacked: s[j], _negative: s.negative, _ending: s.ending }))\n )\n\n const barsEnter = bars.enter().append('path')\n .attr('class', s.bar)\n .attr('d', (d, j) => this._getBarPath(d, j, true))\n .style('fill', (d, j) => getColor(d, config.color, j))\n\n const barsMerged = barsEnter.merge(bars)\n\n smartTransition(barsMerged, duration)\n .attr('d', (d, j) => this._getBarPath(d, j))\n .style('fill', (d, j) => getColor(d, config.color, j))\n .style('cursor', (d, j) => getString(d, config.cursor, j))\n\n smartTransition(bars.exit(), duration)\n .style('opacity', 0)\n .remove()\n }\n\n _getBarWidth (): number {\n const { config, datamodel: { data } } = this\n if (isEmpty(data)) return 0\n if (config.barWidth) return min([config.barWidth, config.barMaxWidth])\n\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const isOrdinal = this.dataScale.bandwidth\n const domain = (this.dataScale.domain ? this.dataScale.domain() : []) as number[]\n const domainLength = isOrdinal ? domain.length : domain[1] - domain[0]\n\n // If the dataStep property is provided the amount of data elements is calculates as domainLength / dataStep\n // otherwise we get the number of data elements within the domain range\n // Or if the scale is ordinal we use data.length\n let dataSize = (1 + domainLength / config.dataStep) ||\n (!isOrdinal && data.filter((d, i) => {\n const value = getNumber(d, config.x, i)\n return (value >= domain[0]) && (value <= domain[1])\n }).length) ||\n data.length\n\n // We increase the dataSize by 1 to take into account possible additional domain space\n if (!isOrdinal && dataSize >= 2) dataSize += 1\n\n const c = dataSize < 2 ? 1 : 1 - config.barPadding\n const barWidth = c * (this.isVertical() ? this._width : this._height) / dataSize\n\n return min([barWidth, config.barMaxWidth])\n }\n\n _getVisibleData (): Datum[] {\n const { config, datamodel: { data } } = this\n\n const groupWidth = this._getBarWidth()\n const halfGroupWidthPx = data.length < 2 ? 0 : groupWidth / 2\n\n const scale = this.dataScale\n const halfGroupWidth = Math.abs((scale.invert(halfGroupWidthPx) as number) - (scale.invert(0) as number))\n const filtered = data?.filter((d, i) => {\n const v = getNumber(d, config.x, i)\n const domain: number[] | Date[] = scale.domain()\n const domainMin = +domain[0]\n const domainMax = +domain[1]\n return (v >= (domainMin - halfGroupWidth)) && (v <= (domainMax + halfGroupWidth))\n })\n\n return filtered\n }\n\n _getBarPath (d: StackedBarDataRecord<Datum>, accessorIndex: number, isEntering = false): string {\n const { config } = this\n const yAccessors = this.getAccessors()\n const barWidth = this._getBarWidth()\n\n const isNegative = d._negative\n const isEnding = d._ending // The most top bar or, if the value is negative, the most bottom bar\n // Todo: Find a way to pass the datum index to `getNumber` below\n const value = getNumber(d, yAccessors[accessorIndex])\n const height = isEntering ? 0 : Math.abs(this.valueScale(d._stacked[0]) - this.valueScale(d._stacked[1]))\n const h = !isEntering && config.barMinHeight1Px && (height < 1) && isFinite(value) && (value !== config.barMinHeightZeroValue) ? 1 : height\n const y = isEntering\n ? this.valueScale(0)\n : this.valueScale(isNegative ? d._stacked[0] : d._stacked[1]) - (height < 1 && config.barMinHeight1Px ? 1 : 0)\n\n const x = -barWidth / 2\n const width = barWidth\n\n const cornerRadius = config.roundedCorners\n ? isNumber(config.roundedCorners) ? +config.roundedCorners : width / 2\n : 0\n const cornerRadiusClamped = clamp(cornerRadius, 0, Math.min(height, width) / 2)\n const isNorthDirected = this.yScale.range()[0] > this.yScale.range()[1]\n\n return roundedRectPath({\n x: this.isVertical() ? x : y - h,\n y: this.isVertical() ? y + (isNorthDirected ? 0 : -h) : x,\n w: this.isVertical() ? width : h,\n h: this.isVertical() ? h : width,\n tl: isEnding && (this.isVertical()\n ? (!isNegative && isNorthDirected) || (isNegative && !isNorthDirected)\n : isNegative\n ),\n tr: isEnding && (this.isVertical()\n ? (!isNegative && isNorthDirected) || (isNegative && !isNorthDirected)\n : !isNegative\n ),\n br: isEnding && (this.isVertical()\n ? (isNegative && isNorthDirected) || (!isNegative && !isNorthDirected)\n : !isNegative\n ),\n bl: isEnding && (this.isVertical()\n ? (isNegative && isNorthDirected) || (!isNegative && !isNorthDirected)\n : isNegative\n ),\n r: cornerRadiusClamped,\n })\n }\n\n getValueScaleExtent (scaleByVisibleData: boolean): number[] {\n const { datamodel } = this\n const yAccessors = this.getAccessors()\n\n const data = scaleByVisibleData ? this._getVisibleData() : datamodel.data\n return getStackedExtent(data, ...yAccessors)\n }\n\n getDataScaleExtent (): number[] {\n const { config, datamodel } = this\n return getExtent(datamodel.data, config.x)\n }\n\n getYDataExtent (scaleByVisibleData: boolean): number[] {\n return this.isVertical() ? this.getValueScaleExtent(scaleByVisibleData) : this.getDataScaleExtent()\n }\n\n getXDataExtent (): number[] {\n return this.isVertical() ? this.getDataScaleExtent() : this.getValueScaleExtent(false)\n }\n}\n"],"names":["s.barGroup","barGroupExit","s.barGroupExit","s.bar","s"],"mappings":"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"}
@@ -1,9 +1,7 @@
1
1
  import { Selection } from 'd3-selection';
2
2
  import { VisControlItemInterface } from './types';
3
3
  import { VisControlsConfigInterface } from './config';
4
- import * as s from './style';
5
4
  export declare class VisControls {
6
- static selectors: typeof s;
7
5
  div: Selection<HTMLDivElement, unknown, null, undefined>;
8
6
  element: HTMLDivElement;
9
7
  protected _defaultConfig: VisControlsConfigInterface;
@@ -14,5 +12,4 @@ export declare class VisControls {
14
12
  update(config: VisControlsConfigInterface): void;
15
13
  render(): void;
16
14
  _onItemClick(event: MouseEvent, item: VisControlItemInterface): void;
17
- destroy(): void;
18
15
  }
@@ -2,7 +2,6 @@ import { select } from 'd3-selection';
2
2
  import { merge } from '../../utils/data.js';
3
3
  import { VisControlsOrientation } from './types.js';
4
4
  import { VisControlsDefaultConfig } from './config.js';
5
- import * as style from './style.js';
6
5
  import { root, items, horizontalItems, item, itemButton, borderLeft, borderTop, borderRight, borderBottom, disabled } from './style.js';
7
6
 
8
7
  class VisControls {
@@ -50,11 +49,7 @@ class VisControls {
50
49
  var _a;
51
50
  (_a = item.callback) === null || _a === void 0 ? void 0 : _a.call(item, event);
52
51
  }
53
- destroy() {
54
- this.div.remove();
55
- }
56
- }
57
- VisControls.selectors = style;
52
+ }
58
53
 
59
54
  export { VisControls };
60
55
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/vis-controls/index.ts"],"sourcesContent":["import { Selection, select } from 'd3-selection'\n\n// Utils\nimport { merge } from 'utils/data'\n\n// Local Types\nimport { VisControlItemInterface, VisControlsOrientation } from './types'\n\n// Config\nimport { VisControlsDefaultConfig, VisControlsConfigInterface } from './config'\n\n// Style\nimport * as s from './style'\n\nexport class VisControls {\n static selectors = s\n div: Selection<HTMLDivElement, unknown, null, undefined>\n element: HTMLDivElement\n protected _defaultConfig = VisControlsDefaultConfig as VisControlsConfigInterface\n public config: VisControlsConfigInterface = this._defaultConfig\n\n protected _container: HTMLElement\n protected _items: Selection<HTMLDivElement, unknown, null, undefined>\n\n constructor (element: HTMLElement, config?: VisControlsConfigInterface) {\n this._container = element\n\n this.div = select(this._container)\n .append('div')\n .attr('class', s.root)\n this.element = this.div.node()\n this._items = this.div.append('div')\n .attr('class', s.items)\n\n if (config) this.update(config)\n }\n\n update (config: VisControlsConfigInterface): void {\n this.config = merge(this._defaultConfig, config)\n this.render()\n }\n\n render (): void {\n const { config: { items, orientation } } = this\n this._items\n .classed(s.horizontalItems, orientation === VisControlsOrientation.Horizontal)\n const controlItems = this._items.selectAll<HTMLDivElement, VisControlItemInterface>(`.${s.item}`)\n .data(items)\n\n const controlItemsEnter = controlItems.enter()\n .append('div')\n .attr('class', s.item)\n .on('click', this._onItemClick.bind(this))\n\n controlItemsEnter.append('button')\n .attr('class', s.itemButton)\n\n const controlItemsMerged = controlItemsEnter.merge(controlItems)\n controlItemsMerged\n .classed(s.borderLeft, d => d.borderLeft)\n .classed(s.borderTop, d => d.borderTop)\n .classed(s.borderRight, d => d.borderRight)\n .classed(s.borderBottom, d => d.borderBottom)\n .classed(s.disabled, d => d.disabled)\n controlItemsMerged.select(`.${s.itemButton}`)\n .html(item => item.icon)\n\n controlItems.exit().remove()\n }\n\n _onItemClick (event: MouseEvent, item: VisControlItemInterface): void {\n item.callback?.(event)\n }\n\n public destroy (): void {\n this.div.remove()\n }\n}\n"],"names":["s.root","s.items","s.horizontalItems","s.item","s.itemButton","s.borderLeft","s.borderTop","s.borderRight","s.borderBottom","s.disabled","s"],"mappings":";;;;;;;MAca,WAAW,CAAA;IAUtB,WAAa,CAAA,OAAoB,EAAE,MAAmC,EAAA;QAN5D,IAAc,CAAA,cAAA,GAAG,wBAAsD,CAAA;AAC1E,QAAA,IAAA,CAAA,MAAM,GAA+B,IAAI,CAAC,cAAc,CAAA;AAM7D,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAA;QAEzB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;aAC/B,MAAM,CAAC,KAAK,CAAC;AACb,aAAA,IAAI,CAAC,OAAO,EAAEA,IAAM,CAAC,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,aAAA,IAAI,CAAC,OAAO,EAAEC,KAAO,CAAC,CAAA;AAEzB,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAChC;AAED,IAAA,MAAM,CAAE,MAAkC,EAAA;QACxC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QAChD,IAAI,CAAC,MAAM,EAAE,CAAA;KACd;IAED,MAAM,GAAA;QACJ,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,CAAA;AAC/C,QAAA,IAAI,CAAC,MAAM;aACR,OAAO,CAACC,eAAiB,EAAE,WAAW,KAAK,sBAAsB,CAAC,UAAU,CAAC,CAAA;AAChF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAA0C,CAAI,CAAA,EAAAC,IAAM,EAAE,CAAC;aAC9F,IAAI,CAAC,KAAK,CAAC,CAAA;AAEd,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,EAAE;aAC3C,MAAM,CAAC,KAAK,CAAC;AACb,aAAA,IAAI,CAAC,OAAO,EAAEA,IAAM,CAAC;AACrB,aAAA,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAE5C,QAAA,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/B,aAAA,IAAI,CAAC,OAAO,EAAEC,UAAY,CAAC,CAAA;QAE9B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAChE,kBAAkB;AACf,aAAA,OAAO,CAACC,UAAY,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AACxC,aAAA,OAAO,CAACC,SAAW,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACtC,aAAA,OAAO,CAACC,WAAa,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;AAC1C,aAAA,OAAO,CAACC,YAAc,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAC5C,aAAA,OAAO,CAACC,QAAU,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;QACvC,kBAAkB,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIL,UAAY,EAAE,CAAC;aAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;AAE1B,QAAA,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;KAC7B;IAED,YAAY,CAAE,KAAiB,EAAE,IAA6B,EAAA;;QAC5D,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAb,IAAI,EAAY,KAAK,CAAC,CAAA;KACvB;IAEM,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;KAClB;;AA7DM,WAAS,CAAA,SAAA,GAAGM,KAAC;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/vis-controls/index.ts"],"sourcesContent":["import { Selection, select } from 'd3-selection'\n\n// Utils\nimport { merge } from 'utils/data'\n\n// Local Types\nimport { VisControlItemInterface, VisControlsOrientation } from './types'\n\n// Config\nimport { VisControlsDefaultConfig, VisControlsConfigInterface } from './config'\n\n// Style\nimport * as s from './style'\n\nexport class VisControls {\n div: Selection<HTMLDivElement, unknown, null, undefined>\n element: HTMLDivElement\n protected _defaultConfig = VisControlsDefaultConfig as VisControlsConfigInterface\n public config: VisControlsConfigInterface = this._defaultConfig\n\n protected _container: HTMLElement\n protected _items: Selection<HTMLDivElement, unknown, null, undefined>\n\n constructor (element: HTMLElement, config?: VisControlsConfigInterface) {\n this._container = element\n\n this.div = select(this._container)\n .append('div')\n .attr('class', s.root)\n this.element = this.div.node()\n this._items = this.div.append('div')\n .attr('class', s.items)\n\n if (config) this.update(config)\n }\n\n update (config: VisControlsConfigInterface): void {\n this.config = merge(this._defaultConfig, config)\n this.render()\n }\n\n render (): void {\n const { config: { items, orientation } } = this\n this._items\n .classed(s.horizontalItems, orientation === VisControlsOrientation.Horizontal)\n const controlItems = this._items.selectAll<HTMLDivElement, VisControlItemInterface>(`.${s.item}`)\n .data(items)\n\n const controlItemsEnter = controlItems.enter()\n .append('div')\n .attr('class', s.item)\n .on('click', this._onItemClick.bind(this))\n\n controlItemsEnter.append('button')\n .attr('class', s.itemButton)\n\n const controlItemsMerged = controlItemsEnter.merge(controlItems)\n controlItemsMerged\n .classed(s.borderLeft, d => d.borderLeft)\n .classed(s.borderTop, d => d.borderTop)\n .classed(s.borderRight, d => d.borderRight)\n .classed(s.borderBottom, d => d.borderBottom)\n .classed(s.disabled, d => d.disabled)\n controlItemsMerged.select(`.${s.itemButton}`)\n .html(item => item.icon)\n\n controlItems.exit().remove()\n }\n\n _onItemClick (event: MouseEvent, item: VisControlItemInterface): void {\n item.callback?.(event)\n }\n}\n"],"names":["s.root","s.items","s.horizontalItems","s.item","s.itemButton","s.borderLeft","s.borderTop","s.borderRight","s.borderBottom","s.disabled"],"mappings":";;;;;;MAca,WAAW,CAAA;IAStB,WAAa,CAAA,OAAoB,EAAE,MAAmC,EAAA;QAN5D,IAAc,CAAA,cAAA,GAAG,wBAAsD,CAAA;AAC1E,QAAA,IAAA,CAAA,MAAM,GAA+B,IAAI,CAAC,cAAc,CAAA;AAM7D,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAA;QAEzB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;aAC/B,MAAM,CAAC,KAAK,CAAC;AACb,aAAA,IAAI,CAAC,OAAO,EAAEA,IAAM,CAAC,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,aAAA,IAAI,CAAC,OAAO,EAAEC,KAAO,CAAC,CAAA;AAEzB,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;KAChC;AAED,IAAA,MAAM,CAAE,MAAkC,EAAA;QACxC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;QAChD,IAAI,CAAC,MAAM,EAAE,CAAA;KACd;IAED,MAAM,GAAA;QACJ,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,IAAI,CAAA;AAC/C,QAAA,IAAI,CAAC,MAAM;aACR,OAAO,CAACC,eAAiB,EAAE,WAAW,KAAK,sBAAsB,CAAC,UAAU,CAAC,CAAA;AAChF,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAA0C,CAAI,CAAA,EAAAC,IAAM,EAAE,CAAC;aAC9F,IAAI,CAAC,KAAK,CAAC,CAAA;AAEd,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,KAAK,EAAE;aAC3C,MAAM,CAAC,KAAK,CAAC;AACb,aAAA,IAAI,CAAC,OAAO,EAAEA,IAAM,CAAC;AACrB,aAAA,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAE5C,QAAA,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC/B,aAAA,IAAI,CAAC,OAAO,EAAEC,UAAY,CAAC,CAAA;QAE9B,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAChE,kBAAkB;AACf,aAAA,OAAO,CAACC,UAAY,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC;AACxC,aAAA,OAAO,CAACC,SAAW,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACtC,aAAA,OAAO,CAACC,WAAa,EAAE,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;AAC1C,aAAA,OAAO,CAACC,YAAc,EAAE,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;AAC5C,aAAA,OAAO,CAACC,QAAU,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAA;QACvC,kBAAkB,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIL,UAAY,EAAE,CAAC;aAC1C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAA;AAE1B,QAAA,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;KAC7B;IAED,YAAY,CAAE,KAAiB,EAAE,IAA6B,EAAA;;QAC5D,CAAA,EAAA,GAAA,IAAI,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAb,IAAI,EAAY,KAAK,CAAC,CAAA;KACvB;AACF;;;;"}
@@ -52,7 +52,7 @@ class XYLabels extends XYComponentCore {
52
52
  }
53
53
  return acc;
54
54
  }, [])) !== null && _b !== void 0 ? _b : [];
55
- return this._getClusteredLabels(labels);
55
+ return config.clustering ? this._getClusteredLabels(labels) : labels;
56
56
  }
57
57
  _getClusteredLabels(labels) {
58
58
  const labelsNonOverlapping = [...labels];
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/xy-labels/index.ts"],"sourcesContent":["// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { getValue, isNumber, isNumberWithinRange } from 'utils/data'\nimport { rectIntersect } from 'utils/misc'\n\n// Local Types\nimport { XYLabelCluster, XYLabel, XYLabelPositioning } from './types'\n\n// Config\nimport { XYLabelsDefaultConfig, XYLabelsConfigInterface } from './config'\n\n// Modules\nimport { createLabels, updateLabels, removeLabels, getLabelRenderProps } from './modules/label'\n\n// Styles\nimport * as s from './style'\n\nexport class XYLabels<Datum> extends XYComponentCore<Datum, XYLabelsConfigInterface<Datum>> {\n static selectors = s\n clippable = false\n protected _defaultConfig = XYLabelsDefaultConfig as XYLabelsConfigInterface<Datum>\n public config: XYLabelsConfigInterface<Datum> = this._defaultConfig\n\n events = {\n [XYLabels.selectors.label]: {},\n }\n\n constructor (config?: XYLabelsConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n\n const labelGroups = this.g\n .selectAll<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>>(`.${s.labelGroup}`)\n .data(this._getDataToRender())\n\n const labelGroupsExit = labelGroups.exit<XYLabel<Datum> | XYLabelCluster<Datum>>()\n removeLabels(labelGroupsExit, duration)\n\n const labelGroupsEnter = labelGroups.enter().append('g')\n .attr('class', s.labelGroup)\n .call(createLabels)\n\n const labelGroupsMerged = labelGroupsEnter\n .merge(labelGroups)\n .classed(s.cluster, d => !!(d as XYLabelCluster<Datum>).records)\n .classed(s.label, d => !(d as XYLabelCluster<Datum>).records)\n\n labelGroupsMerged.call(updateLabels, config, duration)\n }\n\n private _getDataToRender (): (XYLabel<Datum> | XYLabelCluster<Datum>)[] {\n const { config, datamodel } = this\n\n const xRange = this.xScale.range() as [number, number]\n const yRange = this.xScale.range() as [number, number]\n\n const labels = datamodel.data?.reduce<XYLabel<Datum>[]>((acc, d) => {\n const xPositioning = getValue<Datum, XYLabelPositioning>(d, config.xPositioning)\n const yPositioning = getValue<Datum, XYLabelPositioning>(d, config.yPositioning)\n const props = getLabelRenderProps(d, this.element, config, this.xScale, this.yScale)\n\n if (\n ((xPositioning !== XYLabelPositioning.DataSpace) || isNumberWithinRange(props.x, xRange)) &&\n ((yPositioning !== XYLabelPositioning.DataSpace) || isNumberWithinRange(props.y, yRange))\n ) {\n acc.push({ ...d, _screen: props })\n }\n\n return acc\n }, []) ?? []\n\n return this._getClusteredLabels(labels)\n }\n\n private _getClusteredLabels (labels: XYLabel<Datum>[]): (XYLabel<Datum> | XYLabelCluster<Datum>)[] {\n const labelsNonOverlapping = [...labels]\n const clusterMap = new Map<XYLabel<Datum>, XYLabel<Datum>[]>()\n for (let i = 0; i < labelsNonOverlapping.length; i += 1) {\n const label1 = labelsNonOverlapping[i]\n for (let j = i + 1; j < labelsNonOverlapping.length; j += 1) {\n const label2 = labelsNonOverlapping[j]\n const isIntersecting = rectIntersect(label1._screen, label2._screen)\n if (isIntersecting) {\n if (!clusterMap.has(label1)) clusterMap.set(label1, [label1])\n clusterMap.get(label1).push(label2)\n labelsNonOverlapping.splice(j, 1)\n j -= 1\n }\n }\n\n if (clusterMap.has(label1)) {\n labelsNonOverlapping.splice(i, 1)\n i -= 1\n }\n }\n\n const clusters = Array.from(clusterMap.values()).map(records => ({\n _screen: getLabelRenderProps(records, this.element, this.config, this.xScale, this.yScale),\n records,\n }))\n\n return [...labelsNonOverlapping, ...clusters]\n }\n}\n"],"names":["s.labelGroup","s.cluster","s.label","s"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/xy-labels/index.ts"],"sourcesContent":["// Core\nimport { XYComponentCore } from 'core/xy-component'\n\n// Utils\nimport { getValue, isNumber, isNumberWithinRange } from 'utils/data'\nimport { rectIntersect } from 'utils/misc'\n\n// Local Types\nimport { XYLabelCluster, XYLabel, XYLabelPositioning } from './types'\n\n// Config\nimport { XYLabelsDefaultConfig, XYLabelsConfigInterface } from './config'\n\n// Modules\nimport { createLabels, updateLabels, removeLabels, getLabelRenderProps } from './modules/label'\n\n// Styles\nimport * as s from './style'\n\nexport class XYLabels<Datum> extends XYComponentCore<Datum, XYLabelsConfigInterface<Datum>> {\n static selectors = s\n clippable = false\n protected _defaultConfig = XYLabelsDefaultConfig as XYLabelsConfigInterface<Datum>\n public config: XYLabelsConfigInterface<Datum> = this._defaultConfig\n\n events = {\n [XYLabels.selectors.label]: {},\n }\n\n constructor (config?: XYLabelsConfigInterface<Datum>) {\n super()\n if (config) this.setConfig(config)\n }\n\n _render (customDuration?: number): void {\n const { config } = this\n const duration = isNumber(customDuration) ? customDuration : config.duration\n\n const labelGroups = this.g\n .selectAll<SVGGElement, XYLabel<Datum> | XYLabelCluster<Datum>>(`.${s.labelGroup}`)\n .data(this._getDataToRender())\n\n const labelGroupsExit = labelGroups.exit<XYLabel<Datum> | XYLabelCluster<Datum>>()\n removeLabels(labelGroupsExit, duration)\n\n const labelGroupsEnter = labelGroups.enter().append('g')\n .attr('class', s.labelGroup)\n .call(createLabels)\n\n const labelGroupsMerged = labelGroupsEnter\n .merge(labelGroups)\n .classed(s.cluster, d => !!(d as XYLabelCluster<Datum>).records)\n .classed(s.label, d => !(d as XYLabelCluster<Datum>).records)\n\n labelGroupsMerged.call(updateLabels, config, duration)\n }\n\n private _getDataToRender (): (XYLabel<Datum> | XYLabelCluster<Datum>)[] {\n const { config, datamodel } = this\n\n const xRange = this.xScale.range() as [number, number]\n const yRange = this.xScale.range() as [number, number]\n\n const labels = datamodel.data?.reduce<XYLabel<Datum>[]>((acc, d) => {\n const xPositioning = getValue<Datum, XYLabelPositioning>(d, config.xPositioning)\n const yPositioning = getValue<Datum, XYLabelPositioning>(d, config.yPositioning)\n const props = getLabelRenderProps(d, this.element, config, this.xScale, this.yScale)\n\n if (\n ((xPositioning !== XYLabelPositioning.DataSpace) || isNumberWithinRange(props.x, xRange)) &&\n ((yPositioning !== XYLabelPositioning.DataSpace) || isNumberWithinRange(props.y, yRange))\n ) {\n acc.push({ ...d, _screen: props })\n }\n\n return acc\n }, []) ?? []\n\n return config.clustering ? this._getClusteredLabels(labels) : labels\n }\n\n private _getClusteredLabels (labels: XYLabel<Datum>[]): (XYLabel<Datum> | XYLabelCluster<Datum>)[] {\n const labelsNonOverlapping = [...labels]\n const clusterMap = new Map<XYLabel<Datum>, XYLabel<Datum>[]>()\n for (let i = 0; i < labelsNonOverlapping.length; i += 1) {\n const label1 = labelsNonOverlapping[i]\n for (let j = i + 1; j < labelsNonOverlapping.length; j += 1) {\n const label2 = labelsNonOverlapping[j]\n const isIntersecting = rectIntersect(label1._screen, label2._screen)\n if (isIntersecting) {\n if (!clusterMap.has(label1)) clusterMap.set(label1, [label1])\n clusterMap.get(label1).push(label2)\n labelsNonOverlapping.splice(j, 1)\n j -= 1\n }\n }\n\n if (clusterMap.has(label1)) {\n labelsNonOverlapping.splice(i, 1)\n i -= 1\n }\n }\n\n const clusters = Array.from(clusterMap.values()).map(records => ({\n _screen: getLabelRenderProps(records, this.element, this.config, this.xScale, this.yScale),\n records,\n }))\n\n return [...labelsNonOverlapping, ...clusters]\n }\n}\n"],"names":["s.labelGroup","s.cluster","s.label","s"],"mappings":"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"}
package/components.d.ts CHANGED
@@ -26,6 +26,7 @@ export { Donut } from './components/donut';
26
26
  export { FreeBrush } from './components/free-brush';
27
27
  export { XYLabels } from './components/xy-labels';
28
28
  export { NestedDonut } from './components/nested-donut';
29
+ export { Annotations } from "./components/annotations";
29
30
  export type { LineConfigInterface } from './components/line/config';
30
31
  export type { StackedBarConfigInterface } from './components/stacked-bar/config';
31
32
  export type { GroupedBarConfigInterface } from './components/grouped-bar/config';
@@ -49,3 +50,4 @@ export type { DonutConfigInterface } from './components/donut/config';
49
50
  export type { FreeBrushConfigInterface } from './components/free-brush/config';
50
51
  export type { XYLabelsConfigInterface } from './components/xy-labels/config';
51
52
  export type { NestedDonutConfigInterface } from './components/nested-donut/config';
53
+ export type { AnnotationsConfigInterface } from './components/annotations/config';
package/components.js CHANGED
@@ -24,6 +24,7 @@ export { Donut } from './components/donut/index.js';
24
24
  export { FreeBrush } from './components/free-brush/index.js';
25
25
  export { XYLabels } from './components/xy-labels/index.js';
26
26
  export { NestedDonut } from './components/nested-donut/index.js';
27
+ export { Annotations } from './components/annotations/index.js';
27
28
 
28
29
  // Core
29
30
  //# sourceMappingURL=components.js.map
package/components.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","sources":["../src/components.ts"],"sourcesContent":["// Core\nexport { ComponentCore } from 'core/component'\nexport type { ComponentConfigInterface } from 'core/component/config'\nexport { XYComponentCore } from 'core/xy-component'\nexport type { XYComponentConfigInterface } from 'core/xy-component/config'\n\n// Components\nexport { Tooltip } from 'components/tooltip'\nexport { Line } from './components/line'\nexport { StackedBar } from './components/stacked-bar'\nexport { GroupedBar } from './components/grouped-bar'\nexport { Axis } from './components/axis'\nexport { Scatter } from './components/scatter'\nexport { Brush } from './components/brush'\nexport { BulletLegend } from './components/bullet-legend'\nexport { FlowLegend } from './components/flow-legend'\nexport { Crosshair } from './components/crosshair'\nexport { Timeline } from './components/timeline'\nexport { Sankey } from './components/sankey'\nexport { Area } from './components/area'\nexport { TopoJSONMap } from './components/topojson-map'\nexport { LeafletMap } from './components/leaflet-map'\nexport { MapLibreArcticDark, MapLibreArcticLight } from './components/leaflet-map/renderer/map-style'\nexport { LeafletFlowMap } from './components/leaflet-flow-map'\nexport { ChordDiagram } from './components/chord-diagram'\nexport { Graph } from './components/graph'\nexport { VisControls } from './components/vis-controls'\nexport { Donut } from './components/donut'\nexport { FreeBrush } from './components/free-brush'\nexport { XYLabels } from './components/xy-labels'\nexport { NestedDonut } from './components/nested-donut'\n\n// Config Interfaces\nexport type { LineConfigInterface } from './components/line/config'\nexport type { StackedBarConfigInterface } from './components/stacked-bar/config'\nexport type { GroupedBarConfigInterface } from './components/grouped-bar/config'\nexport type { ScatterConfigInterface } from './components/scatter/config'\nexport type { TooltipConfigInterface } from './components/tooltip/config'\nexport type { BrushConfigInterface } from './components/brush/config'\nexport type { AxisConfigInterface } from './components/axis/config'\nexport type { BulletLegendConfigInterface } from './components/bullet-legend/config'\nexport type { FlowLegendConfigInterface } from './components/flow-legend/config'\nexport type { CrosshairConfigInterface } from './components/crosshair/config'\nexport type { TimelineConfigInterface } from './components/timeline/config'\nexport type { SankeyConfigInterface } from './components/sankey/config'\nexport type { AreaConfigInterface } from './components/area/config'\nexport type { TopoJSONMapConfigInterface } from './components/topojson-map/config'\nexport type { LeafletMapConfigInterface } from './components/leaflet-map/config'\nexport type { LeafletFlowMapConfigInterface } from './components/leaflet-flow-map/config'\nexport type { ChordDiagramConfigInterface } from './components/chord-diagram/config'\nexport type { GraphConfigInterface } from './components/graph/config'\nexport type { VisControlsConfigInterface } from './components/vis-controls/config'\nexport type { DonutConfigInterface } from './components/donut/config'\nexport type { FreeBrushConfigInterface } from './components/free-brush/config'\nexport type { XYLabelsConfigInterface } from './components/xy-labels/config'\nexport type { NestedDonutConfigInterface } from './components/nested-donut/config'\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA"}
1
+ {"version":3,"file":"components.js","sources":["../src/components.ts"],"sourcesContent":["// Core\nexport { ComponentCore } from 'core/component'\nexport type { ComponentConfigInterface } from 'core/component/config'\nexport { XYComponentCore } from 'core/xy-component'\nexport type { XYComponentConfigInterface } from 'core/xy-component/config'\n\n// Components\nexport { Tooltip } from 'components/tooltip'\nexport { Line } from './components/line'\nexport { StackedBar } from './components/stacked-bar'\nexport { GroupedBar } from './components/grouped-bar'\nexport { Axis } from './components/axis'\nexport { Scatter } from './components/scatter'\nexport { Brush } from './components/brush'\nexport { BulletLegend } from './components/bullet-legend'\nexport { FlowLegend } from './components/flow-legend'\nexport { Crosshair } from './components/crosshair'\nexport { Timeline } from './components/timeline'\nexport { Sankey } from './components/sankey'\nexport { Area } from './components/area'\nexport { TopoJSONMap } from './components/topojson-map'\nexport { LeafletMap } from './components/leaflet-map'\nexport { MapLibreArcticDark, MapLibreArcticLight } from './components/leaflet-map/renderer/map-style'\nexport { LeafletFlowMap } from './components/leaflet-flow-map'\nexport { ChordDiagram } from './components/chord-diagram'\nexport { Graph } from './components/graph'\nexport { VisControls } from './components/vis-controls'\nexport { Donut } from './components/donut'\nexport { FreeBrush } from './components/free-brush'\nexport { XYLabels } from './components/xy-labels'\nexport { NestedDonut } from './components/nested-donut'\nexport { Annotations } from 'components/annotations'\n\n// Config Interfaces\nexport type { LineConfigInterface } from './components/line/config'\nexport type { StackedBarConfigInterface } from './components/stacked-bar/config'\nexport type { GroupedBarConfigInterface } from './components/grouped-bar/config'\nexport type { ScatterConfigInterface } from './components/scatter/config'\nexport type { TooltipConfigInterface } from './components/tooltip/config'\nexport type { BrushConfigInterface } from './components/brush/config'\nexport type { AxisConfigInterface } from './components/axis/config'\nexport type { BulletLegendConfigInterface } from './components/bullet-legend/config'\nexport type { FlowLegendConfigInterface } from './components/flow-legend/config'\nexport type { CrosshairConfigInterface } from './components/crosshair/config'\nexport type { TimelineConfigInterface } from './components/timeline/config'\nexport type { SankeyConfigInterface } from './components/sankey/config'\nexport type { AreaConfigInterface } from './components/area/config'\nexport type { TopoJSONMapConfigInterface } from './components/topojson-map/config'\nexport type { LeafletMapConfigInterface } from './components/leaflet-map/config'\nexport type { LeafletFlowMapConfigInterface } from './components/leaflet-flow-map/config'\nexport type { ChordDiagramConfigInterface } from './components/chord-diagram/config'\nexport type { GraphConfigInterface } from './components/graph/config'\nexport type { VisControlsConfigInterface } from './components/vis-controls/config'\nexport type { DonutConfigInterface } from './components/donut/config'\nexport type { FreeBrushConfigInterface } from './components/free-brush/config'\nexport type { XYLabelsConfigInterface } from './components/xy-labels/config'\nexport type { NestedDonutConfigInterface } from './components/nested-donut/config'\nexport type { AnnotationsConfigInterface } from './components/annotations/config'\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA"}
@@ -1,10 +1,13 @@
1
1
  import { ContainerConfigInterface } from "../../core/container/config";
2
2
  import { ComponentCore } from "../../core/component";
3
3
  import { Tooltip } from "../../components/tooltip";
4
+ import { Annotations } from "../../components/annotations";
4
5
  export interface SingleContainerConfigInterface<Datum> extends ContainerConfigInterface {
5
6
  /** Visualization component. Default: `undefined` */
6
7
  component?: ComponentCore<Datum>;
7
8
  /** Tooltip component. Default: `undefined` */
8
9
  tooltip?: Tooltip;
10
+ /** Annotations component. Default: `undefined` */
11
+ annotations?: Annotations | undefined;
9
12
  }
10
13
  export declare const SingleContainerDefaultConfig: SingleContainerConfigInterface<unknown>;
@@ -1,7 +1,7 @@
1
1
  import { ContainerDefaultConfig } from '../../core/container/config.js';
2
2
 
3
3
  // Core
4
- const SingleContainerDefaultConfig = Object.assign(Object.assign({}, ContainerDefaultConfig), { tooltip: undefined });
4
+ const SingleContainerDefaultConfig = Object.assign(Object.assign({}, ContainerDefaultConfig), { tooltip: undefined, annotations: undefined });
5
5
 
6
6
  export { SingleContainerDefaultConfig };
7
7
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/containers/single-container/config.ts"],"sourcesContent":["// Core\nimport { ContainerDefaultConfig, ContainerConfigInterface } from 'core/container/config'\nimport { ComponentCore } from 'core/component'\nimport { Tooltip } from 'components/tooltip'\n\nexport interface SingleContainerConfigInterface<Datum> extends ContainerConfigInterface {\n /** Visualization component. Default: `undefined` */\n component?: ComponentCore<Datum>;\n /** Tooltip component. Default: `undefined` */\n tooltip?: Tooltip;\n}\n\nexport const SingleContainerDefaultConfig: SingleContainerConfigInterface<unknown> = {\n ...ContainerDefaultConfig,\n tooltip: undefined,\n}\n"],"names":[],"mappings":";;AAAA;AAYa,MAAA,4BAA4B,GACpC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAA,sBAAsB,KACzB,OAAO,EAAE,SAAS,EAAA;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/containers/single-container/config.ts"],"sourcesContent":["// Core\nimport { ContainerDefaultConfig, ContainerConfigInterface } from 'core/container/config'\nimport { ComponentCore } from 'core/component'\nimport { Tooltip } from 'components/tooltip'\nimport { Annotations } from 'components/annotations'\n\nexport interface SingleContainerConfigInterface<Datum> extends ContainerConfigInterface {\n /** Visualization component. Default: `undefined` */\n component?: ComponentCore<Datum>;\n /** Tooltip component. Default: `undefined` */\n tooltip?: Tooltip;\n /** Annotations component. Default: `undefined` */\n annotations?: Annotations | undefined;\n}\n\nexport const SingleContainerDefaultConfig: SingleContainerConfigInterface<unknown> = {\n ...ContainerDefaultConfig,\n tooltip: undefined,\n annotations: undefined,\n}\n"],"names":[],"mappings":";;AAAA;AAeO,MAAM,4BAA4B,GAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EACpC,sBAAsB,CACzB,EAAA,EAAA,OAAO,EAAE,SAAS,EAClB,WAAW,EAAE,SAAS;;;;"}
@@ -4,9 +4,9 @@ import { ComponentCore } from "../../core/component";
4
4
  import { ComponentConfigInterface } from "../../core/component/config";
5
5
  import { SingleContainerConfigInterface } from './config';
6
6
  export declare class SingleContainer<Data> extends ContainerCore {
7
+ protected _defaultConfig: SingleContainerConfigInterface<Data>;
7
8
  component: ComponentCore<Data>;
8
9
  config: SingleContainerConfigInterface<Data>;
9
- protected _defaultConfig: SingleContainerConfigInterface<Data>;
10
10
  constructor(element: HTMLElement, config?: SingleContainerConfigInterface<Data>, data?: Data);
11
11
  setData(data: Data, preventRender?: boolean): void;
12
12
  updateContainer(containerConfig: SingleContainerConfigInterface<Data>, preventRender?: boolean): void;
@@ -10,6 +10,7 @@ class SingleContainer extends ContainerCore {
10
10
  var _a;
11
11
  super(element);
12
12
  this._defaultConfig = SingleContainerDefaultConfig;
13
+ this.config = this._defaultConfig;
13
14
  if (config) {
14
15
  this.updateContainer(config, true);
15
16
  this.component = config.component;
@@ -43,6 +44,10 @@ class SingleContainer extends ContainerCore {
43
44
  tooltip.setContainer(this._container);
44
45
  tooltip.setComponents([this.component]);
45
46
  }
47
+ const annotations = containerConfig.annotations;
48
+ if (annotations) {
49
+ this.element.appendChild(annotations.element);
50
+ }
46
51
  // Defs
47
52
  this.element.appendChild(this._svgDefs.node());
48
53
  if (!preventRender)
@@ -71,14 +76,18 @@ class SingleContainer extends ContainerCore {
71
76
  return this.width / componentWidth;
72
77
  }
73
78
  _preRender() {
79
+ var _a;
74
80
  super._preRender();
75
81
  this.component.setSize(this.width, this.height, this.containerWidth, this.containerHeight);
82
+ (_a = this.config.annotations) === null || _a === void 0 ? void 0 : _a.setSize(this.width, this.height, this.containerWidth, this.containerHeight);
76
83
  }
77
84
  _render(duration) {
85
+ var _a;
78
86
  const { config, component } = this;
79
87
  super._render(duration);
80
88
  component.g.attr('transform', `translate(${config.margin.left},${config.margin.top})`);
81
89
  component.render(duration);
90
+ (_a = config.annotations) === null || _a === void 0 ? void 0 : _a.render(duration);
82
91
  if (config.tooltip)
83
92
  config.tooltip.update();
84
93
  }
@@ -125,11 +134,12 @@ class SingleContainer extends ContainerCore {
125
134
  (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.hide();
126
135
  }
127
136
  destroy() {
128
- var _a;
137
+ var _a, _b;
129
138
  const { component, config } = this;
130
139
  super.destroy();
131
140
  component === null || component === void 0 ? void 0 : component.destroy();
132
141
  (_a = config.tooltip) === null || _a === void 0 ? void 0 : _a.destroy();
142
+ (_b = config.annotations) === null || _b === void 0 ? void 0 : _b.destroy();
133
143
  }
134
144
  }
135
145
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/containers/single-container/index.ts"],"sourcesContent":["// Global CSS variables (side effects import)\nimport 'styles/index'\n\n// Core\nimport { ContainerCore } from 'core/container'\nimport { ComponentCore } from 'core/component'\nimport { ComponentConfigInterface } from 'core/component/config'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Sizing, ExtendedSizeComponent } from 'types/component'\n\n// Config\nimport { SingleContainerDefaultConfig, SingleContainerConfigInterface } from './config'\n\nexport class SingleContainer<Data> extends ContainerCore {\n public component: ComponentCore<Data>\n public config: SingleContainerConfigInterface<Data>\n protected _defaultConfig = SingleContainerDefaultConfig as SingleContainerConfigInterface<Data>\n\n constructor (element: HTMLElement, config?: SingleContainerConfigInterface<Data>, data?: Data) {\n super(element)\n\n if (config) {\n this.updateContainer(config, true)\n this.component = config.component\n }\n\n if (data) {\n this.setData(data, true)\n }\n\n // Render if component exists and has data\n if (this.component?.datamodel.data) this.render()\n }\n\n public setData (data: Data, preventRender?: boolean): void {\n const { config } = this\n\n if (this.component) this.component.setData(data)\n if (!preventRender) this.render()\n config.tooltip?.hide()\n }\n\n public updateContainer (containerConfig: SingleContainerConfigInterface<Data>, preventRender?: boolean): void {\n super.updateContainer(containerConfig)\n this._removeAllChildren()\n\n this.component = containerConfig.component\n if (containerConfig.sizing) this.component.sizing = containerConfig.sizing\n this.element.appendChild(this.component.element)\n\n const tooltip = containerConfig.tooltip\n if (tooltip) {\n if (!tooltip.hasContainer()) tooltip.setContainer(this._container)\n tooltip.setComponents([this.component])\n }\n\n // Defs\n this.element.appendChild(this._svgDefs.node())\n\n if (!preventRender) this.render()\n }\n\n public updateComponent (componentConfig: ComponentConfigInterface, preventRender?: boolean): void {\n this.component.setConfig(componentConfig)\n if (!preventRender) this.render()\n }\n\n public update (\n containerConfig: SingleContainerConfigInterface<Data>,\n componentConfig?: ComponentConfigInterface,\n data?: Data\n ): void {\n if (containerConfig) this.updateContainer(containerConfig, true)\n if (componentConfig) this.updateComponent(componentConfig, true)\n if (data) this.setData(data, true)\n this.render()\n }\n\n public getFitWidthScale (): number {\n const { config, component } = this\n\n const extendedSizeComponent = component as ExtendedSizeComponent\n if (!extendedSizeComponent.getWidth) return 1\n\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right\n return this.width / componentWidth\n }\n\n protected _preRender (): void {\n super._preRender()\n this.component.setSize(this.width, this.height, this.containerWidth, this.containerHeight)\n }\n\n protected _render (duration?: number): void {\n const { config, component } = this\n super._render(duration)\n\n component.g.attr('transform', `translate(${config.margin.left},${config.margin.top})`)\n component.render(duration)\n\n if (config.tooltip) config.tooltip.update()\n }\n\n // Re-defining the `render()` function to handle different sizing techniques (`Sizing.Extend` and `Sizing.FitWidth`)\n // Not calling `super.render()` because we don't want it to interfere with setting the SVG size here.\n public render (duration = this.config.duration): void {\n const { config, component } = this\n\n if (config.sizing === Sizing.Extend || config.sizing === Sizing.FitWidth) {\n const fitToWidth = config.sizing === Sizing.FitWidth\n const extendedSizeComponent = component as ExtendedSizeComponent\n\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right\n const componentHeight = extendedSizeComponent.getHeight() + config.margin.top + config.margin.bottom\n const scale = fitToWidth ? this.getFitWidthScale() : 1\n\n const currentWidth = this.svg.attr('width')\n const currentHeight = this.svg.attr('height')\n const scaledWidth = componentWidth * scale\n const scaledHeight = componentHeight * scale\n const animated = currentWidth || currentHeight\n\n smartTransition(this.svg, animated ? duration : 0)\n .attr('width', scaledWidth)\n .attr('height', scaledHeight)\n .attr('viewBox', `${0} ${0} ${componentWidth} ${fitToWidth ? scaledHeight : componentHeight}`)\n .attr('preserveAspectRatio', 'xMinYMin')\n } else {\n this.svg\n .attr('width', this.config.width || this.containerWidth)\n .attr('height', this.config.height || this.containerHeight)\n }\n\n // Set up Resize Observer\n if (!this._resizeObserver) this._setUpResizeObserver()\n\n // Schedule the actual rendering in the next frame\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._requestedAnimationFrame = requestAnimationFrame(() => {\n this._preRender()\n this._render(duration)\n })\n }\n\n protected _onResize (): void {\n const { config } = this\n super._onResize()\n config.tooltip?.hide()\n }\n\n public destroy (): void {\n const { component, config } = this\n super.destroy()\n\n component?.destroy()\n config.tooltip?.destroy()\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/containers/single-container/index.ts"],"sourcesContent":["// Global CSS variables (side effects import)\nimport 'styles/index'\n\n// Core\nimport { ContainerCore } from 'core/container'\nimport { ComponentCore } from 'core/component'\nimport { ComponentConfigInterface } from 'core/component/config'\n\n// Utils\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { Sizing, ExtendedSizeComponent } from 'types/component'\n\n// Config\nimport { SingleContainerDefaultConfig, SingleContainerConfigInterface } from './config'\n\nexport class SingleContainer<Data> extends ContainerCore {\n protected _defaultConfig = SingleContainerDefaultConfig as SingleContainerConfigInterface<Data>\n public component: ComponentCore<Data>\n public config: SingleContainerConfigInterface<Data> = this._defaultConfig\n\n constructor (element: HTMLElement, config?: SingleContainerConfigInterface<Data>, data?: Data) {\n super(element)\n\n if (config) {\n this.updateContainer(config, true)\n this.component = config.component\n }\n\n if (data) {\n this.setData(data, true)\n }\n\n // Render if component exists and has data\n if (this.component?.datamodel.data) this.render()\n }\n\n public setData (data: Data, preventRender?: boolean): void {\n const { config } = this\n\n if (this.component) this.component.setData(data)\n if (!preventRender) this.render()\n config.tooltip?.hide()\n }\n\n public updateContainer (containerConfig: SingleContainerConfigInterface<Data>, preventRender?: boolean): void {\n super.updateContainer(containerConfig)\n this._removeAllChildren()\n\n this.component = containerConfig.component\n if (containerConfig.sizing) this.component.sizing = containerConfig.sizing\n this.element.appendChild(this.component.element)\n\n const tooltip = containerConfig.tooltip\n if (tooltip) {\n if (!tooltip.hasContainer()) tooltip.setContainer(this._container)\n tooltip.setComponents([this.component])\n }\n\n const annotations = containerConfig.annotations\n if (annotations) {\n this.element.appendChild(annotations.element)\n }\n\n // Defs\n this.element.appendChild(this._svgDefs.node())\n\n if (!preventRender) this.render()\n }\n\n public updateComponent (componentConfig: ComponentConfigInterface, preventRender?: boolean): void {\n this.component.setConfig(componentConfig)\n if (!preventRender) this.render()\n }\n\n public update (\n containerConfig: SingleContainerConfigInterface<Data>,\n componentConfig?: ComponentConfigInterface,\n data?: Data\n ): void {\n if (containerConfig) this.updateContainer(containerConfig, true)\n if (componentConfig) this.updateComponent(componentConfig, true)\n if (data) this.setData(data, true)\n this.render()\n }\n\n public getFitWidthScale (): number {\n const { config, component } = this\n\n const extendedSizeComponent = component as ExtendedSizeComponent\n if (!extendedSizeComponent.getWidth) return 1\n\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right\n return this.width / componentWidth\n }\n\n protected _preRender (): void {\n super._preRender()\n this.component.setSize(this.width, this.height, this.containerWidth, this.containerHeight)\n this.config.annotations?.setSize(this.width, this.height, this.containerWidth, this.containerHeight)\n }\n\n protected _render (duration?: number): void {\n const { config, component } = this\n super._render(duration)\n\n component.g.attr('transform', `translate(${config.margin.left},${config.margin.top})`)\n component.render(duration)\n config.annotations?.render(duration)\n\n if (config.tooltip) config.tooltip.update()\n }\n\n // Re-defining the `render()` function to handle different sizing techniques (`Sizing.Extend` and `Sizing.FitWidth`)\n // Not calling `super.render()` because we don't want it to interfere with setting the SVG size here.\n public render (duration = this.config.duration): void {\n const { config, component } = this\n\n if (config.sizing === Sizing.Extend || config.sizing === Sizing.FitWidth) {\n const fitToWidth = config.sizing === Sizing.FitWidth\n const extendedSizeComponent = component as ExtendedSizeComponent\n\n const componentWidth = extendedSizeComponent.getWidth() + config.margin.left + config.margin.right\n const componentHeight = extendedSizeComponent.getHeight() + config.margin.top + config.margin.bottom\n const scale = fitToWidth ? this.getFitWidthScale() : 1\n\n const currentWidth = this.svg.attr('width')\n const currentHeight = this.svg.attr('height')\n const scaledWidth = componentWidth * scale\n const scaledHeight = componentHeight * scale\n const animated = currentWidth || currentHeight\n\n smartTransition(this.svg, animated ? duration : 0)\n .attr('width', scaledWidth)\n .attr('height', scaledHeight)\n .attr('viewBox', `${0} ${0} ${componentWidth} ${fitToWidth ? scaledHeight : componentHeight}`)\n .attr('preserveAspectRatio', 'xMinYMin')\n } else {\n this.svg\n .attr('width', this.config.width || this.containerWidth)\n .attr('height', this.config.height || this.containerHeight)\n }\n\n // Set up Resize Observer\n if (!this._resizeObserver) this._setUpResizeObserver()\n\n // Schedule the actual rendering in the next frame\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._requestedAnimationFrame = requestAnimationFrame(() => {\n this._preRender()\n this._render(duration)\n })\n }\n\n protected _onResize (): void {\n const { config } = this\n super._onResize()\n config.tooltip?.hide()\n }\n\n public destroy (): void {\n const { component, config } = this\n super.destroy()\n\n component?.destroy()\n config.tooltip?.destroy()\n config.annotations?.destroy()\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { XYComponentCore } from "../../core/xy-component";
2
2
  import { ContainerConfigInterface } from "../../core/container/config";
3
+ import { Annotations } from "../../components/annotations";
3
4
  import { Tooltip } from "../../components/tooltip";
4
5
  import { Axis } from "../../components/axis";
5
6
  import { Crosshair } from "../../components/crosshair";
@@ -77,5 +78,7 @@ export interface XYContainerConfigInterface<Datum> extends ContainerConfigInterf
77
78
  preventEmptyDomain?: boolean | null;
78
79
  /** Sets the Y scale domain based on the current X scale domain (not the whole dataset). Default: `false` */
79
80
  scaleByDomain?: boolean;
81
+ /** Annotations component. Default: `undefined` */
82
+ annotations?: Annotations | undefined;
80
83
  }
81
84
  export declare const XYContainerDefaultConfig: XYContainerConfigInterface<unknown>;
@@ -1,7 +1,7 @@
1
1
  import { ContainerDefaultConfig } from '../../core/container/config.js';
2
2
  import { Direction } from '../../types/direction.js';
3
3
 
4
- const XYContainerDefaultConfig = Object.assign(Object.assign({}, ContainerDefaultConfig), { components: [], tooltip: undefined, crosshair: undefined, xAxis: undefined, yAxis: undefined, autoMargin: true, xScale: undefined, xDomain: undefined, xDomainMinConstraint: undefined, xDomainMaxConstraint: undefined, xRange: undefined, yScale: undefined, yDomain: undefined, yDomainMinConstraint: undefined, yDomainMaxConstraint: undefined, yRange: undefined, yDirection: Direction.North, preventEmptyDomain: null, scaleByDomain: false });
4
+ const XYContainerDefaultConfig = Object.assign(Object.assign({}, ContainerDefaultConfig), { components: [], tooltip: undefined, crosshair: undefined, annotations: undefined, xAxis: undefined, yAxis: undefined, autoMargin: true, xScale: undefined, xDomain: undefined, xDomainMinConstraint: undefined, xDomainMaxConstraint: undefined, xRange: undefined, yScale: undefined, yDomain: undefined, yDomainMinConstraint: undefined, yDomainMaxConstraint: undefined, yRange: undefined, yDirection: Direction.North, preventEmptyDomain: null, scaleByDomain: false });
5
5
 
6
6
  export { XYContainerDefaultConfig };
7
7
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../src/containers/xy-container/config.ts"],"sourcesContent":["// Core\nimport { XYComponentCore } from 'core/xy-component'\nimport { ContainerDefaultConfig, ContainerConfigInterface } from 'core/container/config'\nimport { Tooltip } from 'components/tooltip'\n\n// Components\nimport { Axis } from 'components/axis'\nimport { Crosshair } from 'components/crosshair'\n\n// Types\nimport { ContinuousScale } from 'types/scale'\nimport { Direction } from 'types/direction'\n\nexport interface XYContainerConfigInterface<Datum> extends ContainerConfigInterface {\n /** An array of visualization components. Default: `[]` */\n components?: XYComponentCore<Datum>[];\n\n /** Scale for X dimension, e.g. Scale.scaleLinear().\n * If set, this value will override the components' xScale and they will have a single shared xScale instance.\n * By default the components have their own scale instances but their `domain` and `range` values are synchronized.\n * Default: `undefined` */\n xScale?: ContinuousScale;\n /** Scale domain (data extent) for X dimension. By default this value is calculated automatically based on data. */\n xDomain?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the X scale domain. Useful when the data is plotted along the X axis.\n * For example, imagine that you have a chart with dynamic data that has negative values. When values are small\n * (let's say in the range of [-0.01, 0]), you might still want the chart to display some meaningful value range (e.g. [-1, 0]). That can\n * be achieved by setting `xDomainMinConstraint` to `[undefined, -1]`. In addition to that, if you want to cut off the\n * values that are too low (let's say lower than -100), you can set the constraint to `[-100, -1]`\n * Default: `undefined` */\n xDomainMinConstraint?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the X scale domain. Useful when the data is plotted along the X axis.\n * For example, imagine that you have a chart with dynamic data. When values are small\n * (let's say < 0.01), you might still want the chart to display some meaningful value range (e.g. [0, 1]). That can\n * be achieved by setting `xDomainMaxConstraint` to `[1, undefined]`. In addition to that, if you want to cut off the\n * values that are too high (let's say higher than 100), you can set the constraint to `[1, 100]`\n * Default: `undefined` */\n xDomainMaxConstraint?: [number | undefined, number | undefined];\n /** Force set the X scale range (in the screen space). By default the range is calculated automatically based on the\n * chart's set up */\n xRange?: [number, number];\n\n /** Scale for Y dimension, e.g. Scale.scaleLinear().\n * If set, this value will override the components' yScale and they will have a single shared yScale instance.\n * By default the components have their own scale instances but their `domain` and `range` values are synchronized.\n * Default: `undefined` */\n yScale?: ContinuousScale;\n /** Scale domain (data extent) for Y dimension. By default this value is calculated automatically based on data. */\n yDomain?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the Y scale domain.\n * For example, imagine that you have a chart with dynamic data that has negative values. When values are small\n * (let's say in the range of [-0.01, 0]), you might still want the chart to display some meaningful value range (e.g. [-1, 0]). That can\n * be achieved by setting `yDomainMinConstraint` to `[undefined, -1]`. In addition to that, if you want to cut off the\n * values that are too low (let's say lower than -100), you can set the constraint to `[-100, -1]`\n * Default: `undefined` */\n yDomainMinConstraint?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the Y scale domain.\n * For example, imagine that you have a chart with dynamic data. When values are small\n * (let's say < 0.01), you might still want the chart to display some meaningful value range (e.g. [0, 1]). That can\n * be achieved by setting `yDomainMaxConstraint` to `[1, undefined]`. In addition to that, if you want to cut off the\n * values that are too high (let's say higher than 100), you can set the constraint to `[1, 100]`\n * Default: `undefined` */\n yDomainMaxConstraint?: [number | undefined, number | undefined];\n /** Force set the Y scale range (in the screen space). By default the range is calculated automatically based on the\n * chart's set up */\n yRange?: [number, number];\n /** Y Axis direction. Default: `Direction.North` */\n yDirection?: Direction.South | Direction.North | string;\n\n /** X Axis component instance. Default: `undefined` */\n xAxis?: Axis<Datum>;\n /** Y Axis component instance. Default: `undefined` */\n yAxis?: Axis<Datum>;\n /** Enables automatic calculation of chart margins based on the size of the axes. Default: `true` */\n autoMargin?: boolean;\n /** Tooltip component. Default: `undefined` */\n tooltip?: Tooltip | undefined;\n /** Crosshair component. Default: `undefined` */\n crosshair?: Crosshair<Datum> | undefined;\n /** Prevents the chart domain from being empty (when domain's min and max values are equal).\n * That usually happens when all the data values are equal or when there's no data.\n * Setting to `true` will automatically extend the domain by `+1` when the domain is empty (domain start equals domain end).\n * Setting to `null` will extend the empty X domain, but only when there's no data.\n * Setting to `false` will keep the domain as is.\n * Default: `null` */\n preventEmptyDomain?: boolean | null;\n /** Sets the Y scale domain based on the current X scale domain (not the whole dataset). Default: `false` */\n scaleByDomain?: boolean;\n}\n\n\nexport const XYContainerDefaultConfig: XYContainerConfigInterface<unknown> = {\n ...ContainerDefaultConfig,\n components: [],\n tooltip: undefined,\n crosshair: undefined,\n xAxis: undefined,\n yAxis: undefined,\n autoMargin: true,\n\n xScale: undefined,\n xDomain: undefined,\n xDomainMinConstraint: undefined,\n xDomainMaxConstraint: undefined,\n xRange: undefined,\n\n yScale: undefined,\n yDomain: undefined,\n yDomainMinConstraint: undefined,\n yDomainMaxConstraint: undefined,\n yRange: undefined,\n yDirection: Direction.North,\n\n preventEmptyDomain: null,\n scaleByDomain: false,\n}\n\n"],"names":[],"mappings":";;;AA2Fa,MAAA,wBAAwB,mCAChC,sBAAsB,CAAA,EAAA,EACzB,UAAU,EAAE,EAAE,EACd,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,IAAI,EAEhB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAClB,oBAAoB,EAAE,SAAS,EAC/B,oBAAoB,EAAE,SAAS,EAC/B,MAAM,EAAE,SAAS,EAEjB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAClB,oBAAoB,EAAE,SAAS,EAC/B,oBAAoB,EAAE,SAAS,EAC/B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,CAAC,KAAK,EAE3B,kBAAkB,EAAE,IAAI,EACxB,aAAa,EAAE,KAAK;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../src/containers/xy-container/config.ts"],"sourcesContent":["// Core\nimport { XYComponentCore } from 'core/xy-component'\nimport { ContainerDefaultConfig, ContainerConfigInterface } from 'core/container/config'\n\n// Components\nimport { Annotations } from 'components/annotations'\nimport { Tooltip } from 'components/tooltip'\nimport { Axis } from 'components/axis'\nimport { Crosshair } from 'components/crosshair'\n\n// Types\nimport { ContinuousScale } from 'types/scale'\nimport { Direction } from 'types/direction'\n\nexport interface XYContainerConfigInterface<Datum> extends ContainerConfigInterface {\n /** An array of visualization components. Default: `[]` */\n components?: XYComponentCore<Datum>[];\n\n /** Scale for X dimension, e.g. Scale.scaleLinear().\n * If set, this value will override the components' xScale and they will have a single shared xScale instance.\n * By default the components have their own scale instances but their `domain` and `range` values are synchronized.\n * Default: `undefined` */\n xScale?: ContinuousScale;\n /** Scale domain (data extent) for X dimension. By default this value is calculated automatically based on data. */\n xDomain?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the X scale domain. Useful when the data is plotted along the X axis.\n * For example, imagine that you have a chart with dynamic data that has negative values. When values are small\n * (let's say in the range of [-0.01, 0]), you might still want the chart to display some meaningful value range (e.g. [-1, 0]). That can\n * be achieved by setting `xDomainMinConstraint` to `[undefined, -1]`. In addition to that, if you want to cut off the\n * values that are too low (let's say lower than -100), you can set the constraint to `[-100, -1]`\n * Default: `undefined` */\n xDomainMinConstraint?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the X scale domain. Useful when the data is plotted along the X axis.\n * For example, imagine that you have a chart with dynamic data. When values are small\n * (let's say < 0.01), you might still want the chart to display some meaningful value range (e.g. [0, 1]). That can\n * be achieved by setting `xDomainMaxConstraint` to `[1, undefined]`. In addition to that, if you want to cut off the\n * values that are too high (let's say higher than 100), you can set the constraint to `[1, 100]`\n * Default: `undefined` */\n xDomainMaxConstraint?: [number | undefined, number | undefined];\n /** Force set the X scale range (in the screen space). By default the range is calculated automatically based on the\n * chart's set up */\n xRange?: [number, number];\n\n /** Scale for Y dimension, e.g. Scale.scaleLinear().\n * If set, this value will override the components' yScale and they will have a single shared yScale instance.\n * By default the components have their own scale instances but their `domain` and `range` values are synchronized.\n * Default: `undefined` */\n yScale?: ContinuousScale;\n /** Scale domain (data extent) for Y dimension. By default this value is calculated automatically based on data. */\n yDomain?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the Y scale domain.\n * For example, imagine that you have a chart with dynamic data that has negative values. When values are small\n * (let's say in the range of [-0.01, 0]), you might still want the chart to display some meaningful value range (e.g. [-1, 0]). That can\n * be achieved by setting `yDomainMinConstraint` to `[undefined, -1]`. In addition to that, if you want to cut off the\n * values that are too low (let's say lower than -100), you can set the constraint to `[-100, -1]`\n * Default: `undefined` */\n yDomainMinConstraint?: [number | undefined, number | undefined];\n /** Constraint the minimum value of the Y scale domain.\n * For example, imagine that you have a chart with dynamic data. When values are small\n * (let's say < 0.01), you might still want the chart to display some meaningful value range (e.g. [0, 1]). That can\n * be achieved by setting `yDomainMaxConstraint` to `[1, undefined]`. In addition to that, if you want to cut off the\n * values that are too high (let's say higher than 100), you can set the constraint to `[1, 100]`\n * Default: `undefined` */\n yDomainMaxConstraint?: [number | undefined, number | undefined];\n /** Force set the Y scale range (in the screen space). By default the range is calculated automatically based on the\n * chart's set up */\n yRange?: [number, number];\n /** Y Axis direction. Default: `Direction.North` */\n yDirection?: Direction.South | Direction.North | string;\n\n /** X Axis component instance. Default: `undefined` */\n xAxis?: Axis<Datum>;\n /** Y Axis component instance. Default: `undefined` */\n yAxis?: Axis<Datum>;\n /** Enables automatic calculation of chart margins based on the size of the axes. Default: `true` */\n autoMargin?: boolean;\n /** Tooltip component. Default: `undefined` */\n tooltip?: Tooltip | undefined;\n /** Crosshair component. Default: `undefined` */\n crosshair?: Crosshair<Datum> | undefined;\n /** Prevents the chart domain from being empty (when domain's min and max values are equal).\n * That usually happens when all the data values are equal or when there's no data.\n * Setting to `true` will automatically extend the domain by `+1` when the domain is empty (domain start equals domain end).\n * Setting to `null` will extend the empty X domain, but only when there's no data.\n * Setting to `false` will keep the domain as is.\n * Default: `null` */\n preventEmptyDomain?: boolean | null;\n /** Sets the Y scale domain based on the current X scale domain (not the whole dataset). Default: `false` */\n scaleByDomain?: boolean;\n /** Annotations component. Default: `undefined` */\n annotations?: Annotations | undefined;\n}\n\n\nexport const XYContainerDefaultConfig: XYContainerConfigInterface<unknown> = {\n ...ContainerDefaultConfig,\n components: [],\n tooltip: undefined,\n crosshair: undefined,\n annotations: undefined,\n xAxis: undefined,\n yAxis: undefined,\n autoMargin: true,\n\n xScale: undefined,\n xDomain: undefined,\n xDomainMinConstraint: undefined,\n xDomainMaxConstraint: undefined,\n xRange: undefined,\n\n yScale: undefined,\n yDomain: undefined,\n yDomainMinConstraint: undefined,\n yDomainMaxConstraint: undefined,\n yRange: undefined,\n yDirection: Direction.North,\n\n preventEmptyDomain: null,\n scaleByDomain: false,\n}\n\n"],"names":[],"mappings":";;;AA8Fa,MAAA,wBAAwB,mCAChC,sBAAsB,CAAA,EAAA,EACzB,UAAU,EAAE,EAAE,EACd,OAAO,EAAE,SAAS,EAClB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,IAAI,EAEhB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAClB,oBAAoB,EAAE,SAAS,EAC/B,oBAAoB,EAAE,SAAS,EAC/B,MAAM,EAAE,SAAS,EAEjB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,SAAS,EAClB,oBAAoB,EAAE,SAAS,EAC/B,oBAAoB,EAAE,SAAS,EAC/B,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,CAAC,KAAK,EAE3B,kBAAkB,EAAE,IAAI,EACxB,aAAa,EAAE,KAAK;;;;"}
@@ -8,10 +8,10 @@ import { XYContainerConfigInterface } from './config';
8
8
  import { AreaConfigInterface, BrushConfigInterface, LineConfigInterface, ScatterConfigInterface, StackedBarConfigInterface, TimelineConfigInterface } from '../../components';
9
9
  export declare type XYConfigInterface<Datum> = XYComponentConfigInterface<Datum> | StackedBarConfigInterface<Datum> | LineConfigInterface<Datum> | ScatterConfigInterface<Datum> | BrushConfigInterface<Datum> | TimelineConfigInterface<Datum> | AreaConfigInterface<Datum>;
10
10
  export declare class XYContainer<Datum> extends ContainerCore {
11
- datamodel: CoreDataModel<Datum[]>;
12
- config: XYContainerConfigInterface<Datum>;
13
11
  protected _defaultConfig: XYContainerConfigInterface<Datum>;
14
12
  protected _svgDefs: Selection<SVGDefsElement, unknown, null, undefined>;
13
+ datamodel: CoreDataModel<Datum[]>;
14
+ config: XYContainerConfigInterface<Datum>;
15
15
  private _clipPath;
16
16
  private _clipPathId;
17
17
  private _axisMargin;