@unovis/ts 1.5.1-exf.2 → 1.5.1-exf.4

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 (37) hide show
  1. package/components/graph/config.d.ts +2 -1
  2. package/components/graph/config.js.map +1 -1
  3. package/components/graph/index.d.ts +8 -0
  4. package/components/graph/index.js +27 -9
  5. package/components/graph/index.js.map +1 -1
  6. package/components/graph/modules/link/index.d.ts +3 -2
  7. package/components/graph/modules/link/index.js +39 -19
  8. package/components/graph/modules/link/index.js.map +1 -1
  9. package/components/graph/modules/node/index.d.ts +2 -0
  10. package/components/graph/modules/node/index.js +6 -3
  11. package/components/graph/modules/node/index.js.map +1 -1
  12. package/components/nested-donut/config.d.ts +1 -1
  13. package/components/nested-donut/config.js.map +1 -1
  14. package/components/treemap/config.d.ts +26 -0
  15. package/components/treemap/config.js +6 -0
  16. package/components/treemap/config.js.map +1 -0
  17. package/components/treemap/index.d.ts +14 -0
  18. package/components/treemap/index.js +149 -0
  19. package/components/treemap/index.js.map +1 -0
  20. package/components/treemap/style.d.ts +19 -0
  21. package/components/treemap/style.js +49 -0
  22. package/components/treemap/style.js.map +1 -0
  23. package/components/treemap/types.d.ts +10 -0
  24. package/components/treemap/types.js +2 -0
  25. package/components/treemap/types.js.map +1 -0
  26. package/components.d.ts +2 -0
  27. package/components.js +1 -0
  28. package/components.js.map +1 -1
  29. package/data-models/graph.d.ts +3 -2
  30. package/data-models/graph.js +15 -6
  31. package/data-models/graph.js.map +1 -1
  32. package/index.js +1 -0
  33. package/index.js.map +1 -1
  34. package/package.json +1 -1
  35. package/types.d.ts +1 -0
  36. package/types.js +1 -0
  37. package/types.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/graph/index.ts"],"sourcesContent":["import { min, max } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport { select, Selection, pointer } from 'd3-selection'\nimport { brush, BrushBehavior, D3BrushEvent } from 'd3-brush'\nimport { zoom, zoomTransform, zoomIdentity, ZoomTransform, D3ZoomEvent, ZoomBehavior } from 'd3-zoom'\nimport { drag, D3DragEvent } from 'd3-drag'\nimport { interval, Timer } from 'd3-timer'\n\n// Core\nimport { ComponentCore } from 'core/component'\nimport { GraphDataModel } from 'data-models/graph'\n\n// Types\nimport { GraphInputLink, GraphInputNode, GraphInputData } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\n// Utils\nimport { isNumber, clamp, shallowDiff, isFunction, getBoolean, isPlainObject, isEqual } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphLayoutType, GraphLinkArrowStyle, GraphPanel, GraphNodeSelectionHighlightMode } from './types'\n\n// Config\nimport { GraphDefaultConfig, GraphConfigInterface } from './config'\n\n// Styles\nimport * as generalSelectors from './style'\nimport * as nodeSelectors from './modules/node/style'\nimport * as linkSelectors from './modules/link/style'\nimport * as panelSelectors from './modules/panel/style'\n\n// Modules\nimport { createNodes, updateNodes, removeNodes, zoomNodesThrottled, zoomNodes, updateNodesPartial } from './modules/node'\nimport { getMaxNodeSize, getNodeSize, getX, getY } from './modules/node/helper'\nimport { createLinks, updateLinks, removeLinks, zoomLinksThrottled, zoomLinks, animateLinkFlow, updateLinksPartial } from './modules/link'\nimport { getDoubleArrowPath, getArrowPath } from './modules/link/helper'\nimport { createPanels, updatePanels, removePanels } from './modules/panel'\nimport { setPanelForNodes, updatePanelBBoxSize, updatePanelNumNodes, initPanels } from './modules/panel/helper'\nimport { applyLayoutCircular, applyLayoutParallel, applyLayoutDagre, applyLayoutConcentric, applyLayoutForce, applyELKLayout } from './modules/layout'\n\nexport class Graph<\n N extends GraphInputNode,\n L extends GraphInputLink,\n> extends ComponentCore<\n GraphInputData<N, L>,\n GraphConfigInterface<N, L>\n > {\n static selectors = {\n root: generalSelectors.root,\n graphGroup: generalSelectors.graphGroup,\n background: generalSelectors.background,\n node: nodeSelectors.gNode,\n nodeShape: nodeSelectors.node,\n nodeGauge: nodeSelectors.nodeGauge,\n nodeSideLabel: nodeSelectors.sideLabelGroup,\n nodeLabel: nodeSelectors.label,\n dimmedNode: nodeSelectors.greyedOutNode,\n link: linkSelectors.gLink,\n linkLine: linkSelectors.link,\n linkLabel: linkSelectors.linkLabelGroup,\n dimmedLink: linkSelectors.greyedOutLink,\n panel: panelSelectors.gPanel,\n panelRect: panelSelectors.panel,\n panelSelection: panelSelectors.panelSelection,\n panelLabel: panelSelectors.label,\n panelLabelText: panelSelectors.labelText,\n panelSideIcon: panelSelectors.sideIconGroup,\n panelSideIconShape: panelSelectors.sideIconShape,\n panelSideIconSymbol: panelSelectors.sideIconSymbol,\n }\n\n static nodeSelectors = nodeSelectors\n g: Selection<SVGGElement, unknown, null, undefined>\n protected _defaultConfig = GraphDefaultConfig as unknown as GraphConfigInterface<N, L>\n public config: GraphConfigInterface<N, L> = this._defaultConfig\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>> = new GraphDataModel()\n private _selectedNodes: GraphNode<N, L>[]\n private _selectedLink: GraphLink<N, L>\n\n private _graphGroup: Selection<SVGGElement, unknown, null, undefined>\n private _panelsGroup: Selection<SVGGElement, unknown, null, undefined>\n private _linksGroup: Selection<SVGGElement, unknown, null, undefined>\n private _nodesGroup: Selection<SVGGElement, unknown, null, undefined>\n private _brush: Selection<SVGGElement, unknown, null, unknown>\n private _timer: Timer\n\n private _isFirstRender = true\n private _prevWidth: number\n private _prevHeight: number\n private _shouldRecalculateLayout = false\n private _currentLayoutType: GraphLayoutType | undefined\n private _layoutCalculationPromise: Promise<void> | undefined\n\n private _shouldFitLayout: boolean\n private _shouldSetPanels = false\n private _panels: GraphPanel[]\n\n private _defs: Selection<SVGDefsElement, unknown, SVGGElement, undefined>\n private _backgroundRect: Selection<SVGRectElement, unknown, SVGGElement, undefined>\n private _zoomBehavior: ZoomBehavior<SVGGElement, unknown>\n private _isAutoFitDisabled = false\n private _scale: number\n private _initialTransform: ZoomTransform\n private _isDragging = false\n private _brushBehavior: BrushBehavior<unknown>\n private _groupDragInit: [number, number]\n\n events = {\n [Graph.selectors.background]: {\n click: this._onBackgroundClick.bind(this),\n },\n [Graph.selectors.node]: {\n click: this._onNodeClick.bind(this),\n mouseover: this._onNodeMouseOver.bind(this),\n mouseout: this._onNodeMouseOut.bind(this),\n },\n [Graph.selectors.link]: {\n click: this._onLinkClick.bind(this),\n mouseover: this._onLinkMouseOver.bind(this),\n mouseout: this._onLinkMouseOut.bind(this),\n },\n }\n\n public get selectedNode (): GraphNode<N, L> {\n return this._selectedNodes?.[0]\n }\n\n public get selectedNodes (): GraphNode<N, L>[] {\n return this._selectedNodes\n }\n\n public get selectedLink (): GraphLink<N, L> {\n return this._selectedLink\n }\n\n constructor (config?: GraphConfigInterface<N, L>) {\n super()\n if (config) this.setConfig(config)\n\n this._backgroundRect = this.g.append('rect').attr('class', generalSelectors.background)\n this._graphGroup = this.g.append('g').attr('class', generalSelectors.graphGroup)\n this._brush = this.g.append('g').attr('class', generalSelectors.brush)\n\n this._zoomBehavior = zoom<SVGGElement, unknown>()\n .scaleExtent(this.config.zoomScaleExtent)\n .on('zoom', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoom(e.transform, e))\n .on('start', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoomStart(e.transform, e))\n .on('end', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoomEnd(e.transform, e))\n\n this._brushBehavior = brush()\n .on('start brush end', this._onBrush.bind(this))\n .filter(event => event.shiftKey)\n .keyModifiers(false)\n\n this._panelsGroup = this._graphGroup.append('g').attr('class', panelSelectors.panels)\n this._linksGroup = this._graphGroup.append('g').attr('class', linkSelectors.links)\n this._nodesGroup = this._graphGroup.append('g').attr('class', nodeSelectors.nodes)\n\n this._defs = this._graphGroup.append('defs')\n\n this._getLinkArrowDefId = this._getLinkArrowDefId.bind(this)\n }\n\n setData (data: GraphInputData<N, L>): void {\n const { config } = this\n if (!config.shouldDataUpdate(this.datamodel.data, data)) return\n\n this.datamodel.nodeSort = config.nodeSort\n this.datamodel.data = data\n this._shouldRecalculateLayout = true\n if (config.layoutAutofit) this._shouldFitLayout = true\n this._shouldSetPanels = true\n\n this._addSVGDefs()\n }\n\n setConfig (config: GraphConfigInterface<N, L>): void {\n super.setConfig(config)\n const hasLayoutConfigurationChanged = this._shouldLayoutRecalculate()\n\n // If the data has changed (see above in `setData`) or the layout configuration has changed, we need to recalculate the layout\n this._shouldRecalculateLayout = this._shouldRecalculateLayout || hasLayoutConfigurationChanged\n\n // If the `config.layoutAutofit` is true and data has changed (see above in `setData`),\n // or the layout configuration has changed, we need to fit the layout\n this._shouldFitLayout = this._shouldFitLayout || hasLayoutConfigurationChanged\n\n if (this._shouldFitLayout) this._isAutoFitDisabled = false\n this._shouldSetPanels = true\n }\n\n get bleed (): Spacing {\n const extraPadding = 50 // Extra padding to take into account labels and selection outlines\n return { top: extraPadding, bottom: extraPadding, left: extraPadding, right: extraPadding }\n }\n\n _render (customDuration?: number): void {\n const { config: { disableBrush, disableZoom, duration, layoutAutofit, zoomEventFilter }, datamodel } = this\n if (!datamodel.nodes && !datamodel.links) return\n const animDuration = isNumber(customDuration) ? customDuration : duration\n\n this._backgroundRect\n .attr('width', this._width)\n .attr('height', this._height)\n .attr('opacity', 0)\n\n if ((this._prevWidth !== this._width || this._prevHeight !== this._height) && layoutAutofit) {\n // Fit layout on resize\n this._shouldFitLayout = true\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n // Handle brush behavior\n if (!disableBrush) {\n this._brushBehavior.extent([[0, 0], [this._width, this._height]])\n this._brush.call(this._brushBehavior)\n\n // Activate the brush when the shift key is pressed\n select(window)\n .on('keydown.unovis-graph', e => e.key === 'Shift' && this._activateBrush())\n .on('keyup.unovis-graph', e => e.key === 'Shift' && this._clearBrush())\n\n this._zoomBehavior.filter(event => !event.shiftKey)\n } else {\n this._brush.on('.brush', null)\n\n select(window)\n .on('keydown.unovis-graph', null)\n .on('keyup.unovis-graph', null)\n\n // Clear brush in case it was disabled in an active state\n if (this._brush.classed('active')) this._clearBrush()\n }\n\n // Apply layout and render\n if (this._shouldRecalculateLayout || !this._layoutCalculationPromise) {\n this._layoutCalculationPromise = this._calculateLayout()\n\n // Call `onLayoutCalculated` after the layout calculation is done and the `this._layoutCalculationPromise`\n // variable is set because the `fitView` function relies on the promise to be initialized\n this._layoutCalculationPromise.then(() => {\n this.config.onLayoutCalculated?.(datamodel.nodes, datamodel.links)\n })\n }\n\n // Redefining Zoom Behavior filter to the one specified in the config,\n // or to the default one supporting `shiftKey` for node brushing\n // See more: https://d3js.org/d3-zoom#zoom_filter\n this._zoomBehavior.filter(\n isFunction(zoomEventFilter)\n ? zoomEventFilter\n : (e: PointerEvent) => (!e.ctrlKey || e.type === 'wheel') && !e.button && !e.shiftKey) // Default filter\n\n this._layoutCalculationPromise.then(() => {\n // If the component has been destroyed while the layout calculation\n // was in progress, we cancel the render\n if (this.isDestroyed()) return\n\n this._initPanelsData()\n\n // Fit the view\n if (this._isFirstRender) {\n this._fit()\n this._shouldFitLayout = false\n } else if (this._shouldFitLayout && !this._isAutoFitDisabled) {\n this._fit(duration)\n this._shouldFitLayout = false\n }\n\n // Update Nodes and Links Selection State\n this._resetSelectionGreyoutState()\n if (this.config.selectedNodeId || this.config.selectedNodeIds) {\n const selectedIds = this.config.selectedNodeIds ?? [this.config.selectedNodeId]\n const selectedNodes = selectedIds.map(id => datamodel.getNodeFromId(id))\n this._setNodeSelectionState(selectedNodes)\n }\n\n if (this.config.selectedLinkId) {\n const selectedLink = datamodel.links.find(link => link.id === this.config.selectedLinkId)\n this._setLinkSelectionState(selectedLink)\n }\n\n // Draw\n this._drawNodes(animDuration)\n this._drawLinks(animDuration)\n\n // Link flow animation timer\n if (!this._timer) {\n const refreshRateMs = 35\n this._timer = interval(this._onLinkFlowTimerFrame.bind(this), refreshRateMs)\n }\n\n // Zoom\n if (disableZoom) this.g.on('.zoom', null)\n else this.g.call(this._zoomBehavior).on('dblclick.zoom', null)\n\n // We need to set up events and attributes again because the rendering might have been delayed by the layout\n // calculation and they were not set up properly (see the render function of `ComponentCore`)\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n\n // On render complete callback\n this.config.onRenderComplete?.(this.g, datamodel.nodes, datamodel.links, this.config, animDuration, this._scale, this._containerWidth, this._containerHeight)\n this._isFirstRender = false\n })\n }\n\n private _drawNodes (duration: number): void {\n const { config, datamodel } = this\n\n const nodes: GraphNode<N, L>[] = datamodel.nodes\n const nodeGroups = this._nodesGroup\n .selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}:not(.${nodeSelectors.gNodeExit})`)\n .data(nodes, d => String(d._id))\n\n const nodeGroupsEnter = nodeGroups.enter().append('g')\n .attr('class', nodeSelectors.gNode)\n .call(createNodes, config, duration, this._scale)\n\n const nodeGroupsMerged = nodeGroups.merge(nodeGroupsEnter)\n const nodeUpdateSelection = updateNodes(nodeGroupsMerged, config, duration, this._scale)\n\n this._drawPanels(nodeUpdateSelection, duration)\n\n const nodesGroupExit = nodeGroups.exit<GraphNode<N, L>>()\n nodesGroupExit\n .classed(nodeSelectors.gNodeExit, true)\n .call(removeNodes, config, duration, this._scale)\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const thisRef = this\n if (!config.disableDrag) {\n const dragBehaviour = drag<SVGGElement, GraphNode<N, L>>()\n .on('start drag end', function (event, d) {\n thisRef._handleDrag(d, event, select(this))\n })\n nodeGroupsMerged.call(dragBehaviour)\n } else {\n nodeGroupsMerged.on('.drag', null)\n }\n }\n\n private _drawLinks (duration: number): void {\n const { config, datamodel: { links } } = this\n\n const linkGroups = this._linksGroup\n .selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .data(links, (d: GraphLink<N, L>) => String(d._id))\n\n const linkGroupsEnter = linkGroups.enter().append('g')\n .attr('class', linkSelectors.gLink)\n .call(createLinks, config, duration)\n\n const linkGroupsMerged = linkGroups.merge(linkGroupsEnter)\n linkGroupsMerged.call(updateLinks, config, duration, this._scale, this._getLinkArrowDefId)\n\n const linkGroupsExit = linkGroups.exit<GraphLink<N, L>>()\n linkGroupsExit\n .attr('class', linkSelectors.gLinkExit)\n .call(removeLinks, config, duration)\n }\n\n private _drawPanels (\n nodeUpdateSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n duration: number\n ): void {\n const { config } = this\n smartTransition(this._panelsGroup, duration / 2)\n .style('opacity', config.panels?.length ? 1 : 0)\n\n if (!this._panels) return\n\n const selection = ((nodeUpdateSelection as Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>).duration)\n ? (nodeUpdateSelection as Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>).selection()\n : nodeUpdateSelection as Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n\n updatePanelNumNodes(selection, this._panels, config)\n updatePanelBBoxSize(selection, this._panels, config)\n const panelData = this._panels.filter(p => p._numNodes)\n const panelGroup = this._panelsGroup\n .selectAll<SVGGElement, GraphPanel>(`.${panelSelectors.gPanel}`)\n .data(panelData, p => p.label)\n\n const panelGroupExit = panelGroup.exit<GraphPanel<N, L>>()\n panelGroupExit.call(removePanels, config, duration)\n\n const panelGroupEnter = panelGroup.enter().append('g')\n .attr('class', panelSelectors.gPanel)\n .call(createPanels, selection)\n const panelGroupMerged = panelGroup.merge(panelGroupEnter)\n\n this._updatePanels(panelGroupMerged, duration)\n }\n\n private _updatePanels (panelToUpdate: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>, duration: number): void {\n const { config } = this\n if (!this._panels) return\n\n panelToUpdate.call(updatePanels, config, duration)\n }\n\n private async _calculateLayout (): Promise<void> {\n const { config, datamodel } = this\n\n // If the layout type has changed, we need to reset the node positions if they were fixed before\n if (this._currentLayoutType !== config.layoutType) {\n for (const node of datamodel.nodes) {\n delete node._state.fx\n delete node._state.fy\n }\n }\n\n switch (config.layoutType) {\n case GraphLayoutType.Precalculated:\n break\n case GraphLayoutType.Parallel:\n applyLayoutParallel(datamodel, config, this._width, this._height)\n break\n case GraphLayoutType.ParallelHorizontal:\n applyLayoutParallel(datamodel, config, this._width, this._height, 'horizontal')\n break\n case GraphLayoutType.Dagre:\n await applyLayoutDagre(datamodel, config, this._width)\n break\n case GraphLayoutType.Force:\n await applyLayoutForce(datamodel, config, this._width)\n break\n case GraphLayoutType.Concentric:\n applyLayoutConcentric(datamodel, config, this._width, this._height)\n break\n case GraphLayoutType.Elk:\n await applyELKLayout(datamodel, config, this._width)\n break\n case GraphLayoutType.Circular:\n default:\n applyLayoutCircular(datamodel, config, this._width, this._height)\n break\n }\n\n // We need to update the panels data right after the layout calculation\n // because we want to have the latest coordinates before calling `onLayoutCalculated`\n this._initPanelsData()\n\n this._shouldRecalculateLayout = false\n this._currentLayoutType = config.layoutType as GraphLayoutType\n }\n\n private _initPanelsData (): void {\n const { config, datamodel } = this\n\n if (this._shouldSetPanels) {\n this._panels = initPanels(config.panels)\n setPanelForNodes(this._panels, datamodel.nodes, this.config)\n this._shouldSetPanels = false\n }\n }\n\n private _fit (duration = 0, nodeIds?: (string | number)[]): void {\n const { datamodel: { nodes } } = this\n const fitViewNodes = nodeIds?.length ? nodes.filter(n => nodeIds.includes(n.id)) : nodes\n const transform = this._getTransform(fitViewNodes)\n smartTransition(this.g, duration)\n .call(this._zoomBehavior.transform, transform)\n this._onZoom(transform)\n }\n\n private _getTransform (nodes: GraphNode<N, L>[]): ZoomTransform {\n const { nodeSize, zoomScaleExtent } = this.config\n const { left, top, right, bottom } = this.bleed\n\n const maxNodeSize = getMaxNodeSize(nodes, nodeSize)\n const w = this._width\n const h = this._height\n\n const xExtent = [\n min(nodes, d => getX(d) - maxNodeSize / 2 - (max((d._panels || []).map(p => p._padding.left)) || 0)),\n max(nodes, d => getX(d) + maxNodeSize / 2 + (max((d._panels || []).map(p => p._padding.right)) || 0)),\n ]\n const yExtent = [\n min(nodes, d => getY(d) - maxNodeSize / 2 - (max((d._panels || []).map(p => p._padding.top)) || 0)),\n max(nodes, d => getY(d) + maxNodeSize / 2 + (max((d._panels || []).map(p => p._padding.bottom)) || 0)),\n ]\n\n if (xExtent.some(item => item === undefined) || yExtent.some(item => item === undefined)) {\n console.warn('Unovis | Graph: Some of the node coordinates are undefined. This can happen if you try to fit the graph before the layout has been calculated.')\n return zoomIdentity\n }\n\n const xScale = w / (xExtent[1] - xExtent[0] + left + right)\n const yScale = h / (yExtent[1] - yExtent[0] + top + bottom)\n\n const clampedScale = clamp(min([xScale, yScale]), zoomScaleExtent[0], zoomScaleExtent[1])\n\n const xCenter = (xExtent[1] + xExtent[0]) / 2\n const yCenter = (yExtent[1] + yExtent[0]) / 2\n const translateX = this._width / 2 - xCenter * clampedScale\n const translateY = this._height / 2 - yCenter * clampedScale\n const transform = zoomIdentity\n .translate(translateX, translateY)\n .scale(clampedScale)\n\n return transform\n }\n\n\n private _setNodeSelectionState (nodesToSelect: (GraphNode<N, L> | undefined)[]): void {\n const { config, datamodel } = this\n\n // Grey out all nodes and set us unselected\n for (const n of datamodel.nodes) {\n n._state.selected = false\n if (config.nodeSelectionHighlightMode !== GraphNodeSelectionHighlightMode.None) {\n n._state.greyout = true\n }\n }\n\n // Grey out all links and set us unselected\n for (const l of datamodel.links) {\n l._state.selected = false\n if (config.nodeSelectionHighlightMode !== GraphNodeSelectionHighlightMode.None) {\n l._state.greyout = true\n }\n }\n\n // Filter out non-existing nodes\n this._selectedNodes = nodesToSelect.filter(n => {\n const doesNodeExist = Boolean(n)\n if (!doesNodeExist) console.warn('Unovis | Graph: Select Node: Not found')\n\n return doesNodeExist\n })\n\n // Set provided nodes as selected and ungreyout\n for (const n of this._selectedNodes) {\n n._state.selected = true\n n._state.greyout = false\n }\n\n // Highlight connected links and nodes\n if (config.nodeSelectionHighlightMode === GraphNodeSelectionHighlightMode.GreyoutNonConnected) {\n const connectedLinks = datamodel.links.filter(l => this._selectedNodes.includes(l.source) || this._selectedNodes.includes(l.target))\n connectedLinks.forEach(l => {\n l.source._state.greyout = false\n l.target._state.greyout = false\n l._state.greyout = false\n })\n }\n }\n\n private _setLinkSelectionState (link: GraphLink<N, L>): void {\n const { datamodel: { nodes, links } } = this\n if (!link) console.warn('Unovis: Graph: Select Link: Not found')\n\n this._selectedLink = link\n const selectedLinkSource = link?.source as GraphNode<N, L>\n const selectedLinkTarget = link?.target as GraphNode<N, L>\n\n // Apply grey out\n nodes.forEach(n => {\n n._state.selected = false\n n._state.greyout = true\n if (selectedLinkTarget?._id === n._id || selectedLinkSource?._id === n._id) {\n link._state.greyout = false\n }\n })\n\n links.forEach(l => {\n l._state.greyout = true\n const source = l.source as GraphNode<N, L>\n const target = l.target as GraphNode<N, L>\n if ((source._id === selectedLinkSource?._id) && (target._id === selectedLinkTarget?._id)) {\n source._state.greyout = false\n target._state.greyout = false\n l._state.greyout = false\n }\n })\n\n links.forEach(l => {\n delete l._state.selected\n })\n\n if (link) link._state.selected = true\n }\n\n private _resetSelectionGreyoutState (): void {\n const { datamodel: { nodes, links } } = this\n this._selectedNodes = []\n this._selectedLink = undefined\n\n // Disable Greyout\n nodes.forEach(n => {\n delete n._state.selected\n delete n._state.greyout\n })\n\n links.forEach(l => {\n delete l._state.greyout\n delete l._state.selected\n })\n }\n\n private _updateNodesLinksPartial (): void {\n const { config } = this\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n linkElements.call(updateLinksPartial, config, this._scale)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n nodeElements.call(updateNodesPartial, config, config.duration, this._scale)\n }\n\n private _onBackgroundClick (): void {\n this._resetSelectionGreyoutState()\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeClick (d: GraphNode<N, L>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOut (d: GraphNode<N, L>): void {\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOver (d: GraphNode<N, L>): void {\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onLinkClick (d: GraphLink<N, L>): void {\n }\n\n private _onLinkMouseOver (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n if (this.config.linkHighlightOnHover) d._state.hovered = true\n this._updateNodesLinksPartial()\n }\n\n private _onLinkMouseOut (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n delete d._state.hovered\n this._updateNodesLinksPartial()\n }\n\n private _onLinkFlowTimerFrame (elapsed = 0): void {\n const { config: { linkFlow, linkFlowAnimDuration }, datamodel: { links } } = this\n\n const hasLinksWithFlow = links.some((d, i) => getBoolean(d, linkFlow, i))\n if (!hasLinksWithFlow) return\n\n const t = (elapsed % linkFlowAnimDuration) / linkFlowAnimDuration\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n\n const linksToAnimate = linkElements.filter(d => !d._state.greyout)\n linksToAnimate.each(d => { d._state.flowAnimTime = t })\n animateLinkFlow(linksToAnimate, this.config, this._scale)\n }\n\n private _onZoom (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config, datamodel: { nodes } } = this\n const transform = t || event.transform\n this._scale = transform.k\n this._graphGroup.attr('transform', transform.toString())\n if (isFunction(config.onZoom)) config.onZoom(this._scale, config.zoomScaleExtent, event, transform)\n\n // console.warn('Unovis | Graph: Zoom: ', transform)\n if (!this._initialTransform) this._initialTransform = transform\n\n // If the event was triggered by a mouse interaction (pan or zoom) we don't\n // refit the layout after recalculation (e.g. on container resize)\n if (event?.sourceEvent) {\n const diff = Object.keys(transform).reduce((acc, prop) => {\n const propVal = transform[prop as keyof ZoomTransform] as number\n const initialPropVal = this._initialTransform[prop as keyof ZoomTransform] as number\n const dVal = Math.abs(propVal - initialPropVal)\n const scaledDVal = prop === 'k' ? 20 * dVal : dVal / 15\n acc += scaledDVal\n return acc\n }, 0)\n\n if (diff > config.layoutAutofitTolerance) this._isAutoFitDisabled = true\n else this._isAutoFitDisabled = false\n }\n\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .call(\n (nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomNodesThrottled : zoomNodes) as typeof zoomNodes,\n config,\n this._scale\n )\n\n this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .call(\n (nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomLinksThrottled : zoomLinks) as typeof zoomLinks,\n config,\n this._scale,\n this._getLinkArrowDefId\n )\n }\n\n private _onZoomStart (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config } = this\n const transform = t || event.transform\n this._scale = transform.k\n if (isFunction(config.onZoomStart)) config.onZoomStart(this._scale, config.zoomScaleExtent, event, transform)\n }\n\n private _onZoomEnd (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config } = this\n const transform = t || event.transform\n this._scale = transform.k\n if (isFunction(config.onZoomEnd)) config.onZoomEnd(this._scale, config.zoomScaleExtent, event, transform)\n }\n\n private _updateNodePosition (d: GraphNode<N, L>, x: number, y: number): void {\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Prevent the node from being dragged offscreen or outside its panel\n const panels = this._panels?.filter(p => p.nodes.includes(d._id)) ?? []\n const nodeSizeValue = getNodeSize(d, this.config.nodeSize, d._index)\n const maxY = min([(this._height - transform.y) / scale, ...panels.map(p => p._y + p._height)]) - nodeSizeValue / 2\n const maxX = min([(this._width - transform.x) / scale, ...panels.map(p => p._x + p._width)]) - nodeSizeValue / 2\n const minY = max([-transform.y / scale, ...panels.map(p => p._y)]) + nodeSizeValue / 2\n const minX = max([-transform.x / scale, ...panels.map(p => p._x)]) + nodeSizeValue / 2\n\n if (y < minY) y = minY\n else if (y > maxY) y = maxY\n if (x < minX) x = minX\n else if (x > maxX) x = maxX\n\n // Snap to Layout\n if (Math.sqrt(Math.pow(x - d.x, 2) + Math.pow(y - d.y, 2)) < 15) {\n x = d.x\n y = d.y\n }\n\n // Assign coordinates\n d._state.fx = x\n d._state.fy = y\n if (d._state.fx === d.x) delete d._state.fx\n if (d._state.fy === d.y) delete d._state.fy\n }\n\n private _onBrush (event: D3BrushEvent<SVGGElement>): void {\n if (!event.selection || !event.sourceEvent) return\n const { config } = this\n const transform = zoomTransform(this._graphGroup.node())\n const [xMin, yMin] = transform.invert(event.selection[0] as [number, number])\n const [xMax, yMax] = transform.invert(event.selection[1] as [number, number])\n\n // Update brushed nodes\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .each(n => {\n const x = getX(n)\n const y = getY(n)\n n._state.brushed = x >= xMin && x <= xMax && y >= yMin && y <= yMax\n })\n .classed(nodeSelectors.brushed, n => n._state.brushed)\n\n const brushedNodes = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.brushed}`)\n .call(updateNodesPartial, config, 0, this._scale)\n\n this._brush.classed('active', event.type !== 'end')\n config.onNodeSelectionBrush?.(brushedNodes.data(), event)\n }\n\n\n private _handleDrag (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n ): void {\n if (event.sourceEvent.shiftKey && d._state.brushed) {\n this._dragSelectedNodes(event)\n } else if (!event.sourceEvent.shiftKey) {\n switch (event.type) {\n case 'start':\n this._onDragStarted(d, event, nodeSelection)\n break\n case 'drag':\n this._onDragged(d, event)\n break\n case 'end':\n this._onDragEnded(d, event, nodeSelection)\n break\n }\n }\n }\n\n private _onDragStarted (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n ): void {\n const { config } = this\n this._isDragging = true\n d._state.isDragged = true\n nodeSelection.call(updateNodes, config, 0, this._scale)\n config.onNodeDragStart?.(d, event)\n }\n\n private _onDragged (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>\n ): void {\n const { config } = this\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Update node position\n const [x, y] = pointer(event, this._graphGroup.node())\n this._updateNodePosition(d, x, y)\n\n // Update affected DOM elements\n const nodeSelection = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n const nodeToUpdate = nodeSelection.filter((n: GraphNode<N, L>) => n._id === d._id)\n nodeToUpdate.call(updateNodes, config, 0, scale)\n\n const linkSelection = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n const linksToUpdate = linkSelection.filter((l: L) => {\n const source = l.source as GraphNode<N, L>\n const target = l.target as GraphNode<N, L>\n return source._id === d._id || target._id === d._id\n })\n linksToUpdate.call(updateLinks, config, 0, scale, this._getLinkArrowDefId)\n const linksToAnimate = linksToUpdate.filter(d => d._state.greyout)\n if (linksToAnimate.size()) animateLinkFlow(linksToAnimate, config, this._scale)\n\n config.onNodeDrag?.(d, event)\n }\n\n private _onDragEnded (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n ): void {\n const { config } = this\n this._isDragging = false\n d._state.isDragged = false\n nodeSelection.call(updateNodes, config, 0, this._scale)\n config.onNodeDragEnd?.(d, event)\n }\n\n private _dragSelectedNodes (event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>): void {\n const { config } = this\n const curr = pointer(event, this._graphGroup.node())\n\n const selectedNodes = smartTransition(\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.brushed}`)\n ) as Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n\n if (event.type === 'start') {\n this._groupDragInit = curr\n this._isDragging = true\n selectedNodes.each(n => {\n n.x = getX(n)\n n.y = getY(n)\n n._state.isDragged = true\n })\n } else if (event.type === 'drag') {\n const dx = curr[0] - this._groupDragInit[0]\n const dy = curr[1] - this._groupDragInit[1]\n\n selectedNodes.each(n => this._updateNodePosition(n, n.x + dx, n.y + dy))\n\n const connectedLinks = smartTransition(\n this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .filter(l => l.source?._state?.isDragged || l.target?._state?.isDragged)\n ) as Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n\n connectedLinks.call(updateLinks, this.config, 0, this._scale, this._getLinkArrowDefId)\n } else {\n this._isDragging = false\n selectedNodes.each(n => { n._state.isDragged = false })\n }\n selectedNodes.call(updateNodes, config, 0, this._scale)\n this.config.onNodeSelectionDrag?.(selectedNodes.data(), event)\n }\n\n private _activateBrush (): void {\n this._brush.classed('active', true)\n this._nodesGroup.selectAll(`.${nodeSelectors.gNode}`)\n .classed(nodeSelectors.brushable, true)\n }\n\n private _clearBrush (): void {\n this._brush.classed('active', false).call(this._brushBehavior?.clear)\n\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .classed(nodeSelectors.brushable, false)\n .classed(nodeSelectors.brushed, false)\n .each(n => { n._state.brushed = false })\n .call(updateNodesPartial, this.config, 0, this._scale)\n }\n\n private _shouldLayoutRecalculate (): boolean {\n const { prevConfig, config } = this\n if (prevConfig.layoutType !== config.layoutType) return true\n if (prevConfig.layoutNonConnectedAside !== config.layoutNonConnectedAside) return true\n\n if (prevConfig.layoutType === GraphLayoutType.Force) {\n const forceSettingsDiff = shallowDiff(prevConfig.forceLayoutSettings, config.forceLayoutSettings)\n if (Object.keys(forceSettingsDiff).length) return true\n }\n\n if (prevConfig.layoutType === GraphLayoutType.Dagre) {\n const dagreSettingsDiff = shallowDiff(prevConfig.dagreLayoutSettings, config.dagreLayoutSettings)\n if (Object.keys(dagreSettingsDiff).length) return true\n }\n\n if (prevConfig.layoutType === GraphLayoutType.Elk) {\n if (isPlainObject(prevConfig.layoutElkSettings) && isPlainObject(config.layoutElkSettings)) {\n // Do a deeper comparison if `config.layoutElkSettings` is an object\n const elkSettingsDiff = shallowDiff(\n prevConfig.layoutElkSettings as Record<string, string>,\n config.layoutElkSettings as Record<string, string>\n )\n return Boolean(Object.keys(elkSettingsDiff).length)\n } else {\n // Otherwise, do a simple `===` comparison\n return prevConfig.layoutElkSettings !== config.layoutElkSettings\n }\n }\n\n if (\n prevConfig.layoutType === GraphLayoutType.Parallel ||\n prevConfig.layoutType === GraphLayoutType.ParallelHorizontal ||\n prevConfig.layoutType === GraphLayoutType.Concentric\n ) {\n if (!isEqual(prevConfig.layoutGroupOrder, config.layoutGroupOrder)) return true\n if (prevConfig.layoutParallelNodesPerColumn !== config.layoutParallelNodesPerColumn) return true\n if (prevConfig.layoutParallelSortConnectionsByGroup !== config.layoutParallelSortConnectionsByGroup) return true\n }\n\n return false\n }\n\n private _getLinkArrowDefId (arrow: GraphLinkArrowStyle | undefined): string | null {\n return arrow ? `${this.uid}-${arrow}` : null\n }\n\n private _addSVGDefs (): void {\n // Clean up old defs\n this._defs.selectAll('*').remove()\n\n // Single Arrow\n this._defs.append('path').attr('d', getArrowPath())\n .attr('id', this._getLinkArrowDefId(GraphLinkArrowStyle.Single))\n\n // Double Arrow\n this._defs.append('path').attr('d', getDoubleArrowPath())\n .attr('id', this._getLinkArrowDefId(GraphLinkArrowStyle.Double))\n }\n\n public zoomIn (increment = 0.3): void {\n const scaleBy = 1 + increment\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleBy, scaleBy)\n }\n\n public zoomOut (increment = 0.3): void {\n const scaleBy = 1 - increment\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleBy, scaleBy)\n }\n\n public setZoom (zoomLevel: number): void {\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleTo, zoomLevel)\n }\n\n public getZoom (): number {\n return zoomTransform(this.g.node()).k\n }\n\n public fitView (duration = this.config.duration, nodeIds?: (string | number)[]): void {\n this._layoutCalculationPromise?.then(() => {\n this._fit(duration, nodeIds)\n })\n }\n\n /** Enable automatic fitting to container if it was disabled due to previous zoom / pan interactions */\n public resetAutofitState (): void {\n this._isAutoFitDisabled = false\n }\n\n /** Get current coordinates of the nodes as an array of { id: string; x: number; y: number } objects */\n public getNodesCoordinates (): { id: string; x: number; y: number }[] {\n const { datamodel: { nodes } } = this\n return nodes.map(n => ({\n id: n._id,\n x: n.x,\n y: n.y,\n }))\n }\n\n /** Get node coordinates by id as { id: string; x: number; y: number } */\n public getNodeCoordinatesById (id: string): { id: string; x: number; y: number } | undefined {\n const { datamodel: { nodes } } = this\n const node = nodes.find(n => n._id === id)\n\n if (!node) {\n console.warn(`Unovis | Graph: Node ${id} not found`)\n return undefined\n } else {\n return {\n id: node._id,\n x: node.x,\n y: node.y,\n }\n }\n }\n}\n"],"names":["generalSelectors.background","generalSelectors.graphGroup","generalSelectors.brush","brush","panelSelectors.panels","linkSelectors.links","nodeSelectors.nodes","nodeSelectors.gNode","nodeSelectors.gNodeExit","linkSelectors.gLink","linkSelectors.gLinkExit","panelSelectors.gPanel","nodeSelectors.brushed","nodeSelectors.brushable","generalSelectors.root","nodeSelectors.node","nodeSelectors.nodeGauge","nodeSelectors.sideLabelGroup","nodeSelectors.label","nodeSelectors.greyedOutNode","linkSelectors.link","linkSelectors.linkLabelGroup","linkSelectors.greyedOutLink","panelSelectors.panel","panelSelectors.panelSelection","panelSelectors.label","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.sideIconSymbol","nodeSelectors"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/graph/index.ts"],"sourcesContent":["import { min, max } from 'd3-array'\nimport { Transition } from 'd3-transition'\nimport { select, Selection, pointer } from 'd3-selection'\nimport { brush, BrushBehavior, D3BrushEvent } from 'd3-brush'\nimport { zoom, zoomTransform, zoomIdentity, ZoomTransform, D3ZoomEvent, ZoomBehavior } from 'd3-zoom'\nimport { drag, D3DragEvent } from 'd3-drag'\nimport { interval, Timer } from 'd3-timer'\n\n// Core\nimport { ComponentCore } from 'core/component'\nimport { GraphDataModel } from 'data-models/graph'\n\n// Types\nimport { GraphInputLink, GraphInputNode, GraphInputData } from 'types/graph'\nimport { Spacing } from 'types/spacing'\n\n// Utils\nimport { isNumber, clamp, shallowDiff, isFunction, getBoolean, isPlainObject, isEqual } from 'utils/data'\nimport { smartTransition } from 'utils/d3'\n\n// Local Types\nimport { GraphNode, GraphLink, GraphLayoutType, GraphLinkArrowStyle, GraphPanel, GraphNodeSelectionHighlightMode } from './types'\n\n// Config\nimport { GraphDefaultConfig, GraphConfigInterface } from './config'\n\n// Styles\nimport * as generalSelectors from './style'\nimport * as nodeSelectors from './modules/node/style'\nimport * as linkSelectors from './modules/link/style'\nimport * as panelSelectors from './modules/panel/style'\n\n// Modules\nimport { createNodes, updateNodes, removeNodes, zoomNodesThrottled, zoomNodes, updateNodesPartial, updateNodePositions } from './modules/node'\nimport { getMaxNodeSize, getNodeSize, getX, getY } from './modules/node/helper'\nimport {\n createLinks,\n updateLinks,\n removeLinks,\n zoomLinksThrottled,\n zoomLinks,\n animateLinkFlow,\n updateLinksPartial,\n updateLinkLines,\n} from './modules/link'\nimport { getDoubleArrowPath, getArrowPath } from './modules/link/helper'\nimport { createPanels, updatePanels, removePanels } from './modules/panel'\nimport { setPanelForNodes, updatePanelBBoxSize, updatePanelNumNodes, initPanels } from './modules/panel/helper'\nimport { applyLayoutCircular, applyLayoutParallel, applyLayoutDagre, applyLayoutConcentric, applyLayoutForce, applyELKLayout } from './modules/layout'\n\nexport class Graph<\n N extends GraphInputNode,\n L extends GraphInputLink,\n> extends ComponentCore<\n GraphInputData<N, L>,\n GraphConfigInterface<N, L>\n > {\n static selectors = {\n root: generalSelectors.root,\n graphGroup: generalSelectors.graphGroup,\n background: generalSelectors.background,\n node: nodeSelectors.gNode,\n nodeShape: nodeSelectors.node,\n nodeGauge: nodeSelectors.nodeGauge,\n nodeSideLabel: nodeSelectors.sideLabelGroup,\n nodeLabel: nodeSelectors.label,\n dimmedNode: nodeSelectors.greyedOutNode,\n link: linkSelectors.gLink,\n linkLine: linkSelectors.link,\n linkLabel: linkSelectors.linkLabelGroup,\n dimmedLink: linkSelectors.greyedOutLink,\n panel: panelSelectors.gPanel,\n panelRect: panelSelectors.panel,\n panelSelection: panelSelectors.panelSelection,\n panelLabel: panelSelectors.label,\n panelLabelText: panelSelectors.labelText,\n panelSideIcon: panelSelectors.sideIconGroup,\n panelSideIconShape: panelSelectors.sideIconShape,\n panelSideIconSymbol: panelSelectors.sideIconSymbol,\n }\n\n static nodeSelectors = nodeSelectors\n g: Selection<SVGGElement, unknown, null, undefined>\n protected _defaultConfig = GraphDefaultConfig as unknown as GraphConfigInterface<N, L>\n public config: GraphConfigInterface<N, L> = this._defaultConfig\n datamodel: GraphDataModel<N, L, GraphNode<N, L>, GraphLink<N, L>> = new GraphDataModel()\n private _selectedNodes: GraphNode<N, L>[]\n private _selectedLink: GraphLink<N, L>\n\n private _graphGroup: Selection<SVGGElement, unknown, null, undefined>\n private _panelsGroup: Selection<SVGGElement, unknown, null, undefined>\n private _linksGroup: Selection<SVGGElement, unknown, null, undefined>\n private _nodesGroup: Selection<SVGGElement, unknown, null, undefined>\n private _brush: Selection<SVGGElement, unknown, null, unknown>\n private _timer: Timer\n\n private _isFirstRender = true\n private _prevWidth: number\n private _prevHeight: number\n private _shouldRecalculateLayout = false\n private _currentLayoutType: GraphLayoutType | undefined\n private _layoutCalculationPromise: Promise<void> | undefined\n\n private _shouldFitLayout: boolean\n private _shouldSetPanels = false\n private _panels: GraphPanel[]\n\n private _defs: Selection<SVGDefsElement, unknown, SVGGElement, undefined>\n private _backgroundRect: Selection<SVGRectElement, unknown, SVGGElement, undefined>\n private _zoomBehavior: ZoomBehavior<SVGGElement, unknown>\n private _isAutoFitDisabled = false\n private _scale: number\n private _initialTransform: ZoomTransform\n private _isDragging = false\n private _brushBehavior: BrushBehavior<unknown>\n private _groupDragInit: [number, number]\n\n // A map for storing link total path lengths to optimize rendering performance\n private _linkPathLengthMap: Map<string, number> = new Map()\n\n events = {\n [Graph.selectors.background]: {\n click: this._onBackgroundClick.bind(this),\n },\n [Graph.selectors.node]: {\n click: this._onNodeClick.bind(this),\n mouseover: this._onNodeMouseOver.bind(this),\n mouseout: this._onNodeMouseOut.bind(this),\n },\n [Graph.selectors.link]: {\n click: this._onLinkClick.bind(this),\n mouseover: this._onLinkMouseOver.bind(this),\n mouseout: this._onLinkMouseOut.bind(this),\n },\n }\n\n public get selectedNode (): GraphNode<N, L> {\n return this._selectedNodes?.[0]\n }\n\n public get selectedNodes (): GraphNode<N, L>[] {\n return this._selectedNodes\n }\n\n public get selectedLink (): GraphLink<N, L> {\n return this._selectedLink\n }\n\n constructor (config?: GraphConfigInterface<N, L>) {\n super()\n if (config) this.setConfig(config)\n\n this._backgroundRect = this.g.append('rect').attr('class', generalSelectors.background)\n this._graphGroup = this.g.append('g').attr('class', generalSelectors.graphGroup)\n this._brush = this.g.append('g').attr('class', generalSelectors.brush)\n\n this._zoomBehavior = zoom<SVGGElement, unknown>()\n .scaleExtent(this.config.zoomScaleExtent)\n .on('zoom', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoom(e.transform, e))\n .on('start', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoomStart(e.transform, e))\n .on('end', (e: D3ZoomEvent<SVGGElement, unknown>) => this._onZoomEnd(e.transform, e))\n\n this._brushBehavior = brush()\n .on('start brush end', this._onBrush.bind(this))\n .filter(event => event.shiftKey)\n .keyModifiers(false)\n\n this._panelsGroup = this._graphGroup.append('g').attr('class', panelSelectors.panels)\n this._linksGroup = this._graphGroup.append('g').attr('class', linkSelectors.links)\n this._nodesGroup = this._graphGroup.append('g').attr('class', nodeSelectors.nodes)\n\n this._defs = this._graphGroup.append('defs')\n\n this._getLinkArrowDefId = this._getLinkArrowDefId.bind(this)\n }\n\n setData (data: GraphInputData<N, L>): void {\n const { config } = this\n if (!config.shouldDataUpdate(this.datamodel.data, data, this.datamodel)) return\n\n this.datamodel.nodeSort = config.nodeSort\n this.datamodel.data = data\n this._shouldRecalculateLayout = true\n if (config.layoutAutofit) this._shouldFitLayout = true\n this._shouldSetPanels = true\n\n this._addSVGDefs()\n }\n\n setConfig (config: GraphConfigInterface<N, L>): void {\n super.setConfig(config)\n const hasLayoutConfigurationChanged = this._shouldLayoutRecalculate()\n\n // If the data has changed (see above in `setData`) or the layout configuration has changed, we need to recalculate the layout\n this._shouldRecalculateLayout = this._shouldRecalculateLayout || hasLayoutConfigurationChanged\n\n // If the `config.layoutAutofit` is true and data has changed (see above in `setData`),\n // or the layout configuration has changed, we need to fit the layout\n this._shouldFitLayout = this._shouldFitLayout || hasLayoutConfigurationChanged\n\n if (this._shouldFitLayout) this._isAutoFitDisabled = false\n this._shouldSetPanels = true\n }\n\n get bleed (): Spacing {\n const extraPadding = 50 // Extra padding to take into account labels and selection outlines\n return { top: extraPadding, bottom: extraPadding, left: extraPadding, right: extraPadding }\n }\n\n _render (customDuration?: number): void {\n const { config: { disableBrush, disableZoom, duration, layoutAutofit, zoomEventFilter }, datamodel } = this\n if (!datamodel.nodes && !datamodel.links) return\n const animDuration = isNumber(customDuration) ? customDuration : duration\n\n this._backgroundRect\n .attr('width', this._width)\n .attr('height', this._height)\n .attr('opacity', 0)\n\n if ((this._prevWidth !== this._width || this._prevHeight !== this._height) && layoutAutofit) {\n // Fit layout on resize\n this._shouldFitLayout = true\n this._prevWidth = this._width\n this._prevHeight = this._height\n }\n\n // Handle brush behavior\n if (!disableBrush) {\n this._brushBehavior.extent([[0, 0], [this._width, this._height]])\n this._brush.call(this._brushBehavior)\n\n // Activate the brush when the shift key is pressed\n select(window)\n .on('keydown.unovis-graph', e => e.key === 'Shift' && this._activateBrush())\n .on('keyup.unovis-graph', e => e.key === 'Shift' && this._clearBrush())\n\n this._zoomBehavior.filter(event => !event.shiftKey)\n } else {\n this._brush.on('.brush', null)\n\n select(window)\n .on('keydown.unovis-graph', null)\n .on('keyup.unovis-graph', null)\n\n // Clear brush in case it was disabled in an active state\n if (this._brush.classed('active')) this._clearBrush()\n }\n\n // Apply layout and render\n if (this._shouldRecalculateLayout || !this._layoutCalculationPromise) {\n this._layoutCalculationPromise = this._calculateLayout()\n\n // Call `onLayoutCalculated` after the layout calculation is done and the `this._layoutCalculationPromise`\n // variable is set because the `fitView` function relies on the promise to be initialized\n this._layoutCalculationPromise.then(() => {\n this.config.onLayoutCalculated?.(datamodel.nodes, datamodel.links)\n })\n }\n\n // Redefining Zoom Behavior filter to the one specified in the config,\n // or to the default one supporting `shiftKey` for node brushing\n // See more: https://d3js.org/d3-zoom#zoom_filter\n this._zoomBehavior.filter(\n isFunction(zoomEventFilter)\n ? zoomEventFilter\n : (e: PointerEvent) => (!e.ctrlKey || e.type === 'wheel') && !e.button && !e.shiftKey) // Default filter\n\n this._layoutCalculationPromise.then(() => {\n // If the component has been destroyed while the layout calculation\n // was in progress, we cancel the render\n if (this.isDestroyed()) return\n\n this._initPanelsData()\n\n // Fit the view\n if (this._isFirstRender) {\n this._fit()\n this._shouldFitLayout = false\n } else if (this._shouldFitLayout && !this._isAutoFitDisabled) {\n this._fit(duration)\n this._shouldFitLayout = false\n }\n\n // Update Nodes and Links Selection State\n this._resetSelectionGreyoutState()\n if (this.config.selectedNodeId || this.config.selectedNodeIds) {\n const selectedIds = this.config.selectedNodeIds ?? [this.config.selectedNodeId]\n const selectedNodes = selectedIds.map(id => datamodel.getNodeById(id))\n this._setNodeSelectionState(selectedNodes)\n }\n\n if (this.config.selectedLinkId) {\n const selectedLink = datamodel.links.find(link => link.id === this.config.selectedLinkId)\n this._setLinkSelectionState(selectedLink)\n }\n\n // Draw\n this._drawNodes(animDuration)\n this._drawLinks(animDuration)\n\n // Link flow animation timer\n if (!this._timer) {\n const refreshRateMs = 35\n this._timer = interval(this._onLinkFlowTimerFrame.bind(this), refreshRateMs)\n }\n\n // Zoom\n if (disableZoom) this.g.on('.zoom', null)\n else this.g.call(this._zoomBehavior).on('dblclick.zoom', null)\n\n // We need to set up events and attributes again because the rendering might have been delayed by the layout\n // calculation and they were not set up properly (see the render function of `ComponentCore`)\n this._setUpComponentEventsThrottled()\n this._setCustomAttributesThrottled()\n\n // On render complete callback\n this.config.onRenderComplete?.(this.g, datamodel.nodes, datamodel.links, this.config, animDuration, this._scale, this._containerWidth, this._containerHeight)\n this._isFirstRender = false\n })\n }\n\n private _drawNodes (duration: number): void {\n const { config, datamodel } = this\n\n const nodes: GraphNode<N, L>[] = datamodel.nodes\n const nodeGroups = this._nodesGroup\n .selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}:not(.${nodeSelectors.gNodeExit})`)\n .data(nodes, d => String(d._id))\n\n const nodeGroupsEnter = nodeGroups.enter().append('g')\n .attr('class', nodeSelectors.gNode)\n .call(createNodes, config, duration, this._scale)\n\n const nodeGroupsMerged = nodeGroups.merge(nodeGroupsEnter)\n const nodeUpdateSelection = updateNodes(nodeGroupsMerged, config, duration, this._scale)\n\n this._drawPanels(nodeUpdateSelection, duration)\n\n const nodesGroupExit = nodeGroups.exit<GraphNode<N, L>>()\n nodesGroupExit\n .classed(nodeSelectors.gNodeExit, true)\n .call(removeNodes, config, duration, this._scale)\n\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const thisRef = this\n if (!config.disableDrag) {\n const dragBehaviour = drag<SVGGElement, GraphNode<N, L>>()\n .on('start drag end', function (event, d) {\n thisRef._handleDrag(d, event, select(this))\n })\n nodeGroupsMerged.call(dragBehaviour)\n } else {\n nodeGroupsMerged.on('.drag', null)\n }\n }\n\n private _drawLinks (duration: number): void {\n const { config, datamodel: { links } } = this\n\n const linkGroups = this._linksGroup\n .selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .data(links, (d: GraphLink<N, L>) => String(d._id))\n\n const linkGroupsEnter = linkGroups.enter().append('g')\n .attr('class', linkSelectors.gLink)\n .call(createLinks, config, duration)\n\n const linkGroupsMerged = linkGroups.merge(linkGroupsEnter)\n linkGroupsMerged.call(updateLinks, config, duration, this._scale, this._getLinkArrowDefId, this._linkPathLengthMap)\n\n const linkGroupsExit = linkGroups.exit<GraphLink<N, L>>()\n linkGroupsExit\n .attr('class', linkSelectors.gLinkExit)\n .call(removeLinks, config, duration)\n }\n\n private _drawPanels (\n nodeUpdateSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown> | Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>,\n duration: number\n ): void {\n const { config } = this\n smartTransition(this._panelsGroup, duration / 2)\n .style('opacity', config.panels?.length ? 1 : 0)\n\n if (!this._panels) return\n\n const selection = ((nodeUpdateSelection as Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>).duration)\n ? (nodeUpdateSelection as Transition<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>).selection()\n : nodeUpdateSelection as Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n\n updatePanelNumNodes(selection, this._panels, config)\n updatePanelBBoxSize(selection, this._panels, config)\n const panelData = this._panels.filter(p => p._numNodes)\n const panelGroup = this._panelsGroup\n .selectAll<SVGGElement, GraphPanel>(`.${panelSelectors.gPanel}`)\n .data(panelData, p => p.label)\n\n const panelGroupExit = panelGroup.exit<GraphPanel<N, L>>()\n panelGroupExit.call(removePanels, config, duration)\n\n const panelGroupEnter = panelGroup.enter().append('g')\n .attr('class', panelSelectors.gPanel)\n .call(createPanels, selection)\n const panelGroupMerged = panelGroup.merge(panelGroupEnter)\n\n this._updatePanels(panelGroupMerged, duration)\n }\n\n private _updatePanels (panelToUpdate: Selection<SVGGElement, GraphPanel, SVGGElement, unknown>, duration: number): void {\n const { config } = this\n if (!this._panels) return\n\n panelToUpdate.call(updatePanels, config, duration)\n }\n\n private async _calculateLayout (): Promise<void> {\n const { config, datamodel } = this\n\n // If the layout type has changed, we need to reset the node positions if they were fixed before\n if (this._currentLayoutType !== config.layoutType) {\n for (const node of datamodel.nodes) {\n delete node._state.fx\n delete node._state.fy\n }\n }\n\n switch (config.layoutType) {\n case GraphLayoutType.Precalculated:\n break\n case GraphLayoutType.Parallel:\n applyLayoutParallel(datamodel, config, this._width, this._height)\n break\n case GraphLayoutType.ParallelHorizontal:\n applyLayoutParallel(datamodel, config, this._width, this._height, 'horizontal')\n break\n case GraphLayoutType.Dagre:\n await applyLayoutDagre(datamodel, config, this._width)\n break\n case GraphLayoutType.Force:\n await applyLayoutForce(datamodel, config, this._width)\n break\n case GraphLayoutType.Concentric:\n applyLayoutConcentric(datamodel, config, this._width, this._height)\n break\n case GraphLayoutType.Elk:\n await applyELKLayout(datamodel, config, this._width)\n break\n case GraphLayoutType.Circular:\n default:\n applyLayoutCircular(datamodel, config, this._width, this._height)\n break\n }\n\n // We need to update the panels data right after the layout calculation\n // because we want to have the latest coordinates before calling `onLayoutCalculated`\n this._initPanelsData()\n\n this._shouldRecalculateLayout = false\n this._currentLayoutType = config.layoutType as GraphLayoutType\n }\n\n private _initPanelsData (): void {\n const { config, datamodel } = this\n\n if (this._shouldSetPanels) {\n this._panels = initPanels(config.panels)\n setPanelForNodes(this._panels, datamodel.nodes, this.config)\n this._shouldSetPanels = false\n }\n }\n\n private _fit (duration = 0, nodeIds?: (string | number)[]): void {\n const { datamodel: { nodes } } = this\n const fitViewNodes = nodeIds?.length ? nodes.filter(n => nodeIds.includes(n.id)) : nodes\n const transform = this._getTransform(fitViewNodes)\n smartTransition(this.g, duration)\n .call(this._zoomBehavior.transform, transform)\n this._onZoom(transform)\n }\n\n private _getTransform (nodes: GraphNode<N, L>[]): ZoomTransform {\n const { nodeSize, zoomScaleExtent } = this.config\n const { left, top, right, bottom } = this.bleed\n\n const maxNodeSize = getMaxNodeSize(nodes, nodeSize)\n const w = this._width\n const h = this._height\n\n const xExtent = [\n min(nodes, d => getX(d) - maxNodeSize / 2 - (max((d._panels || []).map(p => p._padding.left)) || 0)),\n max(nodes, d => getX(d) + maxNodeSize / 2 + (max((d._panels || []).map(p => p._padding.right)) || 0)),\n ]\n const yExtent = [\n min(nodes, d => getY(d) - maxNodeSize / 2 - (max((d._panels || []).map(p => p._padding.top)) || 0)),\n max(nodes, d => getY(d) + maxNodeSize / 2 + (max((d._panels || []).map(p => p._padding.bottom)) || 0)),\n ]\n\n if (xExtent.some(item => item === undefined) || yExtent.some(item => item === undefined)) {\n console.warn('Unovis | Graph: Some of the node coordinates are undefined. This can happen if you try to fit the graph before the layout has been calculated.')\n return zoomIdentity\n }\n\n const xScale = w / (xExtent[1] - xExtent[0] + left + right)\n const yScale = h / (yExtent[1] - yExtent[0] + top + bottom)\n\n const clampedScale = clamp(min([xScale, yScale]), zoomScaleExtent[0], zoomScaleExtent[1])\n\n const xCenter = (xExtent[1] + xExtent[0]) / 2\n const yCenter = (yExtent[1] + yExtent[0]) / 2\n const translateX = this._width / 2 - xCenter * clampedScale\n const translateY = this._height / 2 - yCenter * clampedScale\n const transform = zoomIdentity\n .translate(translateX, translateY)\n .scale(clampedScale)\n\n return transform\n }\n\n\n private _setNodeSelectionState (nodesToSelect: (GraphNode<N, L> | undefined)[]): void {\n const { config, datamodel } = this\n\n // Grey out all nodes and set us unselected\n for (const n of datamodel.nodes) {\n n._state.selected = false\n if (config.nodeSelectionHighlightMode !== GraphNodeSelectionHighlightMode.None) {\n n._state.greyout = true\n }\n }\n\n // Grey out all links and set us unselected\n for (const l of datamodel.links) {\n l._state.selected = false\n if (config.nodeSelectionHighlightMode !== GraphNodeSelectionHighlightMode.None) {\n l._state.greyout = true\n }\n }\n\n // Filter out non-existing nodes\n this._selectedNodes = nodesToSelect.filter(n => {\n const doesNodeExist = Boolean(n)\n if (!doesNodeExist) console.warn('Unovis | Graph: Select Node: Not found')\n\n return doesNodeExist\n })\n\n // Set provided nodes as selected and ungreyout\n for (const n of this._selectedNodes) {\n n._state.selected = true\n n._state.greyout = false\n }\n\n // Highlight connected links and nodes\n if (config.nodeSelectionHighlightMode === GraphNodeSelectionHighlightMode.GreyoutNonConnected) {\n const connectedLinks = datamodel.links.filter(l => this._selectedNodes.includes(l.source) || this._selectedNodes.includes(l.target))\n connectedLinks.forEach(l => {\n l.source._state.greyout = false\n l.target._state.greyout = false\n l._state.greyout = false\n })\n }\n }\n\n private _setLinkSelectionState (link: GraphLink<N, L>): void {\n const { datamodel: { nodes, links } } = this\n if (!link) console.warn('Unovis: Graph: Select Link: Not found')\n\n this._selectedLink = link\n const selectedLinkSource = link?.source as GraphNode<N, L>\n const selectedLinkTarget = link?.target as GraphNode<N, L>\n\n // Apply grey out\n nodes.forEach(n => {\n n._state.selected = false\n n._state.greyout = true\n if (selectedLinkTarget?._id === n._id || selectedLinkSource?._id === n._id) {\n link._state.greyout = false\n }\n })\n\n links.forEach(l => {\n l._state.greyout = true\n const source = l.source as GraphNode<N, L>\n const target = l.target as GraphNode<N, L>\n if ((source._id === selectedLinkSource?._id) && (target._id === selectedLinkTarget?._id)) {\n source._state.greyout = false\n target._state.greyout = false\n l._state.greyout = false\n }\n })\n\n links.forEach(l => {\n delete l._state.selected\n })\n\n if (link) link._state.selected = true\n }\n\n private _resetSelectionGreyoutState (): void {\n const { datamodel: { nodes, links } } = this\n this._selectedNodes = []\n this._selectedLink = undefined\n\n // Disable Greyout\n nodes.forEach(n => {\n delete n._state.selected\n delete n._state.greyout\n })\n\n links.forEach(l => {\n delete l._state.greyout\n delete l._state.selected\n })\n }\n\n private _updateNodesLinksPartial (): void {\n const { config } = this\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n linkElements.call(updateLinksPartial, config, this._scale)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n nodeElements.call(updateNodesPartial, config, config.duration, this._scale)\n }\n\n private _onBackgroundClick (): void {\n this._resetSelectionGreyoutState()\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeClick (d: GraphNode<N, L>): void {\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOut (d: GraphNode<N, L>): void {\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onNodeMouseOver (d: GraphNode<N, L>): void {\n this._updateNodesLinksPartial()\n }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private _onLinkClick (d: GraphLink<N, L>): void {\n }\n\n private _onLinkMouseOver (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n if (this.config.linkHighlightOnHover) d._state.hovered = true\n this._updateNodesLinksPartial()\n }\n\n private _onLinkMouseOut (d: GraphLink<N, L>): void {\n if (this._isDragging) return\n\n delete d._state.hovered\n this._updateNodesLinksPartial()\n }\n\n private _onLinkFlowTimerFrame (elapsed = 0): void {\n const { config: { linkFlow, linkFlowAnimDuration }, datamodel: { links } } = this\n\n const hasLinksWithFlow = links.some((d, i) => getBoolean(d, linkFlow, i))\n if (!hasLinksWithFlow) return\n\n const t = (elapsed % linkFlowAnimDuration) / linkFlowAnimDuration\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n\n const linksToAnimate = linkElements.filter(d => !d._state.greyout)\n linksToAnimate.each(d => { d._state.flowAnimTime = t })\n animateLinkFlow(linksToAnimate, this.config, this._scale, this._linkPathLengthMap)\n }\n\n private _onZoom (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config, datamodel: { nodes } } = this\n const transform = t || event.transform\n this._scale = transform.k\n this._graphGroup.attr('transform', transform.toString())\n if (isFunction(config.onZoom)) config.onZoom(this._scale, config.zoomScaleExtent, event, transform)\n\n // console.warn('Unovis | Graph: Zoom: ', transform)\n if (!this._initialTransform) this._initialTransform = transform\n\n // If the event was triggered by a mouse interaction (pan or zoom) we don't\n // refit the layout after recalculation (e.g. on container resize)\n if (event?.sourceEvent) {\n const diff = Object.keys(transform).reduce((acc, prop) => {\n const propVal = transform[prop as keyof ZoomTransform] as number\n const initialPropVal = this._initialTransform[prop as keyof ZoomTransform] as number\n const dVal = Math.abs(propVal - initialPropVal)\n const scaledDVal = prop === 'k' ? 20 * dVal : dVal / 15\n acc += scaledDVal\n return acc\n }, 0)\n\n if (diff > config.layoutAutofitTolerance) this._isAutoFitDisabled = true\n else this._isAutoFitDisabled = false\n }\n\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .call(\n (nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomNodesThrottled : zoomNodes) as typeof zoomNodes,\n config,\n this._scale\n )\n\n this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .call(\n (nodes.length > config.zoomThrottledUpdateNodeThreshold ? zoomLinksThrottled : zoomLinks) as typeof zoomLinks,\n config,\n this._scale,\n this._getLinkArrowDefId\n )\n }\n\n private _onZoomStart (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config } = this\n const transform = t || event.transform\n this._scale = transform.k\n if (isFunction(config.onZoomStart)) config.onZoomStart(this._scale, config.zoomScaleExtent, event, transform)\n }\n\n private _onZoomEnd (t: ZoomTransform, event?: D3ZoomEvent<SVGGElement, unknown>): void {\n const { config } = this\n const transform = t || event.transform\n this._scale = transform.k\n if (isFunction(config.onZoomEnd)) config.onZoomEnd(this._scale, config.zoomScaleExtent, event, transform)\n }\n\n private _updateNodePosition (d: GraphNode<N, L>, x: number, y: number): void {\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Prevent the node from being dragged offscreen or outside its panel\n const panels = this._panels?.filter(p => p.nodes.includes(d._id)) ?? []\n const nodeSizeValue = getNodeSize(d, this.config.nodeSize, d._index)\n const maxY = min([(this._height - transform.y) / scale, ...panels.map(p => p._y + p._height)]) - nodeSizeValue / 2\n const maxX = min([(this._width - transform.x) / scale, ...panels.map(p => p._x + p._width)]) - nodeSizeValue / 2\n const minY = max([-transform.y / scale, ...panels.map(p => p._y)]) + nodeSizeValue / 2\n const minX = max([-transform.x / scale, ...panels.map(p => p._x)]) + nodeSizeValue / 2\n\n if (y < minY) y = minY\n else if (y > maxY) y = maxY\n if (x < minX) x = minX\n else if (x > maxX) x = maxX\n\n // Snap to Layout\n if (Math.sqrt(Math.pow(x - d.x, 2) + Math.pow(y - d.y, 2)) < 15) {\n x = d.x\n y = d.y\n }\n\n // Assign coordinates\n d._state.fx = x\n d._state.fy = y\n if (d._state.fx === d.x) delete d._state.fx\n if (d._state.fy === d.y) delete d._state.fy\n }\n\n private _onBrush (event: D3BrushEvent<SVGGElement>): void {\n if (!event.selection || !event.sourceEvent) return\n const { config } = this\n const transform = zoomTransform(this._graphGroup.node())\n const [xMin, yMin] = transform.invert(event.selection[0] as [number, number])\n const [xMax, yMax] = transform.invert(event.selection[1] as [number, number])\n\n // Update brushed nodes\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .each(n => {\n const x = getX(n)\n const y = getY(n)\n n._state.brushed = x >= xMin && x <= xMax && y >= yMin && y <= yMax\n })\n .classed(nodeSelectors.brushed, n => n._state.brushed)\n\n const brushedNodes = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.brushed}`)\n .call(updateNodesPartial, config, 0, this._scale)\n\n this._brush.classed('active', event.type !== 'end')\n config.onNodeSelectionBrush?.(brushedNodes.data(), event)\n }\n\n\n private _handleDrag (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n ): void {\n if (event.sourceEvent.shiftKey && d._state.brushed) {\n this._dragSelectedNodes(event)\n } else if (!event.sourceEvent.shiftKey) {\n switch (event.type) {\n case 'start':\n this._onDragStarted(d, event, nodeSelection)\n break\n case 'drag':\n this._onDragged(d, event)\n break\n case 'end':\n this._onDragEnded(d, event, nodeSelection)\n break\n }\n }\n }\n\n private _onDragStarted (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n ): void {\n const { config } = this\n this._isDragging = true\n d._state.isDragged = true\n nodeSelection.call(updateNodes, config, 0, this._scale)\n config.onNodeDragStart?.(d, event)\n }\n\n private _onDragged (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>\n ): void {\n const { config } = this\n const transform = zoomTransform(this.g.node())\n const scale = transform.k\n\n // Update node position\n const [x, y] = pointer(event, this._graphGroup.node())\n this._updateNodePosition(d, x, y)\n\n // Update affected DOM elements\n const nodeSelection = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n const nodeToUpdate = nodeSelection.filter((n: GraphNode<N, L>) => n._id === d._id)\n nodeToUpdate.call(updateNodes, config, 0, scale)\n\n const linkSelection = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n const linksToUpdate = linkSelection.filter((l: L) => {\n const source = l.source as GraphNode<N, L>\n const target = l.target as GraphNode<N, L>\n return source._id === d._id || target._id === d._id\n })\n linksToUpdate.call(updateLinks, config, 0, scale, this._getLinkArrowDefId, this._linkPathLengthMap)\n const linksToAnimate = linksToUpdate.filter(d => d._state.greyout)\n if (linksToAnimate.size()) animateLinkFlow(linksToAnimate, config, this._scale, this._linkPathLengthMap)\n\n config.onNodeDrag?.(d, event)\n }\n\n private _onDragEnded (\n d: GraphNode<N, L>,\n event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>,\n nodeSelection: Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n ): void {\n const { config } = this\n this._isDragging = false\n d._state.isDragged = false\n nodeSelection.call(updateNodes, config, 0, this._scale)\n config.onNodeDragEnd?.(d, event)\n }\n\n private _dragSelectedNodes (event: D3DragEvent<SVGGElement, GraphNode<N, L>, unknown>): void {\n const { config } = this\n const curr = pointer(event, this._graphGroup.node())\n\n const selectedNodes = smartTransition(\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.brushed}`)\n ) as Selection<SVGGElement, GraphNode<N, L>, SVGGElement, unknown>\n\n if (event.type === 'start') {\n this._groupDragInit = curr\n this._isDragging = true\n selectedNodes.each(n => {\n n.x = getX(n)\n n.y = getY(n)\n n._state.isDragged = true\n })\n } else if (event.type === 'drag') {\n const dx = curr[0] - this._groupDragInit[0]\n const dy = curr[1] - this._groupDragInit[1]\n\n selectedNodes.each(n => this._updateNodePosition(n, n.x + dx, n.y + dy))\n\n const connectedLinks = smartTransition(\n this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n .filter(l => l.source?._state?.isDragged || l.target?._state?.isDragged)\n ) as Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>\n\n connectedLinks.call(updateLinks, this.config, 0, this._scale, this._getLinkArrowDefId, this._linkPathLengthMap)\n } else {\n this._isDragging = false\n selectedNodes.each(n => { n._state.isDragged = false })\n }\n selectedNodes.call(updateNodes, config, 0, this._scale)\n this.config.onNodeSelectionDrag?.(selectedNodes.data(), event)\n }\n\n private _activateBrush (): void {\n this._brush.classed('active', true)\n this._nodesGroup.selectAll(`.${nodeSelectors.gNode}`)\n .classed(nodeSelectors.brushable, true)\n }\n\n private _clearBrush (): void {\n this._brush.classed('active', false).call(this._brushBehavior?.clear)\n\n this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n .classed(nodeSelectors.brushable, false)\n .classed(nodeSelectors.brushed, false)\n .each(n => { n._state.brushed = false })\n .call(updateNodesPartial, this.config, 0, this._scale)\n }\n\n private _shouldLayoutRecalculate (): boolean {\n const { prevConfig, config } = this\n if (prevConfig.layoutType !== config.layoutType) return true\n if (prevConfig.layoutNonConnectedAside !== config.layoutNonConnectedAside) return true\n\n if (prevConfig.layoutType === GraphLayoutType.Force) {\n const forceSettingsDiff = shallowDiff(prevConfig.forceLayoutSettings, config.forceLayoutSettings)\n if (Object.keys(forceSettingsDiff).length) return true\n }\n\n if (prevConfig.layoutType === GraphLayoutType.Dagre) {\n const dagreSettingsDiff = shallowDiff(prevConfig.dagreLayoutSettings, config.dagreLayoutSettings)\n if (Object.keys(dagreSettingsDiff).length) return true\n }\n\n if (prevConfig.layoutType === GraphLayoutType.Elk) {\n if (isPlainObject(prevConfig.layoutElkSettings) && isPlainObject(config.layoutElkSettings)) {\n // Do a deeper comparison if `config.layoutElkSettings` is an object\n const elkSettingsDiff = shallowDiff(\n prevConfig.layoutElkSettings as Record<string, string>,\n config.layoutElkSettings as Record<string, string>\n )\n return Boolean(Object.keys(elkSettingsDiff).length)\n } else {\n // Otherwise, do a simple `===` comparison\n return prevConfig.layoutElkSettings !== config.layoutElkSettings\n }\n }\n\n if (\n prevConfig.layoutType === GraphLayoutType.Parallel ||\n prevConfig.layoutType === GraphLayoutType.ParallelHorizontal ||\n prevConfig.layoutType === GraphLayoutType.Concentric\n ) {\n if (!isEqual(prevConfig.layoutGroupOrder, config.layoutGroupOrder)) return true\n if (prevConfig.layoutParallelNodesPerColumn !== config.layoutParallelNodesPerColumn) return true\n if (prevConfig.layoutParallelSortConnectionsByGroup !== config.layoutParallelSortConnectionsByGroup) return true\n }\n\n return false\n }\n\n private _getLinkArrowDefId (arrow: GraphLinkArrowStyle | undefined): string | null {\n return arrow ? `${this.uid}-${arrow}` : null\n }\n\n private _addSVGDefs (): void {\n // Clean up old defs\n this._defs.selectAll('*').remove()\n\n // Single Arrow\n this._defs.append('path').attr('d', getArrowPath())\n .attr('id', this._getLinkArrowDefId(GraphLinkArrowStyle.Single))\n\n // Double Arrow\n this._defs.append('path').attr('d', getDoubleArrowPath())\n .attr('id', this._getLinkArrowDefId(GraphLinkArrowStyle.Double))\n }\n\n public zoomIn (increment = 0.3): void {\n const scaleBy = 1 + increment\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleBy, scaleBy)\n }\n\n public zoomOut (increment = 0.3): void {\n const scaleBy = 1 - increment\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleBy, scaleBy)\n }\n\n public setZoom (zoomLevel: number): void {\n smartTransition(this.g, this.config.duration / 2)\n .call(this._zoomBehavior.scaleTo, zoomLevel)\n }\n\n public getZoom (): number {\n return zoomTransform(this.g.node()).k\n }\n\n public fitView (duration = this.config.duration, nodeIds?: (string | number)[]): void {\n this._layoutCalculationPromise?.then(() => {\n this._fit(duration, nodeIds)\n })\n }\n\n /** Enable automatic fitting to container if it was disabled due to previous zoom / pan interactions */\n public resetAutofitState (): void {\n this._isAutoFitDisabled = false\n }\n\n /** Get current coordinates of the nodes as an array of { id: string; x: number; y: number } objects */\n public getNodesCoordinates (): { id: string; x: number; y: number }[] {\n const { datamodel: { nodes } } = this\n return nodes.map(n => ({\n id: n._id,\n x: n.x,\n y: n.y,\n }))\n }\n\n /** Get node coordinates by id as { id: string; x: number; y: number } */\n public getNodeCoordinatesById (id: string): { id: string; x: number; y: number } | undefined {\n const { datamodel: { nodes } } = this\n const node = nodes.find(n => n._id === id)\n\n if (!node) {\n console.warn(`Unovis | Graph: Node ${id} not found`)\n return undefined\n } else {\n return {\n id: node._id,\n x: node.x,\n y: node.y,\n }\n }\n }\n\n /** Set the node state by id */\n public setNodeStateById (nodeId: string, state: GraphNode<N, L>['_state']): void {\n this.datamodel.setNodeStateById(nodeId, state)\n }\n\n /** Call a partial render to update the positions of the nodes and their links.\n * This can be useful when you've changed the node positions manually outside\n * of the component and want to update the graph.\n */\n public updateNodePositions (duration?: number): void {\n const { config } = this\n const animDuration = isNumber(duration) ? duration : config.duration\n\n const linkElements = this._linksGroup.selectAll<SVGGElement, GraphLink<N, L>>(`.${linkSelectors.gLink}`)\n updateLinkLines(linkElements, config, animDuration, this._scale, this._getLinkArrowDefId, this._linkPathLengthMap)\n\n const nodeElements = this._nodesGroup.selectAll<SVGGElement, GraphNode<N, L>>(`.${nodeSelectors.gNode}`)\n updateNodePositions(nodeElements, animDuration)\n }\n}\n"],"names":["generalSelectors.background","generalSelectors.graphGroup","generalSelectors.brush","brush","panelSelectors.panels","linkSelectors.links","nodeSelectors.nodes","nodeSelectors.gNode","nodeSelectors.gNodeExit","linkSelectors.gLink","linkSelectors.gLinkExit","panelSelectors.gPanel","nodeSelectors.brushed","nodeSelectors.brushable","generalSelectors.root","nodeSelectors.node","nodeSelectors.nodeGauge","nodeSelectors.sideLabelGroup","nodeSelectors.label","nodeSelectors.greyedOutNode","linkSelectors.link","linkSelectors.linkLabelGroup","linkSelectors.greyedOutLink","panelSelectors.panel","panelSelectors.panelSelection","panelSelectors.label","panelSelectors.labelText","panelSelectors.sideIconGroup","panelSelectors.sideIconShape","panelSelectors.sideIconSymbol","nodeSelectors"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAkDM,MAAO,KAGX,SAAQ,aAGP,CAAA;AA4FD,IAAA,WAAA,CAAa,MAAmC,EAAA;AAC9C,QAAA,KAAK,EAAE,CAAA;QAlEC,IAAc,CAAA,cAAA,GAAG,kBAA2D,CAAA;AAC/E,QAAA,IAAA,CAAA,MAAM,GAA+B,IAAI,CAAC,cAAc,CAAA;AAC/D,QAAA,IAAA,CAAA,SAAS,GAA2D,IAAI,cAAc,EAAE,CAAA;QAWhF,IAAc,CAAA,cAAA,GAAG,IAAI,CAAA;QAGrB,IAAwB,CAAA,wBAAA,GAAG,KAAK,CAAA;QAKhC,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAA;QAMxB,IAAkB,CAAA,kBAAA,GAAG,KAAK,CAAA;QAG1B,IAAW,CAAA,WAAA,GAAG,KAAK,CAAA;;AAKnB,QAAA,IAAA,CAAA,kBAAkB,GAAwB,IAAI,GAAG,EAAE,CAAA;AAE3D,QAAA,IAAA,CAAA,MAAM,GAAG;AACP,YAAA,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,GAAG;gBAC5B,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,aAAA;AACD,YAAA,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG;gBACtB,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3C,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,aAAA;AACD,YAAA,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG;gBACtB,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3C,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;AAC1C,aAAA;SACF,CAAA;AAgBC,QAAA,IAAI,MAAM;AAAE,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAElC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEA,UAA2B,CAAC,CAAA;QACvF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,UAA2B,CAAC,CAAA;QAChF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,KAAsB,CAAC,CAAA;AAEtE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,EAAwB;AAC9C,aAAA,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;AACxC,aAAA,EAAE,CAAC,MAAM,EAAE,CAAC,CAAoC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAClF,aAAA,EAAE,CAAC,OAAO,EAAE,CAAC,CAAoC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AACxF,aAAA,EAAE,CAAC,KAAK,EAAE,CAAC,CAAoC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;AAEvF,QAAA,IAAI,CAAC,cAAc,GAAGC,OAAK,EAAE;aAC1B,EAAE,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC/C,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;aAC/B,YAAY,CAAC,KAAK,CAAC,CAAA;QAEtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,MAAqB,CAAC,CAAA;QACrF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,KAAmB,CAAC,CAAA;QAClF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAEC,KAAmB,CAAC,CAAA;QAElF,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAE5C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAC7D;AAtCD,IAAA,IAAW,YAAY,GAAA;;AACrB,QAAA,OAAO,MAAA,IAAI,CAAC,cAAc,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,CAAC,CAAC,CAAA;KAChC;AAED,IAAA,IAAW,aAAa,GAAA;QACtB,OAAO,IAAI,CAAC,cAAc,CAAA;KAC3B;AAED,IAAA,IAAW,YAAY,GAAA;QACrB,OAAO,IAAI,CAAC,aAAa,CAAA;KAC1B;AA8BD,IAAA,OAAO,CAAE,IAA0B,EAAA;AACjC,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YAAE,OAAM;QAE/E,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,GAAG,IAAI,CAAA;AAC1B,QAAA,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAA;QACpC,IAAI,MAAM,CAAC,aAAa;AAAE,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;AACtD,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;QAE5B,IAAI,CAAC,WAAW,EAAE,CAAA;KACnB;AAED,IAAA,SAAS,CAAE,MAAkC,EAAA;AAC3C,QAAA,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;AACvB,QAAA,MAAM,6BAA6B,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAA;;QAGrE,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,IAAI,6BAA6B,CAAA;;;QAI9F,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,6BAA6B,CAAA;QAE9E,IAAI,IAAI,CAAC,gBAAgB;AAAE,YAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAA;AAC1D,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;KAC7B;AAED,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,MAAM,YAAY,GAAG,EAAE,CAAA;AACvB,QAAA,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;KAC5F;AAED,IAAA,OAAO,CAAE,cAAuB,EAAA;AAC9B,QAAA,MAAM,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QAC3G,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK;YAAE,OAAM;AAChD,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,cAAc,GAAG,QAAQ,CAAA;AAEzE,QAAA,IAAI,CAAC,eAAe;AACjB,aAAA,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAC1B,aAAA,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAC5B,aAAA,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;AAErB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,OAAO,KAAK,aAAa,EAAE;;AAE3F,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAA;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;AAC7B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,CAAA;AAChC,SAAA;;QAGD,IAAI,CAAC,YAAY,EAAE;YACjB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACjE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;;YAGrC,MAAM,CAAC,MAAM,CAAC;AACX,iBAAA,EAAE,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;AAC3E,iBAAA,EAAE,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;AAEzE,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;AACpD,SAAA;AAAM,aAAA;YACL,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAE9B,MAAM,CAAC,MAAM,CAAC;AACX,iBAAA,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC;AAChC,iBAAA,EAAE,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAA;;AAGjC,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAAE,IAAI,CAAC,WAAW,EAAE,CAAA;AACtD,SAAA;;QAGD,IAAI,IAAI,CAAC,wBAAwB,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;AACpE,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAA;;;AAIxD,YAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAK;;AACvC,gBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;AACpE,aAAC,CAAC,CAAA;AACH,SAAA;;;;QAKD,IAAI,CAAC,aAAa,CAAC,MAAM,CACvB,UAAU,CAAC,eAAe,CAAC;AACzB,cAAE,eAAe;AACjB,cAAE,CAAC,CAAe,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AAE1F,QAAA,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAK;;;;YAGvC,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE,OAAM;YAE9B,IAAI,CAAC,eAAe,EAAE,CAAA;;YAGtB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,CAAC,IAAI,EAAE,CAAA;AACX,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;AAC9B,aAAA;iBAAM,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;AAC5D,gBAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACnB,gBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;AAC9B,aAAA;;YAGD,IAAI,CAAC,2BAA2B,EAAE,CAAA;YAClC,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE;AAC7D,gBAAA,MAAM,WAAW,GAAG,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,eAAe,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;AAC/E,gBAAA,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAA;AACtE,gBAAA,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAA;AAC3C,aAAA;AAED,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;gBAC9B,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;AACzF,gBAAA,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAA;AAC1C,aAAA;;AAGD,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;AAC7B,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAA;;AAG7B,YAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,MAAM,aAAa,GAAG,EAAE,CAAA;AACxB,gBAAA,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAA;AAC7E,aAAA;;AAGD,YAAA,IAAI,WAAW;gBAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;;AACpC,gBAAA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;;;YAI9D,IAAI,CAAC,8BAA8B,EAAE,CAAA;YACrC,IAAI,CAAC,6BAA6B,EAAE,CAAA;;AAGpC,YAAA,CAAA,EAAA,GAAA,MAAA,IAAI,CAAC,MAAM,EAAC,gBAAgB,MAAG,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;AAC7J,YAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAA;AAC7B,SAAC,CAAC,CAAA;KACH;AAEO,IAAA,UAAU,CAAE,QAAgB,EAAA;AAClC,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;AAElC,QAAA,MAAM,KAAK,GAAsB,SAAS,CAAC,KAAK,CAAA;AAChD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW;aAChC,SAAS,CAA+B,CAAI,CAAA,EAAAC,KAAmB,SAASC,SAAuB,CAAA,CAAA,CAAG,CAAC;AACnG,aAAA,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAElC,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;AACnD,aAAA,IAAI,CAAC,OAAO,EAAED,KAAmB,CAAC;aAClC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAEnD,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;AAC1D,QAAA,MAAM,mBAAmB,GAAG,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AAExF,QAAA,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAA;AAE/C,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,EAAmB,CAAA;QACzD,cAAc;AACX,aAAA,OAAO,CAACC,SAAuB,EAAE,IAAI,CAAC;aACtC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;;QAGnD,MAAM,OAAO,GAAG,IAAI,CAAA;AACpB,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;YACvB,MAAM,aAAa,GAAG,IAAI,EAAgC;AACvD,iBAAA,EAAE,CAAC,gBAAgB,EAAE,UAAU,KAAK,EAAE,CAAC,EAAA;AACtC,gBAAA,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;AAC7C,aAAC,CAAC,CAAA;AACJ,YAAA,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;AACrC,SAAA;AAAM,aAAA;AACL,YAAA,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;AACnC,SAAA;KACF;AAEO,IAAA,UAAU,CAAE,QAAgB,EAAA;QAClC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;AAE7C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW;AAChC,aAAA,SAAS,CAA+B,CAAI,CAAA,EAAAC,KAAmB,EAAE,CAAC;AAClE,aAAA,IAAI,CAAC,KAAK,EAAE,CAAC,CAAkB,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QAErD,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;AACnD,aAAA,IAAI,CAAC,OAAO,EAAEA,KAAmB,CAAC;AAClC,aAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAEtC,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QAC1D,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAEnH,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,EAAmB,CAAA;QACzD,cAAc;AACX,aAAA,IAAI,CAAC,OAAO,EAAEC,SAAuB,CAAC;AACtC,aAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;KACvC;IAEO,WAAW,CACjB,mBAAmJ,EACnJ,QAAgB,EAAA;;AAEhB,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACvB,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,GAAG,CAAC,CAAC;AAC7C,aAAA,KAAK,CAAC,SAAS,EAAE,CAAA,CAAA,EAAA,GAAA,MAAM,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,IAAG,CAAC,GAAG,CAAC,CAAC,CAAA;QAElD,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;AAEzB,QAAA,MAAM,SAAS,GAAG,CAAE,mBAAsF,CAAC,QAAQ;AACjH,cAAG,mBAAsF,CAAC,SAAS,EAAE;cACnG,mBAAoF,CAAA;QAExF,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACpD,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACpD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAA;AACvD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY;AACjC,aAAA,SAAS,CAA0B,CAAI,CAAA,EAAAC,MAAqB,EAAE,CAAC;aAC/D,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAA;AAEhC,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,EAAoB,CAAA;QAC1D,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAEnD,MAAM,eAAe,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;AACnD,aAAA,IAAI,CAAC,OAAO,EAAEA,MAAqB,CAAC;AACpC,aAAA,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;QAChC,MAAM,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;AAE1D,QAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAA;KAC/C;IAEO,aAAa,CAAE,aAAuE,EAAE,QAAgB,EAAA;AAC9G,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEzB,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;KACnD;IAEa,gBAAgB,GAAA;;AAC5B,YAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;;AAGlC,YAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,MAAM,CAAC,UAAU,EAAE;AACjD,gBAAA,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;AAClC,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;AACrB,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA;AACtB,iBAAA;AACF,aAAA;YAED,QAAQ,MAAM,CAAC,UAAU;gBACvB,KAAK,eAAe,CAAC,aAAa;oBAChC,MAAK;gBACP,KAAK,eAAe,CAAC,QAAQ;AAC3B,oBAAA,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;oBACjE,MAAK;gBACP,KAAK,eAAe,CAAC,kBAAkB;AACrC,oBAAA,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;oBAC/E,MAAK;gBACP,KAAK,eAAe,CAAC,KAAK;oBACxB,MAAM,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;oBACtD,MAAK;gBACP,KAAK,eAAe,CAAC,KAAK;oBACxB,MAAM,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;oBACtD,MAAK;gBACP,KAAK,eAAe,CAAC,UAAU;AAC7B,oBAAA,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;oBACnE,MAAK;gBACP,KAAK,eAAe,CAAC,GAAG;oBACtB,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;oBACpD,MAAK;gBACP,KAAK,eAAe,CAAC,QAAQ,CAAC;AAC9B,gBAAA;AACE,oBAAA,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;oBACjE,MAAK;AACR,aAAA;;;YAID,IAAI,CAAC,eAAe,EAAE,CAAA;AAEtB,YAAA,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAA;AACrC,YAAA,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,UAA6B,CAAA;SAC/D,CAAA,CAAA;AAAA,KAAA;IAEO,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;QAElC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACxC,YAAA,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AAC5D,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAA;AAC9B,SAAA;KACF;AAEO,IAAA,IAAI,CAAE,QAAQ,GAAG,CAAC,EAAE,OAA6B,EAAA;QACvD,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;AACrC,QAAA,MAAM,YAAY,GAAG,CAAA,OAAO,aAAP,OAAO,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAP,OAAO,CAAE,MAAM,IAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAA;QACxF,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;AAClD,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAChD,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;KACxB;AAEO,IAAA,aAAa,CAAE,KAAwB,EAAA;QAC7C,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,MAAM,CAAA;AACjD,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAE/C,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACnD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAA;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAA;AAEtB,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACpG,YAAA,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;SACtG,CAAA;AACD,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACnG,YAAA,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;SACvG,CAAA;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,CAAC,EAAE;AACxF,YAAA,OAAO,CAAC,IAAI,CAAC,gJAAgJ,CAAC,CAAA;AAC9J,YAAA,OAAO,YAAY,CAAA;AACpB,SAAA;AAED,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,CAAA;AAC3D,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC,CAAA;QAE3D,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzF,QAAA,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAC7C,QAAA,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,YAAY,CAAA;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,OAAO,GAAG,YAAY,CAAA;QAC5D,MAAM,SAAS,GAAG,YAAY;AAC3B,aAAA,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;aACjC,KAAK,CAAC,YAAY,CAAC,CAAA;AAEtB,QAAA,OAAO,SAAS,CAAA;KACjB;AAGO,IAAA,sBAAsB,CAAE,aAA8C,EAAA;AAC5E,QAAA,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAA;;AAGlC,QAAA,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE;AAC/B,YAAA,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAA;AACzB,YAAA,IAAI,MAAM,CAAC,0BAA0B,KAAK,+BAA+B,CAAC,IAAI,EAAE;AAC9E,gBAAA,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;AACxB,aAAA;AACF,SAAA;;AAGD,QAAA,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE;AAC/B,YAAA,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAA;AACzB,YAAA,IAAI,MAAM,CAAC,0BAA0B,KAAK,+BAA+B,CAAC,IAAI,EAAE;AAC9E,gBAAA,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;AACxB,aAAA;AACF,SAAA;;QAGD,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAG;AAC7C,YAAA,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;AAChC,YAAA,IAAI,CAAC,aAAa;AAAE,gBAAA,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;AAE1E,YAAA,OAAO,aAAa,CAAA;AACtB,SAAC,CAAC,CAAA;;AAGF,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE;AACnC,YAAA,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;AACxB,YAAA,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA;AACzB,SAAA;;AAGD,QAAA,IAAI,MAAM,CAAC,0BAA0B,KAAK,+BAA+B,CAAC,mBAAmB,EAAE;AAC7F,YAAA,MAAM,cAAc,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AACpI,YAAA,cAAc,CAAC,OAAO,CAAC,CAAC,IAAG;gBACzB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA;gBAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA;AAC/B,gBAAA,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA;AAC1B,aAAC,CAAC,CAAA;AACH,SAAA;KACF;AAEO,IAAA,sBAAsB,CAAE,IAAqB,EAAA;QACnD,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;AAC5C,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;AAEhE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,MAAM,kBAAkB,GAAG,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAyB,CAAA;QAC1D,MAAM,kBAAkB,GAAG,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAJ,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,IAAI,CAAE,MAAyB,CAAA;;AAG1D,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,YAAA,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAA;AACzB,YAAA,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;YACvB,IAAI,CAAA,kBAAkB,KAAA,IAAA,IAAlB,kBAAkB,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAlB,kBAAkB,CAAE,GAAG,MAAK,CAAC,CAAC,GAAG,IAAI,CAAA,kBAAkB,KAAlB,IAAA,IAAA,kBAAkB,KAAlB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAkB,CAAE,GAAG,MAAK,CAAC,CAAC,GAAG,EAAE;AAC1E,gBAAA,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA;AAC5B,aAAA;AACH,SAAC,CAAC,CAAA;AAEF,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,YAAA,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;AACvB,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAyB,CAAA;AAC1C,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAyB,CAAA;AAC1C,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,MAAK,kBAAkB,KAAlB,IAAA,IAAA,kBAAkB,KAAlB,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,kBAAkB,CAAE,GAAG,CAAA,MAAM,MAAM,CAAC,GAAG,MAAK,kBAAkB,KAAA,IAAA,IAAlB,kBAAkB,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAlB,kBAAkB,CAAE,GAAG,CAAA,CAAC,EAAE;AACxF,gBAAA,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA;AAC7B,gBAAA,MAAM,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA;AAC7B,gBAAA,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA;AACzB,aAAA;AACH,SAAC,CAAC,CAAA;AAEF,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAA;AAC1B,SAAC,CAAC,CAAA;AAEF,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAA;KACtC;IAEO,2BAA2B,GAAA;QACjC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;AAC5C,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAA;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAA;;AAG9B,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAA;AACxB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;AACzB,SAAC,CAAC,CAAA;AAEF,QAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAG;AAChB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;AACvB,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAA;AAC1B,SAAC,CAAC,CAAA;KACH;IAEO,wBAAwB,GAAA;AAC9B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AAEvB,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAA,CAAA,EAAIF,KAAmB,CAAA,CAAE,CAAC,CAAA;QACxG,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AAE1D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAA,CAAA,EAAIF,KAAmB,CAAA,CAAE,CAAC,CAAA;AACxG,QAAA,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KAC5E;IAEO,kBAAkB,GAAA;QACxB,IAAI,CAAC,2BAA2B,EAAE,CAAA;QAClC,IAAI,CAAC,wBAAwB,EAAE,CAAA;KAChC;;AAGO,IAAA,YAAY,CAAE,CAAkB,EAAA;KACvC;;AAGO,IAAA,eAAe,CAAE,CAAkB,EAAA;QACzC,IAAI,CAAC,wBAAwB,EAAE,CAAA;KAChC;;AAGO,IAAA,gBAAgB,CAAE,CAAkB,EAAA;QAC1C,IAAI,CAAC,wBAAwB,EAAE,CAAA;KAChC;;AAGO,IAAA,YAAY,CAAE,CAAkB,EAAA;KACvC;AAEO,IAAA,gBAAgB,CAAE,CAAkB,EAAA;QAC1C,IAAI,IAAI,CAAC,WAAW;YAAE,OAAM;AAE5B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB;AAAE,YAAA,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;QAC7D,IAAI,CAAC,wBAAwB,EAAE,CAAA;KAChC;AAEO,IAAA,eAAe,CAAE,CAAkB,EAAA;QACzC,IAAI,IAAI,CAAC,WAAW;YAAE,OAAM;AAE5B,QAAA,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAA;QACvB,IAAI,CAAC,wBAAwB,EAAE,CAAA;KAChC;IAEO,qBAAqB,CAAE,OAAO,GAAG,CAAC,EAAA;AACxC,QAAA,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,oBAAoB,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;QAEjF,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;AACzE,QAAA,IAAI,CAAC,gBAAgB;YAAE,OAAM;QAE7B,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,oBAAoB,IAAI,oBAAoB,CAAA;AACjE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAA,CAAA,EAAIE,KAAmB,CAAA,CAAE,CAAC,CAAA;AAExG,QAAA,MAAM,cAAc,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAClE,QAAA,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAA,EAAE,CAAC,CAAA;AACvD,QAAA,eAAe,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;KACnF;IAEO,OAAO,CAAE,CAAgB,EAAE,KAAyC,EAAA;QAC1E,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;AAC7C,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAA;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAA;AACxD,QAAA,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;AAAE,YAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;;QAGnG,IAAI,CAAC,IAAI,CAAC,iBAAiB;AAAE,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAA;;;AAI/D,QAAA,IAAI,KAAK,KAAL,IAAA,IAAA,KAAK,uBAAL,KAAK,CAAE,WAAW,EAAE;AACtB,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,KAAI;AACvD,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,IAA2B,CAAW,CAAA;gBAChE,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAA2B,CAAW,CAAA;gBACpF,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,cAAc,CAAC,CAAA;AAC/C,gBAAA,MAAM,UAAU,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAA;gBACvD,GAAG,IAAI,UAAU,CAAA;AACjB,gBAAA,OAAO,GAAG,CAAA;aACX,EAAE,CAAC,CAAC,CAAA;AAEL,YAAA,IAAI,IAAI,GAAG,MAAM,CAAC,sBAAsB;AAAE,gBAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAA;;AACnE,gBAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAA;AACrC,SAAA;QAED,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,IAAIF,KAAmB,CAAA,CAAE,CAAC;aAChF,IAAI,EACF,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,gCAAgC,GAAG,kBAAkB,GAAG,SAAS,GACxF,MAAM,EACN,IAAI,CAAC,MAAM,CACZ,CAAA;QAEH,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,IAAIE,KAAmB,CAAA,CAAE,CAAC;AAChF,aAAA,IAAI,EACF,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,gCAAgC,GAAG,kBAAkB,GAAG,SAAS,GACxF,MAAM,EACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,kBAAkB,CACxB,CAAA;KACJ;IAEO,YAAY,CAAE,CAAgB,EAAE,KAAyC,EAAA;AAC/E,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAA;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;AACzB,QAAA,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC;AAAE,YAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;KAC9G;IAEO,UAAU,CAAE,CAAgB,EAAE,KAAyC,EAAA;AAC7E,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,MAAM,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAA;AACtC,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;AACzB,QAAA,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC;AAAE,YAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;KAC1G;AAEO,IAAA,mBAAmB,CAAE,CAAkB,EAAE,CAAS,EAAE,CAAS,EAAA;;QACnE,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAA;;QAGzB,MAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAI,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,EAAE,CAAA;AACvE,QAAA,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAA;AACpE,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAA;AAClH,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,IAAI,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAA;AAChH,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAA;AACtF,QAAA,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,CAAC,CAAA;QAEtF,IAAI,CAAC,GAAG,IAAI;YAAE,CAAC,GAAG,IAAI,CAAA;aACjB,IAAI,CAAC,GAAG,IAAI;YAAE,CAAC,GAAG,IAAI,CAAA;QAC3B,IAAI,CAAC,GAAG,IAAI;YAAE,CAAC,GAAG,IAAI,CAAA;aACjB,IAAI,CAAC,GAAG,IAAI;YAAE,CAAC,GAAG,IAAI,CAAA;;AAG3B,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE;AAC/D,YAAA,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACP,YAAA,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;AACR,SAAA;;AAGD,QAAA,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;AACf,QAAA,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;QACf,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;QAC3C,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE,CAAA;KAC5C;AAEO,IAAA,QAAQ,CAAE,KAAgC,EAAA;;QAChD,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW;YAAE,OAAM;AAClD,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACvB,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;AACxD,QAAA,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAqB,CAAC,CAAA;AAC7E,QAAA,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAqB,CAAC,CAAA;;QAG7E,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,IAAIF,KAAmB,CAAA,CAAE,CAAC;aAChF,IAAI,CAAC,CAAC,IAAG;AACR,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAA;AACrE,SAAC,CAAC;AACD,aAAA,OAAO,CAACK,OAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAExD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAI,CAAA,EAAAA,OAAqB,EAAE,CAAC;aACvG,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AAEnD,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAA;AACnD,QAAA,CAAA,EAAA,GAAA,MAAM,CAAC,oBAAoB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAA3B,MAAM,EAAwB,YAAY,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;KAC1D;AAGO,IAAA,WAAW,CACjB,CAAkB,EAClB,KAAyD,EACzD,aAA4E,EAAA;QAE5E,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE;AAClD,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAA;AAC/B,SAAA;AAAM,aAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE;YACtC,QAAQ,KAAK,CAAC,IAAI;AAChB,gBAAA,KAAK,OAAO;oBACV,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;oBAC5C,MAAK;AACP,gBAAA,KAAK,MAAM;AACT,oBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;oBACzB,MAAK;AACP,gBAAA,KAAK,KAAK;oBACR,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAA;oBAC1C,MAAK;AACR,aAAA;AACF,SAAA;KACF;AAEO,IAAA,cAAc,CACpB,CAAkB,EAClB,KAAyD,EACzD,aAA4E,EAAA;;AAE5E,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;AACvB,QAAA,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAA;AACzB,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACvD,CAAA,EAAA,GAAA,MAAM,CAAC,eAAe,MAAtB,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAM,EAAmB,CAAC,EAAE,KAAK,CAAC,CAAA;KACnC;IAEO,UAAU,CAChB,CAAkB,EAClB,KAAyD,EAAA;;AAEzD,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;QACvB,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAC9C,QAAA,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAA;;AAGzB,QAAA,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;QACtD,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;;AAGjC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAA,CAAA,EAAIL,KAAmB,CAAA,CAAE,CAAC,CAAA;AACzG,QAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAkB,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;QAClF,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;AAEhD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAA,CAAA,EAAIE,KAAmB,CAAA,CAAE,CAAC,CAAA;QACzG,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAI,KAAI;AAClD,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAyB,CAAA;AAC1C,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAyB,CAAA;AAC1C,YAAA,OAAO,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAA;AACrD,SAAC,CAAC,CAAA;AACF,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;AACnG,QAAA,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAClE,IAAI,cAAc,CAAC,IAAI,EAAE;AAAE,YAAA,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAExG,CAAA,EAAA,GAAA,MAAM,CAAC,UAAU,MAAjB,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAM,EAAc,CAAC,EAAE,KAAK,CAAC,CAAA;KAC9B;AAEO,IAAA,YAAY,CAClB,CAAkB,EAClB,KAAyD,EACzD,aAA4E,EAAA;;AAE5E,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;AACxB,QAAA,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAA;AAC1B,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACvD,CAAA,EAAA,GAAA,MAAM,CAAC,aAAa,MAApB,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAM,EAAiB,CAAC,EAAE,KAAK,CAAC,CAAA;KACjC;AAEO,IAAA,kBAAkB,CAAE,KAAyD,EAAA;;AACnF,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;AAEpD,QAAA,MAAM,aAAa,GAAG,eAAe,CACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,IAAIG,OAAqB,CAAE,CAAA,CAAC,CACrB,CAAA;AAElE,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;AACvB,YAAA,aAAa,CAAC,IAAI,CAAC,CAAC,IAAG;AACrB,gBAAA,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACb,gBAAA,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;AACb,gBAAA,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAA;AAC3B,aAAC,CAAC,CAAA;AACH,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE;AAChC,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;AAC3C,YAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YAE3C,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;AAExE,YAAA,MAAM,cAAc,GAAG,eAAe,CACpC,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAI,CAAA,EAAAH,KAAmB,EAAE,CAAC;AAChF,iBAAA,MAAM,CAAC,CAAC,IAAI,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA,CAAA,OAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,0CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,SAAS,MAAI,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAS,CAAA,CAAA,EAAA,CAAC,CACV,CAAA;YAElE,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAChH,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;AACxB,YAAA,aAAa,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAA,EAAE,CAAC,CAAA;AACxD,SAAA;AACD,QAAA,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;AACvD,QAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,EAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAG,aAAa,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;KAC/D;IAEO,cAAc,GAAA;QACpB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAIF,KAAmB,CAAA,CAAE,CAAC;AAClD,aAAA,OAAO,CAACM,SAAuB,EAAE,IAAI,CAAC,CAAA;KAC1C;IAEO,WAAW,GAAA;;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,MAAA,IAAI,CAAC,cAAc,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,CAAC,CAAA;QAErE,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,IAAIN,KAAmB,CAAA,CAAE,CAAC;AAChF,aAAA,OAAO,CAACM,SAAuB,EAAE,KAAK,CAAC;AACvC,aAAA,OAAO,CAACD,OAAqB,EAAE,KAAK,CAAC;AACrC,aAAA,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAA,EAAE,CAAC;AACvC,aAAA,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;KACzD;IAEO,wBAAwB,GAAA;AAC9B,QAAA,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACnC,QAAA,IAAI,UAAU,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;AAAE,YAAA,OAAO,IAAI,CAAA;AAC5D,QAAA,IAAI,UAAU,CAAC,uBAAuB,KAAK,MAAM,CAAC,uBAAuB;AAAE,YAAA,OAAO,IAAI,CAAA;AAEtF,QAAA,IAAI,UAAU,CAAC,UAAU,KAAK,eAAe,CAAC,KAAK,EAAE;AACnD,YAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjG,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI,CAAA;AACvD,SAAA;AAED,QAAA,IAAI,UAAU,CAAC,UAAU,KAAK,eAAe,CAAC,KAAK,EAAE;AACnD,YAAA,MAAM,iBAAiB,GAAG,WAAW,CAAC,UAAU,CAAC,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAA;AACjG,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM;AAAE,gBAAA,OAAO,IAAI,CAAA;AACvD,SAAA;AAED,QAAA,IAAI,UAAU,CAAC,UAAU,KAAK,eAAe,CAAC,GAAG,EAAE;AACjD,YAAA,IAAI,aAAa,CAAC,UAAU,CAAC,iBAAiB,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;;AAE1F,gBAAA,MAAM,eAAe,GAAG,WAAW,CACjC,UAAU,CAAC,iBAA2C,EACtD,MAAM,CAAC,iBAA2C,CACnD,CAAA;gBACD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAA;AACpD,aAAA;AAAM,iBAAA;;AAEL,gBAAA,OAAO,UAAU,CAAC,iBAAiB,KAAK,MAAM,CAAC,iBAAiB,CAAA;AACjE,aAAA;AACF,SAAA;AAED,QAAA,IACE,UAAU,CAAC,UAAU,KAAK,eAAe,CAAC,QAAQ;AAClD,YAAA,UAAU,CAAC,UAAU,KAAK,eAAe,CAAC,kBAAkB;AAC5D,YAAA,UAAU,CAAC,UAAU,KAAK,eAAe,CAAC,UAAU,EACpD;YACA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAA;AAC/E,YAAA,IAAI,UAAU,CAAC,4BAA4B,KAAK,MAAM,CAAC,4BAA4B;AAAE,gBAAA,OAAO,IAAI,CAAA;AAChG,YAAA,IAAI,UAAU,CAAC,oCAAoC,KAAK,MAAM,CAAC,oCAAoC;AAAE,gBAAA,OAAO,IAAI,CAAA;AACjH,SAAA;AAED,QAAA,OAAO,KAAK,CAAA;KACb;AAEO,IAAA,kBAAkB,CAAE,KAAsC,EAAA;AAChE,QAAA,OAAO,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,GAAG,IAAI,CAAA;KAC7C;IAEO,WAAW,GAAA;;QAEjB,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAA;;AAGlC,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,EAAE,CAAC;AAChD,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;;AAGlE,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,EAAE,CAAC;AACtD,aAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;KACnE;IAEM,MAAM,CAAE,SAAS,GAAG,GAAG,EAAA;AAC5B,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAA;AAC7B,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAC7C;IAEM,OAAO,CAAE,SAAS,GAAG,GAAG,EAAA;AAC7B,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAA;AAC7B,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;KAC7C;AAEM,IAAA,OAAO,CAAE,SAAiB,EAAA;AAC/B,QAAA,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;aAC9C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;KAC/C;IAEM,OAAO,GAAA;QACZ,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;KACtC;IAEM,OAAO,CAAE,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAA6B,EAAA;;AAC5E,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,yBAAyB,0CAAE,IAAI,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;AAC9B,SAAC,CAAC,CAAA;KACH;;IAGM,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAA;KAChC;;IAGM,mBAAmB,GAAA;QACxB,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;QACrC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK;YACrB,EAAE,EAAE,CAAC,CAAC,GAAG;YACT,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,CAAC,EAAE,CAAC,CAAC,CAAC;AACP,SAAA,CAAC,CAAC,CAAA;KACJ;;AAGM,IAAA,sBAAsB,CAAE,EAAU,EAAA;QACvC,MAAM,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,IAAI,CAAA;AACrC,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAA;QAE1C,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAA,UAAA,CAAY,CAAC,CAAA;AACpD,YAAA,OAAO,SAAS,CAAA;AACjB,SAAA;AAAM,aAAA;YACL,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,GAAG;gBACZ,CAAC,EAAE,IAAI,CAAC,CAAC;gBACT,CAAC,EAAE,IAAI,CAAC,CAAC;aACV,CAAA;AACF,SAAA;KACF;;IAGM,gBAAgB,CAAE,MAAc,EAAE,KAAgC,EAAA;QACvE,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;KAC/C;AAED;;;AAGE;AACK,IAAA,mBAAmB,CAAE,QAAiB,EAAA;AAC3C,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;AACvB,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;AAEpE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAA,CAAA,EAAIH,KAAmB,CAAA,CAAE,CAAC,CAAA;AACxG,QAAA,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAElH,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAA+B,CAAA,CAAA,EAAIF,KAAmB,CAAA,CAAE,CAAC,CAAA;AACxG,QAAA,mBAAmB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;KAChD;;AAj+BM,KAAA,CAAA,SAAS,GAAG;IACjB,IAAI,EAAEO,IAAqB;IAC3B,UAAU,EAAEb,UAA2B;IACvC,UAAU,EAAED,UAA2B;IACvC,IAAI,EAAEO,KAAmB;IACzB,SAAS,EAAEQ,IAAkB;IAC7B,SAAS,EAAEC,SAAuB;IAClC,aAAa,EAAEC,cAA4B;IAC3C,SAAS,EAAEC,KAAmB;IAC9B,UAAU,EAAEC,aAA2B;IACvC,IAAI,EAAEV,KAAmB;IACzB,QAAQ,EAAEW,IAAkB;IAC5B,SAAS,EAAEC,cAA4B;IACvC,UAAU,EAAEC,aAA2B;IACvC,KAAK,EAAEX,MAAqB;IAC5B,SAAS,EAAEY,KAAoB;IAC/B,cAAc,EAAEC,cAA6B;IAC7C,UAAU,EAAEC,OAAoB;IAChC,cAAc,EAAEC,SAAwB;IACxC,aAAa,EAAEC,aAA4B;IAC3C,kBAAkB,EAAEC,aAA4B;IAChD,mBAAmB,EAAEC,cAA6B;CACnD,CAAA;AAEM,KAAa,CAAA,aAAA,GAAGC,KAAa;;;;"}
