@unovis/ts 1.5.1-exf.9 → 1.5.1-ql.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.
Files changed (63) hide show
  1. package/components/donut/config.d.ts +0 -4
  2. package/components/donut/config.js +1 -1
  3. package/components/donut/config.js.map +1 -1
  4. package/components/donut/index.js +5 -35
  5. package/components/donut/index.js.map +1 -1
  6. package/components/graph/config.d.ts +1 -15
  7. package/components/graph/config.js +2 -5
  8. package/components/graph/config.js.map +1 -1
  9. package/components/graph/index.d.ts +9 -12
  10. package/components/graph/index.js +21 -33
  11. package/components/graph/index.js.map +1 -1
  12. package/components/graph/modules/link/index.d.ts +2 -3
  13. package/components/graph/modules/link/index.js +24 -47
  14. package/components/graph/modules/link/index.js.map +1 -1
  15. package/components/graph/modules/link/style.js +2 -0
  16. package/components/graph/modules/link/style.js.map +1 -1
  17. package/components/graph/modules/node/index.d.ts +0 -2
  18. package/components/graph/modules/node/index.js +4 -7
  19. package/components/graph/modules/node/index.js.map +1 -1
  20. package/components/graph/modules/panel/index.js +2 -2
  21. package/components/graph/modules/panel/index.js.map +1 -1
  22. package/components/graph/types.d.ts +0 -5
  23. package/components/graph/types.js.map +1 -1
  24. package/components/nested-donut/config.d.ts +1 -1
  25. package/components/nested-donut/config.js.map +1 -1
  26. package/components.d.ts +0 -3
  27. package/components.js +0 -2
  28. package/components.js.map +1 -1
  29. package/data-models/graph.d.ts +2 -3
  30. package/data-models/graph.js +6 -15
  31. package/data-models/graph.js.map +1 -1
  32. package/index.d.ts +0 -1
  33. package/index.js +0 -7
  34. package/index.js.map +1 -1
  35. package/package.json +2 -1
  36. package/types/graph.d.ts +0 -4
  37. package/types.d.ts +0 -1
  38. package/types.js +0 -1
  39. package/types.js.map +1 -1
  40. package/utils/data.d.ts +1 -1
  41. package/utils/data.js +6 -7
  42. package/utils/data.js.map +1 -1
  43. package/utils/text.d.ts +8 -8
  44. package/utils/text.js +8 -16
  45. package/utils/text.js.map +1 -1
  46. package/components/donut/constants.d.ts +0 -2
  47. package/components/donut/constants.js +0 -8
  48. package/components/donut/constants.js.map +0 -1
  49. package/components/treemap/config.d.ts +0 -26
  50. package/components/treemap/config.js +0 -6
  51. package/components/treemap/config.js.map +0 -1
  52. package/components/treemap/index.d.ts +0 -14
  53. package/components/treemap/index.js +0 -149
  54. package/components/treemap/index.js.map +0 -1
  55. package/components/treemap/style.d.ts +0 -19
  56. package/components/treemap/style.js +0 -49
  57. package/components/treemap/style.js.map +0 -1
  58. package/components/treemap/types.d.ts +0 -10
  59. package/components/treemap/types.js +0 -2
  60. package/components/treemap/types.js.map +0 -1
  61. package/data-models/index.d.ts +0 -4
  62. package/data-models/index.js +0 -5
  63. package/data-models/index.js.map +0 -1
