@acorex/components 21.0.0-next.13 → 21.0.0-next.14

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.
@@ -644,7 +644,7 @@ class AXTree2Component {
644
644
  this.onItemsChange.emit(dropEvent);
645
645
  }
646
646
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AXTree2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
647
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.6", type: AXTree2Component, isStandalone: true, selector: "ax-tree2", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: true, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: true, isRequired: false, transformFunction: null }, dragMode: { classPropertyName: "dragMode", publicName: "dragMode", isSignal: true, isRequired: false, transformFunction: null }, dragOperationType: { classPropertyName: "dragOperationType", publicName: "dragOperationType", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: "showIcons", publicName: "showIcons", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: "showChildrenBadge", publicName: "showChildrenBadge", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: "expandedIcon", publicName: "expandedIcon", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: "collapsedIcon", publicName: "collapsedIcon", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: "indentSize", publicName: "indentSize", isSignal: true, isRequired: false, transformFunction: null }, nodeHeight: { classPropertyName: "nodeHeight", publicName: "nodeHeight", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, lazyLoad: { classPropertyName: "lazyLoad", publicName: "lazyLoad", isSignal: true, isRequired: false, transformFunction: null }, enableLazyLoad: { classPropertyName: "enableLazyLoad", publicName: "enableLazyLoad", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodes: "nodesChange", onBeforeDrop: "onBeforeDrop", onNodeToggle: "onNodeToggle", onNodeSelect: "onNodeSelect", onOrderChange: "onOrderChange", onMoveChange: "onMoveChange", onItemsChange: "onItemsChange" }, host: { properties: { "class.ax-tree2-default": "look() === 'default'", "class.ax-tree2-card": "look() === 'card'", "class.ax-tree2-with-line": "look() === 'with-line'", "style.--ax-tree-indent-size": "indentSize() + 'px'", "style.--ax-tree-line-offset": "(indentSize() / 2) + 'px'" }, classAttribute: "ax-tree2" }, ngImport: i0, template: "<!-- Root drop list -->\n<div\n [axDropList]=\"dragMode() !== 'none'\"\n [sortingDisabled]=\"false\"\n [id]=\"getListId()\"\n [attr.data-node-id]=\"null\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDrop($event)\"\n class=\"ax-tree2-drop-list\"\n [class.ax-tree2-card]=\"look() === 'card'\"\n [class.ax-tree2-with-lines]=\"look() === 'with-line'\"\n [class.ax-tree2-compact]=\"nodeHeight() === 'compact'\"\n [class.ax-tree2-comfortable]=\"nodeHeight() === 'comfortable'\"\n>\n @for (node of nodes(); track node.id) {\n @if (node.visible !== false) {\n <div\n [axDrag]=\"dragMode() !== 'none'\"\n [dragDisabled]=\"node.disabled\"\n [dragData]=\"node\"\n class=\"ax-tree2-node\"\n [class.ax-tree2-node-selected]=\"node.selected\"\n [class.ax-tree2-node-disabled]=\"node.disabled\"\n [class.ax-tree2-node-loading]=\"node.loading\"\n >\n <div\n class=\"ax-tree2-node-content\"\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"'ax-tree-node-drop-' + node.id\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n >\n @if (dragMode() === 'handler') {\n <span class=\"ax-tree2-drag-handle\" axDragHandle title=\"Drag to reorder\"> \u22EE\u22EE </span>\n }\n <ax-button\n class=\"ax-tree2-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n [class.ax-tree2-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree2-expanded]=\"node.expanded\"\n [disabled]=\"node.disabled || node.loading\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (node.loading) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i [class]=\"node.expanded ? expandedIcon() : collapsedIcon()\" class=\"ax-tree2-toggle-icon\"></i>\n </ax-icon>\n }\n </ax-button>\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, 0)\"\n ></ng-container>\n } @else {\n @if (showCheckbox()) {\n <ax-check-box\n class=\"ax-tree2-checkbox\"\n [ngModel]=\"node.indeterminate ? null : node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n ></ax-check-box>\n }\n @if (showIcons() && node.icon) {\n <i [class]=\"node.icon\" class=\"ax-tree2-node-icon\"></i>\n }\n <span class=\"ax-tree2-node-label\">{{ node.label }}</span>\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\n <ax-badge\n class=\"ax-tree2-children-badge\"\n [text]=\"(node.childrenCount ?? node.children?.length ?? 0).toString()\"\n ></ax-badge>\n }\n }\n </div>\n </div>\n @if (node.expanded && node.children && node.children.length > 0) {\n <div class=\"ax-tree2-children\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: node.children, parent: node, level: 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n</div>\n\n<!-- Recursive children template -->\n<ng-template #childrenList let-children=\"children\" let-parent=\"parent\" let-level=\"level\">\n <div\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"getListId(parent)\"\n [attr.data-node-id]=\"parent.id\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDrop($event, parent)\"\n class=\"ax-tree2-drop-list\"\n >\n @for (node of children; track node.id) {\n @if (node.visible !== false) {\n <div\n [axDrag]=\"dragMode() !== 'none'\"\n [dragDisabled]=\"node.disabled\"\n [dragData]=\"node\"\n class=\"ax-tree2-node\"\n [class.ax-tree2-node-selected]=\"node.selected\"\n [class.ax-tree2-node-disabled]=\"node.disabled\"\n [class.ax-tree2-node-loading]=\"node.loading\"\n >\n <div\n class=\"ax-tree2-node-content\"\n [style.padding-left.px]=\"(level * indentSize()) / (look() === 'with-line' ? 3 : 1)\"\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"'ax-tree-node-drop-' + node.id\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n >\n @if (dragMode() === 'handler') {\n <span class=\"ax-tree2-drag-handle\" axDragHandle title=\"Drag to reorder\"> \u22EE\u22EE </span>\n }\n <ax-button\n class=\"ax-tree2-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n [class.ax-tree2-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree2-expanded]=\"node.expanded\"\n [disabled]=\"node.disabled || node.loading\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (node.loading) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i [class]=\"node.expanded ? expandedIcon() : collapsedIcon()\" class=\"ax-tree2-toggle-icon\"></i>\n </ax-icon>\n }\n </ax-button>\n\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, level)\"\n ></ng-container>\n } @else {\n @if (showCheckbox()) {\n <ax-check-box\n class=\"ax-tree2-checkbox\"\n [ngModel]=\"node.indeterminate ? null : node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n ></ax-check-box>\n }\n @if (showIcons() && node.icon) {\n <i [class]=\"node.icon\" class=\"ax-tree2-node-icon\"></i>\n }\n <span class=\"ax-tree2-node-label\">{{ node.label }}</span>\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\n <ax-badge\n class=\"ax-tree2-children-badge\"\n [text]=\"(node.childrenCount ?? node.children?.length ?? 0).toString()\"\n ></ax-badge>\n }\n }\n </div>\n </div>\n @if (node.expanded && node.children && node.children.length > 0) {\n <div class=\"ax-tree2-children\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: node.children, parent: node, level: level + 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n </div>\n</ng-template>\n", styles: [".ax-tree2{display:block;width:100%;--ax-comp-tree2-indent-size: 12px;--ax-comp-tree2-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree2-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree2-node-border-radius: 6px;--ax-comp-tree2-node-margin: .125rem;--ax-comp-tree2-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree2-drag-preview-opacity: .9;--ax-comp-tree2-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree2-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree2-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree2-drop-list{min-height:2rem}.ax-tree2-compact .ax-tree2-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree2-comfortable .ax-tree2-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree2-node{position:relative;margin:var(--ax-comp-tree2-node-margin) 0;border-radius:var(--ax-comp-tree2-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree2-node:hover:not(.ax-dragging){background:var(--ax-comp-tree2-node-hover-bg)}.ax-tree2-node.ax-tree2-node-selected{background:var(--ax-comp-tree2-node-selected-bg);border-color:currentColor}.ax-tree2-node.ax-dragging{opacity:var(--ax-comp-tree2-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree2-node.ax-drag-placeholder{background:var(--ax-comp-tree2-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree2-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree2-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree2-drop-active-bg);border-radius:var(--ax-comp-tree2-node-border-radius);outline:2px dashed var(--ax-comp-tree2-drop-active-outline);outline-offset:-2px}.ax-tree2-node-content{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ax-tree2-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree2-drag-handle:hover{opacity:1}.ax-tree2-drag-handle:active{cursor:grabbing}.ax-tree2-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree2-expand-toggle:not(.ax-tree2-has-children){opacity:0;pointer-events:none}.ax-tree2-toggle-icon{font-size:.75rem}.ax-tree2-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree2-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree2-children{padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree2-node-loading{opacity:.7}.ax-tree2-card .ax-tree2-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree2-card .ax-tree2-node-content{padding:1rem}.ax-tree2-with-lines .ax-tree2-children{position:relative;padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-with-lines .ax-tree2-children:before{content:\"\";position:absolute;left:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines .ax-tree2-node{position:relative}.ax-tree2-with-lines .ax-tree2-node:before{content:\"\";position:absolute;left:calc(-1 * var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2)));top:60%;width:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));height:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines>.ax-tree2-drop-list>.ax-tree2-node:before,.ax-tree2-with-lines>.ax-tree2-node:before{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXDragHandleDirective, selector: "[axDragHandle]" }, { kind: "directive", type: AXDropListDirective, selector: "[axDropList]", inputs: ["axDropList", "sortingDisabled", "dropListGroup", "dropListOrientation"], outputs: ["dropListDropped"], exportAs: ["axDropList"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "component", type: AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
647
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.6", type: AXTree2Component, isStandalone: true, selector: "ax-tree2", inputs: { nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: true, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: true, isRequired: false, transformFunction: null }, dragMode: { classPropertyName: "dragMode", publicName: "dragMode", isSignal: true, isRequired: false, transformFunction: null }, dragOperationType: { classPropertyName: "dragOperationType", publicName: "dragOperationType", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: "showIcons", publicName: "showIcons", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: "showChildrenBadge", publicName: "showChildrenBadge", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: "expandedIcon", publicName: "expandedIcon", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: "collapsedIcon", publicName: "collapsedIcon", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: "indentSize", publicName: "indentSize", isSignal: true, isRequired: false, transformFunction: null }, nodeHeight: { classPropertyName: "nodeHeight", publicName: "nodeHeight", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: "itemTemplate", publicName: "itemTemplate", isSignal: true, isRequired: false, transformFunction: null }, lazyLoad: { classPropertyName: "lazyLoad", publicName: "lazyLoad", isSignal: true, isRequired: false, transformFunction: null }, enableLazyLoad: { classPropertyName: "enableLazyLoad", publicName: "enableLazyLoad", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodes: "nodesChange", onBeforeDrop: "onBeforeDrop", onNodeToggle: "onNodeToggle", onNodeSelect: "onNodeSelect", onOrderChange: "onOrderChange", onMoveChange: "onMoveChange", onItemsChange: "onItemsChange" }, host: { properties: { "class.ax-tree2-default": "look() === 'default'", "class.ax-tree2-card": "look() === 'card'", "class.ax-tree2-with-line": "look() === 'with-line'", "style.--ax-tree-indent-size": "indentSize() + 'px'", "style.--ax-tree-line-offset": "(indentSize() / 2) + 'px'" }, classAttribute: "ax-tree2" }, ngImport: i0, template: "<!-- Root drop list -->\n<div\n [axDropList]=\"dragMode() !== 'none'\"\n [sortingDisabled]=\"false\"\n [id]=\"getListId()\"\n [attr.data-node-id]=\"null\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDrop($event)\"\n class=\"ax-tree2-drop-list\"\n [class.ax-tree2-card]=\"look() === 'card'\"\n [class.ax-tree2-with-lines]=\"look() === 'with-line'\"\n [class.ax-tree2-compact]=\"nodeHeight() === 'compact'\"\n [class.ax-tree2-comfortable]=\"nodeHeight() === 'comfortable'\"\n>\n @for (node of nodes(); track node.id) {\n @if (node.visible !== false) {\n <div\n [axDrag]=\"dragMode() !== 'none'\"\n [dragDisabled]=\"node.disabled\"\n [dragData]=\"node\"\n class=\"ax-tree2-node\"\n [class.ax-tree2-node-selected]=\"node.selected\"\n [class.ax-tree2-node-disabled]=\"node.disabled\"\n [class.ax-tree2-node-loading]=\"node.loading\"\n >\n <div\n class=\"ax-tree2-node-content\"\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"'ax-tree-node-drop-' + node.id\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n >\n @if (dragMode() === 'handler') {\n <span class=\"ax-tree2-drag-handle\" axDragHandle title=\"Drag to reorder\"> \u22EE\u22EE </span>\n }\n <ax-button\n class=\"ax-tree2-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n [class.ax-tree2-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree2-expanded]=\"node.expanded\"\n [disabled]=\"node.disabled || node.loading\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (node.loading) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i [class]=\"node.expanded ? expandedIcon() : collapsedIcon()\" class=\"ax-tree2-toggle-icon\"></i>\n </ax-icon>\n }\n </ax-button>\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, 0)\"\n ></ng-container>\n } @else {\n @if (showCheckbox()) {\n <ax-check-box\n class=\"ax-tree2-checkbox\"\n [ngModel]=\"node.indeterminate ? null : node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n ></ax-check-box>\n }\n @if (showIcons() && node.icon) {\n <i [class]=\"node.icon\" class=\"ax-tree2-node-icon\"></i>\n }\n <span class=\"ax-tree2-node-label\">{{ node.label }}</span>\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\n <ax-badge\n class=\"ax-tree2-children-badge\"\n [text]=\"(node.childrenCount ?? node.children?.length ?? 0).toString()\"\n ></ax-badge>\n }\n }\n </div>\n </div>\n @if (node.expanded && node.children && node.children.length > 0) {\n <div class=\"ax-tree2-children\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: node.children, parent: node, level: 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n</div>\n\n<!-- Recursive children template -->\n<ng-template #childrenList let-children=\"children\" let-parent=\"parent\" let-level=\"level\">\n <div\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"getListId(parent)\"\n [attr.data-node-id]=\"parent.id\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDrop($event, parent)\"\n class=\"ax-tree2-drop-list\"\n >\n @for (node of children; track node.id) {\n @if (node.visible !== false) {\n <div\n [axDrag]=\"dragMode() !== 'none'\"\n [dragDisabled]=\"node.disabled\"\n [dragData]=\"node\"\n class=\"ax-tree2-node\"\n [class.ax-tree2-node-selected]=\"node.selected\"\n [class.ax-tree2-node-disabled]=\"node.disabled\"\n [class.ax-tree2-node-loading]=\"node.loading\"\n >\n <div\n class=\"ax-tree2-node-content\"\n [style.padding-left.px]=\"(level * indentSize()) / (look() === 'with-line' ? 3 : 1)\"\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"'ax-tree-node-drop-' + node.id\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n >\n @if (dragMode() === 'handler') {\n <span class=\"ax-tree2-drag-handle\" axDragHandle title=\"Drag to reorder\"> \u22EE\u22EE </span>\n }\n <ax-button\n class=\"ax-tree2-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n [class.ax-tree2-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree2-expanded]=\"node.expanded\"\n [disabled]=\"node.disabled || node.loading\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (node.loading) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i [class]=\"node.expanded ? expandedIcon() : collapsedIcon()\" class=\"ax-tree2-toggle-icon\"></i>\n </ax-icon>\n }\n </ax-button>\n\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, level)\"\n ></ng-container>\n } @else {\n @if (showCheckbox()) {\n <ax-check-box\n class=\"ax-tree2-checkbox\"\n [ngModel]=\"node.indeterminate ? null : node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n ></ax-check-box>\n }\n @if (showIcons() && node.icon) {\n <i [class]=\"node.icon\" class=\"ax-tree2-node-icon\"></i>\n }\n <span class=\"ax-tree2-node-label\">{{ node.label }}</span>\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\n <ax-badge\n class=\"ax-tree2-children-badge\"\n [text]=\"(node.childrenCount ?? node.children?.length ?? 0).toString()\"\n ></ax-badge>\n }\n }\n </div>\n </div>\n @if (node.expanded && node.children && node.children.length > 0) {\n <div class=\"ax-tree2-children\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: node.children, parent: node, level: level + 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n </div>\n</ng-template>\n", styles: [".ax-tree2{display:block;width:100%;--ax-comp-tree2-indent-size: 12px;--ax-comp-tree2-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree2-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree2-node-border-radius: 6px;--ax-comp-tree2-node-margin: .25rem;--ax-comp-tree2-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree2-drag-preview-opacity: .9;--ax-comp-tree2-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree2-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree2-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree2-drop-list{min-height:2rem}.ax-tree2-compact .ax-tree2-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree2-comfortable .ax-tree2-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree2-node{position:relative;margin:var(--ax-comp-tree2-node-margin) 0;border-radius:var(--ax-comp-tree2-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree2-node:hover:not(.ax-dragging){background:var(--ax-comp-tree2-node-hover-bg)}.ax-tree2-node.ax-tree2-node-selected{background:var(--ax-comp-tree2-node-selected-bg);border-color:currentColor}.ax-tree2-node.ax-dragging{opacity:var(--ax-comp-tree2-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree2-node.ax-drag-placeholder{background:var(--ax-comp-tree2-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree2-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree2-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree2-drop-active-bg);border-radius:var(--ax-comp-tree2-node-border-radius);outline:2px dashed var(--ax-comp-tree2-drop-active-outline);outline-offset:-2px}.ax-tree2-node-content{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ax-tree2-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree2-drag-handle:hover{opacity:1}.ax-tree2-drag-handle:active{cursor:grabbing}.ax-tree2-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree2-expand-toggle:not(.ax-tree2-has-children){opacity:0;pointer-events:none}.ax-tree2-toggle-icon{font-size:.75rem}.ax-tree2-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree2-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree2-children{padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree2-node-loading{opacity:.7}.ax-tree2-card .ax-tree2-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree2-card .ax-tree2-node-content{padding:1rem}.ax-tree2-with-lines .ax-tree2-children{position:relative;padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-with-lines .ax-tree2-children:before{content:\"\";position:absolute;left:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines .ax-tree2-node{position:relative}.ax-tree2-with-lines .ax-tree2-node:before{content:\"\";position:absolute;left:calc(-1 * var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2)));top:60%;width:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));height:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines>.ax-tree2-drop-list>.ax-tree2-node:before,.ax-tree2-with-lines>.ax-tree2-node:before{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: AXDragDirective, selector: "[axDrag]", inputs: ["axDrag", "dragData", "dragDisabled", "dragTransition", "dragElementClone", "dropZoneGroup", "dragStartDelay", "dragResetOnDblClick", "dragLockAxis", "dragClonedTemplate", "dragCursor", "dragBoundary", "dragTransitionDuration"], outputs: ["dragPositionChanged"] }, { kind: "directive", type: AXDragHandleDirective, selector: "[axDragHandle]" }, { kind: "directive", type: AXDropListDirective, selector: "[axDropList]", inputs: ["axDropList", "sortingDisabled", "dropListGroup", "dropListOrientation"], outputs: ["dropListDropped"], exportAs: ["axDropList"] }, { kind: "component", type: AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: AXCheckBoxComponent, selector: "ax-check-box", inputs: ["disabled", "tabIndex", "readonly", "color", "value", "name", "id", "isLoading", "indeterminate"], outputs: ["onBlur", "onFocus", "valueChange", "onValueChanged"] }, { kind: "component", type: AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }, { kind: "component", type: AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
648
648
  }
649
649
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AXTree2Component, decorators: [{
650
650
  type: Component,
@@ -666,18 +666,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImpor
666
666
  '[class.ax-tree2-with-line]': "look() === 'with-line'",
667
667
  '[style.--ax-tree-indent-size]': "indentSize() + 'px'",
668
668
  '[style.--ax-tree-line-offset]': "(indentSize() / 2) + 'px'",
669
- }, template: "<!-- Root drop list -->\n<div\n [axDropList]=\"dragMode() !== 'none'\"\n [sortingDisabled]=\"false\"\n [id]=\"getListId()\"\n [attr.data-node-id]=\"null\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDrop($event)\"\n class=\"ax-tree2-drop-list\"\n [class.ax-tree2-card]=\"look() === 'card'\"\n [class.ax-tree2-with-lines]=\"look() === 'with-line'\"\n [class.ax-tree2-compact]=\"nodeHeight() === 'compact'\"\n [class.ax-tree2-comfortable]=\"nodeHeight() === 'comfortable'\"\n>\n @for (node of nodes(); track node.id) {\n @if (node.visible !== false) {\n <div\n [axDrag]=\"dragMode() !== 'none'\"\n [dragDisabled]=\"node.disabled\"\n [dragData]=\"node\"\n class=\"ax-tree2-node\"\n [class.ax-tree2-node-selected]=\"node.selected\"\n [class.ax-tree2-node-disabled]=\"node.disabled\"\n [class.ax-tree2-node-loading]=\"node.loading\"\n >\n <div\n class=\"ax-tree2-node-content\"\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"'ax-tree-node-drop-' + node.id\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n >\n @if (dragMode() === 'handler') {\n <span class=\"ax-tree2-drag-handle\" axDragHandle title=\"Drag to reorder\"> \u22EE\u22EE </span>\n }\n <ax-button\n class=\"ax-tree2-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n [class.ax-tree2-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree2-expanded]=\"node.expanded\"\n [disabled]=\"node.disabled || node.loading\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (node.loading) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i [class]=\"node.expanded ? expandedIcon() : collapsedIcon()\" class=\"ax-tree2-toggle-icon\"></i>\n </ax-icon>\n }\n </ax-button>\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, 0)\"\n ></ng-container>\n } @else {\n @if (showCheckbox()) {\n <ax-check-box\n class=\"ax-tree2-checkbox\"\n [ngModel]=\"node.indeterminate ? null : node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n ></ax-check-box>\n }\n @if (showIcons() && node.icon) {\n <i [class]=\"node.icon\" class=\"ax-tree2-node-icon\"></i>\n }\n <span class=\"ax-tree2-node-label\">{{ node.label }}</span>\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\n <ax-badge\n class=\"ax-tree2-children-badge\"\n [text]=\"(node.childrenCount ?? node.children?.length ?? 0).toString()\"\n ></ax-badge>\n }\n }\n </div>\n </div>\n @if (node.expanded && node.children && node.children.length > 0) {\n <div class=\"ax-tree2-children\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: node.children, parent: node, level: 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n</div>\n\n<!-- Recursive children template -->\n<ng-template #childrenList let-children=\"children\" let-parent=\"parent\" let-level=\"level\">\n <div\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"getListId(parent)\"\n [attr.data-node-id]=\"parent.id\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDrop($event, parent)\"\n class=\"ax-tree2-drop-list\"\n >\n @for (node of children; track node.id) {\n @if (node.visible !== false) {\n <div\n [axDrag]=\"dragMode() !== 'none'\"\n [dragDisabled]=\"node.disabled\"\n [dragData]=\"node\"\n class=\"ax-tree2-node\"\n [class.ax-tree2-node-selected]=\"node.selected\"\n [class.ax-tree2-node-disabled]=\"node.disabled\"\n [class.ax-tree2-node-loading]=\"node.loading\"\n >\n <div\n class=\"ax-tree2-node-content\"\n [style.padding-left.px]=\"(level * indentSize()) / (look() === 'with-line' ? 3 : 1)\"\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"'ax-tree-node-drop-' + node.id\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n >\n @if (dragMode() === 'handler') {\n <span class=\"ax-tree2-drag-handle\" axDragHandle title=\"Drag to reorder\"> \u22EE\u22EE </span>\n }\n <ax-button\n class=\"ax-tree2-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n [class.ax-tree2-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree2-expanded]=\"node.expanded\"\n [disabled]=\"node.disabled || node.loading\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (node.loading) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i [class]=\"node.expanded ? expandedIcon() : collapsedIcon()\" class=\"ax-tree2-toggle-icon\"></i>\n </ax-icon>\n }\n </ax-button>\n\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, level)\"\n ></ng-container>\n } @else {\n @if (showCheckbox()) {\n <ax-check-box\n class=\"ax-tree2-checkbox\"\n [ngModel]=\"node.indeterminate ? null : node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n ></ax-check-box>\n }\n @if (showIcons() && node.icon) {\n <i [class]=\"node.icon\" class=\"ax-tree2-node-icon\"></i>\n }\n <span class=\"ax-tree2-node-label\">{{ node.label }}</span>\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\n <ax-badge\n class=\"ax-tree2-children-badge\"\n [text]=\"(node.childrenCount ?? node.children?.length ?? 0).toString()\"\n ></ax-badge>\n }\n }\n </div>\n </div>\n @if (node.expanded && node.children && node.children.length > 0) {\n <div class=\"ax-tree2-children\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: node.children, parent: node, level: level + 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n </div>\n</ng-template>\n", styles: [".ax-tree2{display:block;width:100%;--ax-comp-tree2-indent-size: 12px;--ax-comp-tree2-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree2-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree2-node-border-radius: 6px;--ax-comp-tree2-node-margin: .125rem;--ax-comp-tree2-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree2-drag-preview-opacity: .9;--ax-comp-tree2-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree2-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree2-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree2-drop-list{min-height:2rem}.ax-tree2-compact .ax-tree2-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree2-comfortable .ax-tree2-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree2-node{position:relative;margin:var(--ax-comp-tree2-node-margin) 0;border-radius:var(--ax-comp-tree2-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree2-node:hover:not(.ax-dragging){background:var(--ax-comp-tree2-node-hover-bg)}.ax-tree2-node.ax-tree2-node-selected{background:var(--ax-comp-tree2-node-selected-bg);border-color:currentColor}.ax-tree2-node.ax-dragging{opacity:var(--ax-comp-tree2-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree2-node.ax-drag-placeholder{background:var(--ax-comp-tree2-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree2-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree2-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree2-drop-active-bg);border-radius:var(--ax-comp-tree2-node-border-radius);outline:2px dashed var(--ax-comp-tree2-drop-active-outline);outline-offset:-2px}.ax-tree2-node-content{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ax-tree2-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree2-drag-handle:hover{opacity:1}.ax-tree2-drag-handle:active{cursor:grabbing}.ax-tree2-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree2-expand-toggle:not(.ax-tree2-has-children){opacity:0;pointer-events:none}.ax-tree2-toggle-icon{font-size:.75rem}.ax-tree2-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree2-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree2-children{padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree2-node-loading{opacity:.7}.ax-tree2-card .ax-tree2-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree2-card .ax-tree2-node-content{padding:1rem}.ax-tree2-with-lines .ax-tree2-children{position:relative;padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-with-lines .ax-tree2-children:before{content:\"\";position:absolute;left:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines .ax-tree2-node{position:relative}.ax-tree2-with-lines .ax-tree2-node:before{content:\"\";position:absolute;left:calc(-1 * var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2)));top:60%;width:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));height:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines>.ax-tree2-drop-list>.ax-tree2-node:before,.ax-tree2-with-lines>.ax-tree2-node:before{display:none}\n"] }]
669
+ }, template: "<!-- Root drop list -->\n<div\n [axDropList]=\"dragMode() !== 'none'\"\n [sortingDisabled]=\"false\"\n [id]=\"getListId()\"\n [attr.data-node-id]=\"null\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDrop($event)\"\n class=\"ax-tree2-drop-list\"\n [class.ax-tree2-card]=\"look() === 'card'\"\n [class.ax-tree2-with-lines]=\"look() === 'with-line'\"\n [class.ax-tree2-compact]=\"nodeHeight() === 'compact'\"\n [class.ax-tree2-comfortable]=\"nodeHeight() === 'comfortable'\"\n>\n @for (node of nodes(); track node.id) {\n @if (node.visible !== false) {\n <div\n [axDrag]=\"dragMode() !== 'none'\"\n [dragDisabled]=\"node.disabled\"\n [dragData]=\"node\"\n class=\"ax-tree2-node\"\n [class.ax-tree2-node-selected]=\"node.selected\"\n [class.ax-tree2-node-disabled]=\"node.disabled\"\n [class.ax-tree2-node-loading]=\"node.loading\"\n >\n <div\n class=\"ax-tree2-node-content\"\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"'ax-tree-node-drop-' + node.id\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n >\n @if (dragMode() === 'handler') {\n <span class=\"ax-tree2-drag-handle\" axDragHandle title=\"Drag to reorder\"> \u22EE\u22EE </span>\n }\n <ax-button\n class=\"ax-tree2-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n [class.ax-tree2-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree2-expanded]=\"node.expanded\"\n [disabled]=\"node.disabled || node.loading\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (node.loading) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i [class]=\"node.expanded ? expandedIcon() : collapsedIcon()\" class=\"ax-tree2-toggle-icon\"></i>\n </ax-icon>\n }\n </ax-button>\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, 0)\"\n ></ng-container>\n } @else {\n @if (showCheckbox()) {\n <ax-check-box\n class=\"ax-tree2-checkbox\"\n [ngModel]=\"node.indeterminate ? null : node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n ></ax-check-box>\n }\n @if (showIcons() && node.icon) {\n <i [class]=\"node.icon\" class=\"ax-tree2-node-icon\"></i>\n }\n <span class=\"ax-tree2-node-label\">{{ node.label }}</span>\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\n <ax-badge\n class=\"ax-tree2-children-badge\"\n [text]=\"(node.childrenCount ?? node.children?.length ?? 0).toString()\"\n ></ax-badge>\n }\n }\n </div>\n </div>\n @if (node.expanded && node.children && node.children.length > 0) {\n <div class=\"ax-tree2-children\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: node.children, parent: node, level: 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n</div>\n\n<!-- Recursive children template -->\n<ng-template #childrenList let-children=\"children\" let-parent=\"parent\" let-level=\"level\">\n <div\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"getListId(parent)\"\n [attr.data-node-id]=\"parent.id\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDrop($event, parent)\"\n class=\"ax-tree2-drop-list\"\n >\n @for (node of children; track node.id) {\n @if (node.visible !== false) {\n <div\n [axDrag]=\"dragMode() !== 'none'\"\n [dragDisabled]=\"node.disabled\"\n [dragData]=\"node\"\n class=\"ax-tree2-node\"\n [class.ax-tree2-node-selected]=\"node.selected\"\n [class.ax-tree2-node-disabled]=\"node.disabled\"\n [class.ax-tree2-node-loading]=\"node.loading\"\n >\n <div\n class=\"ax-tree2-node-content\"\n [style.padding-left.px]=\"(level * indentSize()) / (look() === 'with-line' ? 3 : 1)\"\n [axDropList]=\"dragMode() !== 'none'\"\n [id]=\"'ax-tree-node-drop-' + node.id\"\n [attr.data-node-id]=\"node.id\"\n [attr.data-drop-type]=\"'onto-node'\"\n dropListGroup=\"ax-tree-nodes\"\n (dropListDropped)=\"onDropOntoNode($event, node)\"\n >\n @if (dragMode() === 'handler') {\n <span class=\"ax-tree2-drag-handle\" axDragHandle title=\"Drag to reorder\"> \u22EE\u22EE </span>\n }\n <ax-button\n class=\"ax-tree2-expand-toggle ax-sm\"\n (onClick)=\"toggleNode(node, $any($event))\"\n [class.ax-tree2-has-children]=\"shouldShowExpandToggle(node)\"\n [class.ax-tree2-expanded]=\"node.expanded\"\n [disabled]=\"node.disabled || node.loading\"\n [style.visibility]=\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\"\n >\n @if (node.loading) {\n <ax-icon>\n <i class=\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\"></i>\n </ax-icon>\n } @else {\n <ax-icon>\n <i [class]=\"node.expanded ? expandedIcon() : collapsedIcon()\" class=\"ax-tree2-toggle-icon\"></i>\n </ax-icon>\n }\n </ax-button>\n\n @if (itemTemplate()) {\n <ng-container\n [ngTemplateOutlet]=\"itemTemplate()!\"\n [ngTemplateOutletContext]=\"getTemplateContext(node, level)\"\n ></ng-container>\n } @else {\n @if (showCheckbox()) {\n <ax-check-box\n class=\"ax-tree2-checkbox\"\n [ngModel]=\"node.indeterminate ? null : node.selected || false\"\n [indeterminate]=\"node.indeterminate || false\"\n (onValueChanged)=\"toggleSelection(node, $event)\"\n (click)=\"$event.stopPropagation()\"\n (pointerdown)=\"$event.stopPropagation()\"\n ></ax-check-box>\n }\n @if (showIcons() && node.icon) {\n <i [class]=\"node.icon\" class=\"ax-tree2-node-icon\"></i>\n }\n <span class=\"ax-tree2-node-label\">{{ node.label }}</span>\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\n <ax-badge\n class=\"ax-tree2-children-badge\"\n [text]=\"(node.childrenCount ?? node.children?.length ?? 0).toString()\"\n ></ax-badge>\n }\n }\n </div>\n </div>\n @if (node.expanded && node.children && node.children.length > 0) {\n <div class=\"ax-tree2-children\">\n <ng-container\n [ngTemplateOutlet]=\"childrenList\"\n [ngTemplateOutletContext]=\"{ children: node.children, parent: node, level: level + 1 }\"\n ></ng-container>\n </div>\n }\n }\n }\n </div>\n</ng-template>\n", styles: [".ax-tree2{display:block;width:100%;--ax-comp-tree2-indent-size: 12px;--ax-comp-tree2-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree2-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree2-node-border-radius: 6px;--ax-comp-tree2-node-margin: .25rem;--ax-comp-tree2-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree2-drag-preview-opacity: .9;--ax-comp-tree2-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree2-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree2-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree2-drop-list{min-height:2rem}.ax-tree2-compact .ax-tree2-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree2-comfortable .ax-tree2-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree2-node{position:relative;margin:var(--ax-comp-tree2-node-margin) 0;border-radius:var(--ax-comp-tree2-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree2-node:hover:not(.ax-dragging){background:var(--ax-comp-tree2-node-hover-bg)}.ax-tree2-node.ax-tree2-node-selected{background:var(--ax-comp-tree2-node-selected-bg);border-color:currentColor}.ax-tree2-node.ax-dragging{opacity:var(--ax-comp-tree2-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree2-node.ax-drag-placeholder{background:var(--ax-comp-tree2-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree2-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree2-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree2-drop-active-bg);border-radius:var(--ax-comp-tree2-node-border-radius);outline:2px dashed var(--ax-comp-tree2-drop-active-outline);outline-offset:-2px}.ax-tree2-node-content{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ax-tree2-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree2-drag-handle:hover{opacity:1}.ax-tree2-drag-handle:active{cursor:grabbing}.ax-tree2-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree2-expand-toggle:not(.ax-tree2-has-children){opacity:0;pointer-events:none}.ax-tree2-toggle-icon{font-size:.75rem}.ax-tree2-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree2-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree2-children{padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree2-node-loading{opacity:.7}.ax-tree2-card .ax-tree2-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree2-card .ax-tree2-node-content{padding:1rem}.ax-tree2-with-lines .ax-tree2-children{position:relative;padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-with-lines .ax-tree2-children:before{content:\"\";position:absolute;left:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines .ax-tree2-node{position:relative}.ax-tree2-with-lines .ax-tree2-node:before{content:\"\";position:absolute;left:calc(-1 * var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2)));top:60%;width:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));height:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines>.ax-tree2-drop-list>.ax-tree2-node:before,.ax-tree2-with-lines>.ax-tree2-node:before{display:none}\n"] }]
670
670
  }], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: true }] }, { type: i0.Output, args: ["nodesChange"] }], showCheckbox: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCheckbox", required: false }] }], dragMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragMode", required: false }] }], dragOperationType: [{ type: i0.Input, args: [{ isSignal: true, alias: "dragOperationType", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcons", required: false }] }], showChildrenBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: "showChildrenBadge", required: false }] }], expandedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandedIcon", required: false }] }], collapsedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedIcon", required: false }] }], indentSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "indentSize", required: false }] }], nodeHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodeHeight", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: "look", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemTemplate", required: false }] }], lazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: "lazyLoad", required: false }] }], enableLazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableLazyLoad", required: false }] }], onBeforeDrop: [{ type: i0.Output, args: ["onBeforeDrop"] }], onNodeToggle: [{ type: i0.Output, args: ["onNodeToggle"] }], onNodeSelect: [{ type: i0.Output, args: ["onNodeSelect"] }], onOrderChange: [{ type: i0.Output, args: ["onOrderChange"] }], onMoveChange: [{ type: i0.Output, args: ["onMoveChange"] }], onItemsChange: [{ type: i0.Output, args: ["onItemsChange"] }] } });
671
671
 
672
672
  class Tree2Module {
673
673
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: Tree2Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
674
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.6", ngImport: i0, type: Tree2Module, imports: [CommonModule] }); }
675
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: Tree2Module, imports: [CommonModule] }); }
674
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.6", ngImport: i0, type: Tree2Module, imports: [AXTree2Component] }); }
675
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: Tree2Module, imports: [AXTree2Component] }); }
676
676
  }
677
677
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: Tree2Module, decorators: [{
678
678
  type: NgModule,
679
679
  args: [{
680
- imports: [CommonModule],
680
+ imports: [AXTree2Component],
681
681
  }]
682
682
  }] });
683
683
 
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-components-tree2.mjs","sources":["../tmp-esm2022/tree2/lib/tree2.component.js","../tmp-esm2022/tree2/lib/tree2.module.js","../tmp-esm2022/tree2/acorex-components-tree2.js"],"sourcesContent":["import { AXDragDirective, AXDragHandleDirective, AXDropListDirective, moveItemInArray, transferArrayItem, } from '@acorex/cdk/drag-drop';\nimport { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCheckBoxComponent } from '@acorex/components/check-box';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, effect, input, model, output, signal, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nexport class AXTree2Component {\n constructor() {\n // Constants for list ID generation\n this.ROOT_LIST_ID = 'ax-tree-root-list';\n this.NODE_DROP_PREFIX = 'ax-tree-node-drop-';\n this.LIST_PREFIX = 'ax-tree-list-';\n /** Tree data nodes */\n this.nodes = model.required(...(ngDevMode ? [{ debugName: \"nodes\" }] : []));\n /** Whether to show checkboxes for selection */\n this.showCheckbox = input(true, ...(ngDevMode ? [{ debugName: \"showCheckbox\" }] : []));\n /** Drag and drop mode: 'none' (disabled), 'handler' (drag handle), 'item' (entire item) */\n this.dragMode = input('handler', ...(ngDevMode ? [{ debugName: \"dragMode\" }] : []));\n /** Drag operation type: 'order-only' (reorder only), 'move' (move between parents), 'both' (allow both) */\n this.dragOperationType = input('both', ...(ngDevMode ? [{ debugName: \"dragOperationType\" }] : []));\n /** Whether to show icons */\n this.showIcons = input(true, ...(ngDevMode ? [{ debugName: \"showIcons\" }] : []));\n /** Whether to show children count badge */\n this.showChildrenBadge = input(true, ...(ngDevMode ? [{ debugName: \"showChildrenBadge\" }] : []));\n /** Custom icon for expanded nodes */\n this.expandedIcon = input('fa-solid fa-chevron-down', ...(ngDevMode ? [{ debugName: \"expandedIcon\" }] : []));\n /** Custom icon for collapsed nodes */\n this.collapsedIcon = input('fa-solid fa-chevron-right', ...(ngDevMode ? [{ debugName: \"collapsedIcon\" }] : []));\n /** Indent size in pixels for each level */\n this.indentSize = input(12, ...(ngDevMode ? [{ debugName: \"indentSize\" }] : []));\n /** Node height in pixels */\n this.nodeHeight = input('normal', ...(ngDevMode ? [{ debugName: \"nodeHeight\" }] : []));\n /** Visual style variant */\n this.look = input('default', ...(ngDevMode ? [{ debugName: \"look\" }] : []));\n /** Custom template for tree items */\n this.itemTemplate = input(...(ngDevMode ? [undefined, { debugName: \"itemTemplate\" }] : []));\n /** Lazy load function for fetching children */\n this.lazyLoad = input(...(ngDevMode ? [undefined, { debugName: \"lazyLoad\" }] : []));\n /** Whether to enable lazy loading */\n this.enableLazyLoad = input(false, ...(ngDevMode ? [{ debugName: \"enableLazyLoad\" }] : []));\n /** Emitted before a drop operation - set canceled to true to prevent drop */\n this.onBeforeDrop = output();\n /** Emitted when a node is toggled (expanded/collapsed) */\n this.onNodeToggle = output();\n /** Emitted when a node is selected/deselected */\n this.onNodeSelect = output();\n /** Emitted when nodes are reordered within the same parent */\n this.onOrderChange = output();\n /** Emitted when a node is moved to a different parent */\n this.onMoveChange = output();\n /** Emitted for any item change (order or move) */\n this.onItemsChange = output();\n /** Internal signal for tracking loading state */\n this.loadingNodes = signal(new Set(), ...(ngDevMode ? [{ debugName: \"loadingNodes\" }] : []));\n /** Effect to handle lazy load function changes */\n this.#lazyLoadEffect = effect(() => {\n const lazyLoadFn = this.lazyLoad();\n const enabled = this.enableLazyLoad();\n if (lazyLoadFn && enabled) {\n // Initialize lazy loading state\n this.updateHasChildrenFlags(this.nodes());\n }\n }, ...(ngDevMode ? [{ debugName: \"#lazyLoadEffect\" }] : []));\n }\n /** Effect to handle lazy load function changes */\n #lazyLoadEffect;\n /**\n * Toggle node expansion state with lazy loading support\n */\n async toggleNode(node, event) {\n if (node.disabled)\n return;\n const hasChildren = this.hasChildren(node);\n const canLazyLoad = this.canLazyLoad(node);\n if (hasChildren || canLazyLoad) {\n const willExpand = !node.expanded;\n if (willExpand && canLazyLoad) {\n // Lazy load children before expanding\n await this.loadNodeChildren(node);\n }\n node.expanded = willExpand;\n this.nodes.set([...this.nodes()]);\n this.onNodeToggle.emit({ component: this, node, nativeEvent: event });\n }\n }\n /**\n * Load children for a node using lazy loading\n */\n async loadNodeChildren(node) {\n const lazyLoadFn = this.lazyLoad();\n if (!lazyLoadFn || node.loading)\n return;\n try {\n node.loading = true;\n this.loadingNodes.update((set) => new Set(set).add(node.id));\n this.nodes.set([...this.nodes()]);\n const children = await lazyLoadFn(node);\n node.children = children;\n node.childrenCount = children.length;\n }\n catch (error) {\n console.error('Failed to load children:', error);\n node.childrenCount = 0;\n }\n finally {\n node.loading = false;\n this.loadingNodes.update((set) => {\n const newSet = new Set(set);\n newSet.delete(node.id);\n return newSet;\n });\n this.nodes.set([...this.nodes()]);\n }\n }\n /**\n * Update childrenCount flags for lazy loading\n */\n updateHasChildrenFlags(nodes) {\n nodes.forEach((node) => {\n if (node.childrenCount === undefined && !node.children) {\n node.childrenCount = 0;\n }\n if (node.children) {\n this.updateHasChildrenFlags(node.children);\n }\n });\n }\n /**\n * Toggle node selection state with indeterminate support\n */\n toggleSelection(node, event) {\n // CRITICAL: Only process if this is a real user interaction\n // Prevents cascade when parent state changes trigger checkbox ngModelChange\n if (!event.isUserInteraction) {\n return;\n }\n // Handle null value (indeterminate state clicked) - treat as select\n const newValue = event.value === null ? true : event.value;\n node.selected = newValue;\n node.indeterminate = false; // Clear indeterminate when explicitly toggled\n // Select/deselect all children recursively\n if (node.children) {\n this.selectAllChildren(node.children, newValue);\n }\n // Update parent states up the tree\n this.updateParentStates(this.nodes(), node);\n this.nodes.set([...this.nodes()]);\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: event.isUserInteraction,\n });\n }\n /**\n * Recursively select/deselect all children\n */\n selectAllChildren(children, selected) {\n children.forEach((child) => {\n child.selected = selected;\n child.indeterminate = false;\n if (child.children) {\n this.selectAllChildren(child.children, selected);\n }\n });\n }\n /**\n * Update parent node states based on children selection\n */\n updateParentStates(nodes, changedNode) {\n const parent = this.findParentNode(nodes, changedNode);\n if (!parent || !parent.children)\n return;\n const { allSelected, someSelected } = this.getChildrenSelectionState(parent.children);\n if (allSelected) {\n // All children selected → parent is selected\n parent.selected = true;\n parent.indeterminate = false;\n }\n else if (someSelected) {\n // Some children selected → parent is indeterminate\n // Keep selected=true to maintain consistent state and prevent issues with deleteSelected()\n parent.selected = true;\n parent.indeterminate = true;\n }\n else {\n // No children selected → parent is unselected\n parent.selected = false;\n parent.indeterminate = false;\n }\n // Recursively update grandparents\n this.updateParentStates(nodes, parent);\n }\n /**\n * Get selection state of children\n */\n getChildrenSelectionState(children) {\n let selectedCount = 0;\n let indeterminateCount = 0;\n children.forEach((child) => {\n // Only count fully selected children (not indeterminate)\n if (child.selected && !child.indeterminate)\n selectedCount++;\n if (child.indeterminate)\n indeterminateCount++;\n });\n const allSelected = selectedCount === children.length;\n const someSelected = selectedCount > 0 || indeterminateCount > 0;\n return { allSelected, someSelected };\n }\n /**\n * Find parent node of a given node\n */\n findParentNode(nodes, targetNode) {\n for (const node of nodes) {\n if (node.children?.some((child) => child.id === targetNode.id)) {\n return node;\n }\n if (node.children) {\n const found = this.findParentNode(node.children, targetNode);\n if (found)\n return found;\n }\n }\n return undefined;\n }\n /**\n * Handle drop events for tree nodes\n */\n onDrop(event, parentNode) {\n const targetArray = parentNode?.children ?? this.nodes();\n const isReordering = event.previousContainer === event.container;\n if (isReordering) {\n this.handleReorder(event, targetArray, parentNode);\n }\n else {\n this.handleMove(event, targetArray, parentNode);\n }\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Handle drop events when dropping directly onto a node (to make it a child)\n */\n onDropOntoNode(event, targetNode) {\n if (!this.canMoveToParent())\n return;\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray)\n return;\n const movedNode = sourceArray[event.previousIndex];\n if (!this.isValidDropTarget(movedNode, targetNode))\n return;\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, targetNode, event.previousIndex, 0))\n return;\n // Initialize children array and perform transfer\n targetNode.children ??= [];\n sourceArray.splice(event.previousIndex, 1);\n targetNode.children.unshift(movedNode);\n targetNode.expanded = true;\n // Emit events\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), targetNode, event.previousIndex, 0, false);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Get array reference by drop list ID\n */\n getArrayByListId(listId) {\n if (listId === this.ROOT_LIST_ID) {\n return this.nodes();\n }\n if (listId.startsWith(this.NODE_DROP_PREFIX)) {\n const nodeId = listId.replace(this.NODE_DROP_PREFIX, '');\n const node = this.findNodeById(this.nodes(), nodeId);\n return node ? [node] : null;\n }\n const nodeId = listId.replace(this.LIST_PREFIX, '');\n const node = this.findNodeById(this.nodes(), nodeId);\n return node?.children ?? null;\n }\n /**\n * Find parent node by list ID\n */\n findParentByListId(listId) {\n if (listId === this.ROOT_LIST_ID) {\n return undefined;\n }\n const prefix = listId.startsWith(this.NODE_DROP_PREFIX) ? this.NODE_DROP_PREFIX : this.LIST_PREFIX;\n const nodeId = listId.replace(prefix, '');\n return this.findNodeById(this.nodes(), nodeId) ?? undefined;\n }\n /**\n * Find a node by ID in the tree\n */\n findNodeById(nodes, id) {\n for (const node of nodes) {\n if (node.id === id)\n return node;\n if (node.children) {\n const found = this.findNodeById(node.children, id);\n if (found)\n return found;\n }\n }\n return null;\n }\n /**\n * Check if targetNode is a descendant of ancestorNode (or the same node)\n * Prevents circular references by checking if target exists in ancestor's children tree\n */\n isNodeDescendantOf(targetNode, ancestorNode) {\n // First check: prevent dropping a node into itself\n if (targetNode.id === ancestorNode.id) {\n return true;\n }\n if (!ancestorNode.children || ancestorNode.children.length === 0) {\n return false;\n }\n for (const child of ancestorNode.children) {\n // Direct child match\n if (child.id === targetNode.id) {\n return true;\n }\n // Recursive check in deeper levels\n if (this.isNodeDescendantOf(targetNode, child)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Generate unique list ID for each node\n */\n getListId(node) {\n return node ? `${this.LIST_PREFIX}${node.id}` : this.ROOT_LIST_ID;\n }\n /**\n * Expand all nodes in the tree (with lazy loading support)\n */\n async expandAll() {\n await this.setExpandedState(this.nodes(), true);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Collapse all nodes in the tree\n */\n collapseAll() {\n this.setExpandedState(this.nodes(), false);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Recursively set expanded state (with lazy loading)\n */\n async setExpandedState(nodes, expanded) {\n for (const node of nodes) {\n const hasChildren = this.hasChildren(node);\n const canLazyLoad = this.canLazyLoad(node);\n if (hasChildren || canLazyLoad) {\n if (expanded && canLazyLoad) {\n await this.loadNodeChildren(node);\n }\n node.expanded = expanded;\n if (node.children) {\n await this.setExpandedState(node.children, expanded);\n }\n }\n }\n }\n /**\n * Get count of selected nodes\n */\n getSelectedCount() {\n return this.countSelected(this.nodes());\n }\n /**\n * Check if any nodes are selected\n */\n hasSelection() {\n return this.getSelectedCount() > 0;\n }\n /**\n * Recursively count selected nodes\n */\n countSelected(nodes) {\n let count = 0;\n nodes.forEach((node) => {\n if (node.selected)\n count++;\n if (node.children) {\n count += this.countSelected(node.children);\n }\n });\n return count;\n }\n /**\n * Get all selected nodes\n */\n getSelectedNodes() {\n const selected = [];\n this.collectSelected(this.nodes(), selected);\n return selected;\n }\n /**\n * Recursively collect selected nodes\n */\n collectSelected(nodes, result) {\n nodes.forEach((node) => {\n if (node.selected)\n result.push(node);\n if (node.children) {\n this.collectSelected(node.children, result);\n }\n });\n }\n /**\n * Delete selected nodes from the tree\n */\n deleteSelected() {\n this.removeSelected(this.nodes());\n // Update all parent states after deletion to clear stale indeterminate states\n this.updateAllParentStates(this.nodes());\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Select all nodes in the tree\n */\n selectAll() {\n this.setAllSelection(this.nodes(), true);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Deselect all nodes in the tree\n */\n deselectAll() {\n this.setAllSelection(this.nodes(), false);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Find a node by ID in the tree\n */\n findNode(id) {\n return this.findNodeById(this.nodes(), id);\n }\n /**\n * Refresh the tree to trigger change detection\n */\n refresh() {\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Recursively set selection state for all nodes\n */\n setAllSelection(nodes, selected) {\n nodes.forEach((node) => {\n node.selected = selected;\n node.indeterminate = false;\n if (node.children) {\n this.setAllSelection(node.children, selected);\n }\n });\n }\n /**\n * Recursively remove selected nodes\n */\n removeSelected(nodes) {\n for (let i = nodes.length - 1; i >= 0; i--) {\n // Only delete nodes that are fully selected (not indeterminate)\n // Indeterminate parents should not be deleted\n if (nodes[i].selected && !nodes[i].indeterminate) {\n nodes.splice(i, 1);\n }\n else if (nodes[i].children) {\n this.removeSelected(nodes[i].children ?? []);\n }\n }\n }\n /**\n * Recursively update all parent states in the tree (used after deletion)\n */\n updateAllParentStates(nodes) {\n nodes.forEach((node) => {\n if (node.children && node.children.length > 0) {\n // First, recursively update nested children (bottom-up)\n this.updateAllParentStates(node.children);\n // Then update this node's state based on its children\n const { allSelected, someSelected } = this.getChildrenSelectionState(node.children);\n if (allSelected) {\n node.selected = true;\n node.indeterminate = false;\n }\n else if (someSelected) {\n node.selected = true;\n node.indeterminate = true;\n }\n else {\n node.selected = false;\n node.indeterminate = false;\n }\n }\n });\n }\n /**\n * Check if a node is currently loading\n */\n isNodeLoading(nodeId) {\n return this.loadingNodes().has(nodeId);\n }\n /**\n * Get template context for a node\n */\n getTemplateContext(node, level = 0) {\n return {\n $implicit: node,\n node,\n level,\n expanded: node.expanded ?? false,\n childrenCount: node.childrenCount ?? node.children?.length ?? 0,\n loading: node.loading ?? false,\n };\n }\n /**\n * Check if node should show expand toggle\n */\n shouldShowExpandToggle(node) {\n return this.hasChildren(node) || this.canLazyLoad(node);\n }\n // Helper methods for improved code reusability\n /**\n * Check if node has children\n */\n hasChildren(node) {\n return Boolean(node.children?.length);\n }\n /**\n * Check if node can be lazy loaded\n */\n canLazyLoad(node) {\n return this.enableLazyLoad() && Boolean(node.childrenCount && node.childrenCount > 0 && !this.hasChildren(node));\n }\n /**\n * Check if move operation is allowed based on dragOperationType\n */\n canMoveToParent() {\n if (this.dragOperationType() === 'order-only') {\n console.warn('Moving between parents is disabled when dragOperationType is \"order-only\"');\n return false;\n }\n return true;\n }\n /**\n * Check if reorder operation is allowed based on dragOperationType\n */\n canReorder() {\n if (this.dragOperationType() === 'move') {\n console.warn('Reordering is disabled when dragOperationType is \"move\"');\n return false;\n }\n return true;\n }\n /**\n * Validate if drop target is valid (prevent circular references)\n */\n isValidDropTarget(movedNode, targetNode) {\n if (movedNode.id === targetNode.id || this.isNodeDescendantOf(targetNode, movedNode)) {\n console.warn('Cannot drop a node onto itself or its descendants');\n return false;\n }\n return true;\n }\n /**\n * Handle reordering within the same list\n */\n handleReorder(event, targetArray, parentNode) {\n if (!this.canReorder())\n return;\n const movedNode = targetArray[event.previousIndex];\n moveItemInArray(targetArray, event.previousIndex, event.currentIndex);\n this.emitDropEvents(movedNode, parentNode, parentNode, event.previousIndex, event.currentIndex, true);\n }\n /**\n * Handle moving between different lists\n */\n handleMove(event, targetArray, parentNode) {\n if (!this.canMoveToParent())\n return;\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray)\n return;\n const movedNode = sourceArray[event.previousIndex];\n // Prevent circular references\n if (parentNode && !this.isValidDropTarget(movedNode, parentNode))\n return;\n // Check if user wants to cancel\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, parentNode, event.previousIndex, event.currentIndex)) {\n return;\n }\n transferArrayItem(sourceArray, targetArray, event.previousIndex, event.currentIndex);\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), parentNode, event.previousIndex, event.currentIndex, false);\n }\n /**\n * Emit beforeDrop event and return whether to continue\n */\n emitBeforeDropEvent(movedNode, sourceListId, currentParent, previousIndex, currentIndex) {\n const beforeDropEvent = {\n component: this,\n movedNode,\n previousParent: this.findParentByListId(sourceListId),\n currentParent,\n previousIndex,\n currentIndex,\n canceled: false,\n };\n this.onBeforeDrop.emit(beforeDropEvent);\n if (beforeDropEvent.canceled) {\n console.warn('Drop canceled by user in onBeforeDrop event');\n return false;\n }\n return true;\n }\n /**\n * Emit drop events based on operation type\n */\n emitDropEvents(node, previousParent, currentParent, previousIndex, currentIndex, isReorder) {\n const dropEvent = {\n component: this,\n node,\n previousParent,\n currentParent,\n previousIndex,\n currentIndex,\n };\n if (isReorder) {\n this.onOrderChange.emit(dropEvent);\n }\n else {\n this.onMoveChange.emit(dropEvent);\n }\n this.onItemsChange.emit(dropEvent);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: AXTree2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.6\", type: AXTree2Component, isStandalone: true, selector: \"ax-tree2\", inputs: { nodes: { classPropertyName: \"nodes\", publicName: \"nodes\", isSignal: true, isRequired: true, transformFunction: null }, showCheckbox: { classPropertyName: \"showCheckbox\", publicName: \"showCheckbox\", isSignal: true, isRequired: false, transformFunction: null }, dragMode: { classPropertyName: \"dragMode\", publicName: \"dragMode\", isSignal: true, isRequired: false, transformFunction: null }, dragOperationType: { classPropertyName: \"dragOperationType\", publicName: \"dragOperationType\", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: \"showIcons\", publicName: \"showIcons\", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: \"showChildrenBadge\", publicName: \"showChildrenBadge\", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: \"expandedIcon\", publicName: \"expandedIcon\", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: \"collapsedIcon\", publicName: \"collapsedIcon\", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: \"indentSize\", publicName: \"indentSize\", isSignal: true, isRequired: false, transformFunction: null }, nodeHeight: { classPropertyName: \"nodeHeight\", publicName: \"nodeHeight\", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: \"itemTemplate\", publicName: \"itemTemplate\", isSignal: true, isRequired: false, transformFunction: null }, lazyLoad: { classPropertyName: \"lazyLoad\", publicName: \"lazyLoad\", isSignal: true, isRequired: false, transformFunction: null }, enableLazyLoad: { classPropertyName: \"enableLazyLoad\", publicName: \"enableLazyLoad\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodes: \"nodesChange\", onBeforeDrop: \"onBeforeDrop\", onNodeToggle: \"onNodeToggle\", onNodeSelect: \"onNodeSelect\", onOrderChange: \"onOrderChange\", onMoveChange: \"onMoveChange\", onItemsChange: \"onItemsChange\" }, host: { properties: { \"class.ax-tree2-default\": \"look() === 'default'\", \"class.ax-tree2-card\": \"look() === 'card'\", \"class.ax-tree2-with-line\": \"look() === 'with-line'\", \"style.--ax-tree-indent-size\": \"indentSize() + 'px'\", \"style.--ax-tree-line-offset\": \"(indentSize() / 2) + 'px'\" }, classAttribute: \"ax-tree2\" }, ngImport: i0, template: \"<!-- Root drop list -->\\n<div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [sortingDisabled]=\\\"false\\\"\\n [id]=\\\"getListId()\\\"\\n [attr.data-node-id]=\\\"null\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event)\\\"\\n class=\\\"ax-tree2-drop-list\\\"\\n [class.ax-tree2-card]=\\\"look() === 'card'\\\"\\n [class.ax-tree2-with-lines]=\\\"look() === 'with-line'\\\"\\n [class.ax-tree2-compact]=\\\"nodeHeight() === 'compact'\\\"\\n [class.ax-tree2-comfortable]=\\\"nodeHeight() === 'comfortable'\\\"\\n>\\n @for (node of nodes(); track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree2-node\\\"\\n [class.ax-tree2-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree2-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree2-node-loading]=\\\"node.loading\\\"\\n >\\n <div\\n class=\\\"ax-tree2-node-content\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree2-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree2-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree2-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree2-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i [class]=\\\"node.expanded ? expandedIcon() : collapsedIcon()\\\" class=\\\"ax-tree2-toggle-icon\\\"></i>\\n </ax-icon>\\n }\\n </ax-button>\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, 0)\\\"\\n ></ng-container>\\n } @else {\\n @if (showCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree2-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n (pointerdown)=\\\"$event.stopPropagation()\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree2-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree2-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree2-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree2-children\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n</div>\\n\\n<!-- Recursive children template -->\\n<ng-template #childrenList let-children=\\\"children\\\" let-parent=\\\"parent\\\" let-level=\\\"level\\\">\\n <div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"getListId(parent)\\\"\\n [attr.data-node-id]=\\\"parent.id\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event, parent)\\\"\\n class=\\\"ax-tree2-drop-list\\\"\\n >\\n @for (node of children; track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree2-node\\\"\\n [class.ax-tree2-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree2-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree2-node-loading]=\\\"node.loading\\\"\\n >\\n <div\\n class=\\\"ax-tree2-node-content\\\"\\n [style.padding-left.px]=\\\"(level * indentSize()) / (look() === 'with-line' ? 3 : 1)\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree2-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree2-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree2-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree2-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i [class]=\\\"node.expanded ? expandedIcon() : collapsedIcon()\\\" class=\\\"ax-tree2-toggle-icon\\\"></i>\\n </ax-icon>\\n }\\n </ax-button>\\n\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, level)\\\"\\n ></ng-container>\\n } @else {\\n @if (showCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree2-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n (pointerdown)=\\\"$event.stopPropagation()\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree2-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree2-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree2-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree2-children\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: level + 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".ax-tree2{display:block;width:100%;--ax-comp-tree2-indent-size: 12px;--ax-comp-tree2-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree2-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree2-node-border-radius: 6px;--ax-comp-tree2-node-margin: .125rem;--ax-comp-tree2-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree2-drag-preview-opacity: .9;--ax-comp-tree2-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree2-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree2-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree2-drop-list{min-height:2rem}.ax-tree2-compact .ax-tree2-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree2-comfortable .ax-tree2-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree2-node{position:relative;margin:var(--ax-comp-tree2-node-margin) 0;border-radius:var(--ax-comp-tree2-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree2-node:hover:not(.ax-dragging){background:var(--ax-comp-tree2-node-hover-bg)}.ax-tree2-node.ax-tree2-node-selected{background:var(--ax-comp-tree2-node-selected-bg);border-color:currentColor}.ax-tree2-node.ax-dragging{opacity:var(--ax-comp-tree2-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree2-node.ax-drag-placeholder{background:var(--ax-comp-tree2-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree2-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree2-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree2-drop-active-bg);border-radius:var(--ax-comp-tree2-node-border-radius);outline:2px dashed var(--ax-comp-tree2-drop-active-outline);outline-offset:-2px}.ax-tree2-node-content{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ax-tree2-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree2-drag-handle:hover{opacity:1}.ax-tree2-drag-handle:active{cursor:grabbing}.ax-tree2-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree2-expand-toggle:not(.ax-tree2-has-children){opacity:0;pointer-events:none}.ax-tree2-toggle-icon{font-size:.75rem}.ax-tree2-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree2-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree2-children{padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree2-node-loading{opacity:.7}.ax-tree2-card .ax-tree2-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree2-card .ax-tree2-node-content{padding:1rem}.ax-tree2-with-lines .ax-tree2-children{position:relative;padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-with-lines .ax-tree2-children:before{content:\\\"\\\";position:absolute;left:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines .ax-tree2-node{position:relative}.ax-tree2-with-lines .ax-tree2-node:before{content:\\\"\\\";position:absolute;left:calc(-1 * var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2)));top:60%;width:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));height:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines>.ax-tree2-drop-list>.ax-tree2-node:before,.ax-tree2-with-lines>.ax-tree2-node:before{display:none}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"axDrag\", \"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDragHandleDirective, selector: \"[axDragHandle]\" }, { kind: \"directive\", type: AXDropListDirective, selector: \"[axDropList]\", inputs: [\"axDropList\", \"sortingDisabled\", \"dropListGroup\", \"dropListOrientation\"], outputs: [\"dropListDropped\"], exportAs: [\"axDropList\"] }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: AXCheckBoxComponent, selector: \"ax-check-box\", inputs: [\"disabled\", \"tabIndex\", \"readonly\", \"color\", \"value\", \"name\", \"id\", \"isLoading\", \"indeterminate\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"onValueChanged\"] }, { kind: \"component\", type: AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: AXTree2Component, decorators: [{\n type: Component,\n args: [{ selector: 'ax-tree2', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n CommonModule,\n FormsModule,\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n NgTemplateOutlet,\n AXButtonComponent,\n AXCheckBoxComponent,\n AXBadgeComponent,\n AXDecoratorIconComponent,\n ], host: {\n class: 'ax-tree2',\n '[class.ax-tree2-default]': \"look() === 'default'\",\n '[class.ax-tree2-card]': \"look() === 'card'\",\n '[class.ax-tree2-with-line]': \"look() === 'with-line'\",\n '[style.--ax-tree-indent-size]': \"indentSize() + 'px'\",\n '[style.--ax-tree-line-offset]': \"(indentSize() / 2) + 'px'\",\n }, template: \"<!-- Root drop list -->\\n<div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [sortingDisabled]=\\\"false\\\"\\n [id]=\\\"getListId()\\\"\\n [attr.data-node-id]=\\\"null\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event)\\\"\\n class=\\\"ax-tree2-drop-list\\\"\\n [class.ax-tree2-card]=\\\"look() === 'card'\\\"\\n [class.ax-tree2-with-lines]=\\\"look() === 'with-line'\\\"\\n [class.ax-tree2-compact]=\\\"nodeHeight() === 'compact'\\\"\\n [class.ax-tree2-comfortable]=\\\"nodeHeight() === 'comfortable'\\\"\\n>\\n @for (node of nodes(); track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree2-node\\\"\\n [class.ax-tree2-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree2-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree2-node-loading]=\\\"node.loading\\\"\\n >\\n <div\\n class=\\\"ax-tree2-node-content\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree2-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree2-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree2-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree2-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i [class]=\\\"node.expanded ? expandedIcon() : collapsedIcon()\\\" class=\\\"ax-tree2-toggle-icon\\\"></i>\\n </ax-icon>\\n }\\n </ax-button>\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, 0)\\\"\\n ></ng-container>\\n } @else {\\n @if (showCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree2-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n (pointerdown)=\\\"$event.stopPropagation()\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree2-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree2-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree2-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree2-children\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n</div>\\n\\n<!-- Recursive children template -->\\n<ng-template #childrenList let-children=\\\"children\\\" let-parent=\\\"parent\\\" let-level=\\\"level\\\">\\n <div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"getListId(parent)\\\"\\n [attr.data-node-id]=\\\"parent.id\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event, parent)\\\"\\n class=\\\"ax-tree2-drop-list\\\"\\n >\\n @for (node of children; track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree2-node\\\"\\n [class.ax-tree2-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree2-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree2-node-loading]=\\\"node.loading\\\"\\n >\\n <div\\n class=\\\"ax-tree2-node-content\\\"\\n [style.padding-left.px]=\\\"(level * indentSize()) / (look() === 'with-line' ? 3 : 1)\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree2-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree2-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree2-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree2-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i [class]=\\\"node.expanded ? expandedIcon() : collapsedIcon()\\\" class=\\\"ax-tree2-toggle-icon\\\"></i>\\n </ax-icon>\\n }\\n </ax-button>\\n\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, level)\\\"\\n ></ng-container>\\n } @else {\\n @if (showCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree2-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n (pointerdown)=\\\"$event.stopPropagation()\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree2-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree2-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree2-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree2-children\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: level + 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".ax-tree2{display:block;width:100%;--ax-comp-tree2-indent-size: 12px;--ax-comp-tree2-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree2-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree2-node-border-radius: 6px;--ax-comp-tree2-node-margin: .125rem;--ax-comp-tree2-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree2-drag-preview-opacity: .9;--ax-comp-tree2-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree2-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree2-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree2-drop-list{min-height:2rem}.ax-tree2-compact .ax-tree2-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree2-comfortable .ax-tree2-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree2-node{position:relative;margin:var(--ax-comp-tree2-node-margin) 0;border-radius:var(--ax-comp-tree2-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree2-node:hover:not(.ax-dragging){background:var(--ax-comp-tree2-node-hover-bg)}.ax-tree2-node.ax-tree2-node-selected{background:var(--ax-comp-tree2-node-selected-bg);border-color:currentColor}.ax-tree2-node.ax-dragging{opacity:var(--ax-comp-tree2-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree2-node.ax-drag-placeholder{background:var(--ax-comp-tree2-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree2-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree2-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree2-drop-active-bg);border-radius:var(--ax-comp-tree2-node-border-radius);outline:2px dashed var(--ax-comp-tree2-drop-active-outline);outline-offset:-2px}.ax-tree2-node-content{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ax-tree2-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree2-drag-handle:hover{opacity:1}.ax-tree2-drag-handle:active{cursor:grabbing}.ax-tree2-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree2-expand-toggle:not(.ax-tree2-has-children){opacity:0;pointer-events:none}.ax-tree2-toggle-icon{font-size:.75rem}.ax-tree2-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree2-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree2-children{padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree2-node-loading{opacity:.7}.ax-tree2-card .ax-tree2-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree2-card .ax-tree2-node-content{padding:1rem}.ax-tree2-with-lines .ax-tree2-children{position:relative;padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-with-lines .ax-tree2-children:before{content:\\\"\\\";position:absolute;left:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines .ax-tree2-node{position:relative}.ax-tree2-with-lines .ax-tree2-node:before{content:\\\"\\\";position:absolute;left:calc(-1 * var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2)));top:60%;width:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));height:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines>.ax-tree2-drop-list>.ax-tree2-node:before,.ax-tree2-with-lines>.ax-tree2-node:before{display:none}\\n\"] }]\n }], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: \"nodes\", required: true }] }, { type: i0.Output, args: [\"nodesChange\"] }], showCheckbox: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showCheckbox\", required: false }] }], dragMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragMode\", required: false }] }], dragOperationType: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragOperationType\", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showIcons\", required: false }] }], showChildrenBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showChildrenBadge\", required: false }] }], expandedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"expandedIcon\", required: false }] }], collapsedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"collapsedIcon\", required: false }] }], indentSize: [{ type: i0.Input, args: [{ isSignal: true, alias: \"indentSize\", required: false }] }], nodeHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: \"nodeHeight\", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: \"look\", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"itemTemplate\", required: false }] }], lazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: \"lazyLoad\", required: false }] }], enableLazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: \"enableLazyLoad\", required: false }] }], onBeforeDrop: [{ type: i0.Output, args: [\"onBeforeDrop\"] }], onNodeToggle: [{ type: i0.Output, args: [\"onNodeToggle\"] }], onNodeSelect: [{ type: i0.Output, args: [\"onNodeSelect\"] }], onOrderChange: [{ type: i0.Output, args: [\"onOrderChange\"] }], onMoveChange: [{ type: i0.Output, args: [\"onMoveChange\"] }], onItemsChange: [{ type: i0.Output, args: [\"onItemsChange\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZTIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlMi9zcmMvbGliL3RyZWUyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZTIvc3JjL2xpYi90cmVlMi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixtQkFBbUIsRUFFbkIsZUFBZSxFQUNmLGlCQUFpQixHQUNsQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUF5QzdDLE1BQU0sT0FBTyxnQkFBZ0I7SUE1QjdCO1FBNkJFLG1DQUFtQztRQUNsQixpQkFBWSxHQUFHLG1CQUFtQixDQUFDO1FBQ25DLHFCQUFnQixHQUFHLG9CQUFvQixDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsZUFBZSxDQUFDO1FBQy9DLHNCQUFzQjtRQUN0QixVQUFLLEdBQUcsS0FBSyxDQUFDLFFB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d0I7OzJGQVdmLGdCQUFnQjtrQkE1QjVCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksbUJBR0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQix3QkFBd0I7cUJBQ3pCLFFBQ0s7d0JBQ0osS0FBSyxFQUFFLFVBQVU7d0JBQ2pCLDBCQUEwQixFQUFFLHNCQUFzQjt3QkFDbEQsdUJBQXVCLEVBQUUsbUJBQW1CO3dCQUM1Qyw0QkFBNEIsRUFBRSx3QkFBd0I7d0JBQ3RELCtCQUErQixFQUFFLHFCQUFxQjt3QkFDdEQsK0JBQStCLEVBQUUsMkJBQTJCO3FCQUM3RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYVmFsdWVDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHtcbiAgQVhEcmFnRGlyZWN0aXZlLFxuICBBWERyYWdIYW5kbGVEaXJlY3RpdmUsXG4gIEFYRHJvcExpc3REaXJlY3RpdmUsXG4gIEFYRHJvcExpc3REcm9wcGVkRXZlbnQsXG4gIG1vdmVJdGVtSW5BcnJheSxcbiAgdHJhbnNmZXJBcnJheUl0ZW0sXG59IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWEJhZGdlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWENoZWNrQm94Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NoZWNrLWJveCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBlZmZlY3QsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBWFRyZWVCZWZvcmVEcm9wRXZlbnQsXG4gIEFYVHJlZURyYWdNb2RlLFxuICBBWFRyZWVEcmFnT3BlcmF0aW9uVHlwZSxcbiAgQVhUcmVlRHJvcEV2ZW50LFxuICBBWFRyZWVJdGVtVGVtcGxhdGVDb250ZXh0LFxuICBBWFRyZWVOb2RlLFxuICBBWFRyZWVOb2RlU2VsZWN0RXZlbnQsXG4gIEFYVHJlZU5vZGVUb2dnbGVFdmVudCxcbiAgQVhUcmVlVmlld0xvb2ssXG59IGZyb20gJy4vdHJlZTIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC10cmVlMicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlMi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyZWUyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyYWdIYW5kbGVEaXJlY3RpdmUsXG4gICAgQVhEcm9wTGlzdERpcmVjdGl2ZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEFYQnV0dG9uQ29tcG9uZW50LFxuICAgIEFYQ2hlY2tCb3hDb21wb25lbnQsXG4gICAgQVhCYWRnZUNvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2F4LXRyZWUyJyxcbiAgICAnW2NsYXNzLmF4LXRyZWUyLWRlZmF1bHRdJzogXCJsb29rKCkgPT09ICdkZWZhdWx0J1wiLFxuICAgICdbY2xhc3MuYXgtdHJlZTItY2FyZF0nOiBcImxvb2soKSA9PT0gJ2NhcmQnXCIsXG4gICAgJ1tjbGFzcy5heC10cmVlMi13aXRoLWxpbmVdJzogXCJsb29rKCkgPT09ICd3aXRoLWxpbmUnXCIsXG4gICAgJ1tzdHlsZS4tLWF4LXRyZWUtaW5kZW50LXNpemVdJzogXCJpbmRlbnRTaXplKCkgKyAncHgnXCIsXG4gICAgJ1tzdHlsZS4tLWF4LXRyZWUtbGluZS1vZmZzZXRdJzogXCIoaW5kZW50U2l6ZSgpIC8gMikgKyAncHgnXCIsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFYVHJlZTJDb21wb25lbnQge1xuICAvLyBDb25zdGFudHMgZm9yIGxpc3QgSUQgZ2VuZXJhdGlvblxuICBwcml2YXRlIHJlYWRvbmx5IFJPT1RfTElTVF9JRCA9ICdheC10cmVlLXJvb3QtbGlzdCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgTk9ERV9EUk9QX1BSRUZJWCA9ICdheC10cmVlLW5vZGUtZHJvcC0nO1xuICBwcml2YXRlIHJlYWRvbmx5IExJU1RfUFJFRklYID0gJ2F4LXRyZWUtbGlzdC0nO1xuICAvKiogVHJlZSBkYXRhIG5vZGVzICovXG4gIG5vZGVzID0gbW9kZWwucmVxdWlyZWQ8QVhUcmVlTm9kZVtdPigpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW9uICovXG4gIHNob3dDaGVja2JveCA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBEcmFnIGFuZCBkcm9wIG1vZGU6ICdub25lJyAoZGlzYWJsZWQpLCAnaGFuZGxlcicgKGRyYWcgaGFuZGxlKSwgJ2l0ZW0nIChlbnRpcmUgaXRlbSkgKi9cbiAgZHJhZ01vZGUgPSBpbnB1dDxBWFRyZWVEcmFnTW9kZT4oJ2hhbmRsZXInKTtcblxuICAvKiogRHJhZyBvcGVyYXRpb24gdHlwZTogJ29yZGVyLW9ubHknIChyZW9yZGVyIG9ubHkpLCAnbW92ZScgKG1vdmUgYmV0d2VlbiBwYXJlbnRzKSwgJ2JvdGgnIChhbGxvdyBib3RoKSAqL1xuICBkcmFnT3BlcmF0aW9uVHlwZSA9IGlucHV0PEFYVHJlZURyYWdPcGVyYXRpb25UeXBlPignYm90aCcpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgaWNvbnMgKi9cbiAgc2hvd0ljb25zID0gaW5wdXQodHJ1ZSk7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBjaGlsZHJlbiBjb3VudCBiYWRnZSAqL1xuICBzaG93Q2hpbGRyZW5CYWRnZSA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBmb3IgZXhwYW5kZWQgbm9kZXMgKi9cbiAgZXhwYW5kZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tZG93bicpO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBmb3IgY29sbGFwc2VkIG5vZGVzICovXG4gIGNvbGxhcHNlZEljb24gPSBpbnB1dCgnZmEtc29saWQgZmEtY2hldnJvbi1yaWdodCcpO1xuXG4gIC8qKiBJbmRlbnQgc2l6ZSBpbiBwaXhlbHMgZm9yIGVhY2ggbGV2ZWwgKi9cbiAgaW5kZW50U2l6ZSA9IGlucHV0KDEyKTtcblxuICAvKiogTm9kZSBoZWlnaHQgaW4gcGl4ZWxzICovXG4gIG5vZGVIZWlnaHQgPSBpbnB1dDwnY29tcGFjdCcgfCAnbm9ybWFsJyB8ICdjb21mb3J0YWJsZSc+KCdub3JtYWwnKTtcblxuICAvKiogVmlzdWFsIHN0eWxlIHZhcmlhbnQgKi9cbiAgbG9vayA9IGlucHV0PEFYVHJlZVZpZXdMb29rPignZGVmYXVsdCcpO1xuXG4gIC8qKiBDdXN0b20gdGVtcGxhdGUgZm9yIHRyZWUgaXRlbXMgKi9cbiAgaXRlbVRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8QVhUcmVlSXRlbVRlbXBsYXRlQ29udGV4dD4+KCk7XG5cbiAgLyoqIExhenkgbG9hZCBmdW5jdGlvbiBmb3IgZmV0Y2hpbmcgY2hpbGRyZW4gKi9cbiAgbGF6eUxvYWQgPSBpbnB1dDwobm9kZTogQVhUcmVlTm9kZSkgPT4gUHJvbWlzZTxBWFRyZWVOb2RlW10+PigpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGVuYWJsZSBsYXp5IGxvYWRpbmcgKi9cbiAgZW5hYmxlTGF6eUxvYWQgPSBpbnB1dChmYWxzZSk7XG5cbiAgLyoqIEVtaXR0ZWQgYmVmb3JlIGEgZHJvcCBvcGVyYXRpb24gLSBzZXQgY2FuY2VsZWQgdG8gdHJ1ZSB0byBwcmV2ZW50IGRyb3AgKi9cbiAgb25CZWZvcmVEcm9wID0gb3V0cHV0PEFYVHJlZUJlZm9yZURyb3BFdmVudD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgbm9kZSBpcyB0b2dnbGVkIChleHBhbmRlZC9jb2xsYXBzZWQpICovXG4gIG9uTm9kZVRvZ2dsZSA9IG91dHB1dDxBWFRyZWVOb2RlVG9nZ2xlRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIG5vZGUgaXMgc2VsZWN0ZWQvZGVzZWxlY3RlZCAqL1xuICBvbk5vZGVTZWxlY3QgPSBvdXRwdXQ8QVhUcmVlTm9kZVNlbGVjdEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gbm9kZXMgYXJlIHJlb3JkZXJlZCB3aXRoaW4gdGhlIHNhbWUgcGFyZW50ICovXG4gIG9uT3JkZXJDaGFuZ2UgPSBvdXRwdXQ8QVhUcmVlRHJvcEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIG1vdmVkIHRvIGEgZGlmZmVyZW50IHBhcmVudCAqL1xuICBvbk1vdmVDaGFuZ2UgPSBvdXRwdXQ8QVhUcmVlRHJvcEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIGZvciBhbnkgaXRlbSBjaGFuZ2UgKG9yZGVyIG9yIG1vdmUpICovXG4gIG9uSXRlbXNDaGFuZ2UgPSBvdXRwdXQ8QVhUcmVlRHJvcEV2ZW50PigpO1xuXG4gIC8qKiBJbnRlcm5hbCBzaWduYWwgZm9yIHRyYWNraW5nIGxvYWRpbmcgc3RhdGUgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvYWRpbmdOb2RlcyA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcblxuICAvKiogRWZmZWN0IHRvIGhhbmRsZSBsYXp5IGxvYWQgZnVuY3Rpb24gY2hhbmdlcyAqL1xuICAjbGF6eUxvYWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGxhenlMb2FkRm4gPSB0aGlzLmxhenlMb2FkKCk7XG4gICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuZW5hYmxlTGF6eUxvYWQoKTtcbiAgICBpZiAobGF6eUxvYWRGbiAmJiBlbmFibGVkKSB7XG4gICAgICAvLyBJbml0aWFsaXplIGxhenkgbG9hZGluZyBzdGF0ZVxuICAgICAgdGhpcy51cGRhdGVIYXNDaGlsZHJlbkZsYWdzKHRoaXMubm9kZXMoKSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogVG9nZ2xlIG5vZGUgZXhwYW5zaW9uIHN0YXRlIHdpdGggbGF6eSBsb2FkaW5nIHN1cHBvcnRcbiAgICovXG4gIGFzeW5jIHRvZ2dsZU5vZGUobm9kZTogQVhUcmVlTm9kZSwgZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKG5vZGUuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gdGhpcy5oYXNDaGlsZHJlbihub2RlKTtcbiAgICBjb25zdCBjYW5MYXp5TG9hZCA9IHRoaXMuY2FuTGF6eUxvYWQobm9kZSk7XG5cbiAgICBpZiAoaGFzQ2hpbGRyZW4gfHwgY2FuTGF6eUxvYWQpIHtcbiAgICAgIGNvbnN0IHdpbGxFeHBhbmQgPSAhbm9kZS5leHBhbmRlZDtcblxuICAgICAgaWYgKHdpbGxFeHBhbmQgJiYgY2FuTGF6eUxvYWQpIHtcbiAgICAgICAgLy8gTGF6eSBsb2FkIGNoaWxkcmVuIGJlZm9yZSBleHBhbmRpbmdcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTm9kZUNoaWxkcmVuKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBub2RlLmV4cGFuZGVkID0gd2lsbEV4cGFuZDtcbiAgICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgICAgIHRoaXMub25Ob2RlVG9nZ2xlLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIG5vZGUsIG5hdGl2ZUV2ZW50OiBldmVudCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjaGlsZHJlbiBmb3IgYSBub2RlIHVzaW5nIGxhenkgbG9hZGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTm9kZUNoaWxkcmVuKG5vZGU6IEFYVHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsYXp5TG9hZEZuID0gdGhpcy5sYXp5TG9hZCgpO1xuICAgIGlmICghbGF6eUxvYWRGbiB8fCBub2RlLmxvYWRpbmcpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkaW5nTm9kZXMudXBkYXRlKChzZXQpID0+IG5ldyBTZXQoc2V0KS5hZGQobm9kZS5pZCkpO1xuICAgICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IGxhenlMb2FkRm4obm9kZSk7XG4gICAgICBub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICBub2RlLmNoaWxkcmVuQ291bnQgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNoaWxkcmVuOicsIGVycm9yKTtcbiAgICAgIG5vZGUuY2hpbGRyZW5Db3VudCA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG5vZGUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkaW5nTm9kZXMudXBkYXRlKChzZXQpID0+IHtcbiAgICAgICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChzZXQpO1xuICAgICAgICBuZXdTZXQuZGVsZXRlKG5vZGUuaWQpO1xuICAgICAgICByZXR1cm4gbmV3U2V0O1xuICAgICAgfSk7XG4gICAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjaGlsZHJlbkNvdW50IGZsYWdzIGZvciBsYXp5IGxvYWRpbmdcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSGFzQ2hpbGRyZW5GbGFncyhub2RlczogQVhUcmVlTm9kZVtdKTogdm9pZCB7XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Db3VudCA9PT0gdW5kZWZpbmVkICYmICFub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW5Db3VudCA9IDA7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuRmxhZ3Mobm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIG5vZGUgc2VsZWN0aW9uIHN0YXRlIHdpdGggaW5kZXRlcm1pbmF0ZSBzdXBwb3J0XG4gICAqL1xuICB0b2dnbGVTZWxlY3Rpb24obm9kZTogQVhUcmVlTm9kZSwgZXZlbnQ6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBDUklUSUNBTDogT25seSBwcm9jZXNzIGlmIHRoaXMgaXMgYSByZWFsIHVzZXIgaW50ZXJhY3Rpb25cbiAgICAvLyBQcmV2ZW50cyBjYXNjYWRlIHdoZW4gcGFyZW50IHN0YXRlIGNoYW5nZXMgdHJpZ2dlciBjaGVja2JveCBuZ01vZGVsQ2hhbmdlXG4gICAgaWYgKCFldmVudC5pc1VzZXJJbnRlcmFjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBudWxsIHZhbHVlIChpbmRldGVybWluYXRlIHN0YXRlIGNsaWNrZWQpIC0gdHJlYXQgYXMgc2VsZWN0XG4gICAgY29uc3QgbmV3VmFsdWUgPSBldmVudC52YWx1ZSA9PT0gbnVsbCA/IHRydWUgOiBldmVudC52YWx1ZTtcblxuICAgIG5vZGUuc2VsZWN0ZWQgPSBuZXdWYWx1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTsgLy8gQ2xlYXIgaW5kZXRlcm1pbmF0ZSB3aGVuIGV4cGxpY2l0bHkgdG9nZ2xlZFxuXG4gICAgLy8gU2VsZWN0L2Rlc2VsZWN0IGFsbCBjaGlsZHJlbiByZWN1cnNpdmVseVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoaWxkcmVuKG5vZGUuY2hpbGRyZW4sIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGFyZW50IHN0YXRlcyB1cCB0aGUgdHJlZVxuICAgIHRoaXMudXBkYXRlUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgbm9kZSk7XG5cbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gICAgdGhpcy5vbk5vZGVTZWxlY3QuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IGV2ZW50LmlzVXNlckludGVyYWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNlbGVjdC9kZXNlbGVjdCBhbGwgY2hpbGRyZW5cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0QWxsQ2hpbGRyZW4oY2hpbGRyZW46IEFYVHJlZU5vZGVbXSwgc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgY2hpbGQuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIGNoaWxkLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBzZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHBhcmVudCBub2RlIHN0YXRlcyBiYXNlZCBvbiBjaGlsZHJlbiBzZWxlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlUGFyZW50U3RhdGVzKG5vZGVzOiBBWFRyZWVOb2RlW10sIGNoYW5nZWROb2RlOiBBWFRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50Tm9kZShub2RlcywgY2hhbmdlZE5vZGUpO1xuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuY2hpbGRyZW4pIHJldHVybjtcblxuICAgIGNvbnN0IHsgYWxsU2VsZWN0ZWQsIHNvbWVTZWxlY3RlZCB9ID0gdGhpcy5nZXRDaGlsZHJlblNlbGVjdGlvblN0YXRlKHBhcmVudC5jaGlsZHJlbik7XG5cbiAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgIC8vIEFsbCBjaGlsZHJlbiBzZWxlY3RlZCDihpIgcGFyZW50IGlzIHNlbGVjdGVkXG4gICAgICBwYXJlbnQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgcGFyZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHNvbWVTZWxlY3RlZCkge1xuICAgICAgLy8gU29tZSBjaGlsZHJlbiBzZWxlY3RlZCDihpIgcGFyZW50IGlzIGluZGV0ZXJtaW5hdGVcbiAgICAgIC8vIEtlZXAgc2VsZWN0ZWQ9dHJ1ZSB0byBtYWludGFpbiBjb25zaXN0ZW50IHN0YXRlIGFuZCBwcmV2ZW50IGlzc3VlcyB3aXRoIGRlbGV0ZVNlbGVjdGVkKClcbiAgICAgIHBhcmVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICBwYXJlbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkcmVuIHNlbGVjdGVkIOKGkiBwYXJlbnQgaXMgdW5zZWxlY3RlZFxuICAgICAgcGFyZW50LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICBwYXJlbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBncmFuZHBhcmVudHNcbiAgICB0aGlzLnVwZGF0ZVBhcmVudFN0YXRlcyhub2RlcywgcGFyZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0aW9uIHN0YXRlIG9mIGNoaWxkcmVuXG4gICAqL1xuICBwcml2YXRlIGdldENoaWxkcmVuU2VsZWN0aW9uU3RhdGUoY2hpbGRyZW46IEFYVHJlZU5vZGVbXSk6IHsgYWxsU2VsZWN0ZWQ6IGJvb2xlYW47IHNvbWVTZWxlY3RlZDogYm9vbGVhbiB9IHtcbiAgICBsZXQgc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgbGV0IGluZGV0ZXJtaW5hdGVDb3VudCA9IDA7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgLy8gT25seSBjb3VudCBmdWxseSBzZWxlY3RlZCBjaGlsZHJlbiAobm90IGluZGV0ZXJtaW5hdGUpXG4gICAgICBpZiAoY2hpbGQuc2VsZWN0ZWQgJiYgIWNoaWxkLmluZGV0ZXJtaW5hdGUpIHNlbGVjdGVkQ291bnQrKztcbiAgICAgIGlmIChjaGlsZC5pbmRldGVybWluYXRlKSBpbmRldGVybWluYXRlQ291bnQrKztcbiAgICB9KTtcblxuICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gc2VsZWN0ZWRDb3VudCA9PT0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGNvbnN0IHNvbWVTZWxlY3RlZCA9IHNlbGVjdGVkQ291bnQgPiAwIHx8IGluZGV0ZXJtaW5hdGVDb3VudCA+IDA7XG5cbiAgICByZXR1cm4geyBhbGxTZWxlY3RlZCwgc29tZVNlbGVjdGVkIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCBwYXJlbnQgbm9kZSBvZiBhIGdpdmVuIG5vZGVcbiAgICovXG4gIHByaXZhdGUgZmluZFBhcmVudE5vZGUobm9kZXM6IEFYVHJlZU5vZGVbXSwgdGFyZ2V0Tm9kZTogQVhUcmVlTm9kZSk6IEFYVHJlZU5vZGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/LnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5pZCA9PT0gdGFyZ2V0Tm9kZS5pZCkpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFBhcmVudE5vZGUobm9kZS5jaGlsZHJlbiwgdGFyZ2V0Tm9kZSk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBkcm9wIGV2ZW50cyBmb3IgdHJlZSBub2Rlc1xuICAgKi9cbiAgb25Ecm9wKGV2ZW50OiBBWERyb3BMaXN0RHJvcHBlZEV2ZW50LCBwYXJlbnROb2RlPzogQVhUcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldEFycmF5ID0gcGFyZW50Tm9kZT8uY2hpbGRyZW4gPz8gdGhpcy5ub2RlcygpO1xuICAgIGNvbnN0IGlzUmVvcmRlcmluZyA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXI7XG5cbiAgICBpZiAoaXNSZW9yZGVyaW5nKSB7XG4gICAgICB0aGlzLmhhbmRsZVJlb3JkZXIoZXZlbnQsIHRhcmdldEFycmF5LCBwYXJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVNb3ZlKGV2ZW50LCB0YXJnZXRBcnJheSwgcGFyZW50Tm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBkcm9wIGV2ZW50cyB3aGVuIGRyb3BwaW5nIGRpcmVjdGx5IG9udG8gYSBub2RlICh0byBtYWtlIGl0IGEgY2hpbGQpXG4gICAqL1xuICBvbkRyb3BPbnRvTm9kZShldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCwgdGFyZ2V0Tm9kZTogQVhUcmVlTm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Nb3ZlVG9QYXJlbnQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc291cmNlTGlzdElkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZWxlbWVudC5pZDtcbiAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuICAgIGlmICghc291cmNlQXJyYXkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHNvdXJjZUFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWREcm9wVGFyZ2V0KG1vdmVkTm9kZSwgdGFyZ2V0Tm9kZSkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZW1pdEJlZm9yZURyb3BFdmVudChtb3ZlZE5vZGUsIHNvdXJjZUxpc3RJZCwgdGFyZ2V0Tm9kZSwgZXZlbnQucHJldmlvdXNJbmRleCwgMCkpIHJldHVybjtcblxuICAgIC8vIEluaXRpYWxpemUgY2hpbGRyZW4gYXJyYXkgYW5kIHBlcmZvcm0gdHJhbnNmZXJcbiAgICB0YXJnZXROb2RlLmNoaWxkcmVuID8/PSBbXTtcbiAgICBzb3VyY2VBcnJheS5zcGxpY2UoZXZlbnQucHJldmlvdXNJbmRleCwgMSk7XG4gICAgdGFyZ2V0Tm9kZS5jaGlsZHJlbi51bnNoaWZ0KG1vdmVkTm9kZSk7XG4gICAgdGFyZ2V0Tm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IGV2ZW50c1xuICAgIHRoaXMuZW1pdERyb3BFdmVudHMobW92ZWROb2RlLCB0aGlzLmZpbmRQYXJlbnRCeUxpc3RJZChzb3VyY2VMaXN0SWQpLCB0YXJnZXROb2RlLCBldmVudC5wcmV2aW91c0luZGV4LCAwLCBmYWxzZSk7XG5cbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFycmF5IHJlZmVyZW5jZSBieSBkcm9wIGxpc3QgSURcbiAgICovXG4gIHByaXZhdGUgZ2V0QXJyYXlCeUxpc3RJZChsaXN0SWQ6IHN0cmluZyk6IEFYVHJlZU5vZGVbXSB8IG51bGwge1xuICAgIGlmIChsaXN0SWQgPT09IHRoaXMuUk9PVF9MSVNUX0lEKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlcygpO1xuICAgIH1cblxuICAgIGlmIChsaXN0SWQuc3RhcnRzV2l0aCh0aGlzLk5PREVfRFJPUF9QUkVGSVgpKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBsaXN0SWQucmVwbGFjZSh0aGlzLk5PREVfRFJPUF9QUkVGSVgsICcnKTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIG5vZGVJZCk7XG4gICAgICByZXR1cm4gbm9kZSA/IFtub2RlXSA6IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUlkID0gbGlzdElkLnJlcGxhY2UodGhpcy5MSVNUX1BSRUZJWCwgJycpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIG5vZGVJZCk7XG4gICAgcmV0dXJuIG5vZGU/LmNoaWxkcmVuID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBwYXJlbnQgbm9kZSBieSBsaXN0IElEXG4gICAqL1xuICBwcml2YXRlIGZpbmRQYXJlbnRCeUxpc3RJZChsaXN0SWQ6IHN0cmluZyk6IEFYVHJlZU5vZGUgfCB1bmRlZmluZWQge1xuICAgIGlmIChsaXN0SWQgPT09IHRoaXMuUk9PVF9MSVNUX0lEKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeCA9IGxpc3RJZC5zdGFydHNXaXRoKHRoaXMuTk9ERV9EUk9QX1BSRUZJWCkgPyB0aGlzLk5PREVfRFJPUF9QUkVGSVggOiB0aGlzLkxJU1RfUFJFRklYO1xuICAgIGNvbnN0IG5vZGVJZCA9IGxpc3RJZC5yZXBsYWNlKHByZWZpeCwgJycpO1xuICAgIHJldHVybiB0aGlzLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIG5vZGVJZCkgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBub2RlIGJ5IElEIGluIHRoZSB0cmVlXG4gICAqL1xuICBwcml2YXRlIGZpbmROb2RlQnlJZChub2RlczogQVhUcmVlTm9kZVtdLCBpZDogc3RyaW5nKTogQVhUcmVlTm9kZSB8IG51bGwge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuaWQgPT09IGlkKSByZXR1cm4gbm9kZTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5SWQobm9kZS5jaGlsZHJlbiwgaWQpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGFyZ2V0Tm9kZSBpcyBhIGRlc2NlbmRhbnQgb2YgYW5jZXN0b3JOb2RlIChvciB0aGUgc2FtZSBub2RlKVxuICAgKiBQcmV2ZW50cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGNoZWNraW5nIGlmIHRhcmdldCBleGlzdHMgaW4gYW5jZXN0b3IncyBjaGlsZHJlbiB0cmVlXG4gICAqL1xuICBwcml2YXRlIGlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlOiBBWFRyZWVOb2RlLCBhbmNlc3Rvck5vZGU6IEFYVHJlZU5vZGUpOiBib29sZWFuIHtcbiAgICAvLyBGaXJzdCBjaGVjazogcHJldmVudCBkcm9wcGluZyBhIG5vZGUgaW50byBpdHNlbGZcbiAgICBpZiAodGFyZ2V0Tm9kZS5pZCA9PT0gYW5jZXN0b3JOb2RlLmlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFuY2VzdG9yTm9kZS5jaGlsZHJlbiB8fCBhbmNlc3Rvck5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBhbmNlc3Rvck5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIC8vIERpcmVjdCBjaGlsZCBtYXRjaFxuICAgICAgaWYgKGNoaWxkLmlkID09PSB0YXJnZXROb2RlLmlkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gUmVjdXJzaXZlIGNoZWNrIGluIGRlZXBlciBsZXZlbHNcbiAgICAgIGlmICh0aGlzLmlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlLCBjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuaXF1ZSBsaXN0IElEIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIGdldExpc3RJZChub2RlPzogQVhUcmVlTm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUgPyBgJHt0aGlzLkxJU1RfUFJFRklYfSR7bm9kZS5pZH1gIDogdGhpcy5ST09UX0xJU1RfSUQ7XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kIGFsbCBub2RlcyBpbiB0aGUgdHJlZSAod2l0aCBsYXp5IGxvYWRpbmcgc3VwcG9ydClcbiAgICovXG4gIGFzeW5jIGV4cGFuZEFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldEV4cGFuZGVkU3RhdGUodGhpcy5ub2RlcygpLCB0cnVlKTtcbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgYWxsIG5vZGVzIGluIHRoZSB0cmVlXG4gICAqL1xuICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEV4cGFuZGVkU3RhdGUodGhpcy5ub2RlcygpLCBmYWxzZSk7XG4gICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNldCBleHBhbmRlZCBzdGF0ZSAod2l0aCBsYXp5IGxvYWRpbmcpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNldEV4cGFuZGVkU3RhdGUobm9kZXM6IEFYVHJlZU5vZGVbXSwgZXhwYW5kZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gdGhpcy5oYXNDaGlsZHJlbihub2RlKTtcbiAgICAgIGNvbnN0IGNhbkxhenlMb2FkID0gdGhpcy5jYW5MYXp5TG9hZChub2RlKTtcblxuICAgICAgaWYgKGhhc0NoaWxkcmVuIHx8IGNhbkxhenlMb2FkKSB7XG4gICAgICAgIGlmIChleHBhbmRlZCAmJiBjYW5MYXp5TG9hZCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE5vZGVDaGlsZHJlbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRFeHBhbmRlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY291bnQgb2Ygc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb3VudFNlbGVjdGVkKHRoaXMubm9kZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW55IG5vZGVzIGFyZSBzZWxlY3RlZFxuICAgKi9cbiAgaGFzU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkQ291bnQoKSA+IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY291bnQgc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIHByaXZhdGUgY291bnRTZWxlY3RlZChub2RlczogQVhUcmVlTm9kZVtdKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSBjb3VudCsrO1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY291bnQgKz0gdGhpcy5jb3VudFNlbGVjdGVkKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBnZXRTZWxlY3RlZE5vZGVzKCk6IEFYVHJlZU5vZGVbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQ6IEFYVHJlZU5vZGVbXSA9IFtdO1xuICAgIHRoaXMuY29sbGVjdFNlbGVjdGVkKHRoaXMubm9kZXMoKSwgc2VsZWN0ZWQpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjb2xsZWN0IHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3RTZWxlY3RlZChub2RlczogQVhUcmVlTm9kZVtdLCByZXN1bHQ6IEFYVHJlZU5vZGVbXSk6IHZvaWQge1xuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdFNlbGVjdGVkKG5vZGUuY2hpbGRyZW4sIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHNlbGVjdGVkIG5vZGVzIGZyb20gdGhlIHRyZWVcbiAgICovXG4gIGRlbGV0ZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQodGhpcy5ub2RlcygpKTtcbiAgICAvLyBVcGRhdGUgYWxsIHBhcmVudCBzdGF0ZXMgYWZ0ZXIgZGVsZXRpb24gdG8gY2xlYXIgc3RhbGUgaW5kZXRlcm1pbmF0ZSBzdGF0ZXNcbiAgICB0aGlzLnVwZGF0ZUFsbFBhcmVudFN0YXRlcyh0aGlzLm5vZGVzKCkpO1xuICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYWxsIG5vZGVzIGluIHRoZSB0cmVlXG4gICAqL1xuICBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBbGxTZWxlY3Rpb24odGhpcy5ub2RlcygpLCB0cnVlKTtcbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZWxlY3QgYWxsIG5vZGVzIGluIHRoZSB0cmVlXG4gICAqL1xuICBkZXNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFsbFNlbGVjdGlvbih0aGlzLm5vZGVzKCksIGZhbHNlKTtcbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIG5vZGUgYnkgSUQgaW4gdGhlIHRyZWVcbiAgICovXG4gIGZpbmROb2RlKGlkOiBzdHJpbmcpOiBBWFRyZWVOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZE5vZGVCeUlkKHRoaXMubm9kZXMoKSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHRyZWUgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqL1xuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBzZXQgc2VsZWN0aW9uIHN0YXRlIGZvciBhbGwgbm9kZXNcbiAgICovXG4gIHByaXZhdGUgc2V0QWxsU2VsZWN0aW9uKG5vZGVzOiBBWFRyZWVOb2RlW10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgbm9kZS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnNldEFsbFNlbGVjdGlvbihub2RlLmNoaWxkcmVuLCBzZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgcmVtb3ZlIHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZVNlbGVjdGVkKG5vZGVzOiBBWFRyZWVOb2RlW10pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBpID0gbm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIE9ubHkgZGVsZXRlIG5vZGVzIHRoYXQgYXJlIGZ1bGx5IHNlbGVjdGVkIChub3QgaW5kZXRlcm1pbmF0ZSlcbiAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcGFyZW50cyBzaG91bGQgbm90IGJlIGRlbGV0ZWRcbiAgICAgIGlmIChub2Rlc1tpXS5zZWxlY3RlZCAmJiAhbm9kZXNbaV0uaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGVzW2ldLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQobm9kZXNbaV0uY2hpbGRyZW4gPz8gW10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB1cGRhdGUgYWxsIHBhcmVudCBzdGF0ZXMgaW4gdGhlIHRyZWUgKHVzZWQgYWZ0ZXIgZGVsZXRpb24pXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFsbFBhcmVudFN0YXRlcyhub2RlczogQVhUcmVlTm9kZVtdKTogdm9pZCB7XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEZpcnN0LCByZWN1cnNpdmVseSB1cGRhdGUgbmVzdGVkIGNoaWxkcmVuIChib3R0b20tdXApXG4gICAgICAgIHRoaXMudXBkYXRlQWxsUGFyZW50U3RhdGVzKG5vZGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIC8vIFRoZW4gdXBkYXRlIHRoaXMgbm9kZSdzIHN0YXRlIGJhc2VkIG9uIGl0cyBjaGlsZHJlblxuICAgICAgICBjb25zdCB7IGFsbFNlbGVjdGVkLCBzb21lU2VsZWN0ZWQgfSA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3Rpb25TdGF0ZShub2RlLmNoaWxkcmVuKTtcblxuICAgICAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb21lU2VsZWN0ZWQpIHtcbiAgICAgICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbm9kZSBpcyBjdXJyZW50bHkgbG9hZGluZ1xuICAgKi9cbiAgaXNOb2RlTG9hZGluZyhub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdOb2RlcygpLmhhcyhub2RlSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0ZW1wbGF0ZSBjb250ZXh0IGZvciBhIG5vZGVcbiAgICovXG4gIGdldFRlbXBsYXRlQ29udGV4dChub2RlOiBBWFRyZWVOb2RlLCBsZXZlbCA9IDApOiBBWFRyZWVJdGVtVGVtcGxhdGVDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBub2RlLFxuICAgICAgbm9kZSxcbiAgICAgIGxldmVsLFxuICAgICAgZXhwYW5kZWQ6IG5vZGUuZXhwYW5kZWQgPz8gZmFsc2UsXG4gICAgICBjaGlsZHJlbkNvdW50OiBub2RlLmNoaWxkcmVuQ291bnQgPz8gbm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDAsXG4gICAgICBsb2FkaW5nOiBub2RlLmxvYWRpbmcgPz8gZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIHNob3VsZCBzaG93IGV4cGFuZCB0b2dnbGVcbiAgICovXG4gIHNob3VsZFNob3dFeHBhbmRUb2dnbGUobm9kZTogQVhUcmVlTm9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0NoaWxkcmVuKG5vZGUpIHx8IHRoaXMuY2FuTGF6eUxvYWQobm9kZSk7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgaW1wcm92ZWQgY29kZSByZXVzYWJpbGl0eVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIGhhcyBjaGlsZHJlblxuICAgKi9cbiAgcHJpdmF0ZSBoYXNDaGlsZHJlbihub2RlOiBBWFRyZWVOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4obm9kZS5jaGlsZHJlbj8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIGNhbiBiZSBsYXp5IGxvYWRlZFxuICAgKi9cbiAgcHJpdmF0ZSBjYW5MYXp5TG9hZChub2RlOiBBWFRyZWVOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlTGF6eUxvYWQoKSAmJiBCb29sZWFuKG5vZGUuY2hpbGRyZW5Db3VudCAmJiBub2RlLmNoaWxkcmVuQ291bnQgPiAwICYmICF0aGlzLmhhc0NoaWxkcmVuKG5vZGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBtb3ZlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIGJhc2VkIG9uIGRyYWdPcGVyYXRpb25UeXBlXG4gICAqL1xuICBwcml2YXRlIGNhbk1vdmVUb1BhcmVudCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kcmFnT3BlcmF0aW9uVHlwZSgpID09PSAnb3JkZXItb25seScpIHtcbiAgICAgIGNvbnNvbGUud2FybignTW92aW5nIGJldHdlZW4gcGFyZW50cyBpcyBkaXNhYmxlZCB3aGVuIGRyYWdPcGVyYXRpb25UeXBlIGlzIFwib3JkZXItb25seVwiJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHJlb3JkZXIgb3BlcmF0aW9uIGlzIGFsbG93ZWQgYmFzZWQgb24gZHJhZ09wZXJhdGlvblR5cGVcbiAgICovXG4gIHByaXZhdGUgY2FuUmVvcmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kcmFnT3BlcmF0aW9uVHlwZSgpID09PSAnbW92ZScpIHtcbiAgICAgIGNvbnNvbGUud2FybignUmVvcmRlcmluZyBpcyBkaXNhYmxlZCB3aGVuIGRyYWdPcGVyYXRpb25UeXBlIGlzIFwibW92ZVwiJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlmIGRyb3AgdGFyZ2V0IGlzIHZhbGlkIChwcmV2ZW50IGNpcmN1bGFyIHJlZmVyZW5jZXMpXG4gICAqL1xuICBwcml2YXRlIGlzVmFsaWREcm9wVGFyZ2V0KG1vdmVkTm9kZTogQVhUcmVlTm9kZSwgdGFyZ2V0Tm9kZTogQVhUcmVlTm9kZSk6IGJvb2xlYW4ge1xuICAgIGlmIChtb3ZlZE5vZGUuaWQgPT09IHRhcmdldE5vZGUuaWQgfHwgdGhpcy5pc05vZGVEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgbW92ZWROb2RlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdDYW5ub3QgZHJvcCBhIG5vZGUgb250byBpdHNlbGYgb3IgaXRzIGRlc2NlbmRhbnRzJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSByZW9yZGVyaW5nIHdpdGhpbiB0aGUgc2FtZSBsaXN0XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlb3JkZXIoZXZlbnQ6IEFYRHJvcExpc3REcm9wcGVkRXZlbnQsIHRhcmdldEFycmF5OiBBWFRyZWVOb2RlW10sIHBhcmVudE5vZGU/OiBBWFRyZWVOb2RlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlb3JkZXIoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW92ZWROb2RlID0gdGFyZ2V0QXJyYXlbZXZlbnQucHJldmlvdXNJbmRleF07XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRhcmdldEFycmF5LCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuXG4gICAgdGhpcy5lbWl0RHJvcEV2ZW50cyhtb3ZlZE5vZGUsIHBhcmVudE5vZGUsIHBhcmVudE5vZGUsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG1vdmluZyBiZXR3ZWVuIGRpZmZlcmVudCBsaXN0c1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVNb3ZlKGV2ZW50OiBBWERyb3BMaXN0RHJvcHBlZEV2ZW50LCB0YXJnZXRBcnJheTogQVhUcmVlTm9kZVtdLCBwYXJlbnROb2RlPzogQVhUcmVlTm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Nb3ZlVG9QYXJlbnQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc291cmNlTGlzdElkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZWxlbWVudC5pZDtcbiAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuICAgIGlmICghc291cmNlQXJyYXkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHNvdXJjZUFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuXG4gICAgLy8gUHJldmVudCBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgaWYgKHBhcmVudE5vZGUgJiYgIXRoaXMuaXNWYWxpZERyb3BUYXJnZXQobW92ZWROb2RlLCBwYXJlbnROb2RlKSkgcmV0dXJuO1xuXG4gICAgLy8gQ2hlY2sgaWYgdXNlciB3YW50cyB0byBjYW5jZWxcbiAgICBpZiAoIXRoaXMuZW1pdEJlZm9yZURyb3BFdmVudChtb3ZlZE5vZGUsIHNvdXJjZUxpc3RJZCwgcGFyZW50Tm9kZSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyYW5zZmVyQXJyYXlJdGVtKHNvdXJjZUFycmF5LCB0YXJnZXRBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcblxuICAgIHRoaXMuZW1pdERyb3BFdmVudHMoXG4gICAgICBtb3ZlZE5vZGUsXG4gICAgICB0aGlzLmZpbmRQYXJlbnRCeUxpc3RJZChzb3VyY2VMaXN0SWQpLFxuICAgICAgcGFyZW50Tm9kZSxcbiAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICBldmVudC5jdXJyZW50SW5kZXgsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgYmVmb3JlRHJvcCBldmVudCBhbmQgcmV0dXJuIHdoZXRoZXIgdG8gY29udGludWVcbiAgICovXG4gIHByaXZhdGUgZW1pdEJlZm9yZURyb3BFdmVudChcbiAgICBtb3ZlZE5vZGU6IEFYVHJlZU5vZGUsXG4gICAgc291cmNlTGlzdElkOiBzdHJpbmcsXG4gICAgY3VycmVudFBhcmVudDogQVhUcmVlTm9kZSB8IHVuZGVmaW5lZCxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJlZm9yZURyb3BFdmVudDogQVhUcmVlQmVmb3JlRHJvcEV2ZW50ID0ge1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbW92ZWROb2RlLFxuICAgICAgcHJldmlvdXNQYXJlbnQ6IHRoaXMuZmluZFBhcmVudEJ5TGlzdElkKHNvdXJjZUxpc3RJZCksXG4gICAgICBjdXJyZW50UGFyZW50LFxuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMub25CZWZvcmVEcm9wLmVtaXQoYmVmb3JlRHJvcEV2ZW50KTtcblxuICAgIGlmIChiZWZvcmVEcm9wRXZlbnQuY2FuY2VsZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignRHJvcCBjYW5jZWxlZCBieSB1c2VyIGluIG9uQmVmb3JlRHJvcCBldmVudCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGRyb3AgZXZlbnRzIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlXG4gICAqL1xuICBwcml2YXRlIGVtaXREcm9wRXZlbnRzKFxuICAgIG5vZGU6IEFYVHJlZU5vZGUsXG4gICAgcHJldmlvdXNQYXJlbnQ6IEFYVHJlZU5vZGUgfCB1bmRlZmluZWQsXG4gICAgY3VycmVudFBhcmVudDogQVhUcmVlTm9kZSB8IHVuZGVmaW5lZCxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICAgaXNSZW9yZGVyOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkcm9wRXZlbnQ6IEFYVHJlZURyb3BFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIG5vZGUsXG4gICAgICBwcmV2aW91c1BhcmVudCxcbiAgICAgIGN1cnJlbnRQYXJlbnQsXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4LFxuICAgIH07XG5cbiAgICBpZiAoaXNSZW9yZGVyKSB7XG4gICAgICB0aGlzLm9uT3JkZXJDaGFuZ2UuZW1pdChkcm9wRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uTW92ZUNoYW5nZS5lbWl0KGRyb3BFdmVudCk7XG4gICAgfVxuICAgIHRoaXMub25JdGVtc0NoYW5nZS5lbWl0KGRyb3BFdmVudCk7XG4gIH1cbn1cbiIsIjwhLS0gUm9vdCBkcm9wIGxpc3QgLS0+XG48ZGl2XG4gIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gIFtzb3J0aW5nRGlzYWJsZWRdPVwiZmFsc2VcIlxuICBbaWRdPVwiZ2V0TGlzdElkKClcIlxuICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwibnVsbFwiXG4gIGRyb3BMaXN0R3JvdXA9XCJheC10cmVlLW5vZGVzXCJcbiAgKGRyb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gIGNsYXNzPVwiYXgtdHJlZTItZHJvcC1saXN0XCJcbiAgW2NsYXNzLmF4LXRyZWUyLWNhcmRdPVwibG9vaygpID09PSAnY2FyZCdcIlxuICBbY2xhc3MuYXgtdHJlZTItd2l0aC1saW5lc109XCJsb29rKCkgPT09ICd3aXRoLWxpbmUnXCJcbiAgW2NsYXNzLmF4LXRyZWUyLWNvbXBhY3RdPVwibm9kZUhlaWdodCgpID09PSAnY29tcGFjdCdcIlxuICBbY2xhc3MuYXgtdHJlZTItY29tZm9ydGFibGVdPVwibm9kZUhlaWdodCgpID09PSAnY29tZm9ydGFibGUnXCJcbj5cbiAgQGZvciAobm9kZSBvZiBub2RlcygpOyB0cmFjayBub2RlLmlkKSB7XG4gICAgQGlmIChub2RlLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIFtheERyYWddPVwiZHJhZ01vZGUoKSAhPT0gJ25vbmUnXCJcbiAgICAgICAgW2RyYWdEaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgW2RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgICBjbGFzcz1cImF4LXRyZWUyLW5vZGVcIlxuICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1zZWxlY3RlZF09XCJub2RlLnNlbGVjdGVkXCJcbiAgICAgICAgW2NsYXNzLmF4LXRyZWUyLW5vZGUtZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgIFtjbGFzcy5heC10cmVlMi1ub2RlLWxvYWRpbmddPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZTItbm9kZS1jb250ZW50XCJcbiAgICAgICAgICBbYXhEcm9wTGlzdF09XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICAgIFtpZF09XCInYXgtdHJlZS1ub2RlLWRyb3AtJyArIG5vZGUuaWRcIlxuICAgICAgICAgIFthdHRyLmRhdGEtbm9kZS1pZF09XCJub2RlLmlkXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLWRyb3AtdHlwZV09XCInb250by1ub2RlJ1wiXG4gICAgICAgICAgZHJvcExpc3RHcm91cD1cImF4LXRyZWUtbm9kZXNcIlxuICAgICAgICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wT250b05vZGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKGRyYWdNb2RlKCkgPT09ICdoYW5kbGVyJykge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cmVlMi1kcmFnLWhhbmRsZVwiIGF4RHJhZ0hhbmRsZSB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPiDii67ii64gPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLWV4cGFuZC10b2dnbGUgYXgtc21cIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlTm9kZShub2RlLCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5heC10cmVlMi1oYXMtY2hpbGRyZW5dPVwic2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlKVwiXG4gICAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItZXhwYW5kZWRdPVwibm9kZS5leHBhbmRlZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZCB8fCBub2RlLmxvYWRpbmdcIlxuICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKG5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXNwaW5uZXIgZmEtc3BpbiBheC10cmVlMi1sb2FkaW5nLXNwaW5uZXJcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5leHBhbmRlZCA/IGV4cGFuZGVkSWNvbigpIDogY29sbGFwc2VkSWNvbigpXCIgY2xhc3M9XCJheC10cmVlMi10b2dnbGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIEBpZiAoaXRlbVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlKCkhXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFRlbXBsYXRlQ29udGV4dChub2RlLCAwKVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCgpKSB7XG4gICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJub2RlLmluZGV0ZXJtaW5hdGUgPyBudWxsIDogbm9kZS5zZWxlY3RlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwibm9kZS5pbmRldGVybWluYXRlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidG9nZ2xlU2VsZWN0aW9uKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+PC9heC1jaGVjay1ib3g+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNob3dJY29ucygpICYmIG5vZGUuaWNvbikge1xuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5pY29uXCIgY2xhc3M9XCJheC10cmVlMi1ub2RlLWljb25cIj48L2k+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRyZWUyLW5vZGUtbGFiZWxcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChzaG93Q2hpbGRyZW5CYWRnZSgpICYmIChub2RlLmNoaWxkcmVuQ291bnQgfHwgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSkpIHtcbiAgICAgICAgICAgICAgPGF4LWJhZGdlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC10cmVlMi1jaGlsZHJlbi1iYWRnZVwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKG5vZGUuY2hpbGRyZW5Db3VudCA/PyBub2RlLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgID48L2F4LWJhZGdlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAobm9kZS5leHBhbmRlZCAmJiBub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdHJlZTItY2hpbGRyZW5cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZHJlbkxpc3RcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4sIHBhcmVudDogbm9kZSwgbGV2ZWw6IDEgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gIH1cbjwvZGl2PlxuXG48IS0tIFJlY3Vyc2l2ZSBjaGlsZHJlbiB0ZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjY2hpbGRyZW5MaXN0IGxldC1jaGlsZHJlbj1cImNoaWxkcmVuXCIgbGV0LXBhcmVudD1cInBhcmVudFwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gIDxkaXZcbiAgICBbYXhEcm9wTGlzdF09XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgIFtpZF09XCJnZXRMaXN0SWQocGFyZW50KVwiXG4gICAgW2F0dHIuZGF0YS1ub2RlLWlkXT1cInBhcmVudC5pZFwiXG4gICAgZHJvcExpc3RHcm91cD1cImF4LXRyZWUtbm9kZXNcIlxuICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wKCRldmVudCwgcGFyZW50KVwiXG4gICAgY2xhc3M9XCJheC10cmVlMi1kcm9wLWxpc3RcIlxuICA+XG4gICAgQGZvciAobm9kZSBvZiBjaGlsZHJlbjsgdHJhY2sgbm9kZS5pZCkge1xuICAgICAgQGlmIChub2RlLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbYXhEcmFnXT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC10cmVlMi1ub2RlXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1zZWxlY3RlZF09XCJub2RlLnNlbGVjdGVkXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1sb2FkaW5nXT1cIm5vZGUubG9hZGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLW5vZGUtY29udGVudFwiXG4gICAgICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0LnB4XT1cIihsZXZlbCAqIGluZGVudFNpemUoKSkgLyAobG9vaygpID09PSAnd2l0aC1saW5lJyA/IDMgOiAxKVwiXG4gICAgICAgICAgICBbYXhEcm9wTGlzdF09XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICAgICAgW2lkXT1cIidheC10cmVlLW5vZGUtZHJvcC0nICsgbm9kZS5pZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRyb3AtdHlwZV09XCInb250by1ub2RlJ1wiXG4gICAgICAgICAgICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS1ub2Rlc1wiXG4gICAgICAgICAgICAoZHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcE9udG9Ob2RlKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoZHJhZ01vZGUoKSA9PT0gJ2hhbmRsZXInKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZTItZHJhZy1oYW5kbGVcIiBheERyYWdIYW5kbGUgdGl0bGU9XCJEcmFnIHRvIHJlb3JkZXJcIj4g4ouu4ouuIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJheC10cmVlMi1leHBhbmQtdG9nZ2xlIGF4LXNtXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlTm9kZShub2RlLCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUyLWhhcy1jaGlsZHJlbl09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUyLWV4cGFuZGVkXT1cIm5vZGUuZXhwYW5kZWRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZCB8fCBub2RlLmxvYWRpbmdcIlxuICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAaWYgKG5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1zcGlubmVyIGZhLXNwaW4gYXgtdHJlZTItbG9hZGluZy1zcGlubmVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5leHBhbmRlZCA/IGV4cGFuZGVkSWNvbigpIDogY29sbGFwc2VkSWNvbigpXCIgY2xhc3M9XCJheC10cmVlMi10b2dnbGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuXG4gICAgICAgICAgICBAaWYgKGl0ZW1UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGUoKSFcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRUZW1wbGF0ZUNvbnRleHQobm9kZSwgbGV2ZWwpXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0NoZWNrYm94KCkpIHtcbiAgICAgICAgICAgICAgICA8YXgtY2hlY2stYm94XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSA/IG51bGwgOiBub2RlLnNlbGVjdGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidG9nZ2xlU2VsZWN0aW9uKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICA+PC9heC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChzaG93SWNvbnMoKSAmJiBub2RlLmljb24pIHtcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5pY29uXCIgY2xhc3M9XCJheC10cmVlMi1ub2RlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cmVlMi1ub2RlLWxhYmVsXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgQGlmIChzaG93Q2hpbGRyZW5CYWRnZSgpICYmIChub2RlLmNoaWxkcmVuQ291bnQgfHwgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSkpIHtcbiAgICAgICAgICAgICAgICA8YXgtYmFkZ2VcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZTItY2hpbGRyZW4tYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgW3RleHRdPVwiKG5vZGUuY2hpbGRyZW5Db3VudCA/PyBub2RlLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgICAgPjwvYXgtYmFkZ2U+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAobm9kZS5leHBhbmRlZCAmJiBub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC10cmVlMi1jaGlsZHJlblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZHJlbkxpc3RcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiwgcGFyZW50OiBub2RlLCBsZXZlbDogbGV2ZWwgKyAxIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class Tree2Module {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: Tree2Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: Tree2Module, imports: [CommonModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: Tree2Module, imports: [CommonModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: Tree2Module, decorators: [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZTIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlMi9zcmMvbGliL3RyZWUyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLekMsTUFBTSxPQUFPLFdBQVc7OEdBQVgsV0FBVzsrR0FBWCxXQUFXLFlBRlosWUFBWTsrR0FFWCxXQUFXLFlBRlosWUFBWTs7MkZBRVgsV0FBVztrQkFIdkIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3hCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBUcmVlMk1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtdHJlZTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3RyZWUyL3NyYy9hY29yZXgtY29tcG9uZW50cy10cmVlMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-components-tree2.mjs","sources":["../tmp-esm2022/tree2/lib/tree2.component.js","../tmp-esm2022/tree2/lib/tree2.module.js","../tmp-esm2022/tree2/acorex-components-tree2.js"],"sourcesContent":["import { AXDragDirective, AXDragHandleDirective, AXDropListDirective, moveItemInArray, transferArrayItem, } from '@acorex/cdk/drag-drop';\nimport { AXBadgeComponent } from '@acorex/components/badge';\nimport { AXButtonComponent } from '@acorex/components/button';\nimport { AXCheckBoxComponent } from '@acorex/components/check-box';\nimport { AXDecoratorIconComponent } from '@acorex/components/decorators';\nimport { CommonModule, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, effect, input, model, output, signal, } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common\";\nimport * as i2 from \"@angular/forms\";\nexport class AXTree2Component {\n constructor() {\n // Constants for list ID generation\n this.ROOT_LIST_ID = 'ax-tree-root-list';\n this.NODE_DROP_PREFIX = 'ax-tree-node-drop-';\n this.LIST_PREFIX = 'ax-tree-list-';\n /** Tree data nodes */\n this.nodes = model.required(...(ngDevMode ? [{ debugName: \"nodes\" }] : []));\n /** Whether to show checkboxes for selection */\n this.showCheckbox = input(true, ...(ngDevMode ? [{ debugName: \"showCheckbox\" }] : []));\n /** Drag and drop mode: 'none' (disabled), 'handler' (drag handle), 'item' (entire item) */\n this.dragMode = input('handler', ...(ngDevMode ? [{ debugName: \"dragMode\" }] : []));\n /** Drag operation type: 'order-only' (reorder only), 'move' (move between parents), 'both' (allow both) */\n this.dragOperationType = input('both', ...(ngDevMode ? [{ debugName: \"dragOperationType\" }] : []));\n /** Whether to show icons */\n this.showIcons = input(true, ...(ngDevMode ? [{ debugName: \"showIcons\" }] : []));\n /** Whether to show children count badge */\n this.showChildrenBadge = input(true, ...(ngDevMode ? [{ debugName: \"showChildrenBadge\" }] : []));\n /** Custom icon for expanded nodes */\n this.expandedIcon = input('fa-solid fa-chevron-down', ...(ngDevMode ? [{ debugName: \"expandedIcon\" }] : []));\n /** Custom icon for collapsed nodes */\n this.collapsedIcon = input('fa-solid fa-chevron-right', ...(ngDevMode ? [{ debugName: \"collapsedIcon\" }] : []));\n /** Indent size in pixels for each level */\n this.indentSize = input(12, ...(ngDevMode ? [{ debugName: \"indentSize\" }] : []));\n /** Node height in pixels */\n this.nodeHeight = input('normal', ...(ngDevMode ? [{ debugName: \"nodeHeight\" }] : []));\n /** Visual style variant */\n this.look = input('default', ...(ngDevMode ? [{ debugName: \"look\" }] : []));\n /** Custom template for tree items */\n this.itemTemplate = input(...(ngDevMode ? [undefined, { debugName: \"itemTemplate\" }] : []));\n /** Lazy load function for fetching children */\n this.lazyLoad = input(...(ngDevMode ? [undefined, { debugName: \"lazyLoad\" }] : []));\n /** Whether to enable lazy loading */\n this.enableLazyLoad = input(false, ...(ngDevMode ? [{ debugName: \"enableLazyLoad\" }] : []));\n /** Emitted before a drop operation - set canceled to true to prevent drop */\n this.onBeforeDrop = output();\n /** Emitted when a node is toggled (expanded/collapsed) */\n this.onNodeToggle = output();\n /** Emitted when a node is selected/deselected */\n this.onNodeSelect = output();\n /** Emitted when nodes are reordered within the same parent */\n this.onOrderChange = output();\n /** Emitted when a node is moved to a different parent */\n this.onMoveChange = output();\n /** Emitted for any item change (order or move) */\n this.onItemsChange = output();\n /** Internal signal for tracking loading state */\n this.loadingNodes = signal(new Set(), ...(ngDevMode ? [{ debugName: \"loadingNodes\" }] : []));\n /** Effect to handle lazy load function changes */\n this.#lazyLoadEffect = effect(() => {\n const lazyLoadFn = this.lazyLoad();\n const enabled = this.enableLazyLoad();\n if (lazyLoadFn && enabled) {\n // Initialize lazy loading state\n this.updateHasChildrenFlags(this.nodes());\n }\n }, ...(ngDevMode ? [{ debugName: \"#lazyLoadEffect\" }] : []));\n }\n /** Effect to handle lazy load function changes */\n #lazyLoadEffect;\n /**\n * Toggle node expansion state with lazy loading support\n */\n async toggleNode(node, event) {\n if (node.disabled)\n return;\n const hasChildren = this.hasChildren(node);\n const canLazyLoad = this.canLazyLoad(node);\n if (hasChildren || canLazyLoad) {\n const willExpand = !node.expanded;\n if (willExpand && canLazyLoad) {\n // Lazy load children before expanding\n await this.loadNodeChildren(node);\n }\n node.expanded = willExpand;\n this.nodes.set([...this.nodes()]);\n this.onNodeToggle.emit({ component: this, node, nativeEvent: event });\n }\n }\n /**\n * Load children for a node using lazy loading\n */\n async loadNodeChildren(node) {\n const lazyLoadFn = this.lazyLoad();\n if (!lazyLoadFn || node.loading)\n return;\n try {\n node.loading = true;\n this.loadingNodes.update((set) => new Set(set).add(node.id));\n this.nodes.set([...this.nodes()]);\n const children = await lazyLoadFn(node);\n node.children = children;\n node.childrenCount = children.length;\n }\n catch (error) {\n console.error('Failed to load children:', error);\n node.childrenCount = 0;\n }\n finally {\n node.loading = false;\n this.loadingNodes.update((set) => {\n const newSet = new Set(set);\n newSet.delete(node.id);\n return newSet;\n });\n this.nodes.set([...this.nodes()]);\n }\n }\n /**\n * Update childrenCount flags for lazy loading\n */\n updateHasChildrenFlags(nodes) {\n nodes.forEach((node) => {\n if (node.childrenCount === undefined && !node.children) {\n node.childrenCount = 0;\n }\n if (node.children) {\n this.updateHasChildrenFlags(node.children);\n }\n });\n }\n /**\n * Toggle node selection state with indeterminate support\n */\n toggleSelection(node, event) {\n // CRITICAL: Only process if this is a real user interaction\n // Prevents cascade when parent state changes trigger checkbox ngModelChange\n if (!event.isUserInteraction) {\n return;\n }\n // Handle null value (indeterminate state clicked) - treat as select\n const newValue = event.value === null ? true : event.value;\n node.selected = newValue;\n node.indeterminate = false; // Clear indeterminate when explicitly toggled\n // Select/deselect all children recursively\n if (node.children) {\n this.selectAllChildren(node.children, newValue);\n }\n // Update parent states up the tree\n this.updateParentStates(this.nodes(), node);\n this.nodes.set([...this.nodes()]);\n this.onNodeSelect.emit({\n component: this,\n node,\n isUserInteraction: event.isUserInteraction,\n });\n }\n /**\n * Recursively select/deselect all children\n */\n selectAllChildren(children, selected) {\n children.forEach((child) => {\n child.selected = selected;\n child.indeterminate = false;\n if (child.children) {\n this.selectAllChildren(child.children, selected);\n }\n });\n }\n /**\n * Update parent node states based on children selection\n */\n updateParentStates(nodes, changedNode) {\n const parent = this.findParentNode(nodes, changedNode);\n if (!parent || !parent.children)\n return;\n const { allSelected, someSelected } = this.getChildrenSelectionState(parent.children);\n if (allSelected) {\n // All children selected → parent is selected\n parent.selected = true;\n parent.indeterminate = false;\n }\n else if (someSelected) {\n // Some children selected → parent is indeterminate\n // Keep selected=true to maintain consistent state and prevent issues with deleteSelected()\n parent.selected = true;\n parent.indeterminate = true;\n }\n else {\n // No children selected → parent is unselected\n parent.selected = false;\n parent.indeterminate = false;\n }\n // Recursively update grandparents\n this.updateParentStates(nodes, parent);\n }\n /**\n * Get selection state of children\n */\n getChildrenSelectionState(children) {\n let selectedCount = 0;\n let indeterminateCount = 0;\n children.forEach((child) => {\n // Only count fully selected children (not indeterminate)\n if (child.selected && !child.indeterminate)\n selectedCount++;\n if (child.indeterminate)\n indeterminateCount++;\n });\n const allSelected = selectedCount === children.length;\n const someSelected = selectedCount > 0 || indeterminateCount > 0;\n return { allSelected, someSelected };\n }\n /**\n * Find parent node of a given node\n */\n findParentNode(nodes, targetNode) {\n for (const node of nodes) {\n if (node.children?.some((child) => child.id === targetNode.id)) {\n return node;\n }\n if (node.children) {\n const found = this.findParentNode(node.children, targetNode);\n if (found)\n return found;\n }\n }\n return undefined;\n }\n /**\n * Handle drop events for tree nodes\n */\n onDrop(event, parentNode) {\n const targetArray = parentNode?.children ?? this.nodes();\n const isReordering = event.previousContainer === event.container;\n if (isReordering) {\n this.handleReorder(event, targetArray, parentNode);\n }\n else {\n this.handleMove(event, targetArray, parentNode);\n }\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Handle drop events when dropping directly onto a node (to make it a child)\n */\n onDropOntoNode(event, targetNode) {\n if (!this.canMoveToParent())\n return;\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray)\n return;\n const movedNode = sourceArray[event.previousIndex];\n if (!this.isValidDropTarget(movedNode, targetNode))\n return;\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, targetNode, event.previousIndex, 0))\n return;\n // Initialize children array and perform transfer\n targetNode.children ??= [];\n sourceArray.splice(event.previousIndex, 1);\n targetNode.children.unshift(movedNode);\n targetNode.expanded = true;\n // Emit events\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), targetNode, event.previousIndex, 0, false);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Get array reference by drop list ID\n */\n getArrayByListId(listId) {\n if (listId === this.ROOT_LIST_ID) {\n return this.nodes();\n }\n if (listId.startsWith(this.NODE_DROP_PREFIX)) {\n const nodeId = listId.replace(this.NODE_DROP_PREFIX, '');\n const node = this.findNodeById(this.nodes(), nodeId);\n return node ? [node] : null;\n }\n const nodeId = listId.replace(this.LIST_PREFIX, '');\n const node = this.findNodeById(this.nodes(), nodeId);\n return node?.children ?? null;\n }\n /**\n * Find parent node by list ID\n */\n findParentByListId(listId) {\n if (listId === this.ROOT_LIST_ID) {\n return undefined;\n }\n const prefix = listId.startsWith(this.NODE_DROP_PREFIX) ? this.NODE_DROP_PREFIX : this.LIST_PREFIX;\n const nodeId = listId.replace(prefix, '');\n return this.findNodeById(this.nodes(), nodeId) ?? undefined;\n }\n /**\n * Find a node by ID in the tree\n */\n findNodeById(nodes, id) {\n for (const node of nodes) {\n if (node.id === id)\n return node;\n if (node.children) {\n const found = this.findNodeById(node.children, id);\n if (found)\n return found;\n }\n }\n return null;\n }\n /**\n * Check if targetNode is a descendant of ancestorNode (or the same node)\n * Prevents circular references by checking if target exists in ancestor's children tree\n */\n isNodeDescendantOf(targetNode, ancestorNode) {\n // First check: prevent dropping a node into itself\n if (targetNode.id === ancestorNode.id) {\n return true;\n }\n if (!ancestorNode.children || ancestorNode.children.length === 0) {\n return false;\n }\n for (const child of ancestorNode.children) {\n // Direct child match\n if (child.id === targetNode.id) {\n return true;\n }\n // Recursive check in deeper levels\n if (this.isNodeDescendantOf(targetNode, child)) {\n return true;\n }\n }\n return false;\n }\n /**\n * Generate unique list ID for each node\n */\n getListId(node) {\n return node ? `${this.LIST_PREFIX}${node.id}` : this.ROOT_LIST_ID;\n }\n /**\n * Expand all nodes in the tree (with lazy loading support)\n */\n async expandAll() {\n await this.setExpandedState(this.nodes(), true);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Collapse all nodes in the tree\n */\n collapseAll() {\n this.setExpandedState(this.nodes(), false);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Recursively set expanded state (with lazy loading)\n */\n async setExpandedState(nodes, expanded) {\n for (const node of nodes) {\n const hasChildren = this.hasChildren(node);\n const canLazyLoad = this.canLazyLoad(node);\n if (hasChildren || canLazyLoad) {\n if (expanded && canLazyLoad) {\n await this.loadNodeChildren(node);\n }\n node.expanded = expanded;\n if (node.children) {\n await this.setExpandedState(node.children, expanded);\n }\n }\n }\n }\n /**\n * Get count of selected nodes\n */\n getSelectedCount() {\n return this.countSelected(this.nodes());\n }\n /**\n * Check if any nodes are selected\n */\n hasSelection() {\n return this.getSelectedCount() > 0;\n }\n /**\n * Recursively count selected nodes\n */\n countSelected(nodes) {\n let count = 0;\n nodes.forEach((node) => {\n if (node.selected)\n count++;\n if (node.children) {\n count += this.countSelected(node.children);\n }\n });\n return count;\n }\n /**\n * Get all selected nodes\n */\n getSelectedNodes() {\n const selected = [];\n this.collectSelected(this.nodes(), selected);\n return selected;\n }\n /**\n * Recursively collect selected nodes\n */\n collectSelected(nodes, result) {\n nodes.forEach((node) => {\n if (node.selected)\n result.push(node);\n if (node.children) {\n this.collectSelected(node.children, result);\n }\n });\n }\n /**\n * Delete selected nodes from the tree\n */\n deleteSelected() {\n this.removeSelected(this.nodes());\n // Update all parent states after deletion to clear stale indeterminate states\n this.updateAllParentStates(this.nodes());\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Select all nodes in the tree\n */\n selectAll() {\n this.setAllSelection(this.nodes(), true);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Deselect all nodes in the tree\n */\n deselectAll() {\n this.setAllSelection(this.nodes(), false);\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Find a node by ID in the tree\n */\n findNode(id) {\n return this.findNodeById(this.nodes(), id);\n }\n /**\n * Refresh the tree to trigger change detection\n */\n refresh() {\n this.nodes.set([...this.nodes()]);\n }\n /**\n * Recursively set selection state for all nodes\n */\n setAllSelection(nodes, selected) {\n nodes.forEach((node) => {\n node.selected = selected;\n node.indeterminate = false;\n if (node.children) {\n this.setAllSelection(node.children, selected);\n }\n });\n }\n /**\n * Recursively remove selected nodes\n */\n removeSelected(nodes) {\n for (let i = nodes.length - 1; i >= 0; i--) {\n // Only delete nodes that are fully selected (not indeterminate)\n // Indeterminate parents should not be deleted\n if (nodes[i].selected && !nodes[i].indeterminate) {\n nodes.splice(i, 1);\n }\n else if (nodes[i].children) {\n this.removeSelected(nodes[i].children ?? []);\n }\n }\n }\n /**\n * Recursively update all parent states in the tree (used after deletion)\n */\n updateAllParentStates(nodes) {\n nodes.forEach((node) => {\n if (node.children && node.children.length > 0) {\n // First, recursively update nested children (bottom-up)\n this.updateAllParentStates(node.children);\n // Then update this node's state based on its children\n const { allSelected, someSelected } = this.getChildrenSelectionState(node.children);\n if (allSelected) {\n node.selected = true;\n node.indeterminate = false;\n }\n else if (someSelected) {\n node.selected = true;\n node.indeterminate = true;\n }\n else {\n node.selected = false;\n node.indeterminate = false;\n }\n }\n });\n }\n /**\n * Check if a node is currently loading\n */\n isNodeLoading(nodeId) {\n return this.loadingNodes().has(nodeId);\n }\n /**\n * Get template context for a node\n */\n getTemplateContext(node, level = 0) {\n return {\n $implicit: node,\n node,\n level,\n expanded: node.expanded ?? false,\n childrenCount: node.childrenCount ?? node.children?.length ?? 0,\n loading: node.loading ?? false,\n };\n }\n /**\n * Check if node should show expand toggle\n */\n shouldShowExpandToggle(node) {\n return this.hasChildren(node) || this.canLazyLoad(node);\n }\n // Helper methods for improved code reusability\n /**\n * Check if node has children\n */\n hasChildren(node) {\n return Boolean(node.children?.length);\n }\n /**\n * Check if node can be lazy loaded\n */\n canLazyLoad(node) {\n return this.enableLazyLoad() && Boolean(node.childrenCount && node.childrenCount > 0 && !this.hasChildren(node));\n }\n /**\n * Check if move operation is allowed based on dragOperationType\n */\n canMoveToParent() {\n if (this.dragOperationType() === 'order-only') {\n console.warn('Moving between parents is disabled when dragOperationType is \"order-only\"');\n return false;\n }\n return true;\n }\n /**\n * Check if reorder operation is allowed based on dragOperationType\n */\n canReorder() {\n if (this.dragOperationType() === 'move') {\n console.warn('Reordering is disabled when dragOperationType is \"move\"');\n return false;\n }\n return true;\n }\n /**\n * Validate if drop target is valid (prevent circular references)\n */\n isValidDropTarget(movedNode, targetNode) {\n if (movedNode.id === targetNode.id || this.isNodeDescendantOf(targetNode, movedNode)) {\n console.warn('Cannot drop a node onto itself or its descendants');\n return false;\n }\n return true;\n }\n /**\n * Handle reordering within the same list\n */\n handleReorder(event, targetArray, parentNode) {\n if (!this.canReorder())\n return;\n const movedNode = targetArray[event.previousIndex];\n moveItemInArray(targetArray, event.previousIndex, event.currentIndex);\n this.emitDropEvents(movedNode, parentNode, parentNode, event.previousIndex, event.currentIndex, true);\n }\n /**\n * Handle moving between different lists\n */\n handleMove(event, targetArray, parentNode) {\n if (!this.canMoveToParent())\n return;\n const sourceListId = event.previousContainer.element.id;\n const sourceArray = this.getArrayByListId(sourceListId);\n if (!sourceArray)\n return;\n const movedNode = sourceArray[event.previousIndex];\n // Prevent circular references\n if (parentNode && !this.isValidDropTarget(movedNode, parentNode))\n return;\n // Check if user wants to cancel\n if (!this.emitBeforeDropEvent(movedNode, sourceListId, parentNode, event.previousIndex, event.currentIndex)) {\n return;\n }\n transferArrayItem(sourceArray, targetArray, event.previousIndex, event.currentIndex);\n this.emitDropEvents(movedNode, this.findParentByListId(sourceListId), parentNode, event.previousIndex, event.currentIndex, false);\n }\n /**\n * Emit beforeDrop event and return whether to continue\n */\n emitBeforeDropEvent(movedNode, sourceListId, currentParent, previousIndex, currentIndex) {\n const beforeDropEvent = {\n component: this,\n movedNode,\n previousParent: this.findParentByListId(sourceListId),\n currentParent,\n previousIndex,\n currentIndex,\n canceled: false,\n };\n this.onBeforeDrop.emit(beforeDropEvent);\n if (beforeDropEvent.canceled) {\n console.warn('Drop canceled by user in onBeforeDrop event');\n return false;\n }\n return true;\n }\n /**\n * Emit drop events based on operation type\n */\n emitDropEvents(node, previousParent, currentParent, previousIndex, currentIndex, isReorder) {\n const dropEvent = {\n component: this,\n node,\n previousParent,\n currentParent,\n previousIndex,\n currentIndex,\n };\n if (isReorder) {\n this.onOrderChange.emit(dropEvent);\n }\n else {\n this.onMoveChange.emit(dropEvent);\n }\n this.onItemsChange.emit(dropEvent);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: AXTree2Component, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.6\", type: AXTree2Component, isStandalone: true, selector: \"ax-tree2\", inputs: { nodes: { classPropertyName: \"nodes\", publicName: \"nodes\", isSignal: true, isRequired: true, transformFunction: null }, showCheckbox: { classPropertyName: \"showCheckbox\", publicName: \"showCheckbox\", isSignal: true, isRequired: false, transformFunction: null }, dragMode: { classPropertyName: \"dragMode\", publicName: \"dragMode\", isSignal: true, isRequired: false, transformFunction: null }, dragOperationType: { classPropertyName: \"dragOperationType\", publicName: \"dragOperationType\", isSignal: true, isRequired: false, transformFunction: null }, showIcons: { classPropertyName: \"showIcons\", publicName: \"showIcons\", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: \"showChildrenBadge\", publicName: \"showChildrenBadge\", isSignal: true, isRequired: false, transformFunction: null }, expandedIcon: { classPropertyName: \"expandedIcon\", publicName: \"expandedIcon\", isSignal: true, isRequired: false, transformFunction: null }, collapsedIcon: { classPropertyName: \"collapsedIcon\", publicName: \"collapsedIcon\", isSignal: true, isRequired: false, transformFunction: null }, indentSize: { classPropertyName: \"indentSize\", publicName: \"indentSize\", isSignal: true, isRequired: false, transformFunction: null }, nodeHeight: { classPropertyName: \"nodeHeight\", publicName: \"nodeHeight\", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: \"look\", publicName: \"look\", isSignal: true, isRequired: false, transformFunction: null }, itemTemplate: { classPropertyName: \"itemTemplate\", publicName: \"itemTemplate\", isSignal: true, isRequired: false, transformFunction: null }, lazyLoad: { classPropertyName: \"lazyLoad\", publicName: \"lazyLoad\", isSignal: true, isRequired: false, transformFunction: null }, enableLazyLoad: { classPropertyName: \"enableLazyLoad\", publicName: \"enableLazyLoad\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodes: \"nodesChange\", onBeforeDrop: \"onBeforeDrop\", onNodeToggle: \"onNodeToggle\", onNodeSelect: \"onNodeSelect\", onOrderChange: \"onOrderChange\", onMoveChange: \"onMoveChange\", onItemsChange: \"onItemsChange\" }, host: { properties: { \"class.ax-tree2-default\": \"look() === 'default'\", \"class.ax-tree2-card\": \"look() === 'card'\", \"class.ax-tree2-with-line\": \"look() === 'with-line'\", \"style.--ax-tree-indent-size\": \"indentSize() + 'px'\", \"style.--ax-tree-line-offset\": \"(indentSize() / 2) + 'px'\" }, classAttribute: \"ax-tree2\" }, ngImport: i0, template: \"<!-- Root drop list -->\\n<div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [sortingDisabled]=\\\"false\\\"\\n [id]=\\\"getListId()\\\"\\n [attr.data-node-id]=\\\"null\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event)\\\"\\n class=\\\"ax-tree2-drop-list\\\"\\n [class.ax-tree2-card]=\\\"look() === 'card'\\\"\\n [class.ax-tree2-with-lines]=\\\"look() === 'with-line'\\\"\\n [class.ax-tree2-compact]=\\\"nodeHeight() === 'compact'\\\"\\n [class.ax-tree2-comfortable]=\\\"nodeHeight() === 'comfortable'\\\"\\n>\\n @for (node of nodes(); track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree2-node\\\"\\n [class.ax-tree2-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree2-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree2-node-loading]=\\\"node.loading\\\"\\n >\\n <div\\n class=\\\"ax-tree2-node-content\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree2-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree2-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree2-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree2-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i [class]=\\\"node.expanded ? expandedIcon() : collapsedIcon()\\\" class=\\\"ax-tree2-toggle-icon\\\"></i>\\n </ax-icon>\\n }\\n </ax-button>\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, 0)\\\"\\n ></ng-container>\\n } @else {\\n @if (showCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree2-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n (pointerdown)=\\\"$event.stopPropagation()\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree2-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree2-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree2-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree2-children\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n</div>\\n\\n<!-- Recursive children template -->\\n<ng-template #childrenList let-children=\\\"children\\\" let-parent=\\\"parent\\\" let-level=\\\"level\\\">\\n <div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"getListId(parent)\\\"\\n [attr.data-node-id]=\\\"parent.id\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event, parent)\\\"\\n class=\\\"ax-tree2-drop-list\\\"\\n >\\n @for (node of children; track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree2-node\\\"\\n [class.ax-tree2-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree2-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree2-node-loading]=\\\"node.loading\\\"\\n >\\n <div\\n class=\\\"ax-tree2-node-content\\\"\\n [style.padding-left.px]=\\\"(level * indentSize()) / (look() === 'with-line' ? 3 : 1)\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree2-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree2-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree2-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree2-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i [class]=\\\"node.expanded ? expandedIcon() : collapsedIcon()\\\" class=\\\"ax-tree2-toggle-icon\\\"></i>\\n </ax-icon>\\n }\\n </ax-button>\\n\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, level)\\\"\\n ></ng-container>\\n } @else {\\n @if (showCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree2-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n (pointerdown)=\\\"$event.stopPropagation()\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree2-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree2-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree2-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree2-children\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: level + 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".ax-tree2{display:block;width:100%;--ax-comp-tree2-indent-size: 12px;--ax-comp-tree2-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree2-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree2-node-border-radius: 6px;--ax-comp-tree2-node-margin: .25rem;--ax-comp-tree2-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree2-drag-preview-opacity: .9;--ax-comp-tree2-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree2-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree2-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree2-drop-list{min-height:2rem}.ax-tree2-compact .ax-tree2-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree2-comfortable .ax-tree2-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree2-node{position:relative;margin:var(--ax-comp-tree2-node-margin) 0;border-radius:var(--ax-comp-tree2-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree2-node:hover:not(.ax-dragging){background:var(--ax-comp-tree2-node-hover-bg)}.ax-tree2-node.ax-tree2-node-selected{background:var(--ax-comp-tree2-node-selected-bg);border-color:currentColor}.ax-tree2-node.ax-dragging{opacity:var(--ax-comp-tree2-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree2-node.ax-drag-placeholder{background:var(--ax-comp-tree2-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree2-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree2-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree2-drop-active-bg);border-radius:var(--ax-comp-tree2-node-border-radius);outline:2px dashed var(--ax-comp-tree2-drop-active-outline);outline-offset:-2px}.ax-tree2-node-content{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ax-tree2-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree2-drag-handle:hover{opacity:1}.ax-tree2-drag-handle:active{cursor:grabbing}.ax-tree2-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree2-expand-toggle:not(.ax-tree2-has-children){opacity:0;pointer-events:none}.ax-tree2-toggle-icon{font-size:.75rem}.ax-tree2-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree2-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree2-children{padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree2-node-loading{opacity:.7}.ax-tree2-card .ax-tree2-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree2-card .ax-tree2-node-content{padding:1rem}.ax-tree2-with-lines .ax-tree2-children{position:relative;padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-with-lines .ax-tree2-children:before{content:\\\"\\\";position:absolute;left:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines .ax-tree2-node{position:relative}.ax-tree2-with-lines .ax-tree2-node:before{content:\\\"\\\";position:absolute;left:calc(-1 * var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2)));top:60%;width:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));height:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines>.ax-tree2-drop-list>.ax-tree2-node:before,.ax-tree2-with-lines>.ax-tree2-node:before{display:none}\\n\"], dependencies: [{ kind: \"ngmodule\", type: CommonModule }, { kind: \"directive\", type: i1.NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i2.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i2.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: AXDragDirective, selector: \"[axDrag]\", inputs: [\"axDrag\", \"dragData\", \"dragDisabled\", \"dragTransition\", \"dragElementClone\", \"dropZoneGroup\", \"dragStartDelay\", \"dragResetOnDblClick\", \"dragLockAxis\", \"dragClonedTemplate\", \"dragCursor\", \"dragBoundary\", \"dragTransitionDuration\"], outputs: [\"dragPositionChanged\"] }, { kind: \"directive\", type: AXDragHandleDirective, selector: \"[axDragHandle]\" }, { kind: \"directive\", type: AXDropListDirective, selector: \"[axDropList]\", inputs: [\"axDropList\", \"sortingDisabled\", \"dropListGroup\", \"dropListOrientation\"], outputs: [\"dropListDropped\"], exportAs: [\"axDropList\"] }, { kind: \"component\", type: AXButtonComponent, selector: \"ax-button\", inputs: [\"disabled\", \"size\", \"tabIndex\", \"color\", \"look\", \"text\", \"toggleable\", \"selected\", \"iconOnly\", \"type\", \"loadingText\"], outputs: [\"onBlur\", \"onFocus\", \"onClick\", \"selectedChange\", \"toggleableChange\", \"lookChange\", \"colorChange\", \"disabledChange\", \"loadingTextChange\"] }, { kind: \"component\", type: AXCheckBoxComponent, selector: \"ax-check-box\", inputs: [\"disabled\", \"tabIndex\", \"readonly\", \"color\", \"value\", \"name\", \"id\", \"isLoading\", \"indeterminate\"], outputs: [\"onBlur\", \"onFocus\", \"valueChange\", \"onValueChanged\"] }, { kind: \"component\", type: AXBadgeComponent, selector: \"ax-badge\", inputs: [\"color\", \"look\", \"text\"] }, { kind: \"component\", type: AXDecoratorIconComponent, selector: \"ax-icon\", inputs: [\"icon\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: AXTree2Component, decorators: [{\n type: Component,\n args: [{ selector: 'ax-tree2', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, imports: [\n CommonModule,\n FormsModule,\n AXDragDirective,\n AXDragHandleDirective,\n AXDropListDirective,\n NgTemplateOutlet,\n AXButtonComponent,\n AXCheckBoxComponent,\n AXBadgeComponent,\n AXDecoratorIconComponent,\n ], host: {\n class: 'ax-tree2',\n '[class.ax-tree2-default]': \"look() === 'default'\",\n '[class.ax-tree2-card]': \"look() === 'card'\",\n '[class.ax-tree2-with-line]': \"look() === 'with-line'\",\n '[style.--ax-tree-indent-size]': \"indentSize() + 'px'\",\n '[style.--ax-tree-line-offset]': \"(indentSize() / 2) + 'px'\",\n }, template: \"<!-- Root drop list -->\\n<div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [sortingDisabled]=\\\"false\\\"\\n [id]=\\\"getListId()\\\"\\n [attr.data-node-id]=\\\"null\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event)\\\"\\n class=\\\"ax-tree2-drop-list\\\"\\n [class.ax-tree2-card]=\\\"look() === 'card'\\\"\\n [class.ax-tree2-with-lines]=\\\"look() === 'with-line'\\\"\\n [class.ax-tree2-compact]=\\\"nodeHeight() === 'compact'\\\"\\n [class.ax-tree2-comfortable]=\\\"nodeHeight() === 'comfortable'\\\"\\n>\\n @for (node of nodes(); track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree2-node\\\"\\n [class.ax-tree2-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree2-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree2-node-loading]=\\\"node.loading\\\"\\n >\\n <div\\n class=\\\"ax-tree2-node-content\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree2-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree2-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree2-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree2-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i [class]=\\\"node.expanded ? expandedIcon() : collapsedIcon()\\\" class=\\\"ax-tree2-toggle-icon\\\"></i>\\n </ax-icon>\\n }\\n </ax-button>\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, 0)\\\"\\n ></ng-container>\\n } @else {\\n @if (showCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree2-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n (pointerdown)=\\\"$event.stopPropagation()\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree2-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree2-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree2-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree2-children\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n</div>\\n\\n<!-- Recursive children template -->\\n<ng-template #childrenList let-children=\\\"children\\\" let-parent=\\\"parent\\\" let-level=\\\"level\\\">\\n <div\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"getListId(parent)\\\"\\n [attr.data-node-id]=\\\"parent.id\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDrop($event, parent)\\\"\\n class=\\\"ax-tree2-drop-list\\\"\\n >\\n @for (node of children; track node.id) {\\n @if (node.visible !== false) {\\n <div\\n [axDrag]=\\\"dragMode() !== 'none'\\\"\\n [dragDisabled]=\\\"node.disabled\\\"\\n [dragData]=\\\"node\\\"\\n class=\\\"ax-tree2-node\\\"\\n [class.ax-tree2-node-selected]=\\\"node.selected\\\"\\n [class.ax-tree2-node-disabled]=\\\"node.disabled\\\"\\n [class.ax-tree2-node-loading]=\\\"node.loading\\\"\\n >\\n <div\\n class=\\\"ax-tree2-node-content\\\"\\n [style.padding-left.px]=\\\"(level * indentSize()) / (look() === 'with-line' ? 3 : 1)\\\"\\n [axDropList]=\\\"dragMode() !== 'none'\\\"\\n [id]=\\\"'ax-tree-node-drop-' + node.id\\\"\\n [attr.data-node-id]=\\\"node.id\\\"\\n [attr.data-drop-type]=\\\"'onto-node'\\\"\\n dropListGroup=\\\"ax-tree-nodes\\\"\\n (dropListDropped)=\\\"onDropOntoNode($event, node)\\\"\\n >\\n @if (dragMode() === 'handler') {\\n <span class=\\\"ax-tree2-drag-handle\\\" axDragHandle title=\\\"Drag to reorder\\\"> \\u22EE\\u22EE </span>\\n }\\n <ax-button\\n class=\\\"ax-tree2-expand-toggle ax-sm\\\"\\n (onClick)=\\\"toggleNode(node, $any($event))\\\"\\n [class.ax-tree2-has-children]=\\\"shouldShowExpandToggle(node)\\\"\\n [class.ax-tree2-expanded]=\\\"node.expanded\\\"\\n [disabled]=\\\"node.disabled || node.loading\\\"\\n [style.visibility]=\\\"shouldShowExpandToggle(node) ? 'visible' : 'hidden'\\\"\\n >\\n @if (node.loading) {\\n <ax-icon>\\n <i class=\\\"fa-solid fa-spinner fa-spin ax-tree2-loading-spinner\\\"></i>\\n </ax-icon>\\n } @else {\\n <ax-icon>\\n <i [class]=\\\"node.expanded ? expandedIcon() : collapsedIcon()\\\" class=\\\"ax-tree2-toggle-icon\\\"></i>\\n </ax-icon>\\n }\\n </ax-button>\\n\\n @if (itemTemplate()) {\\n <ng-container\\n [ngTemplateOutlet]=\\\"itemTemplate()!\\\"\\n [ngTemplateOutletContext]=\\\"getTemplateContext(node, level)\\\"\\n ></ng-container>\\n } @else {\\n @if (showCheckbox()) {\\n <ax-check-box\\n class=\\\"ax-tree2-checkbox\\\"\\n [ngModel]=\\\"node.indeterminate ? null : node.selected || false\\\"\\n [indeterminate]=\\\"node.indeterminate || false\\\"\\n (onValueChanged)=\\\"toggleSelection(node, $event)\\\"\\n (click)=\\\"$event.stopPropagation()\\\"\\n (pointerdown)=\\\"$event.stopPropagation()\\\"\\n ></ax-check-box>\\n }\\n @if (showIcons() && node.icon) {\\n <i [class]=\\\"node.icon\\\" class=\\\"ax-tree2-node-icon\\\"></i>\\n }\\n <span class=\\\"ax-tree2-node-label\\\">{{ node.label }}</span>\\n @if (showChildrenBadge() && (node.childrenCount || (node.children && node.children.length > 0))) {\\n <ax-badge\\n class=\\\"ax-tree2-children-badge\\\"\\n [text]=\\\"(node.childrenCount ?? node.children?.length ?? 0).toString()\\\"\\n ></ax-badge>\\n }\\n }\\n </div>\\n </div>\\n @if (node.expanded && node.children && node.children.length > 0) {\\n <div class=\\\"ax-tree2-children\\\">\\n <ng-container\\n [ngTemplateOutlet]=\\\"childrenList\\\"\\n [ngTemplateOutletContext]=\\\"{ children: node.children, parent: node, level: level + 1 }\\\"\\n ></ng-container>\\n </div>\\n }\\n }\\n }\\n </div>\\n</ng-template>\\n\", styles: [\".ax-tree2{display:block;width:100%;--ax-comp-tree2-indent-size: 12px;--ax-comp-tree2-node-hover-bg: rgba(var(--ax-sys-color-on-lightest-surface), .04);--ax-comp-tree2-node-selected-bg: rgba(var(--ax-sys-color-primary-500), .12);--ax-comp-tree2-node-border-radius: 6px;--ax-comp-tree2-node-margin: .25rem;--ax-comp-tree2-line-color: rgba(var(--ax-sys-color-on-lightest-surface), .15);--ax-comp-tree2-drag-preview-opacity: .9;--ax-comp-tree2-drag-placeholder-bg: rgba(var(--ax-sys-color-on-lightest-surface), .02);--ax-comp-tree2-drop-active-bg: rgba(var(--ax-sys-color-primary-500), .08);--ax-comp-tree2-drop-active-outline: rgba(var(--ax-sys-color-primary-500), .3)}.ax-tree2-drop-list{min-height:2rem}.ax-tree2-compact .ax-tree2-node-content{padding:.25rem .5rem;gap:.375rem;font-size:.8125rem}.ax-tree2-comfortable .ax-tree2-node-content{padding:.75rem .625rem;gap:.625rem;font-size:.9375rem}.ax-tree2-node{position:relative;margin:var(--ax-comp-tree2-node-margin) 0;border-radius:var(--ax-comp-tree2-node-border-radius);border:1px solid transparent;cursor:move}.ax-tree2-node:hover:not(.ax-dragging){background:var(--ax-comp-tree2-node-hover-bg)}.ax-tree2-node.ax-tree2-node-selected{background:var(--ax-comp-tree2-node-selected-bg);border-color:currentColor}.ax-tree2-node.ax-dragging{opacity:var(--ax-comp-tree2-drag-placeholder-opacity);cursor:grabbing!important}.ax-tree2-node.ax-drag-placeholder{background:var(--ax-comp-tree2-drag-placeholder-bg)}.ax-drag-preview{opacity:var(--ax-comp-tree2-drag-preview-opacity)!important;box-shadow:0 4px 12px rgba(var(--ax-sys-color-on-lightest-surface),.2)!important;cursor:grabbing!important;border:2px dashed currentColor!important}.ax-tree2-node-content.ax-drop-list-sorting-active{background:var(--ax-comp-tree2-drop-active-bg);border-radius:var(--ax-comp-tree2-node-border-radius);outline:2px dashed var(--ax-comp-tree2-drop-active-outline);outline-offset:-2px}.ax-tree2-node-content{display:flex;align-items:center;gap:.5rem;cursor:pointer;-webkit-user-select:none;user-select:none}.ax-tree2-drag-handle{cursor:grab;opacity:.6;padding:.25rem}.ax-tree2-drag-handle:hover{opacity:1}.ax-tree2-drag-handle:active{cursor:grabbing}.ax-tree2-expand-toggle{background:none;border:none;cursor:pointer;padding:.25rem;min-width:1.5rem;height:1.5rem}.ax-tree2-expand-toggle:not(.ax-tree2-has-children){opacity:0;pointer-events:none}.ax-tree2-toggle-icon{font-size:.75rem}.ax-tree2-node-icon{font-size:1.125rem;flex-shrink:0}.ax-tree2-node-label{flex:1;font-size:.875rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ax-tree2-children{padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-node-disabled{opacity:.5;cursor:not-allowed;pointer-events:none}.ax-tree2-node-loading{opacity:.7}.ax-tree2-card .ax-tree2-node{border:1px solid rgba(var(--ax-sys-color-border-lightest-surface),1);margin:.5rem 0}.ax-tree2-card .ax-tree2-node-content{padding:1rem}.ax-tree2-with-lines .ax-tree2-children{position:relative;padding-left:var(--ax-tree-indent-size, var(--ax-comp-tree2-indent-size))}.ax-tree2-with-lines .ax-tree2-children:before{content:\\\"\\\";position:absolute;left:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));top:0;height:calc(100% - .875rem);width:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines .ax-tree2-node{position:relative}.ax-tree2-with-lines .ax-tree2-node:before{content:\\\"\\\";position:absolute;left:calc(-1 * var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2)));top:60%;width:var(--ax-tree-line-offset, calc(var(--ax-comp-tree2-indent-size) / 2));height:1px;background:var(--ax-tree-line-color, var(--ax-comp-tree2-line-color))}.ax-tree2-with-lines>.ax-tree2-drop-list>.ax-tree2-node:before,.ax-tree2-with-lines>.ax-tree2-node:before{display:none}\\n\"] }]\n }], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: \"nodes\", required: true }] }, { type: i0.Output, args: [\"nodesChange\"] }], showCheckbox: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showCheckbox\", required: false }] }], dragMode: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragMode\", required: false }] }], dragOperationType: [{ type: i0.Input, args: [{ isSignal: true, alias: \"dragOperationType\", required: false }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showIcons\", required: false }] }], showChildrenBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showChildrenBadge\", required: false }] }], expandedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"expandedIcon\", required: false }] }], collapsedIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: \"collapsedIcon\", required: false }] }], indentSize: [{ type: i0.Input, args: [{ isSignal: true, alias: \"indentSize\", required: false }] }], nodeHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: \"nodeHeight\", required: false }] }], look: [{ type: i0.Input, args: [{ isSignal: true, alias: \"look\", required: false }] }], itemTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: \"itemTemplate\", required: false }] }], lazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: \"lazyLoad\", required: false }] }], enableLazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: \"enableLazyLoad\", required: false }] }], onBeforeDrop: [{ type: i0.Output, args: [\"onBeforeDrop\"] }], onNodeToggle: [{ type: i0.Output, args: [\"onNodeToggle\"] }], onNodeSelect: [{ type: i0.Output, args: [\"onNodeSelect\"] }], onOrderChange: [{ type: i0.Output, args: [\"onOrderChange\"] }], onMoveChange: [{ type: i0.Output, args: [\"onMoveChange\"] }], onItemsChange: [{ type: i0.Output, args: [\"onItemsChange\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZTIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlMi9zcmMvbGliL3RyZWUyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZTIvc3JjL2xpYi90cmVlMi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixtQkFBbUIsRUFFbkIsZUFBZSxFQUNmLGlCQUFpQixHQUNsQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUF5QzdDLE1BQU0sT0FBTyxnQkFBZ0I7SUE1QjdCO1FBNkJFLG1DQUFtQztRQUNsQixpQkFBWSxHQUFHLG1CQUFtQixDQUFDO1FBQ25DLHFCQUFnQixHQUFHLG9CQUFvQixDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsZUFBZSxDQUFDO1FBQy9DLHNCQUFzQjtRQUN0QixVQUFLLEdBQUcsS0FBSyxDQUFDLFFB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d0I7OzJGQVdmLGdCQUFnQjtrQkE1QjVCLFNBQVM7K0JBQ0UsVUFBVSxjQUNSLElBQUksbUJBR0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxXQUM1Qjt3QkFDUCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQix3QkFBd0I7cUJBQ3pCLFFBQ0s7d0JBQ0osS0FBSyxFQUFFLFVBQVU7d0JBQ2pCLDBCQUEwQixFQUFFLHNCQUFzQjt3QkFDbEQsdUJBQXVCLEVBQUUsbUJBQW1CO3dCQUM1Qyw0QkFBNEIsRUFBRSx3QkFBd0I7d0JBQ3RELCtCQUErQixFQUFFLHFCQUFxQjt3QkFDdEQsK0JBQStCLEVBQUUsMkJBQTJCO3FCQUM3RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYVmFsdWVDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHtcbiAgQVhEcmFnRGlyZWN0aXZlLFxuICBBWERyYWdIYW5kbGVEaXJlY3RpdmUsXG4gIEFYRHJvcExpc3REaXJlY3RpdmUsXG4gIEFYRHJvcExpc3REcm9wcGVkRXZlbnQsXG4gIG1vdmVJdGVtSW5BcnJheSxcbiAgdHJhbnNmZXJBcnJheUl0ZW0sXG59IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWEJhZGdlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWENoZWNrQm94Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NoZWNrLWJveCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBlZmZlY3QsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBWFRyZWVCZWZvcmVEcm9wRXZlbnQsXG4gIEFYVHJlZURyYWdNb2RlLFxuICBBWFRyZWVEcmFnT3BlcmF0aW9uVHlwZSxcbiAgQVhUcmVlRHJvcEV2ZW50LFxuICBBWFRyZWVJdGVtVGVtcGxhdGVDb250ZXh0LFxuICBBWFRyZWVOb2RlLFxuICBBWFRyZWVOb2RlU2VsZWN0RXZlbnQsXG4gIEFYVHJlZU5vZGVUb2dnbGVFdmVudCxcbiAgQVhUcmVlVmlld0xvb2ssXG59IGZyb20gJy4vdHJlZTIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC10cmVlMicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlMi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyZWUyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyYWdIYW5kbGVEaXJlY3RpdmUsXG4gICAgQVhEcm9wTGlzdERpcmVjdGl2ZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEFYQnV0dG9uQ29tcG9uZW50LFxuICAgIEFYQ2hlY2tCb3hDb21wb25lbnQsXG4gICAgQVhCYWRnZUNvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2F4LXRyZWUyJyxcbiAgICAnW2NsYXNzLmF4LXRyZWUyLWRlZmF1bHRdJzogXCJsb29rKCkgPT09ICdkZWZhdWx0J1wiLFxuICAgICdbY2xhc3MuYXgtdHJlZTItY2FyZF0nOiBcImxvb2soKSA9PT0gJ2NhcmQnXCIsXG4gICAgJ1tjbGFzcy5heC10cmVlMi13aXRoLWxpbmVdJzogXCJsb29rKCkgPT09ICd3aXRoLWxpbmUnXCIsXG4gICAgJ1tzdHlsZS4tLWF4LXRyZWUtaW5kZW50LXNpemVdJzogXCJpbmRlbnRTaXplKCkgKyAncHgnXCIsXG4gICAgJ1tzdHlsZS4tLWF4LXRyZWUtbGluZS1vZmZzZXRdJzogXCIoaW5kZW50U2l6ZSgpIC8gMikgKyAncHgnXCIsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFYVHJlZTJDb21wb25lbnQge1xuICAvLyBDb25zdGFudHMgZm9yIGxpc3QgSUQgZ2VuZXJhdGlvblxuICBwcml2YXRlIHJlYWRvbmx5IFJPT1RfTElTVF9JRCA9ICdheC10cmVlLXJvb3QtbGlzdCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgTk9ERV9EUk9QX1BSRUZJWCA9ICdheC10cmVlLW5vZGUtZHJvcC0nO1xuICBwcml2YXRlIHJlYWRvbmx5IExJU1RfUFJFRklYID0gJ2F4LXRyZWUtbGlzdC0nO1xuICAvKiogVHJlZSBkYXRhIG5vZGVzICovXG4gIG5vZGVzID0gbW9kZWwucmVxdWlyZWQ8QVhUcmVlTm9kZVtdPigpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW9uICovXG4gIHNob3dDaGVja2JveCA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBEcmFnIGFuZCBkcm9wIG1vZGU6ICdub25lJyAoZGlzYWJsZWQpLCAnaGFuZGxlcicgKGRyYWcgaGFuZGxlKSwgJ2l0ZW0nIChlbnRpcmUgaXRlbSkgKi9cbiAgZHJhZ01vZGUgPSBpbnB1dDxBWFRyZWVEcmFnTW9kZT4oJ2hhbmRsZXInKTtcblxuICAvKiogRHJhZyBvcGVyYXRpb24gdHlwZTogJ29yZGVyLW9ubHknIChyZW9yZGVyIG9ubHkpLCAnbW92ZScgKG1vdmUgYmV0d2VlbiBwYXJlbnRzKSwgJ2JvdGgnIChhbGxvdyBib3RoKSAqL1xuICBkcmFnT3BlcmF0aW9uVHlwZSA9IGlucHV0PEFYVHJlZURyYWdPcGVyYXRpb25UeXBlPignYm90aCcpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgaWNvbnMgKi9cbiAgc2hvd0ljb25zID0gaW5wdXQodHJ1ZSk7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyBjaGlsZHJlbiBjb3VudCBiYWRnZSAqL1xuICBzaG93Q2hpbGRyZW5CYWRnZSA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBmb3IgZXhwYW5kZWQgbm9kZXMgKi9cbiAgZXhwYW5kZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tZG93bicpO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBmb3IgY29sbGFwc2VkIG5vZGVzICovXG4gIGNvbGxhcHNlZEljb24gPSBpbnB1dCgnZmEtc29saWQgZmEtY2hldnJvbi1yaWdodCcpO1xuXG4gIC8qKiBJbmRlbnQgc2l6ZSBpbiBwaXhlbHMgZm9yIGVhY2ggbGV2ZWwgKi9cbiAgaW5kZW50U2l6ZSA9IGlucHV0KDEyKTtcblxuICAvKiogTm9kZSBoZWlnaHQgaW4gcGl4ZWxzICovXG4gIG5vZGVIZWlnaHQgPSBpbnB1dDwnY29tcGFjdCcgfCAnbm9ybWFsJyB8ICdjb21mb3J0YWJsZSc+KCdub3JtYWwnKTtcblxuICAvKiogVmlzdWFsIHN0eWxlIHZhcmlhbnQgKi9cbiAgbG9vayA9IGlucHV0PEFYVHJlZVZpZXdMb29rPignZGVmYXVsdCcpO1xuXG4gIC8qKiBDdXN0b20gdGVtcGxhdGUgZm9yIHRyZWUgaXRlbXMgKi9cbiAgaXRlbVRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8QVhUcmVlSXRlbVRlbXBsYXRlQ29udGV4dD4+KCk7XG5cbiAgLyoqIExhenkgbG9hZCBmdW5jdGlvbiBmb3IgZmV0Y2hpbmcgY2hpbGRyZW4gKi9cbiAgbGF6eUxvYWQgPSBpbnB1dDwobm9kZTogQVhUcmVlTm9kZSkgPT4gUHJvbWlzZTxBWFRyZWVOb2RlW10+PigpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGVuYWJsZSBsYXp5IGxvYWRpbmcgKi9cbiAgZW5hYmxlTGF6eUxvYWQgPSBpbnB1dChmYWxzZSk7XG5cbiAgLyoqIEVtaXR0ZWQgYmVmb3JlIGEgZHJvcCBvcGVyYXRpb24gLSBzZXQgY2FuY2VsZWQgdG8gdHJ1ZSB0byBwcmV2ZW50IGRyb3AgKi9cbiAgb25CZWZvcmVEcm9wID0gb3V0cHV0PEFYVHJlZUJlZm9yZURyb3BFdmVudD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgbm9kZSBpcyB0b2dnbGVkIChleHBhbmRlZC9jb2xsYXBzZWQpICovXG4gIG9uTm9kZVRvZ2dsZSA9IG91dHB1dDxBWFRyZWVOb2RlVG9nZ2xlRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIG5vZGUgaXMgc2VsZWN0ZWQvZGVzZWxlY3RlZCAqL1xuICBvbk5vZGVTZWxlY3QgPSBvdXRwdXQ8QVhUcmVlTm9kZVNlbGVjdEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gbm9kZXMgYXJlIHJlb3JkZXJlZCB3aXRoaW4gdGhlIHNhbWUgcGFyZW50ICovXG4gIG9uT3JkZXJDaGFuZ2UgPSBvdXRwdXQ8QVhUcmVlRHJvcEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIG1vdmVkIHRvIGEgZGlmZmVyZW50IHBhcmVudCAqL1xuICBvbk1vdmVDaGFuZ2UgPSBvdXRwdXQ8QVhUcmVlRHJvcEV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIGZvciBhbnkgaXRlbSBjaGFuZ2UgKG9yZGVyIG9yIG1vdmUpICovXG4gIG9uSXRlbXNDaGFuZ2UgPSBvdXRwdXQ8QVhUcmVlRHJvcEV2ZW50PigpO1xuXG4gIC8qKiBJbnRlcm5hbCBzaWduYWwgZm9yIHRyYWNraW5nIGxvYWRpbmcgc3RhdGUgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGxvYWRpbmdOb2RlcyA9IHNpZ25hbDxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKTtcblxuICAvKiogRWZmZWN0IHRvIGhhbmRsZSBsYXp5IGxvYWQgZnVuY3Rpb24gY2hhbmdlcyAqL1xuICAjbGF6eUxvYWRFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGxhenlMb2FkRm4gPSB0aGlzLmxhenlMb2FkKCk7XG4gICAgY29uc3QgZW5hYmxlZCA9IHRoaXMuZW5hYmxlTGF6eUxvYWQoKTtcbiAgICBpZiAobGF6eUxvYWRGbiAmJiBlbmFibGVkKSB7XG4gICAgICAvLyBJbml0aWFsaXplIGxhenkgbG9hZGluZyBzdGF0ZVxuICAgICAgdGhpcy51cGRhdGVIYXNDaGlsZHJlbkZsYWdzKHRoaXMubm9kZXMoKSk7XG4gICAgfVxuICB9KTtcblxuICAvKipcbiAgICogVG9nZ2xlIG5vZGUgZXhwYW5zaW9uIHN0YXRlIHdpdGggbGF6eSBsb2FkaW5nIHN1cHBvcnRcbiAgICovXG4gIGFzeW5jIHRvZ2dsZU5vZGUobm9kZTogQVhUcmVlTm9kZSwgZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKG5vZGUuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gdGhpcy5oYXNDaGlsZHJlbihub2RlKTtcbiAgICBjb25zdCBjYW5MYXp5TG9hZCA9IHRoaXMuY2FuTGF6eUxvYWQobm9kZSk7XG5cbiAgICBpZiAoaGFzQ2hpbGRyZW4gfHwgY2FuTGF6eUxvYWQpIHtcbiAgICAgIGNvbnN0IHdpbGxFeHBhbmQgPSAhbm9kZS5leHBhbmRlZDtcblxuICAgICAgaWYgKHdpbGxFeHBhbmQgJiYgY2FuTGF6eUxvYWQpIHtcbiAgICAgICAgLy8gTGF6eSBsb2FkIGNoaWxkcmVuIGJlZm9yZSBleHBhbmRpbmdcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTm9kZUNoaWxkcmVuKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBub2RlLmV4cGFuZGVkID0gd2lsbEV4cGFuZDtcbiAgICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgICAgIHRoaXMub25Ob2RlVG9nZ2xlLmVtaXQoeyBjb21wb25lbnQ6IHRoaXMsIG5vZGUsIG5hdGl2ZUV2ZW50OiBldmVudCB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBjaGlsZHJlbiBmb3IgYSBub2RlIHVzaW5nIGxhenkgbG9hZGluZ1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkTm9kZUNoaWxkcmVuKG5vZGU6IEFYVHJlZU5vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsYXp5TG9hZEZuID0gdGhpcy5sYXp5TG9hZCgpO1xuICAgIGlmICghbGF6eUxvYWRGbiB8fCBub2RlLmxvYWRpbmcpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBub2RlLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5sb2FkaW5nTm9kZXMudXBkYXRlKChzZXQpID0+IG5ldyBTZXQoc2V0KS5hZGQobm9kZS5pZCkpO1xuICAgICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IGxhenlMb2FkRm4obm9kZSk7XG4gICAgICBub2RlLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICBub2RlLmNoaWxkcmVuQ291bnQgPSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGNoaWxkcmVuOicsIGVycm9yKTtcbiAgICAgIG5vZGUuY2hpbGRyZW5Db3VudCA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG5vZGUubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5sb2FkaW5nTm9kZXMudXBkYXRlKChzZXQpID0+IHtcbiAgICAgICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChzZXQpO1xuICAgICAgICBuZXdTZXQuZGVsZXRlKG5vZGUuaWQpO1xuICAgICAgICByZXR1cm4gbmV3U2V0O1xuICAgICAgfSk7XG4gICAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjaGlsZHJlbkNvdW50IGZsYWdzIGZvciBsYXp5IGxvYWRpbmdcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlSGFzQ2hpbGRyZW5GbGFncyhub2RlczogQVhUcmVlTm9kZVtdKTogdm9pZCB7XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW5Db3VudCA9PT0gdW5kZWZpbmVkICYmICFub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIG5vZGUuY2hpbGRyZW5Db3VudCA9IDA7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuRmxhZ3Mobm9kZS5jaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIG5vZGUgc2VsZWN0aW9uIHN0YXRlIHdpdGggaW5kZXRlcm1pbmF0ZSBzdXBwb3J0XG4gICAqL1xuICB0b2dnbGVTZWxlY3Rpb24obm9kZTogQVhUcmVlTm9kZSwgZXZlbnQ6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBDUklUSUNBTDogT25seSBwcm9jZXNzIGlmIHRoaXMgaXMgYSByZWFsIHVzZXIgaW50ZXJhY3Rpb25cbiAgICAvLyBQcmV2ZW50cyBjYXNjYWRlIHdoZW4gcGFyZW50IHN0YXRlIGNoYW5nZXMgdHJpZ2dlciBjaGVja2JveCBuZ01vZGVsQ2hhbmdlXG4gICAgaWYgKCFldmVudC5pc1VzZXJJbnRlcmFjdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBudWxsIHZhbHVlIChpbmRldGVybWluYXRlIHN0YXRlIGNsaWNrZWQpIC0gdHJlYXQgYXMgc2VsZWN0XG4gICAgY29uc3QgbmV3VmFsdWUgPSBldmVudC52YWx1ZSA9PT0gbnVsbCA/IHRydWUgOiBldmVudC52YWx1ZTtcblxuICAgIG5vZGUuc2VsZWN0ZWQgPSBuZXdWYWx1ZTtcbiAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTsgLy8gQ2xlYXIgaW5kZXRlcm1pbmF0ZSB3aGVuIGV4cGxpY2l0bHkgdG9nZ2xlZFxuXG4gICAgLy8gU2VsZWN0L2Rlc2VsZWN0IGFsbCBjaGlsZHJlbiByZWN1cnNpdmVseVxuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICB0aGlzLnNlbGVjdEFsbENoaWxkcmVuKG5vZGUuY2hpbGRyZW4sIG5ld1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGFyZW50IHN0YXRlcyB1cCB0aGUgdHJlZVxuICAgIHRoaXMudXBkYXRlUGFyZW50U3RhdGVzKHRoaXMubm9kZXMoKSwgbm9kZSk7XG5cbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gICAgdGhpcy5vbk5vZGVTZWxlY3QuZW1pdCh7XG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBub2RlLFxuICAgICAgaXNVc2VySW50ZXJhY3Rpb246IGV2ZW50LmlzVXNlckludGVyYWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNlbGVjdC9kZXNlbGVjdCBhbGwgY2hpbGRyZW5cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0QWxsQ2hpbGRyZW4oY2hpbGRyZW46IEFYVHJlZU5vZGVbXSwgc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgY2hpbGQuc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIGNoaWxkLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgIGlmIChjaGlsZC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBzZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHBhcmVudCBub2RlIHN0YXRlcyBiYXNlZCBvbiBjaGlsZHJlbiBzZWxlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgdXBkYXRlUGFyZW50U3RhdGVzKG5vZGVzOiBBWFRyZWVOb2RlW10sIGNoYW5nZWROb2RlOiBBWFRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5maW5kUGFyZW50Tm9kZShub2RlcywgY2hhbmdlZE5vZGUpO1xuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuY2hpbGRyZW4pIHJldHVybjtcblxuICAgIGNvbnN0IHsgYWxsU2VsZWN0ZWQsIHNvbWVTZWxlY3RlZCB9ID0gdGhpcy5nZXRDaGlsZHJlblNlbGVjdGlvblN0YXRlKHBhcmVudC5jaGlsZHJlbik7XG5cbiAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgIC8vIEFsbCBjaGlsZHJlbiBzZWxlY3RlZCDihpIgcGFyZW50IGlzIHNlbGVjdGVkXG4gICAgICBwYXJlbnQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgcGFyZW50LmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHNvbWVTZWxlY3RlZCkge1xuICAgICAgLy8gU29tZSBjaGlsZHJlbiBzZWxlY3RlZCDihpIgcGFyZW50IGlzIGluZGV0ZXJtaW5hdGVcbiAgICAgIC8vIEtlZXAgc2VsZWN0ZWQ9dHJ1ZSB0byBtYWludGFpbiBjb25zaXN0ZW50IHN0YXRlIGFuZCBwcmV2ZW50IGlzc3VlcyB3aXRoIGRlbGV0ZVNlbGVjdGVkKClcbiAgICAgIHBhcmVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICBwYXJlbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNoaWxkcmVuIHNlbGVjdGVkIOKGkiBwYXJlbnQgaXMgdW5zZWxlY3RlZFxuICAgICAgcGFyZW50LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICBwYXJlbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBncmFuZHBhcmVudHNcbiAgICB0aGlzLnVwZGF0ZVBhcmVudFN0YXRlcyhub2RlcywgcGFyZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc2VsZWN0aW9uIHN0YXRlIG9mIGNoaWxkcmVuXG4gICAqL1xuICBwcml2YXRlIGdldENoaWxkcmVuU2VsZWN0aW9uU3RhdGUoY2hpbGRyZW46IEFYVHJlZU5vZGVbXSk6IHsgYWxsU2VsZWN0ZWQ6IGJvb2xlYW47IHNvbWVTZWxlY3RlZDogYm9vbGVhbiB9IHtcbiAgICBsZXQgc2VsZWN0ZWRDb3VudCA9IDA7XG4gICAgbGV0IGluZGV0ZXJtaW5hdGVDb3VudCA9IDA7XG5cbiAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgLy8gT25seSBjb3VudCBmdWxseSBzZWxlY3RlZCBjaGlsZHJlbiAobm90IGluZGV0ZXJtaW5hdGUpXG4gICAgICBpZiAoY2hpbGQuc2VsZWN0ZWQgJiYgIWNoaWxkLmluZGV0ZXJtaW5hdGUpIHNlbGVjdGVkQ291bnQrKztcbiAgICAgIGlmIChjaGlsZC5pbmRldGVybWluYXRlKSBpbmRldGVybWluYXRlQ291bnQrKztcbiAgICB9KTtcblxuICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gc2VsZWN0ZWRDb3VudCA9PT0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGNvbnN0IHNvbWVTZWxlY3RlZCA9IHNlbGVjdGVkQ291bnQgPiAwIHx8IGluZGV0ZXJtaW5hdGVDb3VudCA+IDA7XG5cbiAgICByZXR1cm4geyBhbGxTZWxlY3RlZCwgc29tZVNlbGVjdGVkIH07XG4gIH1cblxuICAvKipcbiAgICogRmluZCBwYXJlbnQgbm9kZSBvZiBhIGdpdmVuIG5vZGVcbiAgICovXG4gIHByaXZhdGUgZmluZFBhcmVudE5vZGUobm9kZXM6IEFYVHJlZU5vZGVbXSwgdGFyZ2V0Tm9kZTogQVhUcmVlTm9kZSk6IEFYVHJlZU5vZGUgfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4/LnNvbWUoKGNoaWxkKSA9PiBjaGlsZC5pZCA9PT0gdGFyZ2V0Tm9kZS5pZCkpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMuZmluZFBhcmVudE5vZGUobm9kZS5jaGlsZHJlbiwgdGFyZ2V0Tm9kZSk7XG4gICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBkcm9wIGV2ZW50cyBmb3IgdHJlZSBub2Rlc1xuICAgKi9cbiAgb25Ecm9wKGV2ZW50OiBBWERyb3BMaXN0RHJvcHBlZEV2ZW50LCBwYXJlbnROb2RlPzogQVhUcmVlTm9kZSk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldEFycmF5ID0gcGFyZW50Tm9kZT8uY2hpbGRyZW4gPz8gdGhpcy5ub2RlcygpO1xuICAgIGNvbnN0IGlzUmVvcmRlcmluZyA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXI7XG5cbiAgICBpZiAoaXNSZW9yZGVyaW5nKSB7XG4gICAgICB0aGlzLmhhbmRsZVJlb3JkZXIoZXZlbnQsIHRhcmdldEFycmF5LCBwYXJlbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVNb3ZlKGV2ZW50LCB0YXJnZXRBcnJheSwgcGFyZW50Tm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBkcm9wIGV2ZW50cyB3aGVuIGRyb3BwaW5nIGRpcmVjdGx5IG9udG8gYSBub2RlICh0byBtYWtlIGl0IGEgY2hpbGQpXG4gICAqL1xuICBvbkRyb3BPbnRvTm9kZShldmVudDogQVhEcm9wTGlzdERyb3BwZWRFdmVudCwgdGFyZ2V0Tm9kZTogQVhUcmVlTm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Nb3ZlVG9QYXJlbnQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc291cmNlTGlzdElkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZWxlbWVudC5pZDtcbiAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuICAgIGlmICghc291cmNlQXJyYXkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHNvdXJjZUFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWREcm9wVGFyZ2V0KG1vdmVkTm9kZSwgdGFyZ2V0Tm9kZSkpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZW1pdEJlZm9yZURyb3BFdmVudChtb3ZlZE5vZGUsIHNvdXJjZUxpc3RJZCwgdGFyZ2V0Tm9kZSwgZXZlbnQucHJldmlvdXNJbmRleCwgMCkpIHJldHVybjtcblxuICAgIC8vIEluaXRpYWxpemUgY2hpbGRyZW4gYXJyYXkgYW5kIHBlcmZvcm0gdHJhbnNmZXJcbiAgICB0YXJnZXROb2RlLmNoaWxkcmVuID8/PSBbXTtcbiAgICBzb3VyY2VBcnJheS5zcGxpY2UoZXZlbnQucHJldmlvdXNJbmRleCwgMSk7XG4gICAgdGFyZ2V0Tm9kZS5jaGlsZHJlbi51bnNoaWZ0KG1vdmVkTm9kZSk7XG4gICAgdGFyZ2V0Tm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IGV2ZW50c1xuICAgIHRoaXMuZW1pdERyb3BFdmVudHMobW92ZWROb2RlLCB0aGlzLmZpbmRQYXJlbnRCeUxpc3RJZChzb3VyY2VMaXN0SWQpLCB0YXJnZXROb2RlLCBldmVudC5wcmV2aW91c0luZGV4LCAwLCBmYWxzZSk7XG5cbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFycmF5IHJlZmVyZW5jZSBieSBkcm9wIGxpc3QgSURcbiAgICovXG4gIHByaXZhdGUgZ2V0QXJyYXlCeUxpc3RJZChsaXN0SWQ6IHN0cmluZyk6IEFYVHJlZU5vZGVbXSB8IG51bGwge1xuICAgIGlmIChsaXN0SWQgPT09IHRoaXMuUk9PVF9MSVNUX0lEKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlcygpO1xuICAgIH1cblxuICAgIGlmIChsaXN0SWQuc3RhcnRzV2l0aCh0aGlzLk5PREVfRFJPUF9QUkVGSVgpKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBsaXN0SWQucmVwbGFjZSh0aGlzLk5PREVfRFJPUF9QUkVGSVgsICcnKTtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIG5vZGVJZCk7XG4gICAgICByZXR1cm4gbm9kZSA/IFtub2RlXSA6IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUlkID0gbGlzdElkLnJlcGxhY2UodGhpcy5MSVNUX1BSRUZJWCwgJycpO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIG5vZGVJZCk7XG4gICAgcmV0dXJuIG5vZGU/LmNoaWxkcmVuID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBwYXJlbnQgbm9kZSBieSBsaXN0IElEXG4gICAqL1xuICBwcml2YXRlIGZpbmRQYXJlbnRCeUxpc3RJZChsaXN0SWQ6IHN0cmluZyk6IEFYVHJlZU5vZGUgfCB1bmRlZmluZWQge1xuICAgIGlmIChsaXN0SWQgPT09IHRoaXMuUk9PVF9MSVNUX0lEKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeCA9IGxpc3RJZC5zdGFydHNXaXRoKHRoaXMuTk9ERV9EUk9QX1BSRUZJWCkgPyB0aGlzLk5PREVfRFJPUF9QUkVGSVggOiB0aGlzLkxJU1RfUFJFRklYO1xuICAgIGNvbnN0IG5vZGVJZCA9IGxpc3RJZC5yZXBsYWNlKHByZWZpeCwgJycpO1xuICAgIHJldHVybiB0aGlzLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIG5vZGVJZCkgPz8gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBub2RlIGJ5IElEIGluIHRoZSB0cmVlXG4gICAqL1xuICBwcml2YXRlIGZpbmROb2RlQnlJZChub2RlczogQVhUcmVlTm9kZVtdLCBpZDogc3RyaW5nKTogQVhUcmVlTm9kZSB8IG51bGwge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuaWQgPT09IGlkKSByZXR1cm4gbm9kZTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5SWQobm9kZS5jaGlsZHJlbiwgaWQpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGFyZ2V0Tm9kZSBpcyBhIGRlc2NlbmRhbnQgb2YgYW5jZXN0b3JOb2RlIChvciB0aGUgc2FtZSBub2RlKVxuICAgKiBQcmV2ZW50cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGNoZWNraW5nIGlmIHRhcmdldCBleGlzdHMgaW4gYW5jZXN0b3IncyBjaGlsZHJlbiB0cmVlXG4gICAqL1xuICBwcml2YXRlIGlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlOiBBWFRyZWVOb2RlLCBhbmNlc3Rvck5vZGU6IEFYVHJlZU5vZGUpOiBib29sZWFuIHtcbiAgICAvLyBGaXJzdCBjaGVjazogcHJldmVudCBkcm9wcGluZyBhIG5vZGUgaW50byBpdHNlbGZcbiAgICBpZiAodGFyZ2V0Tm9kZS5pZCA9PT0gYW5jZXN0b3JOb2RlLmlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFuY2VzdG9yTm9kZS5jaGlsZHJlbiB8fCBhbmNlc3Rvck5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBhbmNlc3Rvck5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIC8vIERpcmVjdCBjaGlsZCBtYXRjaFxuICAgICAgaWYgKGNoaWxkLmlkID09PSB0YXJnZXROb2RlLmlkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gUmVjdXJzaXZlIGNoZWNrIGluIGRlZXBlciBsZXZlbHNcbiAgICAgIGlmICh0aGlzLmlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlLCBjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuaXF1ZSBsaXN0IElEIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIGdldExpc3RJZChub2RlPzogQVhUcmVlTm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUgPyBgJHt0aGlzLkxJU1RfUFJFRklYfSR7bm9kZS5pZH1gIDogdGhpcy5ST09UX0xJU1RfSUQ7XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kIGFsbCBub2RlcyBpbiB0aGUgdHJlZSAod2l0aCBsYXp5IGxvYWRpbmcgc3VwcG9ydClcbiAgICovXG4gIGFzeW5jIGV4cGFuZEFsbCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNldEV4cGFuZGVkU3RhdGUodGhpcy5ub2RlcygpLCB0cnVlKTtcbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgYWxsIG5vZGVzIGluIHRoZSB0cmVlXG4gICAqL1xuICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEV4cGFuZGVkU3RhdGUodGhpcy5ub2RlcygpLCBmYWxzZSk7XG4gICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHNldCBleHBhbmRlZCBzdGF0ZSAod2l0aCBsYXp5IGxvYWRpbmcpXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHNldEV4cGFuZGVkU3RhdGUobm9kZXM6IEFYVHJlZU5vZGVbXSwgZXhwYW5kZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgIGNvbnN0IGhhc0NoaWxkcmVuID0gdGhpcy5oYXNDaGlsZHJlbihub2RlKTtcbiAgICAgIGNvbnN0IGNhbkxhenlMb2FkID0gdGhpcy5jYW5MYXp5TG9hZChub2RlKTtcblxuICAgICAgaWYgKGhhc0NoaWxkcmVuIHx8IGNhbkxhenlMb2FkKSB7XG4gICAgICAgIGlmIChleHBhbmRlZCAmJiBjYW5MYXp5TG9hZCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE5vZGVDaGlsZHJlbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRFeHBhbmRlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY291bnQgb2Ygc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb3VudFNlbGVjdGVkKHRoaXMubm9kZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW55IG5vZGVzIGFyZSBzZWxlY3RlZFxuICAgKi9cbiAgaGFzU2VsZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNlbGVjdGVkQ291bnQoKSA+IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY291bnQgc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIHByaXZhdGUgY291bnRTZWxlY3RlZChub2RlczogQVhUcmVlTm9kZVtdKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSBjb3VudCsrO1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY291bnQgKz0gdGhpcy5jb3VudFNlbGVjdGVkKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBnZXRTZWxlY3RlZE5vZGVzKCk6IEFYVHJlZU5vZGVbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQ6IEFYVHJlZU5vZGVbXSA9IFtdO1xuICAgIHRoaXMuY29sbGVjdFNlbGVjdGVkKHRoaXMubm9kZXMoKSwgc2VsZWN0ZWQpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjb2xsZWN0IHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3RTZWxlY3RlZChub2RlczogQVhUcmVlTm9kZVtdLCByZXN1bHQ6IEFYVHJlZU5vZGVbXSk6IHZvaWQge1xuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdFNlbGVjdGVkKG5vZGUuY2hpbGRyZW4sIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHNlbGVjdGVkIG5vZGVzIGZyb20gdGhlIHRyZWVcbiAgICovXG4gIGRlbGV0ZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQodGhpcy5ub2RlcygpKTtcbiAgICAvLyBVcGRhdGUgYWxsIHBhcmVudCBzdGF0ZXMgYWZ0ZXIgZGVsZXRpb24gdG8gY2xlYXIgc3RhbGUgaW5kZXRlcm1pbmF0ZSBzdGF0ZXNcbiAgICB0aGlzLnVwZGF0ZUFsbFBhcmVudFN0YXRlcyh0aGlzLm5vZGVzKCkpO1xuICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgYWxsIG5vZGVzIGluIHRoZSB0cmVlXG4gICAqL1xuICBzZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRBbGxTZWxlY3Rpb24odGhpcy5ub2RlcygpLCB0cnVlKTtcbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZWxlY3QgYWxsIG5vZGVzIGluIHRoZSB0cmVlXG4gICAqL1xuICBkZXNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldEFsbFNlbGVjdGlvbih0aGlzLm5vZGVzKCksIGZhbHNlKTtcbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIG5vZGUgYnkgSUQgaW4gdGhlIHRyZWVcbiAgICovXG4gIGZpbmROb2RlKGlkOiBzdHJpbmcpOiBBWFRyZWVOb2RlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZmluZE5vZGVCeUlkKHRoaXMubm9kZXMoKSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIHRyZWUgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAqL1xuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBzZXQgc2VsZWN0aW9uIHN0YXRlIGZvciBhbGwgbm9kZXNcbiAgICovXG4gIHByaXZhdGUgc2V0QWxsU2VsZWN0aW9uKG5vZGVzOiBBWFRyZWVOb2RlW10sIHNlbGVjdGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgbm9kZS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLnNldEFsbFNlbGVjdGlvbihub2RlLmNoaWxkcmVuLCBzZWxlY3RlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgcmVtb3ZlIHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZVNlbGVjdGVkKG5vZGVzOiBBWFRyZWVOb2RlW10pOiB2b2lkIHtcbiAgICBmb3IgKGxldCBpID0gbm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIE9ubHkgZGVsZXRlIG5vZGVzIHRoYXQgYXJlIGZ1bGx5IHNlbGVjdGVkIChub3QgaW5kZXRlcm1pbmF0ZSlcbiAgICAgIC8vIEluZGV0ZXJtaW5hdGUgcGFyZW50cyBzaG91bGQgbm90IGJlIGRlbGV0ZWRcbiAgICAgIGlmIChub2Rlc1tpXS5zZWxlY3RlZCAmJiAhbm9kZXNbaV0uaW5kZXRlcm1pbmF0ZSkge1xuICAgICAgICBub2Rlcy5zcGxpY2UoaSwgMSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGVzW2ldLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQobm9kZXNbaV0uY2hpbGRyZW4gPz8gW10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB1cGRhdGUgYWxsIHBhcmVudCBzdGF0ZXMgaW4gdGhlIHRyZWUgKHVzZWQgYWZ0ZXIgZGVsZXRpb24pXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFsbFBhcmVudFN0YXRlcyhub2RlczogQVhUcmVlTm9kZVtdKTogdm9pZCB7XG4gICAgbm9kZXMuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIEZpcnN0LCByZWN1cnNpdmVseSB1cGRhdGUgbmVzdGVkIGNoaWxkcmVuIChib3R0b20tdXApXG4gICAgICAgIHRoaXMudXBkYXRlQWxsUGFyZW50U3RhdGVzKG5vZGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIC8vIFRoZW4gdXBkYXRlIHRoaXMgbm9kZSdzIHN0YXRlIGJhc2VkIG9uIGl0cyBjaGlsZHJlblxuICAgICAgICBjb25zdCB7IGFsbFNlbGVjdGVkLCBzb21lU2VsZWN0ZWQgfSA9IHRoaXMuZ2V0Q2hpbGRyZW5TZWxlY3Rpb25TdGF0ZShub2RlLmNoaWxkcmVuKTtcblxuICAgICAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcbiAgICAgICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb21lU2VsZWN0ZWQpIHtcbiAgICAgICAgICBub2RlLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICBub2RlLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbm9kZSBpcyBjdXJyZW50bHkgbG9hZGluZ1xuICAgKi9cbiAgaXNOb2RlTG9hZGluZyhub2RlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmxvYWRpbmdOb2RlcygpLmhhcyhub2RlSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0ZW1wbGF0ZSBjb250ZXh0IGZvciBhIG5vZGVcbiAgICovXG4gIGdldFRlbXBsYXRlQ29udGV4dChub2RlOiBBWFRyZWVOb2RlLCBsZXZlbCA9IDApOiBBWFRyZWVJdGVtVGVtcGxhdGVDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBub2RlLFxuICAgICAgbm9kZSxcbiAgICAgIGxldmVsLFxuICAgICAgZXhwYW5kZWQ6IG5vZGUuZXhwYW5kZWQgPz8gZmFsc2UsXG4gICAgICBjaGlsZHJlbkNvdW50OiBub2RlLmNoaWxkcmVuQ291bnQgPz8gbm9kZS5jaGlsZHJlbj8ubGVuZ3RoID8/IDAsXG4gICAgICBsb2FkaW5nOiBub2RlLmxvYWRpbmcgPz8gZmFsc2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIHNob3VsZCBzaG93IGV4cGFuZCB0b2dnbGVcbiAgICovXG4gIHNob3VsZFNob3dFeHBhbmRUb2dnbGUobm9kZTogQVhUcmVlTm9kZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0NoaWxkcmVuKG5vZGUpIHx8IHRoaXMuY2FuTGF6eUxvYWQobm9kZSk7XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgaW1wcm92ZWQgY29kZSByZXVzYWJpbGl0eVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIGhhcyBjaGlsZHJlblxuICAgKi9cbiAgcHJpdmF0ZSBoYXNDaGlsZHJlbihub2RlOiBBWFRyZWVOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJvb2xlYW4obm9kZS5jaGlsZHJlbj8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBub2RlIGNhbiBiZSBsYXp5IGxvYWRlZFxuICAgKi9cbiAgcHJpdmF0ZSBjYW5MYXp5TG9hZChub2RlOiBBWFRyZWVOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlTGF6eUxvYWQoKSAmJiBCb29sZWFuKG5vZGUuY2hpbGRyZW5Db3VudCAmJiBub2RlLmNoaWxkcmVuQ291bnQgPiAwICYmICF0aGlzLmhhc0NoaWxkcmVuKG5vZGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBtb3ZlIG9wZXJhdGlvbiBpcyBhbGxvd2VkIGJhc2VkIG9uIGRyYWdPcGVyYXRpb25UeXBlXG4gICAqL1xuICBwcml2YXRlIGNhbk1vdmVUb1BhcmVudCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kcmFnT3BlcmF0aW9uVHlwZSgpID09PSAnb3JkZXItb25seScpIHtcbiAgICAgIGNvbnNvbGUud2FybignTW92aW5nIGJldHdlZW4gcGFyZW50cyBpcyBkaXNhYmxlZCB3aGVuIGRyYWdPcGVyYXRpb25UeXBlIGlzIFwib3JkZXItb25seVwiJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHJlb3JkZXIgb3BlcmF0aW9uIGlzIGFsbG93ZWQgYmFzZWQgb24gZHJhZ09wZXJhdGlvblR5cGVcbiAgICovXG4gIHByaXZhdGUgY2FuUmVvcmRlcigpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5kcmFnT3BlcmF0aW9uVHlwZSgpID09PSAnbW92ZScpIHtcbiAgICAgIGNvbnNvbGUud2FybignUmVvcmRlcmluZyBpcyBkaXNhYmxlZCB3aGVuIGRyYWdPcGVyYXRpb25UeXBlIGlzIFwibW92ZVwiJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGlmIGRyb3AgdGFyZ2V0IGlzIHZhbGlkIChwcmV2ZW50IGNpcmN1bGFyIHJlZmVyZW5jZXMpXG4gICAqL1xuICBwcml2YXRlIGlzVmFsaWREcm9wVGFyZ2V0KG1vdmVkTm9kZTogQVhUcmVlTm9kZSwgdGFyZ2V0Tm9kZTogQVhUcmVlTm9kZSk6IGJvb2xlYW4ge1xuICAgIGlmIChtb3ZlZE5vZGUuaWQgPT09IHRhcmdldE5vZGUuaWQgfHwgdGhpcy5pc05vZGVEZXNjZW5kYW50T2YodGFyZ2V0Tm9kZSwgbW92ZWROb2RlKSkge1xuICAgICAgY29uc29sZS53YXJuKCdDYW5ub3QgZHJvcCBhIG5vZGUgb250byBpdHNlbGYgb3IgaXRzIGRlc2NlbmRhbnRzJyk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSByZW9yZGVyaW5nIHdpdGhpbiB0aGUgc2FtZSBsaXN0XG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVJlb3JkZXIoZXZlbnQ6IEFYRHJvcExpc3REcm9wcGVkRXZlbnQsIHRhcmdldEFycmF5OiBBWFRyZWVOb2RlW10sIHBhcmVudE5vZGU/OiBBWFRyZWVOb2RlKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNhblJlb3JkZXIoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW92ZWROb2RlID0gdGFyZ2V0QXJyYXlbZXZlbnQucHJldmlvdXNJbmRleF07XG4gICAgbW92ZUl0ZW1JbkFycmF5KHRhcmdldEFycmF5LCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuXG4gICAgdGhpcy5lbWl0RHJvcEV2ZW50cyhtb3ZlZE5vZGUsIHBhcmVudE5vZGUsIHBhcmVudE5vZGUsIGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCwgdHJ1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG1vdmluZyBiZXR3ZWVuIGRpZmZlcmVudCBsaXN0c1xuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVNb3ZlKGV2ZW50OiBBWERyb3BMaXN0RHJvcHBlZEV2ZW50LCB0YXJnZXRBcnJheTogQVhUcmVlTm9kZVtdLCBwYXJlbnROb2RlPzogQVhUcmVlTm9kZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Nb3ZlVG9QYXJlbnQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc291cmNlTGlzdElkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZWxlbWVudC5pZDtcbiAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuICAgIGlmICghc291cmNlQXJyYXkpIHJldHVybjtcblxuICAgIGNvbnN0IG1vdmVkTm9kZSA9IHNvdXJjZUFycmF5W2V2ZW50LnByZXZpb3VzSW5kZXhdO1xuXG4gICAgLy8gUHJldmVudCBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgaWYgKHBhcmVudE5vZGUgJiYgIXRoaXMuaXNWYWxpZERyb3BUYXJnZXQobW92ZWROb2RlLCBwYXJlbnROb2RlKSkgcmV0dXJuO1xuXG4gICAgLy8gQ2hlY2sgaWYgdXNlciB3YW50cyB0byBjYW5jZWxcbiAgICBpZiAoIXRoaXMuZW1pdEJlZm9yZURyb3BFdmVudChtb3ZlZE5vZGUsIHNvdXJjZUxpc3RJZCwgcGFyZW50Tm9kZSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyYW5zZmVyQXJyYXlJdGVtKHNvdXJjZUFycmF5LCB0YXJnZXRBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcblxuICAgIHRoaXMuZW1pdERyb3BFdmVudHMoXG4gICAgICBtb3ZlZE5vZGUsXG4gICAgICB0aGlzLmZpbmRQYXJlbnRCeUxpc3RJZChzb3VyY2VMaXN0SWQpLFxuICAgICAgcGFyZW50Tm9kZSxcbiAgICAgIGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICBldmVudC5jdXJyZW50SW5kZXgsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXQgYmVmb3JlRHJvcCBldmVudCBhbmQgcmV0dXJuIHdoZXRoZXIgdG8gY29udGludWVcbiAgICovXG4gIHByaXZhdGUgZW1pdEJlZm9yZURyb3BFdmVudChcbiAgICBtb3ZlZE5vZGU6IEFYVHJlZU5vZGUsXG4gICAgc291cmNlTGlzdElkOiBzdHJpbmcsXG4gICAgY3VycmVudFBhcmVudDogQVhUcmVlTm9kZSB8IHVuZGVmaW5lZCxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJlZm9yZURyb3BFdmVudDogQVhUcmVlQmVmb3JlRHJvcEV2ZW50ID0ge1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbW92ZWROb2RlLFxuICAgICAgcHJldmlvdXNQYXJlbnQ6IHRoaXMuZmluZFBhcmVudEJ5TGlzdElkKHNvdXJjZUxpc3RJZCksXG4gICAgICBjdXJyZW50UGFyZW50LFxuICAgICAgcHJldmlvdXNJbmRleCxcbiAgICAgIGN1cnJlbnRJbmRleCxcbiAgICAgIGNhbmNlbGVkOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMub25CZWZvcmVEcm9wLmVtaXQoYmVmb3JlRHJvcEV2ZW50KTtcblxuICAgIGlmIChiZWZvcmVEcm9wRXZlbnQuY2FuY2VsZWQpIHtcbiAgICAgIGNvbnNvbGUud2FybignRHJvcCBjYW5jZWxlZCBieSB1c2VyIGluIG9uQmVmb3JlRHJvcCBldmVudCcpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0IGRyb3AgZXZlbnRzIGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlXG4gICAqL1xuICBwcml2YXRlIGVtaXREcm9wRXZlbnRzKFxuICAgIG5vZGU6IEFYVHJlZU5vZGUsXG4gICAgcHJldmlvdXNQYXJlbnQ6IEFYVHJlZU5vZGUgfCB1bmRlZmluZWQsXG4gICAgY3VycmVudFBhcmVudDogQVhUcmVlTm9kZSB8IHVuZGVmaW5lZCxcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXIsXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXG4gICAgaXNSZW9yZGVyOiBib29sZWFuLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkcm9wRXZlbnQ6IEFYVHJlZURyb3BFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIG5vZGUsXG4gICAgICBwcmV2aW91c1BhcmVudCxcbiAgICAgIGN1cnJlbnRQYXJlbnQsXG4gICAgICBwcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4LFxuICAgIH07XG5cbiAgICBpZiAoaXNSZW9yZGVyKSB7XG4gICAgICB0aGlzLm9uT3JkZXJDaGFuZ2UuZW1pdChkcm9wRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uTW92ZUNoYW5nZS5lbWl0KGRyb3BFdmVudCk7XG4gICAgfVxuICAgIHRoaXMub25JdGVtc0NoYW5nZS5lbWl0KGRyb3BFdmVudCk7XG4gIH1cbn1cbiIsIjwhLS0gUm9vdCBkcm9wIGxpc3QgLS0+XG48ZGl2XG4gIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gIFtzb3J0aW5nRGlzYWJsZWRdPVwiZmFsc2VcIlxuICBbaWRdPVwiZ2V0TGlzdElkKClcIlxuICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwibnVsbFwiXG4gIGRyb3BMaXN0R3JvdXA9XCJheC10cmVlLW5vZGVzXCJcbiAgKGRyb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gIGNsYXNzPVwiYXgtdHJlZTItZHJvcC1saXN0XCJcbiAgW2NsYXNzLmF4LXRyZWUyLWNhcmRdPVwibG9vaygpID09PSAnY2FyZCdcIlxuICBbY2xhc3MuYXgtdHJlZTItd2l0aC1saW5lc109XCJsb29rKCkgPT09ICd3aXRoLWxpbmUnXCJcbiAgW2NsYXNzLmF4LXRyZWUyLWNvbXBhY3RdPVwibm9kZUhlaWdodCgpID09PSAnY29tcGFjdCdcIlxuICBbY2xhc3MuYXgtdHJlZTItY29tZm9ydGFibGVdPVwibm9kZUhlaWdodCgpID09PSAnY29tZm9ydGFibGUnXCJcbj5cbiAgQGZvciAobm9kZSBvZiBub2RlcygpOyB0cmFjayBub2RlLmlkKSB7XG4gICAgQGlmIChub2RlLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIFtheERyYWddPVwiZHJhZ01vZGUoKSAhPT0gJ25vbmUnXCJcbiAgICAgICAgW2RyYWdEaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgW2RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgICBjbGFzcz1cImF4LXRyZWUyLW5vZGVcIlxuICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1zZWxlY3RlZF09XCJub2RlLnNlbGVjdGVkXCJcbiAgICAgICAgW2NsYXNzLmF4LXRyZWUyLW5vZGUtZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiXG4gICAgICAgIFtjbGFzcy5heC10cmVlMi1ub2RlLWxvYWRpbmddPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZTItbm9kZS1jb250ZW50XCJcbiAgICAgICAgICBbYXhEcm9wTGlzdF09XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICAgIFtpZF09XCInYXgtdHJlZS1ub2RlLWRyb3AtJyArIG5vZGUuaWRcIlxuICAgICAgICAgIFthdHRyLmRhdGEtbm9kZS1pZF09XCJub2RlLmlkXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLWRyb3AtdHlwZV09XCInb250by1ub2RlJ1wiXG4gICAgICAgICAgZHJvcExpc3RHcm91cD1cImF4LXRyZWUtbm9kZXNcIlxuICAgICAgICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wT250b05vZGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgID5cbiAgICAgICAgICBAaWYgKGRyYWdNb2RlKCkgPT09ICdoYW5kbGVyJykge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cmVlMi1kcmFnLWhhbmRsZVwiIGF4RHJhZ0hhbmRsZSB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPiDii67ii64gPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLWV4cGFuZC10b2dnbGUgYXgtc21cIlxuICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlTm9kZShub2RlLCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgIFtjbGFzcy5heC10cmVlMi1oYXMtY2hpbGRyZW5dPVwic2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlKVwiXG4gICAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItZXhwYW5kZWRdPVwibm9kZS5leHBhbmRlZFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZCB8fCBub2RlLmxvYWRpbmdcIlxuICAgICAgICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwic2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlKSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAaWYgKG5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXNwaW5uZXIgZmEtc3BpbiBheC10cmVlMi1sb2FkaW5nLXNwaW5uZXJcIj48L2k+XG4gICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5leHBhbmRlZCA/IGV4cGFuZGVkSWNvbigpIDogY29sbGFwc2VkSWNvbigpXCIgY2xhc3M9XCJheC10cmVlMi10b2dnbGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICAgIEBpZiAoaXRlbVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlKCkhXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFRlbXBsYXRlQ29udGV4dChub2RlLCAwKVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCgpKSB7XG4gICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJub2RlLmluZGV0ZXJtaW5hdGUgPyBudWxsIDogbm9kZS5zZWxlY3RlZCB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwibm9kZS5pbmRldGVybWluYXRlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidG9nZ2xlU2VsZWN0aW9uKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICA+PC9heC1jaGVjay1ib3g+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHNob3dJY29ucygpICYmIG5vZGUuaWNvbikge1xuICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5pY29uXCIgY2xhc3M9XCJheC10cmVlMi1ub2RlLWljb25cIj48L2k+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRyZWUyLW5vZGUtbGFiZWxcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgQGlmIChzaG93Q2hpbGRyZW5CYWRnZSgpICYmIChub2RlLmNoaWxkcmVuQ291bnQgfHwgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSkpIHtcbiAgICAgICAgICAgICAgPGF4LWJhZGdlXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJheC10cmVlMi1jaGlsZHJlbi1iYWRnZVwiXG4gICAgICAgICAgICAgICAgW3RleHRdPVwiKG5vZGUuY2hpbGRyZW5Db3VudCA/PyBub2RlLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgID48L2F4LWJhZGdlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIEBpZiAobm9kZS5leHBhbmRlZCAmJiBub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdHJlZTItY2hpbGRyZW5cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZHJlbkxpc3RcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgY2hpbGRyZW46IG5vZGUuY2hpbGRyZW4sIHBhcmVudDogbm9kZSwgbGV2ZWw6IDEgfVwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICB9XG4gIH1cbjwvZGl2PlxuXG48IS0tIFJlY3Vyc2l2ZSBjaGlsZHJlbiB0ZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjY2hpbGRyZW5MaXN0IGxldC1jaGlsZHJlbj1cImNoaWxkcmVuXCIgbGV0LXBhcmVudD1cInBhcmVudFwiIGxldC1sZXZlbD1cImxldmVsXCI+XG4gIDxkaXZcbiAgICBbYXhEcm9wTGlzdF09XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgIFtpZF09XCJnZXRMaXN0SWQocGFyZW50KVwiXG4gICAgW2F0dHIuZGF0YS1ub2RlLWlkXT1cInBhcmVudC5pZFwiXG4gICAgZHJvcExpc3RHcm91cD1cImF4LXRyZWUtbm9kZXNcIlxuICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wKCRldmVudCwgcGFyZW50KVwiXG4gICAgY2xhc3M9XCJheC10cmVlMi1kcm9wLWxpc3RcIlxuICA+XG4gICAgQGZvciAobm9kZSBvZiBjaGlsZHJlbjsgdHJhY2sgbm9kZS5pZCkge1xuICAgICAgQGlmIChub2RlLnZpc2libGUgIT09IGZhbHNlKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbYXhEcmFnXT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgICAgICAgW2RyYWdEaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgICBbZHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgICAgY2xhc3M9XCJheC10cmVlMi1ub2RlXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1zZWxlY3RlZF09XCJub2RlLnNlbGVjdGVkXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1sb2FkaW5nXT1cIm5vZGUubG9hZGluZ1wiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLW5vZGUtY29udGVudFwiXG4gICAgICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0LnB4XT1cIihsZXZlbCAqIGluZGVudFNpemUoKSkgLyAobG9vaygpID09PSAnd2l0aC1saW5lJyA/IDMgOiAxKVwiXG4gICAgICAgICAgICBbYXhEcm9wTGlzdF09XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICAgICAgW2lkXT1cIidheC10cmVlLW5vZGUtZHJvcC0nICsgbm9kZS5pZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwibm9kZS5pZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWRyb3AtdHlwZV09XCInb250by1ub2RlJ1wiXG4gICAgICAgICAgICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS1ub2Rlc1wiXG4gICAgICAgICAgICAoZHJvcExpc3REcm9wcGVkKT1cIm9uRHJvcE9udG9Ob2RlKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoZHJhZ01vZGUoKSA9PT0gJ2hhbmRsZXInKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZTItZHJhZy1oYW5kbGVcIiBheERyYWdIYW5kbGUgdGl0bGU9XCJEcmFnIHRvIHJlb3JkZXJcIj4g4ouu4ouuIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJheC10cmVlMi1leHBhbmQtdG9nZ2xlIGF4LXNtXCJcbiAgICAgICAgICAgICAgKG9uQ2xpY2spPVwidG9nZ2xlTm9kZShub2RlLCAkYW55KCRldmVudCkpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUyLWhhcy1jaGlsZHJlbl09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUyLWV4cGFuZGVkXT1cIm5vZGUuZXhwYW5kZWRcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZCB8fCBub2RlLmxvYWRpbmdcIlxuICAgICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBAaWYgKG5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1zcGlubmVyIGZhLXNwaW4gYXgtdHJlZTItbG9hZGluZy1zcGlubmVyXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5leHBhbmRlZCA/IGV4cGFuZGVkSWNvbigpIDogY29sbGFwc2VkSWNvbigpXCIgY2xhc3M9XCJheC10cmVlMi10b2dnbGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvYXgtYnV0dG9uPlxuXG4gICAgICAgICAgICBAaWYgKGl0ZW1UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGUoKSFcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRUZW1wbGF0ZUNvbnRleHQobm9kZSwgbGV2ZWwpXCJcbiAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIEBpZiAoc2hvd0NoZWNrYm94KCkpIHtcbiAgICAgICAgICAgICAgICA8YXgtY2hlY2stYm94XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSA/IG51bGwgOiBub2RlLnNlbGVjdGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSB8fCBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAob25WYWx1ZUNoYW5nZWQpPVwidG9nZ2xlU2VsZWN0aW9uKG5vZGUsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICA+PC9heC1jaGVjay1ib3g+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChzaG93SWNvbnMoKSAmJiBub2RlLmljb24pIHtcbiAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwibm9kZS5pY29uXCIgY2xhc3M9XCJheC10cmVlMi1ub2RlLWljb25cIj48L2k+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cmVlMi1ub2RlLWxhYmVsXCI+e3sgbm9kZS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgQGlmIChzaG93Q2hpbGRyZW5CYWRnZSgpICYmIChub2RlLmNoaWxkcmVuQ291bnQgfHwgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSkpIHtcbiAgICAgICAgICAgICAgICA8YXgtYmFkZ2VcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZTItY2hpbGRyZW4tYmFkZ2VcIlxuICAgICAgICAgICAgICAgICAgW3RleHRdPVwiKG5vZGUuY2hpbGRyZW5Db3VudCA/PyBub2RlLmNoaWxkcmVuPy5sZW5ndGggPz8gMCkudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgICAgPjwvYXgtYmFkZ2U+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAobm9kZS5leHBhbmRlZCAmJiBub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC10cmVlMi1jaGlsZHJlblwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGlsZHJlbkxpc3RcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiwgcGFyZW50OiBub2RlLCBsZXZlbDogbGV2ZWwgKyAxIH1cIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=","import { NgModule } from '@angular/core';\nimport { AXTree2Component } from './tree2.component';\nimport * as i0 from \"@angular/core\";\nexport class Tree2Module {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: Tree2Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.6\", ngImport: i0, type: Tree2Module, imports: [AXTree2Component] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: Tree2Module, imports: [AXTree2Component] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.6\", ngImport: i0, type: Tree2Module, decorators: [{\n type: NgModule,\n args: [{\n imports: [AXTree2Component],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZTIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlMi9zcmMvbGliL3RyZWUyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUtyRCxNQUFNLE9BQU8sV0FBVzs4R0FBWCxXQUFXOytHQUFYLFdBQVcsWUFGWixnQkFBZ0I7K0dBRWYsV0FBVyxZQUZaLGdCQUFnQjs7MkZBRWYsV0FBVztrQkFIdkIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztpQkFDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhUcmVlMkNvbXBvbmVudCB9IGZyb20gJy4vdHJlZTIuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0FYVHJlZTJDb21wb25lbnRdLFxufSlcbmV4cG9ydCBjbGFzcyBUcmVlMk1vZHVsZSB7fVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNvcmV4LWNvbXBvbmVudHMtdHJlZTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3RyZWUyL3NyYy9hY29yZXgtY29tcG9uZW50cy10cmVlMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@acorex/components",
3
- "version": "21.0.0-next.13",
3
+ "version": "21.0.0-next.14",
4
4
  "peerDependencies": {
5
- "@acorex/core": "21.0.0-next.13",
6
- "@acorex/cdk": "21.0.0-next.13",
5
+ "@acorex/core": "21.0.0-next.14",
6
+ "@acorex/cdk": "21.0.0-next.14",
7
7
  "@angular/common": "^20.0.0",
8
8
  "@angular/core": "^20.0.0",
9
9
  "@angular/cdk": "^20.0.0",
@@ -68,14 +68,14 @@
68
68
  "types": "./accordion/index.d.ts",
69
69
  "default": "./fesm2022/acorex-components-accordion.mjs"
70
70
  },
71
- "./alert": {
72
- "types": "./alert/index.d.ts",
73
- "default": "./fesm2022/acorex-components-alert.mjs"
74
- },
75
71
  "./action-sheet": {
76
72
  "types": "./action-sheet/index.d.ts",
77
73
  "default": "./fesm2022/acorex-components-action-sheet.mjs"
78
74
  },
75
+ "./alert": {
76
+ "types": "./alert/index.d.ts",
77
+ "default": "./fesm2022/acorex-components-alert.mjs"
78
+ },
79
79
  "./aspect-ratio": {
80
80
  "types": "./aspect-ratio/index.d.ts",
81
81
  "default": "./fesm2022/acorex-components-aspect-ratio.mjs"
package/tree2/index.d.ts CHANGED
@@ -2,7 +2,6 @@ import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef } from '@angular/core';
3
3
  import { AXEvent, AXHtmlEvent, AXValueChangedEvent } from '@acorex/cdk/common';
4
4
  import { AXDropListDroppedEvent } from '@acorex/cdk/drag-drop';
5
- import * as i1 from '@angular/common';
6
5
 
7
6
  /**
8
7
  * Tree2 Component - Design Tokens
@@ -330,7 +329,7 @@ declare class AXTree2Component {
330
329
 
331
330
  declare class Tree2Module {
332
331
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<Tree2Module, never>;
333
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<Tree2Module, never, [typeof i1.CommonModule], never>;
332
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<Tree2Module, never, [typeof AXTree2Component], never>;
334
333
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<Tree2Module>;
335
334
  }
336
335