@@ -5,8 +5,9 @@ import { GraphConfigInterface } from '../../config';
5
5
  export declare function createLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>): void;
6
6
  /** Updates the links partially according to their `_state` */
7
7
  export declare function updateLinksPartial<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number): void;
8
- export declare function updateLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale: number, getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string): void;
8
+ export declare function updateLinkLines<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale: number, getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string, linkPathLengthMap: Map<string, number>): Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>;
9
+ export declare function updateLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number, scale: number, getLinkArrowDefId: (arrow: GraphLinkArrowStyle | undefined) => string, linkPathLengthMap: Map<string, number>): void;
9
10
  export declare function removeLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, duration: number): void;
10
- export declare function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number): void;
11
+ export declare function animateLinkFlow<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number, linkPathLengthMap: Map<string, number>): void;
11
12
  export declare function zoomLinks<N extends GraphInputNode, L extends GraphInputLink>(selection: Selection<SVGGElement, GraphLink<N, L>, SVGGElement, unknown>, config: GraphConfigInterface<N, L>, scale: number): void;
12
13
  export declare const zoomLinksThrottled: import("throttle-debounce").throttle<typeof zoomLinks>;
@@ -1,7 +1,7 @@
1
1
  import { select } from 'd3-selection';
2
2
  import { range, sum } from 'd3-array';