@@ -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, sum } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport toPx from 'to-px'\n\n// Utils\nimport { throttle, getValue, getNumber, getBoolean, ensureArray } 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, isInternalHref } 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\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\n/** Updates the links partially according to their `_state` */\nexport function updateLinksPartial<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 updateLinkLines<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 linkPathLengthMap: Map<string, number>\n): Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown> {\n return 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 linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelData = ensureArray(\n getValue<GraphLink<N, L>, GraphCircleLabel | GraphCircleLabel[]>(d, config.linkLabel, d._indexGlobal)\n )\n const offsetSource = getValue(d, config.linkSourcePointOffset, i)\n const offsetTarget = getValue(d, config.linkTargetPointOffset, i)\n const x1 = getX(d.source) + (offsetSource?.[0] || 0)\n const y1 = getY(d.source) + (offsetSource?.[1] || 0)\n const x2 = getX(d.target) + (offsetTarget?.[0] || 0)\n const y2 = getY(d.target) + (offsetTarget?.[1] || 0)\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 const linkPathElement = linkSupport.attr('d', pathData).node()\n const cachedLinkPathLength = linkPathLengthMap.get(pathData)\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n if (!cachedLinkPathLength) linkPathLengthMap.set(pathData, pathLength)\n\n linkSupport\n .style('stroke', linkColor)\n .attr('transform', linkShiftTransform)\n\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\n // Arrow\n const linkArrowStyle = getLinkArrowStyle(d, config)\n if (linkArrowStyle) {\n const arrowPos = pathLength * (linkLabelData.length ? 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}\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 linkPathLengthMap: Map<string, number>\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 // Update line and arrow positions\n updateLinkLines(selection, config, duration, scale, getLinkArrowDefId, linkPathLengthMap)\n\n // Update labels and link flow (particles) groups\n selection.each((d, i, elements) => {\n const element = elements[i]\n const linkGroup = select(element)\n const flowGroup = linkGroup.select(`.${linkSelectors.flowGroup}`)\n const linkSupport = linkGroup.select<SVGPathElement>(`.${linkSelectors.linkSupport}`)\n const linkPathElement = linkSupport.node()\n const linkColor = getLinkColor(d, config)\n const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing)\n const linkLabelData = ensureArray(\n getValue<GraphLink<N, L>, GraphCircleLabel | GraphCircleLabel[]>(d, linkLabel, d._indexGlobal)\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 // Preparing the labels before rendering to be able to center them\n const linkLabelsDataPrepared = linkLabelData.map((linkLabelDatum) => {\n const text = linkLabelDatum.text?.toString() || ''\n const shouldRenderUseElement = isInternalHref(text)\n const fontSizePx = toPx(linkLabelDatum.fontSize) ?? getCSSVariableValueInPixels('var(--vis-graph-link-label-font-size)', linkGroup.node())\n const shouldBeRenderedAsCircle = text.length <= 2 || shouldRenderUseElement\n const paddingVertical = 4\n const paddingHorizontal = shouldBeRenderedAsCircle ? paddingVertical : 8\n const estimatedWidthPx = estimateStringPixelLength(text, fontSizePx)\n\n return {\n ...linkLabelDatum,\n _shouldRenderUseElement: shouldRenderUseElement,\n _fontSizePx: fontSizePx,\n _shouldBeRenderedAsCircle: shouldBeRenderedAsCircle,\n _paddingVertical: paddingVertical,\n _paddingHorizontal: paddingHorizontal,\n _estimatedWidthPx: estimatedWidthPx,\n _borderRadius: linkLabelDatum.radius ?? (shouldBeRenderedAsCircle ? fontSizePx : 4),\n _backgroundWidth: (shouldBeRenderedAsCircle ? fontSizePx : estimatedWidthPx) + paddingHorizontal * 2,\n _backgroundHeight: fontSizePx + paddingVertical * 2,\n }\n })\n type GraphCircleLabelPrepared = typeof linkLabelsDataPrepared[0]\n const linkLabelGroups = linkGroup\n .selectAll<SVGGElement, GraphCircleLabelPrepared>(`.${linkSelectors.linkLabelGroup}`)\n .data(linkLabelsDataPrepared, (d: GraphCircleLabelPrepared) => d.text)\n\n const linkLabelGroupsEnter = linkLabelGroups.enter().append('g').attr('class', linkSelectors.linkLabelGroup)\n linkLabelGroupsEnter.each((linkLabelDatum, i, elements) => {\n const linkLabelGroup = select<SVGGElement, GraphCircleLabelPrepared>(elements[i])\n linkLabelGroup.append('rect').attr('class', linkSelectors.linkLabelBackground)\n\n const linkLabelText = linkLabelDatum ? linkLabelDatum.text?.toString() : undefined\n const shouldRenderUseElement = isInternalHref(linkLabelText)\n linkLabelGroup.select<SVGTextElement>(`.${linkSelectors.linkLabelContent}`).remove()\n linkLabelGroup\n .append(shouldRenderUseElement ? 'use' : 'text')\n .attr('class', linkSelectors.linkLabelContent)\n })\n linkLabelGroupsEnter.style('opacity', 0)\n\n const linkLabelGroupsMerged = linkLabelGroups.merge(linkLabelGroupsEnter)\n const linkLabelMargin = 1\n let linkLabelShiftCumulative = -sum(linkLabelsDataPrepared, d => d._backgroundWidth + linkLabelMargin) / 2 // Centering the labels\n const cachedLinkPathLength = linkPathLengthMap.get(linkPathElement.getAttribute('d'))\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n const linkArrowStyle = getLinkArrowStyle(d, config)\n linkLabelGroupsMerged.each((linkLabelDatum, i, elements) => {\n const element = elements[i]\n const linkLabelGroup = select<SVGGElement, GraphCircleLabelPrepared>(element)\n const linkLabelText = linkLabelDatum.text?.toString()\n const linkLabelContent = linkLabelGroup.select<SVGTextElement | SVGUseElement>(`.${linkSelectors.linkLabelContent}`)\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 + linkLabelShiftCumulative + linkLabelDatum._backgroundWidth / 2)\n const linkLabelTranslate = `translate(${linkLabelPos.x}, ${linkLabelPos.y})`\n const linkLabelBackground = linkLabelGroup.select<SVGRectElement>(`.${linkSelectors.linkLabelBackground}`)\n\n // If the label was not displayed before, we set the initial transform\n if (!linkLabelGroup.attr('transform')) {\n linkLabelGroup.attr('transform', `${linkLabelTranslate} scale(0)`)\n }\n\n const linkLabelColor = linkLabelDatum.textColor ?? getLinkLabelTextColor(linkLabelDatum)\n if (linkLabelDatum._shouldRenderUseElement) {\n linkLabelContent\n .attr('href', linkLabelText)\n .attr('x', -linkLabelDatum._fontSizePx / 2)\n .attr('y', -linkLabelDatum._fontSizePx / 2)\n .attr('width', linkLabelDatum._fontSizePx)\n .attr('height', linkLabelDatum._fontSizePx)\n .style('fill', linkLabelColor)\n .style('color', linkLabelColor) // Setting `color` to be passed to SVGs that use `currentColor`\n } else {\n linkLabelContent\n .text(linkLabelText)\n .attr('dy', '0.1em')\n .style('font-size', linkLabelDatum._fontSizePx)\n .style('fill', linkLabelColor)\n }\n\n linkLabelGroup.attr('hidden', null)\n .style('cursor', linkLabelDatum.cursor)\n\n smartTransition(linkLabelGroup, duration)\n .attr('transform', `${linkLabelTranslate} scale(1)`)\n .style('opacity', 1)\n\n linkLabelBackground\n .attr('x', -linkLabelDatum._backgroundWidth / 2)\n .attr('y', -linkLabelDatum._backgroundHeight / 2)\n .attr('width', linkLabelDatum._backgroundWidth)\n .attr('height', linkLabelDatum._backgroundHeight)\n .attr('rx', linkLabelDatum._borderRadius)\n .style('fill', linkLabelDatum.color)\n\n linkLabelShiftCumulative += linkLabelDatum._backgroundWidth + linkLabelMargin\n })\n\n smartTransition(linkLabelGroups.exit(), duration)\n .style('opacity', 0)\n .remove()\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 updateLinksPartial(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 linkPathLengthMap: Map<string, 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 cachedLinkPathLength = linkPathLengthMap.get(linkPathElement.getAttribute('d'))\n const pathLength = cachedLinkPathLength ?? linkPathElement.getTotalLength()\n\n if (!getBoolean(d, linkFlow, d._indexGlobal) || !pathLength) 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\n selection.select(`.${linkSelectors.flowGroup}`)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\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\n"],"names":["linkSelectors.linkSupport","linkSelectors.link","linkSelectors.linkBand","linkSelectors.linkArrow","linkSelectors.flowGroup","linkSelectors.flowCircle","linkSelectors.greyedOutLink","linkSupport","link","linkBand","linkArrow","linkSelectors.linkDashed","flowGroup","linkSelectors.linkLabelGroup","linkSelectors.linkLabelBackground","linkSelectors.linkLabelContent","linkLabelContent","linkLabelBackground","generalSelectors.zoomOutLevel2"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/link/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\nimport { range, sum } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport toPx from 'to-px'\n\n// Utils\nimport { throttle, getValue, getNumber, getBoolean, ensureArray } 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, isInternalHref } 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\n/** Updates the links partially according to their `_state` */\nexport function updateLinksPartial<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 linkLabelData = ensureArray(\n getValue<GraphLink<N, L>, GraphCircleLabel | GraphCircleLabel[]>(d, linkLabel, d._indexGlobal)\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 * (linkLabelData.length ? 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 // Preparing the labels before rendering to be able to center them\n const linkLabelsDataPrepared = linkLabelData.map((linkLabelDatum) => {\n const text = linkLabelDatum.text?.toString() || ''\n const shouldRenderUseElement = isInternalHref(text)\n const fontSizePx = toPx(linkLabelDatum.fontSize) ?? getCSSVariableValueInPixels('var(--vis-graph-link-label-font-size)', linkGroup.node())\n const shouldBeRenderedAsCircle = text.length <= 2 || shouldRenderUseElement\n const paddingVertical = 4\n const paddingHorizontal = shouldBeRenderedAsCircle ? paddingVertical : 8\n const estimatedWidthPx = estimateStringPixelLength(text, fontSizePx)\n\n return {\n ...linkLabelDatum,\n _shouldRenderUseElement: shouldRenderUseElement,\n _fontSizePx: fontSizePx,\n _shouldBeRenderedAsCircle: shouldBeRenderedAsCircle,\n _paddingVertical: paddingVertical,\n _paddingHorizontal: paddingHorizontal,\n _estimatedWidthPx: estimatedWidthPx,\n _borderRadius: linkLabelDatum.radius ?? (shouldBeRenderedAsCircle ? fontSizePx : 4),\n _backgroundWidth: (shouldBeRenderedAsCircle ? fontSizePx : estimatedWidthPx) + paddingHorizontal * 2,\n _backgroundHeight: fontSizePx + paddingVertical * 2,\n }\n })\n type GraphCircleLabelPrepared = typeof linkLabelsDataPrepared[0]\n const linkLabelGroups = linkGroup\n .selectAll<SVGGElement, GraphCircleLabelPrepared>(`.${linkSelectors.linkLabelGroup}`)\n .data(linkLabelsDataPrepared, (d: GraphCircleLabelPrepared) => d.text)\n\n const linkLabelGroupsEnter = linkLabelGroups.enter().append('g').attr('class', linkSelectors.linkLabelGroup)\n linkLabelGroupsEnter.each((linkLabelDatum, i, elements) => {\n const linkLabelGroup = select<SVGGElement, GraphCircleLabelPrepared>(elements[i])\n linkLabelGroup.append('rect').attr('class', linkSelectors.linkLabelBackground)\n\n const linkLabelText = linkLabelDatum ? linkLabelDatum.text?.toString() : undefined\n const shouldRenderUseElement = isInternalHref(linkLabelText)\n linkLabelGroup.select<SVGTextElement>(`.${linkSelectors.linkLabelContent}`).remove()\n linkLabelGroup\n .append(shouldRenderUseElement ? 'use' : 'text')\n .attr('class', linkSelectors.linkLabelContent)\n })\n linkLabelGroupsEnter.style('opacity', 0)\n\n const linkLabelGroupsMerged = linkLabelGroups.merge(linkLabelGroupsEnter)\n const linkLabelMargin = 1\n let linkLabelShiftCumulative = -sum(linkLabelsDataPrepared, d => d._backgroundWidth + linkLabelMargin) / 2 // Centering the labels\n linkLabelGroupsMerged.each((linkLabelDatum, i, elements) => {\n const element = elements[i]\n const linkLabelGroup = select<SVGGElement, GraphCircleLabelPrepared>(element)\n const linkLabelText = linkLabelDatum.text?.toString()\n const linkLabelContent = linkLabelGroup.select<SVGTextElement | SVGUseElement>(`.${linkSelectors.linkLabelContent}`)\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 + linkLabelShiftCumulative + linkLabelDatum._backgroundWidth / 2)\n const linkLabelTranslate = `translate(${linkLabelPos.x}, ${linkLabelPos.y})`\n const linkLabelBackground = linkLabelGroup.select<SVGRectElement>(`.${linkSelectors.linkLabelBackground}`)\n\n // If the label was not displayed before, we set the initial transform\n if (!linkLabelGroup.attr('transform')) {\n linkLabelGroup.attr('transform', `${linkLabelTranslate} scale(0)`)\n }\n\n const linkLabelColor = linkLabelDatum.textColor ?? getLinkLabelTextColor(linkLabelDatum)\n if (linkLabelDatum._shouldRenderUseElement) {\n linkLabelContent\n .attr('href', linkLabelText)\n .attr('x', -linkLabelDatum._fontSizePx / 2)\n .attr('y', -linkLabelDatum._fontSizePx / 2)\n .attr('width', linkLabelDatum._fontSizePx)\n .attr('height', linkLabelDatum._fontSizePx)\n .style('fill', linkLabelColor)\n } else {\n linkLabelContent\n .text(linkLabelText)\n .attr('dy', '0.1em')\n .style('font-size', linkLabelDatum._fontSizePx)\n .style('fill', linkLabelColor)\n }\n\n linkLabelGroup.attr('hidden', null)\n .style('cursor', linkLabelDatum.cursor)\n\n smartTransition(linkLabelGroup, duration)\n .attr('transform', `${linkLabelTranslate} scale(1)`)\n .style('opacity', 1)\n\n linkLabelBackground\n .attr('x', -linkLabelDatum._backgroundWidth / 2)\n .attr('y', -linkLabelDatum._backgroundHeight / 2)\n .attr('width', linkLabelDatum._backgroundWidth)\n .attr('height', linkLabelDatum._backgroundHeight)\n .attr('rx', linkLabelDatum._borderRadius)\n .style('fill', linkLabelDatum.color)\n\n linkLabelShiftCumulative += linkLabelDatum._backgroundWidth + linkLabelMargin\n })\n\n smartTransition(linkLabelGroups.exit(), duration)\n .style('opacity', 0)\n .remove()\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 updateLinksPartial(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) || !pathLength) 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\n selection.select(`.${linkSelectors.flowGroup}`)\n .style('opacity', scale < ZoomLevel.Level2 ? 0 : 1)\n\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","linkSelectors.greyedOutLink","linkSupport","linkSelectors.linkDashed","link","linkBand","linkArrow","flowGroup","linkSelectors.linkLabelGroup","linkSelectors.linkLabelBackground","linkSelectors.linkLabelContent","linkLabelContent","linkLabelBackground","generalSelectors.zoomOutLevel2"],"mappings":"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"}
@@ -38,6 +38,7 @@ const linkSupport = css `
38
38
 
39
39
  fill: none;
40
40
  stroke-linecap: round;
41
+ pointer-events: stroke;
41
42
  stroke-width: var(--vis-graph-link-support-stroke-width);
42
43
  stroke-opacity: 0;
43
44
  stroke: var(--vis-graph-link-stroke-color);
@@ -95,6 +96,7 @@ const flowCircle = css `
95
96
  `;
96
97
  const linkLabelGroup = css `
97
98
  label: label-group;
99
+ pointer-events: all;
98
100
  `;
99
101
  const linkLabelBackground = css `
100
102
  label: label-background;
