@krainovsd/graph 0.8.1 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/lib/check-type.ts","../../src/lib/color-getter.ts","../../src/lib/color-to-rgb.ts","../../src/lib/extract-rgb.ts","../../src/lib/fade-rgb.ts","../../src/lib/rgb-animation-by-progress.ts","../../src/module/GraphCanvas/lib/settings/force-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/graph-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/link-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/listeners-getter.ts","../../src/module/GraphCanvas/lib/settings/node-settings-getter.ts","../../src/module/GraphCanvas/lib/utils/pointer-getter.ts","../../src/module/GraphCanvas/lib/utils/is-overlaps-node.ts","../../src/module/GraphCanvas/lib/utils/drag-place-coefficient-getter.ts","../../src/module/GraphCanvas/lib/utils/link-iteration-extractor.ts","../../src/module/GraphCanvas/lib/utils/node-by-pointer-getter.ts","../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts","../../src/module/GraphCanvas/lib/utils/draw-text.ts","../../src/module/GraphCanvas/lib/utils/calculate-link-position-by-radius.ts","../../src/module/GraphCanvas/lib/utils/animation-by-progress.ts","../../src/module/GraphCanvas/lib/utils/is-node-visible.ts","../../src/module/GraphCanvas/lib/utils/get-particle-position.ts","../../src/module/GraphCanvas/constants/settings.ts","../../src/lib/get-controls-info.ts","../../src/lib/draw-time.ts","../../src/module/GraphCanvas/GraphCanvas.ts"],"sourcesContent":["export function checkType<T>(value: unknown, condition: boolean): value is T {\n return condition;\n}\n","export function colorGetter() {\n const chosenColors: Record<string, string> = {};\n const colors = [\n \"#1f77b4\",\n \"#ff7f0e\",\n \"#2ca02c\",\n \"#d62728\",\n \"#9467bd\",\n \"#8c564b\",\n \"#e377c2\",\n \"#7f7f7f\",\n \"#bcbd22\",\n \"#17becf\",\n ];\n let cursor = 0;\n\n return function color(key: string) {\n if (chosenColors[key]) return chosenColors[key];\n\n chosenColors[key] = colors[cursor];\n cursor++;\n\n if (cursor >= colors.length) cursor = 0;\n\n return chosenColors[key];\n };\n}\n","import {\n COLOR_FORMATS,\n getColorFormat,\n transformHEXtoRGB,\n transformRGBAtoRGB,\n} from \"@krainovsd/js-helpers\";\n\nexport function colorToRgb(color: string) {\n const format = getColorFormat(color);\n\n switch (format) {\n case COLOR_FORMATS.Hex: {\n return transformHEXtoRGB(color);\n }\n case COLOR_FORMATS.Rgb: {\n return color;\n }\n case COLOR_FORMATS.Rgba: {\n return transformRGBAtoRGB(color);\n }\n default: {\n return null;\n }\n }\n}\n","export function extractRgb(color: string | null) {\n if (!color) return null;\n\n const code = color.match(/\\d+/g);\n\n if (!code) return null;\n\n return {\n r: +code[0],\n g: +code[1],\n b: +code[2],\n };\n}\n","import type { RGB } from \"@/module/GraphCanvas\";\n\nexport function fadeRgb(color: RGB, fade: number): RGB {\n const gray = (color.r + color.g + color.b) / 3;\n\n return {\n r: color.r * fade + gray * (1 - fade),\n g: color.g * fade + gray * (1 - fade),\n b: color.b * fade + gray * (1 - fade),\n };\n}\n","import type { RGB } from \"@/module/GraphCanvas\";\n\nexport function rgbAnimationByProgress(start: RGB, end: RGB, progress: number): RGB {\n return {\n r: start.r + (end.r - start.r) * progress,\n g: start.g + (end.g - start.g) * progress,\n b: start.b + (end.b - start.b) * progress,\n };\n}\n","import { FORCE_SETTINGS } from \"../../constants\";\nimport type { ForceSettingsInterface } from \"../../types\";\n\nexport function forceSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: ForceSettingsInterface<NodeData, LinkData> | undefined,\n prevSettings?: Required<ForceSettingsInterface<NodeData, LinkData>>,\n): Required<ForceSettingsInterface<NodeData, LinkData>> {\n return {\n ...(prevSettings ?? (FORCE_SETTINGS as Required<ForceSettingsInterface<NodeData, LinkData>>)),\n ...settings,\n };\n}\n","import { GRAPH_SETTINGS } from \"../../constants\";\nimport type { GraphSettingsInterface } from \"../../types\";\n\nexport function graphSettingsGetter<NodeData extends Record<string, unknown>>(\n settings: GraphSettingsInterface<NodeData> | undefined,\n prevSettings?: Required<GraphSettingsInterface<NodeData>>,\n): Required<GraphSettingsInterface<NodeData>> {\n return {\n ...(prevSettings ?? GRAPH_SETTINGS),\n ...settings,\n };\n}\n","import type { LinkInterface } from \"@/types\";\nimport { COMMON_SETTINGS, LINK_OPTIONS, LINK_SETTINGS } from \"../../constants\";\nimport type { GraphState, LinkOptionsInterface, LinkSettingsInterface } from \"../../types\";\n\nexport function linkSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: LinkSettingsInterface<NodeData, LinkData> | undefined,\n prevSettings?: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\">,\n): Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\"> {\n return { ...(prevSettings ?? LINK_SETTINGS), ...settings };\n}\n\nexport function linkOptionsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n _: LinkInterface<NodeData, LinkData>,\n __: number,\n ___: LinkInterface<NodeData, LinkData>[],\n state?: GraphState<NodeData, LinkData>,\n): Required<LinkOptionsInterface<NodeData, LinkData>> {\n return {\n ...LINK_OPTIONS,\n drawExtraLink: null,\n drawLink: null,\n color:\n state?.areaTransform && state?.areaTransform.k > COMMON_SETTINGS.linkColorZoomBorder\n ? COMMON_SETTINGS.linkColorZoomNear\n : COMMON_SETTINGS.linkColorZoomFar,\n arrowColor:\n state?.areaTransform && state?.areaTransform.k > COMMON_SETTINGS.linkColorZoomBorder\n ? COMMON_SETTINGS.linkColorZoomNear\n : COMMON_SETTINGS.linkColorZoomFar,\n width:\n state?.areaTransform && state?.areaTransform.k > COMMON_SETTINGS.linkWidthZoomBorder\n ? COMMON_SETTINGS.linkWidthZoomNear\n : COMMON_SETTINGS.linkWidthZoomFar,\n };\n}\n","import type { ListenersInterface } from \"../../types\";\n\nexport function listenersGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: ListenersInterface<NodeData, LinkData> | undefined,\n): ListenersInterface<NodeData, LinkData> {\n return settings ?? {};\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport { colorGetter } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport { COMMON_SETTINGS, NODE_OPTIONS, NODE_SETTINGS } from \"../../constants\";\nimport type { GraphState, NodeOptionsInterface, NodeSettingsInterface } from \"../../types\";\n\nexport function nodeSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: NodeSettingsInterface<NodeData, LinkData> | undefined,\n prevNodeSettings?: Required<Omit<NodeSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData, LinkData>, \"options\">,\n): Required<Omit<NodeSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData, LinkData>, \"options\"> {\n return {\n ...(prevNodeSettings ?? NODE_SETTINGS),\n idGetter: nodeIdGetter,\n ...settings,\n };\n}\n\nconst color = colorGetter();\n\nexport function nodeOptionsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n node: NodeInterface<NodeData>,\n _: number,\n __: NodeInterface<NodeData>[],\n state?: GraphState<NodeData, LinkData>,\n): Required<NodeOptionsInterface<NodeData, LinkData>> {\n const { textShiftY, textSize } = nodeTextSizeGetter(state?.areaTransform);\n\n return {\n ...NODE_OPTIONS,\n nodeDraw: null,\n nodeExtraDraw: null,\n textDraw: null,\n textExtraDraw: null,\n color: color(String(node.group ?? \"_DEFAULT\")),\n textVisible: Boolean(\n state?.areaTransform && state.areaTransform.k > COMMON_SETTINGS.nodeTextScaleMin,\n ),\n text: node.name ?? node.id.toString(),\n textShiftY,\n textSize,\n };\n}\n\nexport function nodeTextSizeGetter(transform: ZoomTransform | undefined) {\n let textSize: number = COMMON_SETTINGS.nodeTextSizeMax;\n let textShiftY: number = COMMON_SETTINGS.nodeTextShiftYMax;\n\n if (transform) {\n const scaleStepCoefficient =\n (COMMON_SETTINGS.nodeTextScaleMax - COMMON_SETTINGS.nodeTextScaleMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n const textStepCoefficient =\n (COMMON_SETTINGS.nodeTextSizeMax - COMMON_SETTINGS.nodeTextSizeMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n const shiftStepCoefficient =\n (COMMON_SETTINGS.nodeTextShiftYMax - COMMON_SETTINGS.nodeTextShiftYMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n\n if (transform.k >= COMMON_SETTINGS.nodeTextScaleMax) {\n textSize = COMMON_SETTINGS.nodeTextSizeMin;\n textShiftY = COMMON_SETTINGS.nodeTextShiftYMin;\n } else if (transform.k > COMMON_SETTINGS.nodeTextScaleMin) {\n const transformSteps =\n (transform.k - COMMON_SETTINGS.nodeTextScaleMin) / scaleStepCoefficient;\n\n textSize -= transformSteps * textStepCoefficient;\n textShiftY -= transformSteps * shiftStepCoefficient;\n }\n }\n\n return { textSize, textShiftY };\n}\n\nexport type NodeRadiusGetterOptions = {\n linkCount: number | undefined;\n radiusFlexible: boolean;\n radiusCoefficient: number;\n radiusFactor: number;\n radiusInitial: number;\n};\n\nexport function nodeRadiusGetter({\n radiusFlexible,\n radiusInitial,\n linkCount,\n radiusCoefficient,\n radiusFactor,\n}: NodeRadiusGetterOptions) {\n return (\n (radiusFlexible && linkCount ? linkCount / radiusCoefficient : 0) * radiusFactor + radiusInitial\n );\n}\n\nexport function nodeIdGetter<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n) {\n return node.id;\n}\n","import type { ZoomTransform } from \"d3-zoom\";\n\nexport function pointerGetter(\n mouseEvent: MouseEvent,\n areaRect: DOMRect,\n areaTransform: ZoomTransform,\n) {\n const px = (mouseEvent.clientX - areaRect.left - areaTransform.x) / areaTransform.k;\n const py = (mouseEvent.clientY - areaRect.top - areaTransform.y) / areaTransform.k;\n\n return [px, py];\n}\n","import type { NodeInterface } from \"@/types\";\n\nexport function isOverlapsNode<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n radius: number,\n pointerX: number,\n pointerY: number,\n) {\n if (node.x == undefined || node.y == undefined) return false;\n\n const isOverX = node.x - radius <= pointerX && pointerX <= node.x + radius;\n const isOverY = node.y - radius <= pointerY && pointerY <= node.y + radius;\n\n return isOverX && isOverY;\n}\n","import type { NodeInterface } from \"@/types\";\nimport { isOverlapsNode } from \"./is-overlaps-node\";\n\nexport function dragPlaceCoefficientGetter<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n pointerX: number,\n pointerY: number,\n radius: number,\n): number | undefined {\n if (!node.x || !node.y) return undefined;\n\n if (isOverlapsNode(node, radius, pointerX, pointerY)) return node.index;\n}\n","import { checkType } from \"@/lib\";\nimport type { LinkInterface } from \"@/types\";\nimport type { GraphState, LinkIterationPropsInterface } from \"../../types\";\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n state: GraphState<NodeData, LinkData>,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n state: GraphState<NodeData, LinkData>,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | LinkIterationPropsInterface<NodeData, LinkData, Required<Result>>\n | Required<Result>,\n): Required<Result>;\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n state: GraphState<NodeData, LinkData>,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | LinkIterationPropsInterface<NodeData, LinkData, Required<Result>>\n | Required<Result>\n | undefined,\n): Result {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(link, i, links, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(link, i, links, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n","import { greatest } from \"d3-array\";\nimport type { ZoomTransform } from \"d3-zoom\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphSettingsInterface } from \"../../types\";\nimport { nodeRadiusGetter } from \"../settings\";\nimport { isOverlapsNode } from \"./is-overlaps-node\";\nimport { pointerGetter } from \"./pointer-getter\";\n\nexport type NodeByPointerGetterOptions<NodeData extends Record<string, unknown>> = {\n mouseEvent: MouseEvent;\n areaRect: DOMRect | undefined;\n areaTransform: ZoomTransform;\n nodes: NodeInterface<NodeData>[];\n graphSettings: Required<GraphSettingsInterface<NodeData>>;\n};\n\nexport function nodeByPointerGetter<NodeData extends Record<string, unknown>>({\n areaRect,\n areaTransform,\n mouseEvent,\n nodes,\n graphSettings,\n}: NodeByPointerGetterOptions<NodeData>): NodeInterface<NodeData> | undefined {\n if (!areaRect) return undefined;\n\n const [pointerX, pointerY] = pointerGetter(mouseEvent, areaRect, areaTransform);\n\n return greatest(nodes, (node) => {\n const radius =\n node._radius ??\n nodeRadiusGetter({\n radiusFlexible: graphSettings.nodeRadiusFlexible,\n radiusInitial: graphSettings.nodeRadiusInitial,\n radiusCoefficient: graphSettings.nodeRadiusCoefficient,\n radiusFactor: graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n if (isOverlapsNode(node, radius, pointerX, pointerY)) return node.index;\n });\n}\n","import { checkType } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphState, NodeIterationPropsInterface } from \"../../types\";\n\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n): Required<Result>;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | NodeIterationPropsInterface<NodeData, LinkData, Result>\n | Result\n | undefined,\n) {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(node, i, nodes, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(node, i, nodes, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n","import type { CachedNodeTextInterface } from \"@/types\";\nimport type { TextStyleEnum } from \"../../types\";\n\nexport type DrawTextOptions = {\n id: string | number;\n x: number;\n y: number;\n text: string;\n textSize: number;\n textStyle: TextStyleEnum;\n textWeight: number;\n textFont: string;\n textColor: string;\n textGap: number;\n textAlign: CanvasTextAlign;\n context: CanvasRenderingContext2D;\n cachedNodeText: CachedNodeTextInterface;\n maxWidth?: number;\n};\n\nconst SPACE = \" \";\n\nexport function drawText({\n context,\n id,\n textAlign,\n textColor,\n textFont,\n textStyle,\n textGap,\n textWeight,\n textSize,\n text,\n x,\n y,\n cachedNodeText,\n maxWidth,\n}: DrawTextOptions) {\n context.font = `${textStyle} normal ${textWeight} ${textSize}px ${textFont}`;\n context.fillStyle = textColor;\n context.textAlign = textAlign;\n\n if (cachedNodeText[id] != undefined) {\n cachedNodeText[id].forEach((line, index) => {\n context.fillText(line, x, y + index * textSize + index * textGap);\n });\n\n return;\n }\n\n if (maxWidth == undefined || context.measureText(text).width <= maxWidth) {\n cachedNodeText[id] = [text];\n context.fillText(text, x, y);\n\n return;\n }\n\n const spaceWidth = context.measureText(\" \").width;\n const lines: string[] = [];\n let lineWidth = 0;\n let line = \"\";\n\n for (const word of text.split(\" \")) {\n const size = context.measureText(word).width;\n lineWidth += size;\n\n if (line === \"\") {\n line = word;\n\n continue;\n }\n if (lineWidth > maxWidth) {\n lineWidth = 0;\n lines.push(line);\n line = word;\n } else {\n lineWidth += spaceWidth;\n line += `${SPACE}${word}`;\n }\n }\n\n if (line !== \"\") lines.push(line);\n\n cachedNodeText[id] = lines;\n lines.forEach((line, index) => {\n context.fillText(line, x, y + index * textSize + index * textGap);\n });\n}\n","import type { LinkInterface } from \"@/types\";\n\nexport function calculateLinkPositionByRadius<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(link: LinkInterface<NodeData, LinkData>, arrowSize = 0) {\n const source = link.source;\n const target = link.target;\n\n if (typeof source != \"object\" || typeof target != \"object\") return null;\n\n const dx = (target.x ?? 0) - (source.x ?? 0);\n const dy = (target.y ?? 0) - (source.y ?? 0);\n const dr = Math.sqrt(dx * dx + dy * dy);\n const sourceRadius = source._radius ?? 0;\n const targetRadius = (target._radius ?? 0) + (arrowSize > 0 ? arrowSize * 0.85 : 0);\n\n return {\n x1: (source.x ?? 0) + (dx * sourceRadius) / dr,\n y1: (source.y ?? 0) + (dy * sourceRadius) / dr,\n x2: (target.x ?? 0) - (dx * targetRadius) / dr,\n y2: (target.y ?? 0) - (dy * targetRadius) / dr,\n };\n}\n","export function animationByProgress(initial: number, additional: number, progress: number) {\n const max = initial + additional;\n\n let current = initial + (max - initial) * progress;\n if (current > max) current = max;\n if (current < initial) current = initial;\n\n return current;\n}\n","import type { ZoomTransform } from \"d3-zoom\";\n\ntype IsNodeVisibleOptions = {\n x: number;\n y: number;\n radius: number;\n width: number;\n height: number;\n transform: ZoomTransform;\n};\n\nconst ADDITIONAL_VIEWPORT = 10;\n\nexport function isNodeVisible(opts: IsNodeVisibleOptions) {\n const left = -opts.transform.x / opts.transform.k;\n const right = (opts.width - opts.transform.x) / opts.transform.k;\n const top = -opts.transform.y / opts.transform.k;\n const bottom = (opts.height - opts.transform.y) / opts.transform.k;\n\n return (\n left < opts.x + opts.radius + ADDITIONAL_VIEWPORT &&\n opts.x - opts.radius - ADDITIONAL_VIEWPORT < right &&\n top < opts.y + opts.radius + ADDITIONAL_VIEWPORT &&\n opts.y - opts.radius - ADDITIONAL_VIEWPORT < bottom\n );\n}\n","import type { GraphParticle } from \"../../types\";\n\ntype GetParticlePositionOptions = {\n particle: GraphParticle;\n xStart: number;\n yStart: number;\n xEnd: number;\n yEnd: number;\n totalSteps: number;\n};\n\nexport function getParticlePosition(opts: GetParticlePositionOptions) {\n if (opts.particle.wait > 0) {\n opts.particle.wait--;\n\n return;\n }\n\n const remainingSteps = opts.totalSteps - opts.particle.step;\n const progress = opts.particle.step / opts.totalSteps;\n\n if (remainingSteps === 0) {\n opts.particle.x = opts.xEnd;\n opts.particle.y = opts.yEnd;\n opts.particle.step = 0;\n\n return;\n }\n\n const dx = opts.xEnd - opts.xStart;\n const dy = opts.yEnd - opts.yStart;\n\n const newX = opts.xStart + dx * progress;\n const newY = opts.yStart + dy * progress;\n\n opts.particle.x = newX;\n opts.particle.y = newY;\n opts.particle.step++;\n}\n","import type { LinkData, NodeData } from \"@/app/types\";\nimport { dragPlaceCoefficientGetter } from \"../lib\";\nimport type {\n ForceSettingsInterface,\n GraphSettingsInterface,\n LinkOptionsInterface,\n LinkSettingsInterface,\n NodeOptionsInterface,\n NodeSettingsInterface,\n} from \"../types\";\n\nexport const FORCE_SETTINGS: Required<\n ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>\n> = {\n centerPosition: {},\n centerStrength: 1,\n collideStrength: 0.1,\n collideAdditionalRadius: 4,\n collideIterations: 2,\n collideOffMax: { links: 0, nodes: 0 },\n collideOn: true,\n chargeStrength: -40,\n chargeDistanceMax: Infinity,\n chargeDistanceMin: 1,\n xForce: 0,\n xStrength: 0.1,\n yForce: 0,\n yStrength: 0.1,\n linkDistance: 30,\n linkIterations: 1,\n linkStrength: 1,\n collideRadius: null,\n};\n\nexport const GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>> = {\n zoomExtent: [0.3, 10] as [number, number],\n translateExtent: [[], []],\n translateExtentEnable: true,\n translateExtentCoefficient: [3, 3],\n highlightSizingAdditional: 0.5,\n highlightColorFadingMin: 0.15,\n highlightTextShiftXAdditional: 0,\n highlightTextShiftYAdditional: 2,\n highlightTextSizingAdditional: 1,\n highlightTextWeightAdditional: 0,\n highlightTextWidthAdditional: 10,\n highlightOnlyRoot: true,\n stickAfterDrag: false,\n highlightByHover: true,\n highlightLinkFadingMin: 0.21,\n highlightFadingMin: 0.21,\n highlightTextFadingMin: 0.21,\n highlightArrowFadingMin: 0.21,\n highlightDownStep: 0.2,\n highlightUpStep: 0.2,\n dragPlaceCoefficient: dragPlaceCoefficientGetter,\n nodeRadiusInitial: 4,\n nodeRadiusCoefficient: 5,\n nodeRadiusFactor: 1,\n nodeRadiusFlexible: true,\n zoomInitial: null,\n showDrawTime: true,\n showDrawTimeEveryTick: false,\n};\n\nexport const NODE_SETTINGS: Omit<\n Required<NodeSettingsInterface<NodeData, LinkData>>,\n \"options\" | \"idGetter\"\n> = {\n cache: false,\n};\n\nexport const NODE_OPTIONS: Omit<\n Required<NodeOptionsInterface<Record<string, unknown>, Record<string, unknown>>>,\n | \"color\"\n | \"text\"\n | \"textVisible\"\n | \"textSize\"\n | \"textShiftY\"\n | \"nodeDraw\"\n | \"nodeExtraDraw\"\n | \"textDraw\"\n | \"textExtraDraw\"\n> = {\n alpha: 1,\n textAlpha: 1,\n borderColor: \"#000000FF\",\n borderWidth: 0.1,\n textWidth: 20,\n textShiftX: 0,\n textFont: \"Arial\",\n textAlign: \"center\" as CanvasTextAlign,\n textColor: \"#333\",\n radius: 4,\n textStyle: \"normal\",\n textWeight: 500,\n textGap: 1,\n highlightFading: true,\n highlightColor: false,\n highlightSizing: true,\n highlightTextFading: true,\n highlightTextSizing: true,\n};\n\nexport const LINK_SETTINGS: Omit<Required<LinkSettingsInterface<NodeData, LinkData>>, \"options\"> = {\n cache: false,\n particles: true,\n};\n\nexport const LINK_OPTIONS: Omit<\n Required<LinkOptionsInterface<Record<string, unknown>, Record<string, unknown>>>,\n \"color\" | \"width\" | \"drawLink\" | \"drawExtraLink\" | \"arrowColor\"\n> = {\n alpha: 1,\n highlightFading: true,\n pretty: true,\n arrow: true,\n arrowAlpha: 1,\n arrowSize: 2,\n arrowHighlightFading: true,\n arrowReverseAppear: true,\n particleAlpha: 1,\n particleColor: \"#000000FF\",\n particleCount: 2,\n particleRadius: 0.5,\n particleSteps: 60,\n};\n\nexport const COMMON_SETTINGS = {\n linkColorZoomFar: \"#999\",\n linkColorZoomNear: \"#000000FF\",\n linkWidthZoomFar: 1,\n linkWidthZoomNear: 0.1,\n linkWidthZoomBorder: 1,\n linkColorZoomBorder: 1,\n nodeTextScaleMin: 1.5,\n nodeTextScaleMax: 20,\n nodeTextSizeMin: 1.5,\n nodeTextSizeMax: 3.5,\n nodeTextShiftYMin: 2.5,\n nodeTextShiftYMax: 4,\n nodeTextChangeStepCount: 200,\n};\n","import {\n FORCE_SETTINGS,\n GRAPH_SETTINGS,\n LINK_OPTIONS,\n NODE_OPTIONS,\n} from \"@/module/GraphCanvas/constants\";\nimport type {\n ForceSettingsInterface,\n GraphSettingsInterface,\n LinkOptionsInterface,\n NodeOptionsInterface,\n} from \"../module/GraphCanvas\";\nimport type { GraphSettingsInputInterface } from \"../types/controls\";\n\nexport function getForceControls<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(keys?: (keyof ForceSettingsInterface<NodeData, LinkData>)[]) {\n const FORCE_CONTROLS: GraphSettingsInputInterface<\n keyof ForceSettingsInterface<NodeData, LinkData>\n >[] = [\n {\n id: \"centerStrength\",\n initialValue: FORCE_SETTINGS.centerStrength,\n label: \"Граница центра\",\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n },\n {\n id: \"collideStrength\",\n initialValue: FORCE_SETTINGS.collideStrength,\n label: \"Сила отталкивания\",\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n },\n {\n id: \"collideAdditionalRadius\",\n initialValue: FORCE_SETTINGS.collideAdditionalRadius,\n label: \"Радиус отталкивания\",\n max: 300,\n min: 0,\n step: 0.1,\n type: \"range\",\n },\n {\n id: \"collideIterations\",\n initialValue: FORCE_SETTINGS.collideIterations,\n label: \"Итерации отталкивания\",\n max: 10,\n min: 0,\n step: 1,\n type: \"range\",\n },\n {\n id: \"chargeStrength\",\n initialValue:\n typeof FORCE_SETTINGS.chargeStrength === \"number\" ? FORCE_SETTINGS.chargeStrength : 0,\n label: \"Гравитация\",\n max: 0,\n min: -300,\n step: 0.1,\n type: \"range\",\n },\n {\n type: \"range\",\n id: \"xForce\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Граница X\",\n initialValue: typeof FORCE_SETTINGS.xForce === \"number\" ? FORCE_SETTINGS.xForce : 0,\n },\n {\n type: \"range\",\n id: \"yForce\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Граница Y\",\n initialValue: typeof FORCE_SETTINGS.yForce === \"number\" ? FORCE_SETTINGS.yForce : 0,\n },\n {\n type: \"range\",\n id: \"xStrength\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Гравитация X\",\n initialValue: typeof FORCE_SETTINGS.xStrength === \"number\" ? FORCE_SETTINGS.xStrength : 0,\n },\n {\n type: \"range\",\n id: \"yStrength\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Гравитация Y\",\n initialValue: typeof FORCE_SETTINGS.yStrength === \"number\" ? FORCE_SETTINGS.yStrength : 0,\n },\n {\n type: \"range\",\n id: \"linkStrength\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Натяжение связей\",\n initialValue:\n typeof FORCE_SETTINGS.linkStrength === \"number\" ? FORCE_SETTINGS.linkStrength : 0,\n },\n {\n type: \"range\",\n id: \"linkDistance\",\n min: 0,\n max: 300,\n step: 0.1,\n label: \"Расстояние связей\",\n initialValue:\n typeof FORCE_SETTINGS.linkDistance === \"number\" ? FORCE_SETTINGS.linkDistance : 30,\n },\n {\n id: \"collideOn\",\n type: \"checkbox\",\n initialValue: FORCE_SETTINGS.collideOn,\n label: \"Отталкивание\",\n },\n ];\n\n return keys ? FORCE_CONTROLS.filter((control) => keys.includes(control.id)) : FORCE_CONTROLS;\n}\n\nexport function getGraphControls<NodeData extends Record<string, unknown>>(\n keys?: (keyof GraphSettingsInterface<NodeData>)[],\n) {\n const GRAPH_CONTROLS: GraphSettingsInputInterface<keyof GraphSettingsInterface<NodeData>>[] = [\n {\n id: \"highlightSizingAdditional\",\n initialValue: GRAPH_SETTINGS.highlightSizingAdditional,\n max: 10,\n min: 0.1,\n step: 0.01,\n type: \"range\",\n label: \"Дополнительный размер при анимации\",\n },\n {\n id: \"highlightColorFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightColorFadingMin,\n max: 1,\n min: 0.01,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания цвета\",\n },\n {\n id: \"highlightTextShiftXAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextShiftXAdditional,\n max: 50,\n min: 0,\n step: 0.1,\n type: \"range\",\n label: \"Смещение текста по X при анимации\",\n },\n {\n id: \"highlightTextShiftYAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextShiftYAdditional,\n max: 50,\n min: 0,\n step: 0.1,\n type: \"range\",\n label: \"Смещение текста по Y при анимации\",\n },\n {\n id: \"highlightTextSizingAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextSizingAdditional,\n max: 10,\n min: 0.1,\n step: 0.1,\n type: \"range\",\n label: \"Увеличение текста при анимации\",\n },\n {\n id: \"highlightTextWeightAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextWeightAdditional,\n max: 1000,\n min: 0,\n step: 100,\n type: \"range\",\n label: \"Увеличение жирности текста при анимации\",\n },\n {\n id: \"highlightTextWidthAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextWidthAdditional,\n max: 100,\n min: 0,\n step: 0.1,\n type: \"range\",\n label: \"Увеличение ширины текста при анимации\",\n },\n {\n id: \"highlightTextFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightTextFadingMin,\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания текста при анимации\",\n },\n {\n id: \"highlightLinkFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightLinkFadingMin,\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания связи при анимации\",\n },\n {\n id: \"highlightFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightFadingMin,\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания ноды при анимации\",\n },\n {\n id: \"highlightArrowFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightArrowFadingMin,\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания стрелки при анимации\",\n },\n {\n id: \"highlightDownStep\",\n initialValue: GRAPH_SETTINGS.highlightDownStep,\n max: 1,\n min: 0.01,\n step: 0.01,\n type: \"range\",\n label: \"Скорость отмены анимации\",\n },\n {\n id: \"highlightUpStep\",\n initialValue: GRAPH_SETTINGS.highlightUpStep,\n max: 1,\n min: 0.01,\n step: 0.01,\n type: \"range\",\n label: \"Скорость применения анимации\",\n },\n {\n id: \"nodeRadiusInitial\",\n initialValue: GRAPH_SETTINGS.nodeRadiusInitial,\n max: 50,\n min: 0.1,\n step: 0.1,\n type: \"range\",\n label: \"Изначальный радиус ноды\",\n },\n {\n id: \"nodeRadiusCoefficient\",\n initialValue: GRAPH_SETTINGS.nodeRadiusCoefficient,\n max: 100,\n min: 0.1,\n step: 0.1,\n type: \"range\",\n label: \"Количество связей для увеличения радиуса\",\n },\n {\n id: \"nodeRadiusFactor\",\n initialValue: GRAPH_SETTINGS.nodeRadiusFactor,\n max: 50,\n min: 0.1,\n step: 0.1,\n type: \"range\",\n label: \"Коэффициент увеличения радиуса\",\n },\n {\n id: \"highlightOnlyRoot\",\n type: \"checkbox\",\n initialValue: GRAPH_SETTINGS.highlightOnlyRoot,\n label: \"Дополнительная анимация только главное цели\",\n },\n {\n id: \"stickAfterDrag\",\n type: \"checkbox\",\n initialValue: GRAPH_SETTINGS.stickAfterDrag,\n label: \"Фиксировании ноды после перетаскивания\",\n },\n {\n id: \"highlightByHover\",\n type: \"checkbox\",\n initialValue: GRAPH_SETTINGS.highlightByHover,\n label: \"Анимации при наведении\",\n },\n {\n id: \"nodeRadiusFlexible\",\n type: \"checkbox\",\n initialValue: GRAPH_SETTINGS.nodeRadiusFlexible,\n label: \"Гибкий радиус ноды\",\n },\n ];\n\n return keys ? GRAPH_CONTROLS.filter((control) => keys.includes(control.id)) : GRAPH_CONTROLS;\n}\n\nexport function getNodeControls<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(keys?: (keyof NodeOptionsInterface<NodeData, LinkData>)[]) {\n const NODE_CONTROLS: GraphSettingsInputInterface<\n keyof NodeOptionsInterface<NodeData, LinkData>\n >[] = [\n {\n id: \"alpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность\",\n initialValue: NODE_OPTIONS.alpha,\n },\n\n {\n id: \"radius\",\n type: \"range\",\n max: 50,\n min: 1,\n step: 1,\n label: \"Радиус\",\n initialValue: NODE_OPTIONS.radius,\n },\n {\n id: \"borderWidth\",\n type: \"range\",\n max: 5,\n min: 0,\n step: 0.1,\n label: \"Толщина границы\",\n initialValue: NODE_OPTIONS.borderWidth,\n },\n {\n id: \"borderColor\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет границы\",\n },\n {\n id: \"color\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет\",\n },\n {\n id: \"textAlpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность текста\",\n initialValue: NODE_OPTIONS.textAlpha,\n },\n {\n id: \"textWidth\",\n type: \"range\",\n max: 200,\n min: 5,\n step: 1,\n label: \"Ширина текста\",\n initialValue: NODE_OPTIONS.textWidth,\n },\n {\n id: \"textShiftX\",\n type: \"range\",\n max: 100,\n min: 0,\n step: 0.1,\n label: \"Смещение X текста\",\n initialValue: NODE_OPTIONS.textShiftX,\n },\n {\n id: \"textShiftY\",\n type: \"range\",\n max: 100,\n min: 0,\n step: 0.1,\n label: \"Смещение Y текста\",\n initialValue: 4,\n },\n {\n id: \"textWeight\",\n type: \"range\",\n max: 1000,\n min: 100,\n step: 100,\n label: \"Жирность текста\",\n initialValue: NODE_OPTIONS.textWeight,\n },\n {\n id: \"textGap\",\n type: \"range\",\n max: 30,\n min: 0,\n step: 0.1,\n label: \"Расстояние между строками\",\n initialValue: NODE_OPTIONS.textGap,\n },\n {\n id: \"highlightFading\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightFading,\n label: \"Анимация затухания\",\n },\n {\n id: \"highlightColor\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightColor,\n label: \"Анимация затухания цвета\",\n },\n {\n id: \"highlightSizing\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightSizing,\n label: \"Анимация размера\",\n },\n {\n id: \"highlightTextFading\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightTextFading,\n label: \"Анимация затухания текста\",\n },\n {\n id: \"highlightTextSizing\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightTextSizing,\n label: \"Анимация размера текста\",\n },\n ];\n\n return keys ? NODE_CONTROLS.filter((control) => keys.includes(control.id)) : NODE_CONTROLS;\n}\n\nexport function getLinkControls<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(keys?: (keyof LinkOptionsInterface<NodeData, LinkData>)[]) {\n const LINK_CONTROLS: GraphSettingsInputInterface<\n keyof LinkOptionsInterface<NodeData, LinkData>\n >[] = [\n {\n id: \"alpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность\",\n initialValue: LINK_OPTIONS.alpha,\n },\n {\n id: \"width\",\n type: \"range\",\n max: 10,\n min: 0.1,\n step: 0.1,\n label: \"Толщина\",\n initialValue: 0.1,\n },\n {\n id: \"arrowAlpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность стрелки\",\n initialValue: LINK_OPTIONS.arrowAlpha,\n },\n {\n id: \"arrowSize\",\n type: \"range\",\n max: 10,\n min: 0.1,\n step: 0.1,\n label: \"Размер стрелки\",\n initialValue: LINK_OPTIONS.arrowSize,\n },\n {\n id: \"particleAlpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность частиц\",\n initialValue: LINK_OPTIONS.particleAlpha,\n },\n {\n id: \"particleRadius\",\n type: \"range\",\n max: 10,\n min: 0.1,\n step: 0.1,\n label: \"Радиус частиц\",\n initialValue: LINK_OPTIONS.particleRadius,\n },\n {\n id: \"particleCount\",\n type: \"range\",\n max: 20,\n min: 1,\n step: 1,\n label: \"Количество частиц\",\n initialValue: LINK_OPTIONS.particleCount,\n },\n {\n id: \"particleSteps\",\n type: \"range\",\n max: 200,\n min: 1,\n step: 1,\n label: \"Количество кадров у частиц\",\n initialValue: LINK_OPTIONS.particleSteps,\n },\n {\n id: \"color\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет\",\n },\n {\n id: \"arrowColor\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет стрелки\",\n },\n {\n id: \"particleColor\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет частиц\",\n },\n {\n id: \"highlightFading\",\n type: \"checkbox\",\n label: \"Анимация Затухания\",\n initialValue: LINK_OPTIONS.highlightFading,\n },\n {\n id: \"pretty\",\n type: \"checkbox\",\n label: \"Обсчет соединения\",\n initialValue: LINK_OPTIONS.pretty,\n },\n {\n id: \"arrow\",\n type: \"checkbox\",\n label: \"Стрелка\",\n initialValue: LINK_OPTIONS.arrow,\n },\n {\n id: \"arrowHighlightFading\",\n type: \"checkbox\",\n label: \"Анимация затухания стрелки\",\n initialValue: LINK_OPTIONS.arrowHighlightFading,\n },\n {\n id: \"arrowReverseAppear\",\n type: \"checkbox\",\n label: \"Появление стрелки при анимации\",\n initialValue: LINK_OPTIONS.arrowReverseAppear,\n },\n ];\n\n return keys ? LINK_CONTROLS.filter((control) => keys.includes(control.id)) : LINK_CONTROLS;\n}\n","let countTime = 0;\nlet countOperation = 0;\n\nexport function setDrawTime(cb: () => void, showEveryTick: boolean) {\n return () => {\n const start = performance.now();\n cb();\n const end = performance.now();\n const result = end - start;\n\n countTime += result;\n countOperation++;\n\n if (showEveryTick) {\n const average = countTime / countOperation;\n // eslint-disable-next-line no-console\n console.log(\"average draw: \", average, \"current draw: \", result);\n }\n };\n}\n\nexport function getDrawTime() {\n const average = countTime / countOperation;\n\n // eslint-disable-next-line no-console\n console.log(\"average draw: \", average);\n}\n","import { isArray, isBoolean } from \"@krainovsd/js-helpers\";\nimport { greatest } from \"d3-array\";\nimport { drag as d3Drag } from \"d3-drag\";\nimport {\n type ForceLink,\n forceCenter,\n forceCollide,\n forceLink,\n forceManyBody,\n forceSimulation,\n forceX,\n forceY,\n} from \"d3-force\";\nimport { create as d3Create, select as d3Select } from \"d3-selection\";\nimport { ZoomTransform, zoom, zoomIdentity } from \"d3-zoom\";\nimport {\n colorToRgb,\n extractRgb,\n fadeRgb,\n getDrawTime,\n rgbAnimationByProgress,\n setDrawTime,\n} from \"@/lib\";\nimport type { LinkInterface } from \"@/types/links\";\nimport type { CachedNodeTextInterface, NodeInterface } from \"@/types/nodes\";\nimport {\n animationByProgress,\n calculateLinkPositionByRadius,\n drawText,\n forceSettingsGetter,\n getParticlePosition,\n graphSettingsGetter,\n isNodeVisible,\n linkIterationExtractor,\n linkOptionsGetter,\n linkSettingsGetter,\n listenersGetter,\n nodeByPointerGetter,\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSettingsGetter,\n pointerGetter,\n} from \"./lib\";\nimport type {\n DragEventInterface,\n ForceSettingsInterface,\n GraphCanvasInterface,\n GraphCanvasSimulation,\n GraphParticle,\n GraphSettingsInterface,\n GraphState,\n LinkOptionsInterface,\n LinkSettingsInterface,\n ListenersInterface,\n NodeOptionsInterface,\n NodeSettingsInterface,\n ZoomEventInterface,\n} from \"./types\";\n\nexport class GraphCanvas<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> {\n /** initial data */\n\n private nodes: NodeInterface<NodeData>[];\n\n private links: LinkInterface<NodeData, LinkData>[];\n\n private particles: Record<string, GraphParticle[]> = {};\n\n private width: number;\n\n private height: number;\n\n private root: HTMLElement;\n\n private container: HTMLDivElement | undefined | null;\n\n private area: HTMLCanvasElement | null | undefined;\n\n /** settings */\n\n private graphSettings: Required<GraphSettingsInterface<NodeData>>;\n\n private forceSettings: Required<ForceSettingsInterface<NodeData, LinkData>>;\n\n private nodeSettings: Required<Omit<NodeSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData, LinkData>, \"options\">;\n\n private linkSettings: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\">;\n\n private listeners: ListenersInterface<NodeData, LinkData>;\n\n /** service */\n\n private context: CanvasRenderingContext2D | null | undefined;\n\n private simulation: GraphCanvasSimulation<NodeData, LinkData> | undefined;\n\n private areaTransform: ZoomTransform = zoomIdentity;\n\n private areaRect: DOMRect | undefined;\n\n private draw: (this: GraphCanvas<NodeData, LinkData>) => void;\n\n private eventAbortController: AbortController;\n\n private cachedNodeText: CachedNodeTextInterface = {};\n\n private linkOptionsCache: Record<string, Required<LinkOptionsInterface<NodeData, LinkData>>> = {};\n\n private nodeOptionsCache: Record<string, Required<NodeOptionsInterface<NodeData, LinkData>>> = {};\n\n private isDragging: boolean = false;\n\n private highlightedNode: NodeInterface<NodeData> | null = null;\n\n private highlightedNeighbors: Set<string | number> | null = null;\n\n private highlightProgress: number = 1;\n\n private highlightWorking: boolean = false;\n\n private highlightDrawing: boolean = false;\n\n private get simulationWorking() {\n const simulationAlpha = this.simulation?.alpha?.() ?? 0;\n const simulationAlphaMin = this.simulation?.alphaMin?.() ?? 0;\n const simulationAlphaDecay = this.simulation?.alphaDecay?.() ?? 0;\n const force = (simulationAlpha - simulationAlphaMin) / simulationAlphaDecay;\n\n return force > 0;\n }\n\n private get state(): GraphState<NodeData, LinkData> {\n return {\n areaTransform: this.areaTransform,\n cachedNodeText: this.cachedNodeText,\n context: this.context,\n eventAbortController: this.eventAbortController,\n highlightProgress: this.highlightProgress,\n highlightDrawing: this.highlightDrawing,\n highlightedNeighbors: this.highlightedNeighbors,\n highlightedNode: this.highlightedNode,\n highlightWorking: this.highlightWorking,\n isDragging: this.isDragging,\n simulation: this.simulation,\n simulationWorking: this.simulationWorking,\n height: this.height,\n links: this.links,\n nodes: this.nodes,\n width: this.width,\n forceSettings: this.forceSettings,\n graphSettings: this.graphSettings,\n linkSettings: this.linkSettings,\n nodeSettings: this.nodeSettings,\n };\n }\n\n constructor({\n links,\n nodes,\n root,\n forceSettings,\n linkSettings,\n listeners,\n nodeSettings,\n graphSettings,\n }: GraphCanvasInterface<NodeData, LinkData>) {\n // root.style.position = \"relative\";\n root.style.overflow = \"hidden\";\n\n this.root = root;\n\n this.forceSettings = forceSettingsGetter(forceSettings);\n this.linkSettings = linkSettingsGetter(linkSettings);\n this.nodeSettings = nodeSettingsGetter(nodeSettings);\n this.listeners = listenersGetter(listeners);\n this.graphSettings = graphSettingsGetter(graphSettings);\n\n this.eventAbortController = new AbortController();\n\n this.nodes = nodes;\n this.links = links;\n this.height = 0;\n this.width = 0;\n this.draw = this.initDraw();\n\n this.init();\n }\n\n get dpi() {\n return devicePixelRatio;\n }\n\n getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, \"nodes\" | \"links\"> {\n return {\n links: this.links,\n nodes: this.nodes,\n };\n }\n\n changeData(\n options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, \"links\" | \"nodes\">,\n alpha?: number,\n ) {\n if (options.links != undefined) this.links = options.links;\n if (options.nodes != undefined) this.nodes = options.nodes;\n if (options.nodes != undefined || options.links != undefined) this.updateData(alpha);\n }\n\n changeSettings(\n options: Omit<\n Partial<GraphCanvasInterface<NodeData, LinkData>>,\n \"links\" | \"nodes\" | \"listeners\"\n >,\n ) {\n if (options.graphSettings) {\n this.graphSettings = graphSettingsGetter(options.graphSettings, this.graphSettings);\n this.draw = this.initDraw();\n this.initZoom(this.areaTransform);\n }\n if (options.forceSettings) {\n this.forceSettings = forceSettingsGetter(options.forceSettings, this.forceSettings);\n }\n if (options.linkSettings) {\n this.linkSettings = linkSettingsGetter(options.linkSettings, this.linkSettings);\n this.linkOptionsCache = {};\n }\n if (options.nodeSettings) {\n this.nodeSettings = nodeSettingsGetter(options.nodeSettings, this.nodeSettings);\n this.cachedNodeText = {};\n this.nodeOptionsCache = {};\n }\n\n if (options.forceSettings) {\n return void this.updateSimulation();\n }\n\n this.tick();\n }\n\n clearCache() {\n this.nodeOptionsCache = {};\n this.linkOptionsCache = {};\n this.cachedNodeText = {};\n }\n\n tick() {\n if (!this.simulationWorking && !this.highlightWorking) this.draw();\n }\n\n restart(alpha?: number) {\n if (this.simulation) this.simulation.alpha(alpha ?? 1).restart();\n }\n\n start() {\n if (this.simulation) this.simulation.alpha(1).restart();\n if (this.container) this.container.style.display = \"block\";\n }\n\n stop() {\n if (this.simulation) this.simulation.stop();\n if (this.container) this.container.style.display = \"none\";\n }\n\n create() {\n this.init();\n }\n\n destroy() {\n if (this.simulation) {\n this.simulation.stop();\n this.simulation = undefined;\n }\n\n this.clearHTMLElements();\n this.clearState();\n this.clearDataDependencies();\n }\n\n private clearHTMLElements() {\n this.root.replaceChildren();\n this.area = undefined;\n this.context = undefined;\n this.container = undefined;\n this.eventAbortController.abort();\n this.eventAbortController = new AbortController();\n }\n\n private updateSimulation() {\n if (this.simulation) {\n this.initSimulationForces();\n this.simulation.alpha(1);\n this.simulation.restart();\n }\n }\n\n private clearState() {\n this.isDragging = false;\n this.highlightedNode = null;\n this.highlightedNeighbors = null;\n this.highlightProgress = 0;\n this.highlightWorking = false;\n this.highlightDrawing = false;\n }\n\n private clearDataDependencies() {\n this.cachedNodeText = {};\n this.nodeOptionsCache = {};\n this.linkOptionsCache = {};\n }\n\n private updateData(alpha?: number) {\n this.clearDataDependencies();\n\n if (this.simulation) {\n this.initCollideForce();\n\n this.simulation\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links)\n .id(this.nodeSettings.idGetter)\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations),\n )\n .alpha(alpha ?? 0.5)\n .restart();\n }\n }\n\n private updateSize() {\n this.clearHTMLElements();\n\n this.initArea();\n this.initDnd();\n this.initZoom();\n this.initResize();\n this.initPointer();\n\n if (!this.simulationWorking && !this.highlightWorking) this.draw();\n }\n\n private init() {\n this.initArea();\n this.initSimulation();\n this.initDnd();\n this.initZoom();\n this.initResize();\n this.initPointer();\n }\n\n private initSimulation() {\n if (!this.simulation) {\n this.simulation = forceSimulation<\n NodeInterface<NodeData>,\n LinkInterface<NodeData, LinkData>\n >()\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links).id(\n this.nodeSettings.idGetter,\n ),\n )\n .on(\"tick\", () => {\n this.draw();\n })\n .on(\"end\", () => {\n this.listeners.onSimulationEnd?.(this.state);\n\n if (this.graphSettings.showDrawTime) getDrawTime();\n });\n this.initSimulationForces();\n }\n }\n\n private initSimulationForces() {\n if (!this.simulation) return;\n\n const linkForce = this.simulation.force(\"link\") as\n | ForceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>\n | undefined;\n\n if (!linkForce) return;\n\n linkForce\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations);\n\n this.simulation\n .force(\n \"x\",\n forceX<NodeInterface<NodeData>>(this.forceSettings.xForce).strength(\n this.forceSettings.xStrength,\n ),\n )\n .force(\n \"y\",\n forceY<NodeInterface<NodeData>>(this.forceSettings.yForce).strength(\n this.forceSettings.yStrength,\n ),\n )\n .force(\n \"charge\",\n forceManyBody<NodeInterface<NodeData>>()\n .strength(this.forceSettings.chargeStrength)\n .distanceMax(this.forceSettings.chargeDistanceMax)\n .distanceMin(this.forceSettings.chargeDistanceMin),\n )\n .force(\n \"center\",\n forceCenter<NodeInterface<NodeData>>(\n this.forceSettings.centerPosition.x ?? 0,\n this.forceSettings.centerPosition.y ?? 0,\n ).strength(this.forceSettings.centerStrength),\n );\n\n this.initCollideForce(true);\n }\n\n private initCollideForce(forceUpdate?: boolean) {\n if (!this.simulation) return;\n\n if (!this.forceSettings.collideOn) {\n if (this.simulation.force(\"collide\")) this.simulation.force(\"collide\", null);\n\n return;\n }\n\n const isHasMax =\n this.forceSettings.collideOffMax.links != 0 && this.forceSettings.collideOffMax.nodes != 0;\n const isMaxCollideNodes =\n isHasMax && this.forceSettings.collideOffMax.nodes < this.nodes.length;\n const isMaxCollideLinks =\n isHasMax && this.forceSettings.collideOffMax.links < this.links.length;\n if (isMaxCollideNodes && isMaxCollideLinks) {\n this.simulation.force(\"collide\", null);\n } else if (!this.simulation.force(\"collide\") || forceUpdate) {\n this.simulation.force(\n \"collide\",\n forceCollide<NodeInterface<NodeData>>()\n .radius((node, index) => {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n const radius = nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius ?? this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n return radius + this.forceSettings.collideAdditionalRadius;\n })\n .strength(this.forceSettings.collideStrength)\n .iterations(this.forceSettings.collideIterations),\n );\n }\n }\n\n private initArea() {\n if (!this.area || !this.context || !this.container) {\n this.container = d3Create(\"div\")\n .attr(\"style\", \"padding: 0 !important; width: 100%; height: 100%;\")\n .node();\n if (!this.container) throw new Error(\"couldn't create container\");\n this.root.appendChild(this.container);\n\n const { width, height } = this.root.getBoundingClientRect();\n this.width = width;\n this.height = height;\n\n this.area = d3Create(\"canvas\")\n .attr(\"width\", this.dpi * this.width)\n .attr(\"height\", this.dpi * this.height)\n .attr(\"style\", `width: 100%; height: 100%; border: none !important;`)\n .node();\n\n if (!this.area) throw new Error(\"couldn't create canvas\");\n this.container.appendChild(this.area);\n this.areaRect = this.area.getBoundingClientRect();\n\n this.context = this.area.getContext(\"2d\");\n if (!this.context) throw new Error(\"couldn't create canvas context\");\n this.context.scale(this.dpi, this.dpi);\n }\n }\n\n private initDraw() {\n function calculateHighlightFading(this: GraphCanvas<NodeData, LinkData>) {\n this.highlightDrawing = true;\n\n if (!this.highlightWorking && this.highlightProgress > 0) {\n this.highlightProgress -= this.graphSettings.highlightDownStep;\n\n if (!this.simulationWorking) return void requestAnimationFrame(() => this.draw());\n\n if (!this.linkSettings.particles) return;\n }\n if (this.highlightWorking && this.highlightProgress < 1) {\n this.highlightProgress += this.graphSettings.highlightUpStep;\n\n if (!this.simulationWorking) return void requestAnimationFrame(() => this.draw());\n\n if (!this.linkSettings.particles) return;\n }\n\n if (this.linkSettings.particles && this.highlightWorking && !this.simulationWorking) {\n return void requestAnimationFrame(() => this.draw());\n }\n\n if (!this.highlightWorking && this.highlightProgress <= 0) {\n if (this.highlightedNeighbors || this.highlightedNode) {\n this.highlightedNeighbors = null;\n this.highlightedNode = null;\n this.particles = {};\n\n if (!this.simulationWorking) return void requestAnimationFrame(() => this.draw());\n }\n }\n\n this.highlightDrawing = false;\n }\n\n function draw(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.context) return;\n const state = this.state;\n\n if (this.listeners.onDraw) {\n this.listeners.onDraw(\n state,\n (status) => {\n this.highlightDrawing = status;\n },\n () => {\n if (this.highlightedNeighbors) this.highlightedNeighbors = null;\n if (this.highlightedNode) this.highlightedNode = null;\n },\n );\n\n return;\n }\n\n this.context.save();\n this.context.clearRect(0, 0, this.width, this.height);\n this.context.translate(this.areaTransform.x, this.areaTransform.y);\n this.context.scale(this.areaTransform.k, this.areaTransform.k);\n\n const textRenders: (() => void)[] = [];\n const nodeRenders: (() => void)[] = [];\n this.nodes.forEach(getDrawNode(nodeRenders, textRenders, state).bind(this));\n\n /** links */\n this.links.forEach(getDrawLink(state).bind(this));\n\n /** nodes */\n\n nodeRenders.forEach((render) => render());\n textRenders.forEach((render) => render());\n\n this.context.restore();\n\n this.listeners.onDrawFinished?.(state);\n\n calculateHighlightFading.bind(this)();\n }\n\n function getDrawLink(state: GraphState<NodeData, LinkData>) {\n return function drawLink(\n this: GraphCanvas<NodeData, LinkData>,\n link: LinkInterface<NodeData, LinkData>,\n index: number,\n ) {\n if (\n !this.context ||\n typeof link.source !== \"object\" ||\n typeof link.target !== \"object\" ||\n !link.source.x ||\n !link.source.y ||\n !link.target.x ||\n !link.target.y\n )\n return;\n\n if (!link.source._visible && !link.target._visible) return;\n\n const id = `${link.target.id}${link.source.id}`;\n let linkOptions: Required<LinkOptionsInterface<NodeData, LinkData>>;\n if (this.linkSettings.cache && this.linkOptionsCache[id]) {\n linkOptions = this.linkOptionsCache[id];\n } else {\n linkOptions = linkIterationExtractor(\n link,\n index,\n this.links,\n state,\n this.linkSettings.options ?? {},\n linkOptionsGetter,\n );\n if (this.linkSettings.cache) {\n this.linkOptionsCache[id] = linkOptions;\n }\n }\n\n if (linkOptions.drawLink) {\n linkOptions.drawLink(link, linkOptions, state);\n\n return;\n }\n\n let alpha = linkOptions.alpha;\n let arrowAlpha = linkOptions.arrowReverseAppear ? 0 : linkOptions.arrowAlpha;\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** Not highlighted */\n if (\n this.highlightedNode.id != link.source.id &&\n this.highlightedNode.id != link.target.id\n ) {\n if (linkOptions.highlightFading) {\n const min =\n this.graphSettings.highlightLinkFadingMin < alpha\n ? this.graphSettings.highlightLinkFadingMin\n : alpha;\n alpha = animationByProgress(min, alpha - min, 1 - this.highlightProgress);\n }\n if (\n linkOptions.arrow &&\n linkOptions.arrowHighlightFading &&\n !linkOptions.arrowReverseAppear\n ) {\n const min =\n this.graphSettings.highlightArrowFadingMin < arrowAlpha\n ? this.graphSettings.highlightArrowFadingMin\n : arrowAlpha;\n arrowAlpha = animationByProgress(min, arrowAlpha - min, 1 - this.highlightProgress);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (linkOptions.arrow && linkOptions.arrowReverseAppear) {\n /** Highlighted */\n arrowAlpha = animationByProgress(0, linkOptions.arrowAlpha, this.highlightProgress);\n }\n }\n }\n\n /** Link */\n this.context.beginPath();\n\n this.context.globalAlpha = alpha;\n this.context.strokeStyle = linkOptions.color;\n this.context.lineWidth = linkOptions.width;\n\n let xStart = link.source.x;\n let yStart = link.source.y;\n let xEnd = link.target.x;\n let yEnd = link.target.y;\n if (linkOptions.pretty) {\n const isHasArrow = linkOptions.arrow && arrowAlpha > 0;\n\n const { x1, x2, y1, y2 } = calculateLinkPositionByRadius(\n link,\n isHasArrow ? linkOptions.arrowSize : 0,\n ) ?? {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0,\n };\n\n xStart = x1;\n xEnd = x2;\n yStart = y1;\n yEnd = y2;\n }\n\n this.context.moveTo(xStart, yStart);\n this.context.lineTo(xEnd, yEnd);\n this.context.stroke();\n\n /** Particle */\n if (\n this.linkSettings.particles &&\n this.highlightedNode &&\n (this.highlightedNode.id === link.source.id || this.highlightedNode.id === link.target.id)\n ) {\n if (!this.particles[id]) {\n const sourceId = link.source.id;\n const targetId = link.target.id;\n this.particles[id] = Array.from({ length: linkOptions.particleCount }, (_, index) => {\n return {\n step: 0,\n wait: index * (linkOptions.particleSteps / linkOptions.particleCount),\n sourceId,\n targetId,\n };\n }) as GraphParticle[];\n }\n this.particles[id].forEach((particle) => {\n if (!this.context) return;\n\n getParticlePosition({\n particle,\n totalSteps: linkOptions.particleSteps,\n xEnd,\n xStart,\n yEnd,\n yStart,\n });\n if (particle.x != undefined && particle.y != undefined) {\n this.context.beginPath();\n this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);\n this.context.fillStyle = linkOptions.particleColor;\n this.context.fill();\n this.context.stroke();\n }\n });\n }\n\n /** Arrow */\n if (linkOptions.arrow && arrowAlpha > 0) {\n const {\n x1: xStart,\n x2: xEnd,\n y1: yStart,\n y2: yEnd,\n } = calculateLinkPositionByRadius(link) ?? {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0,\n };\n\n const angle = Math.atan2(yEnd - yStart, xEnd - xStart);\n this.context.beginPath();\n this.context.globalAlpha = arrowAlpha;\n this.context.moveTo(xEnd, yEnd);\n this.context.lineTo(\n xEnd - linkOptions.arrowSize * Math.cos(angle - Math.PI / 6),\n yEnd - linkOptions.arrowSize * Math.sin(angle - Math.PI / 6),\n );\n this.context.lineTo(\n xEnd - linkOptions.arrowSize * Math.cos(angle + Math.PI / 6),\n yEnd - linkOptions.arrowSize * Math.sin(angle + Math.PI / 6),\n );\n this.context.closePath();\n this.context.fillStyle = linkOptions.arrowColor;\n this.context.fill();\n this.context.stroke();\n }\n\n if (linkOptions.drawExtraLink) {\n linkOptions.drawExtraLink(link, { ...linkOptions, alpha }, state);\n }\n };\n }\n\n function getDrawNode(\n nodeRenders: (() => void)[],\n textRenders: (() => void)[],\n state: GraphState<NodeData, LinkData>,\n ) {\n return function drawNode(\n this: GraphCanvas<NodeData, LinkData>,\n node: NodeInterface<NodeData>,\n index: number,\n ) {\n if (!this.context || !node.x || !node.y) return;\n\n let nodeOptions: Required<NodeOptionsInterface<NodeData, LinkData>>;\n if (this.nodeSettings.cache && this.nodeOptionsCache[node.id]) {\n nodeOptions = this.nodeOptionsCache[node.id];\n } else {\n nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n state,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n if (this.nodeSettings.cache) {\n this.nodeOptionsCache[node.id] = nodeOptions;\n }\n }\n\n if (nodeOptions.nodeDraw) {\n nodeRenders.push(() => {\n nodeOptions?.nodeDraw?.(node, nodeOptions, state);\n });\n\n return;\n }\n\n let alpha = nodeOptions.alpha;\n let color = nodeOptions.color;\n let radiusInitial = nodeOptions.radius ?? this.graphSettings.nodeRadiusInitial;\n let textAlpha = nodeOptions.textAlpha;\n let textSize = nodeOptions.textSize;\n let textShiftX = nodeOptions.textShiftX;\n let textShiftY = nodeOptions.textShiftY;\n let textWeight = nodeOptions.textWeight;\n let textWidth = nodeOptions.textWidth;\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** Not highlighted */\n if (!this.highlightedNeighbors.has(node.id) && this.highlightedNode.id != node.id) {\n if (nodeOptions.highlightFading) {\n const min =\n this.graphSettings.highlightFadingMin < alpha\n ? this.graphSettings.highlightFadingMin\n : alpha;\n alpha = animationByProgress(min, alpha - min, 1 - this.highlightProgress);\n }\n if (nodeOptions.highlightTextFading) {\n const min =\n this.graphSettings.highlightTextFadingMin < textAlpha\n ? this.graphSettings.highlightTextFadingMin\n : textAlpha;\n textAlpha = animationByProgress(min, textAlpha - min, 1 - this.highlightProgress);\n }\n if (nodeOptions.highlightColor) {\n const colorRgb = extractRgb(colorToRgb(color));\n if (colorRgb) {\n const colorRgbFade = fadeRgb(colorRgb, this.graphSettings.highlightColorFadingMin);\n const colorFadeAnimation = rgbAnimationByProgress(\n colorRgb,\n colorRgbFade,\n this.highlightProgress,\n );\n color = `rgb(${colorFadeAnimation.r}, ${colorFadeAnimation.g}, ${colorFadeAnimation.b})`;\n }\n }\n } else if (\n !this.graphSettings.highlightOnlyRoot ||\n (this.graphSettings.highlightOnlyRoot && this.highlightedNode.id === node.id)\n ) {\n /** Highlighted */\n\n if (nodeOptions.highlightSizing) {\n radiusInitial = animationByProgress(\n radiusInitial,\n this.graphSettings.highlightSizingAdditional,\n this.highlightProgress,\n );\n }\n if (nodeOptions.highlightTextSizing) {\n textSize = animationByProgress(\n textSize,\n this.graphSettings.highlightTextSizingAdditional,\n this.highlightProgress,\n );\n textShiftX = animationByProgress(\n textShiftX,\n this.graphSettings.highlightTextShiftXAdditional,\n this.highlightProgress,\n );\n textShiftY = animationByProgress(\n textShiftY,\n this.graphSettings.highlightTextShiftYAdditional,\n this.highlightProgress,\n );\n textWeight = animationByProgress(\n textWeight,\n this.graphSettings.highlightTextWeightAdditional,\n this.highlightProgress,\n );\n textWidth = animationByProgress(\n textWidth,\n this.graphSettings.highlightTextWidthAdditional,\n this.highlightProgress,\n );\n }\n }\n }\n\n const radius = nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n node._radius = radius;\n if (\n !isNodeVisible({\n height: this.height,\n width: this.width,\n x: node.x,\n y: node.y,\n radius,\n transform: this.areaTransform,\n })\n ) {\n node._visible = false;\n\n return;\n }\n node._visible = true;\n\n nodeRenders.push(() => {\n if (!this.context || !node.x || !node.y) return;\n\n this.context.beginPath();\n\n this.context.globalAlpha = alpha;\n\n /** circle */\n this.context.lineWidth = nodeOptions.borderWidth;\n this.context.strokeStyle = nodeOptions.borderColor;\n this.context.fillStyle = color;\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n\n this.context.fill();\n this.context.stroke();\n });\n\n /** text */\n if (nodeOptions.textVisible && nodeOptions.text) {\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw(\n node,\n {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n textWidth,\n },\n state,\n );\n\n return;\n }\n\n if (!this.context || !node.x || !node.y || !nodeOptions.text) return;\n this.context.beginPath();\n this.context.globalAlpha = textAlpha;\n\n drawText({\n id: node.id,\n cachedNodeText: this.cachedNodeText,\n context: this.context,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize,\n x: node.x + textShiftX,\n y: node.y + radius + textShiftY,\n maxWidth: textWidth,\n textStyle: nodeOptions.textStyle,\n textWeight,\n textGap: nodeOptions.textGap,\n });\n\n if (nodeOptions.textExtraDraw) {\n nodeOptions.textExtraDraw(\n node,\n {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n textWidth,\n },\n state,\n );\n }\n });\n }\n\n if (nodeOptions.nodeExtraDraw) {\n nodeRenders.push(() => {\n nodeOptions?.nodeExtraDraw?.(\n node,\n {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n textWidth,\n },\n state,\n );\n });\n }\n };\n }\n\n if (this.graphSettings.showDrawTime) {\n return setDrawTime(draw.bind(this), this.graphSettings.showDrawTimeEveryTick);\n }\n\n return draw;\n }\n\n private initResize() {\n if (!this.area) throw new Error(\"bad init data\");\n\n let initialResizeCall = true;\n\n const abortController = this.eventAbortController;\n const observer = new ResizeObserver(() => {\n if (initialResizeCall) {\n initialResizeCall = false;\n\n return;\n }\n\n if (abortController.signal.aborted) {\n observer.disconnect();\n\n return;\n }\n\n requestAnimationFrame(() => {\n this.updateSize();\n });\n });\n observer.observe(this.area);\n }\n\n private initPointer() {\n if (!this.area || !this.nodes || !this.simulation) throw new Error(\"bad init data\");\n\n /** hover */\n this.area.addEventListener(\n \"pointermove\",\n (event) => {\n let currentNode: NodeInterface<NodeData> | undefined;\n\n if (this.graphSettings.highlightByHover && !this.isDragging) {\n currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n if (currentNode && this.highlightedNode !== currentNode) {\n this.highlightedNode = currentNode;\n this.highlightedNeighbors = new Set(this.highlightedNode?.neighbors ?? []);\n this.highlightWorking = true;\n\n if (!this.simulationWorking && !this.highlightDrawing)\n requestAnimationFrame(() => {\n this.draw();\n });\n } else if (!currentNode && this.highlightedNode) {\n this.highlightWorking = false;\n if (!this.simulationWorking && !this.highlightDrawing)\n requestAnimationFrame(() => {\n this.draw();\n });\n }\n }\n\n if (!this.listeners.onMove) return;\n\n if (!currentNode)\n currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onMove(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n /** dblclick */\n this.area.addEventListener(\"dblclick\", (event) => {\n if (!this.listeners.onDoubleClick) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onDoubleClick(event, currentNode);\n });\n\n /** wheel click */\n this.area.addEventListener(\n \"mousedown\",\n (event) => {\n if (this.isDragging || !this.listeners.onWheelClick || event.button !== 1) return;\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onWheelClick(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n /** click */\n this.area.addEventListener(\n \"click\",\n (event) => {\n if (this.isDragging || !this.listeners.onClick || event.button !== 0) return;\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onClick(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n /** right click */\n this.area.addEventListener(\n \"contextmenu\",\n (event) => {\n if (!this.listeners.onContextMenu) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onContextMenu(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n }\n\n private initDnd() {\n if (!this.area || !this.nodes || !this.simulation) throw new Error(\"bad init data\");\n\n d3Select(this.area).call(\n d3Drag<HTMLCanvasElement, unknown>()\n .subject((event: DragEventInterface<NodeData>) => {\n if (this.listeners.onDragSubject) {\n return this.listeners.onDragSubject(event, this.state);\n }\n\n if (!this.areaRect) return;\n\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);\n\n let index = 0;\n\n return greatest(this.nodes, (node) => {\n if (!node.x || !node.y || (isBoolean(node.drag) && !node.drag)) return undefined;\n\n let radius = node._radius;\n if (!radius) {\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n\n radius = nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius ?? this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n }\n\n index++;\n\n return this.graphSettings.dragPlaceCoefficient(node, pointerX, pointerY, radius);\n });\n })\n .on(\"start\", (event: DragEventInterface<NodeData>) => {\n this.listeners.onStartDragFinished?.(event, this.state);\n })\n .on(\"drag\", (event: DragEventInterface<NodeData>) => {\n if (!this.isDragging) {\n this.isDragging = true;\n if (this.simulation) this.simulation.alphaTarget(0.3).restart();\n }\n\n if (!this.areaRect) return;\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);\n event.subject.fx = pointerX;\n event.subject.fy = pointerY;\n\n this.listeners.onMoveDragFinished?.(event, this.state);\n })\n .on(\"end\", (event: DragEventInterface<NodeData>) => {\n this.isDragging = false;\n\n if (!event.active && this.simulation) this.simulation.alphaTarget(0);\n\n if (this.graphSettings.stickAfterDrag && this.areaRect) {\n if (!this.areaRect) return;\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(\n mouseEvent,\n this.areaRect,\n this.areaTransform,\n );\n event.subject.fx = pointerX;\n event.subject.fy = pointerY;\n } else {\n event.subject.fx = null;\n event.subject.fy = null;\n }\n\n this.listeners.onEndDragFinished?.(event, this.state);\n }),\n );\n }\n\n private initZoom(currentZoom?: ZoomTransform) {\n if (!this.area) throw new Error(\"bad init data\");\n\n const zoomInstance = zoom<HTMLCanvasElement, unknown>()\n .scaleExtent(this.graphSettings.zoomExtent)\n .on(\"zoom\", (event: ZoomEventInterface) => {\n this.listeners.onZoom?.(event);\n this.areaTransform = event.transform;\n this.linkOptionsCache = {};\n this.nodeOptionsCache = {};\n\n if (!this.simulationWorking && !this.highlightWorking)\n requestAnimationFrame(() => this.draw());\n });\n\n if (this.graphSettings.translateExtentEnable) {\n const coefficient = this.graphSettings.translateExtentCoefficient;\n const [coefficientX, coefficientY] = isArray(coefficient)\n ? coefficient\n : [coefficient, coefficient];\n\n const [\n [minX = -this.width * coefficientX, minY = -this.height * coefficientY],\n [maxX = this.width * coefficientX, maxY = this.height * coefficientY],\n ] = this.graphSettings.translateExtent;\n\n zoomInstance.translateExtent([\n [minX, minY],\n [maxX, maxY],\n ]);\n }\n\n d3Select(this.area).call(zoomInstance).on(\"dblclick.zoom\", null);\n\n const zoomInitial = currentZoom ?? this.graphSettings.zoomInitial;\n this.areaTransform = new ZoomTransform(\n zoomInitial?.k ?? 1,\n zoomInitial?.x ?? this.width / 2,\n zoomInitial?.y ?? this.height / 2,\n );\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(this.area), this.areaTransform);\n }\n}\n"],"names":["getColorFormat","COLOR_FORMATS","transformHEXtoRGB","transformRGBAtoRGB","greatest","zoomIdentity","forceLink","forceSimulation","forceX","forceY","forceManyBody","forceCenter","forceCollide","d3Create","d3Select","d3Drag","isBoolean","zoom","isArray","ZoomTransform"],"mappings":";;;;;;;;;;;AAAgB,SAAA,SAAS,CAAI,KAAc,EAAE,SAAkB,EAAA;AAC7D,IAAA,OAAO,SAAS;AAClB;;SCFgB,WAAW,GAAA;IACzB,MAAM,YAAY,GAA2B,EAAE;AAC/C,IAAA,MAAM,MAAM,GAAG;QACb,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV;IACD,IAAI,MAAM,GAAG,CAAC;IAEd,OAAO,SAAS,KAAK,CAAC,GAAW,EAAA;QAC/B,IAAI,YAAY,CAAC,GAAG,CAAC;AAAE,YAAA,OAAO,YAAY,CAAC,GAAG,CAAC;QAE/C,YAAY,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;AAClC,QAAA,MAAM,EAAE;AAER,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM;YAAE,MAAM,GAAG,CAAC;AAEvC,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC;AAC1B,KAAC;AACH;;ACnBM,SAAU,UAAU,CAAC,KAAa,EAAA;AACtC,IAAA,MAAM,MAAM,GAAGA,wBAAc,CAAC,KAAK,CAAC;IAEpC,QAAQ,MAAM;AACZ,QAAA,KAAKC,uBAAa,CAAC,GAAG,EAAE;AACtB,YAAA,OAAOC,2BAAiB,CAAC,KAAK,CAAC;;AAEjC,QAAA,KAAKD,uBAAa,CAAC,GAAG,EAAE;AACtB,YAAA,OAAO,KAAK;;AAEd,QAAA,KAAKA,uBAAa,CAAC,IAAI,EAAE;AACvB,YAAA,OAAOE,4BAAkB,CAAC,KAAK,CAAC;;QAElC,SAAS;AACP,YAAA,OAAO,IAAI;;;AAGjB;;ACxBM,SAAU,UAAU,CAAC,KAAoB,EAAA;AAC7C,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;IAEvB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAEhC,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IAEtB,OAAO;AACL,QAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACX,QAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACX,QAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;KACZ;AACH;;ACVgB,SAAA,OAAO,CAAC,KAAU,EAAE,IAAY,EAAA;AAC9C,IAAA,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC;IAE9C,OAAO;AACL,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACrC,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACrC,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;KACtC;AACH;;SCRgB,sBAAsB,CAAC,KAAU,EAAE,GAAQ,EAAE,QAAgB,EAAA;IAC3E,OAAO;AACL,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,QAAQ;AACzC,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,QAAQ;AACzC,QAAA,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,QAAQ;KAC1C;AACH;;ACLgB,SAAA,mBAAmB,CAIjC,QAAgE,EAChE,YAAmE,EAAA;IAEnE,OAAO;AACL,QAAA,IAAI,YAAY,IAAK,cAAuE,CAAC;AAC7F,QAAA,GAAG,QAAQ;KACZ;AACH;;ACXgB,SAAA,mBAAmB,CACjC,QAAsD,EACtD,YAAyD,EAAA;IAEzD,OAAO;AACL,QAAA,IAAI,YAAY,IAAI,cAAc,CAAC;AACnC,QAAA,GAAG,QAAQ;KACZ;AACH;;ACPgB,SAAA,kBAAkB,CAIhC,QAA+D,EAC/D,YAC4D,EAAA;IAG5D,OAAO,EAAE,IAAI,YAAY,IAAI,aAAa,CAAC,EAAE,GAAG,QAAQ,EAAE;AAC5D;AAEM,SAAU,iBAAiB,CAI/B,CAAoC,EACpC,EAAU,EACV,GAAwC,EACxC,KAAsC,EAAA;IAEtC,OAAO;AACL,QAAA,GAAG,YAAY;AACf,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,KAAK,EACH,KAAK,EAAE,aAAa,IAAI,KAAK,EAAE,aAAa,CAAC,CAAC,GAAG,eAAe,CAAC;cAC7D,eAAe,CAAC;cAChB,eAAe,CAAC,gBAAgB;AACtC,QAAA,UAAU,EACR,KAAK,EAAE,aAAa,IAAI,KAAK,EAAE,aAAa,CAAC,CAAC,GAAG,eAAe,CAAC;cAC7D,eAAe,CAAC;cAChB,eAAe,CAAC,gBAAgB;AACtC,QAAA,KAAK,EACH,KAAK,EAAE,aAAa,IAAI,KAAK,EAAE,aAAa,CAAC,CAAC,GAAG,eAAe,CAAC;cAC7D,eAAe,CAAC;cAChB,eAAe,CAAC,gBAAgB;KACvC;AACH;;ACxCM,SAAU,eAAe,CAI7B,QAA4D,EAAA;IAE5D,OAAO,QAAQ,IAAI,EAAE;AACvB;;ACHgB,SAAA,kBAAkB,CAIhC,QAA+D,EAC/D,gBAC4D,EAAA;IAG5D,OAAO;AACL,QAAA,IAAI,gBAAgB,IAAI,aAAa,CAAC;AACtC,QAAA,QAAQ,EAAE,YAAY;AACtB,QAAA,GAAG,QAAQ;KACZ;AACH;AAEA,MAAM,KAAK,GAAG,WAAW,EAAE;AAErB,SAAU,iBAAiB,CAI/B,IAA6B,EAC7B,CAAS,EACT,EAA6B,EAC7B,KAAsC,EAAA;AAEtC,IAAA,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC;IAEzE,OAAO;AACL,QAAA,GAAG,YAAY;AACf,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,QAAQ,EAAE,IAAI;AACd,QAAA,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,CAAC;AAC9C,QAAA,WAAW,EAAE,OAAO,CAClB,KAAK,EAAE,aAAa,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,eAAe,CAAC,gBAAgB,CACjF;QACD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;QACrC,UAAU;QACV,QAAQ;KACT;AACH;AAEM,SAAU,kBAAkB,CAAC,SAAoC,EAAA;AACrE,IAAA,IAAI,QAAQ,GAAW,eAAe,CAAC,eAAe;AACtD,IAAA,IAAI,UAAU,GAAW,eAAe,CAAC,iBAAiB;IAE1D,IAAI,SAAS,EAAE;QACb,MAAM,oBAAoB,GACxB,CAAC,eAAe,CAAC,gBAAgB,GAAG,eAAe,CAAC,gBAAgB;YACpE,eAAe,CAAC,uBAAuB;QACzC,MAAM,mBAAmB,GACvB,CAAC,eAAe,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe;YAClE,eAAe,CAAC,uBAAuB;QACzC,MAAM,oBAAoB,GACxB,CAAC,eAAe,CAAC,iBAAiB,GAAG,eAAe,CAAC,iBAAiB;YACtE,eAAe,CAAC,uBAAuB;QAEzC,IAAI,SAAS,CAAC,CAAC,IAAI,eAAe,CAAC,gBAAgB,EAAE;AACnD,YAAA,QAAQ,GAAG,eAAe,CAAC,eAAe;AAC1C,YAAA,UAAU,GAAG,eAAe,CAAC,iBAAiB;;aACzC,IAAI,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,gBAAgB,EAAE;AACzD,YAAA,MAAM,cAAc,GAClB,CAAC,SAAS,CAAC,CAAC,GAAG,eAAe,CAAC,gBAAgB,IAAI,oBAAoB;AAEzE,YAAA,QAAQ,IAAI,cAAc,GAAG,mBAAmB;AAChD,YAAA,UAAU,IAAI,cAAc,GAAG,oBAAoB;;;AAIvD,IAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE;AACjC;AAUgB,SAAA,gBAAgB,CAAC,EAC/B,cAAc,EACd,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,YAAY,GACY,EAAA;IACxB,QACE,CAAC,cAAc,IAAI,SAAS,GAAG,SAAS,GAAG,iBAAiB,GAAG,CAAC,IAAI,YAAY,GAAG,aAAa;AAEpG;AAEM,SAAU,YAAY,CAC1B,IAA6B,EAAA;IAE7B,OAAO,IAAI,CAAC,EAAE;AAChB;;SCvGgB,aAAa,CAC3B,UAAsB,EACtB,QAAiB,EACjB,aAA4B,EAAA;AAE5B,IAAA,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;AACnF,IAAA,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,aAAa,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC;AAElF,IAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACjB;;ACTM,SAAU,cAAc,CAC5B,IAA6B,EAC7B,MAAc,EACd,QAAgB,EAChB,QAAgB,EAAA;IAEhB,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,CAAC,IAAI,SAAS;AAAE,QAAA,OAAO,KAAK;AAE5D,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,MAAM;AAC1E,IAAA,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,MAAM;IAE1E,OAAO,OAAO,IAAI,OAAO;AAC3B;;ACXM,SAAU,0BAA0B,CACxC,IAA6B,EAC7B,QAAgB,EAChB,QAAgB,EAChB,MAAc,EAAA;IAEd,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAAE,QAAA,OAAO,SAAS;IAExC,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK;AACzE;;ACoBgB,SAAA,sBAAsB,CAKpC,IAAuC,EACvC,CAAS,EACT,KAA0C,EAC1C,KAAqC,EACrC,MAAwE,EACxE,oBAGa,EAAA;AAEb,IAAA,IAAI,aAAiC;AACrC,IAAA,IAAI,eAAmC;IAEvC,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;QAC1E,aAAa,GAAG,MAAM;AAE3B,IAAA,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACvF,QAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,YAAA,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,aAAa,CAAC,GAAG,CAAC;;;IAInE,IAAI,oBAAoB,EAAE;QACxB,IAAI,OAAO,oBAAoB,KAAK,UAAU;YAC5C,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;YAC1D,eAAe,GAAG,oBAAoB;AAE3C,QAAA,IACE,eAAe;YACf,OAAO,eAAe,KAAK,QAAQ;AACnC,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC/B,YAAA,SAAS,CACP,aAAa,EACb,aAAa,KAAK,SAAS;AACzB,iBAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CACvE,EACD;YACA,OAAO;AACL,gBAAA,GAAI,eAAuD;AAC3D,gBAAA,GAAI,aAAqD;aAChD;;;AAIf,IAAA,OAAO,aAAa;AACtB;;AClEgB,SAAA,mBAAmB,CAA2C,EAC5E,QAAQ,EACR,aAAa,EACb,UAAU,EACV,KAAK,EACL,aAAa,GACwB,EAAA;AACrC,IAAA,IAAI,CAAC,QAAQ;AAAE,QAAA,OAAO,SAAS;AAE/B,IAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC;AAE/E,IAAA,OAAOC,gBAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,KAAI;AAC9B,QAAA,MAAM,MAAM,GACV,IAAI,CAAC,OAAO;AACZ,YAAA,gBAAgB,CAAC;gBACf,cAAc,EAAE,aAAa,CAAC,kBAAkB;gBAChD,aAAa,EAAE,aAAa,CAAC,iBAAiB;gBAC9C,iBAAiB,EAAE,aAAa,CAAC,qBAAqB;gBACtD,YAAY,EAAE,aAAa,CAAC,gBAAgB;gBAC5C,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,aAAA,CAAC;QAEJ,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC,KAAK;AACzE,KAAC,CAAC;AACJ;;ACZgB,SAAA,sBAAsB,CAKpC,IAA6B,EAC7B,CAAS,EACT,KAAgC,EAChC,KAAqC,EACrC,MAAwE,EACxE,oBAGa,EAAA;AAEb,IAAA,IAAI,aAAiC;AACrC,IAAA,IAAI,eAAmC;IAEvC,IAAI,OAAO,MAAM,KAAK,UAAU;QAAE,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;QAC1E,aAAa,GAAG,MAAM;AAE3B,IAAA,IAAI,aAAa,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;AACvF,QAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,YAAA,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS;AAAE,gBAAA,OAAO,aAAa,CAAC,GAAG,CAAC;;;IAInE,IAAI,oBAAoB,EAAE;QACxB,IAAI,OAAO,oBAAoB,KAAK,UAAU;YAC5C,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC;;YAC1D,eAAe,GAAG,oBAAoB;AAE3C,QAAA,IACE,eAAe;YACf,OAAO,eAAe,KAAK,QAAQ;AACnC,YAAA,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC;AAC/B,YAAA,SAAS,CACP,aAAa,EACb,aAAa,KAAK,SAAS;AACzB,iBAAC,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CACvE,EACD;YACA,OAAO;AACL,gBAAA,GAAI,eAAuD;AAC3D,gBAAA,GAAI,aAAqD;aAChD;;;AAIf,IAAA,OAAO,aAAa;AACtB;;AC1DA,MAAM,KAAK,GAAG,GAAG;AAED,SAAA,QAAQ,CAAC,EACvB,OAAO,EACP,EAAE,EACF,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,OAAO,EACP,UAAU,EACV,QAAQ,EACR,IAAI,EACJ,CAAC,EACD,CAAC,EACD,cAAc,EACd,QAAQ,GACQ,EAAA;AAChB,IAAA,OAAO,CAAC,IAAI,GAAG,CAAA,EAAG,SAAS,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,GAAA,EAAM,QAAQ,CAAA,CAAE;AAC5E,IAAA,OAAO,CAAC,SAAS,GAAG,SAAS;AAC7B,IAAA,OAAO,CAAC,SAAS,GAAG,SAAS;AAE7B,IAAA,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE;QACnC,cAAc,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACzC,YAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AACnE,SAAC,CAAC;QAEF;;AAGF,IAAA,IAAI,QAAQ,IAAI,SAAS,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,QAAQ,EAAE;AACxE,QAAA,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAE5B;;IAGF,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK;IACjD,MAAM,KAAK,GAAa,EAAE;IAC1B,IAAI,SAAS,GAAG,CAAC;IACjB,IAAI,IAAI,GAAG,EAAE;IAEb,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAClC,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK;QAC5C,SAAS,IAAI,IAAI;AAEjB,QAAA,IAAI,IAAI,KAAK,EAAE,EAAE;YACf,IAAI,GAAG,IAAI;YAEX;;AAEF,QAAA,IAAI,SAAS,GAAG,QAAQ,EAAE;YACxB,SAAS,GAAG,CAAC;AACb,YAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAChB,IAAI,GAAG,IAAI;;aACN;YACL,SAAS,IAAI,UAAU;AACvB,YAAA,IAAI,IAAI,CAAG,EAAA,KAAK,CAAG,EAAA,IAAI,EAAE;;;IAI7B,IAAI,IAAI,KAAK,EAAE;AAAE,QAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAEjC,IAAA,cAAc,CAAC,EAAE,CAAC,GAAG,KAAK;IAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAC5B,QAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AACnE,KAAC,CAAC;AACJ;;SCrFgB,6BAA6B,CAG3C,IAAuC,EAAE,SAAS,GAAG,CAAC,EAAA;AACtD,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AAC1B,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;IAE1B,IAAI,OAAO,MAAM,IAAI,QAAQ,IAAI,OAAO,MAAM,IAAI,QAAQ;AAAE,QAAA,OAAO,IAAI;AAEvE,IAAA,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,IAAA,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,IAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACvC,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC;IACxC,MAAM,YAAY,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;IAEnF,OAAO;AACL,QAAA,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,IAAI,EAAE;AAC9C,QAAA,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,IAAI,EAAE;AAC9C,QAAA,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,IAAI,EAAE;AAC9C,QAAA,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,YAAY,IAAI,EAAE;KAC/C;AACH;;SCvBgB,mBAAmB,CAAC,OAAe,EAAE,UAAkB,EAAE,QAAgB,EAAA;AACvF,IAAA,MAAM,GAAG,GAAG,OAAO,GAAG,UAAU;IAEhC,IAAI,OAAO,GAAG,OAAO,GAAG,CAAC,GAAG,GAAG,OAAO,IAAI,QAAQ;IAClD,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,GAAG,GAAG;IAChC,IAAI,OAAO,GAAG,OAAO;QAAE,OAAO,GAAG,OAAO;AAExC,IAAA,OAAO,OAAO;AAChB;;ACGA,MAAM,mBAAmB,GAAG,EAAE;AAExB,SAAU,aAAa,CAAC,IAA0B,EAAA;AACtD,IAAA,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AACjD,IAAA,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AAChE,IAAA,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAChD,IAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IAElE,QACE,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB;QACjD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB,GAAG,KAAK;QAClD,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB;QAChD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,mBAAmB,GAAG,MAAM;AAEvD;;ACdM,SAAU,mBAAmB,CAAC,IAAgC,EAAA;IAClE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;QAEpB;;IAGF,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU;AAErD,IAAA,IAAI,cAAc,KAAK,CAAC,EAAE;QACxB,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;QAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;QAEtB;;IAGF,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;IAClC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM;IAElC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ;IACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ;AAExC,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI;AACtB,IAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI;AACtB,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACtB;;AC3BO,MAAM,cAAc,GAEvB;AACF,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,uBAAuB,EAAE,CAAC;AAC1B,IAAA,iBAAiB,EAAE,CAAC;IACpB,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACrC,IAAA,SAAS,EAAE,IAAI;IACf,cAAc,EAAE,GAAG;AACnB,IAAA,iBAAiB,EAAE,QAAQ;AAC3B,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,IAAI;CACpB;AAEM,MAAM,cAAc,GAA8D;AACvF,IAAA,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAqB;AACzC,IAAA,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AACzB,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,0BAA0B,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAClC,IAAA,yBAAyB,EAAE,GAAG;AAC9B,IAAA,uBAAuB,EAAE,IAAI;AAC7B,IAAA,6BAA6B,EAAE,CAAC;AAChC,IAAA,6BAA6B,EAAE,CAAC;AAChC,IAAA,6BAA6B,EAAE,CAAC;AAChC,IAAA,6BAA6B,EAAE,CAAC;AAChC,IAAA,4BAA4B,EAAE,EAAE;AAChC,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,sBAAsB,EAAE,IAAI;AAC5B,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,sBAAsB,EAAE,IAAI;AAC5B,IAAA,uBAAuB,EAAE,IAAI;AAC7B,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,oBAAoB,EAAE,0BAA0B;AAChD,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,qBAAqB,EAAE,CAAC;AACxB,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,qBAAqB,EAAE,KAAK;CAC7B;AAEM,MAAM,aAAa,GAGtB;AACF,IAAA,KAAK,EAAE,KAAK;CACb;AAEM,MAAM,YAAY,GAWrB;AACF,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,WAAW,EAAE,WAAW;AACxB,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,QAAQ,EAAE,OAAO;AACjB,IAAA,SAAS,EAAE,QAA2B;AACtC,IAAA,SAAS,EAAE,MAAM;AACjB,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,QAAQ;AACnB,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,mBAAmB,EAAE,IAAI;AACzB,IAAA,mBAAmB,EAAE,IAAI;CAC1B;AAEM,MAAM,aAAa,GAAyE;AACjG,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,SAAS,EAAE,IAAI;CAChB;AAEM,MAAM,YAAY,GAGrB;AACF,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,eAAe,EAAE,IAAI;AACrB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,aAAa,EAAE,WAAW;AAC1B,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,aAAa,EAAE,EAAE;CAClB;AAEM,MAAM,eAAe,GAAG;AAC7B,IAAA,gBAAgB,EAAE,MAAM;AACxB,IAAA,iBAAiB,EAAE,WAAW;AAC9B,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,mBAAmB,EAAE,CAAC;AACtB,IAAA,mBAAmB,EAAE,CAAC;AACtB,IAAA,gBAAgB,EAAE,GAAG;AACrB,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,uBAAuB,EAAE,GAAG;CAC7B;;AChIK,SAAU,gBAAgB,CAG9B,IAA2D,EAAA;AAC3D,IAAA,MAAM,cAAc,GAEd;AACJ,QAAA;AACE,YAAA,EAAE,EAAE,gBAAgB;YACpB,YAAY,EAAE,cAAc,CAAC,cAAc;AAC3C,YAAA,KAAK,EAAE,gBAAgB;AACvB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACd,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,iBAAiB;YACrB,YAAY,EAAE,cAAc,CAAC,eAAe;AAC5C,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACd,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,yBAAyB;YAC7B,YAAY,EAAE,cAAc,CAAC,uBAAuB;AACpD,YAAA,KAAK,EAAE,qBAAqB;AAC5B,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACd,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,mBAAmB;YACvB,YAAY,EAAE,cAAc,CAAC,iBAAiB;AAC9C,YAAA,KAAK,EAAE,uBAAuB;AAC9B,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,IAAI,EAAE,OAAO;AACd,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,gBAAgB;AACpB,YAAA,YAAY,EAC0C,cAAc,CAAC,cAAc,CAAI;AACvF,YAAA,KAAK,EAAE,YAAY;AACnB,YAAA,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,IAAI;AACT,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACd,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,YAAY,EAA8C,cAAc,CAAC,MAAM,CAAI;AACpF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,YAAY,EAA8C,cAAc,CAAC,MAAM,CAAI;AACpF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,YAAY,EAAiD,cAAc,CAAC,SAAS,CAAI;AAC1F,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,cAAc;AACrB,YAAA,YAAY,EAAiD,cAAc,CAAC,SAAS,CAAI;AAC1F,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE,cAAc;AAClB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,kBAAkB;AACzB,YAAA,YAAY,EACwC,cAAc,CAAC,YAAY,CAAI;AACpF,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,EAAE,EAAE,cAAc;AAClB,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,YAAY,EACwC,cAAc,CAAC,YAAY,CAAK;AACrF,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,cAAc,CAAC,SAAS;AACtC,YAAA,KAAK,EAAE,cAAc;AACtB,SAAA;KACF;IAED,OAAO,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc;AAC9F;AAEM,SAAU,gBAAgB,CAC9B,IAAiD,EAAA;AAEjD,IAAA,MAAM,cAAc,GAA0E;AAC5F,QAAA;AACE,YAAA,EAAE,EAAE,2BAA2B;YAC/B,YAAY,EAAE,cAAc,CAAC,yBAAyB;AACtD,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,oCAAoC;AAC5C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,yBAAyB;YAC7B,YAAY,EAAE,cAAc,CAAC,uBAAuB;AACpD,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,yBAAyB;AACjC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,+BAA+B;YACnC,YAAY,EAAE,cAAc,CAAC,6BAA6B;AAC1D,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,mCAAmC;AAC3C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,+BAA+B;YACnC,YAAY,EAAE,cAAc,CAAC,6BAA6B;AAC1D,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,mCAAmC;AAC3C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,+BAA+B;YACnC,YAAY,EAAE,cAAc,CAAC,6BAA6B;AAC1D,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,gCAAgC;AACxC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,+BAA+B;YACnC,YAAY,EAAE,cAAc,CAAC,6BAA6B;AAC1D,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,yCAAyC;AACjD,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,8BAA8B;YAClC,YAAY,EAAE,cAAc,CAAC,4BAA4B;AACzD,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,uCAAuC;AAC/C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,wBAAwB;YAC5B,YAAY,EAAE,cAAc,CAAC,sBAAsB;AACnD,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,uCAAuC;AAC/C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,wBAAwB;YAC5B,YAAY,EAAE,cAAc,CAAC,sBAAsB;AACnD,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,sCAAsC;AAC9C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,oBAAoB;YACxB,YAAY,EAAE,cAAc,CAAC,kBAAkB;AAC/C,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,qCAAqC;AAC7C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,yBAAyB;YAC7B,YAAY,EAAE,cAAc,CAAC,uBAAuB;AACpD,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,wCAAwC;AAChD,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,mBAAmB;YACvB,YAAY,EAAE,cAAc,CAAC,iBAAiB;AAC9C,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,0BAA0B;AAClC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,iBAAiB;YACrB,YAAY,EAAE,cAAc,CAAC,eAAe;AAC5C,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,8BAA8B;AACtC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,mBAAmB;YACvB,YAAY,EAAE,cAAc,CAAC,iBAAiB;AAC9C,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,yBAAyB;AACjC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,uBAAuB;YAC3B,YAAY,EAAE,cAAc,CAAC,qBAAqB;AAClD,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,0CAA0C;AAClD,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,kBAAkB;YACtB,YAAY,EAAE,cAAc,CAAC,gBAAgB;AAC7C,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,KAAK,EAAE,gCAAgC;AACxC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,mBAAmB;AACvB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,cAAc,CAAC,iBAAiB;AAC9C,YAAA,KAAK,EAAE,6CAA6C;AACrD,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,gBAAgB;AACpB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,cAAc,CAAC,cAAc;AAC3C,YAAA,KAAK,EAAE,wCAAwC;AAChD,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,kBAAkB;AACtB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,cAAc,CAAC,gBAAgB;AAC7C,YAAA,KAAK,EAAE,wBAAwB;AAChC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,oBAAoB;AACxB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,cAAc,CAAC,kBAAkB;AAC/C,YAAA,KAAK,EAAE,oBAAoB;AAC5B,SAAA;KACF;IAED,OAAO,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc;AAC9F;AAEM,SAAU,eAAe,CAG7B,IAAyD,EAAA;AACzD,IAAA,MAAM,aAAa,GAEb;AACJ,QAAA;AACE,YAAA,EAAE,EAAE,OAAO;AACX,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,cAAc;YACrB,YAAY,EAAE,YAAY,CAAC,KAAK;AACjC,SAAA;AAED,QAAA;AACE,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,QAAQ;YACf,YAAY,EAAE,YAAY,CAAC,MAAM;AAClC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,YAAY,CAAC,WAAW;AACvC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,aAAa;AACjB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,KAAK,EAAE,cAAc;AACtB,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,OAAO;AACX,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,KAAK,EAAE,MAAM;AACd,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,qBAAqB;YAC5B,YAAY,EAAE,YAAY,CAAC,SAAS;AACrC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,eAAe;YACtB,YAAY,EAAE,YAAY,CAAC,SAAS;AACrC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,mBAAmB;YAC1B,YAAY,EAAE,YAAY,CAAC,UAAU;AACtC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,mBAAmB;AAC1B,YAAA,YAAY,EAAE,CAAC;AAChB,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,IAAI;AACT,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,iBAAiB;YACxB,YAAY,EAAE,YAAY,CAAC,UAAU;AACtC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,SAAS;AACb,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,2BAA2B;YAClC,YAAY,EAAE,YAAY,CAAC,OAAO;AACnC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,iBAAiB;AACrB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,YAAY,CAAC,eAAe;AAC1C,YAAA,KAAK,EAAE,oBAAoB;AAC5B,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,gBAAgB;AACpB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,YAAY,CAAC,cAAc;AACzC,YAAA,KAAK,EAAE,0BAA0B;AAClC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,iBAAiB;AACrB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,YAAY,CAAC,eAAe;AAC1C,YAAA,KAAK,EAAE,kBAAkB;AAC1B,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,qBAAqB;AACzB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,YAAY,CAAC,mBAAmB;AAC9C,YAAA,KAAK,EAAE,2BAA2B;AACnC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,qBAAqB;AACzB,YAAA,IAAI,EAAE,UAAU;YAChB,YAAY,EAAE,YAAY,CAAC,mBAAmB;AAC9C,YAAA,KAAK,EAAE,yBAAyB;AACjC,SAAA;KACF;IAED,OAAO,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa;AAC5F;AAEM,SAAU,eAAe,CAG7B,IAAyD,EAAA;AACzD,IAAA,MAAM,aAAa,GAEb;AACJ,QAAA;AACE,YAAA,EAAE,EAAE,OAAO;AACX,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,cAAc;YACrB,YAAY,EAAE,YAAY,CAAC,KAAK;AACjC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,OAAO;AACX,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,YAAY,EAAE,GAAG;AAClB,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,sBAAsB;YAC7B,YAAY,EAAE,YAAY,CAAC,UAAU;AACtC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,WAAW;AACf,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,gBAAgB;YACvB,YAAY,EAAE,YAAY,CAAC,SAAS;AACrC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,eAAe;AACnB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,qBAAqB;YAC5B,YAAY,EAAE,YAAY,CAAC,aAAa;AACzC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,gBAAgB;AACpB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,eAAe;YACtB,YAAY,EAAE,YAAY,CAAC,cAAc;AAC1C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,eAAe;AACnB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,EAAE;AACP,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,mBAAmB;YAC1B,YAAY,EAAE,YAAY,CAAC,aAAa;AACzC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,eAAe;AACnB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,GAAG,EAAE,GAAG;AACR,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,IAAI,EAAE,CAAC;AACP,YAAA,KAAK,EAAE,4BAA4B;YACnC,YAAY,EAAE,YAAY,CAAC,aAAa;AACzC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,OAAO;AACX,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,KAAK,EAAE,MAAM;AACd,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,YAAY;AAChB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,KAAK,EAAE,cAAc;AACtB,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,eAAe;AACnB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,KAAK,EAAE,aAAa;AACrB,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,iBAAiB;AACrB,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,oBAAoB;YAC3B,YAAY,EAAE,YAAY,CAAC,eAAe;AAC3C,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,QAAQ;AACZ,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,mBAAmB;YAC1B,YAAY,EAAE,YAAY,CAAC,MAAM;AAClC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,OAAO;AACX,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,SAAS;YAChB,YAAY,EAAE,YAAY,CAAC,KAAK;AACjC,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,sBAAsB;AAC1B,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,4BAA4B;YACnC,YAAY,EAAE,YAAY,CAAC,oBAAoB;AAChD,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,oBAAoB;AACxB,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,KAAK,EAAE,gCAAgC;YACvC,YAAY,EAAE,YAAY,CAAC,kBAAkB;AAC9C,SAAA;KACF;IAED,OAAO,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa;AAC5F;;ACjkBA,IAAI,SAAS,GAAG,CAAC;AACjB,IAAI,cAAc,GAAG,CAAC;AAEN,SAAA,WAAW,CAAC,EAAc,EAAE,aAAsB,EAAA;AAChE,IAAA,OAAO,MAAK;AACV,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;AAC/B,QAAA,EAAE,EAAE;AACJ,QAAA,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE;AAC7B,QAAA,MAAM,MAAM,GAAG,GAAG,GAAG,KAAK;QAE1B,SAAS,IAAI,MAAM;AACnB,QAAA,cAAc,EAAE;QAEhB,IAAI,aAAa,EAAE;AACjB,YAAA,MAAM,OAAO,GAAG,SAAS,GAAG,cAAc;;YAE1C,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,CAAC;;AAEpE,KAAC;AACH;SAEgB,WAAW,GAAA;AACzB,IAAA,MAAM,OAAO,GAAG,SAAS,GAAG,cAAc;;AAG1C,IAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,OAAO,CAAC;AACxC;;MCkCa,WAAW,CAAA;;AAMd,IAAA,KAAK;AAEL,IAAA,KAAK;IAEL,SAAS,GAAoC,EAAE;AAE/C,IAAA,KAAK;AAEL,IAAA,MAAM;AAEN,IAAA,IAAI;AAEJ,IAAA,SAAS;AAET,IAAA,IAAI;;AAIJ,IAAA,aAAa;AAEb,IAAA,aAAa;AAEb,IAAA,YAAY;AAGZ,IAAA,YAAY;AAGZ,IAAA,SAAS;;AAIT,IAAA,OAAO;AAEP,IAAA,UAAU;IAEV,aAAa,GAAkBC,mBAAY;AAE3C,IAAA,QAAQ;AAER,IAAA,IAAI;AAEJ,IAAA,oBAAoB;IAEpB,cAAc,GAA4B,EAAE;IAE5C,gBAAgB,GAAuE,EAAE;IAEzF,gBAAgB,GAAuE,EAAE;IAEzF,UAAU,GAAY,KAAK;IAE3B,eAAe,GAAmC,IAAI;IAEtD,oBAAoB,GAAgC,IAAI;IAExD,iBAAiB,GAAW,CAAC;IAE7B,gBAAgB,GAAY,KAAK;IAEjC,gBAAgB,GAAY,KAAK;AAEzC,IAAA,IAAY,iBAAiB,GAAA;QAC3B,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI,CAAC;QACvD,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,IAAI,IAAI,CAAC;QAC7D,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC;QACjE,MAAM,KAAK,GAAG,CAAC,eAAe,GAAG,kBAAkB,IAAI,oBAAoB;QAE3E,OAAO,KAAK,GAAG,CAAC;;AAGlB,IAAA,IAAY,KAAK,GAAA;QACf,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC;;AAGH,IAAA,WAAA,CAAY,EACV,KAAK,EACL,KAAK,EACL,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,GAC4B,EAAA;;AAEzC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;AAE9B,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAEhB,QAAA,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC;AACvD,QAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,YAAY,CAAC;AACpD,QAAA,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,SAAS,CAAC;AAC3C,QAAA,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC;AAEvD,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,eAAe,EAAE;AAEjD,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AACd,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;QAE3B,IAAI,CAAC,IAAI,EAAE;;AAGb,IAAA,IAAI,GAAG,GAAA;AACL,QAAA,OAAO,gBAAgB;;IAGzB,OAAO,GAAA;QACL,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB;;IAGH,UAAU,CACR,OAAmF,EACnF,KAAc,EAAA;AAEd,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;AAC1D,QAAA,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK;QAC1D,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS,IAAI,OAAO,CAAC,KAAK,IAAI,SAAS;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;;AAGtF,IAAA,cAAc,CACZ,OAGC,EAAA;AAED,QAAA,IAAI,OAAO,CAAC,aAAa,EAAE;AACzB,YAAA,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;AACnF,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;;AAEnC,QAAA,IAAI,OAAO,CAAC,aAAa,EAAE;AACzB,YAAA,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC;;AAErF,QAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC;AAC/E,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAE5B,QAAA,IAAI,OAAO,CAAC,YAAY,EAAE;AACxB,YAAA,IAAI,CAAC,YAAY,GAAG,kBAAkB,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC;AAC/E,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAG5B,QAAA,IAAI,OAAO,CAAC,aAAa,EAAE;AACzB,YAAA,OAAO,KAAK,IAAI,CAAC,gBAAgB,EAAE;;QAGrC,IAAI,CAAC,IAAI,EAAE;;IAGb,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;;IAG1B,IAAI,GAAA;QACF,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,IAAI,EAAE;;AAGpE,IAAA,OAAO,CAAC,KAAc,EAAA;QACpB,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE;;IAGlE,KAAK,GAAA;QACH,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE;QACvD,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;;IAG5D,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,UAAU;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;QAC3C,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;;IAG3D,MAAM,GAAA;QACJ,IAAI,CAAC,IAAI,EAAE;;IAGb,OAAO,GAAA;AACL,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;AACtB,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;;QAG7B,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,qBAAqB,EAAE;;IAGtB,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;AAC3B,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS;AACxB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;AAC1B,QAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE;AACjC,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,eAAe,EAAE;;IAG3C,gBAAgB,GAAA;AACtB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;;;IAIrB,UAAU,GAAA;AAChB,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,iBAAiB,GAAG,CAAC;AAC1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;IAGvB,qBAAqB,GAAA;AAC3B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;AAGpB,IAAA,UAAU,CAAC,KAAc,EAAA;QAC/B,IAAI,CAAC,qBAAqB,EAAE;AAE5B,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,gBAAgB,EAAE;AAEvB,YAAA,IAAI,CAAC;AACF,iBAAA,KAAK,CAAC,IAAI,CAAC,KAAK;iBAChB,KAAK,CACJ,MAAM,EACNC,iBAAS,CAA6D,IAAI,CAAC,KAAK;AAC7E,iBAAA,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ;AAC7B,iBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;AACxC,iBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;AACxC,iBAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;AAEjD,iBAAA,KAAK,CAAC,KAAK,IAAI,GAAG;AAClB,iBAAA,OAAO,EAAE;;;IAIR,UAAU,GAAA;QAChB,IAAI,CAAC,iBAAiB,EAAE;QAExB,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,OAAO,EAAE;QACd,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,WAAW,EAAE;QAElB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,IAAI,EAAE;;IAG5D,IAAI,GAAA;QACV,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,cAAc,EAAE;QACrB,IAAI,CAAC,OAAO,EAAE;QACd,IAAI,CAAC,QAAQ,EAAE;QACf,IAAI,CAAC,UAAU,EAAE;QACjB,IAAI,CAAC,WAAW,EAAE;;IAGZ,cAAc,GAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAGC,uBAAe;AAI9B,iBAAA,KAAK,CAAC,IAAI,CAAC,KAAK;AAChB,iBAAA,KAAK,CACJ,MAAM,EACND,iBAAS,CAA6D,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAClF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAC3B;AAEF,iBAAA,EAAE,CAAC,MAAM,EAAE,MAAK;gBACf,IAAI,CAAC,IAAI,EAAE;AACb,aAAC;AACA,iBAAA,EAAE,CAAC,KAAK,EAAE,MAAK;gBACd,IAAI,CAAC,SAAS,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC;AAE5C,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY;AAAE,oBAAA,WAAW,EAAE;AACpD,aAAC,CAAC;YACJ,IAAI,CAAC,oBAAoB,EAAE;;;IAIvB,oBAAoB,GAAA;QAC1B,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAEjC;AAEb,QAAA,IAAI,CAAC,SAAS;YAAE;QAEhB;AACG,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;AACxC,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY;AACxC,aAAA,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC;AAEhD,QAAA,IAAI,CAAC;aACF,KAAK,CACJ,GAAG,EACHE,cAAM,CAA0B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CACjE,IAAI,CAAC,aAAa,CAAC,SAAS,CAC7B;aAEF,KAAK,CACJ,GAAG,EACHC,cAAM,CAA0B,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,CACjE,IAAI,CAAC,aAAa,CAAC,SAAS,CAC7B;AAEF,aAAA,KAAK,CACJ,QAAQ,EACRC,qBAAa;AACV,aAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc;AAC1C,aAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB;AAChD,aAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC;AAErD,aAAA,KAAK,CACJ,QAAQ,EACRC,mBAAW,CACT,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,EACxC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CACzC,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAC9C;AAEH,QAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;;AAGrB,IAAA,gBAAgB,CAAC,WAAqB,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;AACjC,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;gBAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;YAE5E;;QAGF,MAAM,QAAQ,GACZ,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;AAC5F,QAAA,MAAM,iBAAiB,GACrB,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACxE,QAAA,MAAM,iBAAiB,GACrB,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;AACxE,QAAA,IAAI,iBAAiB,IAAI,iBAAiB,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC;;AACjC,aAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAW,EAAE;YAC3D,IAAI,CAAC,UAAU,CAAC,KAAK,CACnB,SAAS,EACTC,oBAAY;AACT,iBAAA,MAAM,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AACtB,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE;oBACpC,OAAO,sBAAsB,CAC3B,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,CAAC,aAAa,EAChC,SAAS,CACV;;gBAEH,MAAM,WAAW,GAAG,sBAAsB,CACxC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB;gBACD,MAAM,MAAM,GAAG,gBAAgB,CAAC;AAC9B,oBAAA,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;oBACrD,aAAa,EAAE,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB;AACzE,oBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,qBAAqB;AAC3D,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB;oBACjD,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,iBAAA,CAAC;AAEF,gBAAA,OAAO,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB;AAC5D,aAAC;AACA,iBAAA,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,eAAe;iBAC3C,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CACpD;;;IAIG,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AAClD,YAAA,IAAI,CAAC,SAAS,GAAGC,kBAAQ,CAAC,KAAK;AAC5B,iBAAA,IAAI,CAAC,OAAO,EAAE,mDAAmD;AACjE,iBAAA,IAAI,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,SAAS;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;YACjE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;AAErC,YAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC3D,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AAEpB,YAAA,IAAI,CAAC,IAAI,GAAGA,kBAAQ,CAAC,QAAQ;iBAC1B,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK;iBACnC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM;AACrC,iBAAA,IAAI,CAAC,OAAO,EAAE,CAAA,mDAAA,CAAqD;AACnE,iBAAA,IAAI,EAAE;YAET,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;YACzD,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACrC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;YAEjD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,gBAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;AACpE,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;;;IAIlC,QAAQ,GAAA;AACd,QAAA,SAAS,wBAAwB,GAAA;AAC/B,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;YAE5B,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE;gBACxD,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB;gBAE9D,IAAI,CAAC,IAAI,CAAC,iBAAiB;oBAAE,OAAO,KAAK,qBAAqB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAEjF,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS;oBAAE;;YAEpC,IAAI,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE;gBACvD,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe;gBAE5D,IAAI,CAAC,IAAI,CAAC,iBAAiB;oBAAE,OAAO,KAAK,qBAAqB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAEjF,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS;oBAAE;;AAGpC,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;gBACnF,OAAO,KAAK,qBAAqB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;;YAGtD,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE;gBACzD,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,EAAE;AACrD,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,oBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAC3B,oBAAA,IAAI,CAAC,SAAS,GAAG,EAAE;oBAEnB,IAAI,CAAC,IAAI,CAAC,iBAAiB;wBAAE,OAAO,KAAK,qBAAqB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;;;AAIrF,YAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;;AAG/B,QAAA,SAAS,IAAI,GAAA;YACX,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE;AACnB,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;AAExB,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;gBACzB,IAAI,CAAC,SAAS,CAAC,MAAM,CACnB,KAAK,EACL,CAAC,MAAM,KAAI;AACT,oBAAA,IAAI,CAAC,gBAAgB,GAAG,MAAM;iBAC/B,EACD,MAAK;oBACH,IAAI,IAAI,CAAC,oBAAoB;AAAE,wBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;oBAC/D,IAAI,IAAI,CAAC,eAAe;AAAE,wBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AACvD,iBAAC,CACF;gBAED;;AAGF,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;AACrD,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAClE,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAE9D,MAAM,WAAW,GAAmB,EAAE;YACtC,MAAM,WAAW,GAAmB,EAAE;AACtC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAG3E,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YAIjD,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACzC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;AAEzC,YAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YAEtB,IAAI,CAAC,SAAS,CAAC,cAAc,GAAG,KAAK,CAAC;AAEtC,YAAA,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;;QAGvC,SAAS,WAAW,CAAC,KAAqC,EAAA;AACxD,YAAA,OAAO,SAAS,QAAQ,CAEtB,IAAuC,EACvC,KAAa,EAAA;gBAEb,IACE,CAAC,IAAI,CAAC,OAAO;AACb,oBAAA,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;AAC/B,oBAAA,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;AAC/B,oBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,oBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,oBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACd,oBAAA,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAEd;AAEF,gBAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ;oBAAE;AAEpD,gBAAA,MAAM,EAAE,GAAG,CAAG,EAAA,IAAI,CAAC,MAAM,CAAC,EAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AAC/C,gBAAA,IAAI,WAA+D;AACnE,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE;AACxD,oBAAA,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;;qBAClC;oBACL,WAAW,GAAG,sBAAsB,CAClC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB;AACD,oBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;AAC3B,wBAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,GAAG,WAAW;;;AAI3C,gBAAA,IAAI,WAAW,CAAC,QAAQ,EAAE;oBACxB,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC;oBAE9C;;AAGF,gBAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK;AAC7B,gBAAA,IAAI,UAAU,GAAG,WAAW,CAAC,kBAAkB,GAAG,CAAC,GAAG,WAAW,CAAC,UAAU;gBAC5E,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,EAAE;;oBAErD,IACE,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE;wBACzC,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EACzC;AACA,wBAAA,IAAI,WAAW,CAAC,eAAe,EAAE;4BAC/B,MAAM,GAAG,GACP,IAAI,CAAC,aAAa,CAAC,sBAAsB,GAAG;AAC1C,kCAAE,IAAI,CAAC,aAAa,CAAC;kCACnB,KAAK;AACX,4BAAA,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;;wBAE3E,IACE,WAAW,CAAC,KAAK;AACjB,4BAAA,WAAW,CAAC,oBAAoB;AAChC,4BAAA,CAAC,WAAW,CAAC,kBAAkB,EAC/B;4BACA,MAAM,GAAG,GACP,IAAI,CAAC,aAAa,CAAC,uBAAuB,GAAG;AAC3C,kCAAE,IAAI,CAAC,aAAa,CAAC;kCACnB,UAAU;AAChB,4BAAA,UAAU,GAAG,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;;;yBAEhF;;wBAEL,IAAI,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,kBAAkB,EAAE;;AAEvD,4BAAA,UAAU,GAAG,mBAAmB,CAAC,CAAC,EAAE,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,iBAAiB,CAAC;;;;;AAMzF,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAExB,gBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK;gBAChC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK;gBAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,KAAK;AAE1C,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,gBAAA,IAAI,WAAW,CAAC,MAAM,EAAE;oBACtB,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC;oBAEtD,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,6BAA6B,CACtD,IAAI,EACJ,UAAU,GAAG,WAAW,CAAC,SAAS,GAAG,CAAC,CACvC,IAAI;AACH,wBAAA,EAAE,EAAE,CAAC;AACL,wBAAA,EAAE,EAAE,CAAC;AACL,wBAAA,EAAE,EAAE,CAAC;AACL,wBAAA,EAAE,EAAE,CAAC;qBACN;oBAED,MAAM,GAAG,EAAE;oBACX,IAAI,GAAG,EAAE;oBACT,MAAM,GAAG,EAAE;oBACX,IAAI,GAAG,EAAE;;gBAGX,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;gBACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AAC/B,gBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;AAGrB,gBAAA,IACE,IAAI,CAAC,YAAY,CAAC,SAAS;AAC3B,oBAAA,IAAI,CAAC,eAAe;qBACnB,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAC1F;oBACA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE;AACvB,wBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;AAC/B,wBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;wBAC/B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,KAAI;4BAClF,OAAO;AACL,gCAAA,IAAI,EAAE,CAAC;gCACP,IAAI,EAAE,KAAK,IAAI,WAAW,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;gCACrE,QAAQ;gCACR,QAAQ;6BACT;AACH,yBAAC,CAAoB;;oBAEvB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;wBACtC,IAAI,CAAC,IAAI,CAAC,OAAO;4BAAE;AAEnB,wBAAA,mBAAmB,CAAC;4BAClB,QAAQ;4BACR,UAAU,EAAE,WAAW,CAAC,aAAa;4BACrC,IAAI;4BACJ,MAAM;4BACN,IAAI;4BACJ,MAAM;AACP,yBAAA,CAAC;AACF,wBAAA,IAAI,QAAQ,CAAC,CAAC,IAAI,SAAS,IAAI,QAAQ,CAAC,CAAC,IAAI,SAAS,EAAE;AACtD,4BAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;4BACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,cAAc,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;4BACpF,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,aAAa;AAClD,4BAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,4BAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;AAEzB,qBAAC,CAAC;;;gBAIJ,IAAI,WAAW,CAAC,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE;oBACvC,MAAM,EACJ,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,IAAI,EACR,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,IAAI,GACT,GAAG,6BAA6B,CAAC,IAAI,CAAC,IAAI;AACzC,wBAAA,EAAE,EAAE,CAAC;AACL,wBAAA,EAAE,EAAE,CAAC;AACL,wBAAA,EAAE,EAAE,CAAC;AACL,wBAAA,EAAE,EAAE,CAAC;qBACN;AAED,oBAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;AACtD,oBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,oBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,UAAU;oBACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;AAC/B,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CACjB,IAAI,GAAG,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAC5D,IAAI,GAAG,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAC7D;AACD,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CACjB,IAAI,GAAG,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAC5D,IAAI,GAAG,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAC7D;AACD,oBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;oBACxB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,UAAU;AAC/C,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;;AAGvB,gBAAA,IAAI,WAAW,CAAC,aAAa,EAAE;AAC7B,oBAAA,WAAW,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,GAAG,WAAW,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC;;AAErE,aAAC;;AAGH,QAAA,SAAS,WAAW,CAClB,WAA2B,EAC3B,WAA2B,EAC3B,KAAqC,EAAA;AAErC,YAAA,OAAO,SAAS,QAAQ,CAEtB,IAA6B,EAC7B,KAAa,EAAA;AAEb,gBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAAE;AAEzC,gBAAA,IAAI,WAA+D;AACnE,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;oBAC7D,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;;qBACvC;oBACL,WAAW,GAAG,sBAAsB,CAClC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,KAAK,EACL,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB;AACD,oBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE;wBAC3B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,WAAW;;;AAIhD,gBAAA,IAAI,WAAW,CAAC,QAAQ,EAAE;AACxB,oBAAA,WAAW,CAAC,IAAI,CAAC,MAAK;wBACpB,WAAW,EAAE,QAAQ,GAAG,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC;AACnD,qBAAC,CAAC;oBAEF;;AAGF,gBAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK;AAC7B,gBAAA,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK;gBAC7B,IAAI,aAAa,GAAG,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB;AAC9E,gBAAA,IAAI,SAAS,GAAG,WAAW,CAAC,SAAS;AACrC,gBAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,QAAQ;AACnC,gBAAA,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU;AACvC,gBAAA,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU;AACvC,gBAAA,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU;AACvC,gBAAA,IAAI,SAAS,GAAG,WAAW,CAAC,SAAS;gBACrC,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,EAAE;;oBAErD,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,EAAE;AACjF,wBAAA,IAAI,WAAW,CAAC,eAAe,EAAE;4BAC/B,MAAM,GAAG,GACP,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG;AACtC,kCAAE,IAAI,CAAC,aAAa,CAAC;kCACnB,KAAK;AACX,4BAAA,KAAK,GAAG,mBAAmB,CAAC,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;;AAE3E,wBAAA,IAAI,WAAW,CAAC,mBAAmB,EAAE;4BACnC,MAAM,GAAG,GACP,IAAI,CAAC,aAAa,CAAC,sBAAsB,GAAG;AAC1C,kCAAE,IAAI,CAAC,aAAa,CAAC;kCACnB,SAAS;AACf,4BAAA,SAAS,GAAG,mBAAmB,CAAC,GAAG,EAAE,SAAS,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC;;AAEnF,wBAAA,IAAI,WAAW,CAAC,cAAc,EAAE;4BAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;4BAC9C,IAAI,QAAQ,EAAE;AACZ,gCAAA,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC;AAClF,gCAAA,MAAM,kBAAkB,GAAG,sBAAsB,CAC/C,QAAQ,EACR,YAAY,EACZ,IAAI,CAAC,iBAAiB,CACvB;AACD,gCAAA,KAAK,GAAG,CAAA,IAAA,EAAO,kBAAkB,CAAC,CAAC,CAAK,EAAA,EAAA,kBAAkB,CAAC,CAAC,CAAK,EAAA,EAAA,kBAAkB,CAAC,CAAC,GAAG;;;;AAGvF,yBAAA,IACL,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB;AACrC,yBAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,EAC7E;;AAGA,wBAAA,IAAI,WAAW,CAAC,eAAe,EAAE;AAC/B,4BAAA,aAAa,GAAG,mBAAmB,CACjC,aAAa,EACb,IAAI,CAAC,aAAa,CAAC,yBAAyB,EAC5C,IAAI,CAAC,iBAAiB,CACvB;;AAEH,wBAAA,IAAI,WAAW,CAAC,mBAAmB,EAAE;AACnC,4BAAA,QAAQ,GAAG,mBAAmB,CAC5B,QAAQ,EACR,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAChD,IAAI,CAAC,iBAAiB,CACvB;AACD,4BAAA,UAAU,GAAG,mBAAmB,CAC9B,UAAU,EACV,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAChD,IAAI,CAAC,iBAAiB,CACvB;AACD,4BAAA,UAAU,GAAG,mBAAmB,CAC9B,UAAU,EACV,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAChD,IAAI,CAAC,iBAAiB,CACvB;AACD,4BAAA,UAAU,GAAG,mBAAmB,CAC9B,UAAU,EACV,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAChD,IAAI,CAAC,iBAAiB,CACvB;AACD,4BAAA,SAAS,GAAG,mBAAmB,CAC7B,SAAS,EACT,IAAI,CAAC,aAAa,CAAC,4BAA4B,EAC/C,IAAI,CAAC,iBAAiB,CACvB;;;;gBAKP,MAAM,MAAM,GAAG,gBAAgB,CAAC;AAC9B,oBAAA,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;oBACrD,aAAa;AACb,oBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,qBAAqB;AAC3D,oBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB;oBACjD,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,iBAAA,CAAC;AAEF,gBAAA,IAAI,CAAC,OAAO,GAAG,MAAM;gBACrB,IACE,CAAC,aAAa,CAAC;oBACb,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,CAAC,EAAE,IAAI,CAAC,CAAC;oBACT,MAAM;oBACN,SAAS,EAAE,IAAI,CAAC,aAAa;AAC9B,iBAAA,CAAC,EACF;AACA,oBAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;oBAErB;;AAEF,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AAEpB,gBAAA,WAAW,CAAC,IAAI,CAAC,MAAK;AACpB,oBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAAE;AAEzC,oBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AAExB,oBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,KAAK;;oBAGhC,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,WAAW,CAAC,WAAW;oBAChD,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW;AAClD,oBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK;oBAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAExD,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AACnB,oBAAA,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;AACvB,iBAAC,CAAC;;gBAGF,IAAI,WAAW,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE;AAC/C,oBAAA,WAAW,CAAC,IAAI,CAAC,MAAK;AACpB,wBAAA,IAAI,WAAW,CAAC,QAAQ,EAAE;AACxB,4BAAA,WAAW,CAAC,QAAQ,CAClB,IAAI,EACJ;AACE,gCAAA,GAAG,WAAW;gCACd,MAAM;gCACN,KAAK;gCACL,KAAK;gCACL,SAAS;gCACT,QAAQ;gCACR,UAAU;gCACV,UAAU;gCACV,UAAU;gCACV,SAAS;6BACV,EACD,KAAK,CACN;4BAED;;AAGF,wBAAA,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;4BAAE;AAC9D,wBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;AACxB,wBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,SAAS;AAEpC,wBAAA,QAAQ,CAAC;4BACP,EAAE,EAAE,IAAI,CAAC,EAAE;4BACX,cAAc,EAAE,IAAI,CAAC,cAAc;4BACnC,OAAO,EAAE,IAAI,CAAC,OAAO;4BACrB,IAAI,EAAE,WAAW,CAAC,IAAI;4BACtB,SAAS,EAAE,WAAW,CAAC,SAAS;4BAChC,SAAS,EAAE,WAAW,CAAC,SAAS;4BAChC,QAAQ,EAAE,WAAW,CAAC,QAAQ;4BAC9B,QAAQ;AACR,4BAAA,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,UAAU;AACtB,4BAAA,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,MAAM,GAAG,UAAU;AAC/B,4BAAA,QAAQ,EAAE,SAAS;4BACnB,SAAS,EAAE,WAAW,CAAC,SAAS;4BAChC,UAAU;4BACV,OAAO,EAAE,WAAW,CAAC,OAAO;AAC7B,yBAAA,CAAC;AAEF,wBAAA,IAAI,WAAW,CAAC,aAAa,EAAE;AAC7B,4BAAA,WAAW,CAAC,aAAa,CACvB,IAAI,EACJ;AACE,gCAAA,GAAG,WAAW;gCACd,MAAM;gCACN,KAAK;gCACL,KAAK;gCACL,SAAS;gCACT,QAAQ;gCACR,UAAU;gCACV,UAAU;gCACV,UAAU;gCACV,SAAS;6BACV,EACD,KAAK,CACN;;AAEL,qBAAC,CAAC;;AAGJ,gBAAA,IAAI,WAAW,CAAC,aAAa,EAAE;AAC7B,oBAAA,WAAW,CAAC,IAAI,CAAC,MAAK;AACpB,wBAAA,WAAW,EAAE,aAAa,GACxB,IAAI,EACJ;AACE,4BAAA,GAAG,WAAW;4BACd,MAAM;4BACN,KAAK;4BACL,KAAK;4BACL,SAAS;4BACT,QAAQ;4BACR,UAAU;4BACV,UAAU;4BACV,UAAU;4BACV,SAAS;yBACV,EACD,KAAK,CACN;AACH,qBAAC,CAAC;;AAEN,aAAC;;AAGH,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE;AACnC,YAAA,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC;;AAG/E,QAAA,OAAO,IAAI;;IAGL,UAAU,GAAA;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;QAEhD,IAAI,iBAAiB,GAAG,IAAI;AAE5B,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB;AACjD,QAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,MAAK;YACvC,IAAI,iBAAiB,EAAE;gBACrB,iBAAiB,GAAG,KAAK;gBAEzB;;AAGF,YAAA,IAAI,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE;gBAClC,QAAQ,CAAC,UAAU,EAAE;gBAErB;;YAGF,qBAAqB,CAAC,MAAK;gBACzB,IAAI,CAAC,UAAU,EAAE;AACnB,aAAC,CAAC;AACJ,SAAC,CAAC;AACF,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;IAGrB,WAAW,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;;QAGnF,IAAI,CAAC,IAAI,CAAC,gBAAgB,CACxB,aAAa,EACb,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,WAAgD;YAEpD,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC3D,WAAW,GAAG,mBAAmB,CAAC;oBAChC,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,oBAAA,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,iBAAA,CAAC;gBACF,IAAI,WAAW,IAAI,IAAI,CAAC,eAAe,KAAK,WAAW,EAAE;AACvD,oBAAA,IAAI,CAAC,eAAe,GAAG,WAAW;AAClC,oBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,IAAI,EAAE,CAAC;AAC1E,oBAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI;oBAE5B,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB;wBACnD,qBAAqB,CAAC,MAAK;4BACzB,IAAI,CAAC,IAAI,EAAE;AACb,yBAAC,CAAC;;AACC,qBAAA,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,eAAe,EAAE;AAC/C,oBAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;oBAC7B,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB;wBACnD,qBAAqB,CAAC,MAAK;4BACzB,IAAI,CAAC,IAAI,EAAE;AACb,yBAAC,CAAC;;;AAIR,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;gBAAE;AAE5B,YAAA,IAAI,CAAC,WAAW;gBACd,WAAW,GAAG,mBAAmB,CAAC;oBAChC,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,oBAAA,UAAU,EAAE,KAAK;oBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,iBAAA,CAAC;YAEJ,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC;AACvD,SAAC,EACD;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACzC,SAAA,CACF;;QAGD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC,KAAK,KAAI;AAC/C,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa;gBAAE;YAEnC,MAAM,WAAW,GAAG,mBAAmB,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,gBAAA,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;YAEF,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;AAC9D,SAAC,CAAC;;QAGF,IAAI,CAAC,IAAI,CAAC,gBAAgB,CACxB,WAAW,EACX,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE;YAC3E,MAAM,WAAW,GAAG,mBAAmB,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,gBAAA,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;YAEF,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC;AAC7D,SAAC,EACD;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACzC,SAAA,CACF;;QAGD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CACxB,OAAO,EACP,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE;YACtE,MAAM,WAAW,GAAG,mBAAmB,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,gBAAA,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;YAEF,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;AACxD,SAAC,EACD;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACzC,SAAA,CACF;;QAGD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CACxB,aAAa,EACb,CAAC,KAAK,KAAI;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa;gBAAE;YAEnC,MAAM,WAAW,GAAG,mBAAmB,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,aAAa;AACjC,gBAAA,UAAU,EAAE,KAAK;gBACjB,KAAK,EAAE,IAAI,CAAC,KAAK;AAClB,aAAA,CAAC;YAEF,OAAO,KAAK,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC;AAC9D,SAAC,EACD;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,oBAAoB,CAAC,MAAM;AACzC,SAAA,CACF;;IAGK,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;QAEnFC,kBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CACtBC,WAAM;AACH,aAAA,OAAO,CAAC,CAAC,KAAmC,KAAI;AAC/C,YAAA,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;;YAGxD,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;AAEpB,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAyB;AAClD,YAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;YAEzF,IAAI,KAAK,GAAG,CAAC;YAEb,OAAOX,gBAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,KAAI;gBACnC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAKY,mBAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAE,oBAAA,OAAO,SAAS;AAEhF,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO;gBACzB,IAAI,CAAC,MAAM,EAAE;oBACX,MAAM,WAAW,GAAG,sBAAsB,CACxC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,EAAE,EAC/B,iBAAiB,CAClB;oBAED,MAAM,GAAG,gBAAgB,CAAC;AACxB,wBAAA,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;wBACrD,aAAa,EAAE,WAAW,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,iBAAiB;AACzE,wBAAA,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,qBAAqB;AAC3D,wBAAA,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB;wBACjD,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,qBAAA,CAAC;;AAGJ,gBAAA,KAAK,EAAE;AAEP,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;AAClF,aAAC,CAAC;AACJ,SAAC;AACA,aAAA,EAAE,CAAC,OAAO,EAAE,CAAC,KAAmC,KAAI;AACnD,YAAA,IAAI,CAAC,SAAS,CAAC,mBAAmB,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AACzD,SAAC;AACA,aAAA,EAAE,CAAC,MAAM,EAAE,CAAC,KAAmC,KAAI;AAClD,YAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI;gBACtB,IAAI,IAAI,CAAC,UAAU;oBAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE;;YAGjE,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE;AACpB,YAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAyB;AAClD,YAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC;AACzF,YAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ;AAC3B,YAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ;AAE3B,YAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AACxD,SAAC;AACA,aAAA,EAAE,CAAC,KAAK,EAAE,CAAC,KAAmC,KAAI;AACjD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;AAEvB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU;AAAE,gBAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;YAEpE,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACtD,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE;AACpB,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAyB;AAClD,gBAAA,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,aAAa,CACxC,UAAU,EACV,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,aAAa,CACnB;AACD,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ;AAC3B,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ;;iBACtB;AACL,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI;AACvB,gBAAA,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI;;AAGzB,YAAA,IAAI,CAAC,SAAS,CAAC,iBAAiB,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;SACtD,CAAC,CACL;;AAGK,IAAA,QAAQ,CAAC,WAA2B,EAAA;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC;QAEhD,MAAM,YAAY,GAAGC,WAAI;AACtB,aAAA,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU;AACzC,aAAA,EAAE,CAAC,MAAM,EAAE,CAAC,KAAyB,KAAI;YACxC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;AAC9B,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,SAAS;AACpC,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAC1B,YAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;YAE1B,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,gBAAgB;gBACnD,qBAAqB,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5C,SAAC,CAAC;AAEJ,QAAA,IAAI,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAC5C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B;YACjE,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,GAAGC,iBAAO,CAAC,WAAW;AACtD,kBAAE;AACF,kBAAE,CAAC,WAAW,EAAE,WAAW,CAAC;YAE9B,MAAM,CACJ,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,YAAY,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,EACvE,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,EACtE,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe;YAEtC,YAAY,CAAC,eAAe,CAAC;gBAC3B,CAAC,IAAI,EAAE,IAAI,CAAC;gBACZ,CAAC,IAAI,EAAE,IAAI,CAAC;AACb,aAAA,CAAC;;AAGJ,QAAAJ,kBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC;QAEhE,MAAM,WAAW,GAAG,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW;AACjE,QAAA,IAAI,CAAC,aAAa,GAAG,IAAIK,oBAAa,CACpC,WAAW,EAAE,CAAC,IAAI,CAAC,EACnB,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAChC,WAAW,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAClC;AACD,QAAAF,WAAI,EAA8B,CAAC,SAAS,CAACH,kBAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;;AAExF;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/lib/check-type.ts","../../src/lib/color-getter.ts","../../src/lib/color-to-rgb.ts","../../src/lib/extract-rgb.ts","../../src/lib/fade-rgb.ts","../../src/lib/rgb-animation-by-progress.ts","../../src/module/GraphCanvas/lib/settings/force-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/graph-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/link-settings-getter.ts","../../src/module/GraphCanvas/lib/settings/listeners-getter.ts","../../src/module/GraphCanvas/lib/settings/node-settings-getter.ts","../../src/module/GraphCanvas/lib/utils/pointer-getter.ts","../../src/module/GraphCanvas/lib/utils/is-overlaps-node.ts","../../src/module/GraphCanvas/lib/utils/drag-place-coefficient-getter.ts","../../src/module/GraphCanvas/lib/utils/link-iteration-extractor.ts","../../src/module/GraphCanvas/lib/utils/node-by-pointer-getter.ts","../../src/module/GraphCanvas/lib/utils/node-iteration-extractor.ts","../../src/module/GraphCanvas/lib/utils/draw-text.ts","../../src/module/GraphCanvas/lib/utils/calculate-link-position-by-radius.ts","../../src/module/GraphCanvas/lib/utils/animation-by-progress.ts","../../src/module/GraphCanvas/lib/utils/is-node-visible.ts","../../src/module/GraphCanvas/lib/utils/get-particle-position.ts","../../src/module/GraphCanvas/constants/settings.ts","../../src/lib/get-controls-info.ts","../../src/lib/draw-time.ts","../../src/module/GraphCanvas/GraphCanvas.ts"],"sourcesContent":["export function checkType<T>(value: unknown, condition: boolean): value is T {\n return condition;\n}\n","export function colorGetter() {\n const chosenColors: Record<string, string> = {};\n const colors = [\n \"#1f77b4\",\n \"#ff7f0e\",\n \"#2ca02c\",\n \"#d62728\",\n \"#9467bd\",\n \"#8c564b\",\n \"#e377c2\",\n \"#7f7f7f\",\n \"#bcbd22\",\n \"#17becf\",\n ];\n let cursor = 0;\n\n return function color(key: string) {\n if (chosenColors[key]) return chosenColors[key];\n\n chosenColors[key] = colors[cursor];\n cursor++;\n\n if (cursor >= colors.length) cursor = 0;\n\n return chosenColors[key];\n };\n}\n","import {\n COLOR_FORMATS,\n getColorFormat,\n transformHEXtoRGB,\n transformRGBAtoRGB,\n} from \"@krainovsd/js-helpers\";\n\nexport function colorToRgb(color: string) {\n const format = getColorFormat(color);\n\n switch (format) {\n case COLOR_FORMATS.Hex: {\n return transformHEXtoRGB(color);\n }\n case COLOR_FORMATS.Rgb: {\n return color;\n }\n case COLOR_FORMATS.Rgba: {\n return transformRGBAtoRGB(color);\n }\n default: {\n return null;\n }\n }\n}\n","export function extractRgb(color: string | null) {\n if (!color) return null;\n\n const code = color.match(/\\d+/g);\n\n if (!code) return null;\n\n return {\n r: +code[0],\n g: +code[1],\n b: +code[2],\n };\n}\n","import type { RGB } from \"@/module/GraphCanvas\";\n\nexport function fadeRgb(color: RGB, fade: number): RGB {\n const gray = (color.r + color.g + color.b) / 3;\n\n return {\n r: color.r * fade + gray * (1 - fade),\n g: color.g * fade + gray * (1 - fade),\n b: color.b * fade + gray * (1 - fade),\n };\n}\n","import type { RGB } from \"@/module/GraphCanvas\";\n\nexport function rgbAnimationByProgress(start: RGB, end: RGB, progress: number): RGB {\n return {\n r: start.r + (end.r - start.r) * progress,\n g: start.g + (end.g - start.g) * progress,\n b: start.b + (end.b - start.b) * progress,\n };\n}\n","import { FORCE_SETTINGS } from \"../../constants\";\nimport type { ForceSettingsInterface } from \"../../types\";\n\nexport function forceSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: ForceSettingsInterface<NodeData, LinkData> | undefined,\n prevSettings?: Required<ForceSettingsInterface<NodeData, LinkData>>,\n): Required<ForceSettingsInterface<NodeData, LinkData>> {\n return {\n ...(prevSettings ?? (FORCE_SETTINGS as Required<ForceSettingsInterface<NodeData, LinkData>>)),\n ...settings,\n };\n}\n","import { GRAPH_SETTINGS } from \"../../constants\";\nimport type { GraphSettingsInterface } from \"../../types\";\n\nexport function graphSettingsGetter<NodeData extends Record<string, unknown>>(\n settings: GraphSettingsInterface<NodeData> | undefined,\n prevSettings?: Required<GraphSettingsInterface<NodeData>>,\n): Required<GraphSettingsInterface<NodeData>> {\n return {\n ...(prevSettings ?? GRAPH_SETTINGS),\n ...settings,\n };\n}\n","import type { LinkInterface } from \"@/types\";\nimport { COMMON_SETTINGS, LINK_OPTIONS, LINK_SETTINGS } from \"../../constants\";\nimport type { GraphState, LinkOptionsInterface, LinkSettingsInterface } from \"../../types\";\n\nexport function linkSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: LinkSettingsInterface<NodeData, LinkData> | undefined,\n prevSettings?: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\">,\n): Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\"> {\n return { ...(prevSettings ?? LINK_SETTINGS), ...settings };\n}\n\nexport function linkOptionsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n _: LinkInterface<NodeData, LinkData>,\n __: number,\n ___: LinkInterface<NodeData, LinkData>[],\n state?: GraphState<NodeData, LinkData>,\n): Required<LinkOptionsInterface<NodeData, LinkData>> {\n return {\n ...LINK_OPTIONS,\n drawExtraLink: null,\n drawLink: null,\n color:\n state?.areaTransform && state?.areaTransform.k > COMMON_SETTINGS.linkColorZoomBorder\n ? COMMON_SETTINGS.linkColorZoomNear\n : COMMON_SETTINGS.linkColorZoomFar,\n arrowColor:\n state?.areaTransform && state?.areaTransform.k > COMMON_SETTINGS.linkColorZoomBorder\n ? COMMON_SETTINGS.linkColorZoomNear\n : COMMON_SETTINGS.linkColorZoomFar,\n width:\n state?.areaTransform && state?.areaTransform.k > COMMON_SETTINGS.linkWidthZoomBorder\n ? COMMON_SETTINGS.linkWidthZoomNear\n : COMMON_SETTINGS.linkWidthZoomFar,\n };\n}\n","import type { ListenersInterface } from \"../../types\";\n\nexport function listenersGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: ListenersInterface<NodeData, LinkData> | undefined,\n): ListenersInterface<NodeData, LinkData> {\n return settings ?? {};\n}\n","import type { ZoomTransform } from \"d3-zoom\";\nimport { colorGetter } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport { COMMON_SETTINGS, NODE_OPTIONS, NODE_SETTINGS } from \"../../constants\";\nimport type { GraphState, NodeOptionsInterface, NodeSettingsInterface } from \"../../types\";\n\nexport function nodeSettingsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n settings: NodeSettingsInterface<NodeData, LinkData> | undefined,\n prevNodeSettings?: Required<Omit<NodeSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData, LinkData>, \"options\">,\n): Required<Omit<NodeSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData, LinkData>, \"options\"> {\n return {\n ...(prevNodeSettings ?? NODE_SETTINGS),\n idGetter: nodeIdGetter,\n ...settings,\n };\n}\n\nconst color = colorGetter();\n\nexport function nodeOptionsGetter<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(\n node: NodeInterface<NodeData>,\n _: number,\n __: NodeInterface<NodeData>[],\n state?: GraphState<NodeData, LinkData>,\n): Required<NodeOptionsInterface<NodeData, LinkData>> {\n const { textShiftY, textSize } = nodeTextSizeGetter(state?.areaTransform);\n\n return {\n ...NODE_OPTIONS,\n nodeDraw: null,\n nodeExtraDraw: null,\n textDraw: null,\n textExtraDraw: null,\n color: color(String(node.group ?? \"_DEFAULT\")),\n textVisible: Boolean(\n state?.areaTransform && state.areaTransform.k > COMMON_SETTINGS.nodeTextScaleMin,\n ),\n text: node.name ?? node.id.toString(),\n textShiftY,\n textSize,\n };\n}\n\nexport function nodeTextSizeGetter(transform: ZoomTransform | undefined) {\n let textSize: number = COMMON_SETTINGS.nodeTextSizeMax;\n let textShiftY: number = COMMON_SETTINGS.nodeTextShiftYMax;\n\n if (transform) {\n const scaleStepCoefficient =\n (COMMON_SETTINGS.nodeTextScaleMax - COMMON_SETTINGS.nodeTextScaleMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n const textStepCoefficient =\n (COMMON_SETTINGS.nodeTextSizeMax - COMMON_SETTINGS.nodeTextSizeMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n const shiftStepCoefficient =\n (COMMON_SETTINGS.nodeTextShiftYMax - COMMON_SETTINGS.nodeTextShiftYMin) /\n COMMON_SETTINGS.nodeTextChangeStepCount;\n\n if (transform.k >= COMMON_SETTINGS.nodeTextScaleMax) {\n textSize = COMMON_SETTINGS.nodeTextSizeMin;\n textShiftY = COMMON_SETTINGS.nodeTextShiftYMin;\n } else if (transform.k > COMMON_SETTINGS.nodeTextScaleMin) {\n const transformSteps =\n (transform.k - COMMON_SETTINGS.nodeTextScaleMin) / scaleStepCoefficient;\n\n textSize -= transformSteps * textStepCoefficient;\n textShiftY -= transformSteps * shiftStepCoefficient;\n }\n }\n\n return { textSize, textShiftY };\n}\n\nexport type NodeRadiusGetterOptions = {\n linkCount: number | undefined;\n radiusFlexible: boolean;\n radiusCoefficient: number;\n radiusFactor: number;\n radiusInitial: number;\n};\n\nexport function nodeRadiusGetter({\n radiusFlexible,\n radiusInitial,\n linkCount,\n radiusCoefficient,\n radiusFactor,\n}: NodeRadiusGetterOptions) {\n return (\n (radiusFlexible && linkCount ? linkCount / radiusCoefficient : 0) * radiusFactor + radiusInitial\n );\n}\n\nexport function nodeIdGetter<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n) {\n return node.id;\n}\n","import type { ZoomTransform } from \"d3-zoom\";\n\nexport function pointerGetter(\n mouseEvent: MouseEvent,\n areaRect: DOMRect,\n areaTransform: ZoomTransform,\n) {\n const px = (mouseEvent.clientX - areaRect.left - areaTransform.x) / areaTransform.k;\n const py = (mouseEvent.clientY - areaRect.top - areaTransform.y) / areaTransform.k;\n\n return [px, py];\n}\n","import type { NodeInterface } from \"@/types\";\n\nexport function isOverlapsNode<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n radius: number,\n pointerX: number,\n pointerY: number,\n) {\n if (node.x == undefined || node.y == undefined) return false;\n\n const isOverX = node.x - radius <= pointerX && pointerX <= node.x + radius;\n const isOverY = node.y - radius <= pointerY && pointerY <= node.y + radius;\n\n return isOverX && isOverY;\n}\n","import type { NodeInterface } from \"@/types\";\nimport { isOverlapsNode } from \"./is-overlaps-node\";\n\nexport function dragPlaceCoefficientGetter<NodeData extends Record<string, unknown>>(\n node: NodeInterface<NodeData>,\n pointerX: number,\n pointerY: number,\n radius: number,\n): number | undefined {\n if (!node.x || !node.y) return undefined;\n\n if (isOverlapsNode(node, radius, pointerX, pointerY)) return node.index;\n}\n","import { checkType } from \"@/lib\";\nimport type { LinkInterface } from \"@/types\";\nimport type { GraphState, LinkIterationPropsInterface } from \"../../types\";\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n state: GraphState<NodeData, LinkData>,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n state: GraphState<NodeData, LinkData>,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | LinkIterationPropsInterface<NodeData, LinkData, Required<Result>>\n | Required<Result>,\n): Required<Result>;\n\nexport function linkIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[],\n>(\n link: LinkInterface<NodeData, LinkData>,\n i: number,\n links: LinkInterface<NodeData, LinkData>[],\n state: GraphState<NodeData, LinkData>,\n option: LinkIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | LinkIterationPropsInterface<NodeData, LinkData, Required<Result>>\n | Required<Result>\n | undefined,\n): Result {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(link, i, links, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(link, i, links, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n","import { greatest } from \"d3-array\";\nimport type { ZoomTransform } from \"d3-zoom\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphSettingsInterface } from \"../../types\";\nimport { nodeRadiusGetter } from \"../settings\";\nimport { isOverlapsNode } from \"./is-overlaps-node\";\nimport { pointerGetter } from \"./pointer-getter\";\n\nexport type NodeByPointerGetterOptions<NodeData extends Record<string, unknown>> = {\n mouseEvent: MouseEvent;\n areaRect: DOMRect | undefined;\n areaTransform: ZoomTransform;\n nodes: NodeInterface<NodeData>[];\n graphSettings: Required<GraphSettingsInterface<NodeData>>;\n};\n\nexport function nodeByPointerGetter<NodeData extends Record<string, unknown>>({\n areaRect,\n areaTransform,\n mouseEvent,\n nodes,\n graphSettings,\n}: NodeByPointerGetterOptions<NodeData>): NodeInterface<NodeData> | undefined {\n if (!areaRect) return undefined;\n\n const [pointerX, pointerY] = pointerGetter(mouseEvent, areaRect, areaTransform);\n\n return greatest(nodes, (node) => {\n const radius =\n node._radius ??\n nodeRadiusGetter({\n radiusFlexible: graphSettings.nodeRadiusFlexible,\n radiusInitial: graphSettings.nodeRadiusInitial,\n radiusCoefficient: graphSettings.nodeRadiusCoefficient,\n radiusFactor: graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n if (isOverlapsNode(node, radius, pointerX, pointerY)) return node.index;\n });\n}\n","import { checkType } from \"@/lib\";\nimport type { NodeInterface } from \"@/types\";\nimport type { GraphState, NodeIterationPropsInterface } from \"../../types\";\n\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: undefined,\n): Result;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n): Required<Result>;\nexport function nodeIterationExtractor<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n Result extends string | number | boolean | Record<string, unknown> | unknown[] | undefined | null,\n>(\n node: NodeInterface<NodeData>,\n i: number,\n nodes: NodeInterface<NodeData>[],\n state: GraphState<NodeData, LinkData>,\n option: NodeIterationPropsInterface<NodeData, LinkData, Result> | Result,\n optionConstantGetter:\n | NodeIterationPropsInterface<NodeData, LinkData, Result>\n | Result\n | undefined,\n) {\n let customOptions: Result | undefined;\n let constantOptions: Result | undefined;\n\n if (typeof option === \"function\") customOptions = option(node, i, nodes, state);\n else customOptions = option;\n\n if (customOptions && typeof customOptions === \"object\" && !Array.isArray(customOptions)) {\n for (const key in customOptions) {\n if (customOptions[key] === undefined) delete customOptions[key];\n }\n }\n\n if (optionConstantGetter) {\n if (typeof optionConstantGetter === \"function\")\n constantOptions = optionConstantGetter(node, i, nodes, state);\n else constantOptions = optionConstantGetter;\n\n if (\n constantOptions &&\n typeof constantOptions === \"object\" &&\n !Array.isArray(constantOptions) &&\n checkType<Record<string, unknown> | undefined>(\n customOptions,\n customOptions === undefined ||\n (typeof customOptions === \"object\" && !Array.isArray(customOptions)),\n )\n ) {\n return {\n ...(constantOptions as Record<string, unknown> | undefined),\n ...(customOptions as Record<string, unknown> | undefined),\n } as Result;\n }\n }\n\n return customOptions;\n}\n","import type { CachedNodeTextInterface } from \"@/types\";\nimport type { TextStyleEnum } from \"../../types\";\n\nexport type DrawTextOptions = {\n id: string | number;\n x: number;\n y: number;\n text: string;\n textSize: number;\n textStyle: TextStyleEnum;\n textWeight: number;\n textFont: string;\n textColor: string;\n textGap: number;\n textAlign: CanvasTextAlign;\n context: CanvasRenderingContext2D;\n cachedNodeText: CachedNodeTextInterface;\n maxWidth?: number;\n};\n\nconst SPACE = \" \";\n\nexport function drawText({\n context,\n id,\n textAlign,\n textColor,\n textFont,\n textStyle,\n textGap,\n textWeight,\n textSize,\n text,\n x,\n y,\n cachedNodeText,\n maxWidth,\n}: DrawTextOptions) {\n context.font = `${textStyle} normal ${textWeight} ${textSize}px ${textFont}`;\n context.fillStyle = textColor;\n context.textAlign = textAlign;\n\n if (cachedNodeText[id] != undefined) {\n cachedNodeText[id].forEach((line, index) => {\n context.fillText(line, x, y + index * textSize + index * textGap);\n });\n\n return;\n }\n\n if (maxWidth == undefined || context.measureText(text).width <= maxWidth) {\n cachedNodeText[id] = [text];\n context.fillText(text, x, y);\n\n return;\n }\n\n const spaceWidth = context.measureText(\" \").width;\n const lines: string[] = [];\n let lineWidth = 0;\n let line = \"\";\n\n for (const word of text.split(\" \")) {\n const size = context.measureText(word).width;\n lineWidth += size;\n\n if (line === \"\") {\n line = word;\n\n continue;\n }\n if (lineWidth > maxWidth) {\n lineWidth = 0;\n lines.push(line);\n line = word;\n } else {\n lineWidth += spaceWidth;\n line += `${SPACE}${word}`;\n }\n }\n\n if (line !== \"\") lines.push(line);\n\n cachedNodeText[id] = lines;\n lines.forEach((line, index) => {\n context.fillText(line, x, y + index * textSize + index * textGap);\n });\n}\n","import type { LinkInterface } from \"@/types\";\n\nexport function calculateLinkPositionByRadius<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(link: LinkInterface<NodeData, LinkData>, arrowSize = 0) {\n const source = link.source;\n const target = link.target;\n\n if (typeof source != \"object\" || typeof target != \"object\") return null;\n\n const dx = (target.x ?? 0) - (source.x ?? 0);\n const dy = (target.y ?? 0) - (source.y ?? 0);\n const dr = Math.sqrt(dx * dx + dy * dy);\n const sourceRadius = source._radius ?? 0;\n const targetRadius = (target._radius ?? 0) + (arrowSize > 0 ? arrowSize * 0.85 : 0);\n\n return {\n x1: (source.x ?? 0) + (dx * sourceRadius) / dr,\n y1: (source.y ?? 0) + (dy * sourceRadius) / dr,\n x2: (target.x ?? 0) - (dx * targetRadius) / dr,\n y2: (target.y ?? 0) - (dy * targetRadius) / dr,\n };\n}\n","export function animationByProgress(initial: number, additional: number, progress: number) {\n const max = initial + additional;\n\n let current = initial + (max - initial) * progress;\n if (current > max) current = max;\n if (current < initial) current = initial;\n\n return current;\n}\n","import type { ZoomTransform } from \"d3-zoom\";\n\ntype IsNodeVisibleOptions = {\n x: number;\n y: number;\n radius: number;\n width: number;\n height: number;\n transform: ZoomTransform;\n};\n\nconst ADDITIONAL_VIEWPORT = 10;\n\nexport function isNodeVisible(opts: IsNodeVisibleOptions) {\n const left = -opts.transform.x / opts.transform.k;\n const right = (opts.width - opts.transform.x) / opts.transform.k;\n const top = -opts.transform.y / opts.transform.k;\n const bottom = (opts.height - opts.transform.y) / opts.transform.k;\n\n return (\n left < opts.x + opts.radius + ADDITIONAL_VIEWPORT &&\n opts.x - opts.radius - ADDITIONAL_VIEWPORT < right &&\n top < opts.y + opts.radius + ADDITIONAL_VIEWPORT &&\n opts.y - opts.radius - ADDITIONAL_VIEWPORT < bottom\n );\n}\n","import type { GraphParticle } from \"../../types\";\n\ntype GetParticlePositionOptions = {\n particle: GraphParticle;\n xStart: number;\n yStart: number;\n xEnd: number;\n yEnd: number;\n totalSteps: number;\n};\n\nexport function getParticlePosition(opts: GetParticlePositionOptions) {\n if (opts.particle.wait > 0) {\n opts.particle.wait--;\n\n return;\n }\n\n const remainingSteps = opts.totalSteps - opts.particle.step;\n const progress = opts.particle.step / opts.totalSteps;\n\n if (remainingSteps === 0) {\n opts.particle.x = opts.xEnd;\n opts.particle.y = opts.yEnd;\n opts.particle.step = 0;\n\n return;\n }\n\n const dx = opts.xEnd - opts.xStart;\n const dy = opts.yEnd - opts.yStart;\n\n const newX = opts.xStart + dx * progress;\n const newY = opts.yStart + dy * progress;\n\n opts.particle.x = newX;\n opts.particle.y = newY;\n opts.particle.step++;\n}\n","import type { LinkData, NodeData } from \"@/app/types\";\nimport { dragPlaceCoefficientGetter } from \"../lib\";\nimport type {\n ForceSettingsInterface,\n GraphSettingsInterface,\n LinkOptionsInterface,\n LinkSettingsInterface,\n NodeOptionsInterface,\n NodeSettingsInterface,\n} from \"../types\";\n\nexport const FORCE_SETTINGS: Required<\n ForceSettingsInterface<Record<string, unknown>, Record<string, unknown>>\n> = {\n centerPosition: {},\n centerStrength: 1,\n collideStrength: 0.1,\n collideAdditionalRadius: 4,\n collideIterations: 2,\n collideOffMax: { links: 0, nodes: 0 },\n collideOn: true,\n chargeStrength: -40,\n chargeDistanceMax: Infinity,\n chargeDistanceMin: 1,\n xForce: 0,\n xStrength: 0.1,\n yForce: 0,\n yStrength: 0.1,\n linkDistance: 30,\n linkIterations: 1,\n linkStrength: 1,\n collideRadius: null,\n};\n\nexport const GRAPH_SETTINGS: Required<GraphSettingsInterface<Record<string, unknown>>> = {\n zoomExtent: [0.3, 10] as [number, number],\n translateExtent: [[], []],\n translateExtentEnable: true,\n translateExtentCoefficient: [3, 3],\n highlightSizingAdditional: 0.5,\n highlightColorFadingMin: 0.15,\n highlightTextShiftXAdditional: 0,\n highlightTextShiftYAdditional: 2,\n highlightTextSizingAdditional: 1,\n highlightTextWeightAdditional: 0,\n highlightTextWidthAdditional: 10,\n highlightOnlyRoot: true,\n stickAfterDrag: false,\n highlightByHover: true,\n highlightLinkFadingMin: 0.21,\n highlightFadingMin: 0.21,\n highlightTextFadingMin: 0.21,\n highlightArrowFadingMin: 0.21,\n highlightDownStep: 0.2,\n highlightUpStep: 0.2,\n dragPlaceCoefficient: dragPlaceCoefficientGetter,\n nodeRadiusInitial: 4,\n nodeRadiusCoefficient: 5,\n nodeRadiusFactor: 1,\n nodeRadiusFlexible: true,\n zoomInitial: null,\n showDrawTime: true,\n showDrawTimeEveryTick: false,\n};\n\nexport const NODE_SETTINGS: Omit<\n Required<NodeSettingsInterface<NodeData, LinkData>>,\n \"options\" | \"idGetter\"\n> = {\n cache: false,\n};\n\nexport const NODE_OPTIONS: Omit<\n Required<NodeOptionsInterface<Record<string, unknown>, Record<string, unknown>>>,\n | \"color\"\n | \"text\"\n | \"textVisible\"\n | \"textSize\"\n | \"textShiftY\"\n | \"nodeDraw\"\n | \"nodeExtraDraw\"\n | \"textDraw\"\n | \"textExtraDraw\"\n> = {\n alpha: 1,\n textAlpha: 1,\n borderColor: \"#000000FF\",\n borderWidth: 0.1,\n textWidth: 20,\n textShiftX: 0,\n textFont: \"Arial\",\n textAlign: \"center\" as CanvasTextAlign,\n textColor: \"#333\",\n radius: 4,\n textStyle: \"normal\",\n textWeight: 500,\n textGap: 1,\n highlightFading: true,\n highlightColor: false,\n highlightSizing: true,\n highlightTextFading: true,\n highlightTextSizing: true,\n};\n\nexport const LINK_SETTINGS: Omit<Required<LinkSettingsInterface<NodeData, LinkData>>, \"options\"> = {\n cache: false,\n particles: true,\n};\n\nexport const LINK_OPTIONS: Omit<\n Required<LinkOptionsInterface<Record<string, unknown>, Record<string, unknown>>>,\n \"color\" | \"width\" | \"drawLink\" | \"drawExtraLink\" | \"arrowColor\"\n> = {\n alpha: 1,\n highlightFading: true,\n pretty: true,\n arrow: true,\n arrowAlpha: 1,\n arrowSize: 2,\n arrowHighlightFading: true,\n arrowReverseAppear: true,\n particleAlpha: 1,\n particleColor: \"#000000FF\",\n particleCount: 2,\n particleRadius: 0.5,\n particleSteps: 60,\n};\n\nexport const COMMON_SETTINGS = {\n linkColorZoomFar: \"#999\",\n linkColorZoomNear: \"#000000FF\",\n linkWidthZoomFar: 1,\n linkWidthZoomNear: 0.1,\n linkWidthZoomBorder: 1,\n linkColorZoomBorder: 1,\n nodeTextScaleMin: 1.5,\n nodeTextScaleMax: 20,\n nodeTextSizeMin: 1.5,\n nodeTextSizeMax: 3.5,\n nodeTextShiftYMin: 2.5,\n nodeTextShiftYMax: 4,\n nodeTextChangeStepCount: 200,\n};\n","import {\n FORCE_SETTINGS,\n GRAPH_SETTINGS,\n LINK_OPTIONS,\n NODE_OPTIONS,\n} from \"@/module/GraphCanvas/constants\";\nimport type {\n ForceSettingsInterface,\n GraphSettingsInterface,\n LinkOptionsInterface,\n NodeOptionsInterface,\n} from \"../module/GraphCanvas\";\nimport type { GraphSettingsInputInterface } from \"../types/controls\";\n\nexport function getForceControls<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(keys?: (keyof ForceSettingsInterface<NodeData, LinkData>)[]) {\n const FORCE_CONTROLS: GraphSettingsInputInterface<\n keyof ForceSettingsInterface<NodeData, LinkData>\n >[] = [\n {\n id: \"centerStrength\",\n initialValue: FORCE_SETTINGS.centerStrength,\n label: \"Граница центра\",\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n },\n {\n id: \"collideStrength\",\n initialValue: FORCE_SETTINGS.collideStrength,\n label: \"Сила отталкивания\",\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n },\n {\n id: \"collideAdditionalRadius\",\n initialValue: FORCE_SETTINGS.collideAdditionalRadius,\n label: \"Радиус отталкивания\",\n max: 300,\n min: 0,\n step: 0.1,\n type: \"range\",\n },\n {\n id: \"collideIterations\",\n initialValue: FORCE_SETTINGS.collideIterations,\n label: \"Итерации отталкивания\",\n max: 10,\n min: 0,\n step: 1,\n type: \"range\",\n },\n {\n id: \"chargeStrength\",\n initialValue:\n typeof FORCE_SETTINGS.chargeStrength === \"number\" ? FORCE_SETTINGS.chargeStrength : 0,\n label: \"Гравитация\",\n max: 0,\n min: -300,\n step: 0.1,\n type: \"range\",\n },\n {\n type: \"range\",\n id: \"xForce\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Граница X\",\n initialValue: typeof FORCE_SETTINGS.xForce === \"number\" ? FORCE_SETTINGS.xForce : 0,\n },\n {\n type: \"range\",\n id: \"yForce\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Граница Y\",\n initialValue: typeof FORCE_SETTINGS.yForce === \"number\" ? FORCE_SETTINGS.yForce : 0,\n },\n {\n type: \"range\",\n id: \"xStrength\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Гравитация X\",\n initialValue: typeof FORCE_SETTINGS.xStrength === \"number\" ? FORCE_SETTINGS.xStrength : 0,\n },\n {\n type: \"range\",\n id: \"yStrength\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Гравитация Y\",\n initialValue: typeof FORCE_SETTINGS.yStrength === \"number\" ? FORCE_SETTINGS.yStrength : 0,\n },\n {\n type: \"range\",\n id: \"linkStrength\",\n min: 0,\n max: 1,\n step: 0.01,\n label: \"Натяжение связей\",\n initialValue:\n typeof FORCE_SETTINGS.linkStrength === \"number\" ? FORCE_SETTINGS.linkStrength : 0,\n },\n {\n type: \"range\",\n id: \"linkDistance\",\n min: 0,\n max: 300,\n step: 0.1,\n label: \"Расстояние связей\",\n initialValue:\n typeof FORCE_SETTINGS.linkDistance === \"number\" ? FORCE_SETTINGS.linkDistance : 30,\n },\n {\n id: \"collideOn\",\n type: \"checkbox\",\n initialValue: FORCE_SETTINGS.collideOn,\n label: \"Отталкивание\",\n },\n ];\n\n return keys ? FORCE_CONTROLS.filter((control) => keys.includes(control.id)) : FORCE_CONTROLS;\n}\n\nexport function getGraphControls<NodeData extends Record<string, unknown>>(\n keys?: (keyof GraphSettingsInterface<NodeData>)[],\n) {\n const GRAPH_CONTROLS: GraphSettingsInputInterface<keyof GraphSettingsInterface<NodeData>>[] = [\n {\n id: \"highlightSizingAdditional\",\n initialValue: GRAPH_SETTINGS.highlightSizingAdditional,\n max: 10,\n min: 0.1,\n step: 0.01,\n type: \"range\",\n label: \"Дополнительный размер при анимации\",\n },\n {\n id: \"highlightColorFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightColorFadingMin,\n max: 1,\n min: 0.01,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания цвета\",\n },\n {\n id: \"highlightTextShiftXAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextShiftXAdditional,\n max: 50,\n min: 0,\n step: 0.1,\n type: \"range\",\n label: \"Смещение текста по X при анимации\",\n },\n {\n id: \"highlightTextShiftYAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextShiftYAdditional,\n max: 50,\n min: 0,\n step: 0.1,\n type: \"range\",\n label: \"Смещение текста по Y при анимации\",\n },\n {\n id: \"highlightTextSizingAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextSizingAdditional,\n max: 10,\n min: 0.1,\n step: 0.1,\n type: \"range\",\n label: \"Увеличение текста при анимации\",\n },\n {\n id: \"highlightTextWeightAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextWeightAdditional,\n max: 1000,\n min: 0,\n step: 100,\n type: \"range\",\n label: \"Увеличение жирности текста при анимации\",\n },\n {\n id: \"highlightTextWidthAdditional\",\n initialValue: GRAPH_SETTINGS.highlightTextWidthAdditional,\n max: 100,\n min: 0,\n step: 0.1,\n type: \"range\",\n label: \"Увеличение ширины текста при анимации\",\n },\n {\n id: \"highlightTextFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightTextFadingMin,\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания текста при анимации\",\n },\n {\n id: \"highlightLinkFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightLinkFadingMin,\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания связи при анимации\",\n },\n {\n id: \"highlightFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightFadingMin,\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания ноды при анимации\",\n },\n {\n id: \"highlightArrowFadingMin\",\n initialValue: GRAPH_SETTINGS.highlightArrowFadingMin,\n max: 1,\n min: 0,\n step: 0.01,\n type: \"range\",\n label: \"Граница затухания стрелки при анимации\",\n },\n {\n id: \"highlightDownStep\",\n initialValue: GRAPH_SETTINGS.highlightDownStep,\n max: 1,\n min: 0.01,\n step: 0.01,\n type: \"range\",\n label: \"Скорость отмены анимации\",\n },\n {\n id: \"highlightUpStep\",\n initialValue: GRAPH_SETTINGS.highlightUpStep,\n max: 1,\n min: 0.01,\n step: 0.01,\n type: \"range\",\n label: \"Скорость применения анимации\",\n },\n {\n id: \"nodeRadiusInitial\",\n initialValue: GRAPH_SETTINGS.nodeRadiusInitial,\n max: 50,\n min: 0.1,\n step: 0.1,\n type: \"range\",\n label: \"Изначальный радиус ноды\",\n },\n {\n id: \"nodeRadiusCoefficient\",\n initialValue: GRAPH_SETTINGS.nodeRadiusCoefficient,\n max: 100,\n min: 0.1,\n step: 0.1,\n type: \"range\",\n label: \"Количество связей для увеличения радиуса\",\n },\n {\n id: \"nodeRadiusFactor\",\n initialValue: GRAPH_SETTINGS.nodeRadiusFactor,\n max: 50,\n min: 0.1,\n step: 0.1,\n type: \"range\",\n label: \"Коэффициент увеличения радиуса\",\n },\n {\n id: \"highlightOnlyRoot\",\n type: \"checkbox\",\n initialValue: GRAPH_SETTINGS.highlightOnlyRoot,\n label: \"Дополнительная анимация только главное цели\",\n },\n {\n id: \"stickAfterDrag\",\n type: \"checkbox\",\n initialValue: GRAPH_SETTINGS.stickAfterDrag,\n label: \"Фиксировании ноды после перетаскивания\",\n },\n {\n id: \"highlightByHover\",\n type: \"checkbox\",\n initialValue: GRAPH_SETTINGS.highlightByHover,\n label: \"Анимации при наведении\",\n },\n {\n id: \"nodeRadiusFlexible\",\n type: \"checkbox\",\n initialValue: GRAPH_SETTINGS.nodeRadiusFlexible,\n label: \"Гибкий радиус ноды\",\n },\n ];\n\n return keys ? GRAPH_CONTROLS.filter((control) => keys.includes(control.id)) : GRAPH_CONTROLS;\n}\n\nexport function getNodeControls<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(keys?: (keyof NodeOptionsInterface<NodeData, LinkData>)[]) {\n const NODE_CONTROLS: GraphSettingsInputInterface<\n keyof NodeOptionsInterface<NodeData, LinkData>\n >[] = [\n {\n id: \"alpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность\",\n initialValue: NODE_OPTIONS.alpha,\n },\n\n {\n id: \"radius\",\n type: \"range\",\n max: 50,\n min: 1,\n step: 1,\n label: \"Радиус\",\n initialValue: NODE_OPTIONS.radius,\n },\n {\n id: \"borderWidth\",\n type: \"range\",\n max: 5,\n min: 0,\n step: 0.1,\n label: \"Толщина границы\",\n initialValue: NODE_OPTIONS.borderWidth,\n },\n {\n id: \"borderColor\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет границы\",\n },\n {\n id: \"color\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет\",\n },\n {\n id: \"textAlpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность текста\",\n initialValue: NODE_OPTIONS.textAlpha,\n },\n {\n id: \"textWidth\",\n type: \"range\",\n max: 200,\n min: 5,\n step: 1,\n label: \"Ширина текста\",\n initialValue: NODE_OPTIONS.textWidth,\n },\n {\n id: \"textShiftX\",\n type: \"range\",\n max: 100,\n min: 0,\n step: 0.1,\n label: \"Смещение X текста\",\n initialValue: NODE_OPTIONS.textShiftX,\n },\n {\n id: \"textShiftY\",\n type: \"range\",\n max: 100,\n min: 0,\n step: 0.1,\n label: \"Смещение Y текста\",\n initialValue: 4,\n },\n {\n id: \"textWeight\",\n type: \"range\",\n max: 1000,\n min: 100,\n step: 100,\n label: \"Жирность текста\",\n initialValue: NODE_OPTIONS.textWeight,\n },\n {\n id: \"textGap\",\n type: \"range\",\n max: 30,\n min: 0,\n step: 0.1,\n label: \"Расстояние между строками\",\n initialValue: NODE_OPTIONS.textGap,\n },\n {\n id: \"highlightFading\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightFading,\n label: \"Анимация затухания\",\n },\n {\n id: \"highlightColor\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightColor,\n label: \"Анимация затухания цвета\",\n },\n {\n id: \"highlightSizing\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightSizing,\n label: \"Анимация размера\",\n },\n {\n id: \"highlightTextFading\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightTextFading,\n label: \"Анимация затухания текста\",\n },\n {\n id: \"highlightTextSizing\",\n type: \"checkbox\",\n initialValue: NODE_OPTIONS.highlightTextSizing,\n label: \"Анимация размера текста\",\n },\n ];\n\n return keys ? NODE_CONTROLS.filter((control) => keys.includes(control.id)) : NODE_CONTROLS;\n}\n\nexport function getLinkControls<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n>(keys?: (keyof LinkOptionsInterface<NodeData, LinkData>)[]) {\n const LINK_CONTROLS: GraphSettingsInputInterface<\n keyof LinkOptionsInterface<NodeData, LinkData>\n >[] = [\n {\n id: \"alpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность\",\n initialValue: LINK_OPTIONS.alpha,\n },\n {\n id: \"width\",\n type: \"range\",\n max: 10,\n min: 0.1,\n step: 0.1,\n label: \"Толщина\",\n initialValue: 0.1,\n },\n {\n id: \"arrowAlpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность стрелки\",\n initialValue: LINK_OPTIONS.arrowAlpha,\n },\n {\n id: \"arrowSize\",\n type: \"range\",\n max: 10,\n min: 0.1,\n step: 0.1,\n label: \"Размер стрелки\",\n initialValue: LINK_OPTIONS.arrowSize,\n },\n {\n id: \"particleAlpha\",\n type: \"range\",\n max: 1,\n min: 0,\n step: 0.1,\n label: \"Прозрачность частиц\",\n initialValue: LINK_OPTIONS.particleAlpha,\n },\n {\n id: \"particleRadius\",\n type: \"range\",\n max: 10,\n min: 0.1,\n step: 0.1,\n label: \"Радиус частиц\",\n initialValue: LINK_OPTIONS.particleRadius,\n },\n {\n id: \"particleCount\",\n type: \"range\",\n max: 20,\n min: 1,\n step: 1,\n label: \"Количество частиц\",\n initialValue: LINK_OPTIONS.particleCount,\n },\n {\n id: \"particleSteps\",\n type: \"range\",\n max: 200,\n min: 1,\n step: 1,\n label: \"Количество кадров у частиц\",\n initialValue: LINK_OPTIONS.particleSteps,\n },\n {\n id: \"color\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет\",\n },\n {\n id: \"arrowColor\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет стрелки\",\n },\n {\n id: \"particleColor\",\n type: \"color\",\n initialValue: \"#000000FF\",\n label: \"Цвет частиц\",\n },\n {\n id: \"highlightFading\",\n type: \"checkbox\",\n label: \"Анимация Затухания\",\n initialValue: LINK_OPTIONS.highlightFading,\n },\n {\n id: \"pretty\",\n type: \"checkbox\",\n label: \"Обсчет соединения\",\n initialValue: LINK_OPTIONS.pretty,\n },\n {\n id: \"arrow\",\n type: \"checkbox\",\n label: \"Стрелка\",\n initialValue: LINK_OPTIONS.arrow,\n },\n {\n id: \"arrowHighlightFading\",\n type: \"checkbox\",\n label: \"Анимация затухания стрелки\",\n initialValue: LINK_OPTIONS.arrowHighlightFading,\n },\n {\n id: \"arrowReverseAppear\",\n type: \"checkbox\",\n label: \"Появление стрелки при анимации\",\n initialValue: LINK_OPTIONS.arrowReverseAppear,\n },\n ];\n\n return keys ? LINK_CONTROLS.filter((control) => keys.includes(control.id)) : LINK_CONTROLS;\n}\n","let countTime = 0;\nlet countOperation = 0;\n\nexport function setDrawTime(cb: () => void, showEveryTick: boolean) {\n return () => {\n const start = performance.now();\n cb();\n const end = performance.now();\n const result = end - start;\n\n countTime += result;\n countOperation++;\n\n if (showEveryTick) {\n const average = countTime / countOperation;\n // eslint-disable-next-line no-console\n console.log(\"average draw: \", average, \"current draw: \", result);\n }\n };\n}\n\nexport function getDrawTime() {\n const average = countTime / countOperation;\n\n // eslint-disable-next-line no-console\n console.log(\"average draw: \", average);\n}\n","import { isArray, isBoolean } from \"@krainovsd/js-helpers\";\nimport { greatest } from \"d3-array\";\nimport { drag as d3Drag } from \"d3-drag\";\nimport {\n type ForceLink,\n forceCenter,\n forceCollide,\n forceLink,\n forceManyBody,\n forceSimulation,\n forceX,\n forceY,\n} from \"d3-force\";\nimport { create as d3Create, select as d3Select } from \"d3-selection\";\nimport { ZoomTransform, zoom, zoomIdentity } from \"d3-zoom\";\nimport {\n colorToRgb,\n extractRgb,\n fadeRgb,\n getDrawTime,\n rgbAnimationByProgress,\n setDrawTime,\n} from \"@/lib\";\nimport type { LinkInterface } from \"@/types/links\";\nimport type { CachedNodeTextInterface, NodeInterface } from \"@/types/nodes\";\nimport {\n animationByProgress,\n calculateLinkPositionByRadius,\n drawText,\n forceSettingsGetter,\n getParticlePosition,\n graphSettingsGetter,\n isNodeVisible,\n linkIterationExtractor,\n linkOptionsGetter,\n linkSettingsGetter,\n listenersGetter,\n nodeByPointerGetter,\n nodeIterationExtractor,\n nodeOptionsGetter,\n nodeRadiusGetter,\n nodeSettingsGetter,\n pointerGetter,\n} from \"./lib\";\nimport type {\n DragEventInterface,\n ForceSettingsInterface,\n GraphCanvasInterface,\n GraphCanvasSimulation,\n GraphParticle,\n GraphSettingsInterface,\n GraphState,\n LinkOptionsInterface,\n LinkSettingsInterface,\n ListenersInterface,\n NodeOptionsInterface,\n NodeSettingsInterface,\n ZoomEventInterface,\n} from \"./types\";\n\nexport class GraphCanvas<\n NodeData extends Record<string, unknown>,\n LinkData extends Record<string, unknown>,\n> {\n /** initial data */\n\n private nodes: NodeInterface<NodeData>[];\n\n private links: LinkInterface<NodeData, LinkData>[];\n\n private particles: Record<string, GraphParticle[]> = {};\n\n private width: number;\n\n private height: number;\n\n private root: HTMLElement;\n\n private container: HTMLDivElement | undefined | null;\n\n private area: HTMLCanvasElement | null | undefined;\n\n /** settings */\n\n private graphSettings: Required<GraphSettingsInterface<NodeData>>;\n\n private forceSettings: Required<ForceSettingsInterface<NodeData, LinkData>>;\n\n private nodeSettings: Required<Omit<NodeSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<NodeSettingsInterface<NodeData, LinkData>, \"options\">;\n\n private linkSettings: Required<Omit<LinkSettingsInterface<NodeData, LinkData>, \"options\">> &\n Pick<LinkSettingsInterface<NodeData, LinkData>, \"options\">;\n\n private listeners: ListenersInterface<NodeData, LinkData>;\n\n /** service */\n\n private context: CanvasRenderingContext2D | null | undefined;\n\n private simulation: GraphCanvasSimulation<NodeData, LinkData> | undefined;\n\n private areaTransform: ZoomTransform = zoomIdentity;\n\n private areaRect: DOMRect | undefined;\n\n private draw: (this: GraphCanvas<NodeData, LinkData>) => void;\n\n private eventAbortController: AbortController;\n\n private cachedNodeText: CachedNodeTextInterface = {};\n\n private linkOptionsCache: Record<string, Required<LinkOptionsInterface<NodeData, LinkData>>> = {};\n\n private nodeOptionsCache: Record<string, Required<NodeOptionsInterface<NodeData, LinkData>>> = {};\n\n private isDragging: boolean = false;\n\n private highlightedNode: NodeInterface<NodeData> | null = null;\n\n private highlightedNeighbors: Set<string | number> | null = null;\n\n private highlightProgress: number = 1;\n\n private highlightWorking: boolean = false;\n\n private highlightDrawing: boolean = false;\n\n private get simulationWorking() {\n const simulationAlpha = this.simulation?.alpha?.() ?? 0;\n const simulationAlphaMin = this.simulation?.alphaMin?.() ?? 0;\n const simulationAlphaDecay = this.simulation?.alphaDecay?.() ?? 0;\n const force = (simulationAlpha - simulationAlphaMin) / simulationAlphaDecay;\n\n return force > 0;\n }\n\n private get state(): GraphState<NodeData, LinkData> {\n return {\n areaTransform: this.areaTransform,\n cachedNodeText: this.cachedNodeText,\n context: this.context,\n eventAbortController: this.eventAbortController,\n highlightProgress: this.highlightProgress,\n highlightDrawing: this.highlightDrawing,\n highlightedNeighbors: this.highlightedNeighbors,\n highlightedNode: this.highlightedNode,\n highlightWorking: this.highlightWorking,\n isDragging: this.isDragging,\n simulation: this.simulation,\n simulationWorking: this.simulationWorking,\n height: this.height,\n links: this.links,\n nodes: this.nodes,\n width: this.width,\n forceSettings: this.forceSettings,\n graphSettings: this.graphSettings,\n linkSettings: this.linkSettings,\n nodeSettings: this.nodeSettings,\n };\n }\n\n constructor({\n links,\n nodes,\n root,\n forceSettings,\n linkSettings,\n listeners,\n nodeSettings,\n graphSettings,\n }: GraphCanvasInterface<NodeData, LinkData>) {\n // root.style.position = \"relative\";\n root.style.overflow = \"hidden\";\n\n this.root = root;\n\n this.forceSettings = forceSettingsGetter(forceSettings);\n this.linkSettings = linkSettingsGetter(linkSettings);\n this.nodeSettings = nodeSettingsGetter(nodeSettings);\n this.listeners = listenersGetter(listeners);\n this.graphSettings = graphSettingsGetter(graphSettings);\n\n this.eventAbortController = new AbortController();\n\n this.nodes = nodes;\n this.links = links;\n this.height = 0;\n this.width = 0;\n this.draw = this.initDraw();\n\n this.init();\n }\n\n get dpi() {\n return devicePixelRatio;\n }\n\n getData(): Pick<GraphCanvasInterface<NodeData, LinkData>, \"nodes\" | \"links\"> {\n return {\n links: this.links,\n nodes: this.nodes,\n };\n }\n\n changeData(\n options: Pick<Partial<GraphCanvasInterface<NodeData, LinkData>>, \"links\" | \"nodes\">,\n alpha?: number,\n ) {\n if (options.links != undefined) this.links = options.links;\n if (options.nodes != undefined) this.nodes = options.nodes;\n if (options.nodes != undefined || options.links != undefined) this.updateData(alpha);\n }\n\n changeSettings(\n options: Omit<\n Partial<GraphCanvasInterface<NodeData, LinkData>>,\n \"links\" | \"nodes\" | \"listeners\"\n >,\n ) {\n if (options.graphSettings) {\n this.graphSettings = graphSettingsGetter(options.graphSettings, this.graphSettings);\n this.draw = this.initDraw();\n this.initZoom(this.areaTransform);\n }\n if (options.forceSettings) {\n this.forceSettings = forceSettingsGetter(options.forceSettings, this.forceSettings);\n }\n if (options.linkSettings) {\n this.linkSettings = linkSettingsGetter(options.linkSettings, this.linkSettings);\n this.linkOptionsCache = {};\n }\n if (options.nodeSettings) {\n this.nodeSettings = nodeSettingsGetter(options.nodeSettings, this.nodeSettings);\n this.cachedNodeText = {};\n this.nodeOptionsCache = {};\n }\n\n if (options.forceSettings) {\n return void this.updateSimulation();\n }\n\n this.tick();\n }\n\n clearCache() {\n this.nodeOptionsCache = {};\n this.linkOptionsCache = {};\n this.cachedNodeText = {};\n }\n\n tick() {\n if (!this.simulationWorking && !this.highlightWorking) this.draw();\n }\n\n restart(alpha?: number) {\n if (this.simulation) this.simulation.alpha(alpha ?? 1).restart();\n }\n\n start() {\n if (this.simulation) this.simulation.alpha(1).restart();\n if (this.container) this.container.style.display = \"block\";\n }\n\n stop() {\n if (this.simulation) this.simulation.stop();\n if (this.container) this.container.style.display = \"none\";\n }\n\n create() {\n this.init();\n }\n\n destroy() {\n if (this.simulation) {\n this.simulation.stop();\n this.simulation = undefined;\n }\n\n this.clearHTMLElements();\n this.clearState();\n this.clearDataDependencies();\n }\n\n private clearHTMLElements() {\n this.root.replaceChildren();\n this.area = undefined;\n this.context = undefined;\n this.container = undefined;\n this.eventAbortController.abort();\n this.eventAbortController = new AbortController();\n }\n\n private updateSimulation() {\n if (this.simulation) {\n this.initSimulationForces();\n this.simulation.alpha(1);\n this.simulation.restart();\n }\n }\n\n private clearState() {\n this.isDragging = false;\n this.highlightedNode = null;\n this.highlightedNeighbors = null;\n this.highlightProgress = 0;\n this.highlightWorking = false;\n this.highlightDrawing = false;\n }\n\n private clearDataDependencies() {\n this.cachedNodeText = {};\n this.nodeOptionsCache = {};\n this.linkOptionsCache = {};\n }\n\n private updateData(alpha?: number) {\n this.clearDataDependencies();\n\n if (this.simulation) {\n this.initCollideForce();\n\n this.simulation\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links)\n .id(this.nodeSettings.idGetter)\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations),\n )\n .alpha(alpha ?? 0.5)\n .restart();\n }\n }\n\n private updateSize() {\n this.clearHTMLElements();\n\n this.initArea();\n this.initDnd();\n this.initZoom();\n this.initResize();\n this.initPointer();\n\n if (!this.simulationWorking && !this.highlightWorking) this.draw();\n }\n\n private init() {\n this.initArea();\n this.initSimulation();\n this.initDnd();\n this.initZoom();\n this.initResize();\n this.initPointer();\n }\n\n private initSimulation() {\n if (!this.simulation) {\n this.simulation = forceSimulation<\n NodeInterface<NodeData>,\n LinkInterface<NodeData, LinkData>\n >()\n .nodes(this.nodes)\n .force(\n \"link\",\n forceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>(this.links).id(\n this.nodeSettings.idGetter,\n ),\n )\n .on(\"tick\", () => {\n this.draw();\n })\n .on(\"end\", () => {\n this.listeners.onSimulationEnd?.(this.state);\n\n if (this.graphSettings.showDrawTime) getDrawTime();\n });\n this.initSimulationForces();\n }\n }\n\n private initSimulationForces() {\n if (!this.simulation) return;\n\n const linkForce = this.simulation.force(\"link\") as\n | ForceLink<NodeInterface<NodeData>, LinkInterface<NodeData, LinkData>>\n | undefined;\n\n if (!linkForce) return;\n\n linkForce\n .distance(this.forceSettings.linkDistance)\n .strength(this.forceSettings.linkStrength)\n .iterations(this.forceSettings.linkIterations);\n\n this.simulation\n .force(\n \"x\",\n forceX<NodeInterface<NodeData>>(this.forceSettings.xForce).strength(\n this.forceSettings.xStrength,\n ),\n )\n .force(\n \"y\",\n forceY<NodeInterface<NodeData>>(this.forceSettings.yForce).strength(\n this.forceSettings.yStrength,\n ),\n )\n .force(\n \"charge\",\n forceManyBody<NodeInterface<NodeData>>()\n .strength(this.forceSettings.chargeStrength)\n .distanceMax(this.forceSettings.chargeDistanceMax)\n .distanceMin(this.forceSettings.chargeDistanceMin),\n )\n .force(\n \"center\",\n forceCenter<NodeInterface<NodeData>>(\n this.forceSettings.centerPosition.x ?? 0,\n this.forceSettings.centerPosition.y ?? 0,\n ).strength(this.forceSettings.centerStrength),\n );\n\n this.initCollideForce(true);\n }\n\n private initCollideForce(forceUpdate?: boolean) {\n if (!this.simulation) return;\n\n if (!this.forceSettings.collideOn) {\n if (this.simulation.force(\"collide\")) this.simulation.force(\"collide\", null);\n\n return;\n }\n\n const isHasMax =\n this.forceSettings.collideOffMax.links != 0 && this.forceSettings.collideOffMax.nodes != 0;\n const isMaxCollideNodes =\n isHasMax && this.forceSettings.collideOffMax.nodes < this.nodes.length;\n const isMaxCollideLinks =\n isHasMax && this.forceSettings.collideOffMax.links < this.links.length;\n if (isMaxCollideNodes && isMaxCollideLinks) {\n this.simulation.force(\"collide\", null);\n } else if (!this.simulation.force(\"collide\") || forceUpdate) {\n this.simulation.force(\n \"collide\",\n forceCollide<NodeInterface<NodeData>>()\n .radius((node, index) => {\n if (this.forceSettings.collideRadius) {\n return nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.forceSettings.collideRadius,\n undefined,\n );\n }\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n const radius = nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius ?? this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n return radius + this.forceSettings.collideAdditionalRadius;\n })\n .strength(this.forceSettings.collideStrength)\n .iterations(this.forceSettings.collideIterations),\n );\n }\n }\n\n private initArea() {\n if (!this.area || !this.context || !this.container) {\n this.container = d3Create(\"div\")\n .attr(\"style\", \"padding: 0 !important; width: 100%; height: 100%;\")\n .node();\n if (!this.container) throw new Error(\"couldn't create container\");\n this.root.appendChild(this.container);\n\n const { width, height } = this.root.getBoundingClientRect();\n this.width = width;\n this.height = height;\n\n this.area = d3Create(\"canvas\")\n .attr(\"width\", this.dpi * this.width)\n .attr(\"height\", this.dpi * this.height)\n .attr(\"style\", `width: 100%; height: 100%; border: none !important;`)\n .node();\n\n if (!this.area) throw new Error(\"couldn't create canvas\");\n this.container.appendChild(this.area);\n this.areaRect = this.area.getBoundingClientRect();\n\n this.context = this.area.getContext(\"2d\");\n if (!this.context) throw new Error(\"couldn't create canvas context\");\n this.context.scale(this.dpi, this.dpi);\n }\n }\n\n private initDraw() {\n function calculateHighlightFading(this: GraphCanvas<NodeData, LinkData>) {\n this.highlightDrawing = true;\n\n if (!this.highlightWorking && this.highlightProgress > 0) {\n this.highlightProgress -= this.graphSettings.highlightDownStep;\n\n if (!this.simulationWorking) return void requestAnimationFrame(() => this.draw());\n\n if (!this.linkSettings.particles) return;\n }\n if (this.highlightWorking && this.highlightProgress < 1) {\n this.highlightProgress += this.graphSettings.highlightUpStep;\n\n if (!this.simulationWorking) return void requestAnimationFrame(() => this.draw());\n\n if (!this.linkSettings.particles) return;\n }\n\n if (this.linkSettings.particles && this.highlightWorking && !this.simulationWorking) {\n return void requestAnimationFrame(() => this.draw());\n }\n\n if (!this.highlightWorking && this.highlightProgress <= 0) {\n if (this.highlightedNeighbors || this.highlightedNode) {\n this.highlightedNeighbors = null;\n this.highlightedNode = null;\n this.particles = {};\n\n if (!this.simulationWorking) return void requestAnimationFrame(() => this.draw());\n }\n }\n\n this.highlightDrawing = false;\n }\n\n function draw(this: GraphCanvas<NodeData, LinkData>) {\n if (!this.context) return;\n const state = this.state;\n\n if (this.listeners.onDraw) {\n this.listeners.onDraw(\n state,\n (status) => {\n this.highlightDrawing = status;\n },\n () => {\n if (this.highlightedNeighbors) this.highlightedNeighbors = null;\n if (this.highlightedNode) this.highlightedNode = null;\n },\n );\n\n return;\n }\n\n this.context.save();\n this.context.clearRect(0, 0, this.width, this.height);\n this.context.translate(this.areaTransform.x, this.areaTransform.y);\n this.context.scale(this.areaTransform.k, this.areaTransform.k);\n\n const textRenders: (() => void)[] = [];\n const nodeRenders: (() => void)[] = [];\n this.nodes.forEach(getDrawNode(nodeRenders, textRenders, state).bind(this));\n\n /** links */\n this.links.forEach(getDrawLink(state).bind(this));\n\n /** nodes */\n\n nodeRenders.forEach((render) => render());\n textRenders.forEach((render) => render());\n\n this.context.restore();\n\n this.listeners.onDrawFinished?.(state);\n\n calculateHighlightFading.bind(this)();\n }\n\n function getDrawLink(state: GraphState<NodeData, LinkData>) {\n return function drawLink(\n this: GraphCanvas<NodeData, LinkData>,\n link: LinkInterface<NodeData, LinkData>,\n index: number,\n ) {\n if (\n !this.context ||\n typeof link.source !== \"object\" ||\n typeof link.target !== \"object\" ||\n !link.source.x ||\n !link.source.y ||\n !link.target.x ||\n !link.target.y\n )\n return;\n\n if (!link.source._visible && !link.target._visible) return;\n\n const id = `${link.target.id}${link.source.id}`;\n let linkOptions: Required<LinkOptionsInterface<NodeData, LinkData>>;\n if (this.linkSettings.cache && this.linkOptionsCache[id]) {\n linkOptions = this.linkOptionsCache[id];\n } else {\n linkOptions = linkIterationExtractor(\n link,\n index,\n this.links,\n state,\n this.linkSettings.options ?? {},\n linkOptionsGetter,\n );\n if (this.linkSettings.cache) {\n this.linkOptionsCache[id] = linkOptions;\n }\n }\n\n if (linkOptions.drawLink) {\n linkOptions.drawLink(link, linkOptions, state);\n\n return;\n }\n\n let alpha = linkOptions.alpha;\n let arrowAlpha = linkOptions.arrowReverseAppear ? 0 : linkOptions.arrowAlpha;\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** Not highlighted */\n if (\n this.highlightedNode.id != link.source.id &&\n this.highlightedNode.id != link.target.id\n ) {\n if (linkOptions.highlightFading) {\n const min =\n this.graphSettings.highlightLinkFadingMin < alpha\n ? this.graphSettings.highlightLinkFadingMin\n : alpha;\n alpha = animationByProgress(min, alpha - min, 1 - this.highlightProgress);\n }\n if (\n linkOptions.arrow &&\n linkOptions.arrowHighlightFading &&\n !linkOptions.arrowReverseAppear\n ) {\n const min =\n this.graphSettings.highlightArrowFadingMin < arrowAlpha\n ? this.graphSettings.highlightArrowFadingMin\n : arrowAlpha;\n arrowAlpha = animationByProgress(min, arrowAlpha - min, 1 - this.highlightProgress);\n }\n } else {\n // eslint-disable-next-line no-lonely-if\n if (linkOptions.arrow && linkOptions.arrowReverseAppear) {\n /** Highlighted */\n arrowAlpha = animationByProgress(0, linkOptions.arrowAlpha, this.highlightProgress);\n }\n }\n }\n\n /** Link */\n this.context.beginPath();\n\n this.context.globalAlpha = alpha;\n this.context.strokeStyle = linkOptions.color;\n this.context.lineWidth = linkOptions.width;\n\n let xStart = link.source.x;\n let yStart = link.source.y;\n let xEnd = link.target.x;\n let yEnd = link.target.y;\n if (linkOptions.pretty) {\n const isHasArrow = linkOptions.arrow && arrowAlpha > 0;\n\n const { x1, x2, y1, y2 } = calculateLinkPositionByRadius(\n link,\n isHasArrow ? linkOptions.arrowSize : 0,\n ) ?? {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0,\n };\n\n xStart = x1;\n xEnd = x2;\n yStart = y1;\n yEnd = y2;\n }\n\n this.context.moveTo(xStart, yStart);\n this.context.lineTo(xEnd, yEnd);\n this.context.stroke();\n\n /** Particle */\n if (\n this.linkSettings.particles &&\n this.highlightedNode &&\n (this.highlightedNode.id === link.source.id || this.highlightedNode.id === link.target.id)\n ) {\n if (!this.particles[id]) {\n const sourceId = link.source.id;\n const targetId = link.target.id;\n this.particles[id] = Array.from({ length: linkOptions.particleCount }, (_, index) => {\n return {\n step: 0,\n wait: index * (linkOptions.particleSteps / linkOptions.particleCount),\n sourceId,\n targetId,\n };\n }) as GraphParticle[];\n }\n this.particles[id].forEach((particle) => {\n if (!this.context) return;\n\n getParticlePosition({\n particle,\n totalSteps: linkOptions.particleSteps,\n xEnd,\n xStart,\n yEnd,\n yStart,\n });\n if (particle.x != undefined && particle.y != undefined) {\n this.context.beginPath();\n this.context.arc(particle.x, particle.y, linkOptions.particleRadius, 0, Math.PI * 2);\n this.context.fillStyle = linkOptions.particleColor;\n this.context.fill();\n this.context.stroke();\n }\n });\n }\n\n /** Arrow */\n if (linkOptions.arrow && arrowAlpha > 0) {\n const {\n x1: xStart,\n x2: xEnd,\n y1: yStart,\n y2: yEnd,\n } = calculateLinkPositionByRadius(link) ?? {\n x1: 0,\n x2: 0,\n y1: 0,\n y2: 0,\n };\n\n const angle = Math.atan2(yEnd - yStart, xEnd - xStart);\n this.context.beginPath();\n this.context.globalAlpha = arrowAlpha;\n this.context.moveTo(xEnd, yEnd);\n this.context.lineTo(\n xEnd - linkOptions.arrowSize * Math.cos(angle - Math.PI / 6),\n yEnd - linkOptions.arrowSize * Math.sin(angle - Math.PI / 6),\n );\n this.context.lineTo(\n xEnd - linkOptions.arrowSize * Math.cos(angle + Math.PI / 6),\n yEnd - linkOptions.arrowSize * Math.sin(angle + Math.PI / 6),\n );\n this.context.closePath();\n this.context.fillStyle = linkOptions.arrowColor;\n this.context.fill();\n this.context.stroke();\n }\n\n if (linkOptions.drawExtraLink) {\n linkOptions.drawExtraLink(link, { ...linkOptions, alpha }, state);\n }\n };\n }\n\n function getDrawNode(\n nodeRenders: (() => void)[],\n textRenders: (() => void)[],\n state: GraphState<NodeData, LinkData>,\n ) {\n return function drawNode(\n this: GraphCanvas<NodeData, LinkData>,\n node: NodeInterface<NodeData>,\n index: number,\n ) {\n if (!this.context || !node.x || !node.y) return;\n\n let nodeOptions: Required<NodeOptionsInterface<NodeData, LinkData>>;\n if (this.nodeSettings.cache && this.nodeOptionsCache[node.id]) {\n nodeOptions = this.nodeOptionsCache[node.id];\n } else {\n nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n state,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n if (this.nodeSettings.cache) {\n this.nodeOptionsCache[node.id] = nodeOptions;\n }\n }\n\n if (nodeOptions.nodeDraw && nodeOptions.textDraw) {\n nodeRenders.push(() => {\n nodeOptions?.nodeDraw?.(node, nodeOptions, state);\n });\n\n textRenders.push(() => {\n nodeOptions?.textDraw?.(node, nodeOptions, state);\n });\n\n return;\n }\n\n let alpha = nodeOptions.alpha;\n let color = nodeOptions.color;\n let radiusInitial = nodeOptions.radius ?? this.graphSettings.nodeRadiusInitial;\n let textAlpha = nodeOptions.textAlpha;\n let textSize = nodeOptions.textSize;\n let textShiftX = nodeOptions.textShiftX;\n let textShiftY = nodeOptions.textShiftY;\n let textWeight = nodeOptions.textWeight;\n let textWidth = nodeOptions.textWidth;\n if (this.highlightedNeighbors && this.highlightedNode) {\n /** Not highlighted */\n if (!this.highlightedNeighbors.has(node.id) && this.highlightedNode.id != node.id) {\n if (nodeOptions.highlightFading) {\n const min =\n this.graphSettings.highlightFadingMin < alpha\n ? this.graphSettings.highlightFadingMin\n : alpha;\n alpha = animationByProgress(min, alpha - min, 1 - this.highlightProgress);\n }\n if (nodeOptions.highlightTextFading) {\n const min =\n this.graphSettings.highlightTextFadingMin < textAlpha\n ? this.graphSettings.highlightTextFadingMin\n : textAlpha;\n textAlpha = animationByProgress(min, textAlpha - min, 1 - this.highlightProgress);\n }\n if (nodeOptions.highlightColor) {\n const colorRgb = extractRgb(colorToRgb(color));\n if (colorRgb) {\n const colorRgbFade = fadeRgb(colorRgb, this.graphSettings.highlightColorFadingMin);\n const colorFadeAnimation = rgbAnimationByProgress(\n colorRgb,\n colorRgbFade,\n this.highlightProgress,\n );\n color = `rgb(${colorFadeAnimation.r}, ${colorFadeAnimation.g}, ${colorFadeAnimation.b})`;\n }\n }\n } else if (\n !this.graphSettings.highlightOnlyRoot ||\n (this.graphSettings.highlightOnlyRoot && this.highlightedNode.id === node.id)\n ) {\n /** Highlighted */\n\n if (nodeOptions.highlightSizing) {\n radiusInitial = animationByProgress(\n radiusInitial,\n this.graphSettings.highlightSizingAdditional,\n this.highlightProgress,\n );\n }\n if (nodeOptions.highlightTextSizing) {\n textSize = animationByProgress(\n textSize,\n this.graphSettings.highlightTextSizingAdditional,\n this.highlightProgress,\n );\n textShiftX = animationByProgress(\n textShiftX,\n this.graphSettings.highlightTextShiftXAdditional,\n this.highlightProgress,\n );\n textShiftY = animationByProgress(\n textShiftY,\n this.graphSettings.highlightTextShiftYAdditional,\n this.highlightProgress,\n );\n textWeight = animationByProgress(\n textWeight,\n this.graphSettings.highlightTextWeightAdditional,\n this.highlightProgress,\n );\n textWidth = animationByProgress(\n textWidth,\n this.graphSettings.highlightTextWidthAdditional,\n this.highlightProgress,\n );\n }\n }\n }\n\n const radius = nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n\n node._radius = radius;\n if (\n !isNodeVisible({\n height: this.height,\n width: this.width,\n x: node.x,\n y: node.y,\n radius,\n transform: this.areaTransform,\n })\n ) {\n node._visible = false;\n\n return;\n }\n node._visible = true;\n\n nodeRenders.push(() => {\n if (!this.context || !node.x || !node.y) return;\n\n this.context.beginPath();\n\n this.context.globalAlpha = alpha;\n\n /** circle */\n this.context.lineWidth = nodeOptions.borderWidth;\n this.context.strokeStyle = nodeOptions.borderColor;\n this.context.fillStyle = color;\n this.context.arc(node.x, node.y, radius, 0, 2 * Math.PI);\n\n this.context.fill();\n this.context.stroke();\n });\n\n if (nodeOptions.nodeExtraDraw) {\n nodeRenders.push(() => {\n nodeOptions?.nodeExtraDraw?.(\n node,\n {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n textWidth,\n },\n state,\n );\n });\n }\n\n /** text */\n if (nodeOptions.textVisible && nodeOptions.text) {\n textRenders.push(() => {\n if (nodeOptions.textDraw) {\n nodeOptions.textDraw(\n node,\n {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n textWidth,\n },\n state,\n );\n\n return;\n }\n\n if (!this.context || !node.x || !node.y || !nodeOptions.text) return;\n this.context.beginPath();\n this.context.globalAlpha = textAlpha;\n\n drawText({\n id: node.id,\n cachedNodeText: this.cachedNodeText,\n context: this.context,\n text: nodeOptions.text,\n textAlign: nodeOptions.textAlign,\n textColor: nodeOptions.textColor,\n textFont: nodeOptions.textFont,\n textSize,\n x: node.x + textShiftX,\n y: node.y + radius + textShiftY,\n maxWidth: textWidth,\n textStyle: nodeOptions.textStyle,\n textWeight,\n textGap: nodeOptions.textGap,\n });\n\n if (nodeOptions.textExtraDraw) {\n nodeOptions.textExtraDraw(\n node,\n {\n ...nodeOptions,\n radius,\n alpha,\n color,\n textAlpha,\n textSize,\n textShiftX,\n textShiftY,\n textWeight,\n textWidth,\n },\n state,\n );\n }\n });\n }\n };\n }\n\n if (this.graphSettings.showDrawTime) {\n return setDrawTime(draw.bind(this), this.graphSettings.showDrawTimeEveryTick);\n }\n\n return draw;\n }\n\n private initResize() {\n if (!this.area) throw new Error(\"bad init data\");\n\n let initialResizeCall = true;\n\n const abortController = this.eventAbortController;\n const observer = new ResizeObserver(() => {\n if (initialResizeCall) {\n initialResizeCall = false;\n\n return;\n }\n\n if (abortController.signal.aborted) {\n observer.disconnect();\n\n return;\n }\n\n requestAnimationFrame(() => {\n this.updateSize();\n });\n });\n observer.observe(this.area);\n }\n\n private initPointer() {\n if (!this.area || !this.nodes || !this.simulation) throw new Error(\"bad init data\");\n\n /** hover */\n this.area.addEventListener(\n \"pointermove\",\n (event) => {\n let currentNode: NodeInterface<NodeData> | undefined;\n\n if (this.graphSettings.highlightByHover && !this.isDragging) {\n currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n if (currentNode && this.highlightedNode !== currentNode) {\n this.highlightedNode = currentNode;\n this.highlightedNeighbors = new Set(this.highlightedNode?.neighbors ?? []);\n this.highlightWorking = true;\n\n if (!this.simulationWorking && !this.highlightDrawing)\n requestAnimationFrame(() => {\n this.draw();\n });\n } else if (!currentNode && this.highlightedNode) {\n this.highlightWorking = false;\n if (!this.simulationWorking && !this.highlightDrawing)\n requestAnimationFrame(() => {\n this.draw();\n });\n }\n }\n\n if (!this.listeners.onMove) return;\n\n if (!currentNode)\n currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onMove(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n /** dblclick */\n this.area.addEventListener(\"dblclick\", (event) => {\n if (!this.listeners.onDoubleClick) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onDoubleClick(event, currentNode);\n });\n\n /** wheel click */\n this.area.addEventListener(\n \"mousedown\",\n (event) => {\n if (this.isDragging || !this.listeners.onWheelClick || event.button !== 1) return;\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onWheelClick(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n /** click */\n this.area.addEventListener(\n \"click\",\n (event) => {\n if (this.isDragging || !this.listeners.onClick || event.button !== 0) return;\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onClick(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n\n /** right click */\n this.area.addEventListener(\n \"contextmenu\",\n (event) => {\n if (!this.listeners.onContextMenu) return;\n\n const currentNode = nodeByPointerGetter({\n graphSettings: this.graphSettings,\n areaRect: this.areaRect,\n areaTransform: this.areaTransform,\n mouseEvent: event,\n nodes: this.nodes,\n });\n\n return void this.listeners.onContextMenu(event, currentNode);\n },\n {\n signal: this.eventAbortController.signal,\n },\n );\n }\n\n private initDnd() {\n if (!this.area || !this.nodes || !this.simulation) throw new Error(\"bad init data\");\n\n d3Select(this.area).call(\n d3Drag<HTMLCanvasElement, unknown>()\n .subject((event: DragEventInterface<NodeData>) => {\n if (this.listeners.onDragSubject) {\n return this.listeners.onDragSubject(event, this.state);\n }\n\n if (!this.areaRect) return;\n\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);\n\n let index = 0;\n\n return greatest(this.nodes, (node) => {\n if (!node.x || !node.y || (isBoolean(node.drag) && !node.drag)) return undefined;\n\n let radius = node._radius;\n if (!radius) {\n const nodeOptions = nodeIterationExtractor(\n node,\n index,\n this.nodes,\n this.state,\n this.nodeSettings.options ?? {},\n nodeOptionsGetter,\n );\n\n radius = nodeRadiusGetter({\n radiusFlexible: this.graphSettings.nodeRadiusFlexible,\n radiusInitial: nodeOptions.radius ?? this.graphSettings.nodeRadiusInitial,\n radiusCoefficient: this.graphSettings.nodeRadiusCoefficient,\n radiusFactor: this.graphSettings.nodeRadiusFactor,\n linkCount: node.linkCount,\n });\n }\n\n index++;\n\n return this.graphSettings.dragPlaceCoefficient(node, pointerX, pointerY, radius);\n });\n })\n .on(\"start\", (event: DragEventInterface<NodeData>) => {\n this.listeners.onStartDragFinished?.(event, this.state);\n })\n .on(\"drag\", (event: DragEventInterface<NodeData>) => {\n if (!this.isDragging) {\n this.isDragging = true;\n if (this.simulation) this.simulation.alphaTarget(0.3).restart();\n }\n\n if (!this.areaRect) return;\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(mouseEvent, this.areaRect, this.areaTransform);\n event.subject.fx = pointerX;\n event.subject.fy = pointerY;\n\n this.listeners.onMoveDragFinished?.(event, this.state);\n })\n .on(\"end\", (event: DragEventInterface<NodeData>) => {\n this.isDragging = false;\n\n if (!event.active && this.simulation) this.simulation.alphaTarget(0);\n\n if (this.graphSettings.stickAfterDrag && this.areaRect) {\n if (!this.areaRect) return;\n const mouseEvent = event.sourceEvent as MouseEvent;\n const [pointerX, pointerY] = pointerGetter(\n mouseEvent,\n this.areaRect,\n this.areaTransform,\n );\n event.subject.fx = pointerX;\n event.subject.fy = pointerY;\n } else {\n event.subject.fx = null;\n event.subject.fy = null;\n }\n\n this.listeners.onEndDragFinished?.(event, this.state);\n }),\n );\n }\n\n private initZoom(currentZoom?: ZoomTransform) {\n if (!this.area) throw new Error(\"bad init data\");\n\n const zoomInstance = zoom<HTMLCanvasElement, unknown>()\n .scaleExtent(this.graphSettings.zoomExtent)\n .on(\"zoom\", (event: ZoomEventInterface) => {\n this.listeners.onZoom?.(event);\n this.areaTransform = event.transform;\n this.linkOptionsCache = {};\n this.nodeOptionsCache = {};\n\n if (!this.simulationWorking && !this.highlightWorking)\n requestAnimationFrame(() => this.draw());\n });\n\n if (this.graphSettings.translateExtentEnable) {\n const coefficient = this.graphSettings.translateExtentCoefficient;\n const [coefficientX, coefficientY] = isArray(coefficient)\n ? coefficient\n : [coefficient, coefficient];\n\n const [\n [minX = -this.width * coefficientX, minY = -this.height * coefficientY],\n [maxX = this.width * coefficientX, maxY = this.height * coefficientY],\n ] = this.graphSettings.translateExtent;\n\n zoomInstance.translateExtent([\n [minX, minY],\n [maxX, maxY],\n ]);\n }\n\n d3Select(this.area).call(zoomInstance).on(\"dblclick.zoom\", null);\n\n const zoomInitial = currentZoom ?? this.graphSettings.zoomInitial;\n this.areaTransform = new ZoomTransform(\n zoomInitial?.k ?? 1,\n zoomInitial?.x ?? this.width / 2,\n zoomInitial?.y ?? this.height / 2,\n );\n zoom<HTMLCanvasElement, unknown>().transform(d3Select(this.area), this.areaTransform);\n }\n}\n"],"names":["getColorFormat","COLOR_FORMATS","transformHEXtoRGB","transformRGBAtoRGB","greatest","zoomIdentity","forceLink","forceSimulation","forceX","forceY","forceManyBody","forceCenter","forceCollide","d3Create","d3Select","d3Drag","isBoolean","zoom","isArray","ZoomTransform"],"mappings":"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"}