3
3
  import toPx from 'to-px';
4
- import { getBoolean, getValue, ensureArray, getNumber, throttle } from '../../../../utils/data.js';
4
+ import { getBoolean, ensureArray, getValue, getNumber, throttle } from '../../../../utils/data.js';
5
5
  import { smartTransition } from '../../../../utils/d3.js';
6
6
  import { getCSSVariableValueInPixels } from '../../../../utils/misc.js';
7
7
  import { estimateStringPixelLength } from '../../../../utils/text.js';
@@ -48,13 +48,8 @@ function updateLinksPartial(selection, config, scale) {
48
48
  : d._state.hovered ? getLinkBandWidth(d, scale, config) + 10 : null);
49
49
  });
50
50
  }
51
- function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId) {
52
- const { linkFlowParticleSize, linkStyle, linkFlow, linkLabel, linkLabelShiftFromCenter } = config;
53
- if (!selection.size())
54
- return;
55
- selection
56
- .classed(linkDashed, d => getValue(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed);
57
- selection.each((d, i, elements) => {
51
+ function updateLinkLines(selection, config, duration, scale = 1, getLinkArrowDefId, linkPathLengthMap) {
52
+ return selection.each((d, i, elements) => {
58
53
  var _a;
59
54
  const element = elements[i];
60
55
  const linkGroup = select(element);
@@ -62,10 +57,9 @@ function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId)
62
57
  const linkBand$1 = linkGroup.select(`.${linkBand}`);
63
58
  const linkSupport$1 = linkGroup.select(`.${linkSupport}`);
64
59
  const linkArrow$1 = linkGroup.select(`.${linkArrow}`);
65
- const flowGroup$1 = linkGroup.select(`.${flowGroup}`);
66
60
  const linkColor = getLinkColor(d, config);
67
61
  const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing);
68
- const linkLabelData = ensureArray(getValue(d, linkLabel, d._indexGlobal));
62
+ const linkLabelData = ensureArray(getValue(d, config.linkLabel, d._indexGlobal));
69
63
  const x1 = getX(d.source);
70
64
  const y1 = getY(d.source);
71
65
  const x2 = getX(d.target);
@@ -76,6 +70,14 @@ function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId)
76
70
  const cp2x = x1 + (x2 - x1) * 0.5 * curvature;
77
71
  const cp2y = y1 + (y2 - y1) * 1.0 * curvature;
78
72
  const pathData = `M${x1},${y1} C${cp1x},${cp1y} ${cp2x},${cp2y} ${x2},${y2}`;
73
+ const linkPathElement = linkSupport$1.attr('d', pathData).node();
74
+ const cachedLinkPathLength = linkPathLengthMap.get(pathData);
75
+ const pathLength = cachedLinkPathLength !== null && cachedLinkPathLength !== void 0 ? cachedLinkPathLength : linkPathElement.getTotalLength();
76
+ if (!cachedLinkPathLength)
77
+ linkPathLengthMap.set(pathData, pathLength);
78
+ linkSupport$1
79
+ .style('stroke', linkColor)
80
+ .attr('transform', linkShiftTransform);
79
81
  link$1
80
82
  .attr('class', link)
81
83
  .style('stroke-width', getLinkStrokeWidth(d, scale, config))
@@ -90,14 +92,8 @@ function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId)
90
92
  .style('stroke', linkColor);
91
93
  smartTransition(linkBand$1, duration)
92
94
  .attr('d', pathData);
93
- linkSupport$1
94
- .style('stroke', linkColor)
95
- .attr('transform', linkShiftTransform)
96
- .attr('d', pathData);
97
95
  // Arrow
98
96
  const linkArrowStyle = getLinkArrowStyle(d, config);
99
- const linkPathElement = linkSupport$1.node();
100
- const pathLength = linkPathElement.getTotalLength();
101
97
  if (linkArrowStyle) {
102
98
  const arrowPos = pathLength * (linkLabelData.length ? 0.65 : 0.5);
103
99
  const p1 = linkPathElement.getPointAtLength(arrowPos);
@@ -114,6 +110,26 @@ function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId)
114
110
  else {
115
111
  linkArrow$1.attr('href', null);
116
112
  }
113
+ });
114
+ }
115
+ function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId, linkPathLengthMap) {
116
+ const { linkFlowParticleSize, linkStyle, linkFlow, linkLabel, linkLabelShiftFromCenter } = config;
117
+ if (!selection.size())
118
+ return;
119
+ selection
120
+ .classed(linkDashed, d => getValue(d, linkStyle, d._indexGlobal) === GraphLinkStyle.Dashed);
121
+ // Update line and arrow positions
122
+ updateLinkLines(selection, config, duration, scale, getLinkArrowDefId, linkPathLengthMap);
123
+ // Update labels and link flow (particles) groups
124
+ selection.each((d, i, elements) => {
125
+ const element = elements[i];
126
+ const linkGroup = select(element);
127
+ const flowGroup$1 = linkGroup.select(`.${flowGroup}`);
128
+ const linkSupport$1 = linkGroup.select(`.${linkSupport}`);
129
+ const linkPathElement = linkSupport$1.node();
130
+ const linkColor = getLinkColor(d, config);
131
+ const linkShiftTransform = getLinkShiftTransform(d, config.linkNeighborSpacing);
132
+ const linkLabelData = ensureArray(getValue(d, linkLabel, d._indexGlobal));
117
133
  // Particle Flow
118
134
  flowGroup$1
119
135
  .attr('transform', linkShiftTransform)
@@ -156,6 +172,9 @@ function updateLinks(selection, config, duration, scale = 1, getLinkArrowDefId)
156
172
  const linkLabelGroupsMerged = linkLabelGroups.merge(linkLabelGroupsEnter);
157
173
  const linkLabelMargin = 1;
158
174
  let linkLabelShiftCumulative = -sum(linkLabelsDataPrepared, d => d._backgroundWidth + linkLabelMargin) / 2; // Centering the labels
175
+ const cachedLinkPathLength = linkPathLengthMap.get(linkPathElement.getAttribute('d'));
176
+ const pathLength = cachedLinkPathLength !== null && cachedLinkPathLength !== void 0 ? cachedLinkPathLength : linkPathElement.getTotalLength();
177
+ const linkArrowStyle = getLinkArrowStyle(d, config);
159
178
  linkLabelGroupsMerged.each((linkLabelDatum, i, elements) => {
160
179
  var _a, _b;
161
180
  const element = elements[i];
@@ -229,7 +248,7 @@ function removeLinks(selection, config, duration) {
229
248
  .attr('opacity', 0)
230
249
  .remove();
231
250
  }
232
- function animateLinkFlow(selection, config, scale) {
251
+ function animateLinkFlow(selection, config, scale, linkPathLengthMap) {
233
252
  const { linkFlow } = config;
234
253
  if (scale < ZoomLevel.Level2)
235
254
  return;
@@ -238,7 +257,8 @@ function animateLinkFlow(selection, config, scale) {
238
257
  const linkGroup = select(element);
239
258
  const flowGroup$1 = linkGroup.select(`.${flowGroup}`);
240
259
  const linkPathElement = linkGroup.select(`.${linkSupport}`).node();
241
- const pathLength = linkPathElement.getTotalLength();
260
+ const cachedLinkPathLength = linkPathLengthMap.get(linkPathElement.getAttribute('d'));
261
+ const pathLength = cachedLinkPathLength !== null && cachedLinkPathLength !== void 0 ? cachedLinkPathLength : linkPathElement.getTotalLength();
242
262
  if (!getBoolean(d, linkFlow, d._indexGlobal) || !pathLength)
243
263
  return;
244
264
  const t = d._state.flowAnimTime;
@@ -267,5 +287,5 @@ function zoomLinks(selection, config, scale) {
267
287
  }
268
288
  const zoomLinksThrottled = throttle(zoomLinks, 500);
269
289
 
270
- export { animateLinkFlow, createLinks, removeLinks, updateLinks, updateLinksPartial, zoomLinks, zoomLinksThrottled };
290
+ export { animateLinkFlow, createLinks, removeLinks, updateLinkLines, updateLinks, updateLinksPartial, zoomLinks, zoomLinksThrottled };
271
291
  //# sourceMappingURL=index.js.map