@unovis/ts 1.5.0-alpha.0 → 1.5.0-alpha.2

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.
@@ -24,6 +24,7 @@ function createLinks(selection) {
24
24
  .attr('class', linkArrow);
25
25
  selection.append('g')
26
26
  .attr('class', flowGroup)
27
+ .style('opacity', 0)
27
28
  .selectAll(`.${flowCircle}`)
28
29
  .data(range(0, 6)).enter()
29
30
  .append('circle')
@@ -122,8 +123,7 @@ function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId)
122
123
  // Particle Flow
123
124
  flowGroup$1
124
125
  .attr('transform', linkShiftTransform)
125
- .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')
126
- .style('opacity', 0);
126
+ .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none');
127
127
  flowGroup$1
128
128
  .selectAll(`.${flowCircle}`)
129
129
  .attr('r', linkFlowParticleSize / scale)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { range } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport toPx from 'to-px'\n\n// Utils\nimport { throttle, getValue, getNumber, getBoolean } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getCSSVariableValueInPixels } from 'utils/misc'\nimport { estimateStringPixelLength } from 'utils/text'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphCircleLabel, GraphLink, GraphLinkArrowStyle, GraphLinkStyle } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { getX, getY } from '../node/helper'\nimport {\n getLinkShiftTransform,\n getLinkStrokeWidth,\n getLinkBandWidth,\n getLinkColor,\n getLinkLabelTextColor,\n getLinkArrowStyle,\n LINK_MARKER_WIDTH,\n} from './helper'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as linkSelectors from './style'\n\n\nexport function createLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n): void {\n selection.attr('opacity', 0)\n\n selection.append('path')\n .attr('class', linkSelectors.linkSupport)\n\n selection.append('path')\n .attr('class', linkSelectors.link)\n\n selection.append('path')\n .attr('class', linkSelectors.linkBand)\n\n selection.append('use')\n .attr('class', linkSelectors.linkArrow)\n\n selection.append('g')\n .attr('class', linkSelectors.flowGroup)\n .selectAll(`.${linkSelectors.flowCircle}`)\n .data(range(0, 6)).enter()\n .append('circle')\n .attr('class', linkSelectors.flowCircle)\n\n const linkLabelGroup = selection.append('g')\n .attr('class', linkSelectors.linkLabelGroup)\n\n linkLabelGroup.append('rect')\n .attr('class', linkSelectors.linkLabelBackground)\n\n linkLabelGroup.append('text')\n .attr('class', linkSelectors.linkLabelContent)\n}\n\nexport function updateSelectedLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const isGreyedOut = (d: GraphLink<N, L>, i: number): boolean => getBoolean(d, config.linkDisabled, i) || d._state.greyout\n selection\n .classed(linkSelectors.greyedOutLink, (d, i) => isGreyedOut(d, i))\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select(element)\n group.select(`.${linkSelectors.link}`)\n group.select(`.${linkSelectors.linkBand}`)\n const linkSupport = group.select(`.${linkSelectors.linkSupport}`)\n\n linkSupport\n .style('stroke-opacity', (d._state.hovered || d._state.selected) ? 0.2 : 0)\n .style('stroke-width',\n d._state.selected\n ? getLinkBandWidth(d, scale, config) + 5\n : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null\n )\n })\n}\n\nexport function updateLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1,\n getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string\n): void {\n const { linkFlowParticleSize, linkStyle, linkFlow, linkLabel, linkLabelShiftFromCenter } = config\n if (!selection.size()) return\n\n selection\n .classed(\n linkSelectors.linkDashed,\n d => getValue<GraphLink<N, L>, GraphLinkStyle>(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed\n )\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const link = linkGroup.select<SVGPathElement>(`.${linkSelectors.link}`)\n const linkBand = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkBand}`)\n const linkSupport = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`)\n const linkArrow = linkGroup.select<SVGUseElement>(`.${linkSelectors.linkArrow}`)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n const linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelDatum = getValue<GraphLink<N, L>, GraphCircleLabel>(d, linkLabel, d._indexGlobal)\n const linkLabelText = linkLabelDatum ? linkLabelDatum.text?.toString() : undefined\n\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n const curvature = getNumber(d, config.linkCurvature, i) ?? 0\n const cp1x = x1 + (x2 - x1) * 0.5 * curvature\n const cp1y = y1 + (y2 - y1) * 0.0 * curvature\n const cp2x = x1 + (x2 - x1) * 0.5 * curvature\n const cp2y = y1 + (y2 - y1) * 1.0 * curvature\n\n const pathData = `M${x1},${y1} C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`\n link\n .attr('class', linkSelectors.link)\n .style('stroke-width', getLinkStrokeWidth(d, scale, config))\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n\n smartTransition(link, duration)\n .attr('d', pathData)\n\n linkBand\n .attr('class', linkSelectors.linkBand)\n .attr('transform', linkShiftTransform)\n .style('stroke-width', getLinkBandWidth(d, scale, config))\n .style('stroke', linkColor)\n\n smartTransition(linkBand, duration)\n .attr('d', pathData)\n\n linkSupport\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n .attr('d', pathData)\n\n // Arrow\n const linkArrowStyle = getLinkArrowStyle(d, config)\n const linkPathElement = linkSupport.node()\n const pathLength = linkPathElement.getTotalLength()\n if (linkArrowStyle) {\n const arrowPos = pathLength * (linkLabelText ? 0.65 : 0.5)\n const p1 = linkPathElement.getPointAtLength(arrowPos)\n const p2 = linkPathElement.getPointAtLength(arrowPos + 1) // A point very close to p1\n\n // Calculate the angle for the arrowhead\n const angle = Math.atan2(p2.y - p1.y, p2.x - p1.x) * (180 / Math.PI)\n const arrowWasShownBefore = linkArrow.attr('href')\n linkArrow\n .attr('href', `#${getLinkArrowDefId(linkArrowStyle)}`)\n\n smartTransition(linkArrow, arrowWasShownBefore ? duration : 0)\n .attr('fill', linkColor)\n .attr('transform', `translate(${p1.x}, ${p1.y}) rotate(${angle})`)\n } else {\n linkArrow.attr('href', null)\n }\n\n // Particle Flow\n flowGroup\n .attr('transform', linkShiftTransform)\n .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')\n .style('opacity', 0)\n\n flowGroup\n .selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n .style('fill', linkColor)\n\n smartTransition(flowGroup, duration)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n // Labels\n const linkLabelGroup = linkGroup.select<SVGGElement>(`.${linkSelectors.linkLabelGroup}`)\n\n if (linkLabelText) {\n const linkMarkerWidth = linkArrowStyle ? LINK_MARKER_WIDTH * 2 : 0\n const linkLabelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -linkMarkerWidth + 4 : 0\n const linkLabelPos = linkPathElement.getPointAtLength(pathLength / 2 + linkLabelShift)\n const linkLabelTranslate = `translate(${linkLabelPos.x}, ${linkLabelPos.y})`\n const linkLabelBackground = linkLabelGroup.select<SVGRectElement>(`.${linkSelectors.linkLabelBackground}`)\n const linkLabelContent = linkLabelGroup.select<SVGTextElement>(`.${linkSelectors.linkLabelContent}`)\n\n // If the label was hidden or didn't have text before, we need to set the initial position\n if (!linkLabelContent.text() || linkLabelContent.attr('hidden')) {\n linkLabelGroup.attr('transform', linkLabelTranslate)\n }\n\n linkLabelGroup.attr('hidden', null)\n .style('cursor', linkLabelDatum.cursor)\n\n smartTransition(linkLabelGroup, duration)\n .attr('transform', linkLabelTranslate)\n .style('opacity', 1)\n\n linkLabelContent\n .text(linkLabelText)\n .attr('dy', '0.1em')\n .style('font-size', linkLabelDatum.fontSize)\n .style('fill', linkLabelDatum.textColor ?? getLinkLabelTextColor(linkLabelDatum))\n\n const shouldBeRenderedAsCircle = linkLabelText.length <= 2\n const linkLabelPaddingVertical = 4\n const linkLabelPaddingHorizontal = shouldBeRenderedAsCircle ? linkLabelPaddingVertical : 8\n const linkLabelFontSize = toPx(linkLabelDatum.fontSize) ?? getCSSVariableValueInPixels('var(--vis-graph-link-label-font-size)', linkLabelContent.node())\n const linkLabelWidthPx = estimateStringPixelLength(linkLabelText, linkLabelFontSize)\n const linkLabelBackgroundBorderRadius = linkLabelDatum.radius ?? (shouldBeRenderedAsCircle ? linkLabelFontSize : 4)\n const linkLabelBackgroundWidth = (shouldBeRenderedAsCircle ? linkLabelFontSize : linkLabelWidthPx)\n linkLabelBackground\n .attr('x', -linkLabelBackgroundWidth / 2 - linkLabelPaddingHorizontal)\n .attr('y', -linkLabelFontSize / 2 - linkLabelPaddingVertical)\n .attr('width', linkLabelBackgroundWidth + linkLabelPaddingHorizontal * 2)\n .attr('height', linkLabelFontSize + linkLabelPaddingVertical * 2)\n .attr('rx', linkLabelBackgroundBorderRadius)\n .style('fill', linkLabelDatum.color)\n } else {\n linkLabelGroup.attr('hidden', true)\n }\n })\n\n // Pointer Events\n if (duration > 0) {\n selection.attr('pointer-events', 'none')\n const t = smartTransition(selection, duration) as Transition<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n t\n .attr('opacity', 1)\n .on('end interrupt', (d, i, elements) => {\n select(elements[i])\n .attr('pointer-events', 'stroke')\n .attr('opacity', 1)\n })\n } else {\n selection.attr('opacity', 1)\n }\n\n updateSelectedLinks(selection, config, scale)\n}\n\nexport function removeLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .remove()\n}\n\nexport function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const { linkFlow } = config\n if (scale < ZoomLevel.Level2) return\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n const linkPathElement = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`).node()\n const pathLength = linkPathElement.getTotalLength()\n\n if (!getBoolean(d, linkFlow, d._indexGlobal)) return\n const t = d._state.flowAnimTime\n const circles = flowGroup.selectAll(`.${linkSelectors.flowCircle}`)\n\n circles\n .attr('transform', index => {\n const tt = (t + (+index) / (circles.size() - 1)) % 1\n const p = linkPathElement.getPointAtLength(tt * pathLength)\n return `translate(${p.x}, ${p.y})`\n })\n })\n}\n\nexport function zoomLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const { linkFlowParticleSize } = config\n\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n selection.selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n\n const linkElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.link}`)\n linkElements\n .style('stroke-width', d => getLinkStrokeWidth(d, scale, config))\n\n const linkBandElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.linkBand}`)\n linkBandElements\n .style('stroke-width', d => getLinkBandWidth(d, scale, config))\n}\n\nexport const zoomLinksThrottled = throttle(zoomLinks, 500)\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.linkArrow","linkSelectors.flowGroup","linkSelectors.flowCircle","linkLabelGroup","linkSelectors.linkLabelGroup","linkSelectors.linkLabelBackground","linkSelectors.linkLabelContent","linkSelectors.greyedOutLink","linkSupport","linkSelectors.linkDashed","link","linkBand","linkArrow","flowGroup","linkLabelBackground","linkLabelContent","generalSelectors.zoomOutLevel2"],"mappings":";;;;;;;;;;;;;;AAsCM,SAAU,WAAW,CACzB,SAAwE,EAAA;AAExE,IAAA,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAE5B,IAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACrB,SAAA,IAAI,CAAC,OAAO,EAAEA,WAAyB,CAAC,CAAA;AAE3C,IAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACrB,SAAA,IAAI,CAAC,OAAO,EAAEC,IAAkB,CAAC,CAAA;AAEpC,IAAA,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AACrB,SAAA,IAAI,CAAC,OAAO,EAAEC,QAAsB,CAAC,CAAA;AAExC,IAAA,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;AACpB,SAAA,IAAI,CAAC,OAAO,EAAEC,SAAuB,CAAC,CAAA;AAEzC,IAAA,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AAClB,SAAA,IAAI,CAAC,OAAO,EAAEC,SAAuB,CAAC;AACtC,SAAA,SAAS,CAAC,CAAI,CAAA,EAAAC,UAAwB,EAAE,CAAC;SACzC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;SACzB,MAAM,CAAC,QAAQ,CAAC;AAChB,SAAA,IAAI,CAAC,OAAO,EAAEA,UAAwB,CAAC,CAAA;AAE1C,IAAA,MAAMC,gBAAc,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC;AACzC,SAAA,IAAI,CAAC,OAAO,EAAEC,cAA4B,CAAC,CAAA;AAE9C,IAAAD,gBAAc,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1B,SAAA,IAAI,CAAC,OAAO,EAAEE,mBAAiC,CAAC,CAAA;AAEnD,IAAAF,gBAAc,CAAC,MAAM,CAAC,MAAM,CAAC;AAC1B,SAAA,IAAI,CAAC,OAAO,EAAEG,gBAA8B,CAAC,CAAA;AAClD,CAAC;SAEe,mBAAmB,CACjC,SAAwE,EACxE,MAAkC,EAClC,KAAa,EAAA;IAEb,MAAM,WAAW,GAAG,CAAC,CAAkB,EAAE,CAAS,KAAc,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;IACzH,SAAS;AACN,SAAA,OAAO,CAACC,aAA2B,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAEpE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AAChC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;QAC7B,KAAK,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIT,IAAkB,CAAE,CAAA,CAAC,CAAA;QACtC,KAAK,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIC,QAAsB,CAAE,CAAA,CAAC,CAAA;AAC1C,QAAA,MAAMS,aAAW,GAAG,KAAK,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAX,WAAyB,CAAE,CAAA,CAAC,CAAA;QAEjEW,aAAW;aACR,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC,CAAC;AAC1E,aAAA,KAAK,CAAC,cAAc,EACnB,CAAC,CAAC,MAAM,CAAC,QAAQ;cACb,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;cACtC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CACtE,CAAA;AACL,KAAC,CAAC,CAAA;AACJ,CAAC;AAEe,SAAA,WAAW,CACzB,SAAwE,EACxE,MAAkC,EAClC,QAAgB,EAChB,KAAK,GAAG,CAAC,EACT,iBAAqE,EAAA;AAErE,IAAA,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,wBAAwB,EAAE,GAAG,MAAM,CAAA;AACjG,IAAA,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QAAE,OAAM;IAE7B,SAAS;SACN,OAAO,CACNC,UAAwB,EACxB,CAAC,IAAI,QAAQ,CAAkC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,KAAK,cAAc,CAAC,MAAM,CACvG,CAAA;IAEH,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;;AAChC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AACjC,QAAA,MAAMC,MAAI,GAAG,SAAS,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAZ,IAAkB,CAAE,CAAA,CAAC,CAAA;AACvE,QAAA,MAAMa,UAAQ,GAAG,SAAS,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAZ,QAAsB,CAAE,CAAA,CAAC,CAAA;AAC/E,QAAA,MAAMS,aAAW,GAAG,SAAS,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAX,WAAyB,CAAE,CAAA,CAAC,CAAA;AACrF,QAAA,MAAMe,WAAS,GAAG,SAAS,CAAC,MAAM,CAAgB,CAAI,CAAA,EAAAZ,SAAuB,CAAE,CAAA,CAAC,CAAA;AAChF,QAAA,MAAMa,WAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAZ,SAAuB,CAAE,CAAA,CAAC,CAAA;QACjE,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;QACzC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAC/E,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAoC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,CAAA;AAChG,QAAA,MAAM,aAAa,GAAG,cAAc,GAAG,CAAA,EAAA,GAAA,cAAc,CAAC,IAAI,0CAAE,QAAQ,EAAE,GAAG,SAAS,CAAA;QAElF,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QACzB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzB,QAAA,MAAM,SAAS,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAA;AAC5D,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,SAAS,CAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,SAAS,CAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,SAAS,CAAA;AAC7C,QAAA,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,GAAG,SAAS,CAAA;AAE7C,QAAA,MAAM,QAAQ,GAAG,CAAA,CAAA,EAAI,EAAE,CAAI,CAAA,EAAA,EAAE,KAAK,IAAI,CAAA,CAAA,EAAI,IAAI,CAAI,CAAA,EAAA,IAAI,IAAI,IAAI,CAAA,CAAA,EAAI,EAAE,CAAI,CAAA,EAAA,EAAE,EAAE,CAAA;QAC5ES,MAAI;AACD,aAAA,IAAI,CAAC,OAAO,EAAEZ,IAAkB,CAAC;aACjC,KAAK,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC3D,aAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC1B,aAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;AAExC,QAAA,eAAe,CAACY,MAAI,EAAE,QAAQ,CAAC;AAC5B,aAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAEtBC,UAAQ;AACL,aAAA,IAAI,CAAC,OAAO,EAAEZ,QAAsB,CAAC;AACrC,aAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;aACrC,KAAK,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AACzD,aAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;AAE7B,QAAA,eAAe,CAACY,UAAQ,EAAE,QAAQ,CAAC;AAChC,aAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QAEtBH,aAAW;AACR,aAAA,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC1B,aAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;AACrC,aAAA,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;;QAGtB,MAAM,cAAc,GAAG,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACnD,QAAA,MAAM,eAAe,GAAGA,aAAW,CAAC,IAAI,EAAE,CAAA;AAC1C,QAAA,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,EAAE,CAAA;AACnD,QAAA,IAAI,cAAc,EAAE;AAClB,YAAA,MAAM,QAAQ,GAAG,UAAU,IAAI,aAAa,GAAG,IAAI,GAAG,GAAG,CAAC,CAAA;YAC1D,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAA;AACrD,YAAA,MAAM,EAAE,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAA;;AAGzD,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;YACpE,MAAM,mBAAmB,GAAGI,WAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAClDA,WAAS;iBACN,IAAI,CAAC,MAAM,EAAE,CAAI,CAAA,EAAA,iBAAiB,CAAC,cAAc,CAAC,CAAE,CAAA,CAAC,CAAA;AAExD,YAAA,eAAe,CAACA,WAAS,EAAE,mBAAmB,GAAG,QAAQ,GAAG,CAAC,CAAC;AAC3D,iBAAA,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AACvB,iBAAA,IAAI,CAAC,WAAW,EAAE,CAAA,UAAA,EAAa,EAAE,CAAC,CAAC,CAAK,EAAA,EAAA,EAAE,CAAC,CAAC,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA;AACrE,SAAA;AAAM,aAAA;AACL,YAAAA,WAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;AAC7B,SAAA;;QAGDC,WAAS;AACN,aAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;aACrC,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;AACzE,aAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAEtBA,WAAS;AACN,aAAA,SAAS,CAAC,CAAI,CAAA,EAAAX,UAAwB,EAAE,CAAC;AACzC,aAAA,IAAI,CAAC,GAAG,EAAE,oBAAoB,GAAG,KAAK,CAAC;AACvC,aAAA,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;AAE3B,QAAA,eAAe,CAACW,WAAS,EAAE,QAAQ,CAAC;AACjC,aAAA,KAAK,CAAC,SAAS,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;;AAGrD,QAAA,MAAMV,gBAAc,GAAG,SAAS,CAAC,MAAM,CAAc,CAAI,CAAA,EAAAC,cAA4B,CAAE,CAAA,CAAC,CAAA;AAExF,QAAA,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,eAAe,GAAG,cAAc,GAAG,iBAAiB,GAAG,CAAC,GAAG,CAAC,CAAA;YAClE,MAAM,cAAc,GAAG,UAAU,CAAC,CAAC,EAAE,wBAAwB,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,GAAG,CAAC,CAAA;AACzG,YAAA,MAAM,YAAY,GAAG,eAAe,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC,CAAA;YACtF,MAAM,kBAAkB,GAAG,CAAA,UAAA,EAAa,YAAY,CAAC,CAAC,CAAA,EAAA,EAAK,YAAY,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAC5E,YAAA,MAAMU,qBAAmB,GAAGX,gBAAc,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAE,mBAAiC,CAAE,CAAA,CAAC,CAAA;AAC1G,YAAA,MAAMU,kBAAgB,GAAGZ,gBAAc,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAG,gBAA8B,CAAE,CAAA,CAAC,CAAA;;AAGpG,YAAA,IAAI,CAACS,kBAAgB,CAAC,IAAI,EAAE,IAAIA,kBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAC/D,gBAAAZ,gBAAc,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;AACrD,aAAA;AAED,YAAAA,gBAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC;AAChC,iBAAA,KAAK,CAAC,QAAQ,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;AAEzC,YAAA,eAAe,CAACA,gBAAc,EAAE,QAAQ,CAAC;AACtC,iBAAA,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC;AACrC,iBAAA,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;YAEtBY,kBAAgB;iBACb,IAAI,CAAC,aAAa,CAAC;AACnB,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,iBAAA,KAAK,CAAC,WAAW,EAAE,cAAc,CAAC,QAAQ,CAAC;AAC3C,iBAAA,KAAK,CAAC,MAAM,EAAE,CAAA,EAAA,GAAA,cAAc,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,qBAAqB,CAAC,cAAc,CAAC,CAAC,CAAA;AAEnF,YAAA,MAAM,wBAAwB,GAAG,aAAa,CAAC,MAAM,IAAI,CAAC,CAAA;YAC1D,MAAM,wBAAwB,GAAG,CAAC,CAAA;YAClC,MAAM,0BAA0B,GAAG,wBAAwB,GAAG,wBAAwB,GAAG,CAAC,CAAA;AAC1F,YAAA,MAAM,iBAAiB,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,mCAAI,2BAA2B,CAAC,uCAAuC,EAAEA,kBAAgB,CAAC,IAAI,EAAE,CAAC,CAAA;YACxJ,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAA;AACpF,YAAA,MAAM,+BAA+B,GAAG,CAAA,EAAA,GAAA,cAAc,CAAC,MAAM,oCAAK,wBAAwB,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAA;AACnH,YAAA,MAAM,wBAAwB,IAAI,wBAAwB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC,CAAA;YAClGD,qBAAmB;iBAChB,IAAI,CAAC,GAAG,EAAE,CAAC,wBAAwB,GAAG,CAAC,GAAG,0BAA0B,CAAC;iBACrE,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,GAAG,CAAC,GAAG,wBAAwB,CAAC;iBAC5D,IAAI,CAAC,OAAO,EAAE,wBAAwB,GAAG,0BAA0B,GAAG,CAAC,CAAC;iBACxE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,wBAAwB,GAAG,CAAC,CAAC;AAChE,iBAAA,IAAI,CAAC,IAAI,EAAE,+BAA+B,CAAC;AAC3C,iBAAA,KAAK,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,CAAA;AACvC,SAAA;AAAM,aAAA;AACL,YAAAX,gBAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;AACpC,SAAA;AACH,KAAC,CAAC,CAAA;;IAGF,IAAI,QAAQ,GAAG,CAAC,EAAE;AAChB,QAAA,SAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAA;QACxC,MAAM,CAAC,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,CAA2E,CAAA;QACxH,CAAC;AACE,aAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;aAClB,EAAE,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AACtC,YAAA,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChB,iBAAA,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC;AAChC,iBAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AACvB,SAAC,CAAC,CAAA;AACL,KAAA;AAAM,SAAA;AACL,QAAA,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAC7B,KAAA;AAED,IAAA,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;AAC/C,CAAC;SAEe,WAAW,CACzB,SAAwE,EACxE,MAAkC,EAClC,QAAgB,EAAA;AAEhB,IAAA,eAAe,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC;AACrC,SAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAClB,SAAA,MAAM,EAAE,CAAA;AACb,CAAC;SAEe,eAAe,CAC7B,SAAwE,EACxE,MAAkC,EAClC,KAAa,EAAA;AAEb,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAA;AAC3B,IAAA,IAAI,KAAK,GAAG,SAAS,CAAC,MAAM;QAAE,OAAM;IAEpC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AAChC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;AAC3B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;AACjC,QAAA,MAAMU,WAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAZ,SAAuB,CAAE,CAAA,CAAC,CAAA;AAEjE,QAAA,MAAM,eAAe,GAAG,SAAS,CAAC,MAAM,CAAiB,CAAA,CAAA,EAAIJ,WAAyB,CAAE,CAAA,CAAC,CAAC,IAAI,EAAE,CAAA;AAChG,QAAA,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,EAAE,CAAA;QAEnD,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC;YAAE,OAAM;AACpD,QAAA,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAA;AAC/B,QAAA,MAAM,OAAO,GAAGgB,WAAS,CAAC,SAAS,CAAC,CAAI,CAAA,EAAAX,UAAwB,CAAE,CAAA,CAAC,CAAA;QAEnE,OAAO;AACJ,aAAA,IAAI,CAAC,WAAW,EAAE,KAAK,IAAG;YACzB,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;YACpD,MAAM,CAAC,GAAG,eAAe,CAAC,gBAAgB,CAAC,EAAE,GAAG,UAAU,CAAC,CAAA;YAC3D,OAAO,CAAA,UAAA,EAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACpC,SAAC,CAAC,CAAA;AACN,KAAC,CAAC,CAAA;AACJ,CAAC;SAEe,SAAS,CACvB,SAAwE,EACxE,MAAkC,EAClC,KAAa,EAAA;AAEb,IAAA,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,CAAA;AAEvC,IAAA,SAAS,CAAC,OAAO,CAACc,aAA8B,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;IAC3E,SAAS,CAAC,SAAS,CAAC,CAAA,CAAA,EAAId,UAAwB,EAAE,CAAC;AAChD,SAAA,IAAI,CAAC,GAAG,EAAE,oBAAoB,GAAG,KAAK,CAAC,CAAA;AAE1C,IAAA,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAA+B,CAAI,CAAA,EAAAJ,IAAkB,CAAE,CAAA,CAAC,CAAA;IAChG,YAAY;AACT,SAAA,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,kBAAkB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AAEnE,IAAA,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAA+B,CAAI,CAAA,EAAAC,QAAsB,CAAE,CAAA,CAAC,CAAA;IACxG,gBAAgB;AACb,SAAA,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AACnE,CAAC;AAEY,MAAA,kBAAkB,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { range } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport toPx from 'to-px'\n\n// Utils\nimport { throttle, getValue, getNumber, getBoolean } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\nimport { getCSSVariableValueInPixels } from 'utils/misc'\nimport { estimateStringPixelLength } from 'utils/text'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphCircleLabel, GraphLink, GraphLinkArrowStyle, GraphLinkStyle } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { getX, getY } from '../node/helper'\nimport {\n getLinkShiftTransform,\n getLinkStrokeWidth,\n getLinkBandWidth,\n getLinkColor,\n getLinkLabelTextColor,\n getLinkArrowStyle,\n LINK_MARKER_WIDTH,\n} from './helper'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as linkSelectors from './style'\n\n\nexport function createLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n): void {\n selection.attr('opacity', 0)\n\n selection.append('path')\n .attr('class', linkSelectors.linkSupport)\n\n selection.append('path')\n .attr('class', linkSelectors.link)\n\n selection.append('path')\n .attr('class', linkSelectors.linkBand)\n\n selection.append('use')\n .attr('class', linkSelectors.linkArrow)\n\n selection.append('g')\n .attr('class', linkSelectors.flowGroup)\n .style('opacity', 0)\n .selectAll(`.${linkSelectors.flowCircle}`)\n .data(range(0, 6)).enter()\n .append('circle')\n .attr('class', linkSelectors.flowCircle)\n\n const linkLabelGroup = selection.append('g')\n .attr('class', linkSelectors.linkLabelGroup)\n\n linkLabelGroup.append('rect')\n .attr('class', linkSelectors.linkLabelBackground)\n\n linkLabelGroup.append('text')\n .attr('class', linkSelectors.linkLabelContent)\n}\n\nexport function updateSelectedLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const isGreyedOut = (d: GraphLink<N, L>, i: number): boolean => getBoolean(d, config.linkDisabled, i) || d._state.greyout\n selection\n .classed(linkSelectors.greyedOutLink, (d, i) => isGreyedOut(d, i))\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const group = select(element)\n group.select(`.${linkSelectors.link}`)\n group.select(`.${linkSelectors.linkBand}`)\n const linkSupport = group.select(`.${linkSelectors.linkSupport}`)\n\n linkSupport\n .style('stroke-opacity', (d._state.hovered || d._state.selected) ? 0.2 : 0)\n .style('stroke-width',\n d._state.selected\n ? getLinkBandWidth(d, scale, config) + 5\n : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null\n )\n })\n}\n\nexport function updateLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1,\n getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string\n): void {\n const { linkFlowParticleSize, linkStyle, linkFlow, linkLabel, linkLabelShiftFromCenter } = config\n if (!selection.size()) return\n\n selection\n .classed(\n linkSelectors.linkDashed,\n d => getValue<GraphLink<N, L>, GraphLinkStyle>(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed\n )\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const link = linkGroup.select<SVGPathElement>(`.${linkSelectors.link}`)\n const linkBand = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkBand}`)\n const linkSupport = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`)\n const linkArrow = linkGroup.select<SVGUseElement>(`.${linkSelectors.linkArrow}`)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n const linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelDatum = getValue<GraphLink<N, L>, GraphCircleLabel>(d, linkLabel, d._indexGlobal)\n const linkLabelText = linkLabelDatum ? linkLabelDatum.text?.toString() : undefined\n\n const x1 = getX(d.source)\n const y1 = getY(d.source)\n const x2 = getX(d.target)\n const y2 = getY(d.target)\n\n const curvature = getNumber(d, config.linkCurvature, i) ?? 0\n const cp1x = x1 + (x2 - x1) * 0.5 * curvature\n const cp1y = y1 + (y2 - y1) * 0.0 * curvature\n const cp2x = x1 + (x2 - x1) * 0.5 * curvature\n const cp2y = y1 + (y2 - y1) * 1.0 * curvature\n\n const pathData = `M${x1},${y1} C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`\n link\n .attr('class', linkSelectors.link)\n .style('stroke-width', getLinkStrokeWidth(d, scale, config))\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n\n smartTransition(link, duration)\n .attr('d', pathData)\n\n linkBand\n .attr('class', linkSelectors.linkBand)\n .attr('transform', linkShiftTransform)\n .style('stroke-width', getLinkBandWidth(d, scale, config))\n .style('stroke', linkColor)\n\n smartTransition(linkBand, duration)\n .attr('d', pathData)\n\n linkSupport\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n .attr('d', pathData)\n\n // Arrow\n const linkArrowStyle = getLinkArrowStyle(d, config)\n const linkPathElement = linkSupport.node()\n const pathLength = linkPathElement.getTotalLength()\n if (linkArrowStyle) {\n const arrowPos = pathLength * (linkLabelText ? 0.65 : 0.5)\n const p1 = linkPathElement.getPointAtLength(arrowPos)\n const p2 = linkPathElement.getPointAtLength(arrowPos + 1) // A point very close to p1\n\n // Calculate the angle for the arrowhead\n const angle = Math.atan2(p2.y - p1.y, p2.x - p1.x) * (180 / Math.PI)\n const arrowWasShownBefore = linkArrow.attr('href')\n linkArrow\n .attr('href', `#${getLinkArrowDefId(linkArrowStyle)}`)\n\n smartTransition(linkArrow, arrowWasShownBefore ? duration : 0)\n .attr('fill', linkColor)\n .attr('transform', `translate(${p1.x}, ${p1.y}) rotate(${angle})`)\n } else {\n linkArrow.attr('href', null)\n }\n\n // Particle Flow\n flowGroup\n .attr('transform', linkShiftTransform)\n .style('display', getBoolean(d, linkFlow, d._indexGlobal) ? null : 'none')\n\n flowGroup\n .selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n .style('fill', linkColor)\n\n smartTransition(flowGroup, duration)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\n // Labels\n const linkLabelGroup = linkGroup.select<SVGGElement>(`.${linkSelectors.linkLabelGroup}`)\n\n if (linkLabelText) {\n const linkMarkerWidth = linkArrowStyle ? LINK_MARKER_WIDTH * 2 : 0\n const linkLabelShift = getBoolean(d, linkLabelShiftFromCenter, d._indexGlobal) ? -linkMarkerWidth + 4 : 0\n const linkLabelPos = linkPathElement.getPointAtLength(pathLength / 2 + linkLabelShift)\n const linkLabelTranslate = `translate(${linkLabelPos.x}, ${linkLabelPos.y})`\n const linkLabelBackground = linkLabelGroup.select<SVGRectElement>(`.${linkSelectors.linkLabelBackground}`)\n const linkLabelContent = linkLabelGroup.select<SVGTextElement>(`.${linkSelectors.linkLabelContent}`)\n\n // If the label was hidden or didn't have text before, we need to set the initial position\n if (!linkLabelContent.text() || linkLabelContent.attr('hidden')) {\n linkLabelGroup.attr('transform', linkLabelTranslate)\n }\n\n linkLabelGroup.attr('hidden', null)\n .style('cursor', linkLabelDatum.cursor)\n\n smartTransition(linkLabelGroup, duration)\n .attr('transform', linkLabelTranslate)\n .style('opacity', 1)\n\n linkLabelContent\n .text(linkLabelText)\n .attr('dy', '0.1em')\n .style('font-size', linkLabelDatum.fontSize)\n .style('fill', linkLabelDatum.textColor ?? getLinkLabelTextColor(linkLabelDatum))\n\n const shouldBeRenderedAsCircle = linkLabelText.length <= 2\n const linkLabelPaddingVertical = 4\n const linkLabelPaddingHorizontal = shouldBeRenderedAsCircle ? linkLabelPaddingVertical : 8\n const linkLabelFontSize = toPx(linkLabelDatum.fontSize) ?? getCSSVariableValueInPixels('var(--vis-graph-link-label-font-size)', linkLabelContent.node())\n const linkLabelWidthPx = estimateStringPixelLength(linkLabelText, linkLabelFontSize)\n const linkLabelBackgroundBorderRadius = linkLabelDatum.radius ?? (shouldBeRenderedAsCircle ? linkLabelFontSize : 4)\n const linkLabelBackgroundWidth = (shouldBeRenderedAsCircle ? linkLabelFontSize : linkLabelWidthPx)\n linkLabelBackground\n .attr('x', -linkLabelBackgroundWidth / 2 - linkLabelPaddingHorizontal)\n .attr('y', -linkLabelFontSize / 2 - linkLabelPaddingVertical)\n .attr('width', linkLabelBackgroundWidth + linkLabelPaddingHorizontal * 2)\n .attr('height', linkLabelFontSize + linkLabelPaddingVertical * 2)\n .attr('rx', linkLabelBackgroundBorderRadius)\n .style('fill', linkLabelDatum.color)\n } else {\n linkLabelGroup.attr('hidden', true)\n }\n })\n\n // Pointer Events\n if (duration > 0) {\n selection.attr('pointer-events', 'none')\n const t = smartTransition(selection, duration) as Transition<SVGGElement, GraphLink<N, L>, SVGGElement, GraphLink<N, L>>\n t\n .attr('opacity', 1)\n .on('end interrupt', (d, i, elements) => {\n select(elements[i])\n .attr('pointer-events', 'stroke')\n .attr('opacity', 1)\n })\n } else {\n selection.attr('opacity', 1)\n }\n\n updateSelectedLinks(selection, config, scale)\n}\n\nexport function removeLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .remove()\n}\n\nexport function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const { linkFlow } = config\n if (scale < ZoomLevel.Level2) return\n\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n\n const linkPathElement = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`).node()\n const pathLength = linkPathElement.getTotalLength()\n\n if (!getBoolean(d, linkFlow, d._indexGlobal)) return\n const t = d._state.flowAnimTime\n const circles = flowGroup.selectAll(`.${linkSelectors.flowCircle}`)\n\n circles\n .attr('transform', index => {\n const tt = (t + (+index) / (circles.size() - 1)) % 1\n const p = linkPathElement.getPointAtLength(tt * pathLength)\n return `translate(${p.x}, ${p.y})`\n })\n })\n}\n\nexport function zoomLinks<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n const { linkFlowParticleSize } = config\n\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n selection.selectAll(`.${linkSelectors.flowCircle}`)\n .attr('r', linkFlowParticleSize / scale)\n\n const linkElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.link}`)\n linkElements\n .style('stroke-width', d => getLinkStrokeWidth(d, scale, config))\n\n const linkBandElements = selection.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.linkBand}`)\n linkBandElements\n .style('stroke-width', d => getLinkBandWidth(d, scale, config))\n}\n\nexport const zoomLinksThrottled = throttle(zoomLinks, 500)\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.linkArrow","linkSelectors.flowGroup","linkSelectors.flowCircle","linkLabelGroup","linkSelectors.linkLabelGroup","linkSelectors.linkLabelBackground","linkSelectors.linkLabelContent","linkSelectors.greyedOutLink","linkSupport","linkSelectors.linkDashed","link","linkBand","linkArrow","flowGroup","linkLabelBackground","linkLabelContent","generalSelectors.zoomOutLevel2"],"mappings":"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"}
