@acorex/charts 21.0.3-next.30 → 21.0.3-next.31

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/fesm2022/acorex-charts-bar-chart.mjs +17 -17
  2. package/fesm2022/acorex-charts-bar-chart.mjs.map +1 -1
  3. package/fesm2022/acorex-charts-chart-legend.mjs +13 -13
  4. package/fesm2022/acorex-charts-chart-legend.mjs.map +1 -1
  5. package/fesm2022/acorex-charts-chart-tooltip.mjs +10 -10
  6. package/fesm2022/acorex-charts-chart-tooltip.mjs.map +1 -1
  7. package/fesm2022/acorex-charts-donut-chart.mjs +17 -17
  8. package/fesm2022/acorex-charts-donut-chart.mjs.map +1 -1
  9. package/fesm2022/acorex-charts-funnel-chart.mjs +16 -14
  10. package/fesm2022/acorex-charts-funnel-chart.mjs.map +1 -1
  11. package/fesm2022/acorex-charts-gauge-chart.mjs +14 -14
  12. package/fesm2022/acorex-charts-gauge-chart.mjs.map +1 -1
  13. package/fesm2022/acorex-charts-heatmap-chart.mjs +13 -13
  14. package/fesm2022/acorex-charts-heatmap-chart.mjs.map +1 -1
  15. package/fesm2022/acorex-charts-hierarchy-chart.mjs +18 -18
  16. package/fesm2022/acorex-charts-hierarchy-chart.mjs.map +1 -1
  17. package/fesm2022/acorex-charts-line-chart.mjs +14 -14
  18. package/fesm2022/acorex-charts-line-chart.mjs.map +1 -1
  19. package/fesm2022/acorex-charts.mjs +4 -4
  20. package/fesm2022/acorex-charts.mjs.map +1 -1
  21. package/package.json +15 -16
  22. /package/{types/acorex-charts-bar-chart.d.ts → bar-chart/index.d.ts} +0 -0
  23. /package/{types/acorex-charts-chart-legend.d.ts → chart-legend/index.d.ts} +0 -0
  24. /package/{types/acorex-charts-chart-tooltip.d.ts → chart-tooltip/index.d.ts} +0 -0
  25. /package/{types/acorex-charts-donut-chart.d.ts → donut-chart/index.d.ts} +0 -0
  26. /package/{types/acorex-charts-funnel-chart.d.ts → funnel-chart/index.d.ts} +0 -0
  27. /package/{types/acorex-charts-gauge-chart.d.ts → gauge-chart/index.d.ts} +0 -0
  28. /package/{types/acorex-charts-heatmap-chart.d.ts → heatmap-chart/index.d.ts} +0 -0
  29. /package/{types/acorex-charts-hierarchy-chart.d.ts → hierarchy-chart/index.d.ts} +0 -0
  30. /package/{types/acorex-charts.d.ts → index.d.ts} +0 -0
  31. /package/{types/acorex-charts-line-chart.d.ts → line-chart/index.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-charts-hierarchy-chart.mjs","sources":["../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.config.ts","../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.component.ts","../../../../packages/charts/hierarchy-chart/src/lib/hierarchy-chart.component.html","../../../../packages/charts/hierarchy-chart/src/acorex-charts-hierarchy-chart.ts"],"sourcesContent":["import { AX_CHART_DEFAULT_MESSAGES } from '@acorex/charts';\nimport { InjectionToken } from '@angular/core';\nimport { AXHierarchyChartOption } from './hierarchy-chart.type';\n\nexport const AXHierarchyChartDefaultConfig: AXHierarchyChartOption = {\n direction: 'vertical',\n margin: { top: 40, right: 120, bottom: 40, left: 120 },\n nodeRadius: 30,\n nodeStrokeWidth: 1.5,\n linkWidth: 1.5,\n linkStyle: 'curved',\n nodeWidth: 120,\n nodeHeight: 60,\n nodeSpacingX: 80,\n nodeSpacingY: 120,\n showTooltip: true,\n collapsible: true,\n expandAll: false,\n animationDuration: 100,\n animationEasing: 'cubic-out',\n messages: {\n ...AX_CHART_DEFAULT_MESSAGES,\n noDataIcon: 'fa-light fa-sitemap',\n },\n};\n\nexport const AX_HIERARCHY_CHART_CONFIG = new InjectionToken<AXHierarchyChartOption>('AX_HIERARCHY_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXHierarchyChartDefaultConfig,\n});\n\nexport type PartialHierarchyChartConfig = Partial<AXHierarchyChartOption>;\n\nexport function hierarchyChartConfig(config: PartialHierarchyChartConfig = {}): AXHierarchyChartOption {\n return {\n ...AXHierarchyChartDefaultConfig,\n ...config,\n margin: {\n ...AXHierarchyChartDefaultConfig.margin,\n ...config.margin,\n },\n messages: {\n ...AXHierarchyChartDefaultConfig.messages,\n ...config.messages,\n },\n };\n}\n","import { AXChartComponent, AXChartComponentBase, mergeChartMessages, mergeChartOptions, renderChartEmptyMessage } from '@acorex/charts';\n\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n EmbeddedViewRef,\n NgZone,\n OnDestroy,\n TemplateRef,\n ViewContainerRef,\n ViewEncapsulation,\n afterNextRender,\n computed,\n contentChild,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { AX_HIERARCHY_CHART_CONFIG } from './hierarchy-chart.config';\nimport {\n AXHierarchyChartClickEvent,\n AXHierarchyChartData,\n AXHierarchyChartNode,\n AXHierarchyChartNodeContext,\n AXHierarchyChartOption,\n AXHierarchyChartToggleEvent,\n} from './hierarchy-chart.type';\n/**\n * A highly customizable hierarchical visualization component that can be used for:\n * - Organization charts\n * - Tree diagrams\n * - Dependency visualizations\n * - Process flows\n *\n * Supports both default node styling and custom node templates.\n */\n@Component({\n selector: 'ax-hierarchy-chart',\n templateUrl: './hierarchy-chart.component.html',\n styleUrls: ['./hierarchy-chart.component.css'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AXHierarchyChartComponent extends AXChartComponent implements AXChartComponentBase, OnDestroy {\n // Chart container reference\n private chartContainer = viewChild.required<ElementRef<HTMLDivElement>>('chartContainer');\n\n // Custom node template provided by the user\n customNodeTemplate = contentChild<TemplateRef<AXHierarchyChartNodeContext>>('nodeTemplate');\n // Services\n private ngZone = inject(NgZone);\n private viewContainerRef = inject(ViewContainerRef);\n private configToken = inject(AX_HIERARCHY_CHART_CONFIG);\n\n // D3 instance\n private d3: any;\n\n // Internal state signals\n private _expandedNodes = signal<Map<string, boolean>>(new Map());\n private _initialized = signal(false);\n private _rendered = signal(false);\n private _dimensions = signal({ width: 0, height: 0 });\n private _nodeElements = signal<Map<string, any>>(new Map()); // Store references to node elements\n private _chartData = signal<any>(null); // Store the current chart data and layout\n private embeddedViews: EmbeddedViewRef<unknown>[] = [];\n\n // Inputs\n data = input<AXHierarchyChartData | AXHierarchyChartData[]>([]);\n options = input<AXHierarchyChartOption>({});\n nodeTemplate = input<TemplateRef<AXHierarchyChartNodeContext> | null>(null);\n\n // Outputs\n itemClick = output<AXHierarchyChartClickEvent>();\n nodeToggle = output<AXHierarchyChartToggleEvent>();\n\n // Computed values\n protected processedData = computed(() => {\n const data = this.data();\n // Handle both single node and array formats\n return Array.isArray(data) ? { id: 'root', children: data } : data;\n });\n\n // Check if custom template is available\n protected hasCustomTemplate = computed(() => {\n return Boolean(this.customNodeTemplate() || this.nodeTemplate());\n });\n\n protected effectiveOptions = computed(() => mergeChartOptions(this.configToken, this.options()));\n\n // Messages with defaults\n protected effectiveMessages = computed(() =>\n mergeChartMessages(this.configToken.messages, this.options()?.messages),\n );\n\n constructor() {\n super();\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n this.initializeExpandedState();\n });\n\n // Watch for changes to redraw the chart\n effect(() => {\n // Access these to track them\n this.processedData();\n this.nodeTemplate();\n this.customNodeTemplate();\n this.effectiveOptions();\n this._expandedNodes();\n\n if (this._initialized() && this.d3 && this._rendered()) {\n this.createChart();\n }\n });\n }\n\n /**\n * Initialize the expanded state for all nodes\n */\n private initializeExpandedState(): void {\n const newExpandedNodes = new Map<string, boolean>();\n const data = this.processedData();\n const expandAll = this.effectiveOptions().expandAll;\n\n // Helper function to recursively process nodes\n const processNode = (node: AXHierarchyChartData) => {\n if (node.children && node.children.length > 0) {\n // Set initial expansion state based on node property or global option\n newExpandedNodes.set(node.id, node.isExpanded !== undefined ? node.isExpanded : expandAll);\n\n // Process children\n node.children.forEach((child) => processNode(child));\n }\n };\n\n // Start processing\n if (data.children) {\n data.children.forEach((node) => processNode(node));\n } else if ((data as any).id) {\n processNode(data as AXHierarchyChartData);\n }\n\n this._expandedNodes.set(newExpandedNodes);\n }\n\n /**\n * Dynamically load D3.js to reduce initial bundle size\n */\n protected async loadD3(): Promise<void> {\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainer()) {\n this.updateDimensions();\n this.createChart();\n this._rendered.set(true);\n }\n } catch (error) {\n console.error('Failed to load D3.js:', error);\n }\n }\n\n /**\n * Update dimensions based on container size\n */\n private updateDimensions(): void {\n const container = this.chartContainer().nativeElement;\n const options = this.effectiveOptions();\n\n const containerRect = container.getBoundingClientRect();\n const width = options.width || Math.max(containerRect.width || 0, 1);\n const height = options.height || Math.max(containerRect.height || 0, 1);\n\n this._dimensions.set({ width, height });\n }\n\n /**\n * Create and render the hierarchy chart\n */\n public createChart(): void {\n if (!this.d3) {\n return;\n }\n\n // Clear any existing chart\n this.cleanupChart();\n\n const container = this.chartContainer().nativeElement;\n const data = this.processedData();\n\n // Check for null/undefined data or empty children\n if (!data || !data.children || data.children.length === 0) {\n this.showNoDataMessage(container);\n return;\n }\n\n const options = this.effectiveOptions();\n const dimensions = this._dimensions();\n const expandedNodes = this._expandedNodes();\n\n this.ngZone.runOutsideAngular(() => {\n // Get dimensions and options\n const { width, height } = dimensions;\n const margin = options.margin || { top: 40, right: 120, bottom: 40, left: 120 };\n const nodeWidth = options.nodeWidth || 120;\n const nodeHeight = options.nodeHeight || 60;\n const nodeSpacingX = options.nodeSpacingX || 80;\n const nodeSpacingY = options.nodeSpacingY || 120;\n const isHorizontal = options.direction === 'horizontal';\n\n // Create SVG container with viewBox for responsiveness\n const svg = this.d3\n .select(container)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .style('overflow', 'visible')\n .classed(options.className || '', !!options.className);\n\n // Create hierarchy layout from data\n const rootData = this.processedData();\n const root = this.d3.hierarchy(rootData);\n\n // Apply expansion state to nodes\n root.descendants().forEach((node: any) => {\n if (node.data.id !== 'root' && node.children) {\n if (expandedNodes.has(node.data.id) && !expandedNodes.get(node.data.id)) {\n node._children = node.children; // Store children\n node.children = null; // Collapse node\n }\n }\n });\n\n // Set up the tree layout based on direction option\n const treeLayout = this.d3\n .tree()\n .nodeSize([\n isHorizontal ? nodeHeight + nodeSpacingY : nodeWidth + nodeSpacingX,\n isHorizontal ? nodeWidth + nodeSpacingX : nodeHeight + nodeSpacingY,\n ])\n .separation((a: any, b: any) => {\n return a.parent === b.parent ? 1.2 : 1.5;\n });\n\n treeLayout(root);\n\n // Store the current tree layout data for future updates\n this._chartData.set({\n root,\n treeLayout,\n isHorizontal,\n nodeWidth,\n nodeHeight,\n });\n\n // Adjust root position based on direction\n const rootX = isHorizontal ? margin.top : width / 2;\n const rootY = isHorizontal ? margin.left : margin.top;\n\n // Calculate bounds of the tree after layout\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n\n root.descendants().forEach((d: any) => {\n if (d.data.id === 'root') return;\n\n const x = isHorizontal ? d.x : d.x;\n const y = isHorizontal ? d.y : d.y;\n\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n });\n\n // Calculate the center of the tree\n const centerX = Number.isFinite(minX) && Number.isFinite(maxX) ? (minX + maxX) / 2 : 0;\n const centerY = Number.isFinite(minY) && Number.isFinite(maxY) ? (minY + maxY) / 2 : 0;\n\n // Create a group for the chart content with proper centering\n const g = svg\n .append('g')\n .attr(\n 'transform',\n isHorizontal\n ? `translate(${margin.left}, ${height / 2 - centerX})`\n : `translate(${width / 2 - centerX}, ${margin.top})`,\n );\n\n // Add zoom and pan behavior (replaces AXPanViewDirective)\n const zoom = this.d3\n .zoom()\n .scaleExtent([0.1, 3]) // Min zoom: 10%, Max zoom: 300%\n .on('zoom', (event: any) => {\n g.attr('transform', event.transform);\n });\n\n // Apply zoom behavior to SVG\n svg.call(zoom);\n\n // Set initial transform to match the centering\n const initialTransform = this.d3.zoomIdentity.translate(\n isHorizontal ? margin.left : width / 2 - centerX,\n isHorizontal ? height / 2 - centerX : margin.top,\n );\n svg.call(zoom.transform, initialTransform);\n\n // Draw links between nodes\n const links = g\n .selectAll('.link')\n .data(root.links().filter((d: any) => d.source.data.id !== 'root'))\n .enter()\n .append('path')\n .attr('class', 'ax-hierarchy-chart-link')\n .attr('d', (d: any) => {\n // Get the link style from options\n const linkStyle = options.linkStyle || 'curved';\n\n // Source and target coordinates based on direction\n const sourceX = isHorizontal ? d.source.y : d.source.x;\n const sourceY = isHorizontal ? d.source.x : d.source.y;\n const targetX = isHorizontal ? d.target.y : d.target.x;\n const targetY = isHorizontal ? d.target.x : d.target.y;\n\n // Variables for rounded corners\n let xDistance, yDistance, cornerRadius, midX, midY;\n\n switch (linkStyle) {\n case 'straight':\n // Direct straight line\n return `M${sourceX},${sourceY}L${targetX},${targetY}`;\n\n case 'rounded':\n // Curved line with rounded corners\n xDistance = Math.abs(targetX - sourceX);\n yDistance = Math.abs(targetY - sourceY);\n cornerRadius = Math.min(xDistance, yDistance) * 0.2; // Reduced radius for better appearance\n\n if (isHorizontal) {\n // For horizontal layout\n const halfDistance = (targetX - sourceX) / 2;\n const xMid = sourceX + halfDistance;\n\n return `\n M${sourceX},${sourceY}\n H${xMid - cornerRadius}\n Q${xMid},${sourceY} ${xMid},${sourceY + Math.sign(targetY - sourceY) * cornerRadius}\n V${targetY - Math.sign(targetY - sourceY) * cornerRadius}\n Q${xMid},${targetY} ${xMid + cornerRadius},${targetY}\n H${targetX}\n `;\n } else {\n // For vertical layout\n const halfDistance = (targetY - sourceY) / 2;\n const yMid = sourceY + halfDistance;\n\n return `\n M${sourceX},${sourceY}\n V${yMid - cornerRadius}\n Q${sourceX},${yMid} ${sourceX + Math.sign(targetX - sourceX) * cornerRadius},${yMid}\n H${targetX - Math.sign(targetX - sourceX) * cornerRadius}\n Q${targetX},${yMid} ${targetX},${yMid + cornerRadius}\n V${targetY}\n `;\n }\n\n case 'step':\n // L-shaped stepped line\n if (isHorizontal) {\n return `M${sourceX},${sourceY}H${(sourceX + targetX) / 2}V${targetY}H${targetX}`;\n } else {\n return `M${sourceX},${sourceY}V${(sourceY + targetY) / 2}H${targetX}V${targetY}`;\n }\n\n case 'curved':\n default:\n // Default curved line using D3's built-in link generator\n if (isHorizontal) {\n return this.d3\n .linkHorizontal()\n .x((d: any) => d.y)\n .y((d: any) => d.x)(d);\n } else {\n return this.d3\n .linkVertical()\n .x((d: any) => d.x)\n .y((d: any) => d.y)(d);\n }\n }\n })\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-link-color))`)\n .attr('stroke-width', options.linkWidth)\n .attr('fill', 'none')\n .attr('opacity', 1);\n\n // Determine which template to use for rendering nodes\n const useCustomTemplate = this.hasCustomTemplate();\n const templateToUse = this.nodeTemplate() || this.customNodeTemplate();\n\n // Create a map to store node elements for future updates\n const nodeElementsMap = new Map<string, any>();\n\n // Create node groups\n const nodeGroups = g\n .selectAll('.node-group')\n .data(root.descendants().filter((d: any) => d.data.id !== 'root'))\n .enter()\n .append('g')\n .attr('class', 'ax-hierarchy-chart-node-group')\n .attr('data-node-id', (d: any) => d.data.id) // Add a data attribute for easier selection\n .attr('transform', (d: any) => {\n const x = isHorizontal ? d.y : d.x;\n const y = isHorizontal ? d.x : d.y;\n return `translate(${x},${y})`;\n })\n .attr('opacity', 1); // Display nodes immediately with full opacity\n\n // Store node elements in the map\n nodeGroups.each(function (this: SVGGElement, d: any) {\n nodeElementsMap.set(d.data.id, this);\n });\n\n // Update the node elements signal\n this._nodeElements.set(nodeElementsMap);\n\n if (useCustomTemplate && templateToUse) {\n // Render custom node templates\n nodeGroups.each((d: any, i: number, nodes: any[]) => {\n const node = d.data;\n const element = nodes[i];\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = hasChildren && this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n\n // Enhance the node with expanded state and toggle function\n node.expanded = isExpanded || false;\n node.toggleExpanded = () => this.toggleNode(node.id);\n\n // Create a foreignObject for the template\n const foreignObject = this.d3\n .select(element)\n .append('foreignObject')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('class', 'ax-hierarchy-chart-node-container')\n .on('click', (event: MouseEvent) => {\n // Don't propagate the event if it's coming from an interactive element\n // like a button inside the template\n const target = event.target as HTMLElement;\n const isInteractive =\n target.tagName === 'BUTTON' || target.tagName === 'A' || target.closest('button, a, [role=\"button\"]');\n\n if (!isInteractive) {\n this.handleNodeClick(event, d);\n }\n });\n\n // Create a div to hold the template\n const div = foreignObject\n .append('xhtml:div')\n .attr('class', 'ax-hierarchy-chart-node-content')\n .style('width', '100%')\n .style('height', '100%');\n\n // Render the template into the div\n this.ngZone.run(() => {\n // Create context with enhanced node as the implicit value\n const context: AXHierarchyChartNodeContext = {\n $implicit: node as AXHierarchyChartNode & { expanded: boolean; toggleExpanded: () => void },\n };\n\n const viewRef = this.viewContainerRef.createEmbeddedView(templateToUse!, context);\n this.embeddedViews.push(viewRef);\n viewRef.detectChanges();\n\n // Append template contents to the div\n const nodes = viewRef.rootNodes;\n for (const node of nodes) {\n div.node().appendChild(node);\n }\n });\n });\n } else {\n // Render enhanced default nodes (rectangles with text and icons)\n nodeGroups.each((d: any, i: number, nodes: any[]) => {\n const group = this.d3.select(nodes[i]);\n const node = d.data;\n const hasChildren = !!(node.children && node.children.length > 0);\n\n // Node background rect with rounded corners\n group\n .append('rect')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('rx', 6)\n .attr('ry', 6)\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', options.nodeStrokeWidth)\n .attr('class', 'ax-hierarchy-chart-node');\n\n // Main title/name\n group\n .append('text')\n .attr('y', -10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-title')\n .attr('fill', 'white')\n .attr('font-weight', 'bold')\n .text(node.name || node.label || '');\n\n // Subtitle if provided\n if (node.subtitle) {\n group\n .append('text')\n .attr('y', 10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-subtitle')\n .attr('fill', 'rgba(255, 255, 255, 0.8)')\n .attr('font-size', '0.8em')\n .text(node.subtitle);\n }\n\n // Type label if provided\n if (node.type) {\n group\n .append('text')\n .attr('y', 25)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-type')\n .attr('fill', 'rgba(255, 255, 255, 0.7)')\n .attr('font-size', '0.7em')\n .text(node.type);\n }\n\n // Add expand/collapse indicator if node has children\n if (hasChildren && options.collapsible) {\n const isExpanded = this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n\n // Toggle button with better styling\n group\n .append('circle')\n .attr('r', 10)\n .attr('cx', nodeWidth / 2 - 12)\n .attr('cy', -nodeHeight / 2 + 12)\n .attr('fill', 'white')\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', 1)\n .attr('class', 'ax-hierarchy-chart-toggle-indicator')\n .style('cursor', 'pointer')\n .on('click', (event: MouseEvent) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n\n // Toggle icon\n group\n .append('text')\n .attr('x', nodeWidth / 2 - 12)\n .attr('y', -nodeHeight / 2 + 12)\n .attr('dy', '0.32em')\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-toggle-icon')\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('font-weight', 'bold')\n .style('cursor', 'pointer')\n .text(isExpanded ? '−' : '+')\n .on('click', (event: MouseEvent) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n }\n\n // Icon if provided\n if (node.icon) {\n group\n .append('text')\n .attr('x', -nodeWidth / 2 + 15)\n .attr('y', 0)\n .attr('dy', '0.32em')\n .attr('class', 'ax-hierarchy-chart-node-icon')\n .attr('fill', 'white')\n .attr('class', node.icon);\n }\n\n // Add click handler to the whole node\n group.on('click', (event: MouseEvent) => {\n this.handleNodeClick(event, d);\n });\n\n // Add tooltip if enabled\n if (options.showTooltip && (node.tooltip || node.description)) {\n group.append('title').text(node.tooltip || node.description || '');\n }\n });\n }\n });\n }\n\n /**\n * Toggle node expansion state\n */\n public toggleNode(nodeId: string): void {\n const expandedNodes = new Map(this._expandedNodes());\n const currentState = expandedNodes.get(nodeId);\n const newState = currentState === undefined ? false : !currentState;\n\n expandedNodes.set(nodeId, newState);\n this._expandedNodes.set(expandedNodes);\n\n // Emit toggle event\n this.findNodeById(this.processedData(), nodeId).then((node) => {\n if (node) {\n this.nodeToggle.emit({\n node: node,\n expanded: newState,\n });\n }\n });\n\n // Update toggle indicator immediately for better UX\n this.updateToggleIndicator(nodeId, newState);\n }\n\n /**\n * Update just the toggle indicator without redrawing the chart\n */\n private updateToggleIndicator(nodeId: string, expanded: boolean): void {\n if (!this.d3 || !this.chartContainer()) return;\n\n this.ngZone.runOutsideAngular(() => {\n const container = this.chartContainer().nativeElement;\n const svg = container.querySelector('svg');\n if (!svg) return;\n\n // Find and update the toggle indicator for the specific node\n const nodeGroup = this.d3.select(svg).select(`[data-node-id=\"${nodeId}\"]`);\n if (nodeGroup.empty()) return;\n\n // Update the toggle icon (if it exists)\n const toggleIcon = nodeGroup.select('.ax-hierarchy-chart-toggle-icon');\n if (!toggleIcon.empty()) {\n toggleIcon.text(expanded ? '−' : '+');\n }\n });\n\n // Force effect to run that will update the chart\n // This leverages Angular's reactivity rather than a direct method call\n // which is more consistent with Angular's reactive approach\n const expandedNodes = new Map(this._expandedNodes());\n this._expandedNodes.set(expandedNodes);\n }\n\n /**\n * Find a node by ID\n */\n private async findNodeById(data: AXHierarchyChartData, id: string): Promise<AXHierarchyChartData | null> {\n if (data.id === id) {\n return data;\n }\n\n if (data.children) {\n for (const child of data.children) {\n const found = await this.findNodeById(child, id);\n if (found) {\n return found;\n }\n }\n }\n\n return null;\n }\n\n /**\n * Handle node click events\n */\n private handleNodeClick(event: MouseEvent, d: any): void {\n const node = d.data;\n\n // Emit click event\n this.itemClick.emit({\n event: { nativeEvent: event, sender: this },\n item: node,\n element: event.currentTarget as HTMLElement,\n });\n }\n\n /**\n * Clear existing chart\n */\n public cleanupChart(): void {\n this.destroyEmbeddedViews();\n\n const container = this.chartContainer()?.nativeElement;\n if (!container) return;\n\n container.querySelectorAll('svg, .ax-chart-empty, .ax-hierarchy-chart-no-data-message').forEach((el) => el.remove());\n }\n\n ngOnDestroy(): void {\n this.cleanupChart();\n }\n\n private destroyEmbeddedViews(): void {\n for (const view of this.embeddedViews) {\n view.destroy();\n }\n this.embeddedViews = [];\n }\n\n public updateChart(): void {\n this.createChart();\n }\n\n /**\n * Get D3 easing function from string name\n */\n private getEasingFunction(easing?: string): any {\n if (!easing) return this.d3.easeCubicInOut;\n\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicInOut;\n }\n }\n\n /**\n * Shows a message when no data is available\n */\n private showNoDataMessage(containerElement: HTMLElement): void {\n const messages = this.effectiveMessages();\n renderChartEmptyMessage(this.d3, containerElement, {\n icon: messages.noDataIcon,\n title: messages.noData,\n help: messages.noDataHelp,\n });\n }\n}\n","<div class=\"ax-hierarchy-chart\" role=\"img\" #chartContainer></div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-charts-hierarchy-chart.mjs","sources":["../tmp-esm2022/hierarchy-chart/lib/hierarchy-chart.config.js","../tmp-esm2022/hierarchy-chart/lib/hierarchy-chart.component.js","../tmp-esm2022/hierarchy-chart/acorex-charts-hierarchy-chart.js"],"sourcesContent":["import { AX_CHART_DEFAULT_MESSAGES } from '@acorex/charts';\nimport { InjectionToken } from '@angular/core';\nexport const AXHierarchyChartDefaultConfig = {\n direction: 'vertical',\n margin: { top: 40, right: 120, bottom: 40, left: 120 },\n nodeRadius: 30,\n nodeStrokeWidth: 1.5,\n linkWidth: 1.5,\n linkStyle: 'curved',\n nodeWidth: 120,\n nodeHeight: 60,\n nodeSpacingX: 80,\n nodeSpacingY: 120,\n showTooltip: true,\n collapsible: true,\n expandAll: false,\n animationDuration: 100,\n animationEasing: 'cubic-out',\n messages: {\n ...AX_CHART_DEFAULT_MESSAGES,\n noDataIcon: 'fa-light fa-sitemap',\n },\n};\nexport const AX_HIERARCHY_CHART_CONFIG = new InjectionToken('AX_HIERARCHY_CHART_CONFIG', {\n providedIn: 'root',\n factory: () => AXHierarchyChartDefaultConfig,\n});\nexport function hierarchyChartConfig(config = {}) {\n return {\n ...AXHierarchyChartDefaultConfig,\n ...config,\n margin: {\n ...AXHierarchyChartDefaultConfig.margin,\n ...config.margin,\n },\n messages: {\n ...AXHierarchyChartDefaultConfig.messages,\n ...config.messages,\n },\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWNoYXJ0LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9oaWVyYXJjaHktY2hhcnQvc3JjL2xpYi9oaWVyYXJjaHktY2hhcnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQTJCO0lBQ25FLFNBQVMsRUFBRSxVQUFVO0lBQ3JCLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7SUFDdEQsVUFBVSxFQUFFLEVBQUU7SUFDZCxlQUFlLEVBQUUsR0FBRztJQUNwQixTQUFTLEVBQUUsR0FBRztJQUNkLFNBQVMsRUFBRSxRQUFRO0lBQ25CLFNBQVMsRUFBRSxHQUFHO0lBQ2QsVUFBVSxFQUFFLEVBQUU7SUFDZCxZQUFZLEVBQUUsRUFBRTtJQUNoQixZQUFZLEVBQUUsR0FBRztJQUNqQixXQUFXLEVBQUUsSUFBSTtJQUNqQixXQUFXLEVBQUUsSUFBSTtJQUNqQixTQUFTLEVBQUUsS0FBSztJQUNoQixpQkFBaUIsRUFBRSxHQUFHO0lBQ3RCLGVBQWUsRUFBRSxXQUFXO0lBQzVCLFFBQVEsRUFBRTtRQUNSLEdBQUcseUJBQXlCO1FBQzVCLFVBQVUsRUFBRSxxQkFBcUI7S0FDbEM7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQXlCLDJCQUEyQixFQUFFO0lBQy9HLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyw2QkFBNkI7Q0FDN0MsQ0FBQyxDQUFDO0FBSUgsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFNBQXNDLEVBQUU7SUFDM0UsT0FBTztRQUNMLEdBQUcsNkJBQTZCO1FBQ2hDLEdBQUcsTUFBTTtRQUNULE1BQU0sRUFBRTtZQUNOLEdBQUcsNkJBQTZCLENBQUMsTUFBTTtZQUN2QyxHQUFHLE1BQU0sQ0FBQyxNQUFNO1NBQ2pCO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsR0FBRyw2QkFBNkIsQ0FBQyxRQUFRO1lBQ3pDLEdBQUcsTUFBTSxDQUFDLFFBQVE7U0FDbkI7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYX0NIQVJUX0RFRkFVTFRfTUVTU0FHRVMgfSBmcm9tICdAYWNvcmV4L2NoYXJ0cyc7XG5pbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhIaWVyYXJjaHlDaGFydE9wdGlvbiB9IGZyb20gJy4vaGllcmFyY2h5LWNoYXJ0LnR5cGUnO1xuXG5leHBvcnQgY29uc3QgQVhIaWVyYXJjaHlDaGFydERlZmF1bHRDb25maWc6IEFYSGllcmFyY2h5Q2hhcnRPcHRpb24gPSB7XG4gIGRpcmVjdGlvbjogJ3ZlcnRpY2FsJyxcbiAgbWFyZ2luOiB7IHRvcDogNDAsIHJpZ2h0OiAxMjAsIGJvdHRvbTogNDAsIGxlZnQ6IDEyMCB9LFxuICBub2RlUmFkaXVzOiAzMCxcbiAgbm9kZVN0cm9rZVdpZHRoOiAxLjUsXG4gIGxpbmtXaWR0aDogMS41LFxuICBsaW5rU3R5bGU6ICdjdXJ2ZWQnLFxuICBub2RlV2lkdGg6IDEyMCxcbiAgbm9kZUhlaWdodDogNjAsXG4gIG5vZGVTcGFjaW5nWDogODAsXG4gIG5vZGVTcGFjaW5nWTogMTIwLFxuICBzaG93VG9vbHRpcDogdHJ1ZSxcbiAgY29sbGFwc2libGU6IHRydWUsXG4gIGV4cGFuZEFsbDogZmFsc2UsXG4gIGFuaW1hdGlvbkR1cmF0aW9uOiAxMDAsXG4gIGFuaW1hdGlvbkVhc2luZzogJ2N1YmljLW91dCcsXG4gIG1lc3NhZ2VzOiB7XG4gICAgLi4uQVhfQ0hBUlRfREVGQVVMVF9NRVNTQUdFUyxcbiAgICBub0RhdGFJY29uOiAnZmEtbGlnaHQgZmEtc2l0ZW1hcCcsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgQVhfSElFUkFSQ0hZX0NIQVJUX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWEhpZXJhcmNoeUNoYXJ0T3B0aW9uPignQVhfSElFUkFSQ0hZX0NIQVJUX0NPTkZJRycsIHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICBmYWN0b3J5OiAoKSA9PiBBWEhpZXJhcmNoeUNoYXJ0RGVmYXVsdENvbmZpZyxcbn0pO1xuXG5leHBvcnQgdHlwZSBQYXJ0aWFsSGllcmFyY2h5Q2hhcnRDb25maWcgPSBQYXJ0aWFsPEFYSGllcmFyY2h5Q2hhcnRPcHRpb24+O1xuXG5leHBvcnQgZnVuY3Rpb24gaGllcmFyY2h5Q2hhcnRDb25maWcoY29uZmlnOiBQYXJ0aWFsSGllcmFyY2h5Q2hhcnRDb25maWcgPSB7fSk6IEFYSGllcmFyY2h5Q2hhcnRPcHRpb24ge1xuICByZXR1cm4ge1xuICAgIC4uLkFYSGllcmFyY2h5Q2hhcnREZWZhdWx0Q29uZmlnLFxuICAgIC4uLmNvbmZpZyxcbiAgICBtYXJnaW46IHtcbiAgICAgIC4uLkFYSGllcmFyY2h5Q2hhcnREZWZhdWx0Q29uZmlnLm1hcmdpbixcbiAgICAgIC4uLmNvbmZpZy5tYXJnaW4sXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgLi4uQVhIaWVyYXJjaHlDaGFydERlZmF1bHRDb25maWcubWVzc2FnZXMsXG4gICAgICAuLi5jb25maWcubWVzc2FnZXMsXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==","import { AXChartComponent, mergeChartMessages, mergeChartOptions, renderChartEmptyMessage } from '@acorex/charts';\nimport { ChangeDetectionStrategy, Component, NgZone, ViewContainerRef, ViewEncapsulation, afterNextRender, computed, contentChild, effect, inject, input, output, signal, viewChild, } from '@angular/core';\nimport { AX_HIERARCHY_CHART_CONFIG } from './hierarchy-chart.config';\nimport * as i0 from \"@angular/core\";\n/**\n * A highly customizable hierarchical visualization component that can be used for:\n * - Organization charts\n * - Tree diagrams\n * - Dependency visualizations\n * - Process flows\n *\n * Supports both default node styling and custom node templates.\n */\nexport class AXHierarchyChartComponent extends AXChartComponent {\n // Chart container reference\n chartContainer = viewChild.required('chartContainer');\n // Custom node template provided by the user\n customNodeTemplate = contentChild('nodeTemplate', ...(ngDevMode ? [{ debugName: \"customNodeTemplate\" }] : []));\n // Services\n ngZone = inject(NgZone);\n viewContainerRef = inject(ViewContainerRef);\n configToken = inject(AX_HIERARCHY_CHART_CONFIG);\n // D3 instance\n d3;\n // Internal state signals\n _expandedNodes = signal(new Map(), ...(ngDevMode ? [{ debugName: \"_expandedNodes\" }] : []));\n _initialized = signal(false, ...(ngDevMode ? [{ debugName: \"_initialized\" }] : []));\n _rendered = signal(false, ...(ngDevMode ? [{ debugName: \"_rendered\" }] : []));\n _dimensions = signal({ width: 0, height: 0 }, ...(ngDevMode ? [{ debugName: \"_dimensions\" }] : []));\n _nodeElements = signal(new Map(), ...(ngDevMode ? [{ debugName: \"_nodeElements\" }] : [])); // Store references to node elements\n _chartData = signal(null, ...(ngDevMode ? [{ debugName: \"_chartData\" }] : [])); // Store the current chart data and layout\n embeddedViews = [];\n // Inputs\n data = input([], ...(ngDevMode ? [{ debugName: \"data\" }] : []));\n options = input({}, ...(ngDevMode ? [{ debugName: \"options\" }] : []));\n nodeTemplate = input(null, ...(ngDevMode ? [{ debugName: \"nodeTemplate\" }] : []));\n // Outputs\n itemClick = output();\n nodeToggle = output();\n // Computed values\n processedData = computed(() => {\n const data = this.data();\n // Handle both single node and array formats\n return Array.isArray(data) ? { id: 'root', children: data } : data;\n }, ...(ngDevMode ? [{ debugName: \"processedData\" }] : []));\n // Check if custom template is available\n hasCustomTemplate = computed(() => {\n return Boolean(this.customNodeTemplate() || this.nodeTemplate());\n }, ...(ngDevMode ? [{ debugName: \"hasCustomTemplate\" }] : []));\n effectiveOptions = computed(() => mergeChartOptions(this.configToken, this.options()), ...(ngDevMode ? [{ debugName: \"effectiveOptions\" }] : []));\n // Messages with defaults\n effectiveMessages = computed(() => mergeChartMessages(this.configToken.messages, this.options()?.messages), ...(ngDevMode ? [{ debugName: \"effectiveMessages\" }] : []));\n constructor() {\n super();\n // Dynamically load D3 and initialize the chart when the component is ready\n afterNextRender(() => {\n this._initialized.set(true);\n this.loadD3();\n this.initializeExpandedState();\n });\n // Watch for changes to redraw the chart\n effect(() => {\n // Access these to track them\n this.processedData();\n this.nodeTemplate();\n this.customNodeTemplate();\n this.effectiveOptions();\n this._expandedNodes();\n if (this._initialized() && this.d3 && this._rendered()) {\n this.createChart();\n }\n });\n }\n /**\n * Initialize the expanded state for all nodes\n */\n initializeExpandedState() {\n const newExpandedNodes = new Map();\n const data = this.processedData();\n const expandAll = this.effectiveOptions().expandAll;\n // Helper function to recursively process nodes\n const processNode = (node) => {\n if (node.children && node.children.length > 0) {\n // Set initial expansion state based on node property or global option\n newExpandedNodes.set(node.id, node.isExpanded !== undefined ? node.isExpanded : expandAll);\n // Process children\n node.children.forEach((child) => processNode(child));\n }\n };\n // Start processing\n if (data.children) {\n data.children.forEach((node) => processNode(node));\n }\n else if (data.id) {\n processNode(data);\n }\n this._expandedNodes.set(newExpandedNodes);\n }\n /**\n * Dynamically load D3.js to reduce initial bundle size\n */\n async loadD3() {\n try {\n this.d3 = await import('d3');\n if (this._initialized() && this.chartContainer()) {\n this.updateDimensions();\n this.createChart();\n this._rendered.set(true);\n }\n }\n catch (error) {\n console.error('Failed to load D3.js:', error);\n }\n }\n /**\n * Update dimensions based on container size\n */\n updateDimensions() {\n const container = this.chartContainer().nativeElement;\n const options = this.effectiveOptions();\n const containerRect = container.getBoundingClientRect();\n const width = options.width || Math.max(containerRect.width || 0, 1);\n const height = options.height || Math.max(containerRect.height || 0, 1);\n this._dimensions.set({ width, height });\n }\n /**\n * Create and render the hierarchy chart\n */\n createChart() {\n if (!this.d3) {\n return;\n }\n // Clear any existing chart\n this.cleanupChart();\n const container = this.chartContainer().nativeElement;\n const data = this.processedData();\n // Check for null/undefined data or empty children\n if (!data || !data.children || data.children.length === 0) {\n this.showNoDataMessage(container);\n return;\n }\n const options = this.effectiveOptions();\n const dimensions = this._dimensions();\n const expandedNodes = this._expandedNodes();\n this.ngZone.runOutsideAngular(() => {\n // Get dimensions and options\n const { width, height } = dimensions;\n const margin = options.margin || { top: 40, right: 120, bottom: 40, left: 120 };\n const nodeWidth = options.nodeWidth || 120;\n const nodeHeight = options.nodeHeight || 60;\n const nodeSpacingX = options.nodeSpacingX || 80;\n const nodeSpacingY = options.nodeSpacingY || 120;\n const isHorizontal = options.direction === 'horizontal';\n // Create SVG container with viewBox for responsiveness\n const svg = this.d3\n .select(container)\n .append('svg')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('viewBox', `0 0 ${width} ${height}`)\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .style('overflow', 'visible')\n .classed(options.className || '', !!options.className);\n // Create hierarchy layout from data\n const rootData = this.processedData();\n const root = this.d3.hierarchy(rootData);\n // Apply expansion state to nodes\n root.descendants().forEach((node) => {\n if (node.data.id !== 'root' && node.children) {\n if (expandedNodes.has(node.data.id) && !expandedNodes.get(node.data.id)) {\n node._children = node.children; // Store children\n node.children = null; // Collapse node\n }\n }\n });\n // Set up the tree layout based on direction option\n const treeLayout = this.d3\n .tree()\n .nodeSize([\n isHorizontal ? nodeHeight + nodeSpacingY : nodeWidth + nodeSpacingX,\n isHorizontal ? nodeWidth + nodeSpacingX : nodeHeight + nodeSpacingY,\n ])\n .separation((a, b) => {\n return a.parent === b.parent ? 1.2 : 1.5;\n });\n treeLayout(root);\n // Store the current tree layout data for future updates\n this._chartData.set({\n root,\n treeLayout,\n isHorizontal,\n nodeWidth,\n nodeHeight,\n });\n // Adjust root position based on direction\n const rootX = isHorizontal ? margin.top : width / 2;\n const rootY = isHorizontal ? margin.left : margin.top;\n // Calculate bounds of the tree after layout\n let minX = Infinity;\n let maxX = -Infinity;\n let minY = Infinity;\n let maxY = -Infinity;\n root.descendants().forEach((d) => {\n if (d.data.id === 'root')\n return;\n const x = isHorizontal ? d.x : d.x;\n const y = isHorizontal ? d.y : d.y;\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n });\n // Calculate the center of the tree\n const centerX = Number.isFinite(minX) && Number.isFinite(maxX) ? (minX + maxX) / 2 : 0;\n const centerY = Number.isFinite(minY) && Number.isFinite(maxY) ? (minY + maxY) / 2 : 0;\n // Create a group for the chart content with proper centering\n const g = svg\n .append('g')\n .attr('transform', isHorizontal\n ? `translate(${margin.left}, ${height / 2 - centerX})`\n : `translate(${width / 2 - centerX}, ${margin.top})`);\n // Add zoom and pan behavior (replaces AXPanViewDirective)\n const zoom = this.d3\n .zoom()\n .scaleExtent([0.1, 3]) // Min zoom: 10%, Max zoom: 300%\n .on('zoom', (event) => {\n g.attr('transform', event.transform);\n });\n // Apply zoom behavior to SVG\n svg.call(zoom);\n // Set initial transform to match the centering\n const initialTransform = this.d3.zoomIdentity.translate(isHorizontal ? margin.left : width / 2 - centerX, isHorizontal ? height / 2 - centerX : margin.top);\n svg.call(zoom.transform, initialTransform);\n // Draw links between nodes\n const links = g\n .selectAll('.link')\n .data(root.links().filter((d) => d.source.data.id !== 'root'))\n .enter()\n .append('path')\n .attr('class', 'ax-hierarchy-chart-link')\n .attr('d', (d) => {\n // Get the link style from options\n const linkStyle = options.linkStyle || 'curved';\n // Source and target coordinates based on direction\n const sourceX = isHorizontal ? d.source.y : d.source.x;\n const sourceY = isHorizontal ? d.source.x : d.source.y;\n const targetX = isHorizontal ? d.target.y : d.target.x;\n const targetY = isHorizontal ? d.target.x : d.target.y;\n // Variables for rounded corners\n let xDistance, yDistance, cornerRadius, midX, midY;\n switch (linkStyle) {\n case 'straight':\n // Direct straight line\n return `M${sourceX},${sourceY}L${targetX},${targetY}`;\n case 'rounded':\n // Curved line with rounded corners\n xDistance = Math.abs(targetX - sourceX);\n yDistance = Math.abs(targetY - sourceY);\n cornerRadius = Math.min(xDistance, yDistance) * 0.2; // Reduced radius for better appearance\n if (isHorizontal) {\n // For horizontal layout\n const halfDistance = (targetX - sourceX) / 2;\n const xMid = sourceX + halfDistance;\n return `\n M${sourceX},${sourceY}\n H${xMid - cornerRadius}\n Q${xMid},${sourceY} ${xMid},${sourceY + Math.sign(targetY - sourceY) * cornerRadius}\n V${targetY - Math.sign(targetY - sourceY) * cornerRadius}\n Q${xMid},${targetY} ${xMid + cornerRadius},${targetY}\n H${targetX}\n `;\n }\n else {\n // For vertical layout\n const halfDistance = (targetY - sourceY) / 2;\n const yMid = sourceY + halfDistance;\n return `\n M${sourceX},${sourceY}\n V${yMid - cornerRadius}\n Q${sourceX},${yMid} ${sourceX + Math.sign(targetX - sourceX) * cornerRadius},${yMid}\n H${targetX - Math.sign(targetX - sourceX) * cornerRadius}\n Q${targetX},${yMid} ${targetX},${yMid + cornerRadius}\n V${targetY}\n `;\n }\n case 'step':\n // L-shaped stepped line\n if (isHorizontal) {\n return `M${sourceX},${sourceY}H${(sourceX + targetX) / 2}V${targetY}H${targetX}`;\n }\n else {\n return `M${sourceX},${sourceY}V${(sourceY + targetY) / 2}H${targetX}V${targetY}`;\n }\n case 'curved':\n default:\n // Default curved line using D3's built-in link generator\n if (isHorizontal) {\n return this.d3\n .linkHorizontal()\n .x((d) => d.y)\n .y((d) => d.x)(d);\n }\n else {\n return this.d3\n .linkVertical()\n .x((d) => d.x)\n .y((d) => d.y)(d);\n }\n }\n })\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-link-color))`)\n .attr('stroke-width', options.linkWidth)\n .attr('fill', 'none')\n .attr('opacity', 1);\n // Determine which template to use for rendering nodes\n const useCustomTemplate = this.hasCustomTemplate();\n const templateToUse = this.nodeTemplate() || this.customNodeTemplate();\n // Create a map to store node elements for future updates\n const nodeElementsMap = new Map();\n // Create node groups\n const nodeGroups = g\n .selectAll('.node-group')\n .data(root.descendants().filter((d) => d.data.id !== 'root'))\n .enter()\n .append('g')\n .attr('class', 'ax-hierarchy-chart-node-group')\n .attr('data-node-id', (d) => d.data.id) // Add a data attribute for easier selection\n .attr('transform', (d) => {\n const x = isHorizontal ? d.y : d.x;\n const y = isHorizontal ? d.x : d.y;\n return `translate(${x},${y})`;\n })\n .attr('opacity', 1); // Display nodes immediately with full opacity\n // Store node elements in the map\n nodeGroups.each(function (d) {\n nodeElementsMap.set(d.data.id, this);\n });\n // Update the node elements signal\n this._nodeElements.set(nodeElementsMap);\n if (useCustomTemplate && templateToUse) {\n // Render custom node templates\n nodeGroups.each((d, i, nodes) => {\n const node = d.data;\n const element = nodes[i];\n const hasChildren = !!(node.children && node.children.length > 0);\n const isExpanded = hasChildren && this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n // Enhance the node with expanded state and toggle function\n node.expanded = isExpanded || false;\n node.toggleExpanded = () => this.toggleNode(node.id);\n // Create a foreignObject for the template\n const foreignObject = this.d3\n .select(element)\n .append('foreignObject')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('class', 'ax-hierarchy-chart-node-container')\n .on('click', (event) => {\n // Don't propagate the event if it's coming from an interactive element\n // like a button inside the template\n const target = event.target;\n const isInteractive = target.tagName === 'BUTTON' || target.tagName === 'A' || target.closest('button, a, [role=\"button\"]');\n if (!isInteractive) {\n this.handleNodeClick(event, d);\n }\n });\n // Create a div to hold the template\n const div = foreignObject\n .append('xhtml:div')\n .attr('class', 'ax-hierarchy-chart-node-content')\n .style('width', '100%')\n .style('height', '100%');\n // Render the template into the div\n this.ngZone.run(() => {\n // Create context with enhanced node as the implicit value\n const context = {\n $implicit: node,\n };\n const viewRef = this.viewContainerRef.createEmbeddedView(templateToUse, context);\n this.embeddedViews.push(viewRef);\n viewRef.detectChanges();\n // Append template contents to the div\n const nodes = viewRef.rootNodes;\n for (const node of nodes) {\n div.node().appendChild(node);\n }\n });\n });\n }\n else {\n // Render enhanced default nodes (rectangles with text and icons)\n nodeGroups.each((d, i, nodes) => {\n const group = this.d3.select(nodes[i]);\n const node = d.data;\n const hasChildren = !!(node.children && node.children.length > 0);\n // Node background rect with rounded corners\n group\n .append('rect')\n .attr('x', -nodeWidth / 2)\n .attr('y', -nodeHeight / 2)\n .attr('width', nodeWidth)\n .attr('height', nodeHeight)\n .attr('rx', 6)\n .attr('ry', 6)\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', options.nodeStrokeWidth)\n .attr('class', 'ax-hierarchy-chart-node');\n // Main title/name\n group\n .append('text')\n .attr('y', -10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-title')\n .attr('fill', 'white')\n .attr('font-weight', 'bold')\n .text(node.name || node.label || '');\n // Subtitle if provided\n if (node.subtitle) {\n group\n .append('text')\n .attr('y', 10)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-subtitle')\n .attr('fill', 'rgba(255, 255, 255, 0.8)')\n .attr('font-size', '0.8em')\n .text(node.subtitle);\n }\n // Type label if provided\n if (node.type) {\n group\n .append('text')\n .attr('y', 25)\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-node-type')\n .attr('fill', 'rgba(255, 255, 255, 0.7)')\n .attr('font-size', '0.7em')\n .text(node.type);\n }\n // Add expand/collapse indicator if node has children\n if (hasChildren && options.collapsible) {\n const isExpanded = this._expandedNodes().has(node.id) && this._expandedNodes().get(node.id);\n // Toggle button with better styling\n group\n .append('circle')\n .attr('r', 10)\n .attr('cx', nodeWidth / 2 - 12)\n .attr('cy', -nodeHeight / 2 + 12)\n .attr('fill', 'white')\n .attr('stroke', `rgb(var(--ax-comp-hierarchy-chart-node-stroke-color))`)\n .attr('stroke-width', 1)\n .attr('class', 'ax-hierarchy-chart-toggle-indicator')\n .style('cursor', 'pointer')\n .on('click', (event) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n // Toggle icon\n group\n .append('text')\n .attr('x', nodeWidth / 2 - 12)\n .attr('y', -nodeHeight / 2 + 12)\n .attr('dy', '0.32em')\n .attr('text-anchor', 'middle')\n .attr('class', 'ax-hierarchy-chart-toggle-icon')\n .attr('fill', node.color || `rgb(var(--ax-comp-hierarchy-chart-node-color))`)\n .attr('font-weight', 'bold')\n .style('cursor', 'pointer')\n .text(isExpanded ? '−' : '+')\n .on('click', (event) => {\n event.stopPropagation();\n this.toggleNode(node.id);\n });\n }\n // Icon if provided\n if (node.icon) {\n group\n .append('text')\n .attr('x', -nodeWidth / 2 + 15)\n .attr('y', 0)\n .attr('dy', '0.32em')\n .attr('class', 'ax-hierarchy-chart-node-icon')\n .attr('fill', 'white')\n .attr('class', node.icon);\n }\n // Add click handler to the whole node\n group.on('click', (event) => {\n this.handleNodeClick(event, d);\n });\n // Add tooltip if enabled\n if (options.showTooltip && (node.tooltip || node.description)) {\n group.append('title').text(node.tooltip || node.description || '');\n }\n });\n }\n });\n }\n /**\n * Toggle node expansion state\n */\n toggleNode(nodeId) {\n const expandedNodes = new Map(this._expandedNodes());\n const currentState = expandedNodes.get(nodeId);\n const newState = currentState === undefined ? false : !currentState;\n expandedNodes.set(nodeId, newState);\n this._expandedNodes.set(expandedNodes);\n // Emit toggle event\n this.findNodeById(this.processedData(), nodeId).then((node) => {\n if (node) {\n this.nodeToggle.emit({\n node: node,\n expanded: newState,\n });\n }\n });\n // Update toggle indicator immediately for better UX\n this.updateToggleIndicator(nodeId, newState);\n }\n /**\n * Update just the toggle indicator without redrawing the chart\n */\n updateToggleIndicator(nodeId, expanded) {\n if (!this.d3 || !this.chartContainer())\n return;\n this.ngZone.runOutsideAngular(() => {\n const container = this.chartContainer().nativeElement;\n const svg = container.querySelector('svg');\n if (!svg)\n return;\n // Find and update the toggle indicator for the specific node\n const nodeGroup = this.d3.select(svg).select(`[data-node-id=\"${nodeId}\"]`);\n if (nodeGroup.empty())\n return;\n // Update the toggle icon (if it exists)\n const toggleIcon = nodeGroup.select('.ax-hierarchy-chart-toggle-icon');\n if (!toggleIcon.empty()) {\n toggleIcon.text(expanded ? '−' : '+');\n }\n });\n // Force effect to run that will update the chart\n // This leverages Angular's reactivity rather than a direct method call\n // which is more consistent with Angular's reactive approach\n const expandedNodes = new Map(this._expandedNodes());\n this._expandedNodes.set(expandedNodes);\n }\n /**\n * Find a node by ID\n */\n async findNodeById(data, id) {\n if (data.id === id) {\n return data;\n }\n if (data.children) {\n for (const child of data.children) {\n const found = await this.findNodeById(child, id);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n /**\n * Handle node click events\n */\n handleNodeClick(event, d) {\n const node = d.data;\n // Emit click event\n this.itemClick.emit({\n event: { nativeEvent: event, sender: this },\n item: node,\n element: event.currentTarget,\n });\n }\n /**\n * Clear existing chart\n */\n cleanupChart() {\n this.destroyEmbeddedViews();\n const container = this.chartContainer()?.nativeElement;\n if (!container)\n return;\n container.querySelectorAll('svg, .ax-chart-empty, .ax-hierarchy-chart-no-data-message').forEach((el) => el.remove());\n }\n ngOnDestroy() {\n this.cleanupChart();\n }\n destroyEmbeddedViews() {\n for (const view of this.embeddedViews) {\n view.destroy();\n }\n this.embeddedViews = [];\n }\n updateChart() {\n this.createChart();\n }\n /**\n * Get D3 easing function from string name\n */\n getEasingFunction(easing) {\n if (!easing)\n return this.d3.easeCubicInOut;\n switch (easing) {\n case 'linear':\n return this.d3.easeLinear;\n case 'ease':\n return this.d3.easePolyInOut;\n case 'ease-in':\n return this.d3.easePolyIn;\n case 'ease-out':\n return this.d3.easePolyOut;\n case 'ease-in-out':\n return this.d3.easePolyInOut;\n case 'cubic':\n return this.d3.easeCubic;\n case 'cubic-in':\n return this.d3.easeCubicIn;\n case 'cubic-out':\n return this.d3.easeCubicOut;\n case 'cubic-in-out':\n return this.d3.easeCubicInOut;\n default:\n return this.d3.easeCubicInOut;\n }\n }\n /**\n * Shows a message when no data is available\n */\n showNoDataMessage(containerElement) {\n const messages = this.effectiveMessages();\n renderChartEmptyMessage(this.d3, containerElement, {\n icon: messages.noDataIcon,\n title: messages.noData,\n help: messages.noDataHelp,\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXHierarchyChartComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });\n static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.2.0\", version: \"20.3.3\", type: AXHierarchyChartComponent, isStandalone: true, selector: \"ax-hierarchy-chart\", inputs: { data: { classPropertyName: \"data\", publicName: \"data\", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: \"options\", publicName: \"options\", isSignal: true, isRequired: false, transformFunction: null }, nodeTemplate: { classPropertyName: \"nodeTemplate\", publicName: \"nodeTemplate\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: \"itemClick\", nodeToggle: \"nodeToggle\" }, queries: [{ propertyName: \"customNodeTemplate\", first: true, predicate: [\"nodeTemplate\"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: \"chartContainer\", first: true, predicate: [\"chartContainer\"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: \"<div class=\\\"ax-hierarchy-chart\\\" role=\\\"img\\\" #chartContainer></div>\\n\", styles: [\".ax-chart-empty{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:1rem;pointer-events:none}.ax-chart-empty__card{text-align:center;padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px;box-sizing:border-box}.ax-chart-empty__icon{opacity:.6;margin-bottom:.75rem}.ax-chart-empty__title{font-size:1rem;font-weight:600;margin-bottom:.5rem}.ax-chart-empty__help{font-size:.8rem;opacity:.6}ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);box-sizing:border-box;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: 0, 0, 0, 0;color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgba(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:0;position:relative;overflow:hidden}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg g:has(text){font-family:inherit}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.3\", ngImport: i0, type: AXHierarchyChartComponent, decorators: [{\n type: Component,\n args: [{ selector: 'ax-hierarchy-chart', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"ax-hierarchy-chart\\\" role=\\\"img\\\" #chartContainer></div>\\n\", styles: [\".ax-chart-empty{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:1rem;pointer-events:none}.ax-chart-empty__card{text-align:center;padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px;box-sizing:border-box}.ax-chart-empty__icon{opacity:.6;margin-bottom:.75rem}.ax-chart-empty__title{font-size:1rem;font-weight:600;margin-bottom:.5rem}.ax-chart-empty__help{font-size:.8rem;opacity:.6}ax-hierarchy-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);box-sizing:border-box;--ax-comp-hierarchy-chart-node-color: var(--ax-sys-color-primary-500);--ax-comp-hierarchy-chart-node-stroke-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-link-color: var(--ax-sys-color-primary-400);--ax-comp-hierarchy-chart-text-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-hierarchy-chart-bg-color: 0, 0, 0, 0;color:rgb(var(--ax-comp-hierarchy-chart-text-color));background-color:rgba(var(--ax-comp-hierarchy-chart-bg-color))}ax-hierarchy-chart .ax-hierarchy-chart{width:100%;height:100%;min-height:0;position:relative;overflow:hidden}ax-hierarchy-chart .ax-hierarchy-chart svg{width:100%;height:100%;max-width:100%;max-height:100%;overflow:visible}ax-hierarchy-chart .ax-hierarchy-chart svg g:has(text){font-family:inherit}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2h5LWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NoYXJ0cy9oaWVyYXJjaHktY2hhcnQvc3JjL2xpYi9oaWVyYXJjaHktY2hhcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY2hhcnRzL2hpZXJhcmNoeS1jaGFydC9zcmMvbGliL2hpZXJhcmNoeS1jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQXdCLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEksT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBR1QsTUFBTSxFQUdOLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBU3JFOzs7Ozs7OztHQVFHO0FBUUgsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGdCQUFnQjtJQUM3RCw0QkFBNEI7SUFDcEIsY0FBYyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQTZCLGdCQUFnQixDQUFDLENBQUM7SUFFMUYsNENBQTRDO0lBQzVDLGtCQUFrQixHQUFHLFlBQVksQ0FBMkMsY0FBYyw4REFBQyxDQUFDO0lBQzVGLFdBQVc7SUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLFdBQVcsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMs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LEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzdCLEtBQUssV0FBVztnQkFDZCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDO1lBQzlCLEtBQUssY0FBYztnQkFDakIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUNoQztnQkFDRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxpQkFBaUIsQ0FBQyxnQkFBNkI7UUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDMUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRTtZQUNqRCxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVU7WUFDekIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNO1lBQ3RCLElBQUksRUFBRSxRQUFRLENBQUMsVUFBVTtTQUMxQixDQUFDLENBQUM7SUFDTCxDQUFDO3VHQS9zQlUseUJBQXlCOzJGQUF6Qix5QkFBeUIsa3pCQy9DdEMseUVBQ0E7OzJGRDhDYSx5QkFBeUI7a0JBUHJDLFNBQVM7K0JBQ0Usb0JBQW9CLGlCQUdmLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWENoYXJ0Q29tcG9uZW50LCBBWENoYXJ0Q29tcG9uZW50QmFzZSwgbWVyZ2VDaGFydE1lc3NhZ2VzLCBtZXJnZUNoYXJ0T3B0aW9ucywgcmVuZGVyQ2hhcnRFbXB0eU1lc3NhZ2UgfSBmcm9tICdAYWNvcmV4L2NoYXJ0cyc7XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgc2lnbmFsLFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhfSElFUkFSQ0hZX0NIQVJUX0NPTkZJRyB9IGZyb20gJy4vaGllcmFyY2h5LWNoYXJ0LmNvbmZpZyc7XG5pbXBvcnQge1xuICBBWEhpZXJhcmNoeUNoYXJ0Q2xpY2tFdmVudCxcbiAgQVhIaWVyYXJjaHlDaGFydERhdGEsXG4gIEFYSGllcmFyY2h5Q2hhcnROb2RlLFxuICBBWEhpZXJhcmNoeUNoYXJ0Tm9kZUNvbnRleHQsXG4gIEFYSGllcmFyY2h5Q2hhcnRPcHRpb24sXG4gIEFYSGllcmFyY2h5Q2hhcnRUb2dnbGVFdmVudCxcbn0gZnJvbSAnLi9oaWVyYXJjaHktY2hhcnQudHlwZSc7XG4vKipcbiAqIEEgaGlnaGx5IGN1c3RvbWl6YWJsZSBoaWVyYXJjaGljYWwgdmlzdWFsaXphdGlvbiBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3I6XG4gKiAtIE9yZ2FuaXphdGlvbiBjaGFydHNcbiAqIC0gVHJlZSBkaWFncmFtc1xuICogLSBEZXBlbmRlbmN5IHZpc3VhbGl6YXRpb25zXG4gKiAtIFByb2Nlc3MgZmxvd3NcbiAqXG4gKiBTdXBwb3J0cyBib3RoIGRlZmF1bHQgbm9kZSBzdHlsaW5nIGFuZCBjdXN0b20gbm9kZSB0ZW1wbGF0ZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LWhpZXJhcmNoeS1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaHktY2hhcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oaWVyYXJjaHktY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEFYSGllcmFyY2h5Q2hhcnRDb21wb25lbnQgZXh0ZW5kcyBBWENoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgQVhDaGFydENvbXBvbmVudEJhc2UsIE9uRGVzdHJveSB7XG4gIC8vIENoYXJ0IGNvbnRhaW5lciByZWZlcmVuY2VcbiAgcHJpdmF0ZSBjaGFydENvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2NoYXJ0Q29udGFpbmVyJyk7XG5cbiAgLy8gQ3VzdG9tIG5vZGUgdGVtcGxhdGUgcHJvdmlkZWQgYnkgdGhlIHVzZXJcbiAgY3VzdG9tTm9kZVRlbXBsYXRlID0gY29udGVudENoaWxkPFRlbXBsYXRlUmVmPEFYSGllcmFyY2h5Q2hhcnROb2RlQ29udGV4dD4+KCdub2RlVGVtcGxhdGUnKTtcbiAgLy8gU2VydmljZXNcbiAgcHJpdmF0ZSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIGNvbmZpZ1Rva2VuID0gaW5qZWN0KEFYX0hJRVJBUkNIWV9DSEFSVF9DT05GSUcpO1xuXG4gIC8vIEQzIGluc3RhbmNlXG4gIHByaXZhdGUgZDM6IGFueTtcblxuICAvLyBJbnRlcm5hbCBzdGF0ZSBzaWduYWxzXG4gIHByaXZhdGUgX2V4cGFuZGVkTm9kZXMgPSBzaWduYWw8TWFwPHN0cmluZywgYm9vbGVhbj4+KG5ldyBNYXAoKSk7XG4gIHByaXZhdGUgX2luaXRpYWxpemVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBfcmVuZGVyZWQgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIF9kaW1lbnNpb25zID0gc2lnbmFsKHsgd2lkdGg6IDAsIGhlaWdodDogMCB9KTtcbiAgcHJpdmF0ZSBfbm9kZUVsZW1lbnRzID0gc2lnbmFsPE1hcDxzdHJpbmcsIGFueT4+KG5ldyBNYXAoKSk7IC8vIFN0b3JlIHJlZmVyZW5jZXMgdG8gbm9kZSBlbGVtZW50c1xuICBwcml2YXRlIF9jaGFydERhdGEgPSBzaWduYWw8YW55PihudWxsKTsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgY2hhcnQgZGF0YSBhbmQgbGF5b3V0XG4gIHByaXZhdGUgZW1iZWRkZWRWaWV3czogRW1iZWRkZWRWaWV3UmVmPHVua25vd24+W10gPSBbXTtcblxuICAvLyBJbnB1dHNcbiAgZGF0YSA9IGlucHV0PEFYSGllcmFyY2h5Q2hhcnREYXRhIHwgQVhIaWVyYXJjaHlDaGFydERhdGFbXT4oW10pO1xuICBvcHRpb25zID0gaW5wdXQ8QVhIaWVyYXJjaHlDaGFydE9wdGlvbj4oe30pO1xuICBub2RlVGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxBWEhpZXJhcmNoeUNoYXJ0Tm9kZUNvbnRleHQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgLy8gT3V0cHV0c1xuICBpdGVtQ2xpY2sgPSBvdXRwdXQ8QVhIaWVyYXJjaHlDaGFydENsaWNrRXZlbnQ+KCk7XG4gIG5vZGVUb2dnbGUgPSBvdXRwdXQ8QVhIaWVyYXJjaHlDaGFydFRvZ2dsZUV2ZW50PigpO1xuXG4gIC8vIENvbXB1dGVkIHZhbHVlc1xuICBwcm90ZWN0ZWQgcHJvY2Vzc2VkRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhKCk7XG4gICAgLy8gSGFuZGxlIGJvdGggc2luZ2xlIG5vZGUgYW5kIGFycmF5IGZvcm1hdHNcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhKSA/IHsgaWQ6ICdyb290JywgY2hpbGRyZW46IGRhdGEgfSA6IGRhdGE7XG4gIH0pO1xuXG4gIC8vIENoZWNrIGlmIGN1c3RvbSB0ZW1wbGF0ZSBpcyBhdmFpbGFibGVcbiAgcHJvdGVjdGVkIGhhc0N1c3RvbVRlbXBsYXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuY3VzdG9tTm9kZVRlbXBsYXRlKCkgfHwgdGhpcy5ub2RlVGVtcGxhdGUoKSk7XG4gIH0pO1xuXG4gIHByb3RlY3RlZCBlZmZlY3RpdmVPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gbWVyZ2VDaGFydE9wdGlvbnModGhpcy5jb25maWdUb2tlbiwgdGhpcy5vcHRpb25zKCkpKTtcblxuICAvLyBNZXNzYWdlcyB3aXRoIGRlZmF1bHRzXG4gIHByb3RlY3RlZCBlZmZlY3RpdmVNZXNzYWdlcyA9IGNvbXB1dGVkKCgpID0+XG4gICAgbWVyZ2VDaGFydE1lc3NhZ2VzKHRoaXMuY29uZmlnVG9rZW4ubWVzc2FnZXMsIHRoaXMub3B0aW9ucygpPy5tZXNzYWdlcyksXG4gICk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBEeW5hbWljYWxseSBsb2FkIEQzIGFuZCBpbml0aWFsaXplIHRoZSBjaGFydCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVhZHlcbiAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgdGhpcy5faW5pdGlhbGl6ZWQuc2V0KHRydWUpO1xuICAgICAgdGhpcy5sb2FkRDMoKTtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUV4cGFuZGVkU3RhdGUoKTtcbiAgICB9KTtcblxuICAgIC8vIFdhdGNoIGZvciBjaGFuZ2VzIHRvIHJlZHJhdyB0aGUgY2hhcnRcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gQWNjZXNzIHRoZXNlIHRvIHRyYWNrIHRoZW1cbiAgICAgIHRoaXMucHJvY2Vzc2VkRGF0YSgpO1xuICAgICAgdGhpcy5ub2RlVGVtcGxhdGUoKTtcbiAgICAgIHRoaXMuY3VzdG9tTm9kZVRlbXBsYXRlKCk7XG4gICAgICB0aGlzLmVmZmVjdGl2ZU9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX2V4cGFuZGVkTm9kZXMoKTtcblxuICAgICAgaWYgKHRoaXMuX2luaXRpYWxpemVkKCkgJiYgdGhpcy5kMyAmJiB0aGlzLl9yZW5kZXJlZCgpKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBleHBhbmRlZCBzdGF0ZSBmb3IgYWxsIG5vZGVzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVFeHBhbmRlZFN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0V4cGFuZGVkTm9kZXMgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wcm9jZXNzZWREYXRhKCk7XG4gICAgY29uc3QgZXhwYW5kQWxsID0gdGhpcy5lZmZlY3RpdmVPcHRpb25zKCkuZXhwYW5kQWxsO1xuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJlY3Vyc2l2ZWx5IHByb2Nlc3Mgbm9kZXNcbiAgICBjb25zdCBwcm9jZXNzTm9kZSA9IChub2RlOiBBWEhpZXJhcmNoeUNoYXJ0RGF0YSkgPT4ge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFNldCBpbml0aWFsIGV4cGFuc2lvbiBzdGF0ZSBiYXNlZCBvbiBub2RlIHByb3BlcnR5IG9yIGdsb2JhbCBvcHRpb25cbiAgICAgICAgbmV3RXhwYW5kZWROb2Rlcy5zZXQobm9kZS5pZCwgbm9kZS5pc0V4cGFuZGVkICE9PSB1bmRlZmluZWQgPyBub2RlLmlzRXhwYW5kZWQgOiBleHBhbmRBbGwpO1xuXG4gICAgICAgIC8vIFByb2Nlc3MgY2hpbGRyZW5cbiAgICAgICAgbm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gcHJvY2Vzc05vZGUoY2hpbGQpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gU3RhcnQgcHJvY2Vzc2luZ1xuICAgIGlmIChkYXRhLmNoaWxkcmVuKSB7XG4gICAgICBkYXRhLmNoaWxkcmVuLmZvckVhY2goKG5vZGUpID0+IHByb2Nlc3NOb2RlKG5vZGUpKTtcbiAgICB9IGVsc2UgaWYgKChkYXRhIGFzIGFueSkuaWQpIHtcbiAgICAgIHByb2Nlc3NOb2RlKGRhdGEgYXMgQVhIaWVyYXJjaHlDaGFydERhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuX2V4cGFuZGVkTm9kZXMuc2V0KG5ld0V4cGFuZGVkTm9kZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIER5bmFtaWNhbGx5IGxvYWQgRDMuanMgdG8gcmVkdWNlIGluaXRpYWwgYnVuZGxlIHNpemVcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBsb2FkRDMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZDMgPSBhd2FpdCBpbXBvcnQoJ2QzJyk7XG4gICAgICBpZiAodGhpcy5faW5pdGlhbGl6ZWQoKSAmJiB0aGlzLmNoYXJ0Q29udGFpbmVyKCkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVEaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgICAgICAgdGhpcy5fcmVuZGVyZWQuc2V0KHRydWUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBEMy5qczonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBkaW1lbnNpb25zIGJhc2VkIG9uIGNvbnRhaW5lciBzaXplXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZURpbWVuc2lvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jaGFydENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuXG4gICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGggfHwgTWF0aC5tYXgoY29udGFpbmVyUmVjdC53aWR0aCB8fCAwLCAxKTtcbiAgICBjb25zdCBoZWlnaHQgPSBvcHRpb25zLmhlaWdodCB8fCBNYXRoLm1heChjb250YWluZXJSZWN0LmhlaWdodCB8fCAwLCAxKTtcblxuICAgIHRoaXMuX2RpbWVuc2lvbnMuc2V0KHsgd2lkdGgsIGhlaWdodCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW5kIHJlbmRlciB0aGUgaGllcmFyY2h5IGNoYXJ0XG4gICAqL1xuICBwdWJsaWMgY3JlYXRlQ2hhcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmQzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgYW55IGV4aXN0aW5nIGNoYXJ0XG4gICAgdGhpcy5jbGVhbnVwQ2hhcnQoKTtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY2hhcnRDb250YWluZXIoKS5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnByb2Nlc3NlZERhdGEoKTtcblxuICAgIC8vIENoZWNrIGZvciBudWxsL3VuZGVmaW5lZCBkYXRhIG9yIGVtcHR5IGNoaWxkcmVuXG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLmNoaWxkcmVuIHx8IGRhdGEuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnNob3dOb0RhdGFNZXNzYWdlKGNvbnRhaW5lcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZWZmZWN0aXZlT3B0aW9ucygpO1xuICAgIGNvbnN0IGRpbWVuc2lvbnMgPSB0aGlzLl9kaW1lbnNpb25zKCk7XG4gICAgY29uc3QgZXhwYW5kZWROb2RlcyA9IHRoaXMuX2V4cGFuZGVkTm9kZXMoKTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIC8vIEdldCBkaW1lbnNpb25zIGFuZCBvcHRpb25zXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGRpbWVuc2lvbnM7XG4gICAgICBjb25zdCBtYXJnaW4gPSBvcHRpb25zLm1hcmdpbiB8fCB7IHRvcDogNDAsIHJpZ2h0OiAxMjAsIGJvdHRvbTogNDAsIGxlZnQ6IDEyMCB9O1xuICAgICAgY29uc3Qgbm9kZVdpZHRoID0gb3B0aW9ucy5ub2RlV2lkdGggfHwgMTIwO1xuICAgICAgY29uc3Qgbm9kZUhlaWdodCA9IG9wdGlvbnMubm9kZUhlaWdodCB8fCA2MDtcbiAgICAgIGNvbnN0IG5vZGVTcGFjaW5nWCA9IG9wdGlvbnMubm9kZVNwYWNpbmdYIHx8IDgwO1xuICAgICAgY29uc3Qgbm9kZVNwYWNpbmdZID0gb3B0aW9ucy5ub2RlU3BhY2luZ1kgfHwgMTIwO1xuICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJztcblxuICAgICAgLy8gQ3JlYXRlIFNWRyBjb250YWluZXIgd2l0aCB2aWV3Qm94IGZvciByZXNwb25zaXZlbmVzc1xuICAgICAgY29uc3Qgc3ZnID0gdGhpcy5kM1xuICAgICAgICAuc2VsZWN0KGNvbnRhaW5lcilcbiAgICAgICAgLmFwcGVuZCgnc3ZnJylcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCUnKVxuICAgICAgICAuYXR0cignaGVpZ2h0JywgJzEwMCUnKVxuICAgICAgICAuYXR0cigndmlld0JveCcsIGAwIDAgJHt3aWR0aH0gJHtoZWlnaHR9YClcbiAgICAgICAgLmF0dHIoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAneE1pZFlNaWQgbWVldCcpXG4gICAgICAgIC5zdHlsZSgnb3ZlcmZsb3cnLCAndmlzaWJsZScpXG4gICAgICAgIC5jbGFzc2VkKG9wdGlvbnMuY2xhc3NOYW1lIHx8ICcnLCAhIW9wdGlvbnMuY2xhc3NOYW1lKTtcblxuICAgICAgLy8gQ3JlYXRlIGhpZXJhcmNoeSBsYXlvdXQgZnJvbSBkYXRhXG4gICAgICBjb25zdCByb290RGF0YSA9IHRoaXMucHJvY2Vzc2VkRGF0YSgpO1xuICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZDMuaGllcmFyY2h5KHJvb3REYXRhKTtcblxuICAgICAgLy8gQXBwbHkgZXhwYW5zaW9uIHN0YXRlIHRvIG5vZGVzXG4gICAgICByb290LmRlc2NlbmRhbnRzKCkuZm9yRWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChub2RlLmRhdGEuaWQgIT09ICdyb290JyAmJiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgaWYgKGV4cGFuZGVkTm9kZXMuaGFzKG5vZGUuZGF0YS5pZCkgJiYgIWV4cGFuZGVkTm9kZXMuZ2V0KG5vZGUuZGF0YS5pZCkpIHtcbiAgICAgICAgICAgIG5vZGUuX2NoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsgLy8gU3RvcmUgY2hpbGRyZW5cbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBudWxsOyAvLyBDb2xsYXBzZSBub2RlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU2V0IHVwIHRoZSB0cmVlIGxheW91dCBiYXNlZCBvbiBkaXJlY3Rpb24gb3B0aW9uXG4gICAgICBjb25zdCB0cmVlTGF5b3V0ID0gdGhpcy5kM1xuICAgICAgICAudHJlZSgpXG4gICAgICAgIC5ub2RlU2l6ZShbXG4gICAgICAgICAgaXNIb3Jpem9udGFsID8gbm9kZUhlaWdodCArIG5vZGVTcGFjaW5nWSA6IG5vZGVXaWR0aCArIG5vZGVTcGFjaW5nWCxcbiAgICAgICAgICBpc0hvcml6b250YWwgPyBub2RlV2lkdGggKyBub2RlU3BhY2luZ1ggOiBub2RlSGVpZ2h0ICsgbm9kZVNwYWNpbmdZLFxuICAgICAgICBdKVxuICAgICAgICAuc2VwYXJhdGlvbigoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4gYS5wYXJlbnQgPT09IGIucGFyZW50ID8gMS4yIDogMS41O1xuICAgICAgICB9KTtcblxuICAgICAgdHJlZUxheW91dChyb290KTtcblxuICAgICAgLy8gU3RvcmUgdGhlIGN1cnJlbnQgdHJlZSBsYXlvdXQgZGF0YSBmb3IgZnV0dXJlIHVwZGF0ZXNcbiAgICAgIHRoaXMuX2NoYXJ0RGF0YS5zZXQoe1xuICAgICAgICByb290LFxuICAgICAgICB0cmVlTGF5b3V0LFxuICAgICAgICBpc0hvcml6b250YWwsXG4gICAgICAgIG5vZGVXaWR0aCxcbiAgICAgICAgbm9kZUhlaWdodCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGp1c3Qgcm9vdCBwb3NpdGlvbiBiYXNlZCBvbiBkaXJlY3Rpb25cbiAgICAgIGNvbnN0IHJvb3RYID0gaXNIb3Jpem9udGFsID8gbWFyZ2luLnRvcCA6IHdpZHRoIC8gMjtcbiAgICAgIGNvbnN0IHJvb3RZID0gaXNIb3Jpem9udGFsID8gbWFyZ2luLmxlZnQgOiBtYXJnaW4udG9wO1xuXG4gICAgICAvLyBDYWxjdWxhdGUgYm91bmRzIG9mIHRoZSB0cmVlIGFmdGVyIGxheW91dFxuICAgICAgbGV0IG1pblggPSBJbmZpbml0eTtcbiAgICAgIGxldCBtYXhYID0gLUluZmluaXR5O1xuICAgICAgbGV0IG1pblkgPSBJbmZpbml0eTtcbiAgICAgIGxldCBtYXhZID0gLUluZmluaXR5O1xuXG4gICAgICByb290LmRlc2NlbmRhbnRzKCkuZm9yRWFjaCgoZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChkLmRhdGEuaWQgPT09ICdyb290JykgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHggPSBpc0hvcml6b250YWwgPyBkLnggOiBkLng7XG4gICAgICAgIGNvbnN0IHkgPSBpc0hvcml6b250YWwgPyBkLnkgOiBkLnk7XG5cbiAgICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHgpO1xuICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgeCk7XG4gICAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCB5KTtcbiAgICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY2VudGVyIG9mIHRoZSB0cmVlXG4gICAgICBjb25zdCBjZW50ZXJYID0gTnVtYmVyLmlzRmluaXRlKG1pblgpICYmIE51bWJlci5pc0Zpbml0ZShtYXhYKSA/IChtaW5YICsgbWF4WCkgLyAyIDogMDtcbiAgICAgIGNvbnN0IGNlbnRlclkgPSBOdW1iZXIuaXNGaW5pdGUobWluWSkgJiYgTnVtYmVyLmlzRmluaXRlKG1heFkpID8gKG1pblkgKyBtYXhZKSAvIDIgOiAwO1xuXG4gICAgICAvLyBDcmVhdGUgYSBncm91cCBmb3IgdGhlIGNoYXJ0IGNvbnRlbnQgd2l0aCBwcm9wZXIgY2VudGVyaW5nXG4gICAgICBjb25zdCBnID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAndHJhbnNmb3JtJyxcbiAgICAgICAgICBpc0hvcml6b250YWxcbiAgICAgICAgICAgID8gYHRyYW5zbGF0ZSgke21hcmdpbi5sZWZ0fSwgJHtoZWlnaHQgLyAyIC0gY2VudGVyWH0pYFxuICAgICAgICAgICAgOiBgdHJhbnNsYXRlKCR7d2lkdGggLyAyIC0gY2VudGVyWH0sICR7bWFyZ2luLnRvcH0pYCxcbiAgICAgICAgKTtcblxuICAgICAgLy8gQWRkIHpvb20gYW5kIHBhbiBiZWhhdmlvciAocmVwbGFjZXMgQVhQYW5WaWV3RGlyZWN0aXZlKVxuICAgICAgY29uc3Qgem9vbSA9IHRoaXMuZDNcbiAgICAgICAgLnpvb20oKVxuICAgICAgICAuc2NhbGVFeHRlbnQoWzAuMSwgM10pIC8vIE1pbiB6b29tOiAxMCUsIE1heCB6b29tOiAzMDAlXG4gICAgICAgIC5vbignem9vbScsIChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgZy5hdHRyKCd0cmFuc2Zvcm0nLCBldmVudC50cmFuc2Zvcm0pO1xuICAgICAgICB9KTtcblxuICAgICAgLy8gQXBwbHkgem9vbSBiZWhhdmlvciB0byBTVkdcbiAgICAgIHN2Zy5jYWxsKHpvb20pO1xuXG4gICAgICAvLyBTZXQgaW5pdGlhbCB0cmFuc2Zvcm0gdG8gbWF0Y2ggdGhlIGNlbnRlcmluZ1xuICAgICAgY29uc3QgaW5pdGlhbFRyYW5zZm9ybSA9IHRoaXMuZDMuem9vbUlkZW50aXR5LnRyYW5zbGF0ZShcbiAgICAgICAgaXNIb3Jpem9udGFsID8gbWFyZ2luLmxlZnQgOiB3aWR0aCAvIDIgLSBjZW50ZXJYLFxuICAgICAgICBpc0hvcml6b250YWwgPyBoZWlnaHQgLyAyIC0gY2VudGVyWCA6IG1hcmdpbi50b3AsXG4gICAgICApO1xuICAgICAgc3ZnLmNhbGwoem9vbS50cmFuc2Zvcm0sIGluaXRpYWxUcmFuc2Zvcm0pO1xuXG4gICAgICAvLyBEcmF3IGxpbmtzIGJldHdlZW4gbm9kZXNcbiAgICAgIGNvbnN0IGxpbmtzID0gZ1xuICAgICAgICAuc2VsZWN0QWxsKCcubGluaycpXG4gICAgICAgIC5kYXRhKHJvb3QubGlua3MoKS5maWx0ZXIoKGQ6IGFueSkgPT4gZC5zb3VyY2UuZGF0YS5pZCAhPT0gJ3Jvb3QnKSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZCgncGF0aCcpXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbGluaycpXG4gICAgICAgIC5hdHRyKCdkJywgKGQ6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIEdldCB0aGUgbGluayBzdHlsZSBmcm9tIG9wdGlvbnNcbiAgICAgICAgICBjb25zdCBsaW5rU3R5bGUgPSBvcHRpb25zLmxpbmtTdHlsZSB8fCAnY3VydmVkJztcblxuICAgICAgICAgIC8vIFNvdXJjZSBhbmQgdGFyZ2V0IGNvb3JkaW5hdGVzIGJhc2VkIG9uIGRpcmVjdGlvblxuICAgICAgICAgIGNvbnN0IHNvdXJjZVggPSBpc0hvcml6b250YWwgPyBkLnNvdXJjZS55IDogZC5zb3VyY2UueDtcbiAgICAgICAgICBjb25zdCBzb3VyY2VZID0gaXNIb3Jpem9udGFsID8gZC5zb3VyY2UueCA6IGQuc291cmNlLnk7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0WCA9IGlzSG9yaXpvbnRhbCA/IGQudGFyZ2V0LnkgOiBkLnRhcmdldC54O1xuICAgICAgICAgIGNvbnN0IHRhcmdldFkgPSBpc0hvcml6b250YWwgPyBkLnRhcmdldC54IDogZC50YXJnZXQueTtcblxuICAgICAgICAgIC8vIFZhcmlhYmxlcyBmb3Igcm91bmRlZCBjb3JuZXJzXG4gICAgICAgICAgbGV0IHhEaXN0YW5jZSwgeURpc3RhbmNlLCBjb3JuZXJSYWRpdXMsIG1pZFgsIG1pZFk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGxpbmtTdHlsZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyYWlnaHQnOlxuICAgICAgICAgICAgICAvLyBEaXJlY3Qgc3RyYWlnaHQgbGluZVxuICAgICAgICAgICAgICByZXR1cm4gYE0ke3NvdXJjZVh9LCR7c291cmNlWX1MJHt0YXJnZXRYfSwke3RhcmdldFl9YDtcblxuICAgICAgICAgICAgY2FzZSAncm91bmRlZCc6XG4gICAgICAgICAgICAgIC8vIEN1cnZlZCBsaW5lIHdpdGggcm91bmRlZCBjb3JuZXJzXG4gICAgICAgICAgICAgIHhEaXN0YW5jZSA9IE1hdGguYWJzKHRhcmdldFggLSBzb3VyY2VYKTtcbiAgICAgICAgICAgICAgeURpc3RhbmNlID0gTWF0aC5hYnModGFyZ2V0WSAtIHNvdXJjZVkpO1xuICAgICAgICAgICAgICBjb3JuZXJSYWRpdXMgPSBNYXRoLm1pbih4RGlzdGFuY2UsIHlEaXN0YW5jZSkgKiAwLjI7IC8vIFJlZHVjZWQgcmFkaXVzIGZvciBiZXR0ZXIgYXBwZWFyYW5jZVxuXG4gICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3IgaG9yaXpvbnRhbCBsYXlvdXRcbiAgICAgICAgICAgICAgICBjb25zdCBoYWxmRGlzdGFuY2UgPSAodGFyZ2V0WCAtIHNvdXJjZVgpIC8gMjtcbiAgICAgICAgICAgICAgICBjb25zdCB4TWlkID0gc291cmNlWCArIGhhbGZEaXN0YW5jZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgICAgICBNJHtzb3VyY2VYfSwke3NvdXJjZVl9XG4gICAgICAgICAgICAgICAgICBIJHt4TWlkIC0gY29ybmVyUmFkaXVzfVxuICAgICAgICAgICAgICAgICAgUSR7eE1pZH0sJHtzb3VyY2VZfSAke3hNaWR9LCR7c291cmNlWSArIE1hdGguc2lnbih0YXJnZXRZIC0gc291cmNlWSkgKiBjb3JuZXJSYWRpdXN9XG4gICAgICAgICAgICAgICAgICBWJHt0YXJnZXRZIC0gTWF0aC5zaWduKHRhcmdldFkgLSBzb3VyY2VZKSAqIGNvcm5lclJhZGl1c31cbiAgICAgICAgICAgICAgICAgIFEke3hNaWR9LCR7dGFyZ2V0WX0gJHt4TWlkICsgY29ybmVyUmFkaXVzfSwke3RhcmdldFl9XG4gICAgICAgICAgICAgICAgICBIJHt0YXJnZXRYfVxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIHZlcnRpY2FsIGxheW91dFxuICAgICAgICAgICAgICAgIGNvbnN0IGhhbGZEaXN0YW5jZSA9ICh0YXJnZXRZIC0gc291cmNlWSkgLyAyO1xuICAgICAgICAgICAgICAgIGNvbnN0IHlNaWQgPSBzb3VyY2VZICsgaGFsZkRpc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgICAgIE0ke3NvdXJjZVh9LCR7c291cmNlWX1cbiAgICAgICAgICAgICAgICAgIFYke3lNaWQgLSBjb3JuZXJSYWRpdXN9XG4gICAgICAgICAgICAgICAgICBRJHtzb3VyY2VYfSwke3lNaWR9ICR7c291cmNlWCArIE1hdGguc2lnbih0YXJnZXRYIC0gc291cmNlWCkgKiBjb3JuZXJSYWRpdXN9LCR7eU1pZH1cbiAgICAgICAgICAgICAgICAgIEgke3RhcmdldFggLSBNYXRoLnNpZ24odGFyZ2V0WCAtIHNvdXJjZVgpICogY29ybmVyUmFkaXVzfVxuICAgICAgICAgICAgICAgICAgUSR7dGFyZ2V0WH0sJHt5TWlkfSAke3RhcmdldFh9LCR7eU1pZCArIGNvcm5lclJhZGl1c31cbiAgICAgICAgICAgICAgICAgIFYke3RhcmdldFl9XG4gICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdzdGVwJzpcbiAgICAgICAgICAgICAgLy8gTC1zaGFwZWQgc3RlcHBlZCBsaW5lXG4gICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE0ke3NvdXJjZVh9LCR7c291cmNlWX1IJHsoc291cmNlWCArIHRhcmdldFgpIC8gMn1WJHt0YXJnZXRZfUgke3RhcmdldFh9YDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYE0ke3NvdXJjZVh9LCR7c291cmNlWX1WJHsoc291cmNlWSArIHRhcmdldFkpIC8gMn1IJHt0YXJnZXRYfVYke3RhcmdldFl9YDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjdXJ2ZWQnOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgLy8gRGVmYXVsdCBjdXJ2ZWQgbGluZSB1c2luZyBEMydzIGJ1aWx0LWluIGxpbmsgZ2VuZXJhdG9yXG4gICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kM1xuICAgICAgICAgICAgICAgICAgLmxpbmtIb3Jpem9udGFsKClcbiAgICAgICAgICAgICAgICAgIC54KChkOiBhbnkpID0+IGQueSlcbiAgICAgICAgICAgICAgICAgIC55KChkOiBhbnkpID0+IGQueCkoZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZDNcbiAgICAgICAgICAgICAgICAgIC5saW5rVmVydGljYWwoKVxuICAgICAgICAgICAgICAgICAgLngoKGQ6IGFueSkgPT4gZC54KVxuICAgICAgICAgICAgICAgICAgLnkoKGQ6IGFueSkgPT4gZC55KShkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIGByZ2IodmFyKC0tYXgtY29tcC1oaWVyYXJjaHktY2hhcnQtbGluay1jb2xvcikpYClcbiAgICAgICAgLmF0dHIoJ3N0cm9rZS13aWR0aCcsIG9wdGlvbnMubGlua1dpZHRoKVxuICAgICAgICAuYXR0cignZmlsbCcsICdub25lJylcbiAgICAgICAgLmF0dHIoJ29wYWNpdHknLCAxKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHRlbXBsYXRlIHRvIHVzZSBmb3IgcmVuZGVyaW5nIG5vZGVzXG4gICAgICBjb25zdCB1c2VDdXN0b21UZW1wbGF0ZSA9IHRoaXMuaGFzQ3VzdG9tVGVtcGxhdGUoKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlVG9Vc2UgPSB0aGlzLm5vZGVUZW1wbGF0ZSgpIHx8IHRoaXMuY3VzdG9tTm9kZVRlbXBsYXRlKCk7XG5cbiAgICAgIC8vIENyZWF0ZSBhIG1hcCB0byBzdG9yZSBub2RlIGVsZW1lbnRzIGZvciBmdXR1cmUgdXBkYXRlc1xuICAgICAgY29uc3Qgbm9kZUVsZW1lbnRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICAgICAgLy8gQ3JlYXRlIG5vZGUgZ3JvdXBzXG4gICAgICBjb25zdCBub2RlR3JvdXBzID0gZ1xuICAgICAgICAuc2VsZWN0QWxsKCcubm9kZS1ncm91cCcpXG4gICAgICAgIC5kYXRhKHJvb3QuZGVzY2VuZGFudHMoKS5maWx0ZXIoKGQ6IGFueSkgPT4gZC5kYXRhLmlkICE9PSAncm9vdCcpKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKCdnJylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1ub2RlLWdyb3VwJylcbiAgICAgICAgLmF0dHIoJ2RhdGEtbm9kZS1pZCcsIChkOiBhbnkpID0+IGQuZGF0YS5pZCkgLy8gQWRkIGEgZGF0YSBhdHRyaWJ1dGUgZm9yIGVhc2llciBzZWxlY3Rpb25cbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIChkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gaXNIb3Jpem9udGFsID8gZC55IDogZC54O1xuICAgICAgICAgIGNvbnN0IHkgPSBpc0hvcml6b250YWwgPyBkLnggOiBkLnk7XG4gICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGUoJHt4fSwke3l9KWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKCdvcGFjaXR5JywgMSk7IC8vIERpc3BsYXkgbm9kZXMgaW1tZWRpYXRlbHkgd2l0aCBmdWxsIG9wYWNpdHlcblxuICAgICAgLy8gU3RvcmUgbm9kZSBlbGVtZW50cyBpbiB0aGUgbWFwXG4gICAgICBub2RlR3JvdXBzLmVhY2goZnVuY3Rpb24gKHRoaXM6IFNWR0dFbGVtZW50LCBkOiBhbnkpIHtcbiAgICAgICAgbm9kZUVsZW1lbnRzTWFwLnNldChkLmRhdGEuaWQsIHRoaXMpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgbm9kZSBlbGVtZW50cyBzaWduYWxcbiAgICAgIHRoaXMuX25vZGVFbGVtZW50cy5zZXQobm9kZUVsZW1lbnRzTWFwKTtcblxuICAgICAgaWYgKHVzZUN1c3RvbVRlbXBsYXRlICYmIHRlbXBsYXRlVG9Vc2UpIHtcbiAgICAgICAgLy8gUmVuZGVyIGN1c3RvbSBub2RlIHRlbXBsYXRlc1xuICAgICAgICBub2RlR3JvdXBzLmVhY2goKGQ6IGFueSwgaTogbnVtYmVyLCBub2RlczogYW55W10pID0+IHtcbiAgICAgICAgICBjb25zdCBub2RlID0gZC5kYXRhO1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBub2Rlc1tpXTtcbiAgICAgICAgICBjb25zdCBoYXNDaGlsZHJlbiA9ICEhKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKTtcbiAgICAgICAgICBjb25zdCBpc0V4cGFuZGVkID0gaGFzQ2hpbGRyZW4gJiYgdGhpcy5fZXhwYW5kZWROb2RlcygpLmhhcyhub2RlLmlkKSAmJiB0aGlzLl9leHBhbmRlZE5vZGVzKCkuZ2V0KG5vZGUuaWQpO1xuXG4gICAgICAgICAgLy8gRW5oYW5jZSB0aGUgbm9kZSB3aXRoIGV4cGFuZGVkIHN0YXRlIGFuZCB0b2dnbGUgZnVuY3Rpb25cbiAgICAgICAgICBub2RlLmV4cGFuZGVkID0gaXNFeHBhbmRlZCB8fCBmYWxzZTtcbiAgICAgICAgICBub2RlLnRvZ2dsZUV4cGFuZGVkID0gKCkgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUuaWQpO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgZm9yZWlnbk9iamVjdCBmb3IgdGhlIHRlbXBsYXRlXG4gICAgICAgICAgY29uc3QgZm9yZWlnbk9iamVjdCA9IHRoaXMuZDNcbiAgICAgICAgICAgIC5zZWxlY3QoZWxlbWVudClcbiAgICAgICAgICAgIC5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKVxuICAgICAgICAgICAgLmF0dHIoJ3gnLCAtbm9kZVdpZHRoIC8gMilcbiAgICAgICAgICAgIC5hdHRyKCd5JywgLW5vZGVIZWlnaHQgLyAyKVxuICAgICAgICAgICAgLmF0dHIoJ3dpZHRoJywgbm9kZVdpZHRoKVxuICAgICAgICAgICAgLmF0dHIoJ2hlaWdodCcsIG5vZGVIZWlnaHQpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUtY29udGFpbmVyJylcbiAgICAgICAgICAgIC5vbignY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgLy8gRG9uJ3QgcHJvcGFnYXRlIHRoZSBldmVudCBpZiBpdCdzIGNvbWluZyBmcm9tIGFuIGludGVyYWN0aXZlIGVsZW1lbnRcbiAgICAgICAgICAgICAgLy8gbGlrZSBhIGJ1dHRvbiBpbnNpZGUgdGhlIHRlbXBsYXRlXG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgY29uc3QgaXNJbnRlcmFjdGl2ZSA9XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnRhZ05hbWUgPT09ICdCVVRUT04nIHx8IHRhcmdldC50YWdOYW1lID09PSAnQScgfHwgdGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvbiwgYSwgW3JvbGU9XCJidXR0b25cIl0nKTtcblxuICAgICAgICAgICAgICBpZiAoIWlzSW50ZXJhY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU5vZGVDbGljayhldmVudCwgZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgZGl2IHRvIGhvbGQgdGhlIHRlbXBsYXRlXG4gICAgICAgICAgY29uc3QgZGl2ID0gZm9yZWlnbk9iamVjdFxuICAgICAgICAgICAgLmFwcGVuZCgneGh0bWw6ZGl2JylcbiAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm9kZS1jb250ZW50JylcbiAgICAgICAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXG4gICAgICAgICAgICAuc3R5bGUoJ2hlaWdodCcsICcxMDAlJyk7XG5cbiAgICAgICAgICAvLyBSZW5kZXIgdGhlIHRlbXBsYXRlIGludG8gdGhlIGRpdlxuICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgY29udGV4dCB3aXRoIGVuaGFuY2VkIG5vZGUgYXMgdGhlIGltcGxpY2l0IHZhbHVlXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0OiBBWEhpZXJhcmNoeUNoYXJ0Tm9kZUNvbnRleHQgPSB7XG4gICAgICAgICAgICAgICRpbXBsaWNpdDogbm9kZSBhcyBBWEhpZXJhcmNoeUNoYXJ0Tm9kZSAmIHsgZXhwYW5kZWQ6IGJvb2xlYW47IHRvZ2dsZUV4cGFuZGVkOiAoKSA9PiB2b2lkIH0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB2aWV3UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0ZW1wbGF0ZVRvVXNlISwgY29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLmVtYmVkZGVkVmlld3MucHVzaCh2aWV3UmVmKTtcbiAgICAgICAgICAgIHZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdGVtcGxhdGUgY29udGVudHMgdG8gdGhlIGRpdlxuICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSB2aWV3UmVmLnJvb3ROb2RlcztcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAgICAgICBkaXYubm9kZSgpLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbmRlciBlbmhhbmNlZCBkZWZhdWx0IG5vZGVzIChyZWN0YW5nbGVzIHdpdGggdGV4dCBhbmQgaWNvbnMpXG4gICAgICAgIG5vZGVHcm91cHMuZWFjaCgoZDogYW55LCBpOiBudW1iZXIsIG5vZGVzOiBhbnlbXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGdyb3VwID0gdGhpcy5kMy5zZWxlY3Qobm9kZXNbaV0pO1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBkLmRhdGE7XG4gICAgICAgICAgY29uc3QgaGFzQ2hpbGRyZW4gPSAhIShub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAvLyBOb2RlIGJhY2tncm91bmQgcmVjdCB3aXRoIHJvdW5kZWQgY29ybmVyc1xuICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAuYXBwZW5kKCdyZWN0JylcbiAgICAgICAgICAgIC5hdHRyKCd4JywgLW5vZGVXaWR0aCAvIDIpXG4gICAgICAgICAgICAuYXR0cigneScsIC1ub2RlSGVpZ2h0IC8gMilcbiAgICAgICAgICAgIC5hdHRyKCd3aWR0aCcsIG5vZGVXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKCdoZWlnaHQnLCBub2RlSGVpZ2h0KVxuICAgICAgICAgICAgLmF0dHIoJ3J4JywgNilcbiAgICAgICAgICAgIC5hdHRyKCdyeScsIDYpXG4gICAgICAgICAgICAuYXR0cignZmlsbCcsIG5vZGUuY29sb3IgfHwgYHJnYih2YXIoLS1heC1jb21wLWhpZXJhcmNoeS1jaGFydC1ub2RlLWNvbG9yKSlgKVxuICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZScsIGByZ2IodmFyKC0tYXgtY29tcC1oaWVyYXJjaHktY2hhcnQtbm9kZS1zdHJva2UtY29sb3IpKWApXG4gICAgICAgICAgICAuYXR0cignc3Ryb2tlLXdpZHRoJywgb3B0aW9ucy5ub2RlU3Ryb2tlV2lkdGgpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUnKTtcblxuICAgICAgICAgIC8vIE1haW4gdGl0bGUvbmFtZVxuICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgIC5hdHRyKCd5JywgLTEwKVxuICAgICAgICAgICAgLmF0dHIoJ3RleHQtYW5jaG9yJywgJ21pZGRsZScpXG4gICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUtdGl0bGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnd2hpdGUnKVxuICAgICAgICAgICAgLmF0dHIoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKVxuICAgICAgICAgICAgLnRleHQobm9kZS5uYW1lIHx8IG5vZGUubGFiZWwgfHwgJycpO1xuXG4gICAgICAgICAgLy8gU3VidGl0bGUgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAobm9kZS5zdWJ0aXRsZSkge1xuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgMTApXG4gICAgICAgICAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LW5vZGUtc3VidGl0bGUnKVxuICAgICAgICAgICAgICAuYXR0cignZmlsbCcsICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOCknKVxuICAgICAgICAgICAgICAuYXR0cignZm9udC1zaXplJywgJzAuOGVtJylcbiAgICAgICAgICAgICAgLnRleHQobm9kZS5zdWJ0aXRsZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVHlwZSBsYWJlbCBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChub2RlLnR5cGUpIHtcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAuYXR0cigneScsIDI1KVxuICAgICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC1ub2RlLXR5cGUnKVxuICAgICAgICAgICAgICAuYXR0cignZmlsbCcsICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknKVxuICAgICAgICAgICAgICAuYXR0cignZm9udC1zaXplJywgJzAuN2VtJylcbiAgICAgICAgICAgICAgLnRleHQobm9kZS50eXBlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBBZGQgZXhwYW5kL2NvbGxhcHNlIGluZGljYXRvciBpZiBub2RlIGhhcyBjaGlsZHJlblxuICAgICAgICAgIGlmIChoYXNDaGlsZHJlbiAmJiBvcHRpb25zLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBpc0V4cGFuZGVkID0gdGhpcy5fZXhwYW5kZWROb2RlcygpLmhhcyhub2RlLmlkKSAmJiB0aGlzLl9leHBhbmRlZE5vZGVzKCkuZ2V0KG5vZGUuaWQpO1xuXG4gICAgICAgICAgICAvLyBUb2dnbGUgYnV0dG9uIHdpdGggYmV0dGVyIHN0eWxpbmdcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ2NpcmNsZScpXG4gICAgICAgICAgICAgIC5hdHRyKCdyJywgMTApXG4gICAgICAgICAgICAgIC5hdHRyKCdjeCcsIG5vZGVXaWR0aCAvIDIgLSAxMilcbiAgICAgICAgICAgICAgLmF0dHIoJ2N5JywgLW5vZGVIZWlnaHQgLyAyICsgMTIpXG4gICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3doaXRlJylcbiAgICAgICAgICAgICAgLmF0dHIoJ3N0cm9rZScsIGByZ2IodmFyKC0tYXgtY29tcC1oaWVyYXJjaHktY2hhcnQtbm9kZS1zdHJva2UtY29sb3IpKWApXG4gICAgICAgICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxKVxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnYXgtaGllcmFyY2h5LWNoYXJ0LXRvZ2dsZS1pbmRpY2F0b3InKVxuICAgICAgICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICdwb2ludGVyJylcbiAgICAgICAgICAgICAgLm9uKCdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTm9kZShub2RlLmlkKTtcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSBpY29uXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgICAgICAgLmF0dHIoJ3gnLCBub2RlV2lkdGggLyAyIC0gMTIpXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgLW5vZGVIZWlnaHQgLyAyICsgMTIpXG4gICAgICAgICAgICAgIC5hdHRyKCdkeScsICcwLjMyZW0nKVxuICAgICAgICAgICAgICAuYXR0cigndGV4dC1hbmNob3InLCAnbWlkZGxlJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2F4LWhpZXJhcmNoeS1jaGFydC10b2dnbGUtaWNvbicpXG4gICAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgbm9kZS5jb2xvciB8fCBgcmdiKHZhcigtLWF4LWNvbXAtaGllcmFyY2h5LWNoYXJ0LW5vZGUtY29sb3IpKWApXG4gICAgICAgICAgICAgIC5hdHRyKCdmb250LXdlaWdodCcsICdib2xkJylcbiAgICAgICAgICAgICAgLnN0eWxlKCdjdXJzb3InLCAncG9pbnRlcicpXG4gICAgICAgICAgICAgIC50ZXh0KGlzRXhwYW5kZWQgPyAn4oiSJyA6ICcrJylcbiAgICAgICAgICAgICAgLm9uKCdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlTm9kZShub2RlLmlkKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gSWNvbiBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmIChub2RlLmljb24pIHtcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgICAgICAgICAuYXR0cigneCcsIC1ub2RlV2lkdGggLyAyICsgMTUpXG4gICAgICAgICAgICAgIC5hdHRyKCd5JywgMClcbiAgICAgICAgICAgICAgLmF0dHIoJ2R5JywgJzAuMzJlbScpXG4gICAgICAgICAgICAgIC5hdHRyKCdjbGFzcycsICdheC1oaWVyYXJjaHktY2hhcnQtbm9kZS1pY29uJylcbiAgICAgICAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnd2hpdGUnKVxuICAgICAgICAgICAgICAuYXR0cignY2xhc3MnLCBub2RlLmljb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFkZCBjbGljayBoYW5kbGVyIHRvIHRoZSB3aG9sZSBub2RlXG4gICAgICAgICAgZ3JvdXAub24oJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5vZGVDbGljayhldmVudCwgZCk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBBZGQgdG9vbHRpcCBpZiBlbmFibGVkXG4gICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd1Rvb2x0aXAgJiYgKG5vZGUudG9vbHRpcCB8fCBub2RlLmRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgZ3JvdXAuYXBwZW5kKCd0aXRsZScpLnRleHQobm9kZS50b29sdGlwIHx8IG5vZGUuZGVzY3JpcHRpb24gfHwgJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIG5vZGUgZXhwYW5zaW9uIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlTm9kZShub2RlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGV4cGFuZGVkTm9kZXMgPSBuZXcgTWFwKHRoaXMuX2V4cGFuZGVkTm9kZXMoKSk7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gZXhwYW5kZWROb2Rlcy5nZXQobm9kZUlkKTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IGN1cnJlbnRTdGF0ZSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhY3VycmVudFN0YXRlO1xuXG4gICAgZXhwYW5kZWROb2Rlcy5zZXQobm9kZUlkLCBuZXdTdGF0ZSk7XG4gICAgdGhpcy5fZXhwYW5kZWROb2Rlcy5zZXQoZXhwYW5kZWROb2Rlcyk7XG5cbiAgICAvLyBFbWl0IHRvZ2dsZSBldmVudFxuICAgIHRoaXMuZmluZE5vZGVCeUlkKHRoaXMucHJvY2Vzc2VkRGF0YSgpLCBub2RlSWQpLnRoZW4oKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlKSB7XG4gICAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIGV4cGFuZGVkOiBuZXdTdGF0ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgdG9nZ2xlIGluZGljYXRvciBpbW1lZGlhdGVseSBmb3IgYmV0dGVyIFVYXG4gICAgdGhpcy51cGRhdGVUb2dnbGVJbmRpY2F0b3Iobm9kZUlkLCBuZXdTdGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGp1c3QgdGhlIHRvZ2dsZSBpbmRpY2F0b3Igd2l0aG91dCByZWRyYXdpbmcgdGhlIGNoYXJ0XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVRvZ2dsZUluZGljYXRvcihub2RlSWQ6IHN0cmluZywgZXhwYW5kZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZDMgfHwgIXRoaXMuY2hhcnRDb250YWluZXIoKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jaGFydENvbnRhaW5lcigpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCBzdmcgPSBjb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG4gICAgICBpZiAoIXN2ZykgcmV0dXJuO1xuXG4gICAgICAvLyBGaW5kIGFuZCB1cGRhdGUgdGhlIHRvZ2dsZSBpbmRpY2F0b3IgZm9yIHRoZSBzcGVjaWZpYyBub2RlXG4gICAgICBjb25zdCBub2RlR3JvdXAgPSB0aGlzLmQzLnNlbGVjdChzdmcpLnNlbGVjdChgW2RhdGEtbm9kZS1pZD1cIiR7bm9kZUlkfVwiXWApO1xuICAgICAgaWYgKG5vZGVHcm91cC5lbXB0eSgpKSByZXR1cm47XG5cbiAgICAgIC8vIFVwZGF0ZSB0aGUgdG9nZ2xlIGljb24gKGlmIGl0IGV4aXN0cylcbiAgICAgIGNvbnN0IHRvZ2dsZUljb24gPSBub2RlR3JvdXAuc2VsZWN0KCcuYXgtaGllcmFyY2h5LWNoYXJ0LXRvZ2dsZS1pY29uJyk7XG4gICAgICBpZiAoIXRvZ2dsZUljb24uZW1wdHkoKSkge1xuICAgICAgICB0b2dnbGVJY29uLnRleHQoZXhwYW5kZWQgPyAn4oiSJyA6ICcrJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBGb3JjZSBlZmZlY3QgdG8gcnVuIHRoYXQgd2lsbCB1cGRhdGUgdGhlIGNoYXJ0XG4gICAgLy8gVGhpcyBsZXZlcmFnZXMgQW5ndWxhcidzIHJlYWN0aXZpdHkgcmF0aGVyIHRoYW4gYSBkaXJlY3QgbWV0aG9kIGNhbGxcbiAgICAvLyB3aGljaCBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBBbmd1bGFyJ3MgcmVhY3RpdmUgYXBwcm9hY2hcbiAgICBjb25zdCBleHBhbmRlZE5vZGVzID0gbmV3IE1hcCh0aGlzLl9leHBhbmRlZE5vZGVzKCkpO1xuICAgIHRoaXMuX2V4cGFuZGVkTm9kZXMuc2V0KGV4cGFuZGVkTm9kZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBub2RlIGJ5IElEXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZpbmROb2RlQnlJZChkYXRhOiBBWEhpZXJhcmNoeUNoYXJ0RGF0YSwgaWQ6IHN0cmluZyk6IFByb21pc2U8QVhIaWVyYXJjaHlDaGFydERhdGEgfCBudWxsPiB7XG4gICAgaWYgKGRhdGEuaWQgPT09IGlkKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jaGlsZHJlbikge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBkYXRhLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gYXdhaXQgdGhpcy5maW5kTm9kZUJ5SWQoY2hpbGQsIGlkKTtcbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIGZvdW5kO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG5vZGUgY2xpY2sgZXZlbnRzXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZU5vZGVDbGljayhldmVudDogTW91c2VFdmVudCwgZDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZSA9IGQuZGF0YTtcblxuICAgIC8vIEVtaXQgY2xpY2sgZXZlbnRcbiAgICB0aGlzLml0ZW1DbGljay5lbWl0KHtcbiAgICAgIGV2ZW50OiB7IG5hdGl2ZUV2ZW50OiBldmVudCwgc2VuZGVyOiB0aGlzIH0sXG4gICAgICBpdGVtOiBub2RlLFxuICAgICAgZWxlbWVudDogZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBleGlzdGluZyBjaGFydFxuICAgKi9cbiAgcHVibGljIGNsZWFudXBDaGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3lFbWJlZGRlZFZpZXdzKCk7XG5cbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNoYXJ0Q29udGFpbmVyKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdzdmcsIC5heC1jaGFydC1lbXB0eSwgLmF4LWhpZXJhcmNoeS1jaGFydC1uby1kYXRhLW1lc3NhZ2UnKS5mb3JFYWNoKChlbCkgPT4gZWwucmVtb3ZlKCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhbnVwQ2hhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveUVtYmVkZGVkVmlld3MoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCB2aWV3IG9mIHRoaXMuZW1iZWRkZWRWaWV3cykge1xuICAgICAgdmlldy5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuZW1iZWRkZWRWaWV3cyA9IFtdO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUNoYXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlQ2hhcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgRDMgZWFzaW5nIGZ1bmN0aW9uIGZyb20gc3RyaW5nIG5hbWVcbiAgICovXG4gIHByaXZhdGUgZ2V0RWFzaW5nRnVuY3Rpb24oZWFzaW5nPzogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIWVhc2luZykgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljSW5PdXQ7XG5cbiAgICBzd2l0Y2ggKGVhc2luZykge1xuICAgICAgY2FzZSAnbGluZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUxpbmVhcjtcbiAgICAgIGNhc2UgJ2Vhc2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlUG9seUluT3V0O1xuICAgICAgY2FzZSAnZWFzZS1pbic6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5SW47XG4gICAgICBjYXNlICdlYXNlLW91dCc6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VQb2x5T3V0O1xuICAgICAgY2FzZSAnZWFzZS1pbi1vdXQnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlUG9seUluT3V0O1xuICAgICAgY2FzZSAnY3ViaWMnOlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWM7XG4gICAgICBjYXNlICdjdWJpYy1pbic6XG4gICAgICAgIHJldHVybiB0aGlzLmQzLmVhc2VDdWJpY0luO1xuICAgICAgY2FzZSAnY3ViaWMtb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljT3V0O1xuICAgICAgY2FzZSAnY3ViaWMtaW4tb3V0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuZDMuZWFzZUN1YmljSW5PdXQ7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5kMy5lYXNlQ3ViaWNJbk91dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYSBtZXNzYWdlIHdoZW4gbm8gZGF0YSBpcyBhdmFpbGFibGVcbiAgICovXG4gIHByaXZhdGUgc2hvd05vRGF0YU1lc3NhZ2UoY29udGFpbmVyRWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IHRoaXMuZWZmZWN0aXZlTWVzc2FnZXMoKTtcbiAgICByZW5kZXJDaGFydEVtcHR5TWVzc2FnZSh0aGlzLmQzLCBjb250YWluZXJFbGVtZW50LCB7XG4gICAgICBpY29uOiBtZXNzYWdlcy5ub0RhdGFJY29uLFxuICAgICAgdGl0bGU6IG1lc3NhZ2VzLm5vRGF0YSxcbiAgICAgIGhlbHA6IG1lc3NhZ2VzLm5vRGF0YUhlbHAsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJheC1oaWVyYXJjaHktY2hhcnRcIiByb2xlPVwiaW1nXCIgI2NoYXJ0Q29udGFpbmVyPjwvZGl2PlxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNoYXJ0cy1oaWVyYXJjaHktY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jaGFydHMvaGllcmFyY2h5LWNoYXJ0L3NyYy9hY29yZXgtY2hhcnRzLWhpZXJhcmNoeS1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
@@ -54,8 +54,8 @@ function lineChartConfig(config = {}) {
54
54
  * Line Chart Component for rendering data as lines with interactive hover effects and animations
55
55
  */
56
56
  class AXLineChartComponent extends AXChartComponent {
57
- data = input([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
58
- options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
57
+ data = input([], ...(ngDevMode ? [{ debugName: "data" }] : []));
58
+ options = input({}, ...(ngDevMode ? [{ debugName: "options" }] : []));
59
59
  pointClick = output();
60
60
  chartContainerEl = viewChild.required('chartContainer');
61
61
  d3;
@@ -69,18 +69,18 @@ class AXLineChartComponent extends AXChartComponent {
69
69
  width;
70
70
  height;
71
71
  margin = { top: 20, right: 25, bottom: 40, left: 50 };
72
- _tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: "_tooltipVisible" }] : /* istanbul ignore next */ []));
73
- _tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "_tooltipPosition" }] : /* istanbul ignore next */ []));
72
+ _tooltipVisible = signal(false, ...(ngDevMode ? [{ debugName: "_tooltipVisible" }] : []));
73
+ _tooltipPosition = signal({ x: 0, y: 0 }, ...(ngDevMode ? [{ debugName: "_tooltipPosition" }] : []));
74
74
  _tooltipData = signal({
75
75
  title: '',
76
76
  value: '0',
77
77
  percentage: '0%',
78
78
  color: '',
79
- }, ...(ngDevMode ? [{ debugName: "_tooltipData" }] : /* istanbul ignore next */ []));
79
+ }, ...(ngDevMode ? [{ debugName: "_tooltipData" }] : []));
80
80
  _tooltipRafId = null;