@@ -1 +1 @@
1
- {"version":3,"file":"style.js","sources":["../../../../../src/components/graph/modules/link/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const links = css`\n label: links;\n`\n\nexport const variables = injectGlobal`\n :root {\n --vis-graph-link-stroke-color: #e6e9f3;\n --vis-graph-link-stroke-opacity: 1.0;\n --vis-graph-link-greyout-opacity: 0.3;\n --vis-graph-link-dashed-stroke-dasharray: 6 6;\n\n --vis-graph-link-label-font-size: 9pt;\n --vis-graph-link-label-background: #e6e9f3;\n --vis-graph-link-label-text-color-dark: #18181B;\n --vis-graph-link-label-text-color-bright: #fff;\n --vis-graph-link-label-text-color: var(--vis-graph-link-label-text-color-dark);\n\n --vis-graph-link-band-opacity: 0.35;\n --vis-graph-link-support-stroke-width: 10px;\n\n --vis-dark-graph-link-stroke-color: #494b56;\n --vis-dark-graph-link-label-background: #3f3f45;\n --vis-dark-graph-link-label-text-color: var(--vis-graph-link-label-text-color-bright);\n\n --vis-graph-link-dominant-baseline: middle;\n }\n\n body.theme-dark ${`.${links}`} {\n --vis-graph-link-stroke-color: var(--vis-dark-graph-link-stroke-color);\n --vis-graph-link-label-stroke-color: var(--vis-dark-graph-link-label-stroke-color);\n --vis-graph-link-label-text-color: var(--vis-dark-graph-link-label-text-color);\n --vis-graph-link-label-background: var(--vis-dark-graph-link-label-background);\n }\n`\n\nexport const linkSupport = css`\n label: link-support;\n\n fill: none;\n stroke-linecap: round;\n stroke-width: var(--vis-graph-link-support-stroke-width);\n stroke-opacity: 0;\n stroke: var(--vis-graph-link-stroke-color);\n transition: stroke-opacity 0.2s;\n`\n\nexport const link = css`\n label: link;\n\n fill: none;\n stroke: var(--vis-graph-link-stroke-color);\n stroke-opacity: var(--vis-graph-link-stroke-opacity);\n transition: stroke 800ms;\n stroke-linecap: round;\n pointer-events: none;\n`\n\nexport const linkDashed = css`\n label: dashed;\n\n ${`.${link}`} {\n stroke-dasharray: var(--vis-graph-link-dashed-stroke-dasharray);\n }\n`\n\nexport const linkArrow = css`\n label: link-arrow;\n fill: var(--vis-graph-link-stroke-color);\n`\n\nexport const gLink = css`\n label: g-link;\n`\n\nexport const gLinkExit = css`\n label: g-link-exit;\n pointer-events: none;\n`\n\nexport const greyedOutLink = css`\n label: greyed-out;\n opacity: var(--vis-graph-link-greyout-opacity);\n`\n\nexport const linkBand = css`\n label: link-band;\n\n stroke-opacity: var(--vis-graph-link-band-opacity);\n pointer-events: none;\n stroke: var(--vis-graph-node-stroke-color);\n fill: none;\n`\n\nexport const flowGroup = css`\n label: flow-group;\n\n pointer-events: none;\n`\n\nexport const flowCircle = css`\n label: flow-circle;\n\n fill: var(--vis-graph-link-stroke-color);\n`\n\nexport const linkLabelGroup = css`\n label: label-group;\n`\n\nexport const linkLabelBackground = css`\n label: label-background;\n\n fill: var(--vis-graph-link-label-background);\n`\n\nexport const linkLabelContent = css`\n label: label-content;\n\n font-size: var(--vis-graph-link-label-font-size);\n font-family: var(--vis-font-family);\n fill: var(--vis-graph-link-label-text-color);\n text-anchor: middle;\n dominant-baseline: var(--vis-graph-link-dominant-baseline);\n user-select: none;\n`\n"],"names":[],"mappings":";;AAEO,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBjB,kBAAA,EAAA,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,CAAA;;;;;;EAM9B;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;;;;;;;;EAS7B;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;EAStB;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;AAGzB,EAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;EAGb;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;;EAG3B;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;;EAG3B;AAEM,MAAM,aAAa,GAAG,GAAG,CAAA,CAAA;;;EAG/B;AAEM,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAA;;;;;;;EAO1B;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;;;EAI3B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;EAI5B;AAEM,MAAM,cAAc,GAAG,GAAG,CAAA,CAAA;;EAEhC;AAEM,MAAM,mBAAmB,GAAG,GAAG,CAAA,CAAA;;;;EAIrC;AAEM,MAAM,gBAAgB,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"style.js","sources":["../../../../../src/components/graph/modules/link/style.ts"],"sourcesContent":["import { css, injectGlobal } from '@emotion/css'\n\nexport const links = css`\n label: links;\n`\n\nexport const variables = injectGlobal`\n :root {\n --vis-graph-link-stroke-color: #e6e9f3;\n --vis-graph-link-stroke-opacity: 1.0;\n --vis-graph-link-greyout-opacity: 0.3;\n --vis-graph-link-dashed-stroke-dasharray: 6 6;\n\n --vis-graph-link-label-font-size: 9pt;\n --vis-graph-link-label-background: #e6e9f3;\n --vis-graph-link-label-text-color-dark: #18181B;\n --vis-graph-link-label-text-color-bright: #fff;\n --vis-graph-link-label-text-color: var(--vis-graph-link-label-text-color-dark);\n\n --vis-graph-link-band-opacity: 0.35;\n --vis-graph-link-support-stroke-width: 10px;\n\n --vis-dark-graph-link-stroke-color: #494b56;\n --vis-dark-graph-link-label-background: #3f3f45;\n --vis-dark-graph-link-label-text-color: var(--vis-graph-link-label-text-color-bright);\n\n --vis-graph-link-dominant-baseline: middle;\n }\n\n body.theme-dark ${`.${links}`} {\n --vis-graph-link-stroke-color: var(--vis-dark-graph-link-stroke-color);\n --vis-graph-link-label-stroke-color: var(--vis-dark-graph-link-label-stroke-color);\n --vis-graph-link-label-text-color: var(--vis-dark-graph-link-label-text-color);\n --vis-graph-link-label-background: var(--vis-dark-graph-link-label-background);\n }\n`\n\nexport const linkSupport = css`\n label: link-support;\n\n fill: none;\n stroke-linecap: round;\n pointer-events: stroke;\n stroke-width: var(--vis-graph-link-support-stroke-width);\n stroke-opacity: 0;\n stroke: var(--vis-graph-link-stroke-color);\n transition: stroke-opacity 0.2s;\n`\n\nexport const link = css`\n label: link;\n\n fill: none;\n stroke: var(--vis-graph-link-stroke-color);\n stroke-opacity: var(--vis-graph-link-stroke-opacity);\n transition: stroke 800ms;\n stroke-linecap: round;\n pointer-events: none;\n`\n\nexport const linkDashed = css`\n label: dashed;\n\n ${`.${link}`} {\n stroke-dasharray: var(--vis-graph-link-dashed-stroke-dasharray);\n }\n`\n\nexport const linkArrow = css`\n label: link-arrow;\n fill: var(--vis-graph-link-stroke-color);\n`\n\nexport const gLink = css`\n label: g-link;\n`\n\nexport const gLinkExit = css`\n label: g-link-exit;\n pointer-events: none;\n`\n\nexport const greyedOutLink = css`\n label: greyed-out;\n opacity: var(--vis-graph-link-greyout-opacity);\n`\n\nexport const linkBand = css`\n label: link-band;\n\n stroke-opacity: var(--vis-graph-link-band-opacity);\n pointer-events: none;\n stroke: var(--vis-graph-node-stroke-color);\n fill: none;\n`\n\nexport const flowGroup = css`\n label: flow-group;\n\n pointer-events: none;\n`\n\nexport const flowCircle = css`\n label: flow-circle;\n\n fill: var(--vis-graph-link-stroke-color);\n`\n\nexport const linkLabelGroup = css`\n label: label-group;\n pointer-events: all;\n`\n\nexport const linkLabelBackground = css`\n label: label-background;\n\n fill: var(--vis-graph-link-label-background);\n`\n\nexport const linkLabelContent = css`\n label: label-content;\n\n font-size: var(--vis-graph-link-label-font-size);\n font-family: var(--vis-font-family);\n fill: var(--vis-graph-link-label-text-color);\n text-anchor: middle;\n dominant-baseline: var(--vis-graph-link-dominant-baseline);\n user-select: none;\n`\n"],"names":[],"mappings":";;AAEO,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,SAAS,GAAG,YAAY,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;AAuBjB,kBAAA,EAAA,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,CAAA;;;;;;EAM9B;AAEM,MAAM,WAAW,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;EAU7B;AAEM,MAAM,IAAI,GAAG,GAAG,CAAA,CAAA;;;;;;;;;EAStB;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;AAGzB,EAAA,EAAA,CAAA,CAAA,EAAI,IAAI,CAAE,CAAA,CAAA;;;EAGb;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;;EAG3B;AAEM,MAAM,KAAK,GAAG,GAAG,CAAA,CAAA;;EAEvB;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;;EAG3B;AAEM,MAAM,aAAa,GAAG,GAAG,CAAA,CAAA;;;EAG/B;AAEM,MAAM,QAAQ,GAAG,GAAG,CAAA,CAAA;;;;;;;EAO1B;AAEM,MAAM,SAAS,GAAG,GAAG,CAAA,CAAA;;;;EAI3B;AAEM,MAAM,UAAU,GAAG,GAAG,CAAA,CAAA;;;;EAI5B;AAEM,MAAM,cAAc,GAAG,GAAG,CAAA,CAAA;;;EAGhC;AAEM,MAAM,mBAAmB,GAAG,GAAG,CAAA,CAAA;;;;EAIrC;AAEM,MAAM,gBAAgB,GAAG,GAAG,CAAA,CAAA;;;;;;;;;;;;;"}
@@ -1,7 +1,6 @@
1
1
  import { Selection } from 'd3-selection';
2
2
  import { Transition } from 'd3-transition';
3
3
  import { GraphInputLink, GraphInputNode } from "../../../../types/graph";
4
- import { Selection$Transition } from "../../../../utils/d3";
5
4
  import { GraphNode } from '../../types';
6
5
  import { GraphConfigInterface } from '../../config';
7
6
  export interface GraphNodeSVGGElement extends SVGGElement {
@@ -11,7 +10,6 @@ export interface GraphNodeSVGGElement extends SVGGElement {
11
10
  export declare function createNodes<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale?: number): void;
12
11
  /** Updates the nodes partially according to their `_state` */
13
12
  export declare function updateNodesPartial<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale?: number): void;
14
- export declare function updateNodePositions<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, duration: number): Selection$Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>;
15
13
  export declare function updateNodes<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale?: number): Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>;
16
14
  export declare function removeNodes<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale?: number): void;
17
15
  export declare function zoomNodes<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number): void;
@@ -86,14 +86,11 @@ function updateNodesPartial(selection, config, duration, scale = 1) {
86
86
  });
87
87
  }
88
88
  }
