{"version":3,"file":"fundamental-ngx-platform-approval-flow.mjs","sources":["../../../../libs/platform/approval-flow/helpers/index.ts","../../../../libs/platform/approval-flow/approval-flow-graph.ts","../../../../libs/platform/approval-flow/approval-flow-team-list/approval-flow-team-list.component.ts","../../../../libs/platform/approval-flow/approval-flow-team-list/approval-flow-team-list.component.html","../../../../libs/platform/approval-flow/approval-flow-user-details/approval-flow-user-details.component.ts","../../../../libs/platform/approval-flow/approval-flow-user-details/approval-flow-user-details.component.html","../../../../libs/platform/approval-flow/approval-flow-user-list/approval-flow-user-list.component.ts","../../../../libs/platform/approval-flow/approval-flow-user-list/approval-flow-user-list.component.html","../../../../libs/platform/approval-flow/services/approval-flow-add-node-view.service.ts","../../../../libs/platform/approval-flow/approval-flow-add-node/approval-flow-add-node.component.ts","../../../../libs/platform/approval-flow/approval-flow-add-node/approval-flow-add-node.component.html","../../../../libs/platform/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.ts","../../../../libs/platform/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.html","../../../../libs/platform/approval-flow/approval-flow-messages/approval-flow-messages.component.ts","../../../../libs/platform/approval-flow/approval-flow-messages/approval-flow-messages.component.html","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.ts","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-node.component.ts","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-node.component.html","../../../../libs/platform/approval-flow/approval-flow-select-type/approval-flow-select-type.component.ts","../../../../libs/platform/approval-flow/approval-flow-select-type/approval-flow-select-type.component.html","../../../../libs/platform/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.ts","../../../../libs/platform/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.html","../../../../libs/platform/approval-flow/approval-flow.component.ts","../../../../libs/platform/approval-flow/approval-flow.component.html","../../../../libs/platform/approval-flow/approval-flow.module.ts","../../../../libs/platform/approval-flow/fundamental-ngx-platform-approval-flow.ts"],"sourcesContent":["import { ApprovalFlowGraph } from '../approval-flow-graph';\nimport { ApprovalGraphNode, ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\n\n/** @hidden */\nexport function isNodeApproved(node: ApprovalNode): boolean {\n    return node.status === 'approved';\n}\n\n/** @hidden */\nexport function isNodeStarted(node: ApprovalNode): boolean {\n    return node.status !== 'not started';\n}\n\n/** @hidden */\nexport function displayTeamFn(team: ApprovalTeam): string {\n    return team?.name;\n}\n\n/** @hidden */\nexport function displayUserFn(user: ApprovalUser): string {\n    return user?.name;\n}\n\n/** @hidden */\nexport function userValueFn(user: ApprovalUser): string {\n    return user?.id;\n}\n\n/** @hidden */\nexport function filterByName(obj: { name: string }, searchString: string): boolean {\n    return obj.name.toLowerCase().indexOf(searchString.toLowerCase()) > -1;\n}\n\n/** @hidden */\nexport function trackByFn(index: number, item: { id: string }): number | string {\n    return item?.id ?? index;\n}\n\n/** @hidden */\nexport function getGraphNodes(graph: ApprovalFlowGraph): ApprovalGraphNode[] {\n    return graph.columns.reduce((acc, column) => acc.concat(column.nodes), <ApprovalGraphNode[]>[]);\n}\n\n/** @hidden */\nexport function getParentNodes(node: ApprovalNode, nodes: ApprovalNode[]): ApprovalNode[] {\n    return nodes.filter((_node) => isNodeTargetsIncludeId(_node, node.id));\n}\n\n/** @hidden */\nexport function getBlankApprovalGraphNode(): ApprovalGraphNode {\n    return {\n        id: `blankId${(Math.random() * 1000).toFixed()}`,\n        name: '',\n        targets: [],\n        approvers: [],\n        status: 'not started',\n        blank: true\n    };\n}\n\n/** @hidden */\nexport function getSpaceApprovalGraphNode(): ApprovalGraphNode {\n    return {\n        id: `spaceId${(Math.random() * 1000).toFixed()}`,\n        name: '',\n        targets: [],\n        approvers: [],\n        status: 'not started',\n        space: true\n    };\n}\n\n/** @hidden */\nexport function isNodeTargetsIncludeId(node: ApprovalNode, id: string): boolean {\n    return node.targets.includes(id);\n}\n","import { ApprovalGraphNode, ApprovalGraphNodeMetadata, ApprovalNode, ApprovalStatus } from './interfaces';\n\nimport {\n    getBlankApprovalGraphNode,\n    getGraphNodes,\n    getParentNodes,\n    getSpaceApprovalGraphNode,\n    isNodeApproved,\n    isNodeStarted,\n    isNodeTargetsIncludeId\n} from './helpers';\n\nexport interface ApprovalFlowGraph {\n    columns: ApprovalGraphColumn[];\n    errors?: boolean;\n}\n\nexport interface ApprovalGraphColumn {\n    nodes: ApprovalGraphNode[];\n    index?: number;\n    allNodesApproved?: boolean;\n}\n\nexport interface ApprovalGraphMetadata {\n    [key: string]: ApprovalGraphNodeMetadata;\n}\n\n/** Algorithm in short:\n * 1. Find all possible paths (longest path length = amount of the columns in the graph)\n * 2. Trim paths (remove blank nodes at the end of the paths)\n * 3. Make all paths the same length (= longest path length) to make every unique node be present at the same index across all paths\n * 4. Sort paths by their likeness between each other to avoid paths crossing\n * 5. Remove \"duplicate\" nodes in paths (make every unique node be present only once across all paths)\n * 6. Remove empty paths\n * 7. Transform paths into the columns\n * 8. Trim columns (remove space nodes at the end of columns)\n * 9. Remove columns which contain only blank and empty nodes\n * 10. Transform columns into the graph columns\n */\nexport function generateApprovalFlowGraph(nodes: ApprovalGraphNode[]): ApprovalFlowGraph {\n    const graph: ApprovalFlowGraph = { columns: [], errors: false };\n\n    if (!nodes.length) {\n        return graph;\n    }\n\n    const rootNodes = findRootNodes(nodes);\n    const finalNodes = findFinalNodes(nodes);\n\n    if (!rootNodes.length || !finalNodes.length) {\n        console.warn(`Err: Not possible to build graph because root or final nodes aren't present!`);\n        graph.errors = true;\n        return graph;\n    }\n\n    const paths = getPaths(rootNodes, nodes);\n\n    if (!paths.length) {\n        console.warn('Err: Not possible to build graph!');\n        graph.errors = true;\n        return graph;\n    }\n\n    const trimmedPaths = trimPaths(paths);\n    const sameLengthPaths = makePathsSameLength(trimmedPaths);\n    const pathsBySimilarity = sortPaths(sameLengthPaths);\n    const pathsWithUniqueNodes = removeDuplicateNodes(pathsBySimilarity);\n    const notEmptyPaths = removeEmptyPaths(pathsWithUniqueNodes);\n    const columns = getColumnsFromPaths(notEmptyPaths);\n    const trimmedColumns = trimColumns(columns);\n    const notEmptyColumns = removeEmptyColumns(trimmedColumns);\n    graph.columns = getGraphColumnsFromPaths(notEmptyColumns);\n\n    return graph;\n}\n\n/** Generate graph metadata */\nexport function generateApprovalFlowGraphMetadata(graph: ApprovalFlowGraph): ApprovalGraphMetadata {\n    const nodes = getGraphNodes(graph);\n    const metadata: ApprovalGraphMetadata = {};\n\n    graph.columns.forEach((column, columnIndex) => {\n        column.nodes.forEach((node, nodeIndex) => {\n            const parents = getParentNodes(node, nodes);\n            const parentsApproved = parents.length ? parents.every((_node) => isNodeApproved(_node)) : false;\n            const isRoot = !parents.length && !node.space;\n            const isFinal = !node.targets.length && !node.space;\n            const parallelEnd = parents.length > 1;\n            const firstOfMultipleRootNodes = columnIndex === 0 && column.nodes.length > 1 && nodeIndex === 0;\n            const firstOfMultipleFinalNodes =\n                columnIndex === graph.columns.length - 1 && column.nodes.length > 1 && nodeIndex === 0;\n\n            metadata[node.id] = {\n                parents,\n                isRoot,\n                isFinal,\n                parallelStart: node.targets.length > 1,\n                parallelEnd,\n                columnIndex,\n                nodeIndex,\n                canAddNodeBefore: !isNodeStarted(node) && !parentsApproved,\n                canAddNodeBeforeAll: isRoot && firstOfMultipleRootNodes,\n                canAddNodeAfter: !isNodeApproved(node),\n                canAddNodeAfterAll:\n                    !isNodeApproved(node) && ((isFinal && firstOfMultipleFinalNodes) || (parallelEnd && node.blank)),\n                canAddParallel: !isNodeApproved(node),\n                isVerticalLineBeforeSolid: node.space && graph.columns[columnIndex - 1]?.allNodesApproved,\n                isVerticalLineAfterSolid: node.space && column.allNodesApproved,\n                firstOfMultipleRootNodes,\n                firstOfMultipleFinalNodes,\n                rootNodesApproved: columnIndex === 0 && column.allNodesApproved\n            };\n        });\n    });\n\n    /* Some flags can be calculated only on the second run, when all nodes already have base metadata */\n    graph.columns.forEach((column) => {\n        column.nodes.forEach((node, nodeIndex) => {\n            const nodeMetadata = metadata[node.id];\n\n            nodeMetadata.isLastInParallel = metadata[node.targets[0]]?.parallelEnd;\n            nodeMetadata.isFirstInParallel = metadata[nodeMetadata.parents[0]?.id]?.parallelStart;\n\n            const columnIndex = column.index;\n            const graphPrevColumn = columnIndex ? graph.columns[columnIndex - 1] : undefined;\n            const graphNextColumn = columnIndex ? graph.columns[columnIndex + 1] : undefined;\n\n            const prevHNode = graphPrevColumn?.nodes[nodeIndex];\n            const nextHNode = graphNextColumn?.nodes[nodeIndex];\n\n            nodeMetadata.renderAddNodeAfterButton =\n                nodeMetadata.canAddNodeAfter &&\n                (nodeMetadata.isFinal ||\n                    nodeMetadata.parallelStart ||\n                    nodeMetadata.isLastInParallel ||\n                    nextHNode?.blank);\n\n            const nextColumnNodes = graphNextColumn?.nodes;\n            if (nodeMetadata.parallelStart && nextColumnNodes) {\n                const children = nextColumnNodes.filter((_node) => node.targets.includes(_node.id));\n                const firstChildIndex = nextColumnNodes.findIndex((_node) => _node.id === children[0].id);\n                const lastChildIndex = nextColumnNodes.findIndex(\n                    (_node) => _node.id === children[children.length - 1].id\n                );\n\n                for (let i = firstChildIndex + 1; i <= lastChildIndex; i++) {\n                    metadata[nextColumnNodes[i].id].renderVerticalLineBefore = true;\n                }\n            }\n\n            const prevColumnNodes = graphPrevColumn?.nodes;\n            if (nodeMetadata.parallelEnd && prevColumnNodes) {\n                const firstParentIndex = prevColumnNodes.findIndex((_node) => _node.id === nodeMetadata.parents[0].id);\n                const lastParentIndex = prevColumnNodes.findIndex(\n                    (_node) => _node.id === nodeMetadata.parents[nodeMetadata.parents.length - 1].id\n                );\n\n                for (let i = firstParentIndex + 1; i <= lastParentIndex; i++) {\n                    metadata[prevColumnNodes[i].id].renderVerticalLineAfter = true;\n                }\n            }\n\n            nodeMetadata.renderVerticalLineBefore = !nodeMetadata.renderVerticalLineBefore\n                ? nodeIndex > 0 && !prevHNode\n                : true;\n            nodeMetadata.renderVerticalLineAfter = !nodeMetadata.renderVerticalLineAfter\n                ? nodeIndex > 0 && !nextHNode\n                : true;\n        });\n    });\n\n    return metadata;\n}\n\nfunction findRootNodes(nodes: ApprovalNode[]): ApprovalNode[] {\n    return nodes.filter((node) => nodes.every((n) => !isNodeTargetsIncludeId(n, node.id)));\n}\n\nfunction findFinalNodes(nodes: ApprovalNode[]): ApprovalNode[] {\n    return nodes.filter((node) => !node.targets.length);\n}\n\n/** Find all possible paths (longest path length = amount of the columns in the graph) */\nfunction getPaths(rootNodes: ApprovalGraphNode[], nodes: ApprovalGraphNode[]): ApprovalGraphNode[][] {\n    const paths: ApprovalGraphNode[][] = [];\n    const queue: ApprovalGraphNode[][] = [];\n\n    for (let i = 0; i < rootNodes.length; i++) {\n        queue.push([rootNodes[i]]);\n\n        while (queue.length) {\n            const path = queue.pop();\n            let lastNodeInPath: ApprovalGraphNode | undefined;\n            if (path) {\n                lastNodeInPath = path[path.length - 1];\n            }\n\n            /** Indicates about an error */\n            if (!lastNodeInPath) {\n                return [];\n            }\n\n            if (!lastNodeInPath.targets.length) {\n                paths.push(path!);\n            } else {\n                lastNodeInPath.targets.forEach((targetId) => {\n                    const targetNode = nodes.find((node) => node.id === targetId);\n                    if (!targetNode) {\n                        return;\n                    }\n                    const newPath = [...path!, targetNode];\n\n                    queue.push(newPath);\n                });\n            }\n        }\n    }\n\n    return paths;\n}\n\n/** Trim paths (remove blank nodes at the end of the paths) */\nfunction trimPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n    const processedPaths: ApprovalGraphNode[][] = [];\n\n    paths.forEach((path) => {\n        let indexToSlice = path.length - 1;\n\n        for (let i = path.length - 1; i > 0; --i) {\n            if (path[i].blank) {\n                indexToSlice = i - 1;\n            } else {\n                break;\n            }\n        }\n\n        path[indexToSlice].targets = [];\n        processedPaths.push(path.slice(0, indexToSlice + 1));\n    });\n\n    return processedPaths;\n}\n\n/** Make all paths the same length (= longest path length) to make every unique node be present at the same index across all paths */\nfunction makePathsSameLength(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n    const processedPaths: ApprovalGraphNode[][] = [];\n    const pathLengths = paths.map((path) => path.length);\n    const longestPathLength = Math.max(...pathLengths);\n\n    paths.forEach((path) => {\n        if (path.length === longestPathLength) {\n            processedPaths.push(path);\n            return;\n        }\n\n        path.forEach((node, nodeIndex) => {\n            /** Try to get blank nodes from already processed paths as paths may be the same within some part */\n            let blankNodes = getBlankNodesAfterNode(node, processedPaths);\n            if (blankNodes.length && blankNodes[0].id !== path[nodeIndex + 1]?.id) {\n                path.splice(nodeIndex + 1, 0, ...blankNodes);\n                return;\n            }\n\n            const nodeIndexInPaths = paths.map((_path) => _path.indexOf(node));\n            const mostFarNodeIndexInPaths = Math.max(...nodeIndexInPaths);\n\n            if (nodeIndex < mostFarNodeIndexInPaths) {\n                blankNodes = getBlankNodes(mostFarNodeIndexInPaths - nodeIndex, path[nodeIndex - 1].status);\n\n                blankNodes[blankNodes.length - 1].targets = [node.id];\n                path[nodeIndex - 1].targets = [blankNodes[0].id];\n\n                path.splice(nodeIndex, 0, ...blankNodes);\n                return;\n            }\n\n            if (nodeIndex === mostFarNodeIndexInPaths && nodeIndex === path.length - 1) {\n                blankNodes = getBlankNodes(longestPathLength - path.length, path[nodeIndex].status);\n\n                path[nodeIndex].targets = [blankNodes[0].id];\n\n                path.splice(nodeIndex + 1, 0, ...blankNodes);\n                return;\n            }\n        });\n\n        processedPaths.push(path);\n    });\n\n    return processedPaths;\n}\n\n/** Try to get blank nodes from already processed paths as paths may be the same within some part */\nfunction getBlankNodesAfterNode(node: ApprovalGraphNode, paths: ApprovalGraphNode[][]): ApprovalGraphNode[] {\n    const blankNodes: ApprovalGraphNode[] = [];\n\n    const pathWithBlankNodeAfter = paths.find((path) => {\n        const nodeIndex = path.indexOf(node);\n        return nodeIndex > -1 && path[nodeIndex + 1]?.blank;\n    });\n\n    if (pathWithBlankNodeAfter) {\n        const nodeIndex = pathWithBlankNodeAfter.indexOf(node) + 1;\n        const nextNotBlankNodeIndex = pathWithBlankNodeAfter.findIndex(\n            (_node, _index) => _index > nodeIndex && !_node.blank\n        );\n\n        blankNodes.push(\n            ...pathWithBlankNodeAfter.slice(nodeIndex, nextNotBlankNodeIndex > 0 ? nextNotBlankNodeIndex : undefined)\n        );\n    }\n\n    return blankNodes;\n}\n\n/** Generate blank nodes sequential */\nfunction getBlankNodes(count: number, status: ApprovalStatus): ApprovalGraphNode[] {\n    const nodes: ApprovalGraphNode[] = [];\n\n    let node: ApprovalGraphNode;\n    let nodeId: string | undefined;\n\n    for (let i = count; i > 0; i--) {\n        node = Object.assign({}, getBlankApprovalGraphNode(), { targets: nodeId ? [nodeId] : [], status });\n        nodeId = node.id;\n\n        nodes.unshift(node);\n    }\n\n    return nodes;\n}\n\n/** Sort paths by their likeness (= count of the same nodes relatively to the other paths) between each other to avoid paths crossing */\nfunction sortPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n    if (paths.length === 1) {\n        return paths;\n    }\n\n    /** [pathIndex, relativeToPathIndex, sameNodesCount][] */\n    let similarities: number[][] = [];\n    let pathSimilarity = 0;\n\n    paths.forEach((path, index) => {\n        for (let i = 0; i < paths.length; i++) {\n            if (index !== i && !similarities.some((likely) => index === likely[1] && i === likely[0])) {\n                pathSimilarity = 0;\n\n                for (let j = 0; j < path.length; j++) {\n                    if (path[j].id === paths[i][j].id) {\n                        pathSimilarity++;\n                    }\n                }\n\n                similarities.push([index, i, pathSimilarity]);\n            }\n        }\n    });\n\n    similarities = similarities.sort((a, b) => (a[2] > b[2] ? -1 : 1));\n\n    const usedPathIndexes: number[] = [];\n    const processedPaths: ApprovalGraphNode[][] = [];\n\n    similarities.forEach((similarity) => {\n        if (!usedPathIndexes.some((i) => i === similarity[0])) {\n            processedPaths.push(paths[similarity[0]]);\n            usedPathIndexes.push(similarity[0]);\n        }\n\n        if (!usedPathIndexes.some((i) => i === similarity[1])) {\n            processedPaths.push(paths[similarity[1]]);\n            usedPathIndexes.push(similarity[1]);\n        }\n    });\n\n    return processedPaths;\n}\n\n/** Remove \"duplicate\" nodes in paths (make every unique node be present only once across all paths) */\nfunction removeDuplicateNodes(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n    const processedPaths: ApprovalGraphNode[][] = [];\n\n    paths.forEach((path, index) => {\n        path.forEach((node) => {\n            paths.forEach((_path, _index) => {\n                const isNodeInPath = _index !== index && _path.indexOf(node) > -1;\n\n                if (isNodeInPath) {\n                    /** Instead of node place space node */\n                    _path.splice(_path.indexOf(node), 1, getSpaceApprovalGraphNode());\n                }\n            });\n        });\n\n        processedPaths.push(path);\n    });\n\n    return processedPaths;\n}\n\n/** Remove empty paths (which contains only empty nodes) */\nfunction removeEmptyPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n    return paths.reduce((acc, path) => {\n        if (!path.every((node) => node.space)) {\n            acc.push(path);\n        }\n\n        return acc;\n    }, [] as ApprovalGraphNode[][]);\n}\n\n/** Transform paths into the columns (it's possible as they're all the same length) */\nfunction getColumnsFromPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n    const columns: ApprovalGraphNode[][] = [];\n    let column: ApprovalGraphNode[] = [];\n\n    for (let i = 0; i < paths[0].length; i++) {\n        column = [];\n\n        for (let v = 0; v < paths.length; v++) {\n            column.push(paths[v][i]);\n        }\n\n        columns.push(column);\n    }\n\n    return columns;\n}\n\n/** Trim space nodes at the end of the columns. */\nfunction trimColumns(columns: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n    const processedColumns: ApprovalGraphNode[][] = [];\n\n    columns.forEach((column) => {\n        let lastNotSpaceNodeIndex;\n\n        for (let i = column.length - 1; i >= 0; i--) {\n            if (!column[i].space) {\n                lastNotSpaceNodeIndex = i;\n                break;\n            }\n        }\n\n        if (lastNotSpaceNodeIndex < column.length) {\n            processedColumns.push(column.slice(0, lastNotSpaceNodeIndex + 1));\n        } else {\n            processedColumns.push(column);\n        }\n    });\n\n    return processedColumns;\n}\n\n/** Remove empty columns (where every node is a blank node)  */\nfunction removeEmptyColumns(columns: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n    const processedColumns: ApprovalGraphNode[][] = [];\n\n    columns.forEach((column) => {\n        const areAllNodesEmpty = column.every((node) => node.blank || node.space);\n\n        if (areAllNodesEmpty) {\n            column.forEach((node) => {\n                if (node.blank) {\n                    /** Connect previous column to the next column, omitting current column. */\n                    replaceTargets(node.id, node.targets, columns);\n                }\n            });\n        } else {\n            processedColumns.push(column);\n        }\n    });\n\n    return processedColumns;\n}\n\nfunction replaceTargets(replaceId: string, replaceWithId: string[], columns: ApprovalGraphNode[][]): void {\n    columns.forEach((column) => {\n        column.forEach((n) => {\n            if (isNodeTargetsIncludeId(n, replaceId)) {\n                n.targets = n.targets.filter((_id) => _id !== replaceId);\n                n.targets.push(...replaceWithId);\n            }\n        });\n    });\n}\n\n/** Transform columns into the graph columns (with additional metadata). */\nfunction getGraphColumnsFromPaths(columns: ApprovalGraphNode[][]): ApprovalGraphColumn[] {\n    const graphColumns: ApprovalGraphColumn[] = [];\n\n    columns.forEach((column, index) => {\n        column.forEach((node) => (node.colIndex = index));\n\n        graphColumns.push({\n            nodes: column,\n            index,\n            allNodesApproved: column.every((node) => isNodeApproved(node))\n        });\n    });\n\n    return graphColumns;\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { ListComponent, StandardListItemComponent } from '@fundamental-ngx/platform/list';\nimport { trackByFn } from '../helpers';\nimport { ApprovalTeam } from '../interfaces';\n\n/**\n * @deprecated\n * ApprovalFlowTeamList component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-team-list',\n    templateUrl: './approval-flow-team-list.component.html',\n    styleUrl: './approval-flow-team-list.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'fdp-approval-flow-team-list'\n    },\n    imports: [\n        ListComponent,\n        ContentDensityDirective,\n        FormGroupComponent,\n        FormItemComponent,\n        RadioButtonComponent,\n        FormsModule,\n        StandardListItemComponent,\n        IconComponent\n    ]\n})\nexport class ApprovalFlowTeamListComponent {\n    /** Approval flow teams */\n    @Input()\n    teams: ApprovalTeam[] = [];\n\n    /** Whether in RTL mode */\n    @Input()\n    isRtl = false;\n\n    /** Selected team ID */\n    @Input()\n    selectedTeamId: Nullable<string>;\n\n    /** Event emitted on team click */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onTeamClick = new EventEmitter<ApprovalTeam>();\n\n    /** Event emitted on team selection change */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onTeamRadioClick = new EventEmitter<ApprovalTeam>();\n\n    /** @hidden */\n    _trackByFn = trackByFn;\n\n    /** @hidden */\n    _showTeamDetails(team: ApprovalTeam): void {\n        this.onTeamClick.emit(team);\n    }\n}\n","<fdp-list [hasByLine]=\"true\" fdCompact>\n    <fd-form-group>\n        @for (team of teams; track _trackByFn(i, team); let i = $index) {\n            <div fd-form-item>\n                <fd-radio-button\n                    [value]=\"team.id\"\n                    [attr.id]=\"'team-radio' + i\"\n                    [name]=\"'team-radio' + i\"\n                    [(ngModel)]=\"selectedTeamId\"\n                    (click)=\"onTeamRadioClick.emit(team)\"\n                >\n                </fd-radio-button>\n                <fdp-standard-list-item\n                    [attr.id]=\"'approval-team-' + team.id\"\n                    [avatar]=\"{ image: '', ariaLabel: team.name }\"\n                    [description]=\"team.description || team.members.length + ' members'\"\n                    [title]=\"team.name\"\n                    (click)=\"_showTeamDetails(team)\"\n                >\n                </fdp-standard-list-item>\n                <fd-icon [glyph]=\"'navigation-' + (isRtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n            </div>\n        }\n    </fd-form-group>\n</fdp-list>\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { AvatarComponent } from '@fundamental-ngx/core/avatar';\nimport { ApprovalUser } from '../interfaces';\n\n/**\n * @deprecated\n * ApprovalFlowUserDetails component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-user-details',\n    templateUrl: './approval-flow-user-details.component.html',\n    styleUrl: './approval-flow-user-details.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'fdp-approval-flow-user-details'\n    },\n    imports: [AvatarComponent, NgTemplateOutlet, AsyncPipe]\n})\nexport class ApprovalFlowUserDetailsComponent {\n    /** Approval Flow user */\n    @Input()\n    user: ApprovalUser;\n\n    /** Approval Flow user details */\n    @Input()\n    details: Nullable<Observable<any>>;\n\n    /** Approval Flow user details template */\n    @Input()\n    detailsTemplate: TemplateRef<any>;\n}\n","<div class=\"fdp-approval-flow-user-details__user-info\">\n    <fd-avatar [image]=\"user.imgUrl\" size=\"s\"> </fd-avatar>\n    <div>\n        <div class=\"fdp-approval-flow-user-details__name\">{{ user.name }}</div>\n        <div class=\"fdp-approval-flow-user-details__description\">{{ user.description }}</div>\n    </div>\n</div>\n@if (detailsTemplate) {\n    <ng-template [ngTemplateOutlet]=\"detailsTemplate\" [ngTemplateOutletContext]=\"{ data: details | async }\">\n    </ng-template>\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DestroyRef,\n    EventEmitter,\n    inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Output,\n    QueryList,\n    SimpleChanges,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n    BaseListItem,\n    ListComponent,\n    SelectionChangeEvent,\n    StandardListItemComponent\n} from '@fundamental-ngx/platform/list';\nimport { trackByFn } from '../helpers';\nimport { ApprovalUser } from '../interfaces';\n\nconst ITEMS_RENDERED_AT_ONCE = 100;\nconst INTERVAL_IN_MS = 10;\n\n/**\n * @deprecated\n * ApprovalFlowUserList component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-user-list',\n    templateUrl: './approval-flow-user-list.component.html',\n    styleUrl: './approval-flow-user-list.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'fdp-approval-flow-user-list'\n    },\n    imports: [ListComponent, FormsModule, StandardListItemComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowUserListComponent implements AfterViewInit, OnChanges, OnDestroy {\n    /** Approval flow users */\n    @Input()\n    users: ApprovalUser[] = [];\n\n    /** Approval flow selected users */\n    @Input()\n    selectedUsers: ApprovalUser[] = [];\n\n    /** Whether the list is selectable */\n    @Input()\n    isSelectable = true;\n\n    /** Event emitted on user click */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onUserClick = new EventEmitter<ApprovalUser>();\n\n    /** Event emitted on selection change */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onSelectionChange = new EventEmitter<ApprovalUser[]>();\n\n    /** @hidden */\n    @ViewChild(ListComponent)\n    list: ListComponent<ApprovalUser>;\n\n    /** @hidden */\n    @ViewChildren(StandardListItemComponent)\n    listItems: QueryList<StandardListItemComponent>;\n\n    /** @hidden */\n    _selectedItems: BaseListItem[] = [];\n\n    /** @hidden */\n    _idPrefix = 'approval-node-user-';\n\n    /** @hidden */\n    _trackByFn = trackByFn;\n\n    /** @hidden */\n    _displayUsers: ApprovalUser[] = [];\n\n    /** @hidden */\n    _allSelectedUsers: ApprovalUser[] = [];\n\n    /** @hidden */\n    private _intervalID?: number;\n\n    /** @hidden */\n    private _destroyed$ = inject(DestroyRef);\n\n    /** @hidden */\n    private _dontCallSelection = false;\n\n    /** @hidden */\n    constructor(private _cdr: ChangeDetectorRef) {}\n\n    /** @hidden */\n    ngAfterViewInit(): void {\n        if (this.selectedUsers.length) {\n            this._selectItems(this.selectedUsers);\n            this._allSelectedUsers = [...this.selectedUsers];\n            this._cdr.markForCheck();\n        }\n\n        if (this.isSelectable) {\n            this._listenToListItemChange();\n        }\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.users) {\n            this._collectDataProgressive();\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._killInterval();\n    }\n\n    /** @hidden */\n    _onSelect(event: SelectionChangeEvent): void {\n        if (!this._dontCallSelection) {\n            this._selectedItems = event.selectedItems;\n\n            if (event.removed) {\n                const ids = event.removed.map((item: BaseListItem) => item.id);\n                this._allSelectedUsers = this._allSelectedUsers.filter(\n                    (user: ApprovalUser) => !ids.includes(`${this._idPrefix + user.id}`)\n                );\n            }\n\n            if (event.added) {\n                this._allSelectedUsers.push(...this._getUsersFromSelectedItems(event.added));\n            }\n\n            this.onSelectionChange.emit(this._allSelectedUsers);\n            this._cdr.detectChanges();\n        }\n    }\n\n    /** @hidden */\n    private _getUsersFromSelectedItems(items: BaseListItem[]): ApprovalUser[] {\n        return items\n            .map((item) => this.users.find((user) => `${this._idPrefix + user.id}` === item.id))\n            .filter((u): u is ApprovalUser => !!u);\n    }\n\n    /** @hidden */\n    private _collectDataProgressive(): void {\n        this._killInterval();\n        this._displayUsers = [];\n\n        if (!this.users?.length) {\n            return;\n        }\n\n        const collectionTracker = { currentIndex: 0 };\n\n        this._userCollectorIntervalFn(collectionTracker);\n        this._intervalID = window.setInterval(\n            this._userCollectorIntervalFn.bind(this),\n            INTERVAL_IN_MS,\n            collectionTracker\n        );\n    }\n\n    /** @hidden */\n    private _userCollectorIntervalFn(tracker: { currentIndex: number }): void {\n        const nextIndex = tracker.currentIndex + ITEMS_RENDERED_AT_ONCE;\n\n        const collectedUsers: ApprovalUser[] = [];\n\n        for (let i = tracker.currentIndex; i <= nextIndex; i++) {\n            if (i >= this.users.length) {\n                this._killInterval();\n                break;\n            }\n\n            collectedUsers.push(this.users[i]);\n        }\n\n        tracker.currentIndex += ITEMS_RENDERED_AT_ONCE;\n\n        this._displayUsers.push(...collectedUsers);\n        this._cdr.markForCheck();\n    }\n\n    /** @hidden */\n    private _killInterval(): void {\n        if (this._intervalID) {\n            clearInterval(this._intervalID);\n        }\n    }\n\n    /** @hidden */\n    private _listenToListItemChange(): void {\n        this.listItems.changes.pipe(takeUntilDestroyed(this._destroyed$)).subscribe(() => {\n            this._selectItems(this._allSelectedUsers);\n            this._cdr.detectChanges();\n        });\n    }\n\n    /** @hidden */\n    private _selectItems(users: ApprovalUser[]): void {\n        this._dontCallSelection = true;\n        const allSelectedUserNames = users.map((user) => this._idPrefix + user.id);\n        const currentSelectedList = this.listItems.filter((item) => allSelectedUserNames.includes(item.id));\n        this.list._clearSelection();\n        this._selectedItems = [...currentSelectedList];\n        this._selectedItems.forEach((item) => {\n            item._selected = true;\n            this.list._selectItem(item);\n        });\n        this._dontCallSelection = false;\n    }\n}\n","@if (_allSelectedUsers.length) {\n    <div class=\"fdp-approval-flow-user-list__selected-count\">\n        @if (_allSelectedUsers.length === 1) {\n            {{ ('platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate)() }}\n        } @else {\n            {{\n                (\n                    'platformApprovalFlow.userListSelectedItemsCountPlural'\n                    | fdTranslate: { count: _allSelectedUsers.length }\n                )()\n            }}\n        }\n    </div>\n}\n<fdp-list\n    [selectionMode]=\"isSelectable ? 'multi' : 'none'\"\n    [selection]=\"isSelectable\"\n    [navigationIndicator]=\"true\"\n    [hasByLine]=\"true\"\n    [(ngModel)]=\"_selectedItems\"\n    [selectedItems]=\"_selectedItems\"\n    (selectedItemChange)=\"_onSelect($event)\"\n>\n    @for (_user of _displayUsers; track _trackByFn($index, _user)) {\n        <fdp-standard-list-item\n            [attr.id]=\"_idPrefix + _user.id\"\n            [id]=\"_idPrefix + _user.id\"\n            [avatar]=\"{ image: _user.imgUrl, ariaLabel: _user.name }\"\n            [description]=\"_user.description\"\n            [ariaLabel]=\"_user.name\"\n            [title]=\"_user.name\"\n            (click)=\"$event.stopPropagation(); onUserClick.emit(_user)\"\n        ></fdp-standard-list-item>\n    }\n</fdp-list>\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { ApprovalTeam } from '../interfaces';\n\nexport enum VIEW_MODES {\n    SELECT_TEAM = 'SELECT_TEAM',\n    SELECT_USER = 'SELECT_USER',\n    VIEW_TEAM_MEMBERS = 'VIEW_TEAM_MEMBERS',\n    USER_DETAILS = 'USER_DETAILS'\n}\n\n@Injectable()\nexport class ApprovalFlowAddNodeViewService {\n    /** @hidden */\n    onViewChange = new EventEmitter();\n\n    /** @hidden */\n    private currentView?: VIEW_MODES;\n    /** @hidden */\n    private selectedTeam?: ApprovalTeam;\n\n    /** @hidden */\n    get isUserDetailsMode(): boolean {\n        return this.currentView === VIEW_MODES.USER_DETAILS;\n    }\n\n    /** @hidden */\n    get isTeamMembersMode(): boolean {\n        return this.currentView === VIEW_MODES.VIEW_TEAM_MEMBERS;\n    }\n\n    /** @hidden */\n    get isSelectUserMode(): boolean {\n        return this.currentView === VIEW_MODES.SELECT_USER;\n    }\n\n    /** @hidden */\n    get isSelectTeamMode(): boolean {\n        return this.currentView === VIEW_MODES.SELECT_TEAM;\n    }\n\n    /** @hidden */\n    get team(): ApprovalTeam | undefined {\n        return this.selectedTeam;\n    }\n\n    /** @hidden */\n    setCurrentView(view: VIEW_MODES): void {\n        this.currentView = view;\n        this.onViewChange.emit();\n    }\n\n    /** @hidden */\n    resetView(): void {\n        this.currentView = undefined;\n        this.onViewChange.emit();\n    }\n\n    /** @hidden */\n    selectTeam(team: ApprovalTeam): void {\n        this.selectedTeam = team;\n    }\n\n    /** @hidden */\n    resetTeam(): void {\n        this.selectedTeam = undefined;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    OnDestroy,\n    OnInit,\n    TemplateRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport { Observable, Subscription, combineLatest } from 'rxjs';\n\nimport { FdDate } from '@fundamental-ngx/core/datetime';\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { DatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport {\n    DialogBodyComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { FormItemComponent, FormLabelComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { MultiInputComponent } from '@fundamental-ngx/core/multi-input';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { ApprovalFlowTeamDataSource, ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\nimport { ApprovalFlowTeamListComponent } from '../approval-flow-team-list/approval-flow-team-list.component';\nimport { ApprovalFlowUserDetailsComponent } from '../approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from '../approval-flow-user-list/approval-flow-user-list.component';\nimport { displayTeamFn, displayUserFn, filterByName, trackByFn } from '../helpers';\nimport { ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\nimport { ApprovalFlowAddNodeViewService, VIEW_MODES } from '../services/approval-flow-add-node-view.service';\n\nexport interface AddNodeDialogRefData {\n    isEdit?: boolean;\n    showNodeTypeSelect?: boolean;\n    node?: ApprovalNode;\n    nodeTarget?: ApprovalFlowNodeTarget;\n    teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n    userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n    userDetailsTemplate: TemplateRef<any>;\n    checkDueDate?: boolean;\n    rtl: boolean;\n}\n\nexport interface AddNodeDialogFormData {\n    node: ApprovalNode;\n    nodeType: APPROVAL_FLOW_NODE_TYPES;\n    toNextSerial: boolean;\n}\n\nexport type ApprovalFlowNewNodePlacement = 'before' | 'after' | 'before-all' | 'after-all';\n\nexport type ApprovalFlowNodeTarget = ApprovalFlowNewNodePlacement | 'empty' | 'parallel';\n\nexport enum APPROVAL_FLOW_NODE_TYPES {\n    SERIAL = 'SERIAL',\n    PARALLEL = 'PARALLEL'\n}\n\nexport enum APPROVAL_FLOW_APPROVER_TYPES {\n    SINGLE_USER = 'SINGLE_USER',\n    ANYONE = 'ANYONE',\n    EVERYONE = 'EVERYONE'\n}\n\n/**\n * @deprecated\n * ApprovalFlowAddNode component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-add-node',\n    templateUrl: './approval-flow-add-node.component.html',\n    styleUrls: ['../styles/approval-flow-dialog.scss', './approval-flow-add-node.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'fdp-approval-flow-dialog fdp-approval-flow-add-node'\n    },\n    imports: [\n        DialogComponent,\n        ContentDensityDirective,\n        DialogHeaderComponent,\n        TemplateDirective,\n        IconComponent,\n        SearchFieldComponent,\n        CdkScrollable,\n        ScrollbarDirective,\n        DialogBodyComponent,\n        FormItemComponent,\n        FormLabelComponent,\n        SelectComponent,\n        OptionComponent,\n        MultiInputComponent,\n        FormsModule,\n        CheckboxComponent,\n        DatePickerComponent,\n        ApprovalFlowTeamListComponent,\n        ApprovalFlowUserListComponent,\n        ApprovalFlowUserDetailsComponent,\n        DialogFooterComponent,\n        ButtonBarComponent,\n        BusyIndicatorComponent,\n        FdTranslatePipe\n    ]\n})\nexport class ApprovalFlowAddNodeComponent implements OnInit, OnDestroy {\n    /** @hidden */\n    _nodeType = APPROVAL_FLOW_NODE_TYPES.SERIAL;\n\n    /** @hidden */\n    _nodeTypes = APPROVAL_FLOW_NODE_TYPES;\n\n    /** @hidden */\n    _nodeTypesArray = Object.keys(APPROVAL_FLOW_NODE_TYPES);\n\n    /** @hidden */\n    _approverType = APPROVAL_FLOW_APPROVER_TYPES.SINGLE_USER;\n\n    /** @hidden */\n    _approverTypes = APPROVAL_FLOW_APPROVER_TYPES;\n\n    /** @hidden */\n    _approverTypesArray = Object.keys(APPROVAL_FLOW_APPROVER_TYPES);\n\n    /** @hidden */\n    _dueDate = FdDate.getNow();\n\n    /** @hidden */\n    _selectMode = false;\n\n    /** @hidden */\n    _approvers: ApprovalUser[] = [];\n\n    /** @hidden */\n    _teams: ApprovalTeam[] = [];\n\n    /** @hidden */\n    _selectedApprovers: ApprovalUser[] = [];\n\n    /** @hidden */\n    _selectedTeam: Nullable<ApprovalTeam>;\n\n    /** @hidden */\n    _selectedTeamArray: ApprovalTeam[] = [];\n\n    /** @hidden */\n    _selectedTeamMembers: ApprovalUser[] = [];\n\n    /** @hidden */\n    _filteredTeamMembers: ApprovalUser[] = [];\n\n    /** @hidden */\n    _userToShowDetails?: ApprovalUser;\n\n    /** @hidden */\n    _userToShowDetailsData$?: Observable<any>;\n\n    /** @hidden */\n    _checkDueDate = false;\n\n    /** @hidden */\n    _displayUserFn = displayUserFn;\n\n    /** @hidden */\n    _displayTeamFn = displayTeamFn;\n\n    /** @hidden */\n    _trackByFn = trackByFn;\n\n    /** @hidden */\n    _addToNextSerial = false;\n\n    /** @hidden */\n    _searchInput = '';\n\n    /** @hidden */\n    private _viewChangeSub: Subscription;\n\n    /** @hidden */\n    private _dataSourceSub: Subscription;\n\n    /** @hidden */\n    constructor(\n        public dialogRef: DialogRef<AddNodeDialogRefData>,\n        public viewService: ApprovalFlowAddNodeViewService,\n        private _cdr: ChangeDetectorRef\n    ) {}\n\n    /** @hidden */\n    get _data(): AddNodeDialogRefData {\n        return this.dialogRef.data;\n    }\n\n    /** @hidden */\n    get _isSingleUserMode(): boolean {\n        return this._approverType === this._approverTypes.SINGLE_USER;\n    }\n\n    /** @hidden */\n    get _isMainSubmitButtonDisabled(): boolean {\n        const approvers = this._isSingleUserMode ? this._selectedApprovers : this._selectedTeamArray;\n\n        return !approvers.length || (this._checkDueDate && !this._dueDate);\n    }\n\n    /** @hidden */\n    get _headerArrowGlyph(): string {\n        return 'navigation-' + (this._data.rtl ? 'right' : 'left') + '-arrow';\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        // triggering initial loading of data in data sources.\n        this._data.teamDataSource.match();\n        this._data.userDataSource.match();\n        const teams$ = this._data.teamDataSource.open();\n        const approvers$ = this._data.userDataSource.open();\n        this._dataSourceSub = combineLatest([teams$, approvers$]).subscribe(([teams, approvers]) => {\n            this._teams = teams;\n\n            this._approvers = approvers;\n\n            if (this._data.isEdit) {\n                this._checkDueDate = !!this._data.checkDueDate;\n\n                if (this._checkDueDate && this._data.node?.dueDate) {\n                    this._dueDate = FdDate.getFdDateByDate(new Date(this._data.node.dueDate));\n                }\n\n                this._selectedApprovers = [...(this._data.node?.approvers ?? [])];\n\n                const team =\n                    this._data.node?.approvalTeamId &&\n                    this._teams.find((t) => t.id === this._data.node?.approvalTeamId);\n                if (team) {\n                    this.viewService.selectTeam(team);\n\n                    this._selectedTeam = team;\n                    this._selectedTeamArray = [team];\n                    this._approverType = this._data.node?.isEveryoneApprovalNeeded\n                        ? this._approverTypes.EVERYONE\n                        : this._approverTypes.ANYONE;\n                }\n            }\n            this._cdr.detectChanges();\n        });\n\n        this._viewChangeSub = this.viewService.onViewChange.subscribe(() => {\n            this._cdr.detectChanges();\n        });\n\n        switch (this._data.nodeTarget) {\n            case 'empty':\n            case 'before':\n            case 'after':\n                this._nodeType = this._nodeTypes.SERIAL;\n                break;\n            case 'parallel':\n                this._nodeType = this._nodeTypes.PARALLEL;\n                break;\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._viewChangeSub.unsubscribe();\n        this._dataSourceSub.unsubscribe();\n        this._data.userDataSource.close();\n        this._data.teamDataSource.close();\n    }\n\n    /** @hidden */\n    _goToSelectMode(): void {\n        this._selectMode = true;\n\n        this.viewService.setCurrentView(this._isSingleUserMode ? VIEW_MODES.SELECT_USER : VIEW_MODES.SELECT_TEAM);\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _exitSelectMode(): void {\n        this._searchInput = '';\n        this._onSearchStringChange('');\n        this._selectedApprovers = this._data.node?.approvers?.length ? [...this._data.node.approvers] : [];\n\n        if (!this._data.isEdit && !this._data.node?.approvalTeamId) {\n            this.viewService.resetTeam();\n        }\n\n        this._selectMode = false;\n        this.viewService.resetView();\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _setSelectedApprovers(approvers: ApprovalUser[]): void {\n        this._selectedApprovers = approvers;\n\n        this._confirmSelectedApprovers();\n    }\n\n    /** @hidden */\n    _confirmSelectedApprovers(): void {\n        if (!this._data.node) {\n            return;\n        }\n        this._data.node.approvers = this._selectedApprovers;\n        this._data.node.variousTeams = this._data.node.approvers.some(\n            (u) => u.teamId !== this._data.node!.approvers[0].teamId\n        );\n        this._data.node.description = this._data.node.variousTeams ? '' : this._selectedApprovers[0]?.description;\n\n        delete this._data.node.approvalTeamId;\n        delete this._data.node.isEveryoneApprovalNeeded;\n\n        this._exitSelectMode();\n    }\n\n    /** @hidden */\n    _setSelectedTeam(team: ApprovalTeam): void {\n        this.viewService.selectTeam(team);\n    }\n\n    /** @hidden */\n    _confirmSelectedTeam(): void {\n        if (!this.viewService.team) {\n            return;\n        }\n        this._selectedTeam = this.viewService.team;\n        this._selectedTeamArray = [this.viewService.team];\n\n        if (this._data.node) {\n            this._data.node.variousTeams = false;\n            this._data.node.approvalTeamId = this.viewService.team.id;\n            this._data.node.description = this.viewService.team.name;\n            this._data.node.isEveryoneApprovalNeeded = this._approverType === APPROVAL_FLOW_APPROVER_TYPES.EVERYONE;\n        }\n\n        this._exitSelectMode();\n    }\n\n    /** @hidden */\n    _seeUserDetails(user: ApprovalUser): void {\n        this.viewService.setCurrentView(VIEW_MODES.USER_DETAILS);\n\n        this._userToShowDetails = user;\n        this._userToShowDetailsData$ = this._data.userDataSource.dataProvider.getOne(new Map([['id', user.id]]));\n\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _exitUserDetailsMode(): void {\n        this.viewService.setCurrentView(this.viewService.team ? VIEW_MODES.VIEW_TEAM_MEMBERS : VIEW_MODES.SELECT_USER);\n\n        this._userToShowDetails = undefined;\n        this._userToShowDetailsData$ = undefined;\n\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _viewTeamMembers(team: ApprovalTeam): void {\n        this.viewService.selectTeam(team);\n        this.viewService.setCurrentView(VIEW_MODES.VIEW_TEAM_MEMBERS);\n\n        this._selectedTeamMembers = team.members;\n\n        this._setFilteredTeamMembers(this._selectedTeamMembers); // applying local filtering\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _exitTeamMembersMode(): void {\n        this.viewService.setCurrentView(VIEW_MODES.SELECT_TEAM);\n        this.viewService.resetTeam();\n\n        this._selectedTeamMembers = [];\n\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _submit(): void {\n        if (this._data.node && !this._isSingleUserMode && this._selectedTeam) {\n            this._data.node.approvers = [...this._selectedTeam.members];\n        }\n\n        if (this._data.node && this._checkDueDate) {\n            this._data.node.dueDate = this._dueDate.toDate();\n        }\n\n        this.dialogRef.close({\n            node: this._data.node,\n            nodeType: this._nodeType,\n            toNextSerial: this._addToNextSerial\n        } as AddNodeDialogFormData);\n    }\n\n    /** @hidden */\n    _onSearchStringChange(searchString = ''): void {\n        this._searchInput = searchString;\n        const params = new Map([['query', searchString]]);\n\n        if (this.viewService.isSelectUserMode) {\n            this._data.userDataSource.match(params);\n        } else if (this.viewService.isSelectTeamMode) {\n            this._data.teamDataSource.match(params);\n        } else if (this.viewService.isTeamMembersMode) {\n            this._setFilteredTeamMembers(this._selectedTeamMembers.filter((user) => filterByName(user, searchString)));\n        }\n    }\n\n    /** @hidden */\n    _setFilteredTeamMembers(users: ApprovalUser[]): void {\n        this._filteredTeamMembers = [...users];\n        this._cdr.detectChanges();\n    }\n}\n","<fd-dialog fdCompact>\n    <fd-dialog-header [class.show-search]=\"_selectMode && !_userToShowDetails\">\n        <ng-template fdkTemplate=\"header\">\n            <p>\n                @if (!_selectMode && !_data.isEdit) {\n                    {{ ('platformApprovalFlow.addNodeDialogHeaderAddApprovers' | fdTranslate)() }}\n                }\n                @if (!_selectMode && _data.isEdit) {\n                    {{ ('platformApprovalFlow.addNodeDialogHeaderEditApprover' | fdTranslate)() }}\n                }\n                @if (viewService.isSelectUserMode || viewService.isSelectTeamMode) {\n                    {{ ('platformApprovalFlow.addNodeDialogHeaderAddApproverTeam' | fdTranslate)() }}\n                }\n                @if (viewService.isTeamMembersMode) {\n                    <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitTeamMembersMode()\"></fd-icon>\n                    {{ viewService.team?.name ?? '' }} ({{ viewService.team?.members?.length ?? 0 }})\n                }\n                @if (viewService.isUserDetailsMode) {\n                    <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitUserDetailsMode()\"></fd-icon>\n                    {{ ('platformApprovalFlow.addNodeDialogHeaderDetail' | fdTranslate)() }}\n                }\n            </p>\n            @if (_selectMode && !_userToShowDetails) {\n                <fdp-search-field\n                    [placeholder]=\"('platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate)()\"\n                    [suggestions]=\"[]\"\n                    [inputText]=\"_searchInput\"\n                    (inputChange)=\"_onSearchStringChange($event.text)\"\n                ></fdp-search-field>\n            }\n        </ng-template>\n    </fd-dialog-header>\n    <fd-dialog-body [class.fd-dialog__body--auto-height]=\"viewService.isUserDetailsMode\">\n        @if (!_selectMode) {\n            @if (_data.showNodeTypeSelect) {\n                <div fd-form-item>\n                    <label fd-form-label>\n                        {{ ('platformApprovalFlow.addNodeDialogNodeType' | fdTranslate)() }}\n                    </label>\n                    <fd-select [(value)]=\"_nodeType\">\n                        @for (option of _nodeTypesArray; track option) {\n                            @switch (option) {\n                                @case (_nodeTypes.SERIAL) {\n                                    <li fd-option [value]=\"option\">\n                                        {{ ('platformApprovalFlow.addNodeDialogNodeTypeSerial' | fdTranslate)() }}\n                                    </li>\n                                }\n                                @case (_nodeTypes.PARALLEL) {\n                                    <li fd-option [value]=\"option\">\n                                        {{ ('platformApprovalFlow.addNodeDialogNodeTypeParallel' | fdTranslate)() }}\n                                    </li>\n                                }\n                            }\n                        }\n                    </fd-select>\n                </div>\n            }\n            <div fd-form-item>\n                <label fd-form-label>\n                    {{ ('platformApprovalFlow.addNodeDialogApproverType' | fdTranslate)() }}\n                </label>\n                <fd-select [(value)]=\"_approverType\">\n                    @for (option of _approverTypesArray; track option) {\n                        @switch (option) {\n                            @case (_approverTypes.SINGLE_USER) {\n                                <li fd-option [value]=\"option\">\n                                    {{ ('platformApprovalFlow.addNodeDialogApproverTypeUser' | fdTranslate)() }}\n                                </li>\n                            }\n                            @case (_approverTypes.ANYONE) {\n                                <li fd-option [value]=\"option\">\n                                    {{ ('platformApprovalFlow.addNodeDialogApproverTypeTeamAnyone' | fdTranslate)() }}\n                                </li>\n                            }\n                            @case (_approverTypes.EVERYONE) {\n                                <li fd-option [value]=\"option\">\n                                    {{ ('platformApprovalFlow.addNodeDialogApproverTypeTeamEveryone' | fdTranslate)() }}\n                                </li>\n                            }\n                        }\n                    }\n                </fd-select>\n            </div>\n            <div fd-form-item>\n                <label fd-form-label>{{ ('platformApprovalFlow.addNodeDialogUserOrTeam' | fdTranslate)() }}</label>\n                @if (_isSingleUserMode) {\n                    <fd-multi-input\n                        [showAllButton]=\"false\"\n                        [dropdownValues]=\"_selectedApprovers\"\n                        [(ngModel)]=\"_selectedApprovers\"\n                        [displayFn]=\"_displayUserFn\"\n                        (openChange)=\"_goToSelectMode()\"\n                        (selectedChange)=\"_setSelectedApprovers($event)\"\n                    ></fd-multi-input>\n                }\n                @if (!_isSingleUserMode) {\n                    <fd-multi-input\n                        [showAllButton]=\"false\"\n                        [dropdownValues]=\"_selectedTeamArray\"\n                        [(ngModel)]=\"_selectedTeamArray\"\n                        [displayFn]=\"_displayTeamFn\"\n                        (openChange)=\"_goToSelectMode()\"\n                    ></fd-multi-input>\n                }\n            </div>\n            @if (_nodeType === _nodeTypes.PARALLEL) {\n                <div fd-form-item>\n                    <fd-checkbox [(ngModel)]=\"_addToNextSerial\">\n                        {{ ('platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate)() }}\n                    </fd-checkbox>\n                </div>\n            }\n            @if (_checkDueDate) {\n                <div fd-form-item>\n                    <label fd-form-label>{{ ('platformApprovalFlow.addNodeDialogDueDate' | fdTranslate)() }}</label>\n                    <fd-date-picker type=\"single\" [state]=\"!this._dueDate ? 'error' : null\" [(ngModel)]=\"_dueDate\">\n                    </fd-date-picker>\n                </div>\n            }\n        }\n        @if (_selectMode) {\n            @if (viewService.isSelectTeamMode) {\n                @if (!_data.teamDataSource.isDataLoading) {\n                    <fdp-approval-flow-team-list\n                        [isRtl]=\"_data.rtl\"\n                        [teams]=\"_teams\"\n                        [selectedTeamId]=\"_selectedTeam?.id\"\n                        (onTeamClick)=\"_viewTeamMembers($event)\"\n                        (onTeamRadioClick)=\"_setSelectedTeam($event)\"\n                    ></fdp-approval-flow-team-list>\n                } @else {\n                    <fd-busy-indicator [loading]=\"true\" [block]=\"true\"> </fd-busy-indicator>\n                }\n            }\n            @if (viewService.isSelectUserMode || viewService.isTeamMembersMode) {\n                @if (viewService.isSelectUserMode || !_data.userDataSource.isDataLoading) {\n                    <fdp-approval-flow-user-list\n                        [users]=\"viewService.isSelectUserMode ? _approvers : _filteredTeamMembers\"\n                        [isSelectable]=\"viewService.isSelectUserMode\"\n                        [selectedUsers]=\"_selectedApprovers\"\n                        (onUserClick)=\"_seeUserDetails($event)\"\n                        (onSelectionChange)=\"_selectedApprovers = $event\"\n                    ></fdp-approval-flow-user-list>\n                } @else {\n                    <fd-busy-indicator [loading]=\"true\" [block]=\"true\"> </fd-busy-indicator>\n                }\n            }\n            @if (viewService.isUserDetailsMode && _userToShowDetails) {\n                <fdp-approval-flow-user-details\n                    [user]=\"_userToShowDetails\"\n                    [detailsTemplate]=\"_data.userDetailsTemplate\"\n                    [details]=\"_userToShowDetailsData$\"\n                ></fdp-approval-flow-user-details>\n            }\n        }\n    </fd-dialog-body>\n    <fd-dialog-footer>\n        @if (!_selectMode) {\n            <fd-button-bar\n                fdType=\"emphasized\"\n                [label]=\"('platformApprovalFlow.addNodeAddActionBtnLabel' | fdTranslate)()\"\n                [disabled]=\"_isMainSubmitButtonDisabled\"\n                (click)=\"_submit()\"\n            >\n            </fd-button-bar>\n            <fd-button-bar\n                fdkInitialFocus\n                fdType=\"transparent\"\n                [label]=\"('platformApprovalFlow.addNodeCancelActionBtnLabel' | fdTranslate)()\"\n                (click)=\"dialogRef.close()\"\n            ></fd-button-bar>\n        }\n        @if (_selectMode) {\n            @if (viewService.isSelectUserMode) {\n                <fd-button-bar\n                    fdType=\"emphasized\"\n                    [label]=\"('platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate)()\"\n                    [disabled]=\"!_selectedApprovers.length\"\n                    (click)=\"_confirmSelectedApprovers()\"\n                ></fd-button-bar>\n                <fd-button-bar\n                    fdkInitialFocus\n                    fdType=\"transparent\"\n                    [label]=\"('platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate)()\"\n                    (click)=\"_exitSelectMode()\"\n                ></fd-button-bar>\n            }\n            @if (viewService.isSelectTeamMode) {\n                <fd-button-bar\n                    fdType=\"emphasized\"\n                    [label]=\"('platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate)()\"\n                    [disabled]=\"!_selectedTeam && !viewService.team\"\n                    (click)=\"_confirmSelectedTeam()\"\n                ></fd-button-bar>\n                <fd-button-bar\n                    fdkInitialFocus\n                    fdType=\"transparent\"\n                    [label]=\"('platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate)()\"\n                    (click)=\"_exitSelectMode()\"\n                ></fd-button-bar>\n            }\n            @if (viewService.isTeamMembersMode) {\n                <fd-button-bar\n                    fdkInitialFocus\n                    fdType=\"transparent\"\n                    [label]=\"('platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate)()\"\n                    (click)=\"_exitTeamMembersMode()\"\n                ></fd-button-bar>\n            }\n            @if (viewService.isUserDetailsMode) {\n                <fd-button-bar\n                    fdkInitialFocus\n                    fdType=\"transparent\"\n                    [label]=\"('platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate)()\"\n                    (click)=\"_exitUserDetailsMode()\"\n                ></fd-button-bar>\n            }\n        }\n    </fd-dialog-footer>\n</fd-dialog>\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    OnInit,\n    TemplateRef,\n    ViewEncapsulation\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n    DialogBodyComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\nimport { ApprovalFlowUserDetailsComponent } from '../approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from '../approval-flow-user-list/approval-flow-user-list.component';\nimport { filterByName } from '../helpers';\nimport { ApprovalNode, ApprovalUser } from '../interfaces';\n\nexport interface ApprovalFlowApproverDetailsDialogRefData {\n    node?: ApprovalNode;\n    watcher?: ApprovalUser;\n    allowSendReminder?: boolean;\n    userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n    userDetailsTemplate: TemplateRef<any>;\n    rtl?: boolean;\n}\n\n/**\n * @deprecated\n * ApprovalFlowApproverDetails component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-approver-details',\n    templateUrl: './approval-flow-approver-details.component.html',\n    styleUrl: '../styles/approval-flow-dialog.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'fdp-approval-flow-dialog fdp-approval-flow-approver-details'\n    },\n    imports: [\n        DialogComponent,\n        DialogHeaderComponent,\n        TemplateDirective,\n        IconComponent,\n        SearchFieldComponent,\n        ContentDensityDirective,\n        CdkScrollable,\n        ScrollbarDirective,\n        DialogBodyComponent,\n        ApprovalFlowUserDetailsComponent,\n        ApprovalFlowUserListComponent,\n        DialogFooterComponent,\n        ButtonBarComponent,\n        FdTranslatePipe\n    ]\n})\nexport class ApprovalFlowApproverDetailsComponent implements OnInit {\n    /** @hidden */\n    _isListMode = false;\n\n    /** @hidden */\n    _listItems: ApprovalUser[] = [];\n\n    /** @hidden */\n    _selectedUsers: ApprovalUser[] = [];\n\n    /** @hidden */\n    _userToShowDetails?: ApprovalUser;\n\n    /** @hidden */\n    _userToShowDetailsData$: Observable<any>;\n\n    /** @hidden */\n    constructor(\n        public dialogRef: DialogRef<ApprovalFlowApproverDetailsDialogRefData>,\n        private _cdr: ChangeDetectorRef\n    ) {}\n\n    /** @hidden */\n    get _data(): ApprovalFlowApproverDetailsDialogRefData {\n        return this.dialogRef.data;\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._isListMode = (this._data.node?.approvers.length ?? 0) > 1;\n\n        if (this._isListMode) {\n            this._setListItems(this._data.node?.approvers ?? []);\n        } else {\n            const user = this._data.watcher || this._data.node?.approvers[0];\n            if (user) {\n                this._seeUserDetails(user);\n            } else {\n                this.dialogRef.close();\n            }\n        }\n    }\n\n    /** @hidden */\n    _setListItems(items: ApprovalUser[] = []): void {\n        this._listItems = [...items];\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _exitUserDetailsMode(): void {\n        this._userToShowDetails = undefined;\n        this._isListMode = true;\n    }\n\n    /** @hidden */\n    _seeUserDetails(user: ApprovalUser): void {\n        this._userToShowDetails = user;\n        this._userToShowDetailsData$ = this._data.userDataSource.dataProvider.getOne(new Map([['id', user.id]]));\n        this._isListMode = false;\n        this._selectedUsers = [];\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _sendReminder(): void {\n        const reminderTargets = this._isListMode ? this._selectedUsers : this._data.node?.approvers;\n        this.dialogRef.close(reminderTargets);\n    }\n\n    /** @hidden */\n    _onSearchStringChange(searchString: string): void {\n        if (!searchString) {\n            this._setListItems(this._data.node?.approvers);\n            return;\n        }\n\n        this._setListItems(this._data.node?.approvers.filter((user) => filterByName(user, searchString)));\n    }\n}\n","<fd-dialog>\n    <fd-dialog-header [class.show-search]=\"!_userToShowDetails && _isListMode\">\n        <ng-template fdkTemplate=\"header\">\n            <p>\n                @if (_userToShowDetails && _data.node?.approvers && _data.node!.approvers!.length > 1) {\n                    <fd-icon\n                        [glyph]=\"'navigation-' + (_data.rtl ? 'right' : 'left') + '-arrow'\"\n                        tabindex=\"0\"\n                        role=\"button\"\n                        (click)=\"_exitUserDetailsMode()\"\n                        (keyup.space)=\"_exitUserDetailsMode()\"\n                        (keyup.enter)=\"_exitUserDetailsMode()\"\n                    ></fd-icon>\n                }\n                @if (_isListMode && !_userToShowDetails) {\n                    {{ _data.node?.description }} ({{ _data.node?.approvers?.length ?? 0 }})\n                } @else {\n                    {{ ('platformApprovalFlow.userDetailsHeader' | fdTranslate)() }}\n                }\n            </p>\n            @if (!_userToShowDetails && _isListMode) {\n                <fdp-search-field\n                    [placeholder]=\"('platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate)()\"\n                    fdCompact\n                    [suggestions]=\"[]\"\n                    (inputChange)=\"_onSearchStringChange($event.text)\"\n                ></fdp-search-field>\n            }\n        </ng-template>\n    </fd-dialog-header>\n    <fd-dialog-body>\n        @if (_userToShowDetails) {\n            <fdp-approval-flow-user-details\n                [user]=\"_userToShowDetails\"\n                [detailsTemplate]=\"_data.userDetailsTemplate\"\n                [details]=\"_userToShowDetailsData$\"\n            ></fdp-approval-flow-user-details>\n        }\n        @if (_isListMode) {\n            <fdp-approval-flow-user-list\n                [users]=\"_listItems\"\n                (onUserClick)=\"_seeUserDetails($event)\"\n                (onSelectionChange)=\"_selectedUsers = $event\"\n            ></fdp-approval-flow-user-list>\n        }\n    </fd-dialog-body>\n    <fd-dialog-footer fdCompact>\n        @if (_isListMode || (_userToShowDetails && _data.node?.approvers?.length === 1)) {\n            <fd-button-bar\n                fdType=\"emphasized\"\n                [label]=\"('platformApprovalFlow.userDetailsSendReminderBtnLabel' | fdTranslate)()\"\n                [disabled]=\"!_data.allowSendReminder || (_isListMode && !_selectedUsers.length)\"\n                (click)=\"_sendReminder()\"\n            ></fd-button-bar>\n        }\n        <fd-button-bar\n            fdkInitialFocus\n            fdType=\"transparent\"\n            [label]=\"('platformApprovalFlow.userDetailsCancelBtnLabel' | fdTranslate)()\"\n            (click)=\"dialogRef.close('Cancel')\"\n        ></fd-button-bar>\n    </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { MessageStripComponent } from '@fundamental-ngx/core/message-strip';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { trackByFn } from '../helpers';\n\nexport type ApprovalFlowMessageType =\n    | 'watchersChangeSuccess'\n    | 'approverAddSuccess'\n    | 'teamAddSuccess'\n    | 'nodeEdit'\n    | 'nodeRemove'\n    | 'nodesRemove'\n    | 'teamRemove'\n    | 'error';\n\nexport interface ApprovalFlowMessage {\n    type: ApprovalFlowMessageType;\n}\n\n/**\n * @deprecated\n * ApprovalFlowMessages component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-messages',\n    templateUrl: './approval-flow-messages.component.html',\n    styleUrl: './approval-flow-messages.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'fdp-approval-flow-messages'\n    },\n    imports: [MessageStripComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowMessagesComponent {\n    /** Array of messages */\n    @Input()\n    messages: ApprovalFlowMessage[] = [];\n\n    /** Whether undo action is available */\n    @Input()\n    undoLastActionAvailable = false;\n\n    /** Event emitted when messages array change */\n    @Output()\n    messagesChange = new EventEmitter<ApprovalFlowMessage[]>();\n\n    /** Event emitted when user click undo button */\n    @Output()\n    undoLastAction = new EventEmitter<void>();\n\n    /** @hidden */\n    _trackByFn = trackByFn;\n\n    /** @hidden */\n    _dismissMessage(messageIndex: number): void {\n        this.messages.splice(messageIndex, 1);\n    }\n\n    /** @hidden */\n    _undoLastAction(messageIndex: number, event: Event): void {\n        event.preventDefault();\n\n        this._dismissMessage(messageIndex);\n        this.undoLastAction.emit();\n    }\n}\n","@for (message of messages; track message; let i = $index) {\n    <fd-message-strip\n        class=\"fdp-approval-flow-messages__item\"\n        [type]=\"message.type === 'error' ? 'error' : 'success'\"\n        [dismissible]=\"message.type !== 'error'\"\n        (onDismiss)=\"_dismissMessage(i)\"\n    >\n        <bdi>\n            <span>\n                @switch (message.type) {\n                    @case ('approverAddSuccess') {\n                        {{ ('platformApprovalFlow.messagesApproverAddedSuccess' | fdTranslate)() }}\n                    }\n                    @case ('teamAddSuccess') {\n                        {{ ('platformApprovalFlow.messagesTeamAddedSuccess' | fdTranslate)() }}\n                    }\n                    @case ('nodeEdit') {\n                        {{ ('platformApprovalFlow.messagesNodeEdited' | fdTranslate)() }}\n                    }\n                    @case ('nodeRemove') {\n                        {{ ('platformApprovalFlow.messagesNodeRemovedSingular' | fdTranslate)() }}\n                    }\n                    @case ('nodesRemove') {\n                        {{ ('platformApprovalFlow.messagesNodeRemovedPlural' | fdTranslate)() }}\n                    }\n                    @case ('teamRemove') {\n                        {{ ('platformApprovalFlow.messagesTeamRemoved' | fdTranslate)() }}\n                    }\n                    @case ('error') {\n                        {{ ('platformApprovalFlow.messagesErrorBuildGraph' | fdTranslate)() }}\n                    }\n                }\n            </span>\n            @if (undoLastActionAvailable) {\n                <a\n                    href=\"#\"\n                    (click)=\"_undoLastAction(i, $event)\"\n                    (keyup.enter)=\"_undoLastAction(i, $event)\"\n                    (keyup.space)=\"_undoLastAction(i, $event)\"\n                >\n                    {{ ('platformApprovalFlow.messagesUndoAction' | fdTranslate)() }}\n                </a>\n            }\n        </bdi>\n    </fd-message-strip>\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\n\nimport { ApprovalFlowNewNodePlacement } from '../approval-flow-add-node/approval-flow-add-node.component';\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: '[fdp-approval-flow-drop-zone]',\n    exportAs: 'fdp-approval-flow-drop-zone',\n    standalone: true\n})\nexport class ApprovalFlowDropZoneDirective {\n    /** Approval flow new node placement */\n    @Input()\n    placement: ApprovalFlowNewNodePlacement;\n\n    /** Whether drop zone is active (pointer with dragged node over the drop zone) */\n    active = false;\n\n    /** @hidden */\n    constructor(private readonly elRef: ElementRef) {}\n\n    /** @hidden */\n    _checkIfNodeDraggedInDropZone(nodeRect: DOMRect): void {\n        this.active = false;\n\n        const dropZoneRect = this.elRef.nativeElement.getBoundingClientRect();\n\n        if (\n            dropZoneRect.top + dropZoneRect.height > nodeRect.top &&\n            dropZoneRect.left + dropZoneRect.width > nodeRect.left &&\n            dropZoneRect.bottom - dropZoneRect.height < nodeRect.bottom &&\n            dropZoneRect.right - dropZoneRect.width < nodeRect.right\n        ) {\n            this.active = true;\n        }\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { GridListItemComponent } from '@fundamental-ngx/core/grid-list';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n    MenuInteractiveComponent,\n    MenuItemComponent,\n    MenuTitleDirective,\n    MenuTriggerDirective\n} from '@fundamental-ngx/core/menu';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ObjectStatusComponent, PlatformObjectStatusTextDirective } from '@fundamental-ngx/platform/object-status';\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { isNodeApproved, isNodeStarted } from '../helpers';\nimport { ApprovalGraphNode, ApprovalGraphNodeMetadata, ApprovalStatus } from '../interfaces';\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-drop-zone.directive';\n\nconst NODE_STATUS_CLASS_MAP = {\n    approved: 'positive',\n    rejected: 'negative',\n    'in progress': 'informative',\n    'not started': ''\n};\n\nconst DAY_IN_MILLISECONDS = 1000 * 60 * 60 * 24;\n\nlet defaultId = 0;\n\n/**\n * @deprecated\n * ApprovalFlowNode component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-node',\n    templateUrl: './approval-flow-node.component.html',\n    styleUrl: './approval-flow-node.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'fdp-approval-flow-node',\n        '[class.fdp-approval-flow-node--first-root]': 'meta?.firstOfMultipleRootNodes',\n        '[class.fdp-approval-flow-node--first-final]': 'meta?.firstOfMultipleFinalNodes'\n    },\n    imports: [\n        ButtonComponent,\n        ContentDensityDirective,\n        MenuTriggerDirective,\n        ObjectStatusComponent,\n        PlatformObjectStatusTextDirective,\n        NgTemplateOutlet,\n        ApprovalFlowDropZoneDirective,\n        MenuComponent,\n        MenuItemComponent,\n        MenuInteractiveComponent,\n        MenuTitleDirective,\n        FdTranslatePipe\n    ]\n})\nexport class ApprovalFlowNodeComponent implements OnInit, OnChanges, OnDestroy {\n    /** Approval flow graph node */\n    @Input() node: ApprovalGraphNode;\n\n    /** Node metadata */\n    @Input() meta: ApprovalGraphNodeMetadata;\n\n    /** Whether node element has arrow on the left side pointing to the node */\n    @Input() renderArrow = false;\n\n    /** Whether to display due date warning in status */\n    @Input() checkDueDate = false;\n\n    /** Number of days before due date when status changes to `warning` with text 'Due in X days'.\n     *  Not used if 'checkDueDate' equals false */\n    @Input() dueDateThreshold = 7;\n\n    /** Whether nodes in column in which current node placed are approved\n     *  Used to render appropriate vertical line after (dashed/solid)\n     */\n    @Input() allNodesInColumnApproved = false;\n\n    /** A reference to the app custom statuses */\n    @Input()\n    approvalStatusTemplate: TemplateRef<any>;\n\n    /** Custom status to color mapping  */\n    @Input()\n    statusColorMapping: Record<ApprovalStatus, ObjectStatus>;\n\n    /** Whether the node is in edit mode */\n    @Input()\n    @HostBinding('class.fdp-approval-flow-node--edit-mode')\n    isEdit: boolean;\n\n    /** Whether the node after is blank */\n    @Input()\n    @HostBinding('class.fdp-approval-flow-node--next-blank')\n    isNextNodeBlank: boolean;\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--blank')\n    get _blank(): boolean {\n        return !!this.node?.blank;\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--space')\n    get _space(): boolean {\n        return !!this.node?.space;\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--root')\n    get _isRoot(): boolean {\n        return this.meta?.isRoot;\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--final')\n    get _isFinal(): boolean {\n        return this.meta?.isFinal;\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--line-before')\n    get _renderLineBefore(): boolean {\n        return !this.node?.blank;\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--line-after')\n    get _renderLineAfter(): boolean {\n        return !this.node?.blank || this._isFinal;\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--approved')\n    get _isApproved(): boolean {\n        return this.node && isNodeApproved(this.node);\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--parent-approved')\n    get _isParentApproved(): boolean {\n        if (!this.meta?.parents?.length) {\n            return !!this.meta?.rootNodesApproved;\n        }\n\n        return this.meta.parents.every((node) => isNodeApproved(node));\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--selected')\n    get _isNodeSelected(): boolean {\n        return this.isEdit && this._isSelected;\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--parallel-start')\n    get _isParallelStart(): boolean {\n        return Boolean(this.meta?.parallelStart);\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--parallel-end')\n    get _isParallelEnd(): boolean {\n        return Boolean(this.meta?.parallelEnd);\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--first-in-parallel')\n    get _isFirstInParallel(): boolean {\n        return Boolean(this.meta?.isFirstInParallel);\n    }\n\n    /** @hidden */\n    @HostBinding('class.fdp-approval-flow-node--last-in-parallel')\n    get _isLastInParallel(): boolean {\n        return Boolean(this.meta?.isLastInParallel);\n    }\n\n    /** Whether the node is blank and the final */\n    @HostBinding('class.fdp-approval-flow-node--last-blank')\n    get _lastBlank(): boolean {\n        return this._blank && this.node.targets.length === 0;\n    }\n\n    /** @hidden */\n    get _isSelected(): boolean {\n        return !!this.node.selected;\n    }\n\n    /** Event emitted on add node button clicked, value is the placement for the new node */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onAdd = new EventEmitter<ApprovalFlowNodeTarget>();\n\n    /** Event emitted on edit node button clicked */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onEdit = new EventEmitter<void>();\n\n    /** Event emitted on delete node button clicked */\n    @Output()\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    onDelete = new EventEmitter<void>();\n\n    /** @hidden */\n    @ViewChild(MenuComponent)\n    _menu: MenuComponent;\n\n    /** @hidden */\n    @ViewChild('overflowMenuButton')\n    _overflowMenuButton: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChild('nodeContent')\n    _nodeContent: TemplateRef<any>;\n\n    /** @hidden */\n    @ViewChildren(ApprovalFlowDropZoneDirective)\n    _dropZones: QueryList<ApprovalFlowDropZoneDirective>;\n\n    /** @hidden */\n    @ContentChild(GridListItemComponent)\n    _gridListItem: GridListItemComponent<ApprovalGraphNode>;\n\n    /** @hidden */\n    _objectStatus: ObjectStatus;\n\n    /** @hidden */\n    _showDueDateWarning = false;\n\n    /** @hidden */\n    _dueIn = 0;\n\n    /** @hidden */\n    readonly approvalFlowNodeId = 'fdp-approval-flow-node-' + defaultId++;\n\n    /** @hidden */\n    private _subscriptions = new Subscription();\n\n    /** @hidden */\n    constructor(\n        private readonly _elRef: ElementRef,\n        private readonly _cdr: ChangeDetectorRef\n    ) {}\n\n    /** @hidden */\n    get _nativeElement(): HTMLElement {\n        return this._elRef.nativeElement;\n    }\n\n    /** @hidden */\n    get _isNotStarted(): boolean {\n        return !isNodeStarted(this.node);\n    }\n\n    /** @hidden */\n    get _isEditActionsAvailable(): boolean {\n        return this.node.status === 'approved' || this.node.status === 'rejected';\n    }\n\n    /** @hidden */\n    get _activeDropZones(): ApprovalFlowDropZoneDirective[] {\n        return this._dropZones.filter((z) => z.active);\n    }\n\n    /** @hidden */\n    get _isAnyDropZoneActive(): boolean {\n        return this._activeDropZones.length > 0;\n    }\n\n    /** @hidden */\n    get _isVerticalLineBeforeSolid(): boolean {\n        if (!this.meta?.parents.length) {\n            return !!this.meta?.isVerticalLineBeforeSolid;\n        }\n\n        return this.meta.parents.every((parentNode) => isNodeApproved(parentNode));\n    }\n\n    /** @hidden */\n    get _isVerticalLineAfterSolid(): boolean {\n        if (!this.node?.targets.length) {\n            return !!this.meta?.isVerticalLineAfterSolid;\n        }\n\n        return this._isVerticalLineBeforeSolid && this.allNodesInColumnApproved;\n    }\n\n    /** @hidden */\n    get _showAddButton(): boolean {\n        return this.isEdit && !this._blank && !this._space && !this.node?.disableActions;\n    }\n\n    /** @hidden */\n    get _showAfterAllAddButton(): boolean {\n        return this.isEdit && !this._space && !this.node?.disableActions;\n    }\n\n    /** @hidden */\n    _dropZonePartial(placement: ApprovalFlowNodeTarget): boolean {\n        return (\n            (!this._blank && (!this.isNextNodeBlank || placement === 'before')) ||\n            (this._lastBlank && placement === 'after-all')\n        );\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        this._checkNodeStatus();\n    }\n\n    /** @hidden */\n    ngOnChanges(): void {\n        this._checkNodeStatus();\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n    }\n\n    /** @hidden */\n    _onMenuOpen(): void {\n        this._menu?.refreshPosition();\n    }\n\n    /** @hidden */\n    _focus(options?: FocusOptions): void {\n        this._gridListItem?.focus(options);\n    }\n\n    /** @hidden */\n    _deactivateDropZones(): void {\n        this._dropZones.forEach((dropZone) => (dropZone.active = false));\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _checkIfNodeDraggedInDropZone(nodeRect: DOMRect): void {\n        this._dropZones.forEach((dropZone) => dropZone._checkIfNodeDraggedInDropZone(nodeRect));\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    private _checkNodeStatus(): void {\n        if (!this.node) {\n            return;\n        }\n\n        if (this.checkDueDate && this.node.dueDate) {\n            const dueThreshold = Number(new Date(this.node.dueDate)) - this.dueDateThreshold * DAY_IN_MILLISECONDS;\n            const nowAndDueDiff = Date.now() - dueThreshold;\n\n            this._dueIn = Math.round(nowAndDueDiff / DAY_IN_MILLISECONDS);\n            this._showDueDateWarning = !isNodeApproved(this.node) && dueThreshold < Date.now();\n            this._objectStatus = this._showDueDateWarning ? 'critical' : this._getNodeStatusClass();\n\n            this._cdr.detectChanges();\n\n            return;\n        }\n\n        this._objectStatus = this._getNodeStatusClass();\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    private _getNodeStatusClass(): ObjectStatus {\n        return (\n            this.statusColorMapping\n                ? this.statusColorMapping[this.node.status]\n                : NODE_STATUS_CLASS_MAP[this.node.status]\n        ) as ObjectStatus;\n    }\n}\n","@if (meta?.renderVerticalLineBefore) {\n    <div\n        class=\"fdp-approval-flow-node__vertical-line-before\"\n        [class.fdp-approval-flow-node__vertical-line-before-solid]=\"_isVerticalLineBeforeSolid\"\n    ></div>\n}\n@if (meta?.renderVerticalLineAfter) {\n    <div\n        class=\"fdp-approval-flow-node__vertical-line-after\"\n        [class.fdp-approval-flow-node__vertical-line-after-solid]=\"_isVerticalLineAfterSolid\"\n    ></div>\n}\n@if (!_blank && !_space) {\n    @if (renderArrow) {\n        <div class=\"fdp-approval-flow-node__arrow\"></div>\n    }\n    @if (_isRoot && meta?.nodeIndex === 0) {\n        <div class=\"fdp-approval-flow-node__carousel-start-marker\"></div>\n    }\n    @if (_isFinal && meta?.nodeIndex === 0) {\n        <div class=\"fdp-approval-flow-node__carousel-end-marker\"></div>\n    }\n    <ng-content></ng-content>\n}\n<ng-template #overflowMenuButton>\n    <!-- Actually just the fd-grid-item action button but with some hardcode to be used as menu trigger -->\n    @if (!node?.disableActions) {\n        <button\n            class=\"fdp-approval-flow-node__menu-button\"\n            fd-button\n            fdType=\"transparent\"\n            tabindex=\"0\"\n            glyph=\"overflow\"\n            [title]=\"('platformApprovalFlow.nodeMenuButtonTitle' | fdTranslate)()\"\n            fdCompact\n            [fdMenuTrigger]=\"menu\"\n            [disabled]=\"_isEditActionsAvailable\"\n            (click)=\"$event.stopPropagation()\"\n        ></button>\n    }\n</ng-template>\n<ng-template #nodeContent>\n    <div class=\"fdp-approval-flow-node__info\">\n        <div\n            class=\"fdp-approval-flow-node__name\"\n            [class.fdp-approval-flow-node__name--members-count]=\"node.approvers.length > 1\"\n            [id]=\"approvalFlowNodeId\"\n        >\n            @if (node.approvers.length === 1) {\n                {{ node.approvers[0].name }}\n            } @else {\n                {{ ('platformApprovalFlow.nodeMembersCount' | fdTranslate: { count: node.approvers.length })() }}\n            }\n        </div>\n        <div class=\"fdp-approval-flow-node__description\">\n            @if (!node.variousTeams) {\n                {{\n                    node.approvers.length > 1\n                        ? node.description\n                        : node.approvers.length\n                          ? node.approvers[0].description\n                          : ''\n                }}\n            } @else {\n                {{ ('platformApprovalFlow.nodeVariousTeams' | fdTranslate)() }}\n            }\n            <ng-template #variousTeams> {{ ('platformApprovalFlow.nodeVariousTeams' | fdTranslate)() }} </ng-template>\n        </div>\n        <fdp-object-status [status]=\"_objectStatus\" [inverted]=\"true\">\n            <ng-template fdpObjectStatusText>\n                @if (approvalStatusTemplate) {\n                    @if (!checkDueDate || !_showDueDateWarning) {\n                        @if (approvalStatusTemplate) {\n                            <ng-template\n                                [ngTemplateOutlet]=\"approvalStatusTemplate\"\n                                [ngTemplateOutletContext]=\"{ node: node }\"\n                            >\n                            </ng-template>\n                        }\n                    }\n                } @else {\n                    @if (!checkDueDate || !_showDueDateWarning) {\n                        @switch (node.status) {\n                            @case ('approved') {\n                                {{ ('platformApprovalFlow.statusApproved' | fdTranslate)() }}\n                            }\n                            @case ('rejected') {\n                                {{ ('platformApprovalFlow.statusRejected' | fdTranslate)() }}\n                            }\n                            @case ('in progress') {\n                                {{ ('platformApprovalFlow.statusInProgress' | fdTranslate)() }}\n                            }\n                            @case ('not started') {\n                                {{ ('platformApprovalFlow.statusNotStarted' | fdTranslate)() }}\n                            }\n                        }\n                    }\n                }\n                @if (checkDueDate && _showDueDateWarning) {\n                    @if (_dueIn === dueDateThreshold) {\n                        {{ ('platformApprovalFlow.nodeStatusDueToday' | fdTranslate)() }}\n                    }\n                    @if (_dueIn < dueDateThreshold) {\n                        {{\n                            (\n                                'platformApprovalFlow.nodeStatusDueInXDays'\n                                | fdTranslate: { count: dueDateThreshold - _dueIn }\n                            )()\n                        }}\n                    }\n                    @if (_dueIn > dueDateThreshold) {\n                        {{\n                            (\n                                'platformApprovalFlow.nodeStatusXDaysOverdue'\n                                | fdTranslate: { count: _dueIn - dueDateThreshold }\n                            )()\n                        }}\n                    }\n                }\n            </ng-template>\n        </fdp-object-status>\n    </div>\n</ng-template>\n@if (_showAddButton && meta?.canAddNodeBeforeAll && !node?.actionsConfig?.disableAddBefore) {\n    <ng-template\n        [ngTemplateOutlet]=\"addNodeButton\"\n        [ngTemplateOutletContext]=\"{ placement: 'before-all' }\"\n    ></ng-template>\n}\n@if (_showAddButton && meta?.canAddNodeBefore && !node?.actionsConfig?.disableAddBefore) {\n    <ng-template [ngTemplateOutlet]=\"addNodeButton\" [ngTemplateOutletContext]=\"{ placement: 'before' }\"></ng-template>\n}\n@if (\n    _showAddButton && meta?.canAddNodeAfter && meta?.renderAddNodeAfterButton && !node?.actionsConfig?.disableAddAfter\n) {\n    <ng-template [ngTemplateOutlet]=\"addNodeButton\" [ngTemplateOutletContext]=\"{ placement: 'after' }\"></ng-template>\n}\n@if (\n    _showAfterAllAddButton &&\n    meta?.canAddNodeAfterAll &&\n    meta?.renderAddNodeAfterButton &&\n    !node?.actionsConfig?.disableAddAfter\n) {\n    <ng-template\n        [ngTemplateOutlet]=\"addNodeButton\"\n        [ngTemplateOutletContext]=\"{ placement: 'after-all' }\"\n    ></ng-template>\n}\n<ng-template #addNodeButton let-placement=\"placement\">\n    @if (node.status !== 'approved') {\n        <button\n            fd-button\n            glyph=\"add\"\n            [title]=\"('platformApprovalFlow.addNodeButtonTitle' | fdTranslate)()\"\n            fdCompact\n            class=\"fdp-approval-flow-node__add\"\n            [class.fdp-approval-flow-node__add--blank]=\"this._blank\"\n            [class.fdp-approval-flow-node__add--before]=\"\n                !this._blank && (placement === 'before' || placement === 'before-all')\n            \"\n            [class.fdp-approval-flow-node__add--before-all]=\"!this._blank && placement === 'before-all'\"\n            [class.fdp-approval-flow-node__add--after]=\"\n                !this._blank && (placement === 'after' || placement === 'after-all')\n            \"\n            [class.fdp-approval-flow-node__add--after-all]=\"placement === 'after-all'\"\n            [style.visibility]=\"dropZone.active ? 'hidden' : ''\"\n            (click)=\"onAdd.emit(placement)\"\n        ></button>\n    }\n    <div\n        #dropZone=\"fdp-approval-flow-drop-zone\"\n        fdp-approval-flow-drop-zone\n        [placement]=\"placement\"\n        class=\"fdp-approval-flow-node__drop-zone\"\n        [class.fdp-approval-flow-node__drop-zone--active]=\"dropZone.active\"\n        [class.fdp-approval-flow-node__drop-zone--blank]=\"isNextNodeBlank\"\n        [class.fdp-approval-flow-node__drop-zone--partial]=\"_dropZonePartial(placement)\"\n    ></div>\n</ng-template>\n<fd-menu #menu fdContentDensity placement=\"bottom-end\" (isOpenChange)=\"_onMenuOpen()\">\n    @if (meta?.canAddNodeBefore && !this.node?.actionsConfig?.disableAddBefore) {\n        <li fd-menu-item (click)=\"menu.close(); onAdd.emit('before')\">\n            <div fd-menu-interactive>\n                <span fd-menu-title>{{ ('platformApprovalFlow.nodeActionAddApproversBefore' | fdTranslate)() }}</span>\n            </div>\n        </li>\n    }\n    @if (meta?.canAddNodeAfter && !this.node?.actionsConfig?.disableAddAfter) {\n        <li fd-menu-item (click)=\"menu.close(); onAdd.emit('after')\">\n            <div fd-menu-interactive>\n                <span fd-menu-title>{{ ('platformApprovalFlow.nodeActionAddApproversAfter' | fdTranslate)() }}</span>\n            </div>\n        </li>\n    }\n    @if (meta?.canAddParallel && !this.node?.actionsConfig?.disableAddParallel) {\n        <li fd-menu-item (click)=\"menu.close(); onAdd.emit('parallel')\">\n            <div fd-menu-interactive>\n                <span fd-menu-title>{{ ('platformApprovalFlow.nodeActionAddApproversParallel' | fdTranslate)() }}</span>\n            </div>\n        </li>\n    }\n    @if (_isNotStarted && !this.node?.actionsConfig?.disableEdit) {\n        <li fd-menu-item (click)=\"menu.close(); onEdit.emit()\">\n            <div fd-menu-interactive>\n                <span fd-menu-title> {{ ('platformApprovalFlow.nodeActionEditApprover' | fdTranslate)() }}</span>\n            </div>\n        </li>\n    }\n    @if (!this.node?.actionsConfig?.disableRemove) {\n        <li fd-menu-item (click)=\"menu.close(); onDelete.emit()\">\n            <div fd-menu-interactive>\n                <span fd-menu-title> {{ ('platformApprovalFlow.nodeActionRemove' | fdTranslate)() }}</span>\n            </div>\n        </li>\n    }\n</fd-menu>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n    DialogBodyComponent,\n    DialogComponent,\n    DialogFooterComponent,\n    DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { APPROVAL_FLOW_NODE_TYPES } from '../approval-flow-add-node/approval-flow-add-node.component';\n\nexport interface SelectTypeDialogFormData {\n    type: APPROVAL_FLOW_NODE_TYPES;\n    toNextSerial: boolean;\n}\n\n/**\n * @deprecated\n * ApprovalFlowSelectType component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-select-type',\n    templateUrl: './approval-flow-select-type.component.html',\n    styleUrls: ['../styles/approval-flow-dialog.scss', './approval-flow-select-type.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        class: 'fdp-approval-flow-dialog fdp-approval-flow-select-type'\n    },\n    imports: [\n        DialogComponent,\n        DialogHeaderComponent,\n        TemplateDirective,\n        CdkScrollable,\n        ScrollbarDirective,\n        DialogBodyComponent,\n        ContentDensityDirective,\n        FormGroupComponent,\n        FormItemComponent,\n        RadioButtonComponent,\n        FormsModule,\n        CheckboxComponent,\n        DialogFooterComponent,\n        ButtonBarComponent,\n        FdTranslatePipe\n    ]\n})\nexport class ApprovalFlowSelectTypeComponent {\n    /** @hidden */\n    _nodeType = APPROVAL_FLOW_NODE_TYPES.SERIAL;\n\n    /** @hidden */\n    _nodeTypes = APPROVAL_FLOW_NODE_TYPES;\n\n    /** @hidden */\n    _toNextSerial = false;\n\n    /** @hidden */\n    constructor(public readonly _dialogRef: DialogRef) {}\n\n    /** @hidden */\n    _submit(): void {\n        this._dialogRef.close({ type: this._nodeType, toNextSerial: this._toNextSerial } as SelectTypeDialogFormData);\n    }\n}\n","<fd-dialog>\n    <fd-dialog-header>\n        <ng-template fdkTemplate=\"header\">\n            <p>{{ ('platformApprovalFlow.selectTypeDialogMoveApproverAs' | fdTranslate)() }}</p>\n        </ng-template>\n    </fd-dialog-header>\n    <fd-dialog-body fdCompact>\n        <span class=\"fd-form-label\">\n            {{ ('platformApprovalFlow.selectTypeDialogParallelOrSerial' | fdTranslate)() }}\n        </span>\n        <fd-form-group class=\"fdp-approval-flow-select-type__form\">\n            <div fd-form-item>\n                <fd-radio-button\n                    [value]=\"_nodeTypes.PARALLEL\"\n                    [(ngModel)]=\"_nodeType\"\n                    id=\"select-type-parallel\"\n                    name=\"select-type-parallel\"\n                >\n                    {{ ('platformApprovalFlow.selectTypeDialogNodeTypeParallel' | fdTranslate)() }}\n                </fd-radio-button>\n            </div>\n            <div fd-form-item>\n                <fd-radio-button\n                    [value]=\"_nodeTypes.SERIAL\"\n                    [(ngModel)]=\"_nodeType\"\n                    id=\"select-type-serial\"\n                    name=\"select-type-serial\"\n                >\n                    {{ ('platformApprovalFlow.selectTypeDialogNodeTypeSerial' | fdTranslate)() }}\n                </fd-radio-button>\n            </div>\n            @if (_nodeType === _nodeTypes.PARALLEL) {\n                <div fd-form-item>\n                    <fd-checkbox [(ngModel)]=\"_toNextSerial\">\n                        {{ ('platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate)() }}\n                    </fd-checkbox>\n                </div>\n            }\n        </fd-form-group>\n    </fd-dialog-body>\n    <fd-dialog-footer fdCompact>\n        <fd-button-bar\n            fdType=\"emphasized\"\n            [label]=\"('platformApprovalFlow.selectTypeDialogConfirmButton' | fdTranslate)()\"\n            (click)=\"_submit()\"\n        ></fd-button-bar>\n        <fd-button-bar\n            fdkInitialFocus\n            fdType=\"transparent\"\n            [label]=\"('platformApprovalFlow.selectTypeDialogCancelButton' | fdTranslate)()\"\n            (click)=\"_dialogRef.close()\"\n        ></fd-button-bar>\n    </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowGraph, ApprovalGraphMetadata } from '../approval-flow-graph';\nimport { isNodeApproved } from '../helpers';\nimport { ApprovalGraphNode } from '../interfaces/approval-node';\n\n/**\n * @deprecated\n * ApprovalFlowToolbarActions component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow-toolbar-actions',\n    templateUrl: './approval-flow-toolbar-actions.component.html',\n    styleUrl: './approval-flow-toolbar-actions.component.scss',\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'fdp-approval-flow-toolbar-actions'\n    },\n    imports: [ContentDensityDirective, ButtonComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowToolbarActionsComponent {\n    /** Approval flow graph */\n    @Input()\n    graph: ApprovalFlowGraph;\n\n    /** Approval flow graph metadata */\n    @Input()\n    graphMetadata: ApprovalGraphMetadata;\n\n    /** Array of selected approval flow graph nodes */\n    @Input()\n    set selectedNodes(value: ApprovalGraphNode[]) {\n        this._selectedNodes = value;\n\n        this._canRemoveSelectedNodes =\n            !!this.selectedNodes.length &&\n            this.selectedNodes.every((node) => !node.disableActions && !node.actionsConfig?.disableRemove);\n    }\n    get selectedNodes(): ApprovalGraphNode[] {\n        return this._selectedNodes;\n    }\n\n    /** Whether approval flow in the edit mode */\n    @Input()\n    isEditMode = false;\n\n    /** Event emitted when edit mode toggled */\n    @Output()\n    enterEditMode = new EventEmitter<void>();\n\n    /** Event emitted when node added */\n    @Output()\n    addNode = new EventEmitter<{ node: ApprovalGraphNode; target: ApprovalFlowNodeTarget }>();\n\n    /** Event emitted when selected node edited */\n    @Output()\n    editSelectedNode = new EventEmitter<ApprovalGraphNode>();\n\n    /** Event emitted when selected nodes deleted (bulk) */\n    @Output()\n    deleteSelectedNodes = new EventEmitter<void>();\n\n    /** @hidden */\n    _canRemoveSelectedNodes = false;\n\n    /** @hidden */\n    private _selectedNodes: ApprovalGraphNode[] = [];\n\n    /** @hidden */\n    get _notApprovedSelectedNode(): ApprovalGraphNode | null {\n        if (this.selectedNodes.length !== 1) {\n            return null;\n        }\n\n        return !isNodeApproved(this.selectedNodes[0]) ? this.selectedNodes[0] : null;\n    }\n\n    /** @hidden */\n    get _canAddBefore(): boolean {\n        const node = this._notApprovedSelectedNode;\n\n        return (\n            !!node &&\n            !node.disableActions &&\n            !node.actionsConfig?.disableAddBefore &&\n            !!this.graphMetadata[node.id].canAddNodeBefore\n        );\n    }\n\n    /** @hidden */\n    get _canAddAfter(): boolean {\n        const node = this._notApprovedSelectedNode;\n\n        return (\n            !!node &&\n            !node.disableActions &&\n            !node.actionsConfig?.disableAddAfter &&\n            !!this.graphMetadata[node.id].canAddNodeAfter\n        );\n    }\n\n    /** @hidden */\n    get _canAddParallel(): boolean {\n        const node = this._notApprovedSelectedNode;\n\n        return (\n            !!this._notApprovedSelectedNode &&\n            !node?.disableActions &&\n            !node?.actionsConfig?.disableAddParallel &&\n            !!this.graphMetadata[node!.id].canAddParallel\n        );\n    }\n\n    /** @hidden */\n    get _canEditNode(): boolean {\n        const node = this._notApprovedSelectedNode;\n\n        return !!node && !node.disableActions && !node.actionsConfig?.disableEdit;\n    }\n\n    /** @hidden */\n    _addNode(target: ApprovalFlowNodeTarget): void {\n        const node = this.selectedNodes[0];\n        this.addNode.emit({ node, target });\n    }\n\n    /** @hidden */\n    _editSelectedNode(): void {\n        const node = this.selectedNodes[0];\n        this.editSelectedNode.emit(node);\n    }\n}\n","<ng-container fdCompact>\n    @if (!graph?.columns?.length && !graph?.errors) {\n        <button\n            fd-button\n            [label]=\"('platformApprovalFlow.toolbarAddStepButton' | fdTranslate)()\"\n            (click)=\"_addNode('empty')\"\n        ></button>\n    }\n    @if (!!graph?.columns?.length && !isEditMode) {\n        <button\n            fd-button\n            [label]=\"('platformApprovalFlow.toolbarEditButton' | fdTranslate)()\"\n            (click)=\"enterEditMode.emit()\"\n        ></button>\n    }\n    @if (isEditMode) {\n        @if (_canAddBefore) {\n            <button\n                fd-button\n                [label]=\"('platformApprovalFlow.toolbarAddApproversBefore' | fdTranslate)()\"\n                (click)=\"_addNode('before')\"\n            ></button>\n        }\n        @if (_canAddAfter) {\n            <button\n                fd-button\n                [label]=\"('platformApprovalFlow.toolbarAddApproversAfter' | fdTranslate)()\"\n                (click)=\"_addNode('after')\"\n            ></button>\n        }\n        @if (_canAddParallel) {\n            <button\n                fd-button\n                [label]=\"('platformApprovalFlow.toolbarAddApproversParallel' | fdTranslate)()\"\n                (click)=\"_addNode('parallel')\"\n            ></button>\n        }\n        @if (_canRemoveSelectedNodes) {\n            <button\n                fd-button\n                [label]=\"('platformApprovalFlow.toolbarRemove' | fdTranslate)()\"\n                (click)=\"deleteSelectedNodes.emit()\"\n            ></button>\n        }\n        @if (_canEditNode) {\n            <button\n                fd-button\n                [label]=\"('platformApprovalFlow.toolbarEditApprover' | fdTranslate)()\"\n                (click)=\"_editSelectedNode()\"\n            ></button>\n        }\n    }\n</ng-container>\n","import { CdkDrag } from '@angular/cdk/drag-drop';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Injector,\n    Input,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Output,\n    QueryList,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    ViewEncapsulation,\n    computed,\n    inject\n} from '@angular/core';\nimport { Subject, Subscription, combineLatest, fromEvent, merge } from 'rxjs';\nimport { distinctUntilChanged, map, mapTo, startWith, switchMap, throttleTime } from 'rxjs/operators';\n\nimport { KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { DialogService } from '@fundamental-ngx/core/dialog';\nimport { GridListComponent, GridListSelectionEvent } from '@fundamental-ngx/core/grid-list';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { uniqBy } from '@fundamental-ngx/cdk/utils';\nimport { AvatarComponent } from '@fundamental-ngx/core/avatar';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n    GridListItemBodyDirective,\n    GridListItemComponent,\n    GridListItemImageDirective,\n    GridListItemToolbarComponent,\n    GridListTitleBarComponent,\n    GridListTitleBarSpacerComponent\n} from '@fundamental-ngx/core/grid-list';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport {\n    IllustratedMessageComponent,\n    IllustratedMessageFigcaptionComponent,\n    IllustratedMessageTextDirective,\n    IllustratedMessageTitleDirective\n} from '@fundamental-ngx/core/illustrated-message';\nimport { MultiInputComponent } from '@fundamental-ngx/core/multi-input';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n    ApprovalFlowTeamDataSource,\n    ApprovalFlowUserDataSource,\n    DATA_PROVIDERS,\n    DataProvider\n} from '@fundamental-ngx/platform/shared';\nimport {\n    APPROVAL_FLOW_NODE_TYPES,\n    AddNodeDialogFormData,\n    AddNodeDialogRefData,\n    ApprovalFlowAddNodeComponent,\n    ApprovalFlowNodeTarget\n} from './approval-flow-add-node/approval-flow-add-node.component';\nimport {\n    ApprovalFlowApproverDetailsComponent,\n    ApprovalFlowApproverDetailsDialogRefData\n} from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport {\n    ApprovalFlowGraph,\n    ApprovalGraphColumn,\n    ApprovalGraphMetadata,\n    generateApprovalFlowGraph,\n    generateApprovalFlowGraphMetadata\n} from './approval-flow-graph';\nimport {\n    ApprovalFlowMessage,\n    ApprovalFlowMessageType,\n    ApprovalFlowMessagesComponent\n} from './approval-flow-messages/approval-flow-messages.component';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport {\n    ApprovalFlowSelectTypeComponent,\n    SelectTypeDialogFormData\n} from './approval-flow-select-type/approval-flow-select-type.component';\nimport { ApprovalFlowToolbarActionsComponent } from './approval-flow-toolbar-actions/approval-flow-toolbar-actions.component';\nimport {\n    displayUserFn,\n    getBlankApprovalGraphNode,\n    getGraphNodes,\n    isNodeTargetsIncludeId,\n    trackByFn,\n    userValueFn\n} from './helpers';\nimport {\n    ApprovalGraphNode,\n    ApprovalGraphNodeMetadata,\n    ApprovalNode,\n    ApprovalProcess,\n    ApprovalStatus,\n    ApprovalTeam,\n    ApprovalUser,\n    SendRemindersData\n} from './interfaces';\nimport { ApprovalFlowAddNodeViewService } from './services/approval-flow-add-node-view.service';\n\nlet defaultId = 0;\n/**\n * @deprecated\n * Approval Flow component is deprecated since version 0.40.0\n */\n@Component({\n    selector: 'fdp-approval-flow',\n    templateUrl: './approval-flow.component.html',\n    styleUrl: './approval-flow.component.scss',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    providers: [ApprovalFlowAddNodeViewService],\n    imports: [\n        ContentDensityDirective,\n        ApprovalFlowMessagesComponent,\n        GridListComponent,\n        GridListTitleBarComponent,\n        GridListTitleBarSpacerComponent,\n        ApprovalFlowToolbarActionsComponent,\n        AvatarComponent,\n        MultiInputComponent,\n        FormsModule,\n        IconComponent,\n        ApprovalFlowNodeComponent,\n        CdkDrag,\n        GridListItemComponent,\n        GridListItemToolbarComponent,\n        NgTemplateOutlet,\n        GridListItemImageDirective,\n        GridListItemBodyDirective,\n        BarComponent,\n        BarRightDirective,\n        BarElementDirective,\n        ButtonComponent,\n        IllustratedMessageComponent,\n        IllustratedMessageFigcaptionComponent,\n        IllustratedMessageTitleDirective,\n        IllustratedMessageTextDirective,\n        FdTranslatePipe\n    ]\n})\nexport class ApprovalFlowComponent implements OnInit, OnChanges, OnDestroy {\n    /** Title which is displayed in the header of the Approval Flow component. */\n    @Input() title: string;\n\n    /** Value of the approval flow component. */\n    @Input() value: ApprovalProcess;\n\n    /** Data source for the users of Approval Flow component. */\n    @Input() userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n\n    /** Data source for the watchers of Approval Flow component. */\n    @Input() watcherDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n\n    /** Data source for the teams of Approval Flow component. */\n    @Input() teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n\n    /** A reference to the user details template */\n    @Input() userDetailsTemplate: TemplateRef<any>;\n\n    /** A reference to the app custom statuses */\n    @Input() approvalStatusTemplate: TemplateRef<any>;\n\n    /** Custom status to color mapping  */\n    @Input()\n    statusColorMapping: Record<ApprovalStatus, ObjectStatus>;\n\n    /** Whether to display due date warning in status */\n    @Input() checkDueDate = false;\n\n    /** Number of days before due date when status changes to `warning` with text 'Due in X days'.\n     *  Not used if 'checkDueDate' equals false */\n    @Input() dueDateThreshold = 7;\n\n    /** A list of approval statuses that allow sending reminders to their approvers */\n    @Input() allowSendRemindersForStatuses: ApprovalStatus[] = ['in progress', 'not started'];\n\n    /** Whether the approval flow is editable */\n    @Input() isEditAvailable = false;\n\n    /** Text label for watchers list */\n    @Input() watchersLabel: string;\n\n    /** Enables or disables ability to add parallel nodes */\n    @Input() allowAddParallelNodes = true;\n\n    /** Disables save button, save button is enabled by default */\n    @Input() disableSaveButton = false;\n\n    /** Disables exit button, exit button is enabled by default */\n    @Input() disableExitButton = false;\n\n    /**\n     * Name of the entity for which users DataProvider will be loaded.\n     * Internally we should be able to do lookup to some registry\n     * and retrieve the best matching DataProvider that is set on application level\n     */\n    @Input() usersDataProviderEntityKey?: string;\n\n    /**\n     * Name of the entity for which teams DataProvider will be loaded.\n     * Internally we should be able to do lookup to some registry\n     * and retrieve the best matching DataProvider that is set on application level\n     */\n    @Input() teamsDataProviderEntityKey?: string;\n\n    /**\n     * Name of the entity for which approval flow DataProvider will be loaded.\n     * Internally we should be able to do lookup to some registry\n     * and retrieve the best matching DataProvider that is set on application level\n     */\n    @Input() watchersDataProviderEntityKey?: string;\n\n    /**\n     * Should remove the space node from the graph\n     */\n    @Input() removeSpaceNode?: boolean = false;\n\n    /** Event emitted on approval flow node click. */\n    @Output() nodeClick = new EventEmitter<ApprovalNode>();\n\n    /** Event emitted on approval flow node add */\n    @Output() afterNodeAdd = new EventEmitter<ApprovalNode>();\n\n    /** Event emitted on approval flow node edit */\n    @Output() afterNodeEdit = new EventEmitter<ApprovalNode>();\n\n    /** Event emitted whenver save is clicked in edit mode  */\n    @Output() valueChange = new EventEmitter<ApprovalProcess>();\n\n    /** Event emitted whenever reminders should be sent */\n    @Output() sendReminders = new EventEmitter<SendRemindersData>();\n\n    /** Event emitted when data loading is started. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onDataRequested = new EventEmitter<void>();\n\n    /** Event emitted when data loading is finished. */\n    // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n    @Output() onDataReceived = new EventEmitter<void>();\n\n    /** @hidden */\n    @ViewChild('graphContainerEl') _graphContainerEl: ElementRef<HTMLDivElement>;\n\n    /** @hidden */\n    @ViewChild('graphEl') _graphEl: ElementRef<HTMLDivElement>;\n\n    /** @hidden */\n    @ViewChild('gridList') _gridList: GridListComponent<ApprovalGraphNode>;\n\n    /** @hidden */\n    @ViewChildren(ApprovalFlowNodeComponent) _nodeComponents: QueryList<ApprovalFlowNodeComponent>;\n\n    /** @hidden */\n    _approvalProcess: ApprovalProcess;\n\n    /** @hidden */\n    _initialApprovalProcess?: ApprovalProcess;\n\n    /** @hidden */\n    _previousApprovalProcess?: ApprovalProcess;\n\n    /** @hidden */\n    _graph: ApprovalFlowGraph;\n\n    /** @hidden */\n    _isCarousel = false;\n\n    /** @hidden */\n    _graphMetadata: ApprovalGraphMetadata = {};\n\n    /** @hidden */\n    _isEditMode = false;\n\n    /** @hidden */\n    _usersForWatchersList: ApprovalUser[] = [];\n\n    /** @hidden */\n    _selectedWatcherIds: ApprovalUser['id'][] = [];\n\n    /** @hidden */\n    _messages: ApprovalFlowMessage[] = [];\n\n    /** @hidden */\n    _emptyApprovalFlowSpotConfig = {\n        spot: { url: '', id: 'sapIllus-Spot-NoData' }\n    };\n\n    /** @hidden */\n    _multipleRootNodes = false;\n\n    /** @hidden */\n    _multipleFinalNodes = false;\n\n    /** @hidden */\n    _dragDropInProgress = false;\n\n    /** Returns snapshot of the current and initial states of approval process */\n    get approvalProcess(): ApprovalProcess {\n        return structuredClone(this._approvalProcess);\n    }\n\n    /** @hidden */\n    _displayUserFn = displayUserFn;\n\n    /** @hidden */\n    _userValueFn = userValueFn;\n\n    /** @hidden */\n    _trackByFn = trackByFn;\n\n    /** @hidden */\n    readonly approvalFlowUniqueId = `fdp-approval-flow-${++defaultId}`;\n\n    /** @hidden */\n    protected readonly rtl = computed(() => this._rtlService?.rtl() ?? false);\n\n    /** @hidden */\n    protected readonly prevSlideArrowGlyph = computed(() =>\n        this.rtl() ? 'navigation-right-arrow' : 'navigation-left-arrow'\n    );\n\n    /** @hidden */\n    protected readonly nextSlideArrowGlyph = computed(() =>\n        this.rtl() ? 'navigation-left-arrow' : 'navigation-right-arrow'\n    );\n\n    /** @hidden */\n    get _selectedNodes(): ApprovalGraphNode[] {\n        return getGraphNodes(this._graph).filter((node) => node.selected);\n    }\n\n    /** @hidden */\n    private _selectedWatchers: ApprovalUser[] = [];\n\n    /** @hidden */\n    private _editModeInitSub: Subscription;\n\n    /** @hidden */\n    private _subscriptions = new Subscription();\n\n    /** @hidden */\n    private _dataSourceChanged$ = new Subject<void>();\n\n    /** @hidden */\n    private readonly _rtlService = inject(RtlService, { optional: true });\n\n    /** @hidden */\n    private readonly providers = inject<Map<string, DataProvider<any>>>(DATA_PROVIDERS, { optional: true });\n\n    /** @hidden */\n    constructor(\n        private readonly _dialogService: DialogService,\n        private readonly _cdr: ChangeDetectorRef,\n        private readonly _injector: Injector\n    ) {\n        console.log('ApprovalFlowComponent is deprecated and will be removed in next release.');\n    }\n\n    /** @hidden */\n    ngOnInit(): void {\n        if (!this.userDataSource) {\n            const usersDP = this.usersDataProviderEntityKey && this.providers?.get(this.usersDataProviderEntityKey);\n            if (usersDP) {\n                this.userDataSource = new ApprovalFlowUserDataSource(usersDP);\n            } else {\n                console.error('Could not resolve users data source');\n            }\n        }\n        if (!this.watcherDataSource) {\n            const watchersDP =\n                this.watchersDataProviderEntityKey && this.providers?.get(this.watchersDataProviderEntityKey);\n            if (watchersDP) {\n                this.watcherDataSource = new ApprovalFlowUserDataSource(watchersDP);\n            } else {\n                console.error('Could not resolve watchers data source');\n            }\n        }\n        if (!this.teamDataSource) {\n            const teamsDP = this.teamsDataProviderEntityKey && this.providers?.get(this.teamsDataProviderEntityKey);\n            if (teamsDP) {\n                this.teamDataSource = new ApprovalFlowTeamDataSource(teamsDP);\n            } else {\n                console.error('Could not resolve teams data source');\n            }\n        }\n\n        this._listenOnResize();\n        this._setupDataSourceSubscription();\n    }\n\n    /** @hidden */\n    ngOnChanges(changes: SimpleChanges): void {\n        if (changes.value) {\n            const process = this.value ?? { watchers: [], nodes: [] };\n            this._initialApprovalProcess = structuredClone(process);\n            this._buildView(process);\n        }\n\n        if (changes.userDataSource || changes.watcherDataSource || changes.teamDataSource) {\n            this._dataSourceChanged$.next();\n        }\n    }\n\n    /** @hidden */\n    ngOnDestroy(): void {\n        this._subscriptions.unsubscribe();\n    }\n\n    /** @hidden */\n    _isNextNodeBlank(node: ApprovalGraphNode, columnIndex: number, nodeIndex: number): boolean {\n        const nextNode = this._graph.columns[columnIndex + 1]?.nodes[nodeIndex];\n        const nextNodeBlank = nextNode?.blank;\n        const nextNodeParallelEnd = this._graphMetadata[nextNode?.id]?.parallelEnd;\n\n        return !node.blank && !!nextNodeBlank && !nextNodeParallelEnd;\n    }\n\n    /** @hidden */\n    _isCdkDragDisabled(node: ApprovalGraphNode): boolean {\n        return !this._isEditMode || node.blank || node.space || node.status !== 'not started';\n    }\n\n    /** @hidden Node click handler */\n    _onNodeClick(node: ApprovalNode): void {\n        if (this._dragDropInProgress) {\n            return;\n        }\n\n        const dialog = this._dialogService.open<ApprovalFlowApproverDetailsDialogRefData>(\n            ApprovalFlowApproverDetailsComponent,\n            {\n                data: {\n                    node,\n                    allowSendReminder: this.allowSendRemindersForStatuses.includes(node.status),\n                    ...this._defaultDialogOptions\n                }\n            },\n            this._injector\n        );\n\n        dialog.afterClosed.subscribe((reminderTargets) => {\n            if (Array.isArray(reminderTargets)) {\n                this.sendReminders.emit({ users: reminderTargets, node });\n            }\n        });\n\n        this.nodeClick.emit(node);\n    }\n\n    /** @hidden */\n    _onNodeAdd(node: ApprovalNode): void {\n        this.afterNodeAdd.emit(node);\n    }\n\n    /** @hidden */\n    _onNodeEdit(node: ApprovalNode): void {\n        this.afterNodeEdit.emit(node);\n    }\n\n    /** @hidden */\n    _onNodeSelectionChange(event: GridListSelectionEvent<ApprovalGraphNode>): void {\n        this._graph.columns.forEach((column) => {\n            column.nodes.forEach((node) => {\n                node.selected = !!event.selection.find((_node) => _node.id === node.id);\n            });\n        });\n    }\n\n    /** @hidden Watcher's avatar click handler */\n    _onWatcherClick(watcher: ApprovalUser, event: Event): void {\n        event.preventDefault();\n        this._dialogService.open<ApprovalFlowApproverDetailsDialogRefData>(ApprovalFlowApproverDetailsComponent, {\n            data: {\n                watcher,\n                ...this._defaultDialogOptions\n            }\n        });\n    }\n\n    /** Retrive metadata by node id */\n    getNodeMetadataByNodeId(nodeId: string): ApprovalGraphNodeMetadata {\n        return this._graphMetadata[nodeId];\n    }\n\n    /** Scroll to the next horizontal slide */\n    nextSlide(dir = 1): void {\n        const threshold = 1;\n\n        let pos: number;\n\n        if (dir === 1) {\n            const lastStep = this._carouselStepsRight === 1;\n            const nextStep = this._carouselStepsCount - this._carouselStepsRight + 1;\n            const visibleRightPoint = this._carouselStepSize * nextStep + (lastStep ? 0 : threshold);\n            pos = visibleRightPoint - this._graphEl.nativeElement.clientWidth;\n        } else {\n            const lastStep = this._carouselStepsLeft === 1;\n            const nextStep = this._carouselStepsLeft - 1;\n            pos = this._carouselStepSize * nextStep - (lastStep ? 0 : threshold);\n        }\n\n        this._setScrollPosition(pos);\n\n        this._cdr.detectChanges();\n    }\n\n    /** @hidden */\n    _setScrollPosition(pos: number): void {\n        this._graphContainerEl.nativeElement.scrollTo({\n            left: pos,\n            behavior: 'smooth'\n        });\n    }\n\n    /** @hidden Handle node keydown and focus other node based on which key is pressed */\n    _onNodeKeyDown(event: KeyboardEvent, node: ApprovalGraphNode): void {\n        if (!KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW])) {\n            return;\n        }\n\n        const { nodeIndex, columnIndex } = this._graphMetadata[node.id];\n\n        event.preventDefault();\n\n        let nextFocusTarget: ApprovalGraphNode | undefined;\n\n        if (typeof nodeIndex === 'number' && typeof columnIndex === 'number') {\n            if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n                if (nodeIndex > 0) {\n                    nextFocusTarget = this._getNextVerticalNode(nodeIndex, columnIndex, 'up');\n                }\n            } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n                nextFocusTarget = this._getNextVerticalNode(nodeIndex, columnIndex, 'down');\n            } else if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n                nextFocusTarget = this._getNextHorizontalNode(nodeIndex, columnIndex, this.rtl() ? 'right' : 'left');\n            } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n                nextFocusTarget = this._getNextHorizontalNode(nodeIndex, columnIndex, this.rtl() ? 'left' : 'right');\n            }\n        }\n\n        if (nextFocusTarget) {\n            this._focusNode(nextFocusTarget);\n        }\n    }\n\n    /** @hidden Fetch all necessary data and enter edit mode */\n    _enterEditMode(): void {\n        // there's no support for searching in multi-input, so grabbing all watchers\n        // triggering initial loading of data in data sources\n        this.watcherDataSource.match();\n        this._editModeInitSub = this.watcherDataSource.open().subscribe((watchers) => {\n            this._usersForWatchersList = watchers;\n            this._selectedWatchers = this._approvalProcess.watchers;\n            this._selectedWatcherIds = this._selectedWatchers.map((w) => w.id);\n            this._isEditMode = true;\n            this._initialApprovalProcess = structuredClone(this._approvalProcess);\n            this._cdr.detectChanges();\n        });\n        this._subscriptions.add(this._editModeInitSub);\n    }\n\n    /** @hidden Send update approval process calls to DataSource and exit edit mode*/\n    _saveEditModeChanges(): void {\n        this._editModeInitSub?.unsubscribe();\n        this.watcherDataSource.close();\n\n        this._initialApprovalProcess = undefined;\n        this._isEditMode = false;\n        this._messages = [];\n\n        const updated = {\n            ...this._approvalProcess,\n            watchers: this._selectedWatchers\n        };\n\n        this._buildView(updated);\n\n        this.valueChange.emit(updated);\n    }\n\n    /** @hidden Restore initial approval flow state and exit edit mode */\n    _exitEditMode(): void {\n        this._editModeInitSub?.unsubscribe();\n        this.watcherDataSource.close();\n\n        this._approvalProcess = structuredClone(this._initialApprovalProcess!);\n        this._initialApprovalProcess = undefined;\n        this._isEditMode = false;\n        this._messages = [];\n\n        this._buildView(this._approvalProcess);\n    }\n\n    /** @hidden */\n    _watchersSelectionChanged(selectedIds: ApprovalUser['id'][]): void {\n        const idsSet = new Set(selectedIds);\n        // updating watchers selection\n        // since it's possible \"_usersForWatchersList\" might not contain all selected values,\n        // determine current selection based on what's already selected and \"_usersForWatchersList\"\n        this._selectedWatchers = uniqBy(\n            this._selectedWatchers.concat(this._usersForWatchersList).filter((user) => idsSet.has(user.id)),\n            (u) => u.id\n        );\n    }\n\n    /** @hidden Restore previously saved approval process state */\n    _undoLastAction(): void {\n        this._approvalProcess = structuredClone(this._previousApprovalProcess!);\n        this._previousApprovalProcess = undefined;\n\n        this._buildView(this._approvalProcess);\n    }\n\n    /** @hidden Open add node dialog */\n    _addNode(source: ApprovalGraphNode, type: ApprovalFlowNodeTarget): void {\n        const showNodeTypeSelect = type === 'before' && !source.actionsConfig?.disableAddParallel;\n\n        const dialog = this._dialogService.open<AddNodeDialogRefData>(\n            ApprovalFlowAddNodeComponent,\n            {\n                data: {\n                    nodeTarget: type,\n                    showNodeTypeSelect,\n                    node: Object.assign(getBlankApprovalGraphNode(), { blank: false }),\n                    checkDueDate: this.checkDueDate,\n                    ...this._defaultDialogOptions\n                }\n            },\n            this._injector\n        );\n\n        dialog.afterClosed.subscribe((data: AddNodeDialogFormData) => {\n            if (!data) {\n                return;\n            }\n\n            const { node, nodeType, toNextSerial } = data;\n\n            if (!node) {\n                return;\n            }\n\n            this._cacheCurrentApprovalProcess();\n\n            node.id = `tempId${(Math.random() * 1000).toFixed()}`;\n\n            switch (type) {\n                case 'empty':\n                    this._enterEditMode();\n                    break;\n\n                case 'before':\n                    if (nodeType === APPROVAL_FLOW_NODE_TYPES.SERIAL) {\n                        node.targets = [source.id];\n                        this._replaceTargets(source.id, [node.id]);\n                    }\n\n                    if (nodeType === APPROVAL_FLOW_NODE_TYPES.PARALLEL) {\n                        this._processAddingParallelNode(node, source, toNextSerial);\n                    }\n\n                    break;\n\n                case 'before-all':\n                    node.targets = this._graph.columns[0].nodes.map((_node) => _node.id);\n                    break;\n\n                case 'after':\n                    node.targets = source.targets;\n                    source.targets = [node.id];\n                    break;\n\n                case 'after-all': {\n                    const targetParents = this._graphMetadata[source.targets[0]]?.parents;\n\n                    if (targetParents) {\n                        node.targets = source.targets;\n                        this._replaceTargets(source.id, [node.id]);\n\n                        this._approvalProcess.nodes = this._approvalProcess.nodes.filter(\n                            (_node) => _node.id !== source.id\n                        );\n                    } else {\n                        this._graph.columns[this._graph.columns.length - 1].nodes.forEach((_node) =>\n                            _node.targets.push(node.id)\n                        );\n                    }\n\n                    break;\n                }\n                case 'parallel':\n                    this._processAddingParallelNode(node, source, toNextSerial);\n                    break;\n            }\n\n            this._showMessage(node.approvalTeamId ? 'teamAddSuccess' : 'approverAddSuccess');\n            this._approvalProcess.nodes.push(node);\n\n            this._buildView(this._approvalProcess);\n            this._onNodeAdd(node);\n        });\n    }\n\n    /** @hidden Open edit node dialog */\n    _editNode(node: ApprovalNode): void {\n        const dialog = this._dialogService.open<AddNodeDialogRefData>(\n            ApprovalFlowAddNodeComponent,\n            {\n                data: {\n                    isEdit: true,\n                    node: Object.assign({}, node),\n                    checkDueDate: this.checkDueDate,\n                    ...this._defaultDialogOptions\n                }\n            },\n            this._injector\n        );\n\n        dialog.afterClosed.subscribe((data: { node: ApprovalNode }) => {\n            const updatedNode = data?.node;\n\n            if (!updatedNode) {\n                return;\n            }\n\n            this._cacheCurrentApprovalProcess();\n            this._updateNode(updatedNode);\n            this._showMessage('nodeEdit');\n            this._buildView(this._approvalProcess);\n            this._onNodeEdit(node);\n        });\n    }\n\n    /** @hidden \"Delete\" button click handler */\n    _onNodeDelete(nodeToDelete: ApprovalNode): void {\n        this._cacheCurrentApprovalProcess();\n        this._deleteNode(nodeToDelete);\n        this._showMessage(nodeToDelete.approvalTeamId ? 'teamRemove' : 'nodeRemove');\n        this._buildView(this._approvalProcess);\n    }\n\n    /** @hidden */\n    _deleteSelectedNodes(): void {\n        this._cacheCurrentApprovalProcess();\n\n        const nodesToDelete = this._nodeComponents\n            .filter((nodeComponent) => nodeComponent._isSelected)\n            .map((nodeComponent) => nodeComponent.node);\n\n        nodesToDelete.forEach((node) => {\n            this._deleteNode(node);\n            this._buildView(this._approvalProcess);\n        });\n\n        this._showMessage('nodesRemove');\n    }\n\n    /** @hidden Node drag move handler, used to check if need to highlight a drop zone rectangle */\n    _onNodeDragMoved(node: ApprovalGraphNode): void {\n        const draggedNodeDimensions = this._nodeComponents\n            .find((comp) => comp.node === node)\n            ?._nativeElement.getBoundingClientRect();\n\n        if (!draggedNodeDimensions) {\n            return;\n        }\n\n        this._nodeComponents.forEach((component) => {\n            if (component.node !== node && Boolean(component._dropZones.length)) {\n                component._checkIfNodeDraggedInDropZone(draggedNodeDimensions);\n            }\n        });\n    }\n\n    /** @hidden */\n    _focusNode(node: ApprovalGraphNode): void {\n        const nodeToFocus = this._nodeComponents.find((comp) => comp.node === node);\n\n        if (!nodeToFocus) {\n            return;\n        }\n        this._moveColInView(node.colIndex ?? 0);\n        nodeToFocus._focus({ preventScroll: true });\n    }\n\n    /** @hidden Node drop handler */\n    _onNodeDrop(nodeToDrop: ApprovalGraphNode, drag: CdkDrag): void {\n        drag.reset();\n\n        setTimeout(() => (this._dragDropInProgress = false));\n\n        const dropTarget = this._nodeComponents.find((n) => n._isAnyDropZoneActive);\n\n        if (!dropTarget) {\n            return;\n        }\n\n        this._cacheCurrentApprovalProcess();\n\n        const placement = dropTarget._activeDropZones[0].placement;\n\n        this._nodeComponents.forEach((n) => n._deactivateDropZones());\n\n        if (placement === 'after') {\n            this._deleteNode(nodeToDrop);\n            this._buildView(this._approvalProcess);\n\n            const nextNode = getGraphNodes(this._graph).find((node) => node.id === dropTarget.node.targets[0]);\n\n            if (nextNode?.blank) {\n                this._deleteNode(nextNode);\n                this._buildView(this._approvalProcess);\n            }\n\n            nodeToDrop.targets =\n                this._approvalProcess.nodes.find((node) => node.id === dropTarget.node.id)?.targets ?? [];\n            dropTarget.node.targets = [nodeToDrop.id];\n\n            this._finishDragDropProcess(nodeToDrop);\n        } else if (placement === 'before') {\n            const dialog = this._dialogService.open(ApprovalFlowSelectTypeComponent, undefined, this._injector);\n\n            dialog.afterClosed.subscribe((data: SelectTypeDialogFormData) => {\n                if (!data) {\n                    return;\n                }\n\n                const { type, toNextSerial } = data;\n\n                this._deleteNode(nodeToDrop);\n                this._buildView(this._approvalProcess);\n\n                if (type === APPROVAL_FLOW_NODE_TYPES.SERIAL) {\n                    this._replaceTargets(dropTarget.node.id, [nodeToDrop.id]);\n                    nodeToDrop.targets = [dropTarget.node.id];\n                }\n\n                if (type === APPROVAL_FLOW_NODE_TYPES.PARALLEL) {\n                    this._processAddingParallelNode(nodeToDrop, dropTarget.node, toNextSerial);\n                }\n\n                this._finishDragDropProcess(nodeToDrop);\n            });\n        } else if (placement === 'before-all') {\n            this._deleteNode(nodeToDrop);\n\n            const firstColumnNodes = this._graph.columns[0].nodes;\n            nodeToDrop.targets = firstColumnNodes.map((node) => node.id);\n\n            this._finishDragDropProcess(nodeToDrop);\n        } else if (placement === 'after-all') {\n            this._deleteNode(nodeToDrop);\n            this._buildView(this._approvalProcess);\n\n            nodeToDrop.targets = [...dropTarget.node.targets];\n\n            if (dropTarget.node.targets.length === 0) {\n                const lastColumnNodes = this._graph.columns[this._graph.columns.length - 1].nodes;\n                lastColumnNodes.forEach((node) => node.targets.push(nodeToDrop.id));\n            } else {\n                this._approvalProcess.nodes = this._approvalProcess.nodes.filter(\n                    (node) => node.id !== dropTarget.node.id\n                );\n                this._replaceTargets(dropTarget.node.id, [nodeToDrop.id]);\n            }\n\n            this._finishDragDropProcess(nodeToDrop);\n        }\n    }\n\n    /** @hidden */\n    private _moveColInView(colIndex: number): any {\n        const node = this._graphEl.nativeElement.children[colIndex].firstElementChild;\n        if (!node) {\n            return;\n        }\n\n        const { x: nodeX, width } = node.getBoundingClientRect();\n\n        const delta = this._graphContainerEl.nativeElement.getBoundingClientRect().x;\n\n        const left = nodeX - delta;\n        const right = left + width;\n\n        if (left < 0) {\n            this._setScrollPosition(this._graphContainerEl.nativeElement.scrollLeft + left);\n        } else if (right > this._graphEl.nativeElement.clientWidth) {\n            this._setScrollPosition(\n                this._graphContainerEl.nativeElement.scrollLeft + right - this._graphEl.nativeElement.clientWidth\n            );\n        }\n    }\n\n    /** @hidden */\n    private _finishDragDropProcess(nodeToDrop: ApprovalGraphNode): void {\n        this._approvalProcess.nodes.push(nodeToDrop);\n        this._buildView(this._approvalProcess);\n    }\n\n    /** @hidden */\n    private _showMessage(type: ApprovalFlowMessageType): void {\n        this._messages = [{ type }];\n    }\n\n    /** @hidden Build Approval Flow graph and render it */\n    private _buildView(approvalProcess: ApprovalProcess): void {\n        if (!approvalProcess.nodes) {\n            approvalProcess.nodes = [];\n        }\n        if (!approvalProcess.watchers) {\n            approvalProcess.watchers = [];\n        }\n        this._approvalProcess = approvalProcess;\n        this._graph = generateApprovalFlowGraph(this._approvalProcess.nodes);\n\n        if (this.removeSpaceNode) {\n            this._graph.columns = this.removeSpaceNodesFromColumns(this._graph.columns);\n        }\n\n        if (this._graph.errors) {\n            this._showMessage('error');\n            return;\n        }\n\n        this._graphMetadata = generateApprovalFlowGraphMetadata(this._graph);\n\n        const nodes = getGraphNodes(this._graph);\n        this._approvalProcess.nodes = nodes.filter((node) => !node.space);\n        this._multipleRootNodes = nodes.filter((node) => this._graphMetadata[node.id].isRoot).length > 1;\n        this._multipleFinalNodes = nodes.filter((node) => this._graphMetadata[node.id].isFinal).length > 1;\n\n        this._cdr.detectChanges();\n        this._gridList?.clearSelection();\n\n        if (!this._isEditMode) {\n            this._setScrollPosition(0);\n        }\n    }\n\n    /** @hidden Listen window resize and distribute cards on column change */\n    private _listenOnResize(): void {\n        this._subscriptions.add(\n            merge(fromEvent(window, 'resize'), fromEvent(this._graphContainerEl.nativeElement, 'scroll'))\n                .pipe(throttleTime(50, undefined, { leading: true, trailing: true }))\n                .subscribe(() => {\n                    this._cdr.detectChanges();\n                })\n        );\n    }\n\n    /** @hidden Update node object in local approval process data structure */\n    private _updateNode(node: ApprovalNode): void {\n        const nodeIndex = this._approvalProcess.nodes.findIndex((n) => n.id === node.id);\n\n        if (nodeIndex > -1) {\n            this._approvalProcess.nodes[nodeIndex] = node;\n        }\n    }\n\n    /** @hidden Delete node object in local approval process data structure */\n    private _deleteNode(nodeToDelete: ApprovalNode): void {\n        const nodesToDelete = [nodeToDelete];\n        const graphNodes = getGraphNodes(this._graph);\n        let currNode = graphNodes.find((node) => node.id === nodeToDelete.id);\n        let nextNode: ApprovalGraphNode | undefined;\n\n        do {\n            if (currNode?.targets.length === 1) {\n                nextNode = graphNodes.find((node) => node.id === currNode?.targets[0]);\n\n                if (nextNode?.blank && this._graphMetadata[nextNode.id].parents.length === 1) {\n                    nodesToDelete.push(nextNode);\n\n                    currNode = nextNode;\n                    nextNode = graphNodes.find((node) => node.id === currNode?.targets[0]);\n                }\n            }\n        } while (nextNode?.blank && this._graphMetadata[nextNode.id].parents.length === 1);\n\n        const parent = this._graphMetadata[nodeToDelete.id].parents[0];\n        const target = nodeToDelete.targets[0];\n        const isParentParallelStart = this._graphMetadata[parent?.id]?.parallelStart;\n        const isTargetParallelEnd = this._graphMetadata[target]?.parallelEnd;\n        const targets =\n            (isParentParallelStart && isTargetParallelEnd) || nodesToDelete.length > 1 ? [] : (currNode?.targets ?? []);\n\n        this._replaceTargets(nodeToDelete.id, targets);\n\n        this._approvalProcess.nodes = this._approvalProcess.nodes.filter((node) => !nodesToDelete.includes(node));\n    }\n\n    /** @hidden */\n    private _addParallelTargets(targetNodeId: string, nodeIdToAdd: string): void {\n        this._approvalProcess.nodes.forEach((node) => {\n            if (isNodeTargetsIncludeId(node, targetNodeId)) {\n                node.targets.push(nodeIdToAdd);\n            }\n        });\n    }\n\n    /** @hidden Replace all occurrences of \"idToReplace\" in all nodes' \"targets\" with ones in \"replaceWith\" array */\n    private _replaceTargets(IdToReplace: string, replaceWithId: string[]): void {\n        this._approvalProcess.nodes.forEach((n) => {\n            if (isNodeTargetsIncludeId(n, IdToReplace)) {\n                n.targets = n.targets.filter((_id) => _id !== IdToReplace);\n                n.targets.push(...replaceWithId);\n            }\n        });\n    }\n\n    /** @hidden Save current state of approval process data to be able to undo an action made in edit mode */\n    private _cacheCurrentApprovalProcess(): void {\n        this._previousApprovalProcess = structuredClone(this._approvalProcess);\n    }\n\n    /** @hidden */\n    private _getNextHorizontalNode = (\n        nodeIndex: number,\n        columnIndex: number,\n        direction: 'left' | 'right'\n    ): ApprovalGraphNode | undefined => {\n        const indexDiff = direction === 'right' ? 1 : -1;\n        const nextColumn = this._graph.columns[columnIndex + indexDiff];\n        const nextNode = nextColumn?.nodes[nodeIndex];\n\n        if (!nextNode) {\n            return undefined;\n        }\n\n        if (nextNode.blank || nextNode.space) {\n            return this._getNextHorizontalNode(nodeIndex, columnIndex + indexDiff, direction);\n        }\n\n        return nextNode;\n    };\n\n    /** @hidden */\n    private _getNextVerticalNode = (\n        nodeIndex: number,\n        columnIndex: number,\n        direction: 'up' | 'down'\n    ): ApprovalGraphNode | undefined => {\n        const indexDiff = direction === 'down' ? 1 : -1;\n        const currColumn = this._graph.columns[columnIndex];\n        const nextNode = currColumn.nodes[nodeIndex + indexDiff];\n\n        if (!nextNode) {\n            return undefined;\n        }\n\n        if (nextNode.blank || nextNode.space) {\n            return this._getNextVerticalNode(nodeIndex + indexDiff, columnIndex, direction);\n        }\n\n        return nextNode;\n    };\n\n    /** @hidden */\n    private get _carouselStepSize(): number {\n        return this._graphEl.nativeElement.scrollWidth / this._carouselStepsCount;\n    }\n\n    /** @hidden */\n    get _scrollDiff(): number {\n        if (!this._graphEl) {\n            return 0;\n        }\n        return this._graphEl.nativeElement.scrollWidth - this._graphEl.nativeElement.clientWidth;\n    }\n\n    /** @hidden */\n    get _carouselStepsCount(): number {\n        return this._graphEl.nativeElement.children.length;\n    }\n\n    /** @hidden */\n    get _carouselStepsLeft(): number {\n        return Math.ceil(this._graphContainerEl.nativeElement.scrollLeft / this._carouselStepSize);\n    }\n\n    /** @hidden */\n    get _carouselStepsRight(): number {\n        return Math.ceil(\n            (this._scrollDiff - Math.round(this._graphContainerEl.nativeElement.scrollLeft)) / this._carouselStepSize\n        );\n    }\n\n    /** @hidden */\n    private get _defaultDialogOptions(): DefaultDialogOptions {\n        return {\n            teamDataSource: this.teamDataSource,\n            userDataSource: this.userDataSource,\n            userDetailsTemplate: this.userDetailsTemplate,\n            rtl: this.rtl()\n        };\n    }\n\n    /** @hidden */\n    private _findSerialNode(yIndex?: number, targets?: string[]): string[] {\n        const targetIsParent =\n            Number.isInteger(yIndex) &&\n            targets?.some((targetId) => {\n                const nodeIndex = this._graphMetadata[targetId]?.nodeIndex;\n                return Number.isInteger(nodeIndex) && nodeIndex! <= yIndex! - 1;\n            });\n\n        if (targetIsParent) {\n            return targets ?? [];\n        }\n\n        const targetNode = this._approvalProcess.nodes.find((node) => node.id === targets?.[0]);\n        return this._findSerialNode(yIndex, targetNode?.targets);\n    }\n\n    /** @hidden */\n    private _processAddingParallelNode(\n        addedNode: ApprovalGraphNode,\n        sourceNode: ApprovalGraphNode,\n        toNextSerial = false\n    ): void {\n        addedNode.targets = sourceNode.targets;\n\n        this._addParallelTargets(sourceNode.id, addedNode.id);\n\n        if (toNextSerial) {\n            let yIndex = this._graphMetadata[sourceNode.id].nodeIndex;\n            let targets = sourceNode.targets;\n\n            if (yIndex === 0) {\n                const sourceNodeMetadata = this._graphMetadata[sourceNode.id];\n                const columnNodes = this._graph.columns?.[sourceNodeMetadata.columnIndex!]?.nodes;\n                const nextParallelNode = columnNodes.find((node, index) => index > 0 && !node.space);\n\n                if (nextParallelNode) {\n                    yIndex = this._graphMetadata[nextParallelNode.id].columnIndex;\n                    targets = nextParallelNode.targets;\n\n                    addedNode.targets = this._findSerialNode(yIndex, targets);\n                    return;\n                }\n\n                addedNode.targets = sourceNode.targets;\n                return;\n            }\n\n            addedNode.targets = this._findSerialNode(yIndex, targets);\n        }\n    }\n\n    /** @hidden */\n    private _setupDataSourceSubscription(): void {\n        const sub = this._dataSourceChanged$\n            .pipe(\n                startWith(null),\n                switchMap(() => {\n                    const loadingStates = [this.teamDataSource, this.userDataSource, this.watcherDataSource]\n                        .filter(Boolean)\n                        .map((ds) =>\n                            merge(ds.onDataRequested().pipe(mapTo(true)), ds.onDataReceived().pipe(mapTo(false))).pipe(\n                                startWith(ds.isDataLoading)\n                            )\n                        );\n                    return combineLatest(loadingStates);\n                }),\n                map((loadingStates) => loadingStates.some(Boolean)),\n                distinctUntilChanged()\n            )\n            .subscribe((someLoading) => {\n                if (someLoading) {\n                    this.onDataRequested.emit();\n                } else {\n                    this.onDataReceived.emit();\n                }\n            });\n        this._subscriptions.add(sub);\n    }\n\n    /** @hidden */\n    private removeSpaceNodesFromColumns(columns: ApprovalGraphColumn[]): ApprovalGraphColumn[] {\n        const filteredColumns: ApprovalGraphColumn[] = [];\n\n        columns.forEach((column) => {\n            const filteredNodes = column.nodes.filter((node) => !node.space);\n\n            const updatedColumn = {\n                ...column, // Preserve other properties of the column\n                nodes: filteredNodes // Use the filtered list of nodes\n            };\n\n            filteredColumns.push(updatedColumn);\n        });\n\n        return filteredColumns;\n    }\n}\n\ninterface DefaultDialogOptions {\n    teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n    userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n    userDetailsTemplate: TemplateRef<any>;\n    rtl: boolean;\n}\n","<ng-container fdCompact>\n    <fdp-approval-flow-messages\n        [(messages)]=\"_messages\"\n        [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n        (undoLastAction)=\"_undoLastAction()\"\n    ></fdp-approval-flow-messages>\n    <fd-grid-list\n        #gridList\n        class=\"fdp-approval-flow__toolbar\"\n        [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n        (selectionChange)=\"_onNodeSelectionChange($event)\"\n    >\n        <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)()\">\n            <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n            @if (isEditAvailable) {\n                <fdp-approval-flow-toolbar-actions\n                    [graph]=\"_graph\"\n                    [selectedNodes]=\"_selectedNodes\"\n                    [graphMetadata]=\"_graphMetadata\"\n                    [isEditMode]=\"_isEditMode\"\n                    (enterEditMode)=\"_enterEditMode()\"\n                    (addNode)=\"_addNode($event.node, $event.target)\"\n                    (editSelectedNode)=\"_editNode($event)\"\n                    (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n                ></fdp-approval-flow-toolbar-actions>\n            }\n        </fd-grid-list-title-bar>\n        @if (_approvalProcess.watchers?.length || _isEditMode) {\n            <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n                <p class=\"fdp-approval-flow__watchers-title\">\n                    {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate)() }}\n                </p>\n                @if (!_isEditMode) {\n                    @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n                        <fd-avatar\n                            size=\"xs\"\n                            [image]=\"watcher.imgUrl || ''\"\n                            [label]=\"watcher.name\"\n                            [clickable]=\"true\"\n                            [circle]=\"true\"\n                            (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n                        ></fd-avatar>\n                    }\n                } @else {\n                    <div class=\"fdp-approval-flow__watchers-input-container\">\n                        <fd-multi-input\n                            [dropdownValues]=\"_usersForWatchersList\"\n                            [placeholder]=\"('platformApprovalFlow.watchersInputPlaceholder' | fdTranslate)()\"\n                            [displayFn]=\"_displayUserFn\"\n                            [valueFn]=\"_userValueFn\"\n                            [showAllButton]=\"true\"\n                            [(ngModel)]=\"_selectedWatcherIds\"\n                            (ngModelChange)=\"_watchersSelectionChanged($event)\"\n                        ></fd-multi-input>\n                    </div>\n                }\n            </div>\n        }\n        @if (!_graph.errors) {\n            @if (_graph.columns.length) {\n                <div\n                    class=\"fdp-approval-flow__container\"\n                    [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n                    [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n                >\n                    @if (_scrollDiff > 0) {\n                        <div\n                            class=\"fdp-approval-flow-carousel-controls\"\n                            [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n                        >\n                            @if (_carouselStepsLeft > 0) {\n                                <button\n                                    class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n                                    [attr.aria-label]=\"('platformApprovalFlow.prevButtonAriaLabel' | fdTranslate)()\"\n                                    (click)=\"nextSlide(-1)\"\n                                >\n                                    <fd-icon [glyph]=\"prevSlideArrowGlyph()\"></fd-icon>\n                                    {{ _carouselStepsLeft }}\n                                </button>\n                            }\n                            @if (_carouselStepsRight > 0) {\n                                <button\n                                    class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n                                    [attr.aria-label]=\"('platformApprovalFlow.nextButtonAriaLabel' | fdTranslate)()\"\n                                    (click)=\"nextSlide()\"\n                                >\n                                    {{ _carouselStepsRight }}\n                                    <fd-icon [glyph]=\"nextSlideArrowGlyph()\"></fd-icon>\n                                </button>\n                            }\n                        </div>\n                    }\n                    <div\n                        class=\"fdp-approval-flow__graph-container\"\n                        [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n                        [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n                        [class.fd-scrollbar]=\"true\"\n                        #graphContainerEl\n                    >\n                        <div\n                            class=\"fdp-approval-flow__graph\"\n                            #graphEl\n                            [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n                        >\n                            @for (column of _graph.columns; track column; let columnIndex = $index) {\n                                <div class=\"fdp-approval-flow__graph-column\">\n                                    @for (\n                                        node of column.nodes;\n                                        track _trackByFn(nodeIndex, node);\n                                        let nodeIndex = $index\n                                    ) {\n                                        <fdp-approval-flow-node\n                                            cdkDrag\n                                            #approvalFlowNode\n                                            [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n                                            [node]=\"node\"\n                                            [meta]=\"_graphMetadata[node.id]\"\n                                            [isEdit]=\"_isEditMode\"\n                                            [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n                                            [checkDueDate]=\"checkDueDate\"\n                                            [dueDateThreshold]=\"dueDateThreshold\"\n                                            [renderArrow]=\"columnIndex > 0\"\n                                            [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n                                            [approvalStatusTemplate]=\"approvalStatusTemplate\"\n                                            [statusColorMapping]=\"statusColorMapping\"\n                                            (onAdd)=\"_addNode(node, $event)\"\n                                            (onEdit)=\"_editNode(node)\"\n                                            (onDelete)=\"_onNodeDelete(node)\"\n                                            (keydown)=\"_onNodeKeyDown($event, node)\"\n                                            (cdkDragStarted)=\"_dragDropInProgress = true\"\n                                            (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n                                            (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n                                        >\n                                            <!-- Trick with using projection to make grid list items visible for the grid list -->\n                                            <fd-grid-list-item\n                                                type=\"active\"\n                                                [value]=\"node\"\n                                                [selected]=\"!!node.selected\"\n                                                [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n                                                [disableToolbarClick]=\"true\"\n                                                class=\"fdp-approval-flow__graph-node-inner\"\n                                                [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n                                                (press)=\"_onNodeClick(node)\"\n                                            >\n                                                <fd-grid-list-item-toolbar>\n                                                    @if (_isEditMode) {\n                                                        <ng-template\n                                                            [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n                                                        ></ng-template>\n                                                    }\n                                                </fd-grid-list-item-toolbar>\n                                                <fd-avatar\n                                                    fd-grid-list-item-image\n                                                    [image]=\"\n                                                        node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n                                                    \"\n                                                    [label]=\"node.approvers.length > 1 ? node.description : null\"\n                                                    size=\"xs\"\n                                                    [circle]=\"true\"\n                                                ></fd-avatar>\n                                                <ng-template fd-grid-list-item-body>\n                                                    <ng-template\n                                                        [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n                                                    ></ng-template>\n                                                </ng-template>\n                                            </fd-grid-list-item>\n                                        </fdp-approval-flow-node>\n                                    }\n                                </div>\n                            }\n                        </div>\n                    </div>\n                </div>\n            } @else {\n                <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n                    <figcaption fd-illustrated-message-figcaption>\n                        <h3 fd-illustrated-message-title>\n                            {{ ('platformApprovalFlow.emptyTitle' | fdTranslate)() }}\n                        </h3>\n                        <p fd-illustrated-message-text>\n                            {{ ('platformApprovalFlow.emptyHint' | fdTranslate)() }}\n                        </p>\n                    </figcaption>\n                </figure>\n                <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n                <div [style.display]=\"'none'\">\n                    <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        width=\"128\"\n                        height=\"128\"\n                        viewBox=\"0 0 128 128\"\n                        id=\"sapIllus-Spot-NoData\"\n                    >\n                        <path\n                            d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n                            class=\"sapIllus_PatternShadow\"\n                            [style.fill]=\"'var(--sapIllus_PatternShadow)'\"\n                        ></path>\n                        <path\n                            d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n                            class=\"sapIllus_ObjectFillColor\"\n                            [style.fill]=\"'var(--sapIllus_ObjectFillColor)'\"\n                        ></path>\n                        <path\n                            d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n                            class=\"sapIllus_BrandColorSecondary\"\n                            [style.fill]=\"'var(--sapIllus_BrandColorSecondary)'\"\n                        ></path>\n                        <path\n                            d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n                            class=\"sapIllus_Layering1\"\n                            [style.fill]=\"'var(--sapIllus_Layering1)'\"\n                        ></path>\n                        <path\n                            d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n                            class=\"sapIllus_Layering1\"\n                            [style.fill]=\"'var(--sapIllus_Layering1)'\"\n                        ></path>\n                        <path\n                            d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n                            class=\"sapIllus_Layering1\"\n                            [style.fill]=\"'var(--sapIllus_Layering1)'\"\n                        ></path>\n                        <path\n                            d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n                            class=\"sapIllus_StrokeDetailColor\"\n                            [style.fill]=\"'var(--sapIllus_StrokeDetailColor)'\"\n                        ></path>\n                    </svg>\n                </div>\n            }\n        }\n    </fd-grid-list>\n    @if (_isEditMode) {\n        <div fd-bar>\n            <div fd-bar-right>\n                <fd-bar-element>\n                    <button\n                        fd-button\n                        [label]=\"('platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate)()\"\n                        fdType=\"emphasized\"\n                        [disabled]=\"disableSaveButton\"\n                        (click)=\"_saveEditModeChanges()\"\n                    ></button>\n                </fd-bar-element>\n                <fd-bar-element>\n                    <button\n                        fd-button\n                        [label]=\"('platformApprovalFlow.editModeExitButtonLabel' | fdTranslate)()\"\n                        fdType=\"transparent\"\n                        [disabled]=\"disableExitButton\"\n                        (click)=\"_exitEditMode()\"\n                    ></button>\n                </fd-bar-element>\n            </div>\n        </div>\n    }\n</ng-container>\n","import { NgModule } from '@angular/core';\n\nimport { ApprovalFlowAddNodeComponent } from './approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowApproverDetailsComponent } from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport { ApprovalFlowMessagesComponent } from './approval-flow-messages/approval-flow-messages.component';\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-node/approval-flow-drop-zone.directive';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport { ApprovalFlowSelectTypeComponent } from './approval-flow-select-type/approval-flow-select-type.component';\nimport { ApprovalFlowTeamListComponent } from './approval-flow-team-list/approval-flow-team-list.component';\nimport { ApprovalFlowToolbarActionsComponent } from './approval-flow-toolbar-actions/approval-flow-toolbar-actions.component';\nimport { ApprovalFlowUserDetailsComponent } from './approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from './approval-flow-user-list/approval-flow-user-list.component';\nimport { ApprovalFlowComponent } from './approval-flow.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n    imports: [\n        ApprovalFlowComponent,\n        ApprovalFlowNodeComponent,\n        ApprovalFlowApproverDetailsComponent,\n        ApprovalFlowAddNodeComponent,\n        ApprovalFlowUserListComponent,\n        ApprovalFlowUserDetailsComponent,\n        ApprovalFlowDropZoneDirective,\n        ApprovalFlowTeamListComponent,\n        ApprovalFlowSelectTypeComponent,\n        ApprovalFlowMessagesComponent,\n        ApprovalFlowToolbarActionsComponent\n    ],\n    exports: [ApprovalFlowComponent]\n})\nexport class PlatformApprovalFlowModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.ApprovalFlowAddNodeViewService","defaultId","i2"],"mappings":"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"}