81
81
  _pendingTooltipCoords = null;
82
- _initialized = signal(false, ...(ngDevMode ? [{ debugName: "_initialized" }] : /* istanbul ignore next */ []));
83
- _rendered = signal(false, ...(ngDevMode ? [{ debugName: "_rendered" }] : /* istanbul ignore next */ []));
82
+ _initialized = signal(false, ...(ngDevMode ? [{ debugName: "_initialized" }] : []));
83
+ _rendered = signal(false, ...(ngDevMode ? [{ debugName: "_rendered" }] : []));
84
84
  hiddenSeries = new Set();
85
85
  _fullNormalizedData = [];
86
86
  tooltipVisible = this._tooltipVisible.asReadonly();
@@ -90,9 +90,9 @@ class AXLineChartComponent extends AXChartComponent {
90
90
  configToken = inject(AX_LINE_CHART_CONFIG);
91
91
  // Inject the chart colors
92
92
  chartColors = inject(AX_CHART_COLOR_PALETTE);
93
- effectiveOptions = computed(() => mergeChartOptions(this.configToken, this.options()), ...(ngDevMode ? [{ debugName: "effectiveOptions" }] : /* istanbul ignore next */ []));
93
+ effectiveOptions = computed(() => mergeChartOptions(this.configToken, this.options()), ...(ngDevMode ? [{ debugName: "effectiveOptions" }] : []));
94
94
  // Messages with defaults
95
- effectiveMessages = computed(() => mergeChartMessages(this.configToken.messages, this.options()?.messages), ...(ngDevMode ? [{ debugName: "effectiveMessages" }] : /* istanbul ignore next */ []));
95
+ effectiveMessages = computed(() => mergeChartMessages(this.configToken.messages, this.options()?.messages), ...(ngDevMode ? [{ debugName: "effectiveMessages" }] : []));
96
96
  // Layout & Dimensions
97
97
  MIN_DIMENSION = 1;
98
98
  DEFAULT_MARGIN_TOP = 12;
@@ -412,7 +412,7 @@ class AXLineChartComponent extends AXChartComponent {
412
412
  if (this._rendered()) {
413
413
  this.updateChart();
414
414
  }
415
- }, ...(ngDevMode ? [{ debugName: "#effect" }] : /* istanbul ignore next */ []));
415
+ }, ...(ngDevMode ? [{ debugName: "#effect" }] : []));
416
416
  ngAfterViewInit() {
417
417
  this._initialized.set(true);
418
418
  if (this.d3 && this.chartContainerEl()) {
@@ -1248,13 +1248,13 @@ class AXLineChartComponent extends AXChartComponent {
1248
1248
  this.showCrosshairLines(overlappingPoints[0].point);
1249
1249
  }
1250
1250
  }
1251
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1252
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.9", type: AXLineChartComponent, isStandalone: true, selector: "ax-line-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pointClick: "pointClick" }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n", styles: [".ax-chart-empty{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:1rem;pointer-events:none}.ax-chart-empty__card{text-align:center;padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px;box-sizing:border-box}.ax-chart-empty__icon{opacity:.6;margin-bottom:.75rem}.ax-chart-empty__title{font-size:1rem;font-weight:600;margin-bottom:.5rem}.ax-chart-empty__help{font-size:.8rem;opacity:.6}ax-line-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);box-sizing:border-box;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: 0, 0, 0, 0;--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;min-height:0;box-sizing:border-box;padding:clamp(.25rem,.6vw,.5rem);border-radius:.5rem;overflow:hidden;contain:layout style;color:rgba(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden;flex-shrink:0}ax-line-chart .ax-line-chart svg g:has(text){font-family:inherit}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1251
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXLineChartComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1252
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.3.3", type: AXLineChartComponent, isStandalone: true, selector: "ax-line-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { pointClick: "pointClick" }, viewQueries: [{ propertyName: "chartContainerEl", first: true, predicate: ["chartContainer"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n", styles: [".ax-chart-empty{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:1rem;pointer-events:none}.ax-chart-empty__card{text-align:center;padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px;box-sizing:border-box}.ax-chart-empty__icon{opacity:.6;margin-bottom:.75rem}.ax-chart-empty__title{font-size:1rem;font-weight:600;margin-bottom:.5rem}.ax-chart-empty__help{font-size:.8rem;opacity:.6}ax-line-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);box-sizing:border-box;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: 0, 0, 0, 0;--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;min-height:0;box-sizing:border-box;padding:clamp(.25rem,.6vw,.5rem);border-radius:.5rem;overflow:hidden;contain:layout style;color:rgba(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden;flex-shrink:0}ax-line-chart .ax-line-chart svg g:has(text){font-family:inherit}\n"], dependencies: [{ kind: "component", type: AXChartTooltipComponent, selector: "ax-chart-tooltip", inputs: ["data", "position", "visible", "showPercentage", "style"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1253
1253
  }
1254
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXLineChartComponent, decorators: [{
1254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.3", ngImport: i0, type: AXLineChartComponent, decorators: [{
1255
1255
  type: Component,
1256
1256
  args: [{ selector: 'ax-line-chart', encapsulation: ViewEncapsulation.None, imports: [AXChartTooltipComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ax-line-chart\" #chartContainer>\n <!-- Shared tooltip component -->\n <ax-chart-tooltip\n [visible]=\"tooltipVisible()\"\n [position]=\"tooltipPosition()\"\n [data]=\"tooltipData()\"\n [showPercentage]=\"false\"\n ></ax-chart-tooltip>\n</div>\n", styles: [".ax-chart-empty{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;box-sizing:border-box;padding:1rem;pointer-events:none}.ax-chart-empty__card{text-align:center;padding:1.5rem;border-radius:.5rem;border:1px solid rgba(var(--ax-sys-color-surface));width:80%;max-width:300px;box-sizing:border-box}.ax-chart-empty__icon{opacity:.6;margin-bottom:.75rem}.ax-chart-empty__title{font-size:1rem;font-weight:600;margin-bottom:.5rem}.ax-chart-empty__help{font-size:.8rem;opacity:.6}ax-line-chart{display:block;width:100%;height:100%;min-height:clamp(220px,38vw,360px);box-sizing:border-box;--ax-comp-line-chart-labels-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-axis-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-grid-lines-color: var(--ax-sys-color-on-lightest-surface);--ax-comp-line-chart-bg-color: 0, 0, 0, 0;--ax-comp-line-chart-text-color: var(--ax-sys-color-on-lightest-surface)}ax-line-chart .ax-line-chart{width:100%;height:100%;position:relative;min-height:0;box-sizing:border-box;padding:clamp(.25rem,.6vw,.5rem);border-radius:.5rem;overflow:hidden;contain:layout style;color:rgba(var(--ax-comp-line-chart-text-color));background-color:rgb(var(--ax-comp-line-chart-bg-color))}ax-line-chart .ax-line-chart svg{display:block;width:100%;height:100%;max-width:100%;max-height:100%;overflow:hidden;flex-shrink:0}ax-line-chart .ax-line-chart svg g:has(text){font-family:inherit}\n"] }]
1257
- }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], pointClick: [{ type: i0.Output, args: ["pointClick"] }], chartContainerEl: [{ type: i0.ViewChild, args: ['chartContainer', { isSignal: true }] }] } });
1257
+ }] });
1258
1258
 
1259
1259
  /**
1260
1260
  * Generated bundle index. Do not edit.