@acorex/components 21.0.0-next.10 → 21.0.0-next.12
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.
- package/autocomplete/index.d.ts +13 -9
 - package/fesm2022/acorex-components-autocomplete.mjs +13 -6
 - package/fesm2022/acorex-components-autocomplete.mjs.map +1 -1
 - package/fesm2022/acorex-components-color-palette.mjs +1 -1
 - package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
 - package/fesm2022/acorex-components-cron-job.mjs +6 -6
 - package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
 - package/fesm2022/acorex-components-kanban.mjs +1 -1
 - package/fesm2022/acorex-components-kanban.mjs.map +1 -1
 - package/fesm2022/acorex-components-map.mjs +1 -0
 - package/fesm2022/acorex-components-map.mjs.map +1 -1
 - package/fesm2022/acorex-components-media-viewer.mjs +2 -2
 - package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
 - package/fesm2022/{acorex-components-modal-acorex-components-modal-ClSGRCam.mjs → acorex-components-modal-acorex-components-modal-BLjJGxLT.mjs} +2 -2
 - package/fesm2022/{acorex-components-modal-acorex-components-modal-ClSGRCam.mjs.map → acorex-components-modal-acorex-components-modal-BLjJGxLT.mjs.map} +1 -1
 - package/fesm2022/{acorex-components-modal-modal-content.component-BC-z7O0z.mjs → acorex-components-modal-modal-content.component-CC_L42pt.mjs} +4 -4
 - package/fesm2022/acorex-components-modal-modal-content.component-CC_L42pt.mjs.map +1 -0
 - package/fesm2022/acorex-components-modal.mjs +1 -1
 - package/fesm2022/acorex-components-phone-box.mjs +1 -1
 - package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
 - package/fesm2022/acorex-components-query-builder.mjs +1 -1
 - package/fesm2022/acorex-components-query-builder.mjs.map +1 -1
 - package/fesm2022/acorex-components-rest-api-generator.mjs +3 -3
 - package/fesm2022/acorex-components-rest-api-generator.mjs.map +1 -1
 - package/fesm2022/acorex-components-rrule.mjs +128 -33
 - package/fesm2022/acorex-components-rrule.mjs.map +1 -1
 - package/fesm2022/acorex-components-scheduler.mjs +8 -8
 - package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
 - package/fesm2022/acorex-components-select-box.mjs +18 -8
 - package/fesm2022/acorex-components-select-box.mjs.map +1 -1
 - package/fesm2022/acorex-components-selection-list-2.mjs +165 -0
 - package/fesm2022/acorex-components-selection-list-2.mjs.map +1 -0
 - package/fesm2022/acorex-components-selection-list.mjs +69 -14
 - package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
 - package/fesm2022/acorex-components-tag-box.mjs +45 -15
 - package/fesm2022/acorex-components-tag-box.mjs.map +1 -1
 - package/fesm2022/acorex-components-tag.mjs +39 -3
 - package/fesm2022/acorex-components-tag.mjs.map +1 -1
 - package/fesm2022/acorex-components-tree2.mjs +596 -0
 - package/fesm2022/acorex-components-tree2.mjs.map +1 -0
 - package/package.json +14 -10
 - package/rrule/index.d.ts +99 -4
 - package/select-box/index.d.ts +14 -10
 - package/selection-list/README.md +2 -2
 - package/selection-list/index.d.ts +57 -16
 - package/selection-list-2/README.md +3 -0
 - package/selection-list-2/index.d.ts +52 -0
 - package/tag/index.d.ts +8 -2
 - package/tag-box/index.d.ts +12 -3
 - package/tree2/README.md +3 -0
 - package/tree2/index.d.ts +267 -0
 - package/fesm2022/acorex-components-modal-modal-content.component-BC-z7O0z.mjs.map +0 -1
 - package/fesm2022/acorex-components-selection-list-legacy.mjs +0 -220
 - package/fesm2022/acorex-components-selection-list-legacy.mjs.map +0 -1
 - package/selection-list-legacy/README.md +0 -3
 - package/selection-list-legacy/index.d.ts +0 -93
 
| 
         @@ -0,0 +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        /** 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        /** 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        /** Whether to animate expand/collapse */\n        this.animated = input(true, ...(ngDevMode ? [{ debugName: \"animated\" }] : []));\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.nodeToggle = output();\n        /** Emitted when a node is selected/deselected */\n        this.nodeSelect = output();\n        /** Emitted when a node is dropped */\n        this.nodeDrop = 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 = node.children && node.children.length > 0;\n        const canLazyLoad = this.enableLazyLoad() && node.childrenCount && node.childrenCount > 0 && !hasChildren;\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.nodeToggle.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.nodeSelect.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        if (event.previousContainer === event.container) {\n            // Reordering within the same list\n            moveItemInArray(targetArray, event.previousIndex, event.currentIndex);\n        }\n        else {\n            // Moving between different lists\n            const sourceListId = event.previousContainer.element.id;\n            const sourceArray = this.getArrayByListId(sourceListId);\n            if (sourceArray) {\n                const movedNode = sourceArray[event.previousIndex];\n                // CRITICAL: Prevent dropping a node into its own descendants (circular reference)\n                if (parentNode && this.isNodeDescendantOf(parentNode, movedNode)) {\n                    console.warn('Cannot drop a node into its own descendants');\n                    // Do NOT transfer the item - just return early\n                    return;\n                }\n                // Emit beforeDrop event - user can cancel by setting canceled = true\n                const beforeDropEvent = {\n                    component: this,\n                    movedNode,\n                    previousParent: this.findParentByListId(sourceListId),\n                    currentParent: parentNode,\n                    previousIndex: event.previousIndex,\n                    currentIndex: event.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;\n                }\n                transferArrayItem(sourceArray, targetArray, event.previousIndex, event.currentIndex);\n                // Emit drop event\n                this.nodeDrop.emit({\n                    component: this,\n                    node: movedNode,\n                    previousParent: this.findParentByListId(sourceListId),\n                    currentParent: parentNode,\n                    previousIndex: event.previousIndex,\n                    currentIndex: event.currentIndex,\n                });\n            }\n        }\n        // Update the signal to trigger change detection\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        const sourceListId = event.previousContainer.element.id;\n        const sourceArray = this.getArrayByListId(sourceListId);\n        if (!sourceArray)\n            return;\n        const movedNode = sourceArray[event.previousIndex];\n        // CRITICAL: Prevent dropping a node onto itself or its descendants\n        if (movedNode.id === targetNode.id || this.isNodeDescendantOf(targetNode, movedNode)) {\n            console.warn('Cannot drop a node onto itself or its descendants');\n            return;\n        }\n        // Emit beforeDrop event - user can cancel by setting canceled = true\n        const beforeDropEvent = {\n            component: this,\n            movedNode,\n            previousParent: this.findParentByListId(sourceListId),\n            currentParent: targetNode,\n            previousIndex: event.previousIndex,\n            currentIndex: 0, // Always first child when dropping onto node\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;\n        }\n        // Initialize children array if it doesn't exist\n        if (!targetNode.children) {\n            targetNode.children = [];\n        }\n        // Remove from source\n        sourceArray.splice(event.previousIndex, 1);\n        // Add as first child of target node\n        targetNode.children.unshift(movedNode);\n        // Auto-expand the target node to show the new child\n        targetNode.expanded = true;\n        // Emit drop event\n        this.nodeDrop.emit({\n            component: this,\n            node: movedNode,\n            previousParent: this.findParentByListId(sourceListId),\n            currentParent: targetNode,\n            previousIndex: event.previousIndex,\n            currentIndex: 0,\n        });\n        // Update the signal to trigger change detection\n        this.nodes.set([...this.nodes()]);\n    }\n    /**\n     * Get array reference by drop list ID\n     */\n    getArrayByListId(listId) {\n        if (listId === 'ax-tree-root-list') {\n            return this.nodes();\n        }\n        // Handle node drop zones (dropping onto a node)\n        if (listId.startsWith('ax-tree-node-drop-')) {\n            const nodeId = listId.replace('ax-tree-node-drop-', '');\n            const node = this.findNodeById(this.nodes(), nodeId);\n            return node ? [node] : null;\n        }\n        // Handle children list drop zones\n        const nodeId = listId.replace('ax-tree-list-', '');\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 === 'ax-tree-root-list') {\n            return undefined;\n        }\n        // Handle node drop zones\n        if (listId.startsWith('ax-tree-node-drop-')) {\n            const nodeId = listId.replace('ax-tree-node-drop-', '');\n            return this.findNodeById(this.nodes(), nodeId) || undefined;\n        }\n        // Handle children list drop zones\n        const nodeId = listId.replace('ax-tree-list-', '');\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 ? `ax-tree-list-${node.id}` : 'ax-tree-root-list';\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 = node.children && node.children.length > 0;\n            const canLazyLoad = this.enableLazyLoad() && node.childrenCount && node.childrenCount > 0 && !hasChildren;\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     * 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     * 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 ((node.children && node.children.length > 0) ||\n            (this.enableLazyLoad() && node.childrenCount && node.childrenCount > 0) ||\n            false);\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 }, showIcons: { classPropertyName: \"showIcons\", publicName: \"showIcons\", isSignal: true, isRequired: false, transformFunction: null }, showChildrenBadge: { classPropertyName: \"showChildrenBadge\", publicName: \"showChildrenBadge\", isSignal: true, isRequired: false, transformFunction: null }, animated: { classPropertyName: \"animated\", publicName: \"animated\", 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\", nodeToggle: \"nodeToggle\", nodeSelect: \"nodeSelect\", nodeDrop: \"nodeDrop\" }, 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-animated]=\\\"animated()\\\"\\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:.25rem;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-animated]=\\\"animated()\\\"\\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:.25rem;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 }] }], showIcons: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showIcons\", required: false }] }], showChildrenBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: \"showChildrenBadge\", required: false }] }], animated: [{ type: i0.Input, args: [{ isSignal: true, alias: \"animated\", 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\"] }], nodeToggle: [{ type: i0.Output, args: [\"nodeToggle\"] }], nodeSelect: [{ type: i0.Output, args: [\"nodeSelect\"] }], nodeDrop: [{ type: i0.Output, args: [\"nodeDrop\"] }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZTIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90cmVlMi9zcmMvbGliL3RyZWUyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdHJlZTIvc3JjL2xpYi90cmVlMi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixtQkFBbUIsRUFFbkIsZUFBZSxFQUNmLGlCQUFpQixHQUNsQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzVELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxpQkFBaUIsRUFDakIsTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUF1QzdDLE1BQU0sT0FBTyxnQkFBZ0I7SUE1QjdCO1FBNkJFLHNCQUFzQjtRQUN0QixVQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsZ0RBQWdCLENBQUM7UUFFdkMsK0NBQStDO1FBQy9DLGlCQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksd0RBQUMsQ0FBQztRQUUzQiwyRkFBMkY7UUFDM0YsYUFBUSxHQUFH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QkFBNEIsRUFBRSx3QkFBd0I7d0JBQ3RELCtCQUErQixFQUFFLHFCQUFxQjt3QkFDdEQsK0JBQStCLEVBQUUsMkJBQTJCO3FCQUM3RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYVmFsdWVDaGFuZ2VkRXZlbnQgfSBmcm9tICdAYWNvcmV4L2Nkay9jb21tb24nO1xuaW1wb3J0IHtcbiAgQVhEcmFnRGlyZWN0aXZlLFxuICBBWERyYWdIYW5kbGVEaXJlY3RpdmUsXG4gIEFYRHJvcExpc3REaXJlY3RpdmUsXG4gIEFYRHJvcExpc3REcm9wcGVkRXZlbnQsXG4gIG1vdmVJdGVtSW5BcnJheSxcbiAgdHJhbnNmZXJBcnJheUl0ZW0sXG59IGZyb20gJ0BhY29yZXgvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBBWEJhZGdlQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2JhZGdlJztcbmltcG9ydCB7IEFYQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2J1dHRvbic7XG5pbXBvcnQgeyBBWENoZWNrQm94Q29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NoZWNrLWJveCc7XG5pbXBvcnQgeyBBWERlY29yYXRvckljb25Db21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBlZmZlY3QsXG4gIGlucHV0LFxuICBtb2RlbCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBBWFRyZWVEcmFnTW9kZSxcbiAgQVhUcmVlRHJvcEV2ZW50LFxuICBBWFRyZWVJdGVtVGVtcGxhdGVDb250ZXh0LFxuICBBWFRyZWVOb2RlLFxuICBBWFRyZWVOb2RlRXZlbnQsXG4gIEFYVHJlZU5vZGVPbkJlZm9yZURyb3BFdmVudCxcbiAgQVhUcmVlVmlld0xvb2ssXG59IGZyb20gJy4vdHJlZTIudHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdheC10cmVlMicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi90cmVlMi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RyZWUyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIEFYRHJhZ0RpcmVjdGl2ZSxcbiAgICBBWERyYWdIYW5kbGVEaXJlY3RpdmUsXG4gICAgQVhEcm9wTGlzdERpcmVjdGl2ZSxcbiAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgIEFYQnV0dG9uQ29tcG9uZW50LFxuICAgIEFYQ2hlY2tCb3hDb21wb25lbnQsXG4gICAgQVhCYWRnZUNvbXBvbmVudCxcbiAgICBBWERlY29yYXRvckljb25Db21wb25lbnQsXG4gIF0sXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ2F4LXRyZWUyJyxcbiAgICAnW2NsYXNzLmF4LXRyZWUyLWRlZmF1bHRdJzogXCJsb29rKCkgPT09ICdkZWZhdWx0J1wiLFxuICAgICdbY2xhc3MuYXgtdHJlZTItY2FyZF0nOiBcImxvb2soKSA9PT0gJ2NhcmQnXCIsXG4gICAgJ1tjbGFzcy5heC10cmVlMi13aXRoLWxpbmVdJzogXCJsb29rKCkgPT09ICd3aXRoLWxpbmUnXCIsXG4gICAgJ1tzdHlsZS4tLWF4LXRyZWUtaW5kZW50LXNpemVdJzogXCJpbmRlbnRTaXplKCkgKyAncHgnXCIsXG4gICAgJ1tzdHlsZS4tLWF4LXRyZWUtbGluZS1vZmZzZXRdJzogXCIoaW5kZW50U2l6ZSgpIC8gMikgKyAncHgnXCIsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFYVHJlZTJDb21wb25lbnQge1xuICAvKiogVHJlZSBkYXRhIG5vZGVzICovXG4gIG5vZGVzID0gbW9kZWwucmVxdWlyZWQ8QVhUcmVlTm9kZVtdPigpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgY2hlY2tib3hlcyBmb3Igc2VsZWN0aW9uICovXG4gIHNob3dDaGVja2JveCA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBEcmFnIGFuZCBkcm9wIG1vZGU6ICdub25lJyAoZGlzYWJsZWQpLCAnaGFuZGxlcicgKGRyYWcgaGFuZGxlKSwgJ2l0ZW0nIChlbnRpcmUgaXRlbSkgKi9cbiAgZHJhZ01vZGUgPSBpbnB1dDxBWFRyZWVEcmFnTW9kZT4oJ2hhbmRsZXInKTtcblxuICAvKiogV2hldGhlciB0byBzaG93IGljb25zICovXG4gIHNob3dJY29ucyA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgY2hpbGRyZW4gY291bnQgYmFkZ2UgKi9cbiAgc2hvd0NoaWxkcmVuQmFkZ2UgPSBpbnB1dCh0cnVlKTtcblxuICAvKiogV2hldGhlciB0byBhbmltYXRlIGV4cGFuZC9jb2xsYXBzZSAqL1xuICBhbmltYXRlZCA9IGlucHV0KHRydWUpO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBmb3IgZXhwYW5kZWQgbm9kZXMgKi9cbiAgZXhwYW5kZWRJY29uID0gaW5wdXQoJ2ZhLXNvbGlkIGZhLWNoZXZyb24tZG93bicpO1xuXG4gIC8qKiBDdXN0b20gaWNvbiBmb3IgY29sbGFwc2VkIG5vZGVzICovXG4gIGNvbGxhcHNlZEljb24gPSBpbnB1dCgnZmEtc29saWQgZmEtY2hldnJvbi1yaWdodCcpO1xuXG4gIC8qKiBJbmRlbnQgc2l6ZSBpbiBwaXhlbHMgZm9yIGVhY2ggbGV2ZWwgKi9cbiAgaW5kZW50U2l6ZSA9IGlucHV0KDEyKTtcblxuICAvKiogTm9kZSBoZWlnaHQgaW4gcGl4ZWxzICovXG4gIG5vZGVIZWlnaHQgPSBpbnB1dDwnY29tcGFjdCcgfCAnbm9ybWFsJyB8ICdjb21mb3J0YWJsZSc+KCdub3JtYWwnKTtcblxuICAvKiogVmlzdWFsIHN0eWxlIHZhcmlhbnQgKi9cbiAgbG9vayA9IGlucHV0PEFYVHJlZVZpZXdMb29rPignZGVmYXVsdCcpO1xuXG4gIC8qKiBDdXN0b20gdGVtcGxhdGUgZm9yIHRyZWUgaXRlbXMgKi9cbiAgaXRlbVRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8QVhUcmVlSXRlbVRlbXBsYXRlQ29udGV4dD4+KCk7XG5cbiAgLyoqIExhenkgbG9hZCBmdW5jdGlvbiBmb3IgZmV0Y2hpbmcgY2hpbGRyZW4gKi9cbiAgbGF6eUxvYWQgPSBpbnB1dDwobm9kZTogQVhUcmVlTm9kZSkgPT4gUHJvbWlzZTxBWFRyZWVOb2RlW10+PigpO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGVuYWJsZSBsYXp5IGxvYWRpbmcgKi9cbiAgZW5hYmxlTGF6eUxvYWQgPSBpbnB1dChmYWxzZSk7XG5cbiAgLyoqIEVtaXR0ZWQgYmVmb3JlIGEgZHJvcCBvcGVyYXRpb24gLSBzZXQgY2FuY2VsZWQgdG8gdHJ1ZSB0byBwcmV2ZW50IGRyb3AgKi9cbiAgb25CZWZvcmVEcm9wID0gb3V0cHV0PEFYVHJlZU5vZGVPbkJlZm9yZURyb3BFdmVudD4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIGEgbm9kZSBpcyB0b2dnbGVkIChleHBhbmRlZC9jb2xsYXBzZWQpICovXG4gIG5vZGVUb2dnbGUgPSBvdXRwdXQ8QVhUcmVlTm9kZUV2ZW50PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBub2RlIGlzIHNlbGVjdGVkL2Rlc2VsZWN0ZWQgKi9cbiAgbm9kZVNlbGVjdCA9IG91dHB1dDxBWFRyZWVOb2RlRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiBhIG5vZGUgaXMgZHJvcHBlZCAqL1xuICBub2RlRHJvcCA9IG91dHB1dDxBWFRyZWVEcm9wRXZlbnQ+KCk7XG5cbiAgLyoqIEludGVybmFsIHNpZ25hbCBmb3IgdHJhY2tpbmcgbG9hZGluZyBzdGF0ZSAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbG9hZGluZ05vZGVzID0gc2lnbmFsPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpO1xuXG4gIC8qKiBFZmZlY3QgdG8gaGFuZGxlIGxhenkgbG9hZCBmdW5jdGlvbiBjaGFuZ2VzICovXG4gICNsYXp5TG9hZEVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgbGF6eUxvYWRGbiA9IHRoaXMubGF6eUxvYWQoKTtcbiAgICBjb25zdCBlbmFibGVkID0gdGhpcy5lbmFibGVMYXp5TG9hZCgpO1xuICAgIGlmIChsYXp5TG9hZEZuICYmIGVuYWJsZWQpIHtcbiAgICAgIC8vIEluaXRpYWxpemUgbGF6eSBsb2FkaW5nIHN0YXRlXG4gICAgICB0aGlzLnVwZGF0ZUhhc0NoaWxkcmVuRmxhZ3ModGhpcy5ub2RlcygpKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUb2dnbGUgbm9kZSBleHBhbnNpb24gc3RhdGUgd2l0aCBsYXp5IGxvYWRpbmcgc3VwcG9ydFxuICAgKi9cbiAgYXN5bmMgdG9nZ2xlTm9kZShub2RlOiBBWFRyZWVOb2RlLCBldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAobm9kZS5kaXNhYmxlZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjYW5MYXp5TG9hZCA9IHRoaXMuZW5hYmxlTGF6eUxvYWQoKSAmJiBub2RlLmNoaWxkcmVuQ291bnQgJiYgbm9kZS5jaGlsZHJlbkNvdW50ID4gMCAmJiAhaGFzQ2hpbGRyZW47XG5cbiAgICBpZiAoaGFzQ2hpbGRyZW4gfHwgY2FuTGF6eUxvYWQpIHtcbiAgICAgIGNvbnN0IHdpbGxFeHBhbmQgPSAhbm9kZS5leHBhbmRlZDtcblxuICAgICAgaWYgKHdpbGxFeHBhbmQgJiYgY2FuTGF6eUxvYWQpIHtcbiAgICAgICAgLy8gTGF6eSBsb2FkIGNoaWxkcmVuIGJlZm9yZSBleHBhbmRpbmdcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkTm9kZUNoaWxkcmVuKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBub2RlLmV4cGFuZGVkID0gd2lsbEV4cGFuZDtcbiAgICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgICAgIHRoaXMubm9kZVRvZ2dsZS5lbWl0KHsgY29tcG9uZW50OiB0aGlzLCBub2RlLCBuYXRpdmVFdmVudDogZXZlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgY2hpbGRyZW4gZm9yIGEgbm9kZSB1c2luZyBsYXp5IGxvYWRpbmdcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgbG9hZE5vZGVDaGlsZHJlbihub2RlOiBBWFRyZWVOb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGF6eUxvYWRGbiA9IHRoaXMubGF6eUxvYWQoKTtcbiAgICBpZiAoIWxhenlMb2FkRm4gfHwgbm9kZS5sb2FkaW5nKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgbm9kZS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMubG9hZGluZ05vZGVzLnVwZGF0ZSgoc2V0KSA9PiBuZXcgU2V0KHNldCkuYWRkKG5vZGUuaWQpKTtcbiAgICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcblxuICAgICAgY29uc3QgY2hpbGRyZW4gPSBhd2FpdCBsYXp5TG9hZEZuKG5vZGUpO1xuICAgICAgbm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgbm9kZS5jaGlsZHJlbkNvdW50ID0gY2hpbGRyZW4ubGVuZ3RoO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBjaGlsZHJlbjonLCBlcnJvcik7XG4gICAgICBub2RlLmNoaWxkcmVuQ291bnQgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBub2RlLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubG9hZGluZ05vZGVzLnVwZGF0ZSgoc2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoc2V0KTtcbiAgICAgICAgbmV3U2V0LmRlbGV0ZShub2RlLmlkKTtcbiAgICAgICAgcmV0dXJuIG5ld1NldDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgY2hpbGRyZW5Db3VudCBmbGFncyBmb3IgbGF6eSBsb2FkaW5nXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUhhc0NoaWxkcmVuRmxhZ3Mobm9kZXM6IEFYVHJlZU5vZGVbXSk6IHZvaWQge1xuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuQ291bnQgPT09IHVuZGVmaW5lZCAmJiAhbm9kZS5jaGlsZHJlbikge1xuICAgICAgICBub2RlLmNoaWxkcmVuQ291bnQgPSAwO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy51cGRhdGVIYXNDaGlsZHJlbkZsYWdzKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBub2RlIHNlbGVjdGlvbiBzdGF0ZSB3aXRoIGluZGV0ZXJtaW5hdGUgc3VwcG9ydFxuICAgKi9cbiAgdG9nZ2xlU2VsZWN0aW9uKG5vZGU6IEFYVHJlZU5vZGUsIGV2ZW50OiBBWFZhbHVlQ2hhbmdlZEV2ZW50KTogdm9pZCB7XG4gICAgLy8gQ1JJVElDQUw6IE9ubHkgcHJvY2VzcyBpZiB0aGlzIGlzIGEgcmVhbCB1c2VyIGludGVyYWN0aW9uXG4gICAgLy8gUHJldmVudHMgY2FzY2FkZSB3aGVuIHBhcmVudCBzdGF0ZSBjaGFuZ2VzIHRyaWdnZXIgY2hlY2tib3ggbmdNb2RlbENoYW5nZVxuICAgIGlmICghZXZlbnQuaXNVc2VySW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgbnVsbCB2YWx1ZSAoaW5kZXRlcm1pbmF0ZSBzdGF0ZSBjbGlja2VkKSAtIHRyZWF0IGFzIHNlbGVjdFxuICAgIGNvbnN0IG5ld1ZhbHVlID0gZXZlbnQudmFsdWUgPT09IG51bGwgPyB0cnVlIDogZXZlbnQudmFsdWU7XG5cbiAgICBub2RlLnNlbGVjdGVkID0gbmV3VmFsdWU7XG4gICAgbm9kZS5pbmRldGVybWluYXRlID0gZmFsc2U7IC8vIENsZWFyIGluZGV0ZXJtaW5hdGUgd2hlbiBleHBsaWNpdGx5IHRvZ2dsZWRcblxuICAgIC8vIFNlbGVjdC9kZXNlbGVjdCBhbGwgY2hpbGRyZW4gcmVjdXJzaXZlbHlcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgdGhpcy5zZWxlY3RBbGxDaGlsZHJlbihub2RlLmNoaWxkcmVuLCBuZXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHBhcmVudCBzdGF0ZXMgdXAgdGhlIHRyZWVcbiAgICB0aGlzLnVwZGF0ZVBhcmVudFN0YXRlcyh0aGlzLm5vZGVzKCksIG5vZGUpO1xuXG4gICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuICAgIHRoaXMubm9kZVNlbGVjdC5lbWl0KHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIG5vZGUsXG4gICAgICBpc1VzZXJJbnRlcmFjdGlvbjogZXZlbnQuaXNVc2VySW50ZXJhY3Rpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgc2VsZWN0L2Rlc2VsZWN0IGFsbCBjaGlsZHJlblxuICAgKi9cbiAgcHJpdmF0ZSBzZWxlY3RBbGxDaGlsZHJlbihjaGlsZHJlbjogQVhUcmVlTm9kZVtdLCBzZWxlY3RlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBjaGlsZC5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgY2hpbGQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgaWYgKGNoaWxkLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIHNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgcGFyZW50IG5vZGUgc3RhdGVzIGJhc2VkIG9uIGNoaWxkcmVuIHNlbGVjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVQYXJlbnRTdGF0ZXMobm9kZXM6IEFYVHJlZU5vZGVbXSwgY2hhbmdlZE5vZGU6IEFYVHJlZU5vZGUpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZpbmRQYXJlbnROb2RlKG5vZGVzLCBjaGFuZ2VkTm9kZSk7XG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5jaGlsZHJlbikgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBhbGxTZWxlY3RlZCwgc29tZVNlbGVjdGVkIH0gPSB0aGlzLmdldENoaWxkcmVuU2VsZWN0aW9uU3RhdGUocGFyZW50LmNoaWxkcmVuKTtcblxuICAgIGlmIChhbGxTZWxlY3RlZCkge1xuICAgICAgLy8gQWxsIGNoaWxkcmVuIHNlbGVjdGVkIOKGkiBwYXJlbnQgaXMgc2VsZWN0ZWRcbiAgICAgIHBhcmVudC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICBwYXJlbnQuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoc29tZVNlbGVjdGVkKSB7XG4gICAgICAvLyBTb21lIGNoaWxkcmVuIHNlbGVjdGVkIOKGkiBwYXJlbnQgaXMgaW5kZXRlcm1pbmF0ZVxuICAgICAgLy8gS2VlcCBzZWxlY3RlZD10cnVlIHRvIG1haW50YWluIGNvbnNpc3RlbnQgc3RhdGUgYW5kIHByZXZlbnQgaXNzdWVzIHdpdGggZGVsZXRlU2VsZWN0ZWQoKVxuICAgICAgcGFyZW50LnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHBhcmVudC5pbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2hpbGRyZW4gc2VsZWN0ZWQg4oaSIHBhcmVudCBpcyB1bnNlbGVjdGVkXG4gICAgICBwYXJlbnQuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIHBhcmVudC5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlbHkgdXBkYXRlIGdyYW5kcGFyZW50c1xuICAgIHRoaXMudXBkYXRlUGFyZW50U3RhdGVzKG5vZGVzLCBwYXJlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWxlY3Rpb24gc3RhdGUgb2YgY2hpbGRyZW5cbiAgICovXG4gIHByaXZhdGUgZ2V0Q2hpbGRyZW5TZWxlY3Rpb25TdGF0ZShjaGlsZHJlbjogQVhUcmVlTm9kZVtdKTogeyBhbGxTZWxlY3RlZDogYm9vbGVhbjsgc29tZVNlbGVjdGVkOiBib29sZWFuIH0ge1xuICAgIGxldCBzZWxlY3RlZENvdW50ID0gMDtcbiAgICBsZXQgaW5kZXRlcm1pbmF0ZUNvdW50ID0gMDtcblxuICAgIGNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAvLyBPbmx5IGNvdW50IGZ1bGx5IHNlbGVjdGVkIGNoaWxkcmVuIChub3QgaW5kZXRlcm1pbmF0ZSlcbiAgICAgIGlmIChjaGlsZC5zZWxlY3RlZCAmJiAhY2hpbGQuaW5kZXRlcm1pbmF0ZSkgc2VsZWN0ZWRDb3VudCsrO1xuICAgICAgaWYgKGNoaWxkLmluZGV0ZXJtaW5hdGUpIGluZGV0ZXJtaW5hdGVDb3VudCsrO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBzZWxlY3RlZENvdW50ID09PSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgY29uc3Qgc29tZVNlbGVjdGVkID0gc2VsZWN0ZWRDb3VudCA+IDAgfHwgaW5kZXRlcm1pbmF0ZUNvdW50ID4gMDtcblxuICAgIHJldHVybiB7IGFsbFNlbGVjdGVkLCBzb21lU2VsZWN0ZWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIHBhcmVudCBub2RlIG9mIGEgZ2l2ZW4gbm9kZVxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kUGFyZW50Tm9kZShub2RlczogQVhUcmVlTm9kZVtdLCB0YXJnZXROb2RlOiBBWFRyZWVOb2RlKTogQVhUcmVlTm9kZSB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbj8uc29tZSgoY2hpbGQpID0+IGNoaWxkLmlkID09PSB0YXJnZXROb2RlLmlkKSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kUGFyZW50Tm9kZShub2RlLmNoaWxkcmVuLCB0YXJnZXROb2RlKTtcbiAgICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGRyb3AgZXZlbnRzIGZvciB0cmVlIG5vZGVzXG4gICAqL1xuICBvbkRyb3AoZXZlbnQ6IEFYRHJvcExpc3REcm9wcGVkRXZlbnQsIHBhcmVudE5vZGU/OiBBWFRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0QXJyYXkgPSBwYXJlbnROb2RlPy5jaGlsZHJlbiA/PyB0aGlzLm5vZGVzKCk7XG5cbiAgICBpZiAoZXZlbnQucHJldmlvdXNDb250YWluZXIgPT09IGV2ZW50LmNvbnRhaW5lcikge1xuICAgICAgLy8gUmVvcmRlcmluZyB3aXRoaW4gdGhlIHNhbWUgbGlzdFxuICAgICAgbW92ZUl0ZW1JbkFycmF5KHRhcmdldEFycmF5LCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNb3ZpbmcgYmV0d2VlbiBkaWZmZXJlbnQgbGlzdHNcbiAgICAgIGNvbnN0IHNvdXJjZUxpc3RJZCA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmVsZW1lbnQuaWQ7XG4gICAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuXG4gICAgICBpZiAoc291cmNlQXJyYXkpIHtcbiAgICAgICAgY29uc3QgbW92ZWROb2RlID0gc291cmNlQXJyYXlbZXZlbnQucHJldmlvdXNJbmRleF07XG5cbiAgICAgICAgLy8gQ1JJVElDQUw6IFByZXZlbnQgZHJvcHBpbmcgYSBub2RlIGludG8gaXRzIG93biBkZXNjZW5kYW50cyAoY2lyY3VsYXIgcmVmZXJlbmNlKVxuICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiB0aGlzLmlzTm9kZURlc2NlbmRhbnRPZihwYXJlbnROb2RlLCBtb3ZlZE5vZGUpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdDYW5ub3QgZHJvcCBhIG5vZGUgaW50byBpdHMgb3duIGRlc2NlbmRhbnRzJyk7XG4gICAgICAgICAgLy8gRG8gTk9UIHRyYW5zZmVyIHRoZSBpdGVtIC0ganVzdCByZXR1cm4gZWFybHlcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFbWl0IGJlZm9yZURyb3AgZXZlbnQgLSB1c2VyIGNhbiBjYW5jZWwgYnkgc2V0dGluZyBjYW5jZWxlZCA9IHRydWVcbiAgICAgICAgY29uc3QgYmVmb3JlRHJvcEV2ZW50OiBBWFRyZWVOb2RlT25CZWZvcmVEcm9wRXZlbnQgPSB7XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIG1vdmVkTm9kZSxcbiAgICAgICAgICBwcmV2aW91c1BhcmVudDogdGhpcy5maW5kUGFyZW50QnlMaXN0SWQoc291cmNlTGlzdElkKSxcbiAgICAgICAgICBjdXJyZW50UGFyZW50OiBwYXJlbnROb2RlLFxuICAgICAgICAgIHByZXZpb3VzSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICAgICAgY3VycmVudEluZGV4OiBldmVudC5jdXJyZW50SW5kZXgsXG4gICAgICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uQmVmb3JlRHJvcC5lbWl0KGJlZm9yZURyb3BFdmVudCk7XG5cbiAgICAgICAgaWYgKGJlZm9yZURyb3BFdmVudC5jYW5jZWxlZCkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignRHJvcCBjYW5jZWxlZCBieSB1c2VyIGluIG9uQmVmb3JlRHJvcCBldmVudCcpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyYW5zZmVyQXJyYXlJdGVtKHNvdXJjZUFycmF5LCB0YXJnZXRBcnJheSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcblxuICAgICAgICAvLyBFbWl0IGRyb3AgZXZlbnRcbiAgICAgICAgdGhpcy5ub2RlRHJvcC5lbWl0KHtcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgbm9kZTogbW92ZWROb2RlIGFzIEFYVHJlZU5vZGUsXG4gICAgICAgICAgcHJldmlvdXNQYXJlbnQ6IHRoaXMuZmluZFBhcmVudEJ5TGlzdElkKHNvdXJjZUxpc3RJZCksXG4gICAgICAgICAgY3VycmVudFBhcmVudDogcGFyZW50Tm9kZSxcbiAgICAgICAgICBwcmV2aW91c0luZGV4OiBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICAgIGN1cnJlbnRJbmRleDogZXZlbnQuY3VycmVudEluZGV4LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIHNpZ25hbCB0byB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25cbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGRyb3AgZXZlbnRzIHdoZW4gZHJvcHBpbmcgZGlyZWN0bHkgb250byBhIG5vZGUgKHRvIG1ha2UgaXQgYSBjaGlsZClcbiAgICovXG4gIG9uRHJvcE9udG9Ob2RlKGV2ZW50OiBBWERyb3BMaXN0RHJvcHBlZEV2ZW50LCB0YXJnZXROb2RlOiBBWFRyZWVOb2RlKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlTGlzdElkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZWxlbWVudC5pZDtcbiAgICBjb25zdCBzb3VyY2VBcnJheSA9IHRoaXMuZ2V0QXJyYXlCeUxpc3RJZChzb3VyY2VMaXN0SWQpO1xuXG4gICAgaWYgKCFzb3VyY2VBcnJheSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbW92ZWROb2RlID0gc291cmNlQXJyYXlbZXZlbnQucHJldmlvdXNJbmRleF07XG5cbiAgICAvLyBDUklUSUNBTDogUHJldmVudCBkcm9wcGluZyBhIG5vZGUgb250byBpdHNlbGYgb3IgaXRzIGRlc2NlbmRhbnRzXG4gICAgaWYgKG1vdmVkTm9kZS5pZCA9PT0gdGFyZ2V0Tm9kZS5pZCB8fCB0aGlzLmlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlLCBtb3ZlZE5vZGUpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0Nhbm5vdCBkcm9wIGEgbm9kZSBvbnRvIGl0c2VsZiBvciBpdHMgZGVzY2VuZGFudHMnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBFbWl0IGJlZm9yZURyb3AgZXZlbnQgLSB1c2VyIGNhbiBjYW5jZWwgYnkgc2V0dGluZyBjYW5jZWxlZCA9IHRydWVcbiAgICBjb25zdCBiZWZvcmVEcm9wRXZlbnQ6IEFYVHJlZU5vZGVPbkJlZm9yZURyb3BFdmVudCA9IHtcbiAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgIG1vdmVkTm9kZSxcbiAgICAgIHByZXZpb3VzUGFyZW50OiB0aGlzLmZpbmRQYXJlbnRCeUxpc3RJZChzb3VyY2VMaXN0SWQpLFxuICAgICAgY3VycmVudFBhcmVudDogdGFyZ2V0Tm9kZSxcbiAgICAgIHByZXZpb3VzSW5kZXg6IGV2ZW50LnByZXZpb3VzSW5kZXgsXG4gICAgICBjdXJyZW50SW5kZXg6IDAsIC8vIEFsd2F5cyBmaXJzdCBjaGlsZCB3aGVuIGRyb3BwaW5nIG9udG8gbm9kZVxuICAgICAgY2FuY2VsZWQ6IGZhbHNlLFxuICAgIH07XG4gICAgdGhpcy5vbkJlZm9yZURyb3AuZW1pdChiZWZvcmVEcm9wRXZlbnQpO1xuXG4gICAgaWYgKGJlZm9yZURyb3BFdmVudC5jYW5jZWxlZCkge1xuICAgICAgY29uc29sZS53YXJuKCdEcm9wIGNhbmNlbGVkIGJ5IHVzZXIgaW4gb25CZWZvcmVEcm9wIGV2ZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBjaGlsZHJlbiBhcnJheSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgaWYgKCF0YXJnZXROb2RlLmNoaWxkcmVuKSB7XG4gICAgICB0YXJnZXROb2RlLmNoaWxkcmVuID0gW107XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGZyb20gc291cmNlXG4gICAgc291cmNlQXJyYXkuc3BsaWNlKGV2ZW50LnByZXZpb3VzSW5kZXgsIDEpO1xuXG4gICAgLy8gQWRkIGFzIGZpcnN0IGNoaWxkIG9mIHRhcmdldCBub2RlXG4gICAgdGFyZ2V0Tm9kZS5jaGlsZHJlbi51bnNoaWZ0KG1vdmVkTm9kZSk7XG5cbiAgICAvLyBBdXRvLWV4cGFuZCB0aGUgdGFyZ2V0IG5vZGUgdG8gc2hvdyB0aGUgbmV3IGNoaWxkXG4gICAgdGFyZ2V0Tm9kZS5leHBhbmRlZCA9IHRydWU7XG5cbiAgICAvLyBFbWl0IGRyb3AgZXZlbnRcbiAgICB0aGlzLm5vZGVEcm9wLmVtaXQoe1xuICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgbm9kZTogbW92ZWROb2RlIGFzIEFYVHJlZU5vZGUsXG4gICAgICBwcmV2aW91c1BhcmVudDogdGhpcy5maW5kUGFyZW50QnlMaXN0SWQoc291cmNlTGlzdElkKSxcbiAgICAgIGN1cnJlbnRQYXJlbnQ6IHRhcmdldE5vZGUsXG4gICAgICBwcmV2aW91c0luZGV4OiBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgY3VycmVudEluZGV4OiAwLFxuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBzaWduYWwgdG8gdHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgdGhpcy5ub2Rlcy5zZXQoWy4uLnRoaXMubm9kZXMoKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcnJheSByZWZlcmVuY2UgYnkgZHJvcCBsaXN0IElEXG4gICAqL1xuICBwcml2YXRlIGdldEFycmF5QnlMaXN0SWQobGlzdElkOiBzdHJpbmcpOiBBWFRyZWVOb2RlW10gfCBudWxsIHtcbiAgICBpZiAobGlzdElkID09PSAnYXgtdHJlZS1yb290LWxpc3QnKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlcygpO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBub2RlIGRyb3Agem9uZXMgKGRyb3BwaW5nIG9udG8gYSBub2RlKVxuICAgIGlmIChsaXN0SWQuc3RhcnRzV2l0aCgnYXgtdHJlZS1ub2RlLWRyb3AtJykpIHtcbiAgICAgIGNvbnN0IG5vZGVJZCA9IGxpc3RJZC5yZXBsYWNlKCdheC10cmVlLW5vZGUtZHJvcC0nLCAnJyk7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZUJ5SWQodGhpcy5ub2RlcygpLCBub2RlSWQpO1xuICAgICAgcmV0dXJuIG5vZGUgPyBbbm9kZV0gOiBudWxsO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBjaGlsZHJlbiBsaXN0IGRyb3Agem9uZXNcbiAgICBjb25zdCBub2RlSWQgPSBsaXN0SWQucmVwbGFjZSgnYXgtdHJlZS1saXN0LScsICcnKTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kTm9kZUJ5SWQodGhpcy5ub2RlcygpLCBub2RlSWQpO1xuICAgIHJldHVybiBub2RlPy5jaGlsZHJlbiB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgcGFyZW50IG5vZGUgYnkgbGlzdCBJRFxuICAgKi9cbiAgcHJpdmF0ZSBmaW5kUGFyZW50QnlMaXN0SWQobGlzdElkOiBzdHJpbmcpOiBBWFRyZWVOb2RlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobGlzdElkID09PSAnYXgtdHJlZS1yb290LWxpc3QnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBub2RlIGRyb3Agem9uZXNcbiAgICBpZiAobGlzdElkLnN0YXJ0c1dpdGgoJ2F4LXRyZWUtbm9kZS1kcm9wLScpKSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBsaXN0SWQucmVwbGFjZSgnYXgtdHJlZS1ub2RlLWRyb3AtJywgJycpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluZE5vZGVCeUlkKHRoaXMubm9kZXMoKSwgbm9kZUlkKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGNoaWxkcmVuIGxpc3QgZHJvcCB6b25lc1xuICAgIGNvbnN0IG5vZGVJZCA9IGxpc3RJZC5yZXBsYWNlKCdheC10cmVlLWxpc3QtJywgJycpO1xuICAgIHJldHVybiB0aGlzLmZpbmROb2RlQnlJZCh0aGlzLm5vZGVzKCksIG5vZGVJZCkgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgYSBub2RlIGJ5IElEIGluIHRoZSB0cmVlXG4gICAqL1xuICBwcml2YXRlIGZpbmROb2RlQnlJZChub2RlczogQVhUcmVlTm9kZVtdLCBpZDogc3RyaW5nKTogQVhUcmVlTm9kZSB8IG51bGwge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgaWYgKG5vZGUuaWQgPT09IGlkKSByZXR1cm4gbm9kZTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5maW5kTm9kZUJ5SWQobm9kZS5jaGlsZHJlbiwgaWQpO1xuICAgICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGFyZ2V0Tm9kZSBpcyBhIGRlc2NlbmRhbnQgb2YgYW5jZXN0b3JOb2RlIChvciB0aGUgc2FtZSBub2RlKVxuICAgKiBQcmV2ZW50cyBjaXJjdWxhciByZWZlcmVuY2VzIGJ5IGNoZWNraW5nIGlmIHRhcmdldCBleGlzdHMgaW4gYW5jZXN0b3IncyBjaGlsZHJlbiB0cmVlXG4gICAqL1xuICBwcml2YXRlIGlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlOiBBWFRyZWVOb2RlLCBhbmNlc3Rvck5vZGU6IEFYVHJlZU5vZGUpOiBib29sZWFuIHtcbiAgICAvLyBGaXJzdCBjaGVjazogcHJldmVudCBkcm9wcGluZyBhIG5vZGUgaW50byBpdHNlbGZcbiAgICBpZiAodGFyZ2V0Tm9kZS5pZCA9PT0gYW5jZXN0b3JOb2RlLmlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFuY2VzdG9yTm9kZS5jaGlsZHJlbiB8fCBhbmNlc3Rvck5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBhbmNlc3Rvck5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIC8vIERpcmVjdCBjaGlsZCBtYXRjaFxuICAgICAgaWYgKGNoaWxkLmlkID09PSB0YXJnZXROb2RlLmlkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLy8gUmVjdXJzaXZlIGNoZWNrIGluIGRlZXBlciBsZXZlbHNcbiAgICAgIGlmICh0aGlzLmlzTm9kZURlc2NlbmRhbnRPZih0YXJnZXROb2RlLCBjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHVuaXF1ZSBsaXN0IElEIGZvciBlYWNoIG5vZGVcbiAgICovXG4gIGdldExpc3RJZChub2RlPzogQVhUcmVlTm9kZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5vZGUgPyBgYXgtdHJlZS1saXN0LSR7bm9kZS5pZH1gIDogJ2F4LXRyZWUtcm9vdC1saXN0JztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmQgYWxsIG5vZGVzIGluIHRoZSB0cmVlICh3aXRoIGxhenkgbG9hZGluZyBzdXBwb3J0KVxuICAgKi9cbiAgYXN5bmMgZXhwYW5kQWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuc2V0RXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzKCksIHRydWUpO1xuICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXBzZSBhbGwgbm9kZXMgaW4gdGhlIHRyZWVcbiAgICovXG4gIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuc2V0RXhwYW5kZWRTdGF0ZSh0aGlzLm5vZGVzKCksIGZhbHNlKTtcbiAgICB0aGlzLm5vZGVzLnNldChbLi4udGhpcy5ub2RlcygpXSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgc2V0IGV4cGFuZGVkIHN0YXRlICh3aXRoIGxhenkgbG9hZGluZylcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2V0RXhwYW5kZWRTdGF0ZShub2RlczogQVhUcmVlTm9kZVtdLCBleHBhbmRlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgY29uc3QgaGFzQ2hpbGRyZW4gPSBub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICAgIGNvbnN0IGNhbkxhenlMb2FkID0gdGhpcy5lbmFibGVMYXp5TG9hZCgpICYmIG5vZGUuY2hpbGRyZW5Db3VudCAmJiBub2RlLmNoaWxkcmVuQ291bnQgPiAwICYmICFoYXNDaGlsZHJlbjtcblxuICAgICAgaWYgKGhhc0NoaWxkcmVuIHx8IGNhbkxhenlMb2FkKSB7XG4gICAgICAgIGlmIChleHBhbmRlZCAmJiBjYW5MYXp5TG9hZCkge1xuICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE5vZGVDaGlsZHJlbihub2RlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRFeHBhbmRlZFN0YXRlKG5vZGUuY2hpbGRyZW4sIGV4cGFuZGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY291bnQgb2Ygc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb3VudFNlbGVjdGVkKHRoaXMubm9kZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY291bnQgc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIHByaXZhdGUgY291bnRTZWxlY3RlZChub2RlczogQVhUcmVlTm9kZVtdKTogbnVtYmVyIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSBjb3VudCsrO1xuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgY291bnQgKz0gdGhpcy5jb3VudFNlbGVjdGVkKG5vZGUuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBnZXRTZWxlY3RlZE5vZGVzKCk6IEFYVHJlZU5vZGVbXSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQ6IEFYVHJlZU5vZGVbXSA9IFtdO1xuICAgIHRoaXMuY29sbGVjdFNlbGVjdGVkKHRoaXMubm9kZXMoKSwgc2VsZWN0ZWQpO1xuICAgIHJldHVybiBzZWxlY3RlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjb2xsZWN0IHNlbGVjdGVkIG5vZGVzXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3RTZWxlY3RlZChub2RlczogQVhUcmVlTm9kZVtdLCByZXN1bHQ6IEFYVHJlZU5vZGVbXSk6IHZvaWQge1xuICAgIG5vZGVzLmZvckVhY2goKG5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLnNlbGVjdGVkKSByZXN1bHQucHVzaChub2RlKTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuY29sbGVjdFNlbGVjdGVkKG5vZGUuY2hpbGRyZW4sIHJlc3VsdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIHNlbGVjdGVkIG5vZGVzIGZyb20gdGhlIHRyZWVcbiAgICovXG4gIGRlbGV0ZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQodGhpcy5ub2RlcygpKTtcbiAgICAvLyBVcGRhdGUgYWxsIHBhcmVudCBzdGF0ZXMgYWZ0ZXIgZGVsZXRpb24gdG8gY2xlYXIgc3RhbGUgaW5kZXRlcm1pbmF0ZSBzdGF0ZXNcbiAgICB0aGlzLnVwZGF0ZUFsbFBhcmVudFN0YXRlcyh0aGlzLm5vZGVzKCkpO1xuICAgIHRoaXMubm9kZXMuc2V0KFsuLi50aGlzLm5vZGVzKCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSByZW1vdmUgc2VsZWN0ZWQgbm9kZXNcbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlU2VsZWN0ZWQobm9kZXM6IEFYVHJlZU5vZGVbXSk6IHZvaWQge1xuICAgIGZvciAobGV0IGkgPSBub2Rlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgLy8gT25seSBkZWxldGUgbm9kZXMgdGhhdCBhcmUgZnVsbHkgc2VsZWN0ZWQgKG5vdCBpbmRldGVybWluYXRlKVxuICAgICAgLy8gSW5kZXRlcm1pbmF0ZSBwYXJlbnRzIHNob3VsZCBub3QgYmUgZGVsZXRlZFxuICAgICAgaWYgKG5vZGVzW2ldLnNlbGVjdGVkICYmICFub2Rlc1tpXS5pbmRldGVybWluYXRlKSB7XG4gICAgICAgIG5vZGVzLnNwbGljZShpLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZXNbaV0uY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZChub2Rlc1tpXS5jaGlsZHJlbiA/PyBbXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHVwZGF0ZSBhbGwgcGFyZW50IHN0YXRlcyBpbiB0aGUgdHJlZSAodXNlZCBhZnRlciBkZWxldGlvbilcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlQWxsUGFyZW50U3RhdGVzKG5vZGVzOiBBWFRyZWVOb2RlW10pOiB2b2lkIHtcbiAgICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gRmlyc3QsIHJlY3Vyc2l2ZWx5IHVwZGF0ZSBuZXN0ZWQgY2hpbGRyZW4gKGJvdHRvbS11cClcbiAgICAgICAgdGhpcy51cGRhdGVBbGxQYXJlbnRTdGF0ZXMobm9kZS5jaGlsZHJlbik7XG5cbiAgICAgICAgLy8gVGhlbiB1cGRhdGUgdGhpcyBub2RlJ3Mgc3RhdGUgYmFzZWQgb24gaXRzIGNoaWxkcmVuXG4gICAgICAgIGNvbnN0IHsgYWxsU2VsZWN0ZWQsIHNvbWVTZWxlY3RlZCB9ID0gdGhpcy5nZXRDaGlsZHJlblNlbGVjdGlvblN0YXRlKG5vZGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIGlmIChhbGxTZWxlY3RlZCkge1xuICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKHNvbWVTZWxlY3RlZCkge1xuICAgICAgICAgIG5vZGUuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIG5vZGUuaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBub2RlIGlzIGN1cnJlbnRseSBsb2FkaW5nXG4gICAqL1xuICBpc05vZGVMb2FkaW5nKG5vZGVJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ05vZGVzKCkuaGFzKG5vZGVJZCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRlbXBsYXRlIGNvbnRleHQgZm9yIGEgbm9kZVxuICAgKi9cbiAgZ2V0VGVtcGxhdGVDb250ZXh0KG5vZGU6IEFYVHJlZU5vZGUsIGxldmVsID0gMCk6IEFYVHJlZUl0ZW1UZW1wbGF0ZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IG5vZGUsXG4gICAgICBub2RlLFxuICAgICAgbGV2ZWwsXG4gICAgICBleHBhbmRlZDogbm9kZS5leHBhbmRlZCA/PyBmYWxzZSxcbiAgICAgIGNoaWxkcmVuQ291bnQ6IG5vZGUuY2hpbGRyZW5Db3VudCA/PyBub2RlLmNoaWxkcmVuPy5sZW5ndGggPz8gMCxcbiAgICAgIGxvYWRpbmc6IG5vZGUubG9hZGluZyA/PyBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIG5vZGUgc2hvdWxkIHNob3cgZXhwYW5kIHRvZ2dsZVxuICAgKi9cbiAgc2hvdWxkU2hvd0V4cGFuZFRvZ2dsZShub2RlOiBBWFRyZWVOb2RlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIChub2RlLmNoaWxkcmVuICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkgfHxcbiAgICAgICh0aGlzLmVuYWJsZUxhenlMb2FkKCkgJiYgbm9kZS5jaGlsZHJlbkNvdW50ICYmIG5vZGUuY2hpbGRyZW5Db3VudCA+IDApIHx8XG4gICAgICBmYWxzZVxuICAgICk7XG4gIH1cbn1cbiIsIjwhLS0gUm9vdCBkcm9wIGxpc3QgLS0+XG48ZGl2XG4gIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gIFtzb3J0aW5nRGlzYWJsZWRdPVwiZmFsc2VcIlxuICBbaWRdPVwiZ2V0TGlzdElkKClcIlxuICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwibnVsbFwiXG4gIGRyb3BMaXN0R3JvdXA9XCJheC10cmVlLW5vZGVzXCJcbiAgKGRyb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gIGNsYXNzPVwiYXgtdHJlZTItZHJvcC1saXN0XCJcbiAgW2NsYXNzLmF4LXRyZWUyLWFuaW1hdGVkXT1cImFuaW1hdGVkKClcIlxuICBbY2xhc3MuYXgtdHJlZTItY2FyZF09XCJsb29rKCkgPT09ICdjYXJkJ1wiXG4gIFtjbGFzcy5heC10cmVlMi13aXRoLWxpbmVzXT1cImxvb2soKSA9PT0gJ3dpdGgtbGluZSdcIlxuICBbY2xhc3MuYXgtdHJlZTItY29tcGFjdF09XCJub2RlSGVpZ2h0KCkgPT09ICdjb21wYWN0J1wiXG4gIFtjbGFzcy5heC10cmVlMi1jb21mb3J0YWJsZV09XCJub2RlSGVpZ2h0KCkgPT09ICdjb21mb3J0YWJsZSdcIlxuPlxuICBAZm9yIChub2RlIG9mIG5vZGVzKCk7IHRyYWNrIG5vZGUuaWQpIHtcbiAgICBAaWYgKG5vZGUudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgW2F4RHJhZ109XCJkcmFnTW9kZSgpICE9PSAnbm9uZSdcIlxuICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICBbZHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgIGNsYXNzPVwiYXgtdHJlZTItbm9kZVwiXG4gICAgICAgIFtjbGFzcy5heC10cmVlMi1ub2RlLXNlbGVjdGVkXT1cIm5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICBbY2xhc3MuYXgtdHJlZTItbm9kZS1kaXNhYmxlZF09XCJub2RlLmRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzLmF4LXRyZWUyLW5vZGUtbG9hZGluZ109XCJub2RlLmxvYWRpbmdcIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJheC10cmVlMi1ub2RlLWNvbnRlbnRcIlxuICAgICAgICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgICAgICAgW2lkXT1cIidheC10cmVlLW5vZGUtZHJvcC0nICsgbm9kZS5pZFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1ub2RlLWlkXT1cIm5vZGUuaWRcIlxuICAgICAgICAgIFthdHRyLmRhdGEtZHJvcC10eXBlXT1cIidvbnRvLW5vZGUnXCJcbiAgICAgICAgICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS1ub2Rlc1wiXG4gICAgICAgICAgKGRyb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3BPbnRvTm9kZSgkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBpZiAoZHJhZ01vZGUoKSA9PT0gJ2hhbmRsZXInKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRyZWUyLWRyYWctaGFuZGxlXCIgYXhEcmFnSGFuZGxlIHRpdGxlPVwiRHJhZyB0byByZW9yZGVyXCI+IOKLruKLriA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZTItZXhwYW5kLXRvZ2dsZSBheC1zbVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVOb2RlKG5vZGUsICRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgW2NsYXNzLmF4LXRyZWUyLWhhcy1jaGlsZHJlbl09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpXCJcbiAgICAgICAgICAgIFtjbGFzcy5heC10cmVlMi1leHBhbmRlZF09XCJub2RlLmV4cGFuZGVkXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkIHx8IG5vZGUubG9hZGluZ1wiXG4gICAgICAgICAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJzaG91bGRTaG93RXhwYW5kVG9nZ2xlKG5vZGUpID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAobm9kZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtc3Bpbm5lciBmYS1zcGluIGF4LXRyZWUyLWxvYWRpbmctc3Bpbm5lclwiPjwvaT5cbiAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxheC1pY29uPlxuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJub2RlLmV4cGFuZGVkID8gZXhwYW5kZWRJY29uKCkgOiBjb2xsYXBzZWRJY29uKClcIiBjbGFzcz1cImF4LXRyZWUyLXRvZ2dsZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICA8L2F4LWljb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgICAgQGlmIChpdGVtVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGUoKSFcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0VGVtcGxhdGVDb250ZXh0KG5vZGUsIDApXCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIEBpZiAoc2hvd0NoZWNrYm94KCkpIHtcbiAgICAgICAgICAgICAgPGF4LWNoZWNrLWJveFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZTItY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIm5vZGUuaW5kZXRlcm1pbmF0ZSA/IG51bGwgOiBub2RlLnNlbGVjdGVkIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJub2RlLmluZGV0ZXJtaW5hdGUgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJ0b2dnbGVTZWxlY3Rpb24obm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgKHBvaW50ZXJkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgID48L2F4LWNoZWNrLWJveD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAoc2hvd0ljb25zKCkgJiYgbm9kZS5pY29uKSB7XG4gICAgICAgICAgICAgIDxpIFtjbGFzc109XCJub2RlLmljb25cIiBjbGFzcz1cImF4LXRyZWUyLW5vZGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdHJlZTItbm9kZS1sYWJlbFwiPnt7IG5vZGUubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICBAaWYgKHNob3dDaGlsZHJlbkJhZGdlKCkgJiYgKG5vZGUuY2hpbGRyZW5Db3VudCB8fCAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApKSkge1xuICAgICAgICAgICAgICA8YXgtYmFkZ2VcbiAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLWNoaWxkcmVuLWJhZGdlXCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCIobm9kZS5jaGlsZHJlbkNvdW50ID8/IG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKS50b1N0cmluZygpXCJcbiAgICAgICAgICAgICAgPjwvYXgtYmFkZ2U+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChub2RlLmV4cGFuZGVkICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC10cmVlMi1jaGlsZHJlblwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkcmVuTGlzdFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBjaGlsZHJlbjogbm9kZS5jaGlsZHJlbiwgcGFyZW50OiBub2RlLCBsZXZlbDogMSB9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIH1cbiAgfVxuPC9kaXY+XG5cbjwhLS0gUmVjdXJzaXZlIGNoaWxkcmVuIHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNjaGlsZHJlbkxpc3QgbGV0LWNoaWxkcmVuPVwiY2hpbGRyZW5cIiBsZXQtcGFyZW50PVwicGFyZW50XCIgbGV0LWxldmVsPVwibGV2ZWxcIj5cbiAgPGRpdlxuICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgW2lkXT1cImdldExpc3RJZChwYXJlbnQpXCJcbiAgICBbYXR0ci5kYXRhLW5vZGUtaWRdPVwicGFyZW50LmlkXCJcbiAgICBkcm9wTGlzdEdyb3VwPVwiYXgtdHJlZS1ub2Rlc1wiXG4gICAgKGRyb3BMaXN0RHJvcHBlZCk9XCJvbkRyb3AoJGV2ZW50LCBwYXJlbnQpXCJcbiAgICBjbGFzcz1cImF4LXRyZWUyLWRyb3AtbGlzdFwiXG4gID5cbiAgICBAZm9yIChub2RlIG9mIGNoaWxkcmVuOyB0cmFjayBub2RlLmlkKSB7XG4gICAgICBAaWYgKG5vZGUudmlzaWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgIFtheERyYWddPVwiZHJhZ01vZGUoKSAhPT0gJ25vbmUnXCJcbiAgICAgICAgICBbZHJhZ0Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgIFtkcmFnRGF0YV09XCJub2RlXCJcbiAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLW5vZGVcIlxuICAgICAgICAgIFtjbGFzcy5heC10cmVlMi1ub2RlLXNlbGVjdGVkXT1cIm5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICAgIFtjbGFzcy5heC10cmVlMi1ub2RlLWRpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIlxuICAgICAgICAgIFtjbGFzcy5heC10cmVlMi1ub2RlLWxvYWRpbmddPVwibm9kZS5sb2FkaW5nXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZTItbm9kZS1jb250ZW50XCJcbiAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nLWxlZnQucHhdPVwiKGxldmVsICogaW5kZW50U2l6ZSgpKSAvIChsb29rKCkgPT09ICd3aXRoLWxpbmUnID8gMyA6IDEpXCJcbiAgICAgICAgICAgIFtheERyb3BMaXN0XT1cImRyYWdNb2RlKCkgIT09ICdub25lJ1wiXG4gICAgICAgICAgICBbaWRdPVwiJ2F4LXRyZWUtbm9kZS1kcm9wLScgKyBub2RlLmlkXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtbm9kZS1pZF09XCJub2RlLmlkXCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZHJvcC10eXBlXT1cIidvbnRvLW5vZGUnXCJcbiAgICAgICAgICAgIGRyb3BMaXN0R3JvdXA9XCJheC10cmVlLW5vZGVzXCJcbiAgICAgICAgICAgIChkcm9wTGlzdERyb3BwZWQpPVwib25Ecm9wT250b05vZGUoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChkcmFnTW9kZSgpID09PSAnaGFuZGxlcicpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cmVlMi1kcmFnLWhhbmRsZVwiIGF4RHJhZ0hhbmRsZSB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPiDii67ii64gPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGF4LWJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImF4LXRyZWUyLWV4cGFuZC10b2dnbGUgYXgtc21cIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJ0b2dnbGVOb2RlKG5vZGUsICRhbnkoJGV2ZW50KSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItaGFzLWNoaWxkcmVuXT1cInNob3VsZFNob3dFeHBhbmRUb2dnbGUobm9kZSlcIlxuICAgICAgICAgICAgICBbY2xhc3MuYXgtdHJlZTItZXhwYW5kZWRdPVwibm9kZS5leHBhbmRlZFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJub2RlLmRpc2FibGVkIHx8IG5vZGUubG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInNob3VsZFNob3dFeHBhbmRUb2dnbGUobm9kZSkgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAobm9kZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgPGF4LWljb24+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLXNwaW5uZXIgZmEtc3BpbiBheC10cmVlMi1sb2FkaW5nLXNwaW5uZXJcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8YXgtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJub2RlLmV4cGFuZGVkID8gZXhwYW5kZWRJY29uKCkgOiBjb2xsYXBzZWRJY29uKClcIiBjbGFzcz1cImF4LXRyZWUyLXRvZ2dsZS1pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYXgtaWNvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9heC1idXR0b24+XG5cbiAgICAgICAgICAgIEBpZiAoaXRlbVRlbXBsYXRlKCkpIHtcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIml0ZW1UZW1wbGF0ZSgpIVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldFRlbXBsYXRlQ29udGV4dChub2RlLCBsZXZlbClcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgQGlmIChzaG93Q2hlY2tib3goKSkge1xuICAgICAgICAgICAgICAgIDxheC1jaGVjay1ib3hcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtdHJlZTItY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwibm9kZS5pbmRldGVybWluYXRlID8gbnVsbCA6IG5vZGUuc2VsZWN0ZWQgfHwgZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwibm9kZS5pbmRldGVybWluYXRlIHx8IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgIChvblZhbHVlQ2hhbmdlZCk9XCJ0b2dnbGVTZWxlY3Rpb24obm9kZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIChwb2ludGVyZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgID48L2F4LWNoZWNrLWJveD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNob3dJY29ucygpICYmIG5vZGUuaWNvbikge1xuICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJub2RlLmljb25cIiBjbGFzcz1cImF4LXRyZWUyLW5vZGUtaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRyZWUyLW5vZGUtbGFiZWxcIj57eyBub2RlLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKHNob3dDaGlsZHJlbkJhZGdlKCkgJiYgKG5vZGUuY2hpbGRyZW5Db3VudCB8fCAobm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApKSkge1xuICAgICAgICAgICAgICAgIDxheC1iYWRnZVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJheC10cmVlMi1jaGlsZHJlbi1iYWRnZVwiXG4gICAgICAgICAgICAgICAgICBbdGV4dF09XCIobm9kZS5jaGlsZHJlbkNvdW50ID8/IG5vZGUuY2hpbGRyZW4/Lmxlbmd0aCA/PyAwKS50b1N0cmluZygpXCJcbiAgICAgICAgICAgICAgICA+PC9heC1iYWRnZT5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChub2RlLmV4cGFuZGVkICYmIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXRyZWUyLWNoaWxkcmVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaWxkcmVuTGlzdFwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGNoaWxkcmVuOiBub2RlLmNoaWxkcmVuLCBwYXJlbnQ6IG5vZGUsIGxldmVsOiBsZXZlbCArIDEgfVwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==","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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"}
         
     | 
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,9 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@acorex/components",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "21.0.0-next. 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "21.0.0-next.12",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "peerDependencies": {
         
     | 
| 
       5 
     | 
    
         
            -
                "@acorex/core": "21.0.0-next. 
     | 
| 
       6 
     | 
    
         
            -
                "@acorex/cdk": "21.0.0-next. 
     | 
| 
      
 5 
     | 
    
         
            +
                "@acorex/core": "21.0.0-next.12",
         
     | 
| 
      
 6 
     | 
    
         
            +
                "@acorex/cdk": "21.0.0-next.12",
         
     | 
| 
       7 
7 
     | 
    
         
             
                "@angular/common": "^20.0.0",
         
     | 
| 
       8 
8 
     | 
    
         
             
                "@angular/core": "^20.0.0",
         
     | 
| 
       9 
9 
     | 
    
         
             
                "@angular/cdk": "^20.0.0",
         
     | 
| 
         @@ -324,10 +324,6 @@ 
     | 
|
| 
       324 
324 
     | 
    
         
             
                  "types": "./picker/index.d.ts",
         
     | 
| 
       325 
325 
     | 
    
         
             
                  "default": "./fesm2022/acorex-components-picker.mjs"
         
     | 
| 
       326 
326 
     | 
    
         
             
                },
         
     | 
| 
       327 
     | 
    
         
            -
                "./popover": {
         
     | 
| 
       328 
     | 
    
         
            -
                  "types": "./popover/index.d.ts",
         
     | 
| 
       329 
     | 
    
         
            -
                  "default": "./fesm2022/acorex-components-popover.mjs"
         
     | 
| 
       330 
     | 
    
         
            -
                },
         
     | 
| 
       331 
327 
     | 
    
         
             
                "./popup": {
         
     | 
| 
       332 
328 
     | 
    
         
             
                  "types": "./popup/index.d.ts",
         
     | 
| 
       333 
329 
     | 
    
         
             
                  "default": "./fesm2022/acorex-components-popup.mjs"
         
     | 
| 
         @@ -336,6 +332,10 @@ 
     | 
|
| 
       336 
332 
     | 
    
         
             
                  "types": "./progress-bar/index.d.ts",
         
     | 
| 
       337 
333 
     | 
    
         
             
                  "default": "./fesm2022/acorex-components-progress-bar.mjs"
         
     | 
| 
       338 
334 
     | 
    
         
             
                },
         
     | 
| 
      
 335 
     | 
    
         
            +
                "./popover": {
         
     | 
| 
      
 336 
     | 
    
         
            +
                  "types": "./popover/index.d.ts",
         
     | 
| 
      
 337 
     | 
    
         
            +
                  "default": "./fesm2022/acorex-components-popover.mjs"
         
     | 
| 
      
 338 
     | 
    
         
            +
                },
         
     | 
| 
       339 
339 
     | 
    
         
             
                "./qrcode": {
         
     | 
| 
       340 
340 
     | 
    
         
             
                  "types": "./qrcode/index.d.ts",
         
     | 
| 
       341 
341 
     | 
    
         
             
                  "default": "./fesm2022/acorex-components-qrcode.mjs"
         
     | 
| 
         @@ -396,9 +396,9 @@ 
     | 
|
| 
       396 
396 
     | 
    
         
             
                  "types": "./selection-list/index.d.ts",
         
     | 
| 
       397 
397 
     | 
    
         
             
                  "default": "./fesm2022/acorex-components-selection-list.mjs"
         
     | 
| 
       398 
398 
     | 
    
         
             
                },
         
     | 
| 
       399 
     | 
    
         
            -
                "./selection-list- 
     | 
| 
       400 
     | 
    
         
            -
                  "types": "./selection-list- 
     | 
| 
       401 
     | 
    
         
            -
                  "default": "./fesm2022/acorex-components-selection-list- 
     | 
| 
      
 399 
     | 
    
         
            +
                "./selection-list-2": {
         
     | 
| 
      
 400 
     | 
    
         
            +
                  "types": "./selection-list-2/index.d.ts",
         
     | 
| 
      
 401 
     | 
    
         
            +
                  "default": "./fesm2022/acorex-components-selection-list-2.mjs"
         
     | 
| 
       402 
402 
     | 
    
         
             
                },
         
     | 
| 
       403 
403 
     | 
    
         
             
                "./side-menu": {
         
     | 
| 
       404 
404 
     | 
    
         
             
                  "types": "./side-menu/index.d.ts",
         
     | 
| 
         @@ -468,6 +468,10 @@ 
     | 
|
| 
       468 
468 
     | 
    
         
             
                  "types": "./tree-view/index.d.ts",
         
     | 
| 
       469 
469 
     | 
    
         
             
                  "default": "./fesm2022/acorex-components-tree-view.mjs"
         
     | 
| 
       470 
470 
     | 
    
         
             
                },
         
     | 
| 
      
 471 
     | 
    
         
            +
                "./tree2": {
         
     | 
| 
      
 472 
     | 
    
         
            +
                  "types": "./tree2/index.d.ts",
         
     | 
| 
      
 473 
     | 
    
         
            +
                  "default": "./fesm2022/acorex-components-tree2.mjs"
         
     | 
| 
      
 474 
     | 
    
         
            +
                },
         
     | 
| 
       471 
475 
     | 
    
         
             
                "./uploader": {
         
     | 
| 
       472 
476 
     | 
    
         
             
                  "types": "./uploader/index.d.ts",
         
     | 
| 
       473 
477 
     | 
    
         
             
                  "default": "./fesm2022/acorex-components-uploader.mjs"
         
     | 
    
        package/rrule/index.d.ts
    CHANGED
    
    | 
         @@ -21,16 +21,79 @@ type AXRRuleType = rrule.RRule; 
     | 
|
| 
       21 
21 
     | 
    
         
             
            declare const defaultOptions: AXROptionsType;
         
     | 
| 
       22 
22 
     | 
    
         
             
            declare const defaultRrule = "RRULE:FREQ=WEEKLY;INTERVAL=1;WKST=MO;COUNT=5";
         
     | 
| 
       23 
23 
     | 
    
         | 
| 
      
 24 
     | 
    
         
            +
            /**
         
     | 
| 
      
 25 
     | 
    
         
            +
             * Service for working with RRule recurrence patterns.
         
     | 
| 
      
 26 
     | 
    
         
            +
             * Provides methods to create RRule instances from options or strings,
         
     | 
| 
      
 27 
     | 
    
         
            +
             * convert between formats, and query occurrences.
         
     | 
| 
      
 28 
     | 
    
         
            +
             */
         
     | 
| 
       24 
29 
     | 
    
         
             
            declare class AXRruleService {
         
     | 
| 
      
 30 
     | 
    
         
            +
                /**
         
     | 
| 
      
 31 
     | 
    
         
            +
                 * Creates an RRule instance from options object.
         
     | 
| 
      
 32 
     | 
    
         
            +
                 * @param options Partial RRule options to create the rule from
         
     | 
| 
      
 33 
     | 
    
         
            +
                 * @returns Promise resolving to the RRule instance
         
     | 
| 
      
 34 
     | 
    
         
            +
                 */
         
     | 
| 
       25 
35 
     | 
    
         
             
                rruleFromOptions(options: Partial<AXROptionsType>): Promise<AXRRuleType>;
         
     | 
| 
      
 36 
     | 
    
         
            +
                /**
         
     | 
| 
      
 37 
     | 
    
         
            +
                 * Creates an RRule instance from a RRULE string.
         
     | 
| 
      
 38 
     | 
    
         
            +
                 * @param ruleString Valid RRULE string (e.g., "RRULE:FREQ=WEEKLY;COUNT=5")
         
     | 
| 
      
 39 
     | 
    
         
            +
                 * @returns Promise resolving to the RRule instance
         
     | 
| 
      
 40 
     | 
    
         
            +
                 */
         
     | 
| 
       26 
41 
     | 
    
         
             
                rruleFromString(ruleString: string): Promise<AXRRuleType>;
         
     | 
| 
      
 42 
     | 
    
         
            +
                /**
         
     | 
| 
      
 43 
     | 
    
         
            +
                 * Creates an RRule instance from human-readable text.
         
     | 
| 
      
 44 
     | 
    
         
            +
                 * @param ruleText Human-readable text describing the recurrence (e.g., "every Monday for 5 weeks")
         
     | 
| 
      
 45 
     | 
    
         
            +
                 * @returns Promise resolving to the RRule instance
         
     | 
| 
      
 46 
     | 
    
         
            +
                 */
         
     | 
| 
       27 
47 
     | 
    
         
             
                rruleFromText(ruleText: string): Promise<AXRRuleType>;
         
     | 
| 
      
 48 
     | 
    
         
            +
                /**
         
     | 
| 
      
 49 
     | 
    
         
            +
                 * Extracts options from an RRule instance.
         
     | 
| 
      
 50 
     | 
    
         
            +
                 * @param rule RRule instance to extract options from
         
     | 
| 
      
 51 
     | 
    
         
            +
                 * @returns Parsed options with all required fields
         
     | 
| 
      
 52 
     | 
    
         
            +
                 */
         
     | 
| 
       28 
53 
     | 
    
         
             
                rruleToOptions(rule: AXRRuleType): AXParsedOptionsType;
         
     | 
| 
      
 54 
     | 
    
         
            +
                /**
         
     | 
| 
      
 55 
     | 
    
         
            +
                 * Converts an RRule instance to RRULE string format.
         
     | 
| 
      
 56 
     | 
    
         
            +
                 * @param rule RRule instance to convert
         
     | 
| 
      
 57 
     | 
    
         
            +
                 * @returns RRULE string representation
         
     | 
| 
      
 58 
     | 
    
         
            +
                 */
         
     | 
| 
       29 
59 
     | 
    
         
             
                rruleToString(rule: AXRRuleType): string;
         
     | 
| 
      
 60 
     | 
    
         
            +
                /**
         
     | 
| 
      
 61 
     | 
    
         
            +
                 * Converts an RRule instance to human-readable text.
         
     | 
| 
      
 62 
     | 
    
         
            +
                 * @param rule RRule instance to convert
         
     | 
| 
      
 63 
     | 
    
         
            +
                 * @returns Human-readable text description
         
     | 
| 
      
 64 
     | 
    
         
            +
                 */
         
     | 
| 
       30 
65 
     | 
    
         
             
                rruleToText(rule: AXRRuleType): string;
         
     | 
| 
      
 66 
     | 
    
         
            +
                /**
         
     | 
| 
      
 67 
     | 
    
         
            +
                 * Gets all occurrences of the rule up to a limit.
         
     | 
| 
      
 68 
     | 
    
         
            +
                 * @param rule RRule instance to query
         
     | 
| 
      
 69 
     | 
    
         
            +
                 * @param limit Maximum number of occurrences to return (default: 500)
         
     | 
| 
      
 70 
     | 
    
         
            +
                 * @returns Array of occurrence dates
         
     | 
| 
      
 71 
     | 
    
         
            +
                 */
         
     | 
| 
       31 
72 
     | 
    
         
             
                rruleGetAll(rule: AXRRuleType, limit?: number): Date[];
         
     | 
| 
      
 73 
     | 
    
         
            +
                /**
         
     | 
| 
      
 74 
     | 
    
         
            +
                 * Gets occurrences between two dates.
         
     | 
| 
      
 75 
     | 
    
         
            +
                 * @param rule RRule instance to query
         
     | 
| 
      
 76 
     | 
    
         
            +
                 * @param after Start date (exclusive by default)
         
     | 
| 
      
 77 
     | 
    
         
            +
                 * @param before End date (exclusive by default)
         
     | 
| 
      
 78 
     | 
    
         
            +
                 * @param inclusive Whether to include the boundary dates
         
     | 
| 
      
 79 
     | 
    
         
            +
                 * @returns Array of occurrence dates between the specified dates
         
     | 
| 
      
 80 
     | 
    
         
            +
                 */
         
     | 
| 
       32 
81 
     | 
    
         
             
                rruleGetBetween(rule: AXRRuleType, after: Date, before: Date, inclusive?: boolean): Date[];
         
     | 
| 
      
 82 
     | 
    
         
            +
                /**
         
     | 
| 
      
 83 
     | 
    
         
            +
                 * Gets the last occurrence before the specified date.
         
     | 
| 
      
 84 
     | 
    
         
            +
                 * @param rule RRule instance to query
         
     | 
| 
      
 85 
     | 
    
         
            +
                 * @param date Date to search before
         
     | 
| 
      
 86 
     | 
    
         
            +
                 * @param inclusive Whether to include the specified date
         
     | 
| 
      
 87 
     | 
    
         
            +
                 * @returns Last occurrence before the date, or null if none found
         
     | 
| 
      
 88 
     | 
    
         
            +
                 */
         
     | 
| 
       33 
89 
     | 
    
         
             
                rruleGetBefore(rule: AXRRuleType, date: Date, inclusive?: boolean): Date | null;
         
     | 
| 
      
 90 
     | 
    
         
            +
                /**
         
     | 
| 
      
 91 
     | 
    
         
            +
                 * Gets the first occurrence after the specified date.
         
     | 
| 
      
 92 
     | 
    
         
            +
                 * @param rule RRule instance to query
         
     | 
| 
      
 93 
     | 
    
         
            +
                 * @param date Date to search after
         
     | 
| 
      
 94 
     | 
    
         
            +
                 * @param inclusive Whether to include the specified date
         
     | 
| 
      
 95 
     | 
    
         
            +
                 * @returns First occurrence after the date, or null if none found
         
     | 
| 
      
 96 
     | 
    
         
            +
                 */
         
     | 
| 
       34 
97 
     | 
    
         
             
                rruleGetAfter(rule: AXRRuleType, date: Date, inclusive?: boolean): Date | null;
         
     | 
| 
       35 
98 
     | 
    
         
             
                static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXRruleService, never>;
         
     | 
| 
       36 
99 
     | 
    
         
             
                static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXRruleService>;
         
     | 
| 
         @@ -53,24 +116,48 @@ declare class AXRrulePreviewComponent implements OnInit { 
     | 
|
| 
       53 
116 
     | 
    
         
             
                static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXRrulePreviewComponent, "ax-rrule-preview", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "repeat": { "alias": "repeat"; "required": false; "isSignal": true; }; "format": { "alias": "format"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
         
     | 
| 
       54 
117 
     | 
    
         
             
            }
         
     | 
| 
       55 
118 
     | 
    
         | 
| 
      
 119 
     | 
    
         
            +
            /**
         
     | 
| 
      
 120 
     | 
    
         
            +
             * RRule component provides a user-friendly interface for creating and managing recurrence rules.
         
     | 
| 
      
 121 
     | 
    
         
            +
             * Supports various frequencies, intervals, and date constraints with real-time preview and validation.
         
     | 
| 
      
 122 
     | 
    
         
            +
             */
         
     | 
| 
       56 
123 
     | 
    
         
             
            declare class AXRruleComponent {
         
     | 
| 
       57 
124 
     | 
    
         
             
                #private;
         
     | 
| 
      
 125 
     | 
    
         
            +
                /**
         
     | 
| 
      
 126 
     | 
    
         
            +
                 * Current recurrence rule model value (options object or RRULE string).
         
     | 
| 
      
 127 
     | 
    
         
            +
                 * @default null
         
     | 
| 
      
 128 
     | 
    
         
            +
                 */
         
     | 
| 
       58 
129 
     | 
    
         
             
                value: _angular_core.ModelSignal<string | rrule.Options>;
         
     | 
| 
      
 130 
     | 
    
         
            +
                /**
         
     | 
| 
      
 131 
     | 
    
         
            +
                 * Emitted when the model value changes.
         
     | 
| 
      
 132 
     | 
    
         
            +
                 */
         
     | 
| 
      
 133 
     | 
    
         
            +
                valueChange: _angular_core.OutputEmitterRef<string | rrule.Options>;
         
     | 
| 
      
 134 
     | 
    
         
            +
                /**
         
     | 
| 
      
 135 
     | 
    
         
            +
                 * Emitted with the computed RRule instance when updated.
         
     | 
| 
      
 136 
     | 
    
         
            +
                 */
         
     | 
| 
       59 
137 
     | 
    
         
             
                rruleChange: _angular_core.OutputEmitterRef<rrule.RRule>;
         
     | 
| 
      
 138 
     | 
    
         
            +
                /**
         
     | 
| 
      
 139 
     | 
    
         
            +
                 * Emitted with the normalized options whenever they change.
         
     | 
| 
      
 140 
     | 
    
         
            +
                 */
         
     | 
| 
       60 
141 
     | 
    
         
             
                optionsChange: _angular_core.OutputEmitterRef<rrule.Options>;
         
     | 
| 
      
 142 
     | 
    
         
            +
                /**
         
     | 
| 
      
 143 
     | 
    
         
            +
                 * Emitted with the RRULE string representation.
         
     | 
| 
      
 144 
     | 
    
         
            +
                 */
         
     | 
| 
       61 
145 
     | 
    
         
             
                stringChange: _angular_core.OutputEmitterRef<string>;
         
     | 
| 
      
 146 
     | 
    
         
            +
                /**
         
     | 
| 
      
 147 
     | 
    
         
            +
                 * Emitted with the human-readable text of the rule.
         
     | 
| 
      
 148 
     | 
    
         
            +
                 */
         
     | 
| 
       62 
149 
     | 
    
         
             
                textChange: _angular_core.OutputEmitterRef<string>;
         
     | 
| 
       63 
150 
     | 
    
         
             
                protected freqs: {
         
     | 
| 
       64 
151 
     | 
    
         
             
                    text: string;
         
     | 
| 
       65 
     | 
    
         
            -
                     
     | 
| 
      
 152 
     | 
    
         
            +
                    value: number;
         
     | 
| 
       66 
153 
     | 
    
         
             
                }[];
         
     | 
| 
       67 
154 
     | 
    
         
             
                protected weekdays: {
         
     | 
| 
       68 
155 
     | 
    
         
             
                    text: string;
         
     | 
| 
       69 
     | 
    
         
            -
                     
     | 
| 
      
 156 
     | 
    
         
            +
                    value: number;
         
     | 
| 
       70 
157 
     | 
    
         
             
                }[];
         
     | 
| 
       71 
158 
     | 
    
         
             
                protected months: {
         
     | 
| 
       72 
159 
     | 
    
         
             
                    text: string;
         
     | 
| 
       73 
     | 
    
         
            -
                     
     | 
| 
      
 160 
     | 
    
         
            +
                    value: number;
         
     | 
| 
       74 
161 
     | 
    
         
             
                }[];
         
     | 
| 
       75 
162 
     | 
    
         
             
                protected timezones: string[];
         
     | 
| 
       76 
163 
     | 
    
         
             
                protected hours: number[];
         
     | 
| 
         @@ -93,10 +180,18 @@ declare class AXRruleComponent { 
     | 
|
| 
       93 
180 
     | 
    
         
             
                private _emitAll;
         
     | 
| 
       94 
181 
     | 
    
         
             
                private _areOptionValuesEqual;
         
     | 
| 
       95 
182 
     | 
    
         
             
                private _clearOptions;
         
     | 
| 
      
 183 
     | 
    
         
            +
                /**
         
     | 
| 
      
 184 
     | 
    
         
            +
                 * Updates a single option and recomputes the rule.
         
     | 
| 
      
 185 
     | 
    
         
            +
                 * @param key The option key to update
         
     | 
| 
      
 186 
     | 
    
         
            +
                 * @param value The new value for the option
         
     | 
| 
      
 187 
     | 
    
         
            +
                 */
         
     | 
| 
       96 
188 
     | 
    
         
             
                updateOption<K extends keyof AXROptionsType>(key: K, value: AXROptionsType[K]): Promise<void>;
         
     | 
| 
      
 189 
     | 
    
         
            +
                /**
         
     | 
| 
      
 190 
     | 
    
         
            +
                 * Resets options to defaults and recomputes the rule.
         
     | 
| 
      
 191 
     | 
    
         
            +
                 */
         
     | 
| 
       97 
192 
     | 
    
         
             
                resetOptions(): Promise<void>;
         
     | 
| 
       98 
193 
     | 
    
         
             
                static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXRruleComponent, never>;
         
     | 
| 
       99 
     | 
    
         
            -
                static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXRruleComponent, "ax-rrule", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "rruleChange": "rruleChange"; "optionsChange": "optionsChange"; "stringChange": "stringChange"; "textChange": "textChange"; }, never, never, true, never>;
         
     | 
| 
      
 194 
     | 
    
         
            +
                static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXRruleComponent, "ax-rrule", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "valueChange": "valueChange"; "rruleChange": "rruleChange"; "optionsChange": "optionsChange"; "stringChange": "stringChange"; "textChange": "textChange"; }, never, never, true, never>;
         
     | 
| 
       100 
195 
     | 
    
         
             
            }
         
     | 
| 
       101 
196 
     | 
    
         | 
| 
       102 
197 
     | 
    
         
             
            export { AXRruleComponent, AXRrulePreviewComponent, AXRruleService, defaultOptions, defaultRrule };
         
     |