@@ -158,11 +158,12 @@ function updateNodes(selection, config, duration, scale = 1) {
158
158
  // Set Node Selection
159
159
  updateShape(nodeSelectionOutline, nodeShape, nodeSize, d._index);
160
160
  // Update Node Icon
161
+ const prevNodeIconValue = groupElement.nodeIcon;
161
162
  const nodeIconValue = getString(d, nodeIcon$1, d._index);
162
163
  const nodeIconSizeValue = (_c = getNumber(d, nodeIconSize, d._index)) !== null && _c !== void 0 ? _c : 2.5 * Math.sqrt(nodeSizeValue);
163
164
  const nodeIconColor = getNodeIconColor(d, nodeFill, d._index, selection.node());
164
165
  const shouldRenderUseElement = isInternalHref(nodeIconValue);
165
- if (groupElement.nodeIcon !== nodeIconValue) {
166
+ if (prevNodeIconValue !== nodeIconValue) {
166
167
  // If the icon has changed, we remove all children and re-render
167
168
  icon.selectAll('*').remove();
168
169
  // If the icon is a href, we need to append a <use> element. If it's a text we append the `<text>` element.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/node/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { arc } from 'd3-shape'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\nimport { TrimMode } from 'types/text'\n\n// Utils\nimport { trimString } from 'utils/text'\nimport { polygon } from 'utils/path'\nimport { smartTransition } from 'utils/d3'\nimport { getBoolean, getNumber, getString, getValue, throttle } from 'utils/data'\nimport { getColor } from 'utils/color'\nimport { isStringSvg } from 'utils/svg'\n\n// Local Types\nimport { GraphNode, GraphCircleLabel, GraphNodeAnimationState, GraphNodeAnimatedElement, GraphNodeShape } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport {\n arcTween,\n polyTween,\n setLabelRect,\n getX,\n getY,\n getSideLabelTextColor,\n getNodeColor,\n getNodeIconColor,\n getNodeSize,\n LABEL_RECT_VERTICAL_PADDING,\n isInternalHref,\n} from './helper'\nimport { appendShape, updateShape } from '../shape'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as nodeSelectors from './style'\n\nconst SIDE_LABEL_DEFAULT_RADIUS = 10\n\nexport interface GraphNodeSVGGElement extends SVGGElement {\n nodeShape?: string;\n nodeIcon?: string;\n}\n\nexport function createNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1\n): void {\n selection.each((d, i, elements) => {\n const element = elements[i] as GraphNodeSVGGElement\n const group = select<SVGGElement, GraphNode<N, L>>(element)\n group\n .attr('transform', (d: GraphNode<N, L>, i) => {\n const configuredPosition = getValue<GraphNode<N, L>, [number, number] | undefined>(d, config.nodeEnterPosition, i)\n const scale = getNumber(d, config.nodeEnterScale, i) ?? 0\n const x = configuredPosition?.[0] ?? getX(d)\n const y = configuredPosition?.[1] ?? getY(d)\n return `translate(${x}, ${y}) scale(${scale})`\n })\n .attr('opacity', 0)\n\n // If there's a custom render function, use it\n if (config.nodeEnterCustomRenderFunction) {\n config.nodeEnterCustomRenderFunction(d, element, config, duration, scale)\n } else { // Default node rendering\n const shape = getString(d, config.nodeShape, d._index) as GraphNodeShape\n // Todo: The 'nodeShape' and `nodeIcon` storing logic below it a temporary solution,\n // we need a cleaner implementation\n element.nodeShape = shape\n appendShape(group, shape, nodeSelectors.node, nodeSelectors.customNode, d._index)\n appendShape(group, shape, nodeSelectors.nodeSelection, nodeSelectors.customNode, d._index)\n group.append('path').attr('class', nodeSelectors.nodeGauge)\n group.append('g').attr('class', nodeSelectors.nodeIcon)\n\n group.append('g')\n .attr('class', nodeSelectors.sideLabelsGroup)\n\n group.append('text')\n .attr('class', nodeSelectors.nodeBottomIcon)\n }\n\n // Label\n const label = group.append('g').attr('class', nodeSelectors.label)\n label.append('rect').attr('class', nodeSelectors.labelBackground)\n\n const labelText = label.append('text')\n .attr('class', nodeSelectors.labelText)\n .attr('dy', '0.32em')\n labelText.append('tspan').attr('class', nodeSelectors.labelTextContent)\n labelText.append('tspan')\n .attr('class', nodeSelectors.subLabelTextContent)\n .attr('dy', '1.1em')\n .attr('x', '0')\n })\n}\n\nexport function updateNodeSelectedGreyout<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>\n): void {\n const { nodeDisabled } = config\n\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> = select(elements[i])\n const isGreyout = getBoolean(d, nodeDisabled, d._index) || d._state.greyout\n\n group.classed(nodeSelectors.greyedOutNode, isGreyout)\n .classed(nodeSelectors.draggable, !config.disableDrag)\n\n const nodeSelectionOutline = group.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.nodeSelection}`)\n nodeSelectionOutline.classed(nodeSelectors.nodeSelectionActive, d._state.selected)\n\n group.selectAll<SVGTextElement, GraphCircleLabel>(`.${nodeSelectors.sideLabel}`)\n .style('fill', (l) => isGreyout ? null : getSideLabelTextColor(l, selection.node()))\n\n group.selectAll<SVGRectElement, GraphCircleLabel>(`.${nodeSelectors.sideLabelBackground}`)\n .style('fill', (l) => isGreyout ? null : l.color)\n })\n}\n\nexport function updateNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1\n): Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> {\n const {\n nodeGaugeAnimDuration, nodeStrokeWidth, nodeShape, nodeSize, nodeGaugeValue, nodeGaugeFill,\n nodeIcon, nodeIconSize, nodeLabel, nodeLabelTrim, nodeLabelTrimMode, nodeLabelTrimLength,\n nodeSubLabel, nodeSubLabelTrim, nodeSubLabelTrimMode, nodeSubLabelTrimLength,\n nodeSideLabels, nodeStroke, nodeFill, nodeBottomIcon,\n } = config\n\n const nodeGroupsUpdate = smartTransition(selection, duration)\n .attr('transform', d => `translate(${getX(d)}, ${getY(d)}) scale(1)`)\n .attr('opacity', 1)\n\n // If there's a custom render function, use it\n if (config.nodeUpdateCustomRenderFunction) {\n selection.each((d, i, elements) => {\n config.nodeUpdateCustomRenderFunction(d, elements[i], config, duration, scale)\n })\n\n return nodeGroupsUpdate\n }\n\n // Default node rendering\n // Re-create nodes to update shapes if they were changed\n selection.each((d, i, elements) => {\n const element = elements[i] as GraphNodeSVGGElement\n const group = select<SVGGElement, GraphNode<N, L>>(element)\n const shape = getString(d, nodeShape, d._index)\n\n if (element.nodeShape !== shape) {\n group.select(`.${nodeSelectors.node}`).remove()\n appendShape(group, nodeShape, nodeSelectors.node, nodeSelectors.customNode, d._index, `.${nodeSelectors.nodeSelection}`)\n group.select(`.${nodeSelectors.nodeSelection}`).remove()\n appendShape(group, shape, nodeSelectors.nodeSelection, null, d._index, `.${nodeSelectors.nodeGauge}`)\n element.nodeShape = shape\n }\n })\n\n // Update nodes themselves\n selection.each((d, i, elements) => {\n const groupElement = elements[i] as GraphNodeSVGGElement\n const group: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> = select(groupElement)\n const node: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> = group.select(`.${nodeSelectors.node}`)\n const nodeArc = group.select<GraphNodeAnimatedElement<SVGElement>>(`.${nodeSelectors.nodeGauge}`)\n const icon = group.select<SVGTextElement>(`.${nodeSelectors.nodeIcon}`)\n const sideLabelsGroup = group.select<SVGGElement>(`.${nodeSelectors.sideLabelsGroup}`)\n const label = group.select<SVGGElement>(`.${nodeSelectors.label}`)\n const labelTextContent = label.select<SVGTextElement>(`.${nodeSelectors.labelTextContent}`)\n const sublabelTextContent = label.select<SVGTextElement>(`.${nodeSelectors.subLabelTextContent}`)\n const bottomIcon = group.select<SVGTextElement>(`.${nodeSelectors.nodeBottomIcon}`)\n const nodeSelectionOutline = group.select<SVGGElement>(`.${nodeSelectors.nodeSelection}`)\n const nodeSizeValue = getNodeSize(d, nodeSize, d._index)\n const arcGenerator = arc<GraphNodeAnimationState>()\n .innerRadius(state => state.nodeSize / 2 - state.borderWidth / 2)\n .outerRadius(state => state.nodeSize / 2 + state.borderWidth / 2)\n .startAngle(0 * (Math.PI / 180))\n // eslint-disable-next-line dot-notation\n .endAngle(a => a['endAngle'])\n\n group\n .classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n .classed(nodeSelectors.nodeIsDragged, (d: GraphNode<N, L>) => d._state.isDragged)\n\n // Update Group\n group\n .classed(nodeSelectors.nodePolygon, () => {\n const shape = getString(d, nodeShape, d._index)\n return shape === GraphNodeShape.Triangle || shape === GraphNodeShape.Hexagon || shape === GraphNodeShape.Square\n })\n\n // Update Node\n node\n .call(updateShape, nodeShape, nodeSize, d._index)\n .attr('stroke-width', getNumber(d, nodeStrokeWidth, d._index) ?? 0)\n .style('fill', getNodeColor(d, nodeFill, d._index))\n .style('stroke', getColor(d, nodeStroke, d._index, true) ?? null)\n\n const nodeBBox = (node.node() as SVGGraphicsElement).getBBox()\n\n nodeArc\n .attr('stroke-width', getNumber(d, nodeStrokeWidth, d._index))\n .style('display', !getNumber(d, nodeGaugeValue, d._index) ? 'none' : null)\n .style('fill', getNodeColor(d, nodeGaugeFill, d._index))\n .style('stroke', getNodeColor(d, nodeGaugeFill, d._index))\n .style('stroke-opacity', d => getString(d, nodeShape, d._index) === GraphNodeShape.Circle ? 0 : null)\n\n nodeArc\n .transition()\n .duration(nodeGaugeAnimDuration)\n .attrTween('d', (\n d,\n j,\n arr\n ) => {\n switch (getString(d, nodeShape, d._index)) {\n case GraphNodeShape.Circle: return arcTween(d, config, arcGenerator, arr[j])\n case GraphNodeShape.Hexagon: return polyTween(d, config, polygon, arr[j])\n case GraphNodeShape.Square: return polyTween(d, config, polygon, arr[j])\n case GraphNodeShape.Triangle: return polyTween(d, config, polygon, arr[j])\n default: return null\n }\n })\n\n // Set Node Selection\n updateShape(nodeSelectionOutline, nodeShape, nodeSize, d._index)\n\n // Update Node Icon\n const nodeIconValue = getString(d, nodeIcon, d._index)\n const nodeIconSizeValue = getNumber(d, nodeIconSize, d._index) ?? 2.5 * Math.sqrt(nodeSizeValue)\n const nodeIconColor = getNodeIconColor(d, nodeFill, d._index, selection.node())\n const shouldRenderUseElement = isInternalHref(nodeIconValue)\n\n if (groupElement.nodeIcon !== nodeIconValue) {\n // If the icon has changed, we remove all children and re-render\n icon.selectAll('*').remove()\n // If the icon is a href, we need to append a <use> element. If it's a text we append the `<text>` element.\n icon.append(shouldRenderUseElement ? 'use' : 'text')\n groupElement.nodeIcon = nodeIconValue\n }\n\n if (shouldRenderUseElement) {\n icon.select('use')\n .attr('href', nodeIconValue)\n .attr('x', -nodeIconSizeValue / 2)\n .attr('y', -nodeIconSizeValue / 2)\n .attr('width', nodeIconSizeValue)\n .attr('height', nodeIconSizeValue)\n .style('fill', nodeIconColor)\n } else {\n icon.select('text')\n .style('font-size', `${nodeIconSizeValue}px`)\n .attr('dy', '0.1em')\n .style('fill', nodeIconColor)\n .html(nodeIconValue)\n }\n\n // Side Labels\n const sideLabelsData = getValue<GraphNode<N, L>, GraphCircleLabel[]>(d, nodeSideLabels, d._index) || []\n const sideLabels = sideLabelsGroup.selectAll<SVGGElement, GraphCircleLabel>('g').data(sideLabelsData)\n const sideLabelsEnter = sideLabels.enter().append('g')\n .attr('class', nodeSelectors.sideLabelGroup)\n sideLabelsEnter.append('circle')\n .attr('class', nodeSelectors.sideLabelBackground)\n .attr('r', l => l.radius ?? SIDE_LABEL_DEFAULT_RADIUS)\n sideLabelsEnter.append('text')\n .attr('class', nodeSelectors.sideLabel)\n\n const sideLabelsUpdate = sideLabels.merge(sideLabelsEnter)\n .style('cursor', l => l.cursor ?? null)\n\n // Side label text\n sideLabelsUpdate.select(`.${nodeSelectors.sideLabel}`).html(d => d.text)\n .attr('dy', '0.1em')\n .style('fill', l => l.textColor ?? getSideLabelTextColor(l, selection.node()))\n .style('font-size', l => l.fontSize ?? `${(2 + (l.radius ?? SIDE_LABEL_DEFAULT_RADIUS)) / Math.pow(l.text.toString().length, 0.3)}px`)\n // Side label circle background\n sideLabelsUpdate.select(`.${nodeSelectors.sideLabelBackground}`)\n .style('fill', l => l.color)\n\n sideLabelsUpdate.attr('transform', (l, j) => {\n if (sideLabelsData.length === 1) return `translate(${nodeSizeValue / 2.5}, ${-nodeSizeValue / 2.5})`\n const r = 1.05 * nodeSizeValue / 2\n const angle = j * 1.15 * 2 * Math.atan2(l.radius ?? SIDE_LABEL_DEFAULT_RADIUS, r) - Math.PI / 3\n return `translate(${r * Math.cos(angle)}, ${r * Math.sin(angle)})`\n })\n\n sideLabels.exit().remove()\n\n // Set label and sub-label text\n const labelText = getString(d, nodeLabel, d._index)\n const sublabelText = getString(d, nodeSubLabel, d._index)\n const labelTextTrimmed = getBoolean(d, nodeLabelTrim, d._index)\n ? trimString(labelText, getNumber(d, nodeLabelTrimLength, d._index), getValue(d, nodeLabelTrimMode as TrimMode, d._index))\n : labelText\n const sublabelTextTrimmed = getBoolean(d, nodeSubLabelTrim, d._index)\n ? trimString(sublabelText, getNumber(d, nodeSubLabelTrimLength, d._index), getValue(d, nodeSubLabelTrimMode as TrimMode, d._index))\n : sublabelText\n\n labelTextContent.text(labelTextTrimmed)\n sublabelTextContent.text(sublabelTextTrimmed)\n group\n .on('mouseenter', () => {\n labelTextContent.text(labelText)\n sublabelTextContent.text(sublabelText)\n setLabelRect(label, labelText, nodeSelectors.labelText)\n group.raise()\n })\n .on('mouseleave', () => {\n labelTextContent.text(labelTextTrimmed)\n sublabelTextContent.text(sublabelTextTrimmed)\n setLabelRect(label, labelTextTrimmed, nodeSelectors.labelText)\n })\n\n // Position label\n const labelFontSize = parseFloat(window.getComputedStyle(groupElement).getPropertyValue('--vis-graph-node-label-font-size')) || 12\n const labelMargin = LABEL_RECT_VERTICAL_PADDING + 1.25 * labelFontSize ** 1.03\n const nodeHeight = isStringSvg((getString(d, nodeShape, d._index)) as GraphNodeShape) ? nodeBBox.height : nodeSizeValue\n label.attr('transform', `translate(0, ${nodeHeight / 2 + labelMargin})`)\n if (scale >= ZoomLevel.Level3) setLabelRect(label, getString(d, nodeLabel, d._index), nodeSelectors.labelText)\n\n // Bottom Icon\n bottomIcon.html(getString(d, nodeBottomIcon, d._index))\n .attr('transform', `translate(0, ${nodeHeight / 2})`)\n })\n\n updateNodeSelectedGreyout(selection, config)\n\n return nodeGroupsUpdate\n}\n\nexport function removeNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .attr('transform', (d, i) => {\n const configuredPosition = getValue<GraphNode<N, L>, [number, number] | undefined>(d, config.nodeExitPosition, i)\n const scale = getNumber(d, config.nodeExitScale, i) ?? 0\n const x = configuredPosition?.[0] ?? getX(d)\n const y = configuredPosition?.[1] ?? getY(d)\n return `translate(${x}, ${y}) scale(${scale})`\n })\n .remove()\n\n // If there's a custom render function, use it\n if (config.nodeExitCustomRenderFunction) {\n selection.each((d, i, elements) => {\n config.nodeExitCustomRenderFunction(d, elements[i], config, duration, scale)\n })\n }\n}\n\nfunction setLabelBackgroundRect<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>\n): void {\n const { nodeLabel } = config\n\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, N, SVGGElement, N> = select(elements[i])\n const label: Selection<SVGGElement, N, SVGGElement, N> = group.select(`.${nodeSelectors.label}`)\n setLabelRect(label, getString(d, nodeLabel, i), nodeSelectors.labelText)\n })\n}\n\nconst setLabelBackgroundRectThrottled = throttle(setLabelBackgroundRect, 1000) as typeof setLabelBackgroundRect\n\nexport function zoomNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n selection.classed(generalSelectors.zoomOutLevel1, scale < ZoomLevel.Level1)\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n\n selection.selectAll(`${nodeSelectors.sideLabelBackground}`)\n .attr('transform', `scale(${1 / Math.pow(scale, 0.35)})`)\n selection.selectAll(`.${nodeSelectors.sideLabel}`)\n .attr('transform', `scale(${1 / Math.pow(scale, 0.45)})`)\n\n if (scale >= ZoomLevel.Level3 && !config.nodeEnterCustomRenderFunction) selection.call(setLabelBackgroundRectThrottled, config)\n}\n\nexport const zoomNodesThrottled = throttle(zoomNodes, 500)\n"],"names":["nodeSelectors.node","nodeSelectors.customNode","nodeSelectors.nodeSelection","nodeSelectors.nodeGauge","nodeSelectors.nodeIcon","nodeSelectors.sideLabelsGroup","nodeSelectors.nodeBottomIcon","label","nodeSelectors.label","nodeSelectors.labelBackground","labelText","nodeSelectors.labelText","nodeSelectors.labelTextContent","nodeSelectors.subLabelTextContent","nodeSelectors.greyedOutNode","nodeSelectors.draggable","nodeSelectors.nodeSelectionActive","nodeSelectors.sideLabel","nodeSelectors.sideLabelBackground","nodeIcon","nodeBottomIcon","node","sideLabelsGroup","labelTextContent","generalSelectors.zoomOutLevel2","nodeSelectors.nodeIsDragged","nodeSelectors.nodePolygon","nodeSelectors.sideLabelGroup","generalSelectors.zoomOutLevel1"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/node/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { Transition } from 'd3-transition'\nimport { arc } from 'd3-shape'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\nimport { TrimMode } from 'types/text'\n\n// Utils\nimport { trimString } from 'utils/text'\nimport { polygon } from 'utils/path'\nimport { smartTransition } from 'utils/d3'\nimport { getBoolean, getNumber, getString, getValue, throttle } from 'utils/data'\nimport { getColor } from 'utils/color'\nimport { isStringSvg } from 'utils/svg'\n\n// Local Types\nimport { GraphNode, GraphCircleLabel, GraphNodeAnimationState, GraphNodeAnimatedElement, GraphNodeShape } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport {\n arcTween,\n polyTween,\n setLabelRect,\n getX,\n getY,\n getSideLabelTextColor,\n getNodeColor,\n getNodeIconColor,\n getNodeSize,\n LABEL_RECT_VERTICAL_PADDING,\n isInternalHref,\n} from './helper'\nimport { appendShape, updateShape } from '../shape'\nimport { ZoomLevel } from '../zoom-levels'\n\n// Styles\nimport * as generalSelectors from '../../style'\nimport * as nodeSelectors from './style'\n\nconst SIDE_LABEL_DEFAULT_RADIUS = 10\n\nexport interface GraphNodeSVGGElement extends SVGGElement {\n nodeShape?: string;\n nodeIcon?: string;\n}\n\nexport function createNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1\n): void {\n selection.each((d, i, elements) => {\n const element = elements[i] as GraphNodeSVGGElement\n const group = select<SVGGElement, GraphNode<N, L>>(element)\n group\n .attr('transform', (d: GraphNode<N, L>, i) => {\n const configuredPosition = getValue<GraphNode<N, L>, [number, number] | undefined>(d, config.nodeEnterPosition, i)\n const scale = getNumber(d, config.nodeEnterScale, i) ?? 0\n const x = configuredPosition?.[0] ?? getX(d)\n const y = configuredPosition?.[1] ?? getY(d)\n return `translate(${x}, ${y}) scale(${scale})`\n })\n .attr('opacity', 0)\n\n // If there's a custom render function, use it\n if (config.nodeEnterCustomRenderFunction) {\n config.nodeEnterCustomRenderFunction(d, element, config, duration, scale)\n } else { // Default node rendering\n const shape = getString(d, config.nodeShape, d._index) as GraphNodeShape\n // Todo: The 'nodeShape' and `nodeIcon` storing logic below it a temporary solution,\n // we need a cleaner implementation\n element.nodeShape = shape\n appendShape(group, shape, nodeSelectors.node, nodeSelectors.customNode, d._index)\n appendShape(group, shape, nodeSelectors.nodeSelection, nodeSelectors.customNode, d._index)\n group.append('path').attr('class', nodeSelectors.nodeGauge)\n group.append('g').attr('class', nodeSelectors.nodeIcon)\n\n group.append('g')\n .attr('class', nodeSelectors.sideLabelsGroup)\n\n group.append('text')\n .attr('class', nodeSelectors.nodeBottomIcon)\n }\n\n // Label\n const label = group.append('g').attr('class', nodeSelectors.label)\n label.append('rect').attr('class', nodeSelectors.labelBackground)\n\n const labelText = label.append('text')\n .attr('class', nodeSelectors.labelText)\n .attr('dy', '0.32em')\n labelText.append('tspan').attr('class', nodeSelectors.labelTextContent)\n labelText.append('tspan')\n .attr('class', nodeSelectors.subLabelTextContent)\n .attr('dy', '1.1em')\n .attr('x', '0')\n })\n}\n\nexport function updateNodeSelectedGreyout<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>\n): void {\n const { nodeDisabled } = config\n\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> = select(elements[i])\n const isGreyout = getBoolean(d, nodeDisabled, d._index) || d._state.greyout\n\n group.classed(nodeSelectors.greyedOutNode, isGreyout)\n .classed(nodeSelectors.draggable, !config.disableDrag)\n\n const nodeSelectionOutline = group.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.nodeSelection}`)\n nodeSelectionOutline.classed(nodeSelectors.nodeSelectionActive, d._state.selected)\n\n group.selectAll<SVGTextElement, GraphCircleLabel>(`.${nodeSelectors.sideLabel}`)\n .style('fill', (l) => isGreyout ? null : getSideLabelTextColor(l, selection.node()))\n\n group.selectAll<SVGRectElement, GraphCircleLabel>(`.${nodeSelectors.sideLabelBackground}`)\n .style('fill', (l) => isGreyout ? null : l.color)\n })\n}\n\nexport function updateNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1\n): Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> {\n const {\n nodeGaugeAnimDuration, nodeStrokeWidth, nodeShape, nodeSize, nodeGaugeValue, nodeGaugeFill,\n nodeIcon, nodeIconSize, nodeLabel, nodeLabelTrim, nodeLabelTrimMode, nodeLabelTrimLength,\n nodeSubLabel, nodeSubLabelTrim, nodeSubLabelTrimMode, nodeSubLabelTrimLength,\n nodeSideLabels, nodeStroke, nodeFill, nodeBottomIcon,\n } = config\n\n const nodeGroupsUpdate = smartTransition(selection, duration)\n .attr('transform', d => `translate(${getX(d)}, ${getY(d)}) scale(1)`)\n .attr('opacity', 1)\n\n // If there's a custom render function, use it\n if (config.nodeUpdateCustomRenderFunction) {\n selection.each((d, i, elements) => {\n config.nodeUpdateCustomRenderFunction(d, elements[i], config, duration, scale)\n })\n\n return nodeGroupsUpdate\n }\n\n // Default node rendering\n // Re-create nodes to update shapes if they were changed\n selection.each((d, i, elements) => {\n const element = elements[i] as GraphNodeSVGGElement\n const group = select<SVGGElement, GraphNode<N, L>>(element)\n const shape = getString(d, nodeShape, d._index)\n\n if (element.nodeShape !== shape) {\n group.select(`.${nodeSelectors.node}`).remove()\n appendShape(group, nodeShape, nodeSelectors.node, nodeSelectors.customNode, d._index, `.${nodeSelectors.nodeSelection}`)\n group.select(`.${nodeSelectors.nodeSelection}`).remove()\n appendShape(group, shape, nodeSelectors.nodeSelection, null, d._index, `.${nodeSelectors.nodeGauge}`)\n element.nodeShape = shape\n }\n })\n\n // Update nodes themselves\n selection.each((d, i, elements) => {\n const groupElement = elements[i] as GraphNodeSVGGElement\n const group: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> = select(groupElement)\n const node: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> = group.select(`.${nodeSelectors.node}`)\n const nodeArc = group.select<GraphNodeAnimatedElement<SVGElement>>(`.${nodeSelectors.nodeGauge}`)\n const icon = group.select<SVGTextElement>(`.${nodeSelectors.nodeIcon}`)\n const sideLabelsGroup = group.select<SVGGElement>(`.${nodeSelectors.sideLabelsGroup}`)\n const label = group.select<SVGGElement>(`.${nodeSelectors.label}`)\n const labelTextContent = label.select<SVGTextElement>(`.${nodeSelectors.labelTextContent}`)\n const sublabelTextContent = label.select<SVGTextElement>(`.${nodeSelectors.subLabelTextContent}`)\n const bottomIcon = group.select<SVGTextElement>(`.${nodeSelectors.nodeBottomIcon}`)\n const nodeSelectionOutline = group.select<SVGGElement>(`.${nodeSelectors.nodeSelection}`)\n const nodeSizeValue = getNodeSize(d, nodeSize, d._index)\n const arcGenerator = arc<GraphNodeAnimationState>()\n .innerRadius(state => state.nodeSize / 2 - state.borderWidth / 2)\n .outerRadius(state => state.nodeSize / 2 + state.borderWidth / 2)\n .startAngle(0 * (Math.PI / 180))\n // eslint-disable-next-line dot-notation\n .endAngle(a => a['endAngle'])\n\n group\n .classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n .classed(nodeSelectors.nodeIsDragged, (d: GraphNode<N, L>) => d._state.isDragged)\n\n // Update Group\n group\n .classed(nodeSelectors.nodePolygon, () => {\n const shape = getString(d, nodeShape, d._index)\n return shape === GraphNodeShape.Triangle || shape === GraphNodeShape.Hexagon || shape === GraphNodeShape.Square\n })\n\n // Update Node\n node\n .call(updateShape, nodeShape, nodeSize, d._index)\n .attr('stroke-width', getNumber(d, nodeStrokeWidth, d._index) ?? 0)\n .style('fill', getNodeColor(d, nodeFill, d._index))\n .style('stroke', getColor(d, nodeStroke, d._index, true) ?? null)\n\n const nodeBBox = (node.node() as SVGGraphicsElement).getBBox()\n\n nodeArc\n .attr('stroke-width', getNumber(d, nodeStrokeWidth, d._index))\n .style('display', !getNumber(d, nodeGaugeValue, d._index) ? 'none' : null)\n .style('fill', getNodeColor(d, nodeGaugeFill, d._index))\n .style('stroke', getNodeColor(d, nodeGaugeFill, d._index))\n .style('stroke-opacity', d => getString(d, nodeShape, d._index) === GraphNodeShape.Circle ? 0 : null)\n\n nodeArc\n .transition()\n .duration(nodeGaugeAnimDuration)\n .attrTween('d', (\n d,\n j,\n arr\n ) => {\n switch (getString(d, nodeShape, d._index)) {\n case GraphNodeShape.Circle: return arcTween(d, config, arcGenerator, arr[j])\n case GraphNodeShape.Hexagon: return polyTween(d, config, polygon, arr[j])\n case GraphNodeShape.Square: return polyTween(d, config, polygon, arr[j])\n case GraphNodeShape.Triangle: return polyTween(d, config, polygon, arr[j])\n default: return null\n }\n })\n\n // Set Node Selection\n updateShape(nodeSelectionOutline, nodeShape, nodeSize, d._index)\n\n // Update Node Icon\n const prevNodeIconValue = groupElement.nodeIcon\n const nodeIconValue = getString(d, nodeIcon, d._index)\n const nodeIconSizeValue = getNumber(d, nodeIconSize, d._index) ?? 2.5 * Math.sqrt(nodeSizeValue)\n const nodeIconColor = getNodeIconColor(d, nodeFill, d._index, selection.node())\n const shouldRenderUseElement = isInternalHref(nodeIconValue)\n\n if (prevNodeIconValue !== nodeIconValue) {\n // If the icon has changed, we remove all children and re-render\n icon.selectAll('*').remove()\n // If the icon is a href, we need to append a <use> element. If it's a text we append the `<text>` element.\n icon.append(shouldRenderUseElement ? 'use' : 'text')\n groupElement.nodeIcon = nodeIconValue\n }\n\n if (shouldRenderUseElement) {\n icon.select('use')\n .attr('href', nodeIconValue)\n .attr('x', -nodeIconSizeValue / 2)\n .attr('y', -nodeIconSizeValue / 2)\n .attr('width', nodeIconSizeValue)\n .attr('height', nodeIconSizeValue)\n .style('fill', nodeIconColor)\n } else {\n icon.select('text')\n .style('font-size', `${nodeIconSizeValue}px`)\n .attr('dy', '0.1em')\n .style('fill', nodeIconColor)\n .html(nodeIconValue)\n }\n\n // Side Labels\n const sideLabelsData = getValue<GraphNode<N, L>, GraphCircleLabel[]>(d, nodeSideLabels, d._index) || []\n const sideLabels = sideLabelsGroup.selectAll<SVGGElement, GraphCircleLabel>('g').data(sideLabelsData)\n const sideLabelsEnter = sideLabels.enter().append('g')\n .attr('class', nodeSelectors.sideLabelGroup)\n sideLabelsEnter.append('circle')\n .attr('class', nodeSelectors.sideLabelBackground)\n .attr('r', l => l.radius ?? SIDE_LABEL_DEFAULT_RADIUS)\n sideLabelsEnter.append('text')\n .attr('class', nodeSelectors.sideLabel)\n\n const sideLabelsUpdate = sideLabels.merge(sideLabelsEnter)\n .style('cursor', l => l.cursor ?? null)\n\n // Side label text\n sideLabelsUpdate.select(`.${nodeSelectors.sideLabel}`).html(d => d.text)\n .attr('dy', '0.1em')\n .style('fill', l => l.textColor ?? getSideLabelTextColor(l, selection.node()))\n .style('font-size', l => l.fontSize ?? `${(2 + (l.radius ?? SIDE_LABEL_DEFAULT_RADIUS)) / Math.pow(l.text.toString().length, 0.3)}px`)\n // Side label circle background\n sideLabelsUpdate.select(`.${nodeSelectors.sideLabelBackground}`)\n .style('fill', l => l.color)\n\n sideLabelsUpdate.attr('transform', (l, j) => {\n if (sideLabelsData.length === 1) return `translate(${nodeSizeValue / 2.5}, ${-nodeSizeValue / 2.5})`\n const r = 1.05 * nodeSizeValue / 2\n const angle = j * 1.15 * 2 * Math.atan2(l.radius ?? SIDE_LABEL_DEFAULT_RADIUS, r) - Math.PI / 3\n return `translate(${r * Math.cos(angle)}, ${r * Math.sin(angle)})`\n })\n\n sideLabels.exit().remove()\n\n // Set label and sub-label text\n const labelText = getString(d, nodeLabel, d._index)\n const sublabelText = getString(d, nodeSubLabel, d._index)\n const labelTextTrimmed = getBoolean(d, nodeLabelTrim, d._index)\n ? trimString(labelText, getNumber(d, nodeLabelTrimLength, d._index), getValue(d, nodeLabelTrimMode as TrimMode, d._index))\n : labelText\n const sublabelTextTrimmed = getBoolean(d, nodeSubLabelTrim, d._index)\n ? trimString(sublabelText, getNumber(d, nodeSubLabelTrimLength, d._index), getValue(d, nodeSubLabelTrimMode as TrimMode, d._index))\n : sublabelText\n\n labelTextContent.text(labelTextTrimmed)\n sublabelTextContent.text(sublabelTextTrimmed)\n group\n .on('mouseenter', () => {\n labelTextContent.text(labelText)\n sublabelTextContent.text(sublabelText)\n setLabelRect(label, labelText, nodeSelectors.labelText)\n group.raise()\n })\n .on('mouseleave', () => {\n labelTextContent.text(labelTextTrimmed)\n sublabelTextContent.text(sublabelTextTrimmed)\n setLabelRect(label, labelTextTrimmed, nodeSelectors.labelText)\n })\n\n // Position label\n const labelFontSize = parseFloat(window.getComputedStyle(groupElement).getPropertyValue('--vis-graph-node-label-font-size')) || 12\n const labelMargin = LABEL_RECT_VERTICAL_PADDING + 1.25 * labelFontSize ** 1.03\n const nodeHeight = isStringSvg((getString(d, nodeShape, d._index)) as GraphNodeShape) ? nodeBBox.height : nodeSizeValue\n label.attr('transform', `translate(0, ${nodeHeight / 2 + labelMargin})`)\n if (scale >= ZoomLevel.Level3) setLabelRect(label, getString(d, nodeLabel, d._index), nodeSelectors.labelText)\n\n // Bottom Icon\n bottomIcon.html(getString(d, nodeBottomIcon, d._index))\n .attr('transform', `translate(0, ${nodeHeight / 2})`)\n })\n\n updateNodeSelectedGreyout(selection, config)\n\n return nodeGroupsUpdate\n}\n\nexport function removeNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n duration: number,\n scale = 1\n): void {\n smartTransition(selection, duration / 2)\n .attr('opacity', 0)\n .attr('transform', (d, i) => {\n const configuredPosition = getValue<GraphNode<N, L>, [number, number] | undefined>(d, config.nodeExitPosition, i)\n const scale = getNumber(d, config.nodeExitScale, i) ?? 0\n const x = configuredPosition?.[0] ?? getX(d)\n const y = configuredPosition?.[1] ?? getY(d)\n return `translate(${x}, ${y}) scale(${scale})`\n })\n .remove()\n\n // If there's a custom render function, use it\n if (config.nodeExitCustomRenderFunction) {\n selection.each((d, i, elements) => {\n config.nodeExitCustomRenderFunction(d, elements[i], config, duration, scale)\n })\n }\n}\n\nfunction setLabelBackgroundRect<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>\n): void {\n const { nodeLabel } = config\n\n selection.each((d, i, elements) => {\n const group: Selection<SVGGElement, N, SVGGElement, N> = select(elements[i])\n const label: Selection<SVGGElement, N, SVGGElement, N> = group.select(`.${nodeSelectors.label}`)\n setLabelRect(label, getString(d, nodeLabel, i), nodeSelectors.labelText)\n })\n}\n\nconst setLabelBackgroundRectThrottled = throttle(setLabelBackgroundRect, 1000) as typeof setLabelBackgroundRect\n\nexport function zoomNodes<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n config: GraphConfigInterface<N, L>,\n scale: number\n): void {\n selection.classed(generalSelectors.zoomOutLevel1, scale < ZoomLevel.Level1)\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\n\n selection.selectAll(`${nodeSelectors.sideLabelBackground}`)\n .attr('transform', `scale(${1 / Math.pow(scale, 0.35)})`)\n selection.selectAll(`.${nodeSelectors.sideLabel}`)\n .attr('transform', `scale(${1 / Math.pow(scale, 0.45)})`)\n\n if (scale >= ZoomLevel.Level3 && !config.nodeEnterCustomRenderFunction) selection.call(setLabelBackgroundRectThrottled, config)\n}\n\nexport const zoomNodesThrottled = throttle(zoomNodes, 500)\n"],"names":["nodeSelectors.node","nodeSelectors.customNode","nodeSelectors.nodeSelection","nodeSelectors.nodeGauge","nodeSelectors.nodeIcon","nodeSelectors.sideLabelsGroup","nodeSelectors.nodeBottomIcon","label","nodeSelectors.label","nodeSelectors.labelBackground","labelText","nodeSelectors.labelText","nodeSelectors.labelTextContent","nodeSelectors.subLabelTextContent","nodeSelectors.greyedOutNode","nodeSelectors.draggable","nodeSelectors.nodeSelectionActive","nodeSelectors.sideLabel","nodeSelectors.sideLabelBackground","nodeIcon","nodeBottomIcon","node","sideLabelsGroup","labelTextContent","generalSelectors.zoomOutLevel2","nodeSelectors.nodeIsDragged","nodeSelectors.nodePolygon","nodeSelectors.sideLabelGroup","generalSelectors.zoomOutLevel1"],"mappings":"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"}
@@ -14,6 +14,9 @@ export declare class Tooltip {
14
14
  private _setContainerPositionThrottled;
15
15
  private _isShown;
16
16
  private _container;
17
+ private _mutationObserver;
18
+ private _hoveredElement;
19
+ private _position;
17
20
  constructor(config?: TooltipConfigInterface);
18
21
  setConfig(config: TooltipConfigInterface): void;
19
22
  setContainer(container: HTMLElement): void;
@@ -34,11 +37,11 @@ export declare class Tooltip {
34
37
  x: number;
35
38
  y: number;
36
39
  }): void;
37
- placeByPointerEvent(e: PointerEvent | MouseEvent): void;
38
- placeByElement(hoveredElement: SVGGElement | HTMLElement): void;
40
+ placeByElement(hoveredElement: SVGElement | HTMLElement): void;
39
41
  isContainerBody(): boolean;
40
42
  private _render;
41
43
  private _applyPosition;
44
+ private _constraintPosToContainer;
42
45
  private _setContainerPosition;
43
46
  private _setUpEvents;
44
47
  private _setUpAttributes;
@@ -17,6 +17,21 @@ class Tooltip {
17
17
  .attr('class', root);
18
18
  this.setConfig(config);
19
19
  this.components = this.config.components;
20
+ // Set up MutationObserver to automatically re-position the tooltip
21
+ // if the content has been dynamically changed
22
+ this._mutationObserver = new MutationObserver(() => {
23
+ if (!this._isShown)
24
+ return;
25
+ // Handle changes to the content of this.div
26
+ // Add your logic here
27
+ if (!this.config.followCursor && this._hoveredElement) {
28
+ this.placeByElement(this._hoveredElement);
29
+ }
30
+ else if (this._position) {
31
+ this.place({ x: this._position[0], y: this._position[1] });
32
+ }
33
+ });
34
+ this._mutationObserver.observe(this.div.node(), { childList: true, subtree: true });
20
35
  }
21
36
  setConfig(config) {
22
37
  var _a;
@@ -55,7 +70,8 @@ class Tooltip {
55
70
  }
56
71
  /** Hide the tooltip */
57
72
  hide() {
58
- this.div.classed(show, false)
73
+ this.div
74
+ .classed(show, false) // The `show` class triggers the opacity transition
59
75
  .on('transitionend', () => {
60
76
  // We hide the element once the transition completes
61
77
  // This ensures container overflow will not occur when the window is resized
@@ -66,8 +82,8 @@ class Tooltip {
66
82
  /** Simply displays the tooltip with its previous content on position */
67
83
  display() {
68
84
  this.div
69
- .classed(hidden, false)
70
- .classed(show, true);
85
+ .classed(hidden, false) // The `hidden` class sets `display: none;`
86
+ .classed(show, true); // The `show` class triggers the opacity transition
71
87
  this._isShown = true;
72
88
  }
73
89
  place(pos) {
@@ -76,46 +92,24 @@ class Tooltip {
76
92
  return;
77
93
  }
78
94
  const { config } = this;
79
- const isContainerBody = this.isContainerBody();
80
95
  const tooltipWidth = this.element.offsetWidth;
81
96
  const tooltipHeight = this.element.offsetHeight;
82
- const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight;
83
- const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth;
84
97
  const horizontalPlacement = config.horizontalPlacement === Position.Auto
85
98
  ? Position.Center
86
99
  : config.horizontalPlacement;
87
100
  const verticalPlacement = config.verticalPlacement === Position.Auto
88
- ? ((pos.y - tooltipHeight) > containerHeight / 8 ? Position.Top : Position.Bottom)
101
+ ? ((pos.y - tooltipHeight) < 0 ? Position.Bottom : Position.Top)
89
102
  : config.verticalPlacement;
90
103
  // dx and dy variables shift the tooltip from the default position (above the cursor, centred horizontally)
91
104
  const margin = 5;
92
- const dx = horizontalPlacement === Position.Left ? -tooltipWidth - margin - config.horizontalShift
105
+ const translateX = horizontalPlacement === Position.Left ? -tooltipWidth - margin - config.horizontalShift
93
106
  : horizontalPlacement === Position.Center ? -tooltipWidth / 2
94
107
  : margin + config.horizontalShift;
95
- const dy = verticalPlacement === Position.Bottom ? tooltipHeight + margin + config.verticalShift
96
- : verticalPlacement === Position.Center ? tooltipHeight / 2
97
- : -margin - config.verticalShift;
98
- // Constraint to container
99
- const paddingX = 10;
100
- const hitRight = pos.x > (containerWidth - tooltipWidth - dx - paddingX);
101
- const hitLeft = pos.x < -dx + paddingX;
102
- const constraintX = hitRight ? (containerWidth - tooltipWidth - dx) - pos.x - paddingX
103
- : hitLeft ? -dx - pos.x + paddingX : 0;
104
- const paddingY = 10;
105
- const hitBottom = pos.y > (containerHeight - dy - paddingY);
106
- const hitTop = pos.y < (tooltipHeight - dy + paddingY);
107
- const constraintY = hitBottom ? containerHeight - dy - pos.y - paddingY
108
- : hitTop ? tooltipHeight - dy - pos.y + paddingY : 0;
109
- // Placing
110
- // If the container size is smaller than the the tooltip size we just stick the tooltip to the top / left
111
- const x = containerWidth < tooltipWidth ? 0 : pos.x + constraintX + dx;
112
- const y = containerHeight < tooltipHeight ? tooltipHeight : pos.y + constraintY + dy;
113
- this._applyPosition(x, y, null, tooltipHeight);
114
- }
115
- placeByPointerEvent(e) {
116
- const isContainerBody = this.isContainerBody();
117
- const [x, y] = isContainerBody ? [e.clientX, e.clientY] : pointer(e, this._container);
118
- this.place({ x, y });
108
+ const translateY = verticalPlacement === Position.Bottom ? margin + config.verticalShift
109
+ : verticalPlacement === Position.Center ? -tooltipHeight / 2
110
+ : -margin - config.verticalShift - tooltipHeight;
111
+ const [top, left] = this._constraintPosToContainer(pos.x + translateX, pos.y + translateY, tooltipWidth, tooltipHeight);
112
+ this._applyPosition(top, left, tooltipHeight);
119
113
  }
120
114
  placeByElement(hoveredElement) {
121
115
  const { config } = this;
@@ -127,7 +121,7 @@ class Tooltip {
127
121
  const hoveredElementRect = hoveredElement.getBoundingClientRect();
128
122
  // We use D3's point transformation to get the correct position of the element by pretending it's a pointer event
129
123
  // See more: https://github.com/d3/d3-selection/blob/main/src/pointer.js
130
- const elementPos = pointer({
124
+ const elementPos = isContainerBody ? [hoveredElementRect.x, hoveredElementRect.y] : pointer({
131
125
  clientX: hoveredElementRect.x,
132
126
  clientY: hoveredElementRect.y,
133
127
  pageX: hoveredElementRect.x,
@@ -137,38 +131,38 @@ class Tooltip {
137
131
  ? (elementPos[0] - tooltipWidth < 0 ? Position.Right
138
132
  : elementPos[0] + tooltipWidth > containerWidth ? Position.Left : Position.Center)
139
133
  : config.horizontalPlacement;
140
- let translateX = '';
134
+ let translateX = 0;
141
135
  switch (horizontalPlacement) {
142
136
  case Position.Left:
143
- translateX = `calc(-100% - ${margin}px)`;
137
+ translateX = -tooltipWidth - margin;
144
138
  break;
145
139
  case Position.Right:
146
- translateX = `calc(${hoveredElementRect.width}px + ${margin}px)`;
140
+ translateX = hoveredElementRect.width + margin;
147
141
  break;
148
142
  case Position.Center:
149
143
  default:
150
- translateX = `calc(-50% + ${hoveredElementRect.width / 2}px)`;
144
+ translateX = (-tooltipWidth + hoveredElementRect.width) / 2;
151
145
  break;
152
146
  }
153
147
  const verticalPlacement = config.verticalPlacement === Position.Auto
154
148
  ? (horizontalPlacement !== Position.Center ? Position.Center
155
149
  : elementPos[1] - tooltipHeight < 0 ? Position.Bottom : Position.Top)
156
150
  : config.verticalPlacement;
157
- let translateY = '';
151
+ let translateY = -tooltipHeight;
158
152
  switch (verticalPlacement) {
159
153
  case Position.Center:
160
- translateY = `calc(50% + ${hoveredElementRect.height / 2}px)`;
154
+ translateY += (tooltipHeight + hoveredElementRect.height) / 2;
161
155
  break;
162
156
  case Position.Bottom:
163
- translateY = `calc(100% + ${hoveredElementRect.height}px + ${margin}px)`;
157
+ translateY += tooltipHeight + hoveredElementRect.height + margin;
164
158
  break;
165
159
  case Position.Top:
166
160
  default:
167
- translateY = `${-margin}px`;
161
+ translateY += -margin;
168
162
  break;
169
163
  }
170
- const translate = `translate(${translateX}, ${translateY})`;
171
- this._applyPosition(elementPos[0], elementPos[1], translate, tooltipHeight);
164
+ const [top, left] = this._constraintPosToContainer(elementPos[0] + translateX, elementPos[1] + translateY, tooltipWidth, tooltipHeight);
165
+ this._applyPosition(top, left, tooltipHeight);
172
166
  }
173
167
  isContainerBody() {
174
168
  return this._container === document.body;
@@ -184,22 +178,37 @@ class Tooltip {
184
178
  this.div.html(html);
185
179
  }
186
180
  this.div
187
- .classed(nonInteractive, !config.allowHover || config.followCursor)
188
- .classed(hidden, false)
189
- .classed(show, true);
190
- this._isShown = true;
181
+ .classed(nonInteractive, !config.allowHover || config.followCursor);
182
+ this.display();
191
183
  }
192
- _applyPosition(x, y, transform, tooltipHeight) {
184
+ _applyPosition(x, y, tooltipHeight) {
193
185
  const isContainerBody = this.isContainerBody();
194
186
  const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight;
195
187
  this.div
196
188
  .classed(positionFixed, isContainerBody)
197
- .style('top', isContainerBody ? `${y - tooltipHeight}px` : 'unset')
198
- .style('bottom', !isContainerBody ? `${containerHeight - y}px` : 'unset')
199
- .style('left', `${x}px`)
200
- // We use `transform` to position the tooltip with relative units like percentages,
201
- // this way it works automatically with dynamic content that can change the tooltip's size
202
- .style('transform', transform);
189
+ .style('top', isContainerBody ? `${y}px` : 'unset')
190
+ .style('bottom', !isContainerBody ? `${containerHeight - y - tooltipHeight}px` : 'unset')
191
+ .style('left', `${x}px`);
192
+ }
193
+ _constraintPosToContainer(top, left, tooltipWidth, tooltipHeight) {
194
+ const isContainerBody = this.isContainerBody();
195
+ const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight;
196
+ const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth;
197
+ // // Constraint to container
198
+ const paddingX = 10;
199
+ const hitRight = top > (containerWidth - tooltipWidth - paddingX);
200
+ const hitLeft = top < paddingX;
201
+ const constrainedLeft = hitRight ? containerWidth - tooltipWidth - paddingX
202
+ : hitLeft ? paddingX : top;
203
+ const paddingY = 10;
204
+ const hitBottom = left > (containerHeight - tooltipHeight - paddingY);
205
+ const hitTop = left < paddingY;
206
+ const constrainedTop = hitBottom ? containerHeight - tooltipHeight - paddingY
207
+ : hitTop ? paddingY : left;
208
+ return [
209
+ containerWidth < tooltipWidth ? 0 : constrainedLeft,
210
+ containerHeight < tooltipHeight ? 0 : constrainedTop,
211
+ ];
203
212
  }
204
213
  _setContainerPosition() {
205
214
  var _a;
@@ -233,6 +242,7 @@ class Tooltip {
233
242
  const i = els.indexOf(el);
234
243
  const d = select(el).datum();
235
244
  const content = template(d, i, els);
245
+ const [x, y] = this.isContainerBody() ? [e.clientX, e.clientY] : pointer(e, this._container);
236
246
  if (content === null) {
237
247
  // If the content is `null`, we hide the tooltip
238
248
  this.hide();
@@ -242,12 +252,19 @@ class Tooltip {
242
252
  // an empty string. This way we can allow it to work with things like `createPortal` in React
243
253
  this._render(content);
244
254
  if (config.followCursor)
245
- this.placeByPointerEvent(e);
255
+ this.place({ x, y });
246
256
  else
247
257
  this.placeByElement(el);
248
258
  }
249
- e.stopPropagation(); // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair
250
- return; // Stop looking for other matches
259
+ // Store the hovered element and the event for future reference,
260
+ // i.e. to re-position the tooltip if the content has been changed
261
+ // by something else and it was captured by the MutationObserver
262
+ this._hoveredElement = el;
263
+ this._position = this.isContainerBody() ? [e.clientX, e.clientY] : pointer(e, this._container);
264
+ // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair
265
+ e.stopPropagation();
266
+ // Stop looking for other matches
267
+ return;
251
268
  }
252
269
  }
253
270
  }
@@ -284,6 +301,7 @@ class Tooltip {
284
301
  }
285
302
  destroy() {
286
303
  var _a;
304
+ this._mutationObserver.disconnect();
287
305
  (_a = this.div) === null || _a === void 0 ? void 0 : _a.remove();
288
306
  }
289
307
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { select, Selection, pointer } from 'd3-selection'\n\n// Core\nimport { ComponentCore } from 'core/component'\n\n// Types\nimport { Position } from 'types/position'\n\n// Utils\nimport { merge, throttle } from 'utils/data'\n\n// Config\nimport { TooltipDefaultConfig, TooltipConfigInterface } from './config'\n\n// Style\nimport * as s from './style'\n\nexport class Tooltip {\n element: HTMLElement\n div: Selection<HTMLElement, unknown, null, undefined>\n protected _defaultConfig = TooltipDefaultConfig as TooltipConfigInterface\n public config: TooltipConfigInterface = this._defaultConfig\n prevConfig: TooltipConfigInterface\n components: ComponentCore<unknown>[]\n static selectors = s\n private _setUpEventsThrottled = throttle(this._setUpEvents, 500)\n private _setContainerPositionThrottled = throttle(this._setContainerPosition, 500)\n private _isShown = false\n private _container: HTMLElement\n\n constructor (config: TooltipConfigInterface = {}) {\n this.element = document.createElement('div')\n this.div = select(this.element)\n .attr('class', s.root)\n\n this.setConfig(config)\n this.components = this.config.components\n }\n\n public setConfig (config: TooltipConfigInterface): void {\n this.prevConfig = this.config\n this.config = merge(this._defaultConfig, config)\n\n if (this.config.container && (this.config.container !== this.prevConfig?.container)) {\n this.setContainer(this.config.container)\n }\n\n this._setUpAttributes()\n }\n\n public setContainer (container: HTMLElement): void {\n this.element.parentNode?.removeChild(this.element)\n\n this._container = container\n this._container.appendChild(this.element)\n\n this._setContainerPositionThrottled()\n }\n\n public getContainer (): HTMLElement {\n return this._container\n }\n\n public hasContainer (): boolean {\n return !!this._container && this._container.isConnected\n }\n\n public setComponents (components: ComponentCore<unknown>[]): void {\n this.components = components\n }\n\n public update (): void {\n if (!this._container) return\n\n this._setUpEventsThrottled()\n }\n\n /** Show the tooltip by providing content and position */\n public show (html: string | HTMLElement | null | void, pos: { x: number; y: number }): void {\n this._render(html)\n this.place(pos)\n }\n\n /** Hide the tooltip */\n public hide (): void {\n this.div.classed(s.show, false)\n .on('transitionend', () => {\n // We hide the element once the transition completes\n // This ensures container overflow will not occur when the window is resized\n this.div.classed(s.hidden, !this._isShown)\n })\n\n this._isShown = false\n }\n\n /** Simply displays the tooltip with its previous content on position */\n public display (): void {\n this.div\n .classed(s.hidden, false)\n .classed(s.show, true)\n\n this._isShown = true\n }\n\n public place (pos: { x: number; y: number }): void {\n if (!this.hasContainer()) {\n console.warn('Unovis | Tooltip: Container was not set or is not initialized yet')\n return\n }\n const { config } = this\n const isContainerBody = this.isContainerBody()\n const tooltipWidth = this.element.offsetWidth\n const tooltipHeight = this.element.offsetHeight\n const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight\n const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth\n\n const horizontalPlacement = config.horizontalPlacement === Position.Auto\n ? Position.Center\n : config.horizontalPlacement\n\n const verticalPlacement = config.verticalPlacement === Position.Auto\n ? ((pos.y - tooltipHeight) > containerHeight / 8 ? Position.Top : Position.Bottom)\n : config.verticalPlacement\n\n // dx and dy variables shift the tooltip from the default position (above the cursor, centred horizontally)\n const margin = 5\n const dx = horizontalPlacement === Position.Left ? -tooltipWidth - margin - config.horizontalShift\n : horizontalPlacement === Position.Center ? -tooltipWidth / 2\n : margin + config.horizontalShift\n const dy = verticalPlacement === Position.Bottom ? tooltipHeight + margin + config.verticalShift\n : verticalPlacement === Position.Center ? tooltipHeight / 2\n : -margin - config.verticalShift\n\n // Constraint to container\n const paddingX = 10\n const hitRight = pos.x > (containerWidth - tooltipWidth - dx - paddingX)\n const hitLeft = pos.x < -dx + paddingX\n const constraintX = hitRight ? (containerWidth - tooltipWidth - dx) - pos.x - paddingX\n : hitLeft ? -dx - pos.x + paddingX : 0\n\n const paddingY = 10\n const hitBottom = pos.y > (containerHeight - dy - paddingY)\n const hitTop = pos.y < (tooltipHeight - dy + paddingY)\n const constraintY = hitBottom ? containerHeight - dy - pos.y - paddingY\n : hitTop ? tooltipHeight - dy - pos.y + paddingY : 0\n\n // Placing\n // If the container size is smaller than the the tooltip size we just stick the tooltip to the top / left\n const x = containerWidth < tooltipWidth ? 0 : pos.x + constraintX + dx\n const y = containerHeight < tooltipHeight ? tooltipHeight : pos.y + constraintY + dy\n\n this._applyPosition(x, y, null, tooltipHeight)\n }\n\n public placeByPointerEvent (e: PointerEvent | MouseEvent): void {\n const isContainerBody = this.isContainerBody()\n const [x, y] = isContainerBody ? [e.clientX, e.clientY] : pointer(e, this._container)\n this.place({ x, y })\n }\n\n public placeByElement (hoveredElement: SVGGElement | HTMLElement): void {\n const { config } = this\n const margin = 5\n const tooltipWidth = this.element.offsetWidth\n const tooltipHeight = this.element.offsetHeight\n const isContainerBody = this.isContainerBody()\n const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth\n const hoveredElementRect = hoveredElement.getBoundingClientRect()\n\n // We use D3's point transformation to get the correct position of the element by pretending it's a pointer event\n // See more: https://github.com/d3/d3-selection/blob/main/src/pointer.js\n const elementPos = pointer({\n clientX: hoveredElementRect.x,\n clientY: hoveredElementRect.y,\n pageX: hoveredElementRect.x,\n pageY: hoveredElementRect.y,\n }, this._container)\n\n const horizontalPlacement = config.horizontalPlacement === Position.Auto\n ? (elementPos[0] - tooltipWidth < 0 ? Position.Right\n : elementPos[0] + tooltipWidth > containerWidth ? Position.Left : Position.Center)\n : config.horizontalPlacement\n\n let translateX = ''\n switch (horizontalPlacement) {\n case Position.Left:\n translateX = `calc(-100% - ${margin}px)`\n break\n case Position.Right:\n translateX = `calc(${hoveredElementRect.width}px + ${margin}px)`\n break\n case Position.Center:\n default:\n translateX = `calc(-50% + ${hoveredElementRect.width / 2}px)`\n break\n }\n\n const verticalPlacement = config.verticalPlacement === Position.Auto\n ? (horizontalPlacement !== Position.Center ? Position.Center\n : elementPos[1] - tooltipHeight < 0 ? Position.Bottom : Position.Top)\n : config.verticalPlacement\n\n let translateY = ''\n switch (verticalPlacement) {\n case Position.Center:\n translateY = `calc(50% + ${hoveredElementRect.height / 2}px)`\n break\n case Position.Bottom:\n translateY = `calc(100% + ${hoveredElementRect.height}px + ${margin}px)`\n break\n case Position.Top:\n default:\n translateY = `${-margin}px`\n break\n }\n\n const translate = `translate(${translateX}, ${translateY})`\n this._applyPosition(elementPos[0], elementPos[1], translate, tooltipHeight)\n }\n\n public isContainerBody (): boolean {\n return this._container === document.body\n }\n\n private _render (html: string | HTMLElement | null | void): void {\n const { config } = this\n if (html instanceof HTMLElement) {\n const node = this.div.select(':first-child').node()\n if (node !== html) this.div.html('').append(() => html)\n } else if (html) {\n this.div.html(html)\n }\n\n this.div\n .classed(s.nonInteractive, !config.allowHover || config.followCursor)\n .classed(s.hidden, false)\n .classed(s.show, true)\n\n this._isShown = true\n }\n\n private _applyPosition (x: number, y: number, transform: string | null, tooltipHeight: number): void {\n const isContainerBody = this.isContainerBody()\n const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight\n\n this.div\n .classed(s.positionFixed, isContainerBody)\n .style('top', isContainerBody ? `${y - tooltipHeight}px` : 'unset')\n .style('bottom', !isContainerBody ? `${containerHeight - y}px` : 'unset')\n .style('left', `${x}px`)\n // We use `transform` to position the tooltip with relative units like percentages,\n // this way it works automatically with dynamic content that can change the tooltip's size\n .style('transform', transform)\n }\n\n private _setContainerPosition (): void {\n // Tooltip position calculation relies on the parent position\n // If it's not set (static), we set it to `relative` (not a good practice)\n if (this._container !== document.body && getComputedStyle(this._container)?.position === 'static') {\n this._container.style.position = 'relative'\n }\n }\n\n private _setUpEvents (): void {\n const { config } = this\n\n // We use the Event Delegation pattern to set up Tooltip events\n // Every component will have single `mousemove` and `mouseleave` event listener functions, where we'll check\n // the `path` of the event and trigger corresponding callbacks\n this.components.forEach(component => {\n const selection = select(component.element)\n selection\n .on('mousemove.tooltip', (e: MouseEvent) => {\n const path: (HTMLElement | SVGGElement)[] = (e.composedPath && e.composedPath()) || (e as any).path || [e.target]\n\n // Go through all of the configured triggers\n for (const className of Object.keys(config.triggers)) {\n const template = config.triggers[className]\n if (!template) continue // Skip if the trigger is not configured\n\n const els = selection.selectAll<HTMLElement | SVGGElement, unknown>(`.${className}`).nodes()\n\n // Go through all of the elements in the event path (from the deepest element upwards)\n for (const el of path) {\n if (el === selection.node()) break // Break on the component's level (usually the `<g>` element)\n if (el.classList.contains(className)) { // If there's a match, show the tooltip\n const i = els.indexOf(el)\n const d = select(el).datum()\n const content = template(d, i, els)\n\n if (content === null) {\n // If the content is `null`, we hide the tooltip\n this.hide()\n } else {\n // Otherwise we show the tooltip, but don't render the content if it's `undefined` or\n // an empty string. This way we can allow it to work with things like `createPortal` in React\n this._render(content)\n if (config.followCursor) this.placeByPointerEvent(e)\n else this.placeByElement(el)\n }\n\n e.stopPropagation() // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair\n return // Stop looking for other matches\n }\n }\n }\n\n // Hide the tooltip if the event didn't pass through any of the configured triggers.\n // We use the `this._isShown` condition as a little performance optimization tweak\n // (we don't want the tooltip to update its class on every mouse movement, see `this.hide()`).\n if (this._isShown) this.hide()\n })\n .on('mouseleave.tooltip', (e: MouseEvent) => {\n e.stopPropagation() // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair\n this.hide()\n })\n })\n\n // Set up Tooltip hover\n if (config.allowHover && !config.followCursor) {\n this.div\n .on('mouseenter.tooltip', this.display.bind(this))\n .on('mouseleave.tooltip', this.hide.bind(this))\n } else {\n this.div\n .on('mouseenter.tooltip', null)\n .on('mouseleave.tooltip', null)\n }\n }\n\n private _setUpAttributes (): void {\n const attributesMap = this.config.attributes\n if (!attributesMap) return\n\n Object.keys(attributesMap).forEach(attr => {\n this.div.attr(attr, attributesMap[attr])\n })\n }\n\n public destroy (): void {\n this.div?.remove()\n }\n}\n"],"names":["s.root","s.show","s.hidden","s.nonInteractive","s.positionFixed","s"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/tooltip/index.ts"],"sourcesContent":["import { select, Selection, pointer } from 'd3-selection'\n\n// Core\nimport { ComponentCore } from 'core/component'\n\n// Types\nimport { Position } from 'types/position'\n\n// Utils\nimport { merge, throttle } from 'utils/data'\n\n// Config\nimport { TooltipDefaultConfig, TooltipConfigInterface } from './config'\n\n// Style\nimport * as s from './style'\n\nexport class Tooltip {\n element: HTMLElement\n div: Selection<HTMLElement, unknown, null, undefined>\n protected _defaultConfig = TooltipDefaultConfig as TooltipConfigInterface\n public config: TooltipConfigInterface = this._defaultConfig\n prevConfig: TooltipConfigInterface\n components: ComponentCore<unknown>[]\n static selectors = s\n private _setUpEventsThrottled = throttle(this._setUpEvents, 500)\n private _setContainerPositionThrottled = throttle(this._setContainerPosition, 500)\n private _isShown = false\n private _container: HTMLElement\n private _mutationObserver: MutationObserver\n private _hoveredElement: HTMLElement | SVGElement\n private _position: [number, number]\n\n constructor (config: TooltipConfigInterface = {}) {\n this.element = document.createElement('div')\n this.div = select(this.element)\n .attr('class', s.root)\n\n this.setConfig(config)\n this.components = this.config.components\n\n // Set up MutationObserver to automatically re-position the tooltip\n // if the content has been dynamically changed\n this._mutationObserver = new MutationObserver(() => {\n if (!this._isShown) return\n\n // Handle changes to the content of this.div\n // Add your logic here\n if (!this.config.followCursor && this._hoveredElement) {\n this.placeByElement(this._hoveredElement)\n } else if (this._position) {\n this.place({ x: this._position[0], y: this._position[1] })\n }\n })\n\n this._mutationObserver.observe(this.div.node(), { childList: true, subtree: true })\n }\n\n public setConfig (config: TooltipConfigInterface): void {\n this.prevConfig = this.config\n this.config = merge(this._defaultConfig, config)\n\n if (this.config.container && (this.config.container !== this.prevConfig?.container)) {\n this.setContainer(this.config.container)\n }\n\n this._setUpAttributes()\n }\n\n public setContainer (container: HTMLElement): void {\n this.element.parentNode?.removeChild(this.element)\n\n this._container = container\n this._container.appendChild(this.element)\n\n this._setContainerPositionThrottled()\n }\n\n public getContainer (): HTMLElement {\n return this._container\n }\n\n public hasContainer (): boolean {\n return !!this._container && this._container.isConnected\n }\n\n public setComponents (components: ComponentCore<unknown>[]): void {\n this.components = components\n }\n\n public update (): void {\n if (!this._container) return\n\n this._setUpEventsThrottled()\n }\n\n /** Show the tooltip by providing content and position */\n public show (html: string | HTMLElement | null | void, pos: { x: number; y: number }): void {\n this._render(html)\n this.place(pos)\n }\n\n /** Hide the tooltip */\n public hide (): void {\n this.div\n .classed(s.show, false) // The `show` class triggers the opacity transition\n .on('transitionend', () => {\n // We hide the element once the transition completes\n // This ensures container overflow will not occur when the window is resized\n this.div.classed(s.hidden, !this._isShown)\n })\n\n this._isShown = false\n }\n\n /** Simply displays the tooltip with its previous content on position */\n public display (): void {\n this.div\n .classed(s.hidden, false) // The `hidden` class sets `display: none;`\n .classed(s.show, true) // The `show` class triggers the opacity transition\n\n this._isShown = true\n }\n\n public place (pos: { x: number; y: number }): void {\n if (!this.hasContainer()) {\n console.warn('Unovis | Tooltip: Container was not set or is not initialized yet')\n return\n }\n const { config } = this\n const tooltipWidth = this.element.offsetWidth\n const tooltipHeight = this.element.offsetHeight\n\n const horizontalPlacement = config.horizontalPlacement === Position.Auto\n ? Position.Center\n : config.horizontalPlacement\n\n const verticalPlacement = config.verticalPlacement === Position.Auto\n ? ((pos.y - tooltipHeight) < 0 ? Position.Bottom : Position.Top)\n : config.verticalPlacement\n\n // dx and dy variables shift the tooltip from the default position (above the cursor, centred horizontally)\n const margin = 5\n const translateX = horizontalPlacement === Position.Left ? -tooltipWidth - margin - config.horizontalShift\n : horizontalPlacement === Position.Center ? -tooltipWidth / 2\n : margin + config.horizontalShift\n\n const translateY = verticalPlacement === Position.Bottom ? margin + config.verticalShift\n : verticalPlacement === Position.Center ? -tooltipHeight / 2\n : -margin - config.verticalShift - tooltipHeight\n\n const [top, left] = this._constraintPosToContainer(pos.x + translateX, pos.y + translateY, tooltipWidth, tooltipHeight)\n this._applyPosition(top, left, tooltipHeight)\n }\n\n public placeByElement (hoveredElement: SVGElement | HTMLElement): void {\n const { config } = this\n const margin = 5\n const tooltipWidth = this.element.offsetWidth\n const tooltipHeight = this.element.offsetHeight\n const isContainerBody = this.isContainerBody()\n const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth\n const hoveredElementRect = hoveredElement.getBoundingClientRect()\n\n // We use D3's point transformation to get the correct position of the element by pretending it's a pointer event\n // See more: https://github.com/d3/d3-selection/blob/main/src/pointer.js\n const elementPos = isContainerBody ? [hoveredElementRect.x, hoveredElementRect.y] : pointer({\n clientX: hoveredElementRect.x,\n clientY: hoveredElementRect.y,\n pageX: hoveredElementRect.x,\n pageY: hoveredElementRect.y,\n }, this._container)\n\n const horizontalPlacement = config.horizontalPlacement === Position.Auto\n ? (elementPos[0] - tooltipWidth < 0 ? Position.Right\n : elementPos[0] + tooltipWidth > containerWidth ? Position.Left : Position.Center)\n : config.horizontalPlacement\n\n let translateX = 0\n switch (horizontalPlacement) {\n case Position.Left:\n translateX = -tooltipWidth - margin\n break\n case Position.Right:\n translateX = hoveredElementRect.width + margin\n break\n case Position.Center:\n default:\n translateX = (-tooltipWidth + hoveredElementRect.width) / 2\n break\n }\n\n const verticalPlacement = config.verticalPlacement === Position.Auto\n ? (horizontalPlacement !== Position.Center ? Position.Center\n : elementPos[1] - tooltipHeight < 0 ? Position.Bottom : Position.Top)\n : config.verticalPlacement\n\n let translateY = -tooltipHeight\n switch (verticalPlacement) {\n case Position.Center:\n translateY += (tooltipHeight + hoveredElementRect.height) / 2\n break\n case Position.Bottom:\n translateY += tooltipHeight + hoveredElementRect.height + margin\n break\n case Position.Top:\n default:\n translateY += -margin\n break\n }\n\n const [top, left] = this._constraintPosToContainer(elementPos[0] + translateX, elementPos[1] + translateY, tooltipWidth, tooltipHeight)\n this._applyPosition(top, left, tooltipHeight)\n }\n\n public isContainerBody (): boolean {\n return this._container === document.body\n }\n\n private _render (html: string | HTMLElement | null | void): void {\n const { config } = this\n if (html instanceof HTMLElement) {\n const node = this.div.select(':first-child').node()\n if (node !== html) this.div.html('').append(() => html)\n } else if (html) {\n this.div.html(html)\n }\n\n this.div\n .classed(s.nonInteractive, !config.allowHover || config.followCursor)\n\n this.display()\n }\n\n private _applyPosition (x: number, y: number, tooltipHeight: number): void {\n const isContainerBody = this.isContainerBody()\n const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight\n\n this.div\n .classed(s.positionFixed, isContainerBody)\n .style('top', isContainerBody ? `${y}px` : 'unset')\n .style('bottom', !isContainerBody ? `${containerHeight - y - tooltipHeight}px` : 'unset')\n .style('left', `${x}px`)\n }\n\n private _constraintPosToContainer (top: number, left: number, tooltipWidth: number, tooltipHeight: number): [number, number] {\n const isContainerBody = this.isContainerBody()\n const containerHeight = isContainerBody ? window.innerHeight : this._container.scrollHeight\n const containerWidth = isContainerBody ? window.innerWidth : this._container.scrollWidth\n\n // // Constraint to container\n const paddingX = 10\n const hitRight = top > (containerWidth - tooltipWidth - paddingX)\n const hitLeft = top < paddingX\n const constrainedLeft = hitRight ? containerWidth - tooltipWidth - paddingX\n : hitLeft ? paddingX : top\n\n const paddingY = 10\n const hitBottom = left > (containerHeight - tooltipHeight - paddingY)\n const hitTop = left < paddingY\n const constrainedTop = hitBottom ? containerHeight - tooltipHeight - paddingY\n : hitTop ? paddingY : left\n\n return [\n containerWidth < tooltipWidth ? 0 : constrainedLeft,\n containerHeight < tooltipHeight ? 0 : constrainedTop,\n ]\n }\n\n private _setContainerPosition (): void {\n // Tooltip position calculation relies on the parent position\n // If it's not set (static), we set it to `relative` (not a good practice)\n if (this._container !== document.body && getComputedStyle(this._container)?.position === 'static') {\n this._container.style.position = 'relative'\n }\n }\n\n private _setUpEvents (): void {\n const { config } = this\n\n // We use the Event Delegation pattern to set up Tooltip events\n // Every component will have single `mousemove` and `mouseleave` event listener functions, where we'll check\n // the `path` of the event and trigger corresponding callbacks\n this.components.forEach(component => {\n const selection = select(component.element)\n selection\n .on('mousemove.tooltip', (e: MouseEvent) => {\n const path: (HTMLElement | SVGGElement)[] = (e.composedPath && e.composedPath()) || (e as any).path || [e.target]\n\n // Go through all of the configured triggers\n for (const className of Object.keys(config.triggers)) {\n const template = config.triggers[className]\n if (!template) continue // Skip if the trigger is not configured\n\n const els = selection.selectAll<HTMLElement | SVGGElement, unknown>(`.${className}`).nodes()\n\n // Go through all of the elements in the event path (from the deepest element upwards)\n for (const el of path) {\n if (el === selection.node()) break // Break on the component's level (usually the `<g>` element)\n if (el.classList.contains(className)) { // If there's a match, show the tooltip\n const i = els.indexOf(el)\n const d = select(el).datum()\n const content = template(d, i, els)\n const [x, y] = this.isContainerBody() ? [e.clientX, e.clientY] : pointer(e, this._container)\n if (content === null) {\n // If the content is `null`, we hide the tooltip\n this.hide()\n } else {\n // Otherwise we show the tooltip, but don't render the content if it's `undefined` or\n // an empty string. This way we can allow it to work with things like `createPortal` in React\n this._render(content)\n if (config.followCursor) this.place({ x, y })\n else this.placeByElement(el)\n }\n\n // Store the hovered element and the event for future reference,\n // i.e. to re-position the tooltip if the content has been changed\n // by something else and it was captured by the MutationObserver\n this._hoveredElement = el\n this._position = this.isContainerBody() ? [e.clientX, e.clientY] : pointer(e, this._container)\n\n // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair\n e.stopPropagation()\n\n // Stop looking for other matches\n return\n }\n }\n }\n\n // Hide the tooltip if the event didn't pass through any of the configured triggers.\n // We use the `this._isShown` condition as a little performance optimization tweak\n // (we don't want the tooltip to update its class on every mouse movement, see `this.hide()`).\n if (this._isShown) this.hide()\n })\n .on('mouseleave.tooltip', (e: MouseEvent) => {\n e.stopPropagation() // Stop propagation to prevent other interfering events from being triggered, e.g. Crosshair\n this.hide()\n })\n })\n\n // Set up Tooltip hover\n if (config.allowHover && !config.followCursor) {\n this.div\n .on('mouseenter.tooltip', this.display.bind(this))\n .on('mouseleave.tooltip', this.hide.bind(this))\n } else {\n this.div\n .on('mouseenter.tooltip', null)\n .on('mouseleave.tooltip', null)\n }\n }\n\n private _setUpAttributes (): void {\n const attributesMap = this.config.attributes\n if (!attributesMap) return\n\n Object.keys(attributesMap).forEach(attr => {\n this.div.attr(attr, attributesMap[attr])\n })\n }\n\n public destroy (): void {\n this._mutationObserver.disconnect()\n this.div?.remove()\n }\n}\n"],"names":["s.root","s.show","s.hidden","s.nonInteractive","s.positionFixed","s"],"mappings":"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"}
@@ -1,4 +1,8 @@
1
1
  export declare const root: string;
2
+ /**
3
+ * @deprecated This selector is deprecated and will be removed in future versions. Use `root` instead.
4
+ */
5
+ export declare const tooltip: string;
2
6
  export declare const variables: void;
3
7
  export declare const positionFixed: string;
4
8
  export declare const show: string;
@@ -19,6 +19,10 @@ const root = css `
19
19
  background-color: var(--vis-tooltip-background-color);
20
20
  backdrop-filter: var(--vis-tooltip-backdrop-filter);
21
21
  `;
22
+ /**
23
+ * @deprecated This selector is deprecated and will be removed in future versions. Use `root` instead.
24
+ */
25
+ const tooltip = root;
22
26
  const variables = injectGlobal `
23
27
  :root {
24
28
  --vis-tooltip-background-color: rgba(255, 255, 255, 0.95);
@@ -67,5 +71,5 @@ const nonInteractive = css `
67
71
  user-select: none;
68
72
  `;
69
73
 
70
- export { hidden, nonInteractive, positionFixed, root, show, variables };
74
+ export { hidden, nonInteractive, positionFixed, root, show, tooltip, variables };
71
75
  //# sourceMappingURL=style.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sources":["../../../src/components/tooltip/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: tooltip;\n display: inline-block;\n left: 0;\n bottom: 0;\n min-width: max-content;\n position: absolute;\n opacity: 0;\n transition: opacity;\n transition-duration: var(--vis-tooltip-transition-duration);\n z-index: 999999;\n padding: var(--vis-tooltip-padding);\n color: var(--vis-tooltip-text-color);\n border-radius: var(--vis-tooltip-border-radius);\n box-shadow: var(--vis-tooltip-box-shadow);\n border: solid 1px var(--vis-tooltip-border-color);\n background-color: var(--vis-tooltip-background-color);\n backdrop-filter: var(--vis-tooltip-backdrop-filter);\n`\n\nexport const variables = injectGlobal`\n :root {\n --vis-tooltip-background-color: rgba(255, 255, 255, 0.95);\n --vis-tooltip-border-color: #e5e9f7;\n --vis-tooltip-text-color: #000;\n --vis-tooltip-shadow-color: rgba(172, 179, 184, 0.35);\n --vis-tooltip-backdrop-filter: none;\n --vis-tooltip-padding: 10px 15px;\n --vis-tooltip-border-radius: 5px;\n --vis-tooltip-transition-duration: 300ms;\n --vis-tooltip-box-shadow: none;\n\n --vis-dark-tooltip-background-color: rgba(30,30,30, 0.95);\n --vis-dark-tooltip-text-color: #e5e9f7;\n --vis-dark-tooltip-border-color: var(--vis-color-grey);\n --vis-dark-tooltip-shadow-color: rgba(0,0,0, 0.95);\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-tooltip-background-color: var(--vis-dark-tooltip-background-color);\n --vis-tooltip-text-color: var(--vis-dark-tooltip-text-color);\n --vis-tooltip-border-color: var(--vis-dark-tooltip-border-color);\n --vis-tooltip-shadow-color: var(--vis-dark-tooltip-shadow-color);\n }\n\n body.theme-dark {\n --vis-tooltip-background-color: rgba(30,30,30, 0.95);\n --vis-tooltip-text-color: #e5e9f7;\n --vis-tooltip-border-color: var(--vis-color-grey);\n --vis-tooltip-shadow-color: rgba(0,0,0, 0.95);\n }\n`\n\nexport const positionFixed = css`\n bottom: unset;\n position: fixed;\n`\n\nexport const show = css`\n opacity: 1;\n`\n\nexport const hidden = css`\n display: none;\n`\n\nexport const nonInteractive = css`\n label: non-interactive;\n pointer-events: none;\n user-select: none;\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;;;;EAkBtB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;;;;;;AAkBjB,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;;;;;;;;;;;EAa7B;AAEM,MAAM,aAAa,GAAG,GAAG,CAAA,CAAA;;;EAG/B;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;EAExB;AAEM,MAAM,cAAc,GAAG,GAAG,CAAA,CAAA;;;;;;;;"}
1
+ {"version":3,"file":"style.js","sources":["../../../src/components/tooltip/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const root = css`\n label: tooltip;\n display: inline-block;\n left: 0;\n bottom: 0;\n min-width: max-content;\n position: absolute;\n opacity: 0;\n transition: opacity;\n transition-duration: var(--vis-tooltip-transition-duration);\n z-index: 999999;\n padding: var(--vis-tooltip-padding);\n color: var(--vis-tooltip-text-color);\n border-radius: var(--vis-tooltip-border-radius);\n box-shadow: var(--vis-tooltip-box-shadow);\n border: solid 1px var(--vis-tooltip-border-color);\n background-color: var(--vis-tooltip-background-color);\n backdrop-filter: var(--vis-tooltip-backdrop-filter);\n`\n\n/**\n * @deprecated This selector is deprecated and will be removed in future versions. Use `root` instead.\n */\nexport const tooltip = root\n\nexport const variables = injectGlobal`\n :root {\n --vis-tooltip-background-color: rgba(255, 255, 255, 0.95);\n --vis-tooltip-border-color: #e5e9f7;\n --vis-tooltip-text-color: #000;\n --vis-tooltip-shadow-color: rgba(172, 179, 184, 0.35);\n --vis-tooltip-backdrop-filter: none;\n --vis-tooltip-padding: 10px 15px;\n --vis-tooltip-border-radius: 5px;\n --vis-tooltip-transition-duration: 300ms;\n --vis-tooltip-box-shadow: none;\n\n --vis-dark-tooltip-background-color: rgba(30,30,30, 0.95);\n --vis-dark-tooltip-text-color: #e5e9f7;\n --vis-dark-tooltip-border-color: var(--vis-color-grey);\n --vis-dark-tooltip-shadow-color: rgba(0,0,0, 0.95);\n }\n\n body.theme-dark ${`.${root}`} {\n --vis-tooltip-background-color: var(--vis-dark-tooltip-background-color);\n --vis-tooltip-text-color: var(--vis-dark-tooltip-text-color);\n --vis-tooltip-border-color: var(--vis-dark-tooltip-border-color);\n --vis-tooltip-shadow-color: var(--vis-dark-tooltip-shadow-color);\n }\n\n body.theme-dark {\n --vis-tooltip-background-color: rgba(30,30,30, 0.95);\n --vis-tooltip-text-color: #e5e9f7;\n --vis-tooltip-border-color: var(--vis-color-grey);\n --vis-tooltip-shadow-color: rgba(0,0,0, 0.95);\n }\n`\n\nexport const positionFixed = css`\n bottom: unset;\n position: fixed;\n`\n\nexport const show = css`\n opacity: 1;\n`\n\nexport const hidden = css`\n display: none;\n`\n\nexport const nonInteractive = css`\n label: non-interactive;\n pointer-events: none;\n user-select: none;\n`\n"],"names":[],"mappings":";;AAEO,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;;;;;;EAkBtB;AAED;;AAEG;AACI,MAAM,OAAO,GAAG,KAAI;AAEpB,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;;;;;;AAkBjB,kBAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;;;;;;;;;;;EAa7B;AAEM,MAAM,aAAa,GAAG,GAAG,CAAA,CAAA;;;EAG/B;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;EAEtB;AAEM,MAAM,MAAM,GAAG,GAAG,CAAA,CAAA;;EAExB;AAEM,MAAM,cAAc,GAAG,GAAG,CAAA,CAAA;;;;;;;;"}
@@ -50,6 +50,7 @@ class SingleContainer extends ContainerCore {
50
50
  }
51
51
  // Defs
52
52
  this.element.appendChild(this._svgDefs.node());
53
+ this.element.appendChild(this._svgDefsExternal.node());
53
54
  if (!preventRender)
54
55
  this.render();
55
56
  }
@@ -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 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
+ {"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 this.element.appendChild(this._svgDefsExternal.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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"}
@@ -123,6 +123,7 @@ class XYContainer extends ContainerCore {
123
123
  this.element.appendChild(this._clipPath.node());
124
124
  // Defs
125
125
  this.element.appendChild(this._svgDefs.node());
126
+ this.element.appendChild(this._svgDefsExternal.node());
126
127
  // Rendering
127
128
  if (!preventRender)
128
129
  this.render();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/containers/xy-container/index.ts"],"sourcesContent":["import { css } from '@emotion/css'\nimport { extent, merge as mergeArrays } from 'd3-array'\nimport { Selection } from 'd3-selection'\n\n// Global CSS variables (side effects import)\nimport 'styles/index'\n\n// Core\nimport { ContainerCore } from 'core/container'\nimport { XYComponentCore } from 'core/xy-component'\nimport { XYComponentConfigInterface } from 'core/xy-component/config'\n\n// Data Model\nimport { CoreDataModel } from 'data-models/core'\n\n// Types\nimport { Spacing } from 'types/spacing'\nimport { AxisType } from 'components/axis/types'\nimport { ScaleDimension } from 'types/scale'\nimport { Direction } from 'types/direction'\n\n// Utils\nimport { clamp, clean, flatten } from 'utils/data'\nimport { guid } from 'utils/misc'\n\n// Config\nimport { XYContainerDefaultConfig, XYContainerConfigInterface } from './config'\nimport {\n AreaConfigInterface,\n BrushConfigInterface,\n LineConfigInterface,\n ScatterConfigInterface,\n StackedBarConfigInterface,\n TimelineConfigInterface,\n} from '../../components'\n\nexport type XYConfigInterface<Datum> = XYComponentConfigInterface<Datum>\n| StackedBarConfigInterface<Datum>\n| LineConfigInterface<Datum>\n| ScatterConfigInterface<Datum>\n| BrushConfigInterface<Datum>\n| TimelineConfigInterface<Datum>\n| AreaConfigInterface<Datum>\n\nexport class XYContainer<Datum> extends ContainerCore {\n protected _defaultConfig = XYContainerDefaultConfig as XYContainerConfigInterface<Datum>\n protected _svgDefs: Selection<SVGDefsElement, unknown, null, undefined>\n public datamodel: CoreDataModel<Datum[]> = new CoreDataModel()\n public config: XYContainerConfigInterface<Datum> = this._defaultConfig\n private _clipPath: Selection<SVGClipPathElement, unknown, null, undefined>\n private _clipPathId = guid()\n private _axisMargin: Spacing = { top: 0, bottom: 0, left: 0, right: 0 }\n private _firstRender = true\n\n constructor (element: HTMLElement, config?: XYContainerConfigInterface<Datum>, data?: Datum[]) {\n super(element)\n\n this._clipPath = this.svg.append('clipPath')\n .attr('id', this._clipPathId)\n this._clipPath.append('rect')\n\n // When the base tag is specified on the HTML head,\n // Safari fails to find the corresponding filter URL.\n // We have to provide tull url in order to fix that\n const highlightFilterId = 'saturate'\n const baseUrl = window.location.href.replace(window.location.hash, '')\n this.svg.attr('class', css`\n --highlight-filter-id: url(${baseUrl}#${highlightFilterId}); // defining a css variable\n `)\n\n this._svgDefs.append('filter')\n .attr('id', highlightFilterId)\n .attr('filterUnits', 'objectBoundingBox')\n .html('<feColorMatrix type=\"saturate\" in=\"SourceGraphic\" values=\"1.35\"/>')\n\n if (config) {\n this.updateContainer(config, true)\n }\n\n if (data) {\n this.setData(data, true)\n }\n\n // Render if there are axes or components with data\n if (\n this.config.xAxis ||\n this.config.yAxis ||\n this.components?.some(c => c.datamodel.data)\n ) {\n this.render()\n }\n\n // Force re-render axes when fonts are loaded\n (document as any).fonts?.ready.then(() => {\n if (!this._firstRender) this._renderAxes(0)\n })\n }\n\n get components (): XYComponentCore<Datum>[] {\n return this.config.components\n }\n\n // Overriding ContainerCore default get width method to work with axis auto margin\n get width (): number {\n const margin = this._getMargin()\n return clamp(this.containerWidth - margin.left - margin.right, 0, Number.POSITIVE_INFINITY)\n }\n\n // Overriding ContainerCore default get height method to work with axis auto margin\n get height (): number {\n const margin = this._getMargin()\n\n return clamp(this.containerHeight - margin.top - margin.bottom, 0, Number.POSITIVE_INFINITY)\n }\n\n public setData (data: Datum[], preventRender?: boolean): void {\n const { components, config } = this\n if (!data) return\n this.datamodel.data = data\n\n components.forEach((c) => {\n c.setData(data)\n })\n\n config.crosshair?.setData(data)\n config.xAxis?.setData(data)\n config.yAxis?.setData(data)\n config.tooltip?.hide()\n if (!preventRender) this.render()\n }\n\n public updateContainer (containerConfig: XYContainerConfigInterface<Datum>, preventRender?: boolean): void {\n super.updateContainer(containerConfig)\n this._removeAllChildren()\n\n // If there were any new components added we need to pass them data\n this.setData(this.datamodel.data, true)\n\n // Set up the axes\n if (containerConfig.xAxis) {\n this.config.xAxis.config.type = AxisType.X\n this.element.appendChild(containerConfig.xAxis.element)\n }\n if (containerConfig.yAxis) {\n this.config.yAxis.config.type = AxisType.Y\n this.element.appendChild(containerConfig.yAxis.element)\n }\n\n // Re-insert elements to the DOM\n for (const c of this.components) {\n this.element.appendChild(c.element)\n }\n\n // Set up the tooltip\n const tooltip = containerConfig.tooltip\n if (tooltip) {\n if (!tooltip.hasContainer()) tooltip.setContainer(this._container)\n tooltip.setComponents(this.components)\n }\n\n // Set up the crosshair\n const crosshair = containerConfig.crosshair\n if (crosshair) {\n crosshair.setContainer(this.svg)\n crosshair.tooltip = tooltip\n\n this.element.appendChild(crosshair.element)\n }\n\n // Set up annotations\n const annotations = containerConfig.annotations\n if (annotations) {\n this.element.appendChild(annotations.element)\n }\n\n // Clipping path\n this.element.appendChild(this._clipPath.node())\n\n // Defs\n this.element.appendChild(this._svgDefs.node())\n\n // Rendering\n if (!preventRender) this.render()\n }\n\n public updateComponents (componentConfigs: XYConfigInterface<Datum>[], preventRender?: boolean): void {\n const { config } = this\n\n this.components.forEach((c, i) => {\n const componentConfig = componentConfigs[i]\n if (componentConfig) {\n c.setConfig(componentConfigs[i])\n }\n })\n\n this._updateScales(...this.components, config.xAxis, config.yAxis, config.crosshair)\n if (!preventRender) this.render()\n }\n\n public update (containerConfig: XYContainerConfigInterface<Datum>, componentConfigs?: XYComponentConfigInterface<Datum>[], data?: Datum[]): void {\n if (data) this.datamodel.data = data // Just updating the data model because the `updateContainer` method has the `setData` step inside\n if (containerConfig) this.updateContainer(containerConfig, true)\n if (componentConfigs) this.updateComponents(componentConfigs, true)\n this.render()\n }\n\n protected _preRender (): void {\n const { config } = this\n super._preRender()\n\n // Calculate extra margin required to fit the axes\n if (config.autoMargin) {\n this._setAutoMargin()\n }\n\n // Pass size to the components\n const components = clean([...this.components, config.xAxis, config.yAxis, config.crosshair, config.annotations])\n for (const c of components) {\n c.setSize(this.width, this.height, this.containerWidth, this.containerHeight)\n }\n\n // Update Scales of all the components at once to calculate required paddings and sync them\n this._updateScales(...this.components, config.xAxis, config.yAxis, config.crosshair)\n }\n\n protected _render (customDuration?: number): void {\n const { config } = this\n super._render()\n\n // Get chart total margin after auto margin calculations\n const margin = this._getMargin()\n\n // Render components\n for (const c of this.components) {\n c.g.attr('transform', `translate(${margin.left},${margin.top})`)\n .style('clip-path', c.clippable ? `url(#${this._clipPathId})` : null)\n .style('-webkit-clip-path', c.clippable ? `url(#${this._clipPathId})` : null)\n\n c.render(customDuration)\n }\n\n this._renderAxes(this._firstRender ? 0 : customDuration)\n\n // Clip RectsetSize\n // Extending the clipping path to allow small overflow (e.g. Line will looks better that way when it touches the edges)\n const clipPathExtension = 2\n this._clipPath.select('rect')\n .attr('x', -clipPathExtension)\n .attr('y', -clipPathExtension)\n .attr('width', this.width + 2 * clipPathExtension)\n .attr('height', this.height + 2 * clipPathExtension)\n\n // Tooltip\n config.tooltip?.update() // Re-bind events\n\n // Crosshair\n const crosshair = config.crosshair\n if (crosshair) {\n // Pass accessors\n const yAccessors = this.components.filter(c => !c.stacked).map(c => c.config.y)\n const yStackedAccessors = this.components.filter(c => c.stacked).map(c => c.config.y)\n const baselineComponentConfig = this.components.find(c => (c.config as AreaConfigInterface<Datum>).baseline)?.config as AreaConfigInterface<Datum>\n const baselineAccessor = baselineComponentConfig?.baseline\n\n crosshair.accessors = {\n x: this.components[0]?.config.x,\n y: flatten(yAccessors),\n yStacked: flatten(yStackedAccessors),\n baseline: baselineAccessor,\n }\n\n crosshair.g.attr('transform', `translate(${margin.left},${margin.top})`)\n .style('clip-path', `url(#${this._clipPathId})`)\n .style('-webkit-clip-path', `url(#${this._clipPathId})`)\n crosshair.hide()\n }\n\n config.annotations?.g.attr('transform', `translate(${margin.left},${margin.top})`)\n config.annotations?.render()\n\n this._firstRender = false\n }\n\n private _updateScales<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const c = clean(components || this.components)\n this._setScales(...c)\n this._updateScalesDomain(...c)\n this._updateScalesRange(...c)\n }\n\n private _setScales<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n // Set the X and Y scales\n if (config.xScale) components.forEach(c => c.setScale(ScaleDimension.X, config.xScale))\n if (config.yScale) components.forEach(c => c.setScale(ScaleDimension.Y, config.yScale))\n }\n\n private _updateScalesDomain<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n const componentsWithDomain = components.filter(c => !c.config.excludeFromDomainCalculation)\n\n // Loop over all the dimensions\n Object.values(ScaleDimension).forEach((dimension: ScaleDimension) => {\n const [min, max] = extent(\n mergeArrays(\n componentsWithDomain.map(c => c.getDataExtent(dimension, config.scaleByDomain))\n ) as number[]\n ) // Components with undefined dimension accessors will return [undefined, undefined] but d3.extent will take care of that\n\n const configuredDomain = dimension === ScaleDimension.Y ? config.yDomain : config.xDomain\n const configuredDomainMinConstraint = dimension === ScaleDimension.Y ? config.yDomainMinConstraint : config.xDomainMinConstraint\n const configuredDomainMaxConstraint = dimension === ScaleDimension.Y ? config.yDomainMaxConstraint : config.xDomainMaxConstraint\n const domainMin = configuredDomain?.[0] ?? min ?? 0\n const domainMax = configuredDomain?.[1] ?? max ?? 1\n const domain = [\n clamp(domainMin, configuredDomainMinConstraint?.[0] ?? Number.NEGATIVE_INFINITY, configuredDomainMinConstraint?.[1] ?? Number.POSITIVE_INFINITY),\n clamp(domainMax, configuredDomainMaxConstraint?.[0] ?? Number.NEGATIVE_INFINITY, configuredDomainMaxConstraint?.[1] ?? Number.POSITIVE_INFINITY),\n ]\n\n // Extend the X and Y domains if they're empty and `preventEmptyDomain` was explicitly set to `true`\n // or just the X domain if there is no data provided and `preventEmptyDomain` set to `null`\n if (domain[0] === domain[1]) {\n const hasDataProvided = componentsWithDomain.some(c => c.datamodel.data?.length > 0)\n if (config.preventEmptyDomain || (config.preventEmptyDomain === null && (!hasDataProvided || dimension === ScaleDimension.Y))) {\n domain[1] = domain[0] + 1\n }\n }\n\n components.forEach(c => c.setScaleDomain(dimension, domain))\n })\n }\n\n private _updateScalesRange<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n // Set initial scale range\n const isYDirectionSouth = config.yDirection === Direction.South\n const xRange: [number, number] = [config.padding.left ?? 0, this.width - config.padding.right ?? 0]\n const yRange: [number, number] = [this.height - config.padding.bottom ?? 0, config.padding.top ?? 0]\n if (isYDirectionSouth) yRange.reverse()\n\n for (const c of components) {\n c.setScaleRange(ScaleDimension.X, config.xRange ?? xRange)\n c.setScaleRange(ScaleDimension.Y, config.yRange ?? yRange)\n }\n\n // Get and combine bleed\n const bleed = components.map(c => c.bleed).reduce((bleed, b) => {\n for (const key of Object.keys(bleed)) {\n const k = key as keyof Spacing\n if (bleed[k] < b[k]) bleed[k] = b[k]\n }\n return bleed\n }, { top: 0, bottom: 0, left: 0, right: 0 })\n\n // Update scale range\n for (const c of components) {\n c.setScaleRange(ScaleDimension.X, [xRange[0] + bleed.left, xRange[1] - bleed.right])\n c.setScaleRange(\n ScaleDimension.Y,\n isYDirectionSouth\n ? [yRange[0] + bleed.top, yRange[1] - bleed.bottom] // if Y axis is directed downwards\n : [yRange[0] - bleed.bottom, yRange[1] + bleed.top] // if Y axis is directed upwards\n )\n }\n }\n\n private _renderAxes (duration: number): void {\n const { config: { xAxis, yAxis } } = this\n const margin = this._getMargin()\n\n const axes = clean([xAxis, yAxis])\n axes.forEach(axis => {\n const offset = axis.getOffset(margin)\n axis.g.attr('transform', `translate(${offset.left},${offset.top})`)\n axis.render(duration)\n })\n }\n\n private _setAutoMargin (): void {\n const { config: { xAxis, yAxis } } = this\n\n // At first we need to set the domain to the scales\n const components = clean([...this.components, xAxis, yAxis])\n this._updateScalesDomain(...components)\n\n // Calculate margin required by the axes\n // We do two iterations on the first render, because the amount and size of ticks can change\n // after new margin are calculated and applied (axes dimensions will change).\n // That's needed for correct label placement.\n const numIterations = this._firstRender ? 2 : 1\n for (let i = 0; i < numIterations; i += 1) {\n const axisMargin: Spacing = { top: 0, bottom: 0, left: 0, right: 0 }\n this._updateScalesRange(...components)\n const axes = clean([xAxis, yAxis])\n axes.forEach(axis => {\n axis.preRender()\n\n const m = axis.getRequiredMargin()\n if (axisMargin.top < m.top) axisMargin.top = m.top\n if (axisMargin.bottom < m.bottom) axisMargin.bottom = m.bottom\n if (axisMargin.left < m.left) axisMargin.left = m.left\n if (axisMargin.right < m.right) axisMargin.right = m.right\n })\n this._axisMargin = axisMargin\n }\n }\n\n private _getMargin (): Spacing {\n const { config: { margin } } = this\n\n return {\n top: margin.top + this._axisMargin.top,\n bottom: margin.bottom + this._axisMargin.bottom,\n left: margin.left + this._axisMargin.left,\n right: margin.right + this._axisMargin.right,\n }\n }\n\n public destroy (): void {\n const { components, config: { tooltip, crosshair, annotations, xAxis, yAxis } } = this\n super.destroy()\n\n for (const c of components) c?.destroy()\n tooltip?.destroy()\n crosshair?.destroy()\n annotations?.destroy()\n xAxis?.destroy()\n yAxis?.destroy()\n }\n}\n"],"names":["mergeArrays"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/containers/xy-container/index.ts"],"sourcesContent":["import { css } from '@emotion/css'\nimport { extent, merge as mergeArrays } from 'd3-array'\nimport { Selection } from 'd3-selection'\n\n// Global CSS variables (side effects import)\nimport 'styles/index'\n\n// Core\nimport { ContainerCore } from 'core/container'\nimport { XYComponentCore } from 'core/xy-component'\nimport { XYComponentConfigInterface } from 'core/xy-component/config'\n\n// Data Model\nimport { CoreDataModel } from 'data-models/core'\n\n// Types\nimport { Spacing } from 'types/spacing'\nimport { AxisType } from 'components/axis/types'\nimport { ScaleDimension } from 'types/scale'\nimport { Direction } from 'types/direction'\n\n// Utils\nimport { clamp, clean, flatten } from 'utils/data'\nimport { guid } from 'utils/misc'\n\n// Config\nimport { XYContainerDefaultConfig, XYContainerConfigInterface } from './config'\nimport {\n AreaConfigInterface,\n BrushConfigInterface,\n LineConfigInterface,\n ScatterConfigInterface,\n StackedBarConfigInterface,\n TimelineConfigInterface,\n} from '../../components'\n\nexport type XYConfigInterface<Datum> = XYComponentConfigInterface<Datum>\n| StackedBarConfigInterface<Datum>\n| LineConfigInterface<Datum>\n| ScatterConfigInterface<Datum>\n| BrushConfigInterface<Datum>\n| TimelineConfigInterface<Datum>\n| AreaConfigInterface<Datum>\n\nexport class XYContainer<Datum> extends ContainerCore {\n protected _defaultConfig = XYContainerDefaultConfig as XYContainerConfigInterface<Datum>\n protected _svgDefs: Selection<SVGDefsElement, unknown, null, undefined>\n public datamodel: CoreDataModel<Datum[]> = new CoreDataModel()\n public config: XYContainerConfigInterface<Datum> = this._defaultConfig\n private _clipPath: Selection<SVGClipPathElement, unknown, null, undefined>\n private _clipPathId = guid()\n private _axisMargin: Spacing = { top: 0, bottom: 0, left: 0, right: 0 }\n private _firstRender = true\n\n constructor (element: HTMLElement, config?: XYContainerConfigInterface<Datum>, data?: Datum[]) {\n super(element)\n\n this._clipPath = this.svg.append('clipPath')\n .attr('id', this._clipPathId)\n this._clipPath.append('rect')\n\n // When the base tag is specified on the HTML head,\n // Safari fails to find the corresponding filter URL.\n // We have to provide tull url in order to fix that\n const highlightFilterId = 'saturate'\n const baseUrl = window.location.href.replace(window.location.hash, '')\n this.svg.attr('class', css`\n --highlight-filter-id: url(${baseUrl}#${highlightFilterId}); // defining a css variable\n `)\n\n this._svgDefs.append('filter')\n .attr('id', highlightFilterId)\n .attr('filterUnits', 'objectBoundingBox')\n .html('<feColorMatrix type=\"saturate\" in=\"SourceGraphic\" values=\"1.35\"/>')\n\n if (config) {\n this.updateContainer(config, true)\n }\n\n if (data) {\n this.setData(data, true)\n }\n\n // Render if there are axes or components with data\n if (\n this.config.xAxis ||\n this.config.yAxis ||\n this.components?.some(c => c.datamodel.data)\n ) {\n this.render()\n }\n\n // Force re-render axes when fonts are loaded\n (document as any).fonts?.ready.then(() => {\n if (!this._firstRender) this._renderAxes(0)\n })\n }\n\n get components (): XYComponentCore<Datum>[] {\n return this.config.components\n }\n\n // Overriding ContainerCore default get width method to work with axis auto margin\n get width (): number {\n const margin = this._getMargin()\n return clamp(this.containerWidth - margin.left - margin.right, 0, Number.POSITIVE_INFINITY)\n }\n\n // Overriding ContainerCore default get height method to work with axis auto margin\n get height (): number {\n const margin = this._getMargin()\n\n return clamp(this.containerHeight - margin.top - margin.bottom, 0, Number.POSITIVE_INFINITY)\n }\n\n public setData (data: Datum[], preventRender?: boolean): void {\n const { components, config } = this\n if (!data) return\n this.datamodel.data = data\n\n components.forEach((c) => {\n c.setData(data)\n })\n\n config.crosshair?.setData(data)\n config.xAxis?.setData(data)\n config.yAxis?.setData(data)\n config.tooltip?.hide()\n if (!preventRender) this.render()\n }\n\n public updateContainer (containerConfig: XYContainerConfigInterface<Datum>, preventRender?: boolean): void {\n super.updateContainer(containerConfig)\n this._removeAllChildren()\n\n // If there were any new components added we need to pass them data\n this.setData(this.datamodel.data, true)\n\n // Set up the axes\n if (containerConfig.xAxis) {\n this.config.xAxis.config.type = AxisType.X\n this.element.appendChild(containerConfig.xAxis.element)\n }\n if (containerConfig.yAxis) {\n this.config.yAxis.config.type = AxisType.Y\n this.element.appendChild(containerConfig.yAxis.element)\n }\n\n // Re-insert elements to the DOM\n for (const c of this.components) {\n this.element.appendChild(c.element)\n }\n\n // Set up the tooltip\n const tooltip = containerConfig.tooltip\n if (tooltip) {\n if (!tooltip.hasContainer()) tooltip.setContainer(this._container)\n tooltip.setComponents(this.components)\n }\n\n // Set up the crosshair\n const crosshair = containerConfig.crosshair\n if (crosshair) {\n crosshair.setContainer(this.svg)\n crosshair.tooltip = tooltip\n\n this.element.appendChild(crosshair.element)\n }\n\n // Set up annotations\n const annotations = containerConfig.annotations\n if (annotations) {\n this.element.appendChild(annotations.element)\n }\n\n // Clipping path\n this.element.appendChild(this._clipPath.node())\n\n // Defs\n this.element.appendChild(this._svgDefs.node())\n this.element.appendChild(this._svgDefsExternal.node())\n\n // Rendering\n if (!preventRender) this.render()\n }\n\n public updateComponents (componentConfigs: XYConfigInterface<Datum>[], preventRender?: boolean): void {\n const { config } = this\n\n this.components.forEach((c, i) => {\n const componentConfig = componentConfigs[i]\n if (componentConfig) {\n c.setConfig(componentConfigs[i])\n }\n })\n\n this._updateScales(...this.components, config.xAxis, config.yAxis, config.crosshair)\n if (!preventRender) this.render()\n }\n\n public update (containerConfig: XYContainerConfigInterface<Datum>, componentConfigs?: XYComponentConfigInterface<Datum>[], data?: Datum[]): void {\n if (data) this.datamodel.data = data // Just updating the data model because the `updateContainer` method has the `setData` step inside\n if (containerConfig) this.updateContainer(containerConfig, true)\n if (componentConfigs) this.updateComponents(componentConfigs, true)\n this.render()\n }\n\n protected _preRender (): void {\n const { config } = this\n super._preRender()\n\n // Calculate extra margin required to fit the axes\n if (config.autoMargin) {\n this._setAutoMargin()\n }\n\n // Pass size to the components\n const components = clean([...this.components, config.xAxis, config.yAxis, config.crosshair, config.annotations])\n for (const c of components) {\n c.setSize(this.width, this.height, this.containerWidth, this.containerHeight)\n }\n\n // Update Scales of all the components at once to calculate required paddings and sync them\n this._updateScales(...this.components, config.xAxis, config.yAxis, config.crosshair)\n }\n\n protected _render (customDuration?: number): void {\n const { config } = this\n super._render()\n\n // Get chart total margin after auto margin calculations\n const margin = this._getMargin()\n\n // Render components\n for (const c of this.components) {\n c.g.attr('transform', `translate(${margin.left},${margin.top})`)\n .style('clip-path', c.clippable ? `url(#${this._clipPathId})` : null)\n .style('-webkit-clip-path', c.clippable ? `url(#${this._clipPathId})` : null)\n\n c.render(customDuration)\n }\n\n this._renderAxes(this._firstRender ? 0 : customDuration)\n\n // Clip RectsetSize\n // Extending the clipping path to allow small overflow (e.g. Line will looks better that way when it touches the edges)\n const clipPathExtension = 2\n this._clipPath.select('rect')\n .attr('x', -clipPathExtension)\n .attr('y', -clipPathExtension)\n .attr('width', this.width + 2 * clipPathExtension)\n .attr('height', this.height + 2 * clipPathExtension)\n\n // Tooltip\n config.tooltip?.update() // Re-bind events\n\n // Crosshair\n const crosshair = config.crosshair\n if (crosshair) {\n // Pass accessors\n const yAccessors = this.components.filter(c => !c.stacked).map(c => c.config.y)\n const yStackedAccessors = this.components.filter(c => c.stacked).map(c => c.config.y)\n const baselineComponentConfig = this.components.find(c => (c.config as AreaConfigInterface<Datum>).baseline)?.config as AreaConfigInterface<Datum>\n const baselineAccessor = baselineComponentConfig?.baseline\n\n crosshair.accessors = {\n x: this.components[0]?.config.x,\n y: flatten(yAccessors),\n yStacked: flatten(yStackedAccessors),\n baseline: baselineAccessor,\n }\n\n crosshair.g.attr('transform', `translate(${margin.left},${margin.top})`)\n .style('clip-path', `url(#${this._clipPathId})`)\n .style('-webkit-clip-path', `url(#${this._clipPathId})`)\n crosshair.hide()\n }\n\n config.annotations?.g.attr('transform', `translate(${margin.left},${margin.top})`)\n config.annotations?.render()\n\n this._firstRender = false\n }\n\n private _updateScales<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const c = clean(components || this.components)\n this._setScales(...c)\n this._updateScalesDomain(...c)\n this._updateScalesRange(...c)\n }\n\n private _setScales<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n // Set the X and Y scales\n if (config.xScale) components.forEach(c => c.setScale(ScaleDimension.X, config.xScale))\n if (config.yScale) components.forEach(c => c.setScale(ScaleDimension.Y, config.yScale))\n }\n\n private _updateScalesDomain<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n const componentsWithDomain = components.filter(c => !c.config.excludeFromDomainCalculation)\n\n // Loop over all the dimensions\n Object.values(ScaleDimension).forEach((dimension: ScaleDimension) => {\n const [min, max] = extent(\n mergeArrays(\n componentsWithDomain.map(c => c.getDataExtent(dimension, config.scaleByDomain))\n ) as number[]\n ) // Components with undefined dimension accessors will return [undefined, undefined] but d3.extent will take care of that\n\n const configuredDomain = dimension === ScaleDimension.Y ? config.yDomain : config.xDomain\n const configuredDomainMinConstraint = dimension === ScaleDimension.Y ? config.yDomainMinConstraint : config.xDomainMinConstraint\n const configuredDomainMaxConstraint = dimension === ScaleDimension.Y ? config.yDomainMaxConstraint : config.xDomainMaxConstraint\n const domainMin = configuredDomain?.[0] ?? min ?? 0\n const domainMax = configuredDomain?.[1] ?? max ?? 1\n const domain = [\n clamp(domainMin, configuredDomainMinConstraint?.[0] ?? Number.NEGATIVE_INFINITY, configuredDomainMinConstraint?.[1] ?? Number.POSITIVE_INFINITY),\n clamp(domainMax, configuredDomainMaxConstraint?.[0] ?? Number.NEGATIVE_INFINITY, configuredDomainMaxConstraint?.[1] ?? Number.POSITIVE_INFINITY),\n ]\n\n // Extend the X and Y domains if they're empty and `preventEmptyDomain` was explicitly set to `true`\n // or just the X domain if there is no data provided and `preventEmptyDomain` set to `null`\n if (domain[0] === domain[1]) {\n const hasDataProvided = componentsWithDomain.some(c => c.datamodel.data?.length > 0)\n if (config.preventEmptyDomain || (config.preventEmptyDomain === null && (!hasDataProvided || dimension === ScaleDimension.Y))) {\n domain[1] = domain[0] + 1\n }\n }\n\n components.forEach(c => c.setScaleDomain(dimension, domain))\n })\n }\n\n private _updateScalesRange<T extends XYComponentCore<Datum>> (...components: T[]): void {\n const { config } = this\n if (!components) return\n\n // Set initial scale range\n const isYDirectionSouth = config.yDirection === Direction.South\n const xRange: [number, number] = [config.padding.left ?? 0, this.width - config.padding.right ?? 0]\n const yRange: [number, number] = [this.height - config.padding.bottom ?? 0, config.padding.top ?? 0]\n if (isYDirectionSouth) yRange.reverse()\n\n for (const c of components) {\n c.setScaleRange(ScaleDimension.X, config.xRange ?? xRange)\n c.setScaleRange(ScaleDimension.Y, config.yRange ?? yRange)\n }\n\n // Get and combine bleed\n const bleed = components.map(c => c.bleed).reduce((bleed, b) => {\n for (const key of Object.keys(bleed)) {\n const k = key as keyof Spacing\n if (bleed[k] < b[k]) bleed[k] = b[k]\n }\n return bleed\n }, { top: 0, bottom: 0, left: 0, right: 0 })\n\n // Update scale range\n for (const c of components) {\n c.setScaleRange(ScaleDimension.X, [xRange[0] + bleed.left, xRange[1] - bleed.right])\n c.setScaleRange(\n ScaleDimension.Y,\n isYDirectionSouth\n ? [yRange[0] + bleed.top, yRange[1] - bleed.bottom] // if Y axis is directed downwards\n : [yRange[0] - bleed.bottom, yRange[1] + bleed.top] // if Y axis is directed upwards\n )\n }\n }\n\n private _renderAxes (duration: number): void {\n const { config: { xAxis, yAxis } } = this\n const margin = this._getMargin()\n\n const axes = clean([xAxis, yAxis])\n axes.forEach(axis => {\n const offset = axis.getOffset(margin)\n axis.g.attr('transform', `translate(${offset.left},${offset.top})`)\n axis.render(duration)\n })\n }\n\n private _setAutoMargin (): void {\n const { config: { xAxis, yAxis } } = this\n\n // At first we need to set the domain to the scales\n const components = clean([...this.components, xAxis, yAxis])\n this._updateScalesDomain(...components)\n\n // Calculate margin required by the axes\n // We do two iterations on the first render, because the amount and size of ticks can change\n // after new margin are calculated and applied (axes dimensions will change).\n // That's needed for correct label placement.\n const numIterations = this._firstRender ? 2 : 1\n for (let i = 0; i < numIterations; i += 1) {\n const axisMargin: Spacing = { top: 0, bottom: 0, left: 0, right: 0 }\n this._updateScalesRange(...components)\n const axes = clean([xAxis, yAxis])\n axes.forEach(axis => {\n axis.preRender()\n\n const m = axis.getRequiredMargin()\n if (axisMargin.top < m.top) axisMargin.top = m.top\n if (axisMargin.bottom < m.bottom) axisMargin.bottom = m.bottom\n if (axisMargin.left < m.left) axisMargin.left = m.left\n if (axisMargin.right < m.right) axisMargin.right = m.right\n })\n this._axisMargin = axisMargin\n }\n }\n\n private _getMargin (): Spacing {\n const { config: { margin } } = this\n\n return {\n top: margin.top + this._axisMargin.top,\n bottom: margin.bottom + this._axisMargin.bottom,\n left: margin.left + this._axisMargin.left,\n right: margin.right + this._axisMargin.right,\n }\n }\n\n public destroy (): void {\n const { components, config: { tooltip, crosshair, annotations, xAxis, yAxis } } = this\n super.destroy()\n\n for (const c of components) c?.destroy()\n tooltip?.destroy()\n crosshair?.destroy()\n annotations?.destroy()\n xAxis?.destroy()\n yAxis?.destroy()\n }\n}\n"],"names":["mergeArrays"],"mappings":"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"}
@@ -11,6 +11,7 @@ export declare class ContainerCore {
11
11
  protected _isFirstRender: boolean;
12
12
  protected _resizeObserver: ResizeObserver | undefined;
13
13
  protected _svgDefs: Selection<SVGDefsElement, unknown, null, undefined>;
14
+ protected _svgDefsExternal: Selection<SVGDefsElement, unknown, null, undefined>;
14
15
  private _containerSize;
15
16
  static DEFAULT_CONTAINER_HEIGHT: number;
16
17
  constructor(element: HTMLElement);
@@ -22,6 +22,7 @@ class ContainerCore {
22
22
  .attr('height', ContainerCore.DEFAULT_CONTAINER_HEIGHT) // Overriding default SVG height of 150
23
23
  .attr('aria-hidden', true);
24
24
  this._svgDefs = this.svg.append('defs');
25
+ this._svgDefsExternal = this.svg.append('defs');
25
26
  this.element = this.svg.node();
26
27
  }
27
28
  updateContainer(config) {
@@ -35,11 +36,11 @@ class ContainerCore {
35
36
  _preRender() { }
36
37
  // The `_render` step should be used to perform the actual rendering
37
38
  _render(duration) {
38
- const { config } = this;
39
+ const { config, prevConfig } = this;
39
40
  // Add `svgDefs` if provided in the config
40
- if (config.svgDefs) {
41
- this.svg.select('.svgDefs').remove();
42
- this.svg.append('defs').attr('class', 'svgDefs').html(config.svgDefs);
41
+ if (config.svgDefs !== prevConfig.svgDefs) {
42
+ this._svgDefsExternal.selectAll('*').remove();
43
+ this._svgDefsExternal.html(config.svgDefs);
43
44
  }
44
45
  // Apply the `aria-label` attribute
45
46
  select(this._container)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/core/container/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Types\nimport { Sizing } from 'types/component'\n\n// Utils\nimport { isEqual, clamp, merge } from 'utils/data'\nimport { ResizeObserver } from 'utils/resize-observer'\n\n// Config\nimport { ContainerDefaultConfig, ContainerConfigInterface } from './config'\n\nexport class ContainerCore {\n public svg: Selection<SVGSVGElement, unknown, null, undefined>\n public element: SVGSVGElement\n public prevConfig: ContainerConfigInterface\n public config: ContainerConfigInterface\n\n protected _defaultConfig: ContainerConfigInterface = ContainerDefaultConfig\n protected _container: HTMLElement\n protected _requestedAnimationFrame: number\n protected _isFirstRender = true\n protected _resizeObserver: ResizeObserver | undefined\n protected _svgDefs: Selection<SVGDefsElement, unknown, null, undefined>\n private _containerSize: { width: number; height: number }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static DEFAULT_CONTAINER_HEIGHT = 300\n\n constructor (element: HTMLElement) {\n this._requestedAnimationFrame = null\n this._container = element\n\n // Setting `role` attribute to `image` to make the container accessible\n const container = select(this._container)\n container.attr('role', 'figure')\n\n // Create SVG element for visualizations\n this.svg = container.append('svg')\n // We set `display` to `block` because inline elements have an invisible\n // inline space that adds 4px to the height of the container\n .style('display', 'block')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .attr('height', ContainerCore.DEFAULT_CONTAINER_HEIGHT) // Overriding default SVG height of 150\n .attr('aria-hidden', true)\n\n this._svgDefs = this.svg.append('defs')\n this.element = this.svg.node()\n }\n\n public updateContainer<T extends ContainerConfigInterface> (config: T): void {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.prevConfig = this.config\n this.config = merge(this._defaultConfig, config)\n }\n\n // The `_preRender` step should be used to perform some actions before rendering.\n // For example, calculating scales, setting component sizes, etc ...\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected _preRender (): void {}\n\n // The `_render` step should be used to perform the actual rendering\n protected _render (duration?: number): void {\n const { config } = this\n\n // Add `svgDefs` if provided in the config\n if (config.svgDefs) {\n this.svg.select('.svgDefs').remove()\n this.svg.append('defs').attr('class', 'svgDefs').html(config.svgDefs)\n }\n\n // Apply the `aria-label` attribute\n select(this._container)\n .attr('aria-label', config.ariaLabel)\n\n this._isFirstRender = false\n }\n\n // Warning: Some Containers (i.e. Single Container) may override this method, so if you introduce any changes here,\n // make sure to check that other containers didn't break after them.\n public render (duration = this.config.duration): void {\n const width = this.config.width || this.containerWidth\n const height = this.config.height || this.containerHeight\n\n // We set SVG size in `render()` instead of `_render()`, because the size values in pixels will become\n // available only in the next animation when being accessed via `element.clientWidth` and `element.clientHeight`,\n // and we rely on those values when setting width and size of the components.\n this.svg\n .attr('width', width)\n .attr('height', height)\n\n // Set up Resize Observer. We do it in `render()` to capture container size change if it happened\n // in the next animation frame after the initial `render` was called.\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 get containerWidth (): number {\n return this.config.width\n ? this.element.clientWidth\n : (this._container.clientWidth || this._container.getBoundingClientRect().width)\n }\n\n get containerHeight (): number {\n return this.config.height\n ? this.element.clientHeight\n : (this._container.clientHeight || this._container.getBoundingClientRect().height || ContainerCore.DEFAULT_CONTAINER_HEIGHT)\n }\n\n get width (): number {\n return clamp(this.containerWidth - this.config.margin.left - this.config.margin.right, 0, Number.POSITIVE_INFINITY)\n }\n\n get height (): number {\n return clamp(this.containerHeight - this.config.margin.top - this.config.margin.bottom, 0, Number.POSITIVE_INFINITY)\n }\n\n protected _removeAllChildren (): void {\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild)\n }\n }\n\n protected _onResize (): void {\n const { config } = this\n const redrawOnResize = config.sizing === Sizing.Fit || config.sizing === Sizing.FitWidth\n if (redrawOnResize) this.render(0)\n }\n\n protected _setUpResizeObserver (): void {\n if (this._resizeObserver) return\n const containerRect = this._container.getBoundingClientRect()\n this._containerSize = { width: containerRect.width, height: containerRect.height }\n\n this._resizeObserver = new ResizeObserver((entries, observer) => {\n const resizedContainerRect = this._container.getBoundingClientRect()\n const resizedContainerSize = { width: resizedContainerRect.width, height: resizedContainerRect.height }\n const hasSizeChanged = !isEqual(this._containerSize, resizedContainerSize)\n // Do resize only if element is attached to the DOM\n // will come in useful when some ancestor of container becomes detached\n if (hasSizeChanged && resizedContainerSize.width && resizedContainerSize.height) {\n this._containerSize = resizedContainerSize\n this._onResize()\n }\n })\n this._resizeObserver.observe(this._container)\n }\n\n public destroy (): void {\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._resizeObserver?.disconnect()\n this.svg.remove()\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/core/container/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Types\nimport { Sizing } from 'types/component'\n\n// Utils\nimport { isEqual, clamp, merge } from 'utils/data'\nimport { ResizeObserver } from 'utils/resize-observer'\n\n// Config\nimport { ContainerDefaultConfig, ContainerConfigInterface } from './config'\n\nexport class ContainerCore {\n public svg: Selection<SVGSVGElement, unknown, null, undefined>\n public element: SVGSVGElement\n public prevConfig: ContainerConfigInterface\n public config: ContainerConfigInterface\n\n protected _defaultConfig: ContainerConfigInterface = ContainerDefaultConfig\n protected _container: HTMLElement\n protected _requestedAnimationFrame: number\n protected _isFirstRender = true\n protected _resizeObserver: ResizeObserver | undefined\n protected _svgDefs: Selection<SVGDefsElement, unknown, null, undefined>\n protected _svgDefsExternal: Selection<SVGDefsElement, unknown, null, undefined>\n private _containerSize: { width: number; height: number }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n static DEFAULT_CONTAINER_HEIGHT = 300\n\n constructor (element: HTMLElement) {\n this._requestedAnimationFrame = null\n this._container = element\n\n // Setting `role` attribute to `image` to make the container accessible\n const container = select(this._container)\n container.attr('role', 'figure')\n\n // Create SVG element for visualizations\n this.svg = container.append('svg')\n // We set `display` to `block` because inline elements have an invisible\n // inline space that adds 4px to the height of the container\n .style('display', 'block')\n .attr('xmlns', 'http://www.w3.org/2000/svg')\n .attr('height', ContainerCore.DEFAULT_CONTAINER_HEIGHT) // Overriding default SVG height of 150\n .attr('aria-hidden', true)\n\n this._svgDefs = this.svg.append('defs')\n this._svgDefsExternal = this.svg.append('defs')\n this.element = this.svg.node()\n }\n\n public updateContainer<T extends ContainerConfigInterface> (config: T): void {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.prevConfig = this.config\n this.config = merge(this._defaultConfig, config)\n }\n\n // The `_preRender` step should be used to perform some actions before rendering.\n // For example, calculating scales, setting component sizes, etc ...\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n protected _preRender (): void {}\n\n // The `_render` step should be used to perform the actual rendering\n protected _render (duration?: number): void {\n const { config, prevConfig } = this\n\n // Add `svgDefs` if provided in the config\n if (config.svgDefs !== prevConfig.svgDefs) {\n this._svgDefsExternal.selectAll('*').remove()\n this._svgDefsExternal.html(config.svgDefs)\n }\n\n // Apply the `aria-label` attribute\n select(this._container)\n .attr('aria-label', config.ariaLabel)\n\n this._isFirstRender = false\n }\n\n // Warning: Some Containers (i.e. Single Container) may override this method, so if you introduce any changes here,\n // make sure to check that other containers didn't break after them.\n public render (duration = this.config.duration): void {\n const width = this.config.width || this.containerWidth\n const height = this.config.height || this.containerHeight\n\n // We set SVG size in `render()` instead of `_render()`, because the size values in pixels will become\n // available only in the next animation when being accessed via `element.clientWidth` and `element.clientHeight`,\n // and we rely on those values when setting width and size of the components.\n this.svg\n .attr('width', width)\n .attr('height', height)\n\n // Set up Resize Observer. We do it in `render()` to capture container size change if it happened\n // in the next animation frame after the initial `render` was called.\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 get containerWidth (): number {\n return this.config.width\n ? this.element.clientWidth\n : (this._container.clientWidth || this._container.getBoundingClientRect().width)\n }\n\n get containerHeight (): number {\n return this.config.height\n ? this.element.clientHeight\n : (this._container.clientHeight || this._container.getBoundingClientRect().height || ContainerCore.DEFAULT_CONTAINER_HEIGHT)\n }\n\n get width (): number {\n return clamp(this.containerWidth - this.config.margin.left - this.config.margin.right, 0, Number.POSITIVE_INFINITY)\n }\n\n get height (): number {\n return clamp(this.containerHeight - this.config.margin.top - this.config.margin.bottom, 0, Number.POSITIVE_INFINITY)\n }\n\n protected _removeAllChildren (): void {\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild)\n }\n }\n\n protected _onResize (): void {\n const { config } = this\n const redrawOnResize = config.sizing === Sizing.Fit || config.sizing === Sizing.FitWidth\n if (redrawOnResize) this.render(0)\n }\n\n protected _setUpResizeObserver (): void {\n if (this._resizeObserver) return\n const containerRect = this._container.getBoundingClientRect()\n this._containerSize = { width: containerRect.width, height: containerRect.height }\n\n this._resizeObserver = new ResizeObserver((entries, observer) => {\n const resizedContainerRect = this._container.getBoundingClientRect()\n const resizedContainerSize = { width: resizedContainerRect.width, height: resizedContainerRect.height }\n const hasSizeChanged = !isEqual(this._containerSize, resizedContainerSize)\n // Do resize only if element is attached to the DOM\n // will come in useful when some ancestor of container becomes detached\n if (hasSizeChanged && resizedContainerSize.width && resizedContainerSize.height) {\n this._containerSize = resizedContainerSize\n this._onResize()\n }\n })\n this._resizeObserver.observe(this._container)\n }\n\n public destroy (): void {\n cancelAnimationFrame(this._requestedAnimationFrame)\n this._resizeObserver?.disconnect()\n this.svg.remove()\n }\n}\n"],"names":[],"mappings":";;;;;;MAYa,aAAa,CAAA;AAkBxB,IAAA,WAAA,CAAa,OAAoB,EAAA;QAZvB,IAAc,CAAA,cAAA,GAA6B,sBAAsB,CAAA;QAGjE,IAAc,CAAA,cAAA,GAAG,IAAI,CAAA;AAU7B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAA;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,OAAO,CAAA;;QAGzB,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AACzC,QAAA,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;;QAGhC,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC;;;AAG/B,aAAA,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC;AACzB,aAAA,IAAI,CAAC,OAAO,EAAE,4BAA4B,CAAC;aAC3C,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,wBAAwB,CAAC;AACtD,aAAA,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAE5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACvC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAC/C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;KAC/B;AAEM,IAAA,eAAe,CAAsC,MAAS,EAAA;;AAEnE,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;KACjD;;;;AAKS,IAAA,UAAU,MAAY;;AAGtB,IAAA,OAAO,CAAE,QAAiB,EAAA;AAClC,QAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;;AAGnC,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,OAAO,EAAE;YACzC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;YAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC3C,SAAA;;AAGD,QAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AACpB,aAAA,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;AAEvC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;KAC5B;;;AAIM,IAAA,MAAM,CAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAA;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAA;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,CAAA;;;;AAKzD,QAAA,IAAI,CAAC,GAAG;AACL,aAAA,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC;AACpB,aAAA,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;;;QAIzB,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,oBAAoB,EAAE,CAAA;;AAGtD,QAAA,oBAAoB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AACnD,QAAA,IAAI,CAAC,wBAAwB,GAAG,qBAAqB,CAAC,MAAK;YACzD,IAAI,CAAC,UAAU,EAAE,CAAA;AACjB,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;AACxB,SAAC,CAAC,CAAA;KACH;AAED,IAAA,IAAI,cAAc,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;AACtB,cAAE,IAAI,CAAC,OAAO,CAAC,WAAW;AAC1B,eAAG,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,CAAA;KACnF;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;AACvB,cAAE,IAAI,CAAC,OAAO,CAAC,YAAY;eACxB,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAC,MAAM,IAAI,aAAa,CAAC,wBAAwB,CAAC,CAAA;KAC/H;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;KACpH;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAA;KACrH;IAES,kBAAkB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAClD,SAAA;KACF;IAES,SAAS,GAAA;AACjB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAA;AACxF,QAAA,IAAI,cAAc;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;KACnC;IAES,oBAAoB,GAAA;QAC5B,IAAI,IAAI,CAAC,eAAe;YAAE,OAAM;QAChC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAA;AAC7D,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAA;QAElF,IAAI,CAAC,eAAe,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,EAAE,QAAQ,KAAI;YAC9D,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,CAAA;AACpE,YAAA,MAAM,oBAAoB,GAAG,EAAE,KAAK,EAAE,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,oBAAoB,CAAC,MAAM,EAAE,CAAA;YACvG,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;;;YAG1E,IAAI,cAAc,IAAI,oBAAoB,CAAC,KAAK,IAAI,oBAAoB,CAAC,MAAM,EAAE;AAC/E,gBAAA,IAAI,CAAC,cAAc,GAAG,oBAAoB,CAAA;gBAC1C,IAAI,CAAC,SAAS,EAAE,CAAA;AACjB,aAAA;AACH,SAAC,CAAC,CAAA;QACF,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;KAC9C;IAEM,OAAO,GAAA;;AACZ,QAAA,oBAAoB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;AACnD,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,eAAe,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAU,EAAE,CAAA;AAClC,QAAA,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAA;KAClB;;AArID;AACO,aAAwB,CAAA,wBAAA,GAAG,GAAG;;;;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@unovis/ts",
3
3
  "description": "Modular data visualization framework for React, Angular, Svelte, and vanilla TypeScript or JavaScript",
4
- "version": "1.5.0-alpha.0",
4
+ "version": "1.5.0-alpha.2",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/f5/unovis.git",