89
- function updateNodePositions(selection, duration) {
90
- return smartTransition(selection, duration)
91
- .attr('transform', d => `translate(${getX(d)}, ${getY(d)}) scale(1)`)
92
- .attr('opacity', 1);
93
- }
94
89
  function updateNodes(selection, config, duration, scale = 1) {
95
90
  const { nodeGaugeAnimDuration, nodeStrokeWidth, nodeShape, nodeSize, nodeGaugeValue, nodeGaugeFill, nodeIcon: nodeIcon$1, nodeIconSize, nodeLabel, nodeLabelTrim, nodeLabelTrimMode, nodeLabelTrimLength, nodeSubLabel, nodeSubLabelTrim, nodeSubLabelTrimMode, nodeSubLabelTrimLength, nodeSideLabels, nodeStroke, nodeFill, nodeBottomIcon: nodeBottomIcon$1, } = config;
96
- const nodeGroupsUpdate = updateNodePositions(selection, duration);
91
+ const nodeGroupsUpdate = smartTransition(selection, duration)
92
+ .attr('transform', d => `translate(${getX(d)}, ${getY(d)}) scale(1)`)
93
+ .attr('opacity', 1);
97
94
  // If there's a custom render function, use it
98
95
  if (config.nodeUpdateCustomRenderFunction) {
99
96
  selection.each((d, i, elements) => {
@@ -321,5 +318,5 @@ function zoomNodes(selection, config, scale) {
321
318
  }
322
319
  const zoomNodesThrottled = throttle(zoomNodes, 500);
323
320
 
324
- export { createNodes, removeNodes, updateNodePositions, updateNodes, updateNodesPartial, zoomNodes, zoomNodesThrottled };
321
+ export { createNodes, removeNodes, updateNodes, updateNodesPartial, zoomNodes, zoomNodesThrottled };
325
322
  //# sourceMappingURL=index.js.map
@@ -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, Selection$Transition } 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, group, 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\n/** Updates the nodes partially according to their `_state` */\nexport function updateNodesPartial<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 const { nodeDisabled } = config\n\n if (config.nodePartialUpdateCustomRenderFunction || config.nodeEnterCustomRenderFunction) {\n // Handle custom rendering behavior\n selection.each((d, i, elements) => {\n const g = select<SVGGElement, GraphNode<N, L>>(elements[i])\n config.nodePartialUpdateCustomRenderFunction?.(d, g, config, duration, scale)\n })\n } else {\n // Default rendering\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 && !d._state.brushed)\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 || d._state.brushed)\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}\n\nexport function updateNodePositions<N extends GraphInputNode, L extends GraphInputLink> (\n selection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n duration: number\n): Selection$Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> {\n return smartTransition(selection, duration)\n .attr('transform', d => `translate(${getX(d)}, ${getY(d)}) scale(1)`)\n .attr('opacity', 1)\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 = updateNodePositions(selection, duration)\n\n // If there's a custom render function, use it\n if (config.nodeUpdateCustomRenderFunction) {\n selection.each((d, i, elements) => {\n const g = select<SVGGElement, GraphNode<N, L>>(elements[i])\n config.nodeUpdateCustomRenderFunction(d, g, config, duration, scale)\n })\n\n updateNodesPartial(selection, config, duration, scale)\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 updateNodesPartial(selection, config, duration, scale)\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 const g = select<SVGGElement, GraphNode<N, L>>(elements[i])\n config.nodeExitCustomRenderFunction(d, g, 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 if (config.nodeOnZoomCustomRenderFunction || config.nodeEnterCustomRenderFunction) {\n // Handle custom rendering behavior\n selection.each((d, i, elements) => {\n const g = select<SVGGElement, GraphNode<N, L>>(elements[i])\n config.nodeOnZoomCustomRenderFunction?.(d, g, config, scale)\n })\n } else {\n // Default rendering\n selection.classed(generalSelectors.zoomOutLevel1, scale < ZoomLevel.Level1)\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\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) selection.call(setLabelBackgroundRectThrottled, config)\n }\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, group, 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\n/** Updates the nodes partially according to their `_state` */\nexport function updateNodesPartial<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 const { nodeDisabled } = config\n\n if (config.nodePartialUpdateCustomRenderFunction || config.nodeEnterCustomRenderFunction) {\n // Handle custom rendering behavior\n selection.each((d, i, elements) => {\n const g = select<SVGGElement, GraphNode<N, L>>(elements[i])\n config.nodePartialUpdateCustomRenderFunction?.(d, g, config, duration, scale)\n })\n } else {\n // Default rendering\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 && !d._state.brushed)\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 || d._state.brushed)\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}\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 const g = select<SVGGElement, GraphNode<N, L>>(elements[i])\n config.nodeUpdateCustomRenderFunction(d, g, config, duration, scale)\n })\n\n updateNodesPartial(selection, config, duration, scale)\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 updateNodesPartial(selection, config, duration, scale)\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 const g = select<SVGGElement, GraphNode<N, L>>(elements[i])\n config.nodeExitCustomRenderFunction(d, g, 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 if (config.nodeOnZoomCustomRenderFunction || config.nodeEnterCustomRenderFunction) {\n // Handle custom rendering behavior\n selection.each((d, i, elements) => {\n const g = select<SVGGElement, GraphNode<N, L>>(elements[i])\n config.nodeOnZoomCustomRenderFunction?.(d, g, config, scale)\n })\n } else {\n // Default rendering\n selection.classed(generalSelectors.zoomOutLevel1, scale < ZoomLevel.Level1)\n selection.classed(generalSelectors.zoomOutLevel2, scale < ZoomLevel.Level2)\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) selection.call(setLabelBackgroundRectThrottled, config)\n }\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":";;;;;;;;;;;;;;;AA2CA,MAAM,yBAAyB,GAAG,EAAE,CAAA;AAO9B,SAAU,WAAW,CACzB,SAAwE,EACxE,MAAkC,EAClC,QAAgB,EAChB,KAAK,GAAG,CAAC,EAAA;IAET,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AAChC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAyB,CAAA;AACnD,QAAA,MAAM,KAAK,GAAG,MAAM,CAA+B,OAAO,CAAC,CAAA;QAC3D,KAAK;aACF,IAAI,CAAC,WAAW,EAAE,CAAC,CAAkB,EAAE,CAAC,KAAI;;AAC3C,YAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAgD,CAAC,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;AAClH,YAAA,MAAM,KAAK,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAA;AACzD,YAAA,MAAM,CAAC,GAAG,CAAA,EAAA,GAAA,kBAAkB,KAAA,IAAA,IAAlB,kBAAkB,KAAlB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAkB,CAAG,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5C,YAAA,MAAM,CAAC,GAAG,CAAA,EAAA,GAAA,kBAAkB,KAAA,IAAA,IAAlB,kBAAkB,KAAlB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAkB,CAAG,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5C,YAAA,OAAO,aAAa,CAAC,CAAA,EAAA,EAAK,CAAC,CAAW,QAAA,EAAA,KAAK,GAAG,CAAA;AAChD,SAAC,CAAC;AACD,aAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;;QAGrB,IAAI,MAAM,CAAC,6BAA6B,EAAE;AACxC,YAAA,MAAM,CAAC,6BAA6B,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AACxE,SAAA;AAAM,aAAA;AACL,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAmB,CAAA;;;AAGxE,YAAA,OAAO,CAAC,SAAS,GAAG,KAAK,CAAA;AACzB,YAAA,WAAW,CAAC,KAAK,EAAE,KAAK,EAAEA,IAAkB,EAAEC,UAAwB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AACjF,YAAA,WAAW,CAAC,KAAK,EAAE,KAAK,EAAEC,aAA2B,EAAED,UAAwB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAC1F,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEE,SAAuB,CAAC,CAAA;AAC3D,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,QAAsB,CAAC,CAAA;AAEvD,YAAA,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;AACd,iBAAA,IAAI,CAAC,OAAO,EAAEC,eAA6B,CAAC,CAAA;AAE/C,YAAA,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACjB,iBAAA,IAAI,CAAC,OAAO,EAAEC,cAA4B,CAAC,CAAA;AAC/C,SAAA;;AAGD,QAAA,MAAMC,OAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,KAAmB,CAAC,CAAA;AAClE,QAAAD,OAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEE,eAA6B,CAAC,CAAA;AAEjE,QAAA,MAAMC,WAAS,GAAGH,OAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AACnC,aAAA,IAAI,CAAC,OAAO,EAAEI,SAAuB,CAAC;AACtC,aAAA,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AACvB,QAAAD,WAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEE,gBAA8B,CAAC,CAAA;AACvE,QAAAF,WAAS,CAAC,MAAM,CAAC,OAAO,CAAC;AACtB,aAAA,IAAI,CAAC,OAAO,EAAEG,mBAAiC,CAAC;AAChD,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,aAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACnB,KAAC,CAAC,CAAA;AACJ,CAAC;AAED;AACM,SAAU,kBAAkB,CAChC,SAAwE,EACxE,MAAkC,EAClC,QAAgB,EAChB,KAAK,GAAG,CAAC,EAAA;AAET,IAAA,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAA;AAE/B,IAAA,IAAI,MAAM,CAAC,qCAAqC,IAAI,MAAM,CAAC,6BAA6B,EAAE;;QAExF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;;YAChC,MAAM,CAAC,GAAG,MAAM,CAA+B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,YAAA,CAAA,EAAA,GAAA,MAAM,CAAC,qCAAqC,MAA5C,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAM,EAAyC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC/E,SAAC,CAAC,CAAA;AACH,KAAA;AAAM,SAAA;;QAEL,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;YAChC,MAAM,KAAK,GAAkE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAChG,YAAA,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;AAE3E,YAAA,KAAK,CAAC,OAAO,CAACC,aAA2B,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;iBACvE,OAAO,CAACC,SAAuB,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAExD,YAAA,MAAM,oBAAoB,GAAG,KAAK,CAAC,SAAS,CAA+B,CAAI,CAAA,EAAAb,aAA2B,CAAE,CAAA,CAAC,CAAA;AAC7G,YAAA,oBAAoB,CAAC,OAAO,CAACc,mBAAiC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAEtG,KAAK,CAAC,SAAS,CAAmC,CAAA,CAAA,EAAIC,SAAuB,EAAE,CAAC;iBAC7E,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,SAAS,GAAG,IAAI,GAAG,qBAAqB,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAEtF,KAAK,CAAC,SAAS,CAAmC,CAAA,CAAA,EAAIC,mBAAiC,EAAE,CAAC;iBACvF,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AACrD,SAAC,CAAC,CAAA;AACH,KAAA;AACH,CAAC;AAEK,SAAU,WAAW,CACzB,SAAwE,EACxE,MAAkC,EAClC,QAAgB,EAChB,KAAK,GAAG,CAAC,EAAA;AAET,IAAA,MAAM,EACJ,qBAAqB,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,YAC1FC,UAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EACxF,YAAY,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,sBAAsB,EAC5E,cAAc,EAAE,UAAU,EAAE,QAAQ,kBAAEC,gBAAc,GACrD,GAAG,MAAM,CAAA;AAEV,IAAA,MAAM,gBAAgB,GAAG,eAAe,CAAC,SAAS,EAAE,QAAQ,CAAC;AAC1D,SAAA,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAAa,UAAA,EAAA,IAAI,CAAC,CAAC,CAAC,CAAK,EAAA,EAAA,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC;AACpE,SAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;;IAGrB,IAAI,MAAM,CAAC,8BAA8B,EAAE;QACzC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;YAChC,MAAM,CAAC,GAAG,MAAM,CAA+B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,YAAA,MAAM,CAAC,8BAA8B,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AACtE,SAAC,CAAC,CAAA;QAEF,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AACtD,QAAA,OAAO,gBAAgB,CAAA;AACxB,KAAA;;;IAID,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;AAChC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAyB,CAAA;AACnD,QAAA,MAAM,KAAK,GAAG,MAAM,CAA+B,OAAO,CAAC,CAAA;AAC3D,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/C,QAAA,IAAI,OAAO,CAAC,SAAS,KAAK,KAAK,EAAE;AAC/B,YAAA,KAAK,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIpB,IAAkB,CAAA,CAAE,CAAC,CAAC,MAAM,EAAE,CAAA;YAC/C,WAAW,CAAC,KAAK,EAAE,SAAS,EAAEA,IAAkB,EAAEC,UAAwB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA,CAAA,EAAIC,aAA2B,CAAE,CAAA,CAAC,CAAA;AACxH,YAAA,KAAK,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIA,aAA2B,CAAA,CAAE,CAAC,CAAC,MAAM,EAAE,CAAA;YACxD,WAAW,CAAC,KAAK,EAAE,KAAK,EAAEA,aAA2B,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAA,CAAA,EAAIC,SAAuB,CAAE,CAAA,CAAC,CAAA;AACrG,YAAA,OAAO,CAAC,SAAS,GAAG,KAAK,CAAA;AAC1B,SAAA;AACH,KAAC,CAAC,CAAA;;IAGF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;;AAChC,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAyB,CAAA;AACxD,QAAA,MAAM,KAAK,GAAkE,MAAM,CAAC,YAAY,CAAC,CAAA;AACjG,QAAA,MAAMkB,MAAI,GAAkE,KAAK,CAAC,MAAM,CAAC,CAAI,CAAA,EAAArB,IAAkB,CAAE,CAAA,CAAC,CAAA;AAClH,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAuC,CAAI,CAAA,EAAAG,SAAuB,CAAE,CAAA,CAAC,CAAA;AACjG,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAC,QAAsB,CAAE,CAAA,CAAC,CAAA;AACvE,QAAA,MAAMkB,iBAAe,GAAG,KAAK,CAAC,MAAM,CAAc,CAAI,CAAA,EAAAjB,eAA6B,CAAE,CAAA,CAAC,CAAA;AACtF,QAAA,MAAME,OAAK,GAAG,KAAK,CAAC,MAAM,CAAc,CAAI,CAAA,EAAAC,KAAmB,CAAE,CAAA,CAAC,CAAA;AAClE,QAAA,MAAMe,kBAAgB,GAAGhB,OAAK,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAK,gBAA8B,CAAE,CAAA,CAAC,CAAA;AAC3F,QAAA,MAAM,mBAAmB,GAAGL,OAAK,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAM,mBAAiC,CAAE,CAAA,CAAC,CAAA;AACjG,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAiB,CAAI,CAAA,EAAAP,cAA4B,CAAE,CAAA,CAAC,CAAA;AACnF,QAAA,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAAc,CAAI,CAAA,EAAAJ,aAA2B,CAAE,CAAA,CAAC,CAAA;AACzF,QAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;QACxD,MAAM,YAAY,GAAG,GAAG,EAA2B;AAChD,aAAA,WAAW,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;AAChE,aAAA,WAAW,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;aAChE,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;;aAE/B,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;QAE/B,KAAK;aACF,OAAO,CAACsB,aAA8B,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC;AACjE,aAAA,OAAO,CAACC,aAA2B,EAAE,CAAC,CAAkB,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;;QAGnF,KAAK;AACF,aAAA,OAAO,CAACC,WAAyB,EAAE,MAAK;AACvC,YAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AAC/C,YAAA,OAAO,KAAK,KAAK,cAAc,CAAC,QAAQ,IAAI,KAAK,KAAK,cAAc,CAAC,OAAO,IAAI,KAAK,KAAK,cAAc,CAAC,MAAM,CAAA;AACjH,SAAC,CAAC,CAAA;;QAGJL,MAAI;aACD,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC;AAChD,aAAA,IAAI,CAAC,cAAc,EAAE,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,CAAC,CAAC;AAClE,aAAA,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AAClD,aAAA,KAAK,CAAC,QAAQ,EAAE,MAAA,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAA;QAEnE,MAAM,QAAQ,GAAIA,MAAI,CAAC,IAAI,EAAyB,CAAC,OAAO,EAAE,CAAA;QAE9D,OAAO;AACJ,aAAA,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;aAC7D,KAAK,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;AACzE,aAAA,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AACvD,aAAA,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AACzD,aAAA,KAAK,CAAC,gBAAgB,EAAE,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;QAEvG,OAAO;AACJ,aAAA,UAAU,EAAE;aACZ,QAAQ,CAAC,qBAAqB,CAAC;aAC/B,SAAS,CAAC,GAAG,EAAE,CACd,CAAC,EACD,CAAC,EACD,GAAG,KACD;YACF,QAAQ,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;AACvC,gBAAA,KAAK,cAAc,CAAC,MAAM,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5E,gBAAA,KAAK,cAAc,CAAC,OAAO,EAAE,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACzE,gBAAA,KAAK,cAAc,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACxE,gBAAA,KAAK,cAAc,CAAC,QAAQ,EAAE,OAAO,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC1E,gBAAA,SAAS,OAAO,IAAI,CAAA;AACrB,aAAA;AACH,SAAC,CAAC,CAAA;;QAGJ,WAAW,CAAC,oBAAoB,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;;AAGhE,QAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,QAAQ,CAAA;AAC/C,QAAA,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,EAAEF,UAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;QACtD,MAAM,iBAAiB,GAAG,CAAA,EAAA,GAAA,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AAChG,QAAA,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA;AAC/E,QAAA,MAAM,sBAAsB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;QAE5D,IAAI,iBAAiB,KAAK,aAAa,EAAE;;YAEvC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;;AAE5B,YAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,GAAG,KAAK,GAAG,MAAM,CAAC,CAAA;AACpD,YAAA,YAAY,CAAC,QAAQ,GAAG,aAAa,CAAA;AACtC,SAAA;AAED,QAAA,IAAI,sBAAsB,EAAE;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;AACf,iBAAA,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC;AAC3B,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACjC,iBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,iBAAiB,GAAG,CAAC,CAAC;AACjC,iBAAA,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC;AAChC,iBAAA,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC;AACjC,iBAAA,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAChC,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;AAChB,iBAAA,KAAK,CAAC,WAAW,EAAE,CAAG,EAAA,iBAAiB,IAAI,CAAC;AAC5C,iBAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACnB,iBAAA,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC;iBAC5B,IAAI,CAAC,aAAa,CAAC,CAAA;AACvB,SAAA;;AAGD,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAsC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;AACvG,QAAA,MAAM,UAAU,GAAGG,iBAAe,CAAC,SAAS,CAAgC,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QACrG,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;AACnD,aAAA,IAAI,CAAC,OAAO,EAAEK,cAA4B,CAAC,CAAA;AAC9C,QAAA,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC7B,aAAA,IAAI,CAAC,OAAO,EAAET,mBAAiC,CAAC;AAChD,aAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,yBAAyB,CAAA,EAAA,CAAC,CAAA;AACxD,QAAA,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC;AAC3B,aAAA,IAAI,CAAC,OAAO,EAAED,SAAuB,CAAC,CAAA;AAEzC,QAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC;AACvD,aAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,CAAA,EAAA,CAAC,CAAA;;AAGzC,QAAA,gBAAgB,CAAC,MAAM,CAAC,IAAIA,SAAuB,CAAE,CAAA,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AACrE,aAAA,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;aACnB,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAA,IAAA,EAAA,CAAA,CAAA,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,SAAS,mCAAI,qBAAqB,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAA,EAAA,CAAC;aAC7E,KAAK,CAAC,WAAW,EAAE,CAAC,IAAG,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAC,OAAA,CAAA,EAAA,GAAA,CAAC,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,GAAG,CAAC,CAAC,IAAI,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,yBAAyB,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAI,EAAA,CAAA,CAAA,EAAA,CAAC,CAAA;;QAExI,gBAAgB,CAAC,MAAM,CAAC,CAAA,CAAA,EAAIC,mBAAiC,EAAE,CAAC;aAC7D,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAA;QAE9B,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;;AAC1C,YAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAA,UAAA,EAAa,aAAa,GAAG,GAAG,CAAA,EAAA,EAAK,CAAC,aAAa,GAAG,GAAG,CAAA,CAAA,CAAG,CAAA;AACpG,YAAA,MAAM,CAAC,GAAG,IAAI,GAAG,aAAa,GAAG,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,yBAAyB,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;AAC/F,YAAA,OAAO,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAA;AACpE,SAAC,CAAC,CAAA;AAEF,QAAA,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,CAAA;;AAG1B,QAAA,MAAMR,WAAS,GAAG,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AACnD,QAAA,MAAM,YAAY,GAAG,SAAS,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;QACzD,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC;cAC3D,UAAU,CAACA,WAAS,EAAE,SAAS,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,iBAA6B,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;cACxHA,WAAS,CAAA;QACb,MAAM,mBAAmB,GAAG,UAAU,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC;cACjE,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,oBAAgC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;cACjI,YAAY,CAAA;AAEhB,QAAAa,kBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACvC,QAAA,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAC7C,KAAK;AACF,aAAA,EAAE,CAAC,YAAY,EAAE,MAAK;AACrB,YAAAA,kBAAgB,CAAC,IAAI,CAACb,WAAS,CAAC,CAAA;AAChC,YAAA,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACtC,YAAY,CAACH,OAAK,EAAEG,WAAS,EAAEC,SAAuB,CAAC,CAAA;YACvD,KAAK,CAAC,KAAK,EAAE,CAAA;AACf,SAAC,CAAC;AACD,aAAA,EAAE,CAAC,YAAY,EAAE,MAAK;AACrB,YAAAY,kBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;AACvC,YAAA,mBAAmB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;YAC7C,YAAY,CAAChB,OAAK,EAAE,gBAAgB,EAAEI,SAAuB,CAAC,CAAA;AAChE,SAAC,CAAC,CAAA;;AAGJ,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,gBAAgB,CAAC,kCAAkC,CAAC,CAAC,IAAI,EAAE,CAAA;QAClI,MAAM,WAAW,GAAG,2BAA2B,GAAG,IAAI,GAAG,IAAA,CAAA,GAAA,CAAA,aAAa,EAAI,IAAI,CAAA,CAAA;QAC9E,MAAM,UAAU,GAAG,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAoB,GAAG,QAAQ,CAAC,MAAM,GAAG,aAAa,CAAA;AACvH,QAAAJ,OAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAA,aAAA,EAAgB,UAAU,GAAG,CAAC,GAAG,WAAW,CAAA,CAAA,CAAG,CAAC,CAAA;AACxE,QAAA,IAAI,KAAK,IAAI,SAAS,CAAC,MAAM;AAAE,YAAA,YAAY,CAACA,OAAK,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,EAAEI,SAAuB,CAAC,CAAA;;AAG9G,QAAA,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAES,gBAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;aACpD,IAAI,CAAC,WAAW,EAAE,CAAA,aAAA,EAAgB,UAAU,GAAG,CAAC,CAAG,CAAA,CAAA,CAAC,CAAA;AACzD,KAAC,CAAC,CAAA;IAEF,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AAEtD,IAAA,OAAO,gBAAgB,CAAA;AACzB,CAAC;AAEK,SAAU,WAAW,CACzB,SAAwE,EACxE,MAAkC,EAClC,QAAgB,EAChB,KAAK,GAAG,CAAC,EAAA;AAET,IAAA,eAAe,CAAC,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC;AACrC,SAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;SAClB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,KAAI;;AAC1B,QAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAgD,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAA;AACjH,QAAA,MAAM,KAAK,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;AACxD,QAAA,MAAM,CAAC,GAAG,CAAA,EAAA,GAAA,kBAAkB,KAAA,IAAA,IAAlB,kBAAkB,KAAlB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAkB,CAAG,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5C,QAAA,MAAM,CAAC,GAAG,CAAA,EAAA,GAAA,kBAAkB,KAAA,IAAA,IAAlB,kBAAkB,KAAlB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAkB,CAAG,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,IAAI,CAAC,CAAC,CAAC,CAAA;AAC5C,QAAA,OAAO,aAAa,CAAC,CAAA,EAAA,EAAK,CAAC,CAAW,QAAA,EAAA,KAAK,GAAG,CAAA;AAChD,KAAC,CAAC;AACD,SAAA,MAAM,EAAE,CAAA;;IAGX,IAAI,MAAM,CAAC,4BAA4B,EAAE;QACvC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;YAChC,MAAM,CAAC,GAAG,MAAM,CAA+B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,YAAA,MAAM,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAA;AACpE,SAAC,CAAC,CAAA;AACH,KAAA;AACH,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAwE,EACxE,MAAkC,EAAA;AAElC,IAAA,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IAE5B,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;QAChC,MAAM,KAAK,GAA8C,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5E,QAAA,MAAMb,OAAK,GAA8C,KAAK,CAAC,MAAM,CAAC,CAAI,CAAA,EAAAC,KAAmB,CAAE,CAAA,CAAC,CAAA;AAChG,QAAA,YAAY,CAACD,OAAK,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAEI,SAAuB,CAAC,CAAA;AAC1E,KAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,+BAA+B,GAAG,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAkC,CAAA;SAE/F,SAAS,CACvB,SAAwE,EACxE,MAAkC,EAClC,KAAa,EAAA;AAEb,IAAA,IAAI,MAAM,CAAC,8BAA8B,IAAI,MAAM,CAAC,6BAA6B,EAAE;;QAEjF,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,KAAI;;YAChC,MAAM,CAAC,GAAG,MAAM,CAA+B,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;AAC3D,YAAA,CAAA,EAAA,GAAA,MAAM,CAAC,8BAA8B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAArC,MAAM,EAAkC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;AAC9D,SAAC,CAAC,CAAA;AACH,KAAA;AAAM,SAAA;;AAEL,QAAA,SAAS,CAAC,OAAO,CAACiB,aAA8B,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;AAC3E,QAAA,SAAS,CAAC,OAAO,CAACJ,aAA8B,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;QAC3E,SAAS,CAAC,SAAS,CAAC,CAAA,EAAGN,mBAAiC,EAAE,CAAC;AACxD,aAAA,IAAI,CAAC,WAAW,EAAE,CAAS,MAAA,EAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;QAC3D,SAAS,CAAC,SAAS,CAAC,CAAA,CAAA,EAAID,SAAuB,EAAE,CAAC;AAC/C,aAAA,IAAI,CAAC,WAAW,EAAE,CAAS,MAAA,EAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA;AAE3D,QAAA,IAAI,KAAK,IAAI,SAAS,CAAC,MAAM;AAAE,YAAA,SAAS,CAAC,IAAI,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAA;AACvF,KAAA;AACH,CAAC;AAEY,MAAA,kBAAkB,GAAG,QAAQ,CAAC,SAAS,EAAE,GAAG;;;;"}
@@ -72,7 +72,7 @@ function updatePanels(selection, config, duration) {
72
72
  });
73
73
  const panelLabel = selection.select(`.${label}`);
74
74
  panelLabel.select(`.${labelText}`)
75
- .text(d => trimString(d.label, d.labelTrimLength, d.labelTrimMode));
75
+ .text(d => trimString(d.label));
76
76
  smartTransition(panelLabel, duration)
77
77
  .attr('transform', getLabelTranslateTransform);
78
78
  panelLabel
@@ -84,7 +84,7 @@ function updatePanels(selection, config, duration) {
84
84
  })
85
85
  .on('mouseleave', (event, d) => {
86
86
  const label = select(event.currentTarget);
87
- const labelContent = trimString(d.label, d.labelTrimLength, d.labelTrimMode);
87
+ const labelContent = trimString(d.label);
88
88
  label.select('text').text(labelContent);
89
89
  setLabelRect(label, labelContent, labelText);
90
90
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/panel/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { trimString } from 'utils/text'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphPanel } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { setLabelRect } from '../node/helper'\nimport { getLabelTranslateTransform, OUTLINE_SELECTION_PADDING, DEFAULT_SIDE_LABEL_SIZE } from './helper'\n\n// Styles\nimport * as panelSelectors from './style'\nimport { appendShape, updateShape } from '../shape'\n\nexport function createPanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>\n): void {\n selection\n .attr('transform', d => `translate(${d._x}, ${d._y})`)\n .style('opacity', 0)\n\n selection.append('rect').attr('class', panelSelectors.panelSelection)\n .attr('rx', 9)\n .attr('ry', 9)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n\n selection.append('rect').attr('class', panelSelectors.panel)\n .attr('rx', 7)\n .attr('ry', 7)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n\n const panelLabel = selection.append('g').attr('class', panelSelectors.label)\n .attr('transform', getLabelTranslateTransform)\n panelLabel.append('rect').attr('class', panelSelectors.background)\n panelLabel.append('text').attr('class', panelSelectors.labelText)\n .attr('dy', '0.32em')\n\n const sideIcon = selection.append('g')\n .attr('class', panelSelectors.sideIconGroup)\n .attr('transform', (d, i, elements) => {\n const dx = -OUTLINE_SELECTION_PADDING\n const dy = -OUTLINE_SELECTION_PADDING\n return `translate(${d._width + dx}, ${-dy})`\n })\n appendShape(sideIcon, (d: GraphPanel) => d.sideIconShape, panelSelectors.sideIconShape, panelSelectors.customSideIcon)\n sideIcon.append('text').attr('class', panelSelectors.sideIconSymbol)\n}\n\nexport function updatePanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>,\n config: GraphConfigInterface<GraphInputNode, GraphInputLink>,\n duration: number\n): void {\n smartTransition(selection, duration)\n .attr('transform', d => `translate(${d._x}, ${d._y})`)\n .style('opacity', d => d._disabled ? 0.4 : 1)\n\n const panels = selection.selectAll<SVGRectElement, GraphPanel>(`.${panelSelectors.panel}`).data(d => [d])\n smartTransition(panels, duration)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n .style('stroke', d => d.borderColor)\n .style('fill', d => d.fillColor)\n .style('stroke-width', d => d.borderWidth)\n\n const panelSelection = selection.select<SVGRectElement>(`.${panelSelectors.panelSelection}`)\n .classed(panelSelectors.panelSelectionActive, d => d.dashedOutline)\n\n smartTransition(panelSelection, duration)\n .attr('x', d => -OUTLINE_SELECTION_PADDING)\n .attr('y', d => -OUTLINE_SELECTION_PADDING)\n .attr('width', d => d._width + OUTLINE_SELECTION_PADDING * 2)\n .attr('height', d => d._height + OUTLINE_SELECTION_PADDING * 2)\n\n const sideIcon = selection.select<SVGGElement>(`.${panelSelectors.sideIconGroup}`)\n\n sideIcon.select<SVGGElement>(`.${panelSelectors.sideIconShape}`)\n .call(updateShape, (d: GraphPanel) => d.sideIconShape, (d: GraphPanel) => d.sideIconShapeSize ?? DEFAULT_SIDE_LABEL_SIZE)\n .style('stroke', d => d.sideIconShapeStroke)\n .style('cursor', d => d.sideIconCursor ?? null)\n .style('opacity', d => d.sideIconShape ? 1 : 0)\n\n sideIcon.select(`.${panelSelectors.sideIconSymbol}`)\n .html(d => d.sideIconSymbol)\n .attr('dy', 1)\n .style('fill', d => d.sideIconSymbolColor)\n .style('font-size', d => d.sideIconFontSize ?? ((d.sideIconShapeSize ?? DEFAULT_SIDE_LABEL_SIZE) / 2.5))\n\n smartTransition(sideIcon, duration)\n .attr('transform', d => {\n const dx = -OUTLINE_SELECTION_PADDING\n const dy = -OUTLINE_SELECTION_PADDING\n return `translate(${d._width + dx}, ${-dy})`\n })\n\n const panelLabel = selection.select<SVGGElement>(`.${panelSelectors.label}`)\n\n panelLabel.select<SVGTextElement>(`.${panelSelectors.labelText}`)\n .text(d => trimString(d.label, d.labelTrimLength, d.labelTrimMode))\n\n smartTransition(panelLabel, duration)\n .attr('transform', getLabelTranslateTransform)\n\n panelLabel\n .on('mouseover', (event: MouseEvent, d) => {\n const label = select<SVGGElement, GraphPanel<N, L>>(event.currentTarget as SVGGElement)\n const labelContent = d.label\n label.select('text').text(labelContent)\n setLabelRect(label, labelContent, panelSelectors.labelText)\n })\n .on('mouseleave', (event: MouseEvent, d) => {\n const label = select<SVGGElement, GraphPanel<N, L>>(event.currentTarget as SVGGElement)\n const labelContent = trimString(d.label, d.labelTrimLength, d.labelTrimMode)\n label.select('text').text(labelContent)\n setLabelRect(label, labelContent, panelSelectors.labelText)\n })\n}\n\nexport function removePanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>,\n config: GraphConfigInterface<GraphInputNode, GraphInputLink>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .style('opacity', 0)\n .remove()\n}\n"],"names":["panelSelectors.panelSelection","panelSelectors.panel","panelSelectors.label","panelSelectors.background","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.customSideIcon","panelSelectors.sideIconSymbol","panelSelection","panelSelectors.panelSelectionActive"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/graph/modules/panel/index.ts"],"sourcesContent":["import { select, Selection } from 'd3-selection'\n\n// Utils\nimport { trimString } from 'utils/text'\nimport { smartTransition } from 'utils/d3'\n\n// Types\nimport { GraphInputLink, GraphInputNode } from 'types/graph'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphPanel } from '../../types'\n\n// Config\nimport { GraphConfigInterface } from '../../config'\n\n// Helpers\nimport { setLabelRect } from '../node/helper'\nimport { getLabelTranslateTransform, OUTLINE_SELECTION_PADDING, DEFAULT_SIDE_LABEL_SIZE } from './helper'\n\n// Styles\nimport * as panelSelectors from './style'\nimport { appendShape, updateShape } from '../shape'\n\nexport function createPanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>\n): void {\n selection\n .attr('transform', d => `translate(${d._x}, ${d._y})`)\n .style('opacity', 0)\n\n selection.append('rect').attr('class', panelSelectors.panelSelection)\n .attr('rx', 9)\n .attr('ry', 9)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n\n selection.append('rect').attr('class', panelSelectors.panel)\n .attr('rx', 7)\n .attr('ry', 7)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n\n const panelLabel = selection.append('g').attr('class', panelSelectors.label)\n .attr('transform', getLabelTranslateTransform)\n panelLabel.append('rect').attr('class', panelSelectors.background)\n panelLabel.append('text').attr('class', panelSelectors.labelText)\n .attr('dy', '0.32em')\n\n const sideIcon = selection.append('g')\n .attr('class', panelSelectors.sideIconGroup)\n .attr('transform', (d, i, elements) => {\n const dx = -OUTLINE_SELECTION_PADDING\n const dy = -OUTLINE_SELECTION_PADDING\n return `translate(${d._width + dx}, ${-dy})`\n })\n appendShape(sideIcon, (d: GraphPanel) => d.sideIconShape, panelSelectors.sideIconShape, panelSelectors.customSideIcon)\n sideIcon.append('text').attr('class', panelSelectors.sideIconSymbol)\n}\n\nexport function updatePanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>,\n config: GraphConfigInterface<GraphInputNode, GraphInputLink>,\n duration: number\n): void {\n smartTransition(selection, duration)\n .attr('transform', d => `translate(${d._x}, ${d._y})`)\n .style('opacity', d => d._disabled ? 0.4 : 1)\n\n const panels = selection.selectAll<SVGRectElement, GraphPanel>(`.${panelSelectors.panel}`).data(d => [d])\n smartTransition(panels, duration)\n .attr('width', d => d._width)\n .attr('height', d => d._height)\n .style('stroke', d => d.borderColor)\n .style('fill', d => d.fillColor)\n .style('stroke-width', d => d.borderWidth)\n\n const panelSelection = selection.select<SVGRectElement>(`.${panelSelectors.panelSelection}`)\n .classed(panelSelectors.panelSelectionActive, d => d.dashedOutline)\n\n smartTransition(panelSelection, duration)\n .attr('x', d => -OUTLINE_SELECTION_PADDING)\n .attr('y', d => -OUTLINE_SELECTION_PADDING)\n .attr('width', d => d._width + OUTLINE_SELECTION_PADDING * 2)\n .attr('height', d => d._height + OUTLINE_SELECTION_PADDING * 2)\n\n const sideIcon = selection.select<SVGGElement>(`.${panelSelectors.sideIconGroup}`)\n\n sideIcon.select<SVGGElement>(`.${panelSelectors.sideIconShape}`)\n .call(updateShape, (d: GraphPanel) => d.sideIconShape, (d: GraphPanel) => d.sideIconShapeSize ?? DEFAULT_SIDE_LABEL_SIZE)\n .style('stroke', d => d.sideIconShapeStroke)\n .style('cursor', d => d.sideIconCursor ?? null)\n .style('opacity', d => d.sideIconShape ? 1 : 0)\n\n sideIcon.select(`.${panelSelectors.sideIconSymbol}`)\n .html(d => d.sideIconSymbol)\n .attr('dy', 1)\n .style('fill', d => d.sideIconSymbolColor)\n .style('font-size', d => d.sideIconFontSize ?? ((d.sideIconShapeSize ?? DEFAULT_SIDE_LABEL_SIZE) / 2.5))\n\n smartTransition(sideIcon, duration)\n .attr('transform', d => {\n const dx = -OUTLINE_SELECTION_PADDING\n const dy = -OUTLINE_SELECTION_PADDING\n return `translate(${d._width + dx}, ${-dy})`\n })\n\n const panelLabel = selection.select<SVGGElement>(`.${panelSelectors.label}`)\n\n panelLabel.select<SVGTextElement>(`.${panelSelectors.labelText}`)\n .text(d => trimString(d.label))\n\n smartTransition(panelLabel, duration)\n .attr('transform', getLabelTranslateTransform)\n\n panelLabel\n .on('mouseover', (event: MouseEvent, d) => {\n const label = select<SVGGElement, GraphPanel<N, L>>(event.currentTarget as SVGGElement)\n const labelContent = d.label\n label.select('text').text(labelContent)\n setLabelRect(label, labelContent, panelSelectors.labelText)\n })\n .on('mouseleave', (event: MouseEvent, d) => {\n const label = select<SVGGElement, GraphPanel<N, L>>(event.currentTarget as SVGGElement)\n const labelContent = trimString(d.label)\n label.select('text').text(labelContent)\n setLabelRect(label, labelContent, panelSelectors.labelText)\n })\n}\n\nexport function removePanels<N extends GraphNode, L extends GraphLink> (\n selection: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>,\n config: GraphConfigInterface<GraphInputNode, GraphInputLink>,\n duration: number\n): void {\n smartTransition(selection, duration / 2)\n .style('opacity', 0)\n .remove()\n}\n"],"names":["panelSelectors.panelSelection","panelSelectors.panel","panelSelectors.label","panelSelectors.background","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.customSideIcon","panelSelectors.sideIconSymbol","panelSelection","panelSelectors.panelSelectionActive"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
1
  import { Position } from "../../types/position";
2
2
  import { GraphInputLink, GraphInputNode, GraphNodeCore, GraphLinkCore } from "../../types/graph";
3
3
  import { Spacing } from "../../types/spacing";
4
- import { TrimMode } from "../../types/text";
5
4
  export declare type GraphNode<N extends GraphInputNode = GraphInputNode, L extends GraphInputLink = GraphInputLink> = GraphNodeCore<N, L> & {
6
5
  x?: number;
7
6
  y?: number;
@@ -75,10 +74,6 @@ export declare type GraphPanelConfig = {
75
74
  nodes: (string | number)[];
76
75
  /** Panel label */
77
76
  label?: string;
78
- /** Trim label if it's longer than this number of characters */
79
- labelTrimLength?: number;
80
- /** Trim mode of the label */
81
- labelTrimMode?: TrimMode;
82
77
  /** Position of the label */
83
78
  labelPosition?: Position.Top | Position.Bottom | string;
84
79
  /** Fill color of the panel */
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../src/components/graph/types.ts"],"sourcesContent":["// Types\nimport { Position } from 'types/position'\nimport { GraphInputLink, GraphInputNode, GraphNodeCore, GraphLinkCore } from 'types/graph'\nimport { Spacing } from 'types/spacing'\nimport { TrimMode } from 'types/text'\n\nexport type GraphNode<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphNodeCore<N, L> & {\n x?: number;\n y?: number;\n\n _id?: number | string;\n _index?: number;\n _state?: {\n isDragged?: boolean;\n fx?: number;\n fy?: number;\n selected?: boolean;\n greyout?: boolean;\n brushed?: boolean;\n };\n\n _panels?: GraphPanel<N, L>[];\n _isConnected?: boolean;\n}\n\nexport type GraphForceSimulationNode<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphNode<N, L> & {\n fx?: number;\n fy?: number;\n}\n\nexport type GraphLink<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphLinkCore<N, L> & {\n id?: number | string;\n source: number | string | GraphNode<N>;\n target: number | string | GraphNode<N>;\n\n _id?: number | string;\n _direction?: number;\n _index?: number;\n _neighbours?: number;\n\n _state?: {\n flowAnimTime?: number;\n hovered?: boolean;\n selected?: boolean;\n greyout?: boolean;\n };\n}\n\nexport enum GraphLayoutType {\n Circular = 'circular',\n Concentric = 'concentric',\n Parallel = 'parallel',\n ParallelHorizontal = 'parallel horizontal',\n Dagre = 'dagre',\n Force = 'force',\n Elk = 'elk',\n Precalculated = 'precalculated',\n}\n\nexport type GraphCircleLabel = {\n text: string;\n textColor?: string | null;\n color?: string | null;\n cursor?: string | null;\n fontSize?: string | null;\n radius?: number;\n}\n\nexport type GraphLinkLabel = GraphCircleLabel\n\nexport enum GraphLinkStyle {\n Dashed = 'dashed',\n Solid = 'solid',\n}\n\nexport enum GraphLinkArrowStyle {\n Single = 'single',\n Double = 'double',\n}\n\nexport enum GraphNodeShape {\n Circle = 'circle',\n Square = 'square',\n Hexagon = 'hexagon',\n Triangle = 'triangle',\n}\n\nexport type GraphPanelConfig = {\n /** Panel nodes references by unique ids */\n nodes: (string|number)[];\n /** Panel label */\n label?: string;\n /** Trim label if it's longer than this number of characters */\n labelTrimLength?: number;\n /** Trim mode of the label */\n labelTrimMode?: TrimMode;\n /** Position of the label */\n labelPosition?: Position.Top | Position.Bottom | string;\n /** Fill color of the panel */\n fillColor?: string;\n /** Color of the panel's border */\n borderColor?: string;\n /** Border width of the panel in pixels */\n borderWidth?: number;\n /** Inner padding */\n padding?: number | Spacing;\n /** Dashed outline showing that the panel is selected */\n dashedOutline?: boolean;\n /** Side icon symbol */\n sideIconSymbol?: string;\n /** Size of the icon as a CSS string. e.g.: `12pt` or `12px` */\n sideIconFontSize?: string;\n /** Color of the icon */\n sideIconSymbolColor?: string;\n /** Shape of the icon's background */\n sideIconShape?: GraphNodeShape | string;\n /** Size of the icon's background shape */\n sideIconShapeSize?: number;\n /** Stroke color of the icon's background shape */\n sideIconShapeStroke?: string;\n /** Cursor, when hovering over the icon */\n sideIconCursor?: string;\n}\n\nexport type GraphPanel<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphPanelConfig & {\n _numNodes?: number;\n _x?: number;\n _y?: number;\n _width?: number;\n _height?: number;\n _disabled?: boolean;\n _padding?: Spacing;\n}\n\nexport type GraphNodeAnimationState = {\n endAngle: number;\n nodeIndex: number;\n nodeSize?: number;\n borderWidth?: number;\n}\n\nexport type GraphNodeAnimatedElement<T = SVGElement> = T & {\n _animState: GraphNodeAnimationState;\n}\n\nexport type GraphForceLayoutSettings<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = {\n /** Preferred Link Distance. Default: `60` */\n linkDistance?: number | ((l: GraphLink<N, L>, i: number) => number);\n /** Link Strength [0:1]. Default: `0.45` */\n linkStrength?: number | ((l: GraphLink<N, L>, i: number) => number);\n /** Charge Force (<0 repulsion, >0 attraction). Default: `-500` */\n charge?: number | ((l: GraphNode<N, L>, i: number) => number);\n /** X-centring force. Default: `0.15` */\n forceXStrength?: number;\n /** Y-centring force. Default: `0.25` */\n forceYStrength?: number;\n /** Number if simulation iterations. Default: automatic */\n numIterations?: number;\n /** Set to true if you want to fix the node positions after the simulation\n * Helpful when you want to update graph settings without re-calculating the layout.\n * Default: `false` */\n fixNodePositionAfterSimulation?: boolean;\n}\n\nexport type GraphElkLayoutSettings = Record<string, string>\n\n/**\n * Settings for configuring the layout of a Dagre graph.\n */\nexport type GraphDagreLayoutSetting = {\n /**\n * Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right.\n * Additional custom values can also be provided as a string.\n */\n rankdir?: 'TB' | 'BT' | 'LR' | 'RL' | string;\n\n /**\n * Alignment for rank nodes. Can be UL, UR, DL, or DR, where U = up, D = down, L = left, and R = right.\n * Additional custom values can also be provided as a string.\n */\n align?: 'UL' | 'UR' | 'DL' | 'DR' | string;\n\n /**\n * Number of pixels that separate nodes horizontally in the layout.\n */\n nodesep?: number;\n\n /**\n * Number of pixels that separate edges horizontally in the layout.\n */\n edgesep?: number;\n\n /**\n * Number of pixels between each rank in the layout.\n */\n ranksep?: number;\n\n /**\n * Number of pixels to use as a margin around the left and right of the graph.\n */\n marginx?: number;\n\n /**\n * Number of pixels to use as a margin around the top and bottom of the graph.\n */\n marginy?: number;\n\n /**\n * If set to 'greedy', uses a greedy heuristic for finding a feedback arc set for a graph.\n * A feedback arc set is a set of edges that can be removed to make a graph acyclic.\n */\n acyclicer?: 'greedy' | undefined;\n\n /**\n * Type of algorithm to assign a rank to each node in the input graph.\n * Possible values are 'network-simplex', 'tight-tree', or 'longest-path'.\n * Additional custom values can also be provided as a string.\n */\n ranker?: 'network-simplex' | 'tight-tree' | 'longest-path' | string;\n}\n\nexport enum GraphNodeSelectionHighlightMode {\n None = 'none',\n Greyout ='greyout',\n GreyoutNonConnected ='greyout-non-connected',\n}\n"],"names":[],"mappings":"IAyDY,gBASX;AATD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,eAAA,CAAA,oBAAA,CAAA,GAAA,qBAA0C,CAAA;AAC1C,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AACjC,CAAC,EATW,eAAe,KAAf,eAAe,GAS1B,EAAA,CAAA,CAAA,CAAA;IAaW,eAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA,CAAA;IAEW,oBAGX;AAHD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,GAG9B,EAAA,CAAA,CAAA,CAAA;IAEW,eAKX;AALD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACvB,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA,CAAA;IA8IW,gCAIX;AAJD,CAAA,UAAY,+BAA+B,EAAA;AACzC,IAAA,+BAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,+BAAA,CAAA,SAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,+BAAA,CAAA,qBAAA,CAAA,GAAA,uBAA4C,CAAA;AAC9C,CAAC,EAJW,+BAA+B,KAA/B,+BAA+B,GAI1C,EAAA,CAAA,CAAA;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../src/components/graph/types.ts"],"sourcesContent":["// Types\nimport { Position } from 'types/position'\nimport { GraphInputLink, GraphInputNode, GraphNodeCore, GraphLinkCore } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\nexport type GraphNode<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphNodeCore<N, L> & {\n x?: number;\n y?: number;\n\n _id?: number | string;\n _index?: number;\n _state?: {\n isDragged?: boolean;\n fx?: number;\n fy?: number;\n selected?: boolean;\n greyout?: boolean;\n brushed?: boolean;\n };\n\n _panels?: GraphPanel<N, L>[];\n _isConnected?: boolean;\n}\n\nexport type GraphForceSimulationNode<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphNode<N, L> & {\n fx?: number;\n fy?: number;\n}\n\nexport type GraphLink<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphLinkCore<N, L> & {\n id?: number | string;\n source: number | string | GraphNode<N>;\n target: number | string | GraphNode<N>;\n\n _id?: number | string;\n _direction?: number;\n _index?: number;\n _neighbours?: number;\n\n _state?: {\n flowAnimTime?: number;\n hovered?: boolean;\n selected?: boolean;\n greyout?: boolean;\n };\n}\n\nexport enum GraphLayoutType {\n Circular = 'circular',\n Concentric = 'concentric',\n Parallel = 'parallel',\n ParallelHorizontal = 'parallel horizontal',\n Dagre = 'dagre',\n Force = 'force',\n Elk = 'elk',\n Precalculated = 'precalculated',\n}\n\nexport type GraphCircleLabel = {\n text: string;\n textColor?: string | null;\n color?: string | null;\n cursor?: string | null;\n fontSize?: string | null;\n radius?: number;\n}\n\nexport type GraphLinkLabel = GraphCircleLabel\n\nexport enum GraphLinkStyle {\n Dashed = 'dashed',\n Solid = 'solid',\n}\n\nexport enum GraphLinkArrowStyle {\n Single = 'single',\n Double = 'double',\n}\n\nexport enum GraphNodeShape {\n Circle = 'circle',\n Square = 'square',\n Hexagon = 'hexagon',\n Triangle = 'triangle',\n}\n\nexport type GraphPanelConfig = {\n /** Panel nodes references by unique ids */\n nodes: (string|number)[];\n /** Panel label */\n label?: string;\n /** Position of the label */\n labelPosition?: Position.Top | Position.Bottom | string;\n /** Fill color of the panel */\n fillColor?: string;\n /** Color of the panel's border */\n borderColor?: string;\n /** Border width of the panel in pixels */\n borderWidth?: number;\n /** Inner padding */\n padding?: number | Spacing;\n /** Dashed outline showing that the panel is selected */\n dashedOutline?: boolean;\n /** Side icon symbol */\n sideIconSymbol?: string;\n /** Size of the icon as a CSS string. e.g.: `12pt` or `12px` */\n sideIconFontSize?: string;\n /** Color of the icon */\n sideIconSymbolColor?: string;\n /** Shape of the icon's background */\n sideIconShape?: GraphNodeShape | string;\n /** Size of the icon's background shape */\n sideIconShapeSize?: number;\n /** Stroke color of the icon's background shape */\n sideIconShapeStroke?: string;\n /** Cursor, when hovering over the icon */\n sideIconCursor?: string;\n}\n\nexport type GraphPanel<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = GraphPanelConfig & {\n _numNodes?: number;\n _x?: number;\n _y?: number;\n _width?: number;\n _height?: number;\n _disabled?: boolean;\n _padding?: Spacing;\n}\n\nexport type GraphNodeAnimationState = {\n endAngle: number;\n nodeIndex: number;\n nodeSize?: number;\n borderWidth?: number;\n}\n\nexport type GraphNodeAnimatedElement<T = SVGElement> = T & {\n _animState: GraphNodeAnimationState;\n}\n\nexport type GraphForceLayoutSettings<\n N extends GraphInputNode = GraphInputNode,\n L extends GraphInputLink = GraphInputLink,\n> = {\n /** Preferred Link Distance. Default: `60` */\n linkDistance?: number | ((l: GraphLink<N, L>, i: number) => number);\n /** Link Strength [0:1]. Default: `0.45` */\n linkStrength?: number | ((l: GraphLink<N, L>, i: number) => number);\n /** Charge Force (<0 repulsion, >0 attraction). Default: `-500` */\n charge?: number | ((l: GraphNode<N, L>, i: number) => number);\n /** X-centring force. Default: `0.15` */\n forceXStrength?: number;\n /** Y-centring force. Default: `0.25` */\n forceYStrength?: number;\n /** Number if simulation iterations. Default: automatic */\n numIterations?: number;\n /** Set to true if you want to fix the node positions after the simulation\n * Helpful when you want to update graph settings without re-calculating the layout.\n * Default: `false` */\n fixNodePositionAfterSimulation?: boolean;\n}\n\nexport type GraphElkLayoutSettings = Record<string, string>\n\n/**\n * Settings for configuring the layout of a Dagre graph.\n */\nexport type GraphDagreLayoutSetting = {\n /**\n * Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top, B = bottom, L = left, and R = right.\n * Additional custom values can also be provided as a string.\n */\n rankdir?: 'TB' | 'BT' | 'LR' | 'RL' | string;\n\n /**\n * Alignment for rank nodes. Can be UL, UR, DL, or DR, where U = up, D = down, L = left, and R = right.\n * Additional custom values can also be provided as a string.\n */\n align?: 'UL' | 'UR' | 'DL' | 'DR' | string;\n\n /**\n * Number of pixels that separate nodes horizontally in the layout.\n */\n nodesep?: number;\n\n /**\n * Number of pixels that separate edges horizontally in the layout.\n */\n edgesep?: number;\n\n /**\n * Number of pixels between each rank in the layout.\n */\n ranksep?: number;\n\n /**\n * Number of pixels to use as a margin around the left and right of the graph.\n */\n marginx?: number;\n\n /**\n * Number of pixels to use as a margin around the top and bottom of the graph.\n */\n marginy?: number;\n\n /**\n * If set to 'greedy', uses a greedy heuristic for finding a feedback arc set for a graph.\n * A feedback arc set is a set of edges that can be removed to make a graph acyclic.\n */\n acyclicer?: 'greedy' | undefined;\n\n /**\n * Type of algorithm to assign a rank to each node in the input graph.\n * Possible values are 'network-simplex', 'tight-tree', or 'longest-path'.\n * Additional custom values can also be provided as a string.\n */\n ranker?: 'network-simplex' | 'tight-tree' | 'longest-path' | string;\n}\n\nexport enum GraphNodeSelectionHighlightMode {\n None = 'none',\n Greyout ='greyout',\n GreyoutNonConnected ='greyout-non-connected',\n}\n"],"names":[],"mappings":"IAwDY,gBASX;AATD,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,eAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,eAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,eAAA,CAAA,oBAAA,CAAA,GAAA,qBAA0C,CAAA;AAC1C,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,eAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,eAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AACjC,CAAC,EATW,eAAe,KAAf,eAAe,GAS1B,EAAA,CAAA,CAAA,CAAA;IAaW,eAGX;AAHD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACjB,CAAC,EAHW,cAAc,KAAd,cAAc,GAGzB,EAAA,CAAA,CAAA,CAAA;IAEW,oBAGX;AAHD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACnB,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,GAG9B,EAAA,CAAA,CAAA,CAAA;IAEW,eAKX;AALD,CAAA,UAAY,cAAc,EAAA;AACxB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACvB,CAAC,EALW,cAAc,KAAd,cAAc,GAKzB,EAAA,CAAA,CAAA,CAAA;IA0IW,gCAIX;AAJD,CAAA,UAAY,+BAA+B,EAAA;AACzC,IAAA,+BAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,+BAAA,CAAA,SAAA,CAAA,GAAA,SAAkB,CAAA;AAClB,IAAA,+BAAA,CAAA,qBAAA,CAAA,GAAA,uBAA4C,CAAA;AAC9C,CAAC,EAJW,+BAA+B,KAA/B,+BAA+B,GAI1C,EAAA,CAAA,CAAA;;;;"}
@@ -26,7 +26,7 @@ export interface NestedDonutConfigInterface<Datum> extends ComponentConfigInterf
26
26
  showBackground?: boolean;
27
27
  /** Sort function for segments. Default `undefined` */
28
28
  sort?: (a: NestedDonutSegment<Datum>, b: NestedDonutSegment<Datum>) => number;
29
- /** Array of accessor functions to defined the nested groups. Default: `[]` */
29
+ /** Array of accessor functions to defined the nested groups */
30
30
  layers: StringAccessor<Datum>[];
31
31
  /**
32
32
  * Configuration properties for individual layers. Accepts an accessor or